--- gdc-4.4-1.063-4.4.7.orig/debian/lib32stdc++6.symbols.amd64
+++ gdc-4.4-1.063-4.4.7/debian/lib32stdc++6.symbols.amd64
@@ -0,0 +1,6 @@
+libstdc++.so.6 lib32stdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/gfortran-BV-doc.doc-base
+++ gdc-4.4-1.063-4.4.7/debian/gfortran-BV-doc.doc-base
@@ -0,0 +1,14 @@
+Document: gfortran-@BV@
+Title: The GNU Fortran Compiler 
+Author: Various
+Abstract: This manual documents how to run, install and port `gfortran',
+ as well as its new features and incompatibilities, and how to report bugs.
+Section: Programming/Fortran
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/fortran/gfortran.html
+Files: /usr/share/doc/gcc-@BV@-base/fortran/gfortran.html
+
+Format: info
+Index: /usr/share/info/gfortran-@BV@.info.gz
+Files: /usr/share/info/gfortran-@BV@*
--- gdc-4.4-1.063-4.4.7.orig/debian/gnat-BV.overrides
+++ gdc-4.4-1.063-4.4.7/debian/gnat-BV.overrides
@@ -0,0 +1 @@
+gnat-@BV@: quilt-build-dep-but-no-series-file
--- gdc-4.4-1.063-4.4.7.orig/debian/source.lintian-overrides.in
+++ gdc-4.4-1.063-4.4.7/debian/source.lintian-overrides.in
@@ -0,0 +1,2 @@
+@SRC@: invalid-arch-string-in-source-relation
+@SRC@: quilt-build-dep-but-no-series-file
--- gdc-4.4-1.063-4.4.7.orig/debian/README.gnat
+++ gdc-4.4-1.063-4.4.7/debian/README.gnat
@@ -0,0 +1,22 @@
+If you want to develop Ada programs and libraries on Debian, please
+read the Debian Policy for Ada:
+
+http://www.ada-france.org/debian/debian-ada-policy.html
+
+The default Ada compiler is and always will be the package `gnat'.
+Debian contains many programs and libraries compiled with it, which
+are all ABI-compatible.
+
+Starting with gnat-4.2, Debian provides both zero-cost and
+setjump/longjump versions of the run-time library.  The zero-cost
+exception handling mechanism is the default as it provides the best
+performance.  The setjump/longjump exception handling mechanism is new
+and only provided as a static library.  It is necessary to use this
+exception handling mechanism in distributed (annex E) programs.  If
+you wish to use the new sjlj library:
+
+1) call gnatmake with --RTS=sjlj
+2) call gnatbind with -static
+
+Do NOT link your programs with libgnat-4.2.so, because it uses the ZCX
+mechanism.
--- gdc-4.4-1.063-4.4.7.orig/debian/g++-BV-CRB.preinst.in
+++ gdc-4.4-1.063-4.4.7/debian/g++-BV-CRB.preinst.in
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+set -e
+
+if [ "$1" = "upgrade" ] || [ "$1" = "configure" ]; then
+    update-alternatives --quiet --remove @TARGET@-g++ /usr/bin/@TARGET@-g++-@BV@
+fi
+
+#DEBHELPER#
+
+exit 0
--- gdc-4.4-1.063-4.4.7.orig/debian/jdb.sh
+++ gdc-4.4-1.063-4.4.7/debian/jdb.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Placeholder script to fake a
+# JDK compatible JAVA_HOME directory.
+
+echo >&2 "This script is only a placeholder."
+echo >&2 "Some programs need a JDK rather than only a JRE to work."
+echo >&2 "They test for this tool to detect a JDK installation, but"
+echo >&2 "don't really need its functionality to work correctly."
--- gdc-4.4-1.063-4.4.7.orig/debian/dummy-man.1
+++ gdc-4.4-1.063-4.4.7/debian/dummy-man.1
@@ -0,0 +1,29 @@
+.TH @NAME@ 1 "May 24, 2003" @name@ "Debian Free Documentation"
+.SH NAME
+@name@ \- A program with a man page covered by the GFDL with invariant sections
+.SH SYNOPSIS
+@name@ [\fB\s-1OPTION\s0\fR] ... [\fI\s-1ARGS\s0\fR...]
+
+.SH DESCRIPTION
+
+\fB@name@\fR is documented by a man page, which is covered by the "GNU
+Free Documentation License" (GFDL) containing invariant sections.
+.P
+In November 2002, version 1.2 of the GNU Free Documentation License (GNU
+FDL) was released by the Free Software Foundation after a long period
+of consultation. Unfortunately, some concerns raised by members of the
+Debian Project were not addressed, and as such the GNU FDL can apply
+to works that do not pass the Debian Free Software Guidelines (DFSG),
+and may thus only be included in the non-free component of the Debian
+archive, not the Debian distribution itself.
+
+.SH "SEE ALSO"
+.BR http://gcc.gnu.org/onlinedocs/
+for the complete documentation,
+.BR http://lists.debian.org/debian-legal/2003/debian-legal-200304/msg00307.html
+for a proposed statement of Debian with respect to the GFDL,
+.BR gfdl(7)
+
+.SH AUTHOR
+This manual page was written by the Debian GCC maintainers,
+for the Debian GNU/Linux system.
--- gdc-4.4-1.063-4.4.7.orig/debian/lib32objc2.symbols
+++ gdc-4.4-1.063-4.4.7/debian/lib32objc2.symbols
@@ -0,0 +1,3 @@
+libobjc.so.2 lib32objc2 #MINVER#
+#include "libobjc2.symbols.common"
+ __gnu_objc_personality_v0@Base 4.2.1
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.defs
+++ gdc-4.4-1.063-4.4.7/debian/rules.defs
@@ -0,0 +1,1343 @@
+# -*- makefile -*-
+# definitions used in more than one Makefile / rules file
+
+# common vars
+SHELL		= /bin/bash -e	# brace expansion used in rules file
+PWD		:= $(shell pwd)
+srcdir		= $(PWD)/src
+builddir	= $(PWD)/build
+stampdir	= stamps
+
+distribution	:= $(shell echo "Debian")
+distrelease	:= $(shell echo "wheezy")
+
+# On non official archives, "lsb_release -cs" default to "n/a". Assume
+# sid in that case 
+ifeq ($(distrelease),n/a)
+distrelease	:= sid
+endif
+
+# creates {srcdir,builddir}_{hppa64,ia6432,spu}
+$(foreach x,srcdir builddir,$(foreach target,hppa64 ia6432 spu neon,$(eval \
+  $(x)_$(target) := $($(x))-$(target))))
+
+# for architecture dependent variables and changelog vars
+vafilt = $(subst $(2)=,,$(filter $(2)=%,$(1)))
+# for rules.sonames
+vafilt_defined = 1
+
+DPKG_VARS		:= $(shell dpkg-architecture)
+DEB_BUILD_GNU_TYPE	?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_GNU_TYPE)
+DEB_HOST_ARCH		?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH)
+DEB_HOST_GNU_CPU	?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_CPU)
+DEB_HOST_GNU_SYSTEM	?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_SYSTEM)
+DEB_HOST_GNU_TYPE	?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_TYPE)
+DEB_HOST_MULTIARCH	?= $(call vafilt,$(DPKG_VARS),DEB_HOST_MULTIARCH)
+
+CHANGELOG_VARS := $(shell dpkg-parsechangelog | \
+	sed -n 's/ /_/g;/^[^_]/s/^\([^:]*\):_\(.*\)/\1=\2/p')
+
+# the name of the source package
+PKGSOURCE := $(call vafilt,$(CHANGELOG_VARS),Source)
+# those are required here too
+SOURCE_VERSION := $(call vafilt,$(CHANGELOG_VARS),Version)
+DEB_VERSION := $(strip $(shell echo $(SOURCE_VERSION) | \
+        sed -e 's/.*://' -e 's/ds[0-9]*//'))
+# epoch used for gcc versions up to 3.3.x, now used for some remaining
+# libraries: libgcc1, libobjc1
+EPOCH := 1
+DEB_EVERSION := $(EPOCH):$(DEB_VERSION)
+BASE_VERSION := $(shell echo $(DEB_VERSION) | sed -e 's/\([1-9]\.[0-9]\).*-.*/\1/')
+
+ifneq (,$(findstring gdc,$(PKGSOURCE)))
+  BASE_VERSION := $(shell echo $(DEB_VERSION) | sed -e 's/.*-\([1-9]\.[0-9]\).*-.*/\1/')
+endif
+
+# push glibc stack traces into stderr
+export LIBC_FATAL_STDERR_=1
+
+# ---------------------------------------------------------------------------
+# set target
+# - GNU triplet via DEB_TARGET_GNU_TYPE
+# - Debian arch in debian/target
+# - Debian arch via DEB_GCC_TARGET or GCC_TARGET
+#
+# alias
+ifdef GCC_TARGET
+  DEB_GCC_TARGET := $(GCC_TARGET)
+endif
+ifdef DEB_TARGET_GNU_TYPE
+  TARGET_VARS := $(shell dpkg-architecture -f -t$(DEB_TARGET_GNU_TYPE) 2>/dev/null)
+else
+  # allow debian/target to be used instead of DEB_GCC_TARGET - this was requested
+  # by toolchain-source maintainer
+  DEBIAN_TARGET_FILE := $(strip $(if $(wildcard debian/target),$(shell cat debian/target 2>/dev/null)))
+  ifndef DEB_TARGET_ARCH
+    ifneq (,$(DEBIAN_TARGET_FILE))
+      DEB_TARGET_ARCH := $(DEBIAN_TARGET_FILE)
+    else
+      ifdef DEB_GCC_TARGET
+        DEB_TARGET_ARCH := $(DEB_GCC_TARGET)
+      else
+        DEB_TARGET_ARCH := $(DEB_HOST_ARCH)
+      endif
+    endif
+  endif
+  TARGET_VARS := $(shell dpkg-architecture -f -a$(DEB_TARGET_ARCH) 2>/dev/null)
+endif
+
+DEB_TARGET_ARCH		?= $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH)
+DEB_TARGET_ARCH_OS	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH_OS)
+DEB_TARGET_ARCH_CPU	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_ARCH_CPU)
+DEB_TARGET_GNU_CPU	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_CPU)
+DEB_TARGET_GNU_TYPE	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_TYPE)
+DEB_TARGET_GNU_SYSTEM	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_GNU_SYSTEM)
+DEB_TARGET_MULTIARCH	?= $(call vafilt,$(TARGET_VARS),DEB_HOST_MULTIARCH)
+
+ifeq ($(DEB_TARGET_ARCH),)
+  $(error Invalid architecure.)
+endif
+
+ifeq ($(DEB_TARGET_ARCH),i386)
+  ifneq (,$(filter $(distrelease),dapper hardy jaunty karmic lucid))
+    DEB_TARGET_GNU_CPU := i486
+    DEB_TARGET_GNU_TYPE := i486-linux-gnu
+  endif
+endif
+# including unversiond symlinks for binaries
+#with_unversioned = yes
+
+# ---------------------------------------------------------------------------
+# cross-compiler config
+# - typical cross-compiler
+# - reverse cross (built to run on the target)
+# - full canadian
+# - native
+#
+# build != host && host == target : reverse cross (REVERSE_CROSS == yes)
+# build == host && host != target : typical cross (DEB_CROSS == yes)
+# build != host && host != target : canadian (DEB_CROSS == yes)
+# build == host && host == target : native
+ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
+  ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_TARGET_GNU_TYPE))
+    DEB_CROSS = yes
+  else
+    REVERSE_CROSS = yes
+  endif
+else
+  ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_TARGET_GNU_TYPE))
+    DEB_CROSS = yes
+  else
+    # first ones are squeeze+1 and maverick
+    ifeq (,$(filter $(distrelease),lenny etch squeeze sid dapper hardy jaunty karmic lucid))
+      with_sysroot = /
+    endif
+  endif
+endif
+
+# ---------------------------------------------------------------------------
+# cross compiler support
+ifeq ($(DEB_CROSS),yes)
+  # TARGET: Alias to DEB_TARGET_ARCH (Debian arch name)
+  # TP: Target Prefix. Used primarily as a prefix for cross tool
+  #     names (e.g. powerpc-linux-gcc).
+  # TS: Target Suffix. Used primarily at the end of cross compiler
+  #     package names (e.g. gcc-powerpc).
+  # LS: Library Suffix. Used primarily at the end of cross compiler
+  #     library package names (e.g. libgcc-powerpc-cross).
+  DEB_TARGET_ALIAS ?= $(DEB_TARGET_GNU_TYPE)
+  TARGET := $(DEB_TARGET_ARCH)
+  TP :=  $(subst _,-,$(DEB_TARGET_GNU_TYPE))-
+  TS := -$(subst _,-,$(DEB_TARGET_ALIAS))
+  LS := -$(subst _,-,$(DEB_TARGET_ARCH))-cross
+
+  cross_bin_arch := -$(subst _,-,$(DEB_TARGET_ALIAS))
+  cross_lib_arch := -$(subst _,-,$(DEB_TARGET_ARCH))-cross
+  cmd_prefix := $(DEB_TARGET_GNU_TYPE)-
+
+  TARGET_ALIAS := $(DEB_TARGET_ALIAS)
+
+  lib_binaries := indep_binaries
+  cross_shlibdeps = $(SET_CROSS_LIB_PATH) ARCH=$(DEB_TARGET_ARCH) MAKEFLAGS="CC=something"
+else
+  TARGET_ALIAS := $(DEB_TARGET_GNU_TYPE)
+
+  ifeq ($(TARGET_ALIAS),i386-gnu)
+    TARGET_ALIAS := i586-gnu
+  endif
+
+  cmd_prefix :=
+
+  #ifeq ($(TARGET_ALIAS),i486-linux-gnu)
+  #  TARGET_ALIAS := i686-linux-gnu
+  #endif
+
+  TARGET_ALIAS := $(subst i386,i486,$(TARGET_ALIAS))
+
+  # configure as linux-gnu, not linux
+  #ifeq ($(findstring linux,$(TARGET_ALIAS))/$(findstring linux-gnu,$(TARGET_ALIAS)),linux/)
+  #  TARGET_ALIAS := $(TARGET_ALIAS)-gnu
+  #endif
+
+  # configure as linux, not linux-gnu
+  #TARGET_ALIAS := $(subst linux-gnu,linux,$(TARGET_ALIAS))
+
+  lib_binaries := arch_binaries
+  cross_shlibdeps :=
+endif
+
+printarch:
+	@echo DEB_TARGET_ARCH: $(DEB_TARGET_ARCH)
+	@echo DEB_TARGET_ARCH_OS: $(DEB_TARGET_ARCH_OS)
+	@echo DEB_TARGET_ARCH_CPU: $(DEB_TARGET_ARCH_CPU)
+	@echo DEB_TARGET_GNU_SYSTEM: $(DEB_TARGET_GNU_SYSTEM)
+	@echo TARGET_ALIAS: $(TARGET_ALIAS)
+	@echo TP: $(TP)
+	@echo TS: $(TS)
+
+# -------------------------------------------------------------------
+# bootstrap options
+ifdef WITH_BOOTSTRAP
+  # "yes" is the default and causes a 3-stage bootstrap.
+  # "no" means to just build the first stage, and not create the stage1
+  # directory.
+  # "lean" means a lean 3-stage bootstrap, i.e. delete each stage when no
+  # longer needed.
+  with_bootstrap = $(WITH_BOOTSTRAP)
+endif
+
+# -------------------------------------------------------------------
+# stage options
+ifdef DEB_STAGE
+  with_cdev := yes
+  separate_lang := yes
+  # "stage1" is minimal compiler with static libgcc
+  # "stage2" is minimal compiler with shared libgcc
+  ifeq ($(DEB_STAGE),stage1)
+    with_shared_libgcc := no
+  endif
+  ifeq ($(DEB_STAGE),stage2)
+    with_libgcc := yes
+    with_shared_libgcc := yes
+  endif
+endif
+
+ifeq ($(BACKPORT),true)
+  with_dev := no
+  with_source := yes
+  with_base_only := yes
+endif
+
+# -------------------------------------------------------------------
+# sysroot options
+ifdef WITH_SYSROOT
+  with_sysroot = $(WITH_SYSROOT)
+endif
+ifdef WITH_BUILD_SYSROOT
+  with_build_sysroot = $(WITH_BUILD_SYSROOT)
+endif
+
+# -------------------------------------------------------------------
+# for components configuration
+
+COMMA = ,
+SPACE = $(EMPTY) $(EMPTY)
+
+# lang= overwrites all of nolang=, overwrites all of WITHOUT_LANG
+
+DEB_LANG_OPT	:= $(filter lang=%,$(DEB_BUILD_OPTIONS))
+DEB_LANG	:= $(strip $(subst $(COMMA), ,$(patsubst lang=%,%,$(DEB_LANG_OPT))))
+DEB_NOLANG_OPT	:= $(filter nolang=%,$(DEB_BUILD_OPTIONS))
+DEB_NOLANG	:= $(strip $(subst $(COMMA), ,$(patsubst nolang=%,%,$(DEB_NOLANG_OPT))))
+lfilt	= $(strip $(if $(DEB_LANG), \
+		$(if $(filter $(1) $(2),$(DEB_LANG)),yes),$(3)))
+nlfilt	= $(strip $(if $(DEB_NOLANG), \
+		$(if $(filter $(1) $(2),$(DEB_NOLANG)),disabled by $(DEB_NOLANG_OPT),$(3))))
+wlfilt	= $(strip $(if $(filter $(1) $(2), $(subst $(COMMA), ,$(WITHOUT_LANG))), \
+		disabled by WITHOUT_LANG=$(WITHOUT_LANG),$(3)))
+envfilt	= $(strip $(or $(call lfilt,$(1),$(2)),$(call nlfilt,$(1),$(3)),$(call wlfilt,$(1),$(3)),$(4)))
+
+# -------------------------------------------------------------------
+# architecture specific config
+
+# FIXME: libjava is not ported for thumb, this hack only works for
+# separate gcj builds
+ifeq (,$(findstring gcj,$(PKGSOURCE)))
+  ifeq ($(distribution),Ubuntu)
+    with_arm_thumb := yes
+  endif
+  ifeq ($(DEB_TARGET_ARCH),armhf)
+    with_arm_thumb := yes
+  endif
+endif
+
+# build using fsf or linaro
+ifeq ($(distribution),Ubuntu)
+  ifeq (,$(filter $(distrelease),dapper hardy jaunty karmic lucid))
+  ifeq (,$(findstring gnat, $(PKGSOURCE)))
+  ifneq (,$(findstring $(DEB_TARGET_ARCH),amd64 armel armhf i386 powerpc))
+    with_linaro_branch = yes
+  endif
+  endif
+  endif
+endif
+ifeq ($(DEB_TARGET_ARCH),armhf)
+  with_linaro_branch := yes
+endif
+
+# check if we're building for armel or armhf
+ifeq ($(DEB_TARGET_ARCH),armhf)
+  float_abi := hard
+else ifneq (,$(filter $(distribution)-$(DEB_TARGET_ARCH), Ubuntu-armel))
+  float_abi := softfp
+else ifneq (,$(filter $(DEB_TARGET_ARCH), arm armel))
+  float_abi := soft
+endif
+
+# -------------------------------------------------------------------
+# basic config
+
+# common things ---------------
+# build common packages, where package names don't differ in different
+# gcc versions (protoize, fixincludes, libgcj-common) ...
+with_common_pkgs := yes
+# ... and some libraries, which do not change (libgcc1, libmudflap, libssp0).
+with_common_libs := yes
+# XXX: should with_common_libs be "yes" only if this is the default compiler
+# version on the targeted arch?
+ifeq (,$(filter $(distrelease),lenny etch squeeze dapper hardy jaunty karmic lucid))
+ifeq (,$(filter $(DEB_TARGET_ARCH),m68k))
+  with_common_pkgs := no
+  with_common_libs := no
+endif
+endif
+#ifneq (,$(filter $(distrelease),squeeze sid))
+#  ifneq (,$(filter $(DEB_TARGET_ARCH),amd64 i386))
+#    with_common_pkgs := no
+#    with_common_libs := no
+#  endif
+#  keep_in_control := yes
+#endif
+
+# is this a multiarch-enabled build?
+ifeq (,$(filter $(distrelease),lenny etch squeeze dapper hardy jaunty karmic lucid maverick))
+  with_multiarch_lib := yes
+endif
+
+ifeq (,$(filter $(distrelease),lenny etch squeeze dapper hardy jaunty karmic lucid maverick))
+  multiarch_stage1 := yes
+endif
+
+# mapping for the non-default biarch multilib / multiarch names
+multiarch_xarch_map = \
+	amd64=i386-linux-gnu \
+	armel=arm-linux-gnueabi \
+	armhf=arm-linux-gnueabihf \
+	i386=x86_64-linux-gnu \
+	powerpc=powerpc64-linux-gnu \
+	ppc64=powerpc-linux-gnu \
+	sparc=sparc64-linux-gnu \
+	sparc64=sparc-linux-gnu \
+	s390=s390x-linux-gnu \
+	s390x=s390-linux-gnu \
+	mips=mips64-linux-gnuabin32,mips64-linux-gnuabi64 \
+	mipsel=mips64el-linux-gnuabin32,mips64el-linux-gnuabi64 \
+	kfreebsd-amd64=i386-kfreebsd-gnu
+xarch_multiarch_names = $(subst $(COMMA),$(SPACE),$(patsubst $(DEB_TARGET_ARCH)=%,%, \
+		$(filter $(DEB_TARGET_ARCH)=%,$(multiarch_xarch_map))))
+
+ifneq ($(DEB_STAGE),stage1)
+  # build a -base package.
+  ifneq ($(DEB_CROSS),yes)
+    with_gccbase := yes
+  else
+    with_gccxbase := yes
+  endif
+endif
+
+# build dev packages.
+with_dev := yes
+
+with_cpp := yes
+
+# set lang when built from a different source package.
+separate_lang := no
+
+ifneq ($(PKGSOURCE),gcc-snapshot)
+  # --program-suffix=-$(BASE_VERSION)
+  versioned_packages := yes
+  ifneq ($(DEB_CROSS),yes)
+    with_common_gcclibdir := yes
+  endif
+else
+  # for control.in
+  gcc_snapshot := yes
+endif
+
+#no_dummy_cpus := ia64 i386 hppa s390 sparc
+#ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(no_dummy_cpus)))
+#  with_base_only	:= no
+#  with_common_libs	:= yes
+#  with_common_pkgs	:= yes
+#else
+#  with_base_only	:= yes
+#  with_common_libs	:= no
+#  with_common_pkgs	:= no
+#  with_dev		:= no
+#endif
+
+ifeq ($(versioned_packages),yes)
+  pkg_ver := -$(BASE_VERSION)
+  PV := $(pkg_ver)
+endif
+
+# -------------------------------------------------------------------
+# configure languages
+
+# C ---------------------------
+enabled_languages := c
+
+# Build all packages needed for C development
+ifneq ($(with_base_only),yes)
+  ifeq ($(with_dev),yes)
+    with_cdev := yes
+  endif
+endif
+
+ifndef DEB_STAGE
+# Ada --------------------
+ada_no_cpus	:= m32r m68k sh3 sh3eb sh4 sh4eb
+ada_no_systems	:= gnu knetbsd-gnu
+ada_no_cross	:= yes
+ada_no_snap	:= no
+
+ifeq ($(with_dev),yes)
+  ifneq ($(separate_lang),yes)
+    with_ada := yes
+  endif
+endif
+ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(ada_no_cpus)))
+  with_ada := disabled for cpu $(DEB_TARGET_ARCH_CPU)
+endif
+ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(ada_no_systems)))
+  with_ada := disabled for system $(DEB_TARGET_GNU_SYSTEM)
+endif
+ifeq ($(ada_no_cross)-$(DEB_CROSS),yes-yes)
+  with_ada := disabled for cross compiler package
+endif
+ifeq ($(ada_no_snap)-$(PKGSOURCE),yes-gcc-snapshot)
+  with_ada := disabled for snapshot build
+endif
+with_ada := $(call envfilt, ada, , , $(with_ada))
+
+ifneq ($(PKGSOURCE),gcc-snapshot)
+  with_separate_gnat := yes
+endif
+ifeq ($(with_ada)-$(with_separate_gnat),yes-yes)
+  ifneq (,$(findstring gnat,$(PKGSOURCE)))
+    languages := c
+    separate_lang := yes
+  else
+    debian_extra_langs += ada
+    with_ada := built from separate source
+    with_libgnat := built from separate source
+  endif
+endif
+
+ifeq ($(with_ada),yes)
+  enabled_languages += ada
+  with_libgnat := yes
+  # There are two exception handling mechanisms: ZCX (Zero-Cost
+  # eXceptions) and SJLJ (setjump/longjump), selected and supported by
+  # libgnat.  Thus we build both versions of libgnat on architectures
+  # that support both (see ada-sjlj.diff).  Most cpus support both
+  # mechanisms; here, we declare the few that support only one.
+  libgnat_zcx_only_cpus :=
+  libgnat_sjlj_only_cpus := arm armel armhf
+  ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(libgnat_sjlj_only_cpus)))
+    with_gnat_zcx := no
+  else
+    with_gnat_zcx := yes
+  endif
+  ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(libgnat_zcx_only_cpus)))
+    with_gnat_sjlj := no
+  else
+    with_gnat_sjlj := yes
+  endif
+  ifeq ($(with_gnat_zcx)-$(with_gnat_sjlj),no-no)
+    # TODO: support cpus that do not support exceptions at all,
+    # perhaps by building a restricted runtime library?  For now, flag
+    # this as a packaging error.
+    $(error this target supports neither ZCX nor SJLJ)
+  endif
+endif
+
+# Pascal ----------------------
+pascal_no_cross := yes
+pascal_no_snap := yes
+
+ifneq ($(separate_lang),yes)
+  with_pascal := yes
+endif
+ifeq ($(pascal_no_cross)-$(DEB_CROSS),yes-yes)
+  with_pascal := diasbled for cross compiler package
+endif
+ifeq ($(pascal_no_snap)-$(PKGSOURCE),yes-gcc-snapshot)
+  with_pascal := disabled for snapshot build
+endif
+with_pascal := not yet ported to GCC 4.4
+with_pascal := $(call envfilt, pascal, , , $(with_pascal))
+
+ifneq ($(PKGSOURCE),gcc-snapshot)
+  with_separate_gpc := yes
+endif
+ifeq ($(with_pascal)-$(with_separate_gpc),yes-yes)
+  ifneq (,$(findstring gpc,$(PKGSOURCE)))
+    languages := c
+    separate_lang := yes
+  else
+    debian_extra_langs += pascal
+    with_pascal := built from separate source
+  endif
+endif
+
+ifneq ($(with_dev),yes)
+  with_pascal := no
+endif
+
+ifeq ($(with_pascal),yes)
+  with_gpidump := yes
+  gpidump_no_cpus := mips mipsel
+  ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(gpidump_no_cpus)))
+    with_gpidump := disabled for cpu $(DEB_TARGET_ARCH_CPU)
+  endif
+  pascal_version := 20030830
+  enabled_languages += pascal
+endif
+
+# C++ -------------------------
+cxx_no_cpus := avr
+ifneq ($(with_base_only),yes)
+  ifneq ($(separate_lang),yes)
+    with_cxx := yes
+  endif
+endif
+ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(cxx_no_cpus)))
+  with_cxx := disabled for cpu $(DEB_TARGET_ARCH_CPU)
+endif
+with_cxx := $(call envfilt, c++, obj-c++ java, , $(with_cxx))
+
+# Build all packages needed for C++ development
+ifeq ($(with_cxx),yes)
+  ifeq ($(with_dev),yes)
+    with_cxxdev := yes
+    with_libcxxdbg := yes
+  endif
+  ifeq ($(with_common_pkgs),yes)
+    with_libcxx := yes
+  endif
+
+  # debugging versions of libstdc++
+  ifeq ($(with_cxxdev),yes)
+    with_debug := yes
+    debug_no_cpus :=
+    ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(debug_no_cpus)))
+      with_debug := disabled for cpu $(DEB_TARGET_GNU_CPU)
+    endif
+  endif
+  with_debug := $(call envfilt, debug, , , $(with_debug))
+
+  enabled_languages += c++
+endif
+
+# Java --------------------
+# - To build a standalone gcj package (with no corresponding gcc
+#   package): with_separate_libgcj=yes, with_standalone_gcj=yes
+# - To build the java packages from the gcc source package:
+#   with_separate_libgcj=no, with_standalone_gcj=no
+# - To build gcc and java from separate sources:
+#   with_separate_libgcj=yes, with_standalone_gcj=no
+
+java_no_cpus := # mips mipsel
+java_no_systems := knetbsd-gnu
+java_no_cross := yes
+
+ifneq ($(PKGSOURCE),gcc-snapshot)
+  with_separate_libgcj := yes
+endif
+with_standalone_gcj := no
+
+ifneq ($(separate_lang),yes)
+  with_java := yes
+endif
+
+# java converted for V3 C++ ABI for some archs
+ifeq ($(with_base_only),yes)
+  with_java := no
+endif
+ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(java_no_cpus)))
+  with_java := disabled for cpu $(DEB_TARGET_ARCH_CPU)
+endif
+ifneq (,$(filter $(DEB_TARGET_GNU_SYSTEM),$(java_no_systems)))
+  with_java := disabled for system $(DEB_TARGET_GNU_SYSTEM)
+endif
+ifeq ($(java_no_cross)-$(DEB_CROSS),yes-yes)
+  with_java := diasbled for cross compiler package
+endif
+with_java := $(call envfilt, java, , c++, $(with_java))
+
+ifeq ($(with_java)-$(with_separate_libgcj),yes-yes)
+  ifneq (,$(findstring gcj, $(PKGSOURCE)))
+    languages := c c++
+    separate_lang := yes
+  else
+    debian_extra_langs += java
+    with_java := built from separate source
+    with_gcj := built from separate source
+    with_libgcj := buit from separate source
+  endif
+endif
+
+with_java_plugin := no
+
+ifeq ($(with_java),yes)
+  # use the same names as OpenJDK
+  java_cpu_map = armel=arm armhf=arm hppa=parisc i686=i386 i586=i386 i486=i386 mipsel=mips powerpc=ppc sh4=sh
+  java_cpu = $(patsubst $(DEB_TARGET_ARCH_CPU)=%,%, \
+                         $(filter $(DEB_TARGET_ARCH_CPU)=%,$(java_cpu_map)))
+  ifeq (,$(java_cpu))
+    java_cpu = $(DEB_TARGET_ARCH_CPU)
+  endif
+  java_priority = 10$(subst .,,$(BASE_VERSION))
+
+  with_libgcj := yes
+  with_libgcjbc := no
+
+  ifneq (,$(findstring gcj-4,$(PKGSOURCE)))
+    ifneq (,$(filter $(DEB_TARGET_ARCH), arm))
+      with_gcj_base_only := yes
+    endif
+  endif
+
+  #ifneq (,$(filter $(DEB_TARGET_ARCH),hppa))
+  #  with_native_ecj := yes
+  #endif
+
+  with_java_maintainer_mode := no
+
+  # used as well in debian/rules.conf to determine the build deps
+  java_awt_peers = gtk # qt # xlib
+
+  ifeq ($(with_common_libs),yes)
+    with_libgcj_doc := yes
+  endif
+
+  # Build all packages needed for Java development (gcj, libgcj-dev)
+  ifeq ($(with_dev),yes)
+    with_javadev := yes
+    with_gcj := yes
+  endif
+
+  with_java_alsa := yes
+  ifeq (,$(filter $(DEB_TARGET_GNU_SYSTEM),linux-gnu))
+    with_java_alsa := no
+  endif
+
+  enabled_languages += java
+endif
+
+# D ---------------------------
+d_no_cross := yes
+d_no_snap := yes
+
+ifneq ($(PKGSOURCE),gcc-snapshot)
+  with_separate_gdc := yes
+endif
+
+ifneq ($(separate_lang),yes)
+  with_d := yes
+endif
+ifeq ($(d_no_snap)-$(PKGSOURCE),yes-gcc-snapshot)
+  with_d := disabled for snapshot build
+endif
+
+ifeq ($(with_d)-$(with_separate_gdc),yes-yes)
+  ifneq (,$(findstring gdc,$(PKGSOURCE)))
+    languages := c c++
+    separate_lang := yes
+  else
+    debian_extra_langs += d
+    with_d := built from separate source
+  endif
+endif
+
+ifeq ($(with_base_only),yes)
+  with_d := no
+endif
+
+ifeq ($(with_d),yes)
+  # no suffix for D 1.0
+  libphobos_version :=
+  # still experimental
+  #libphobos_version := 2
+
+  with_libphobos := yes
+
+  libphobos_no_cpus := 
+  libphobos_no_systems := gnu
+  ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(libphobos_no_cpus)))
+    with_libphobos := disabled for cpu $(DEB_TARGET_ARCH_CPU)
+  endif
+  ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(libphobos_no_systems)))
+    with_libphobos := disabled for system $(DEB_TARGET_GNU_SYSTEM)
+  endif
+
+  enabled_languages += d
+endif
+
+# Fortran 95 -------------------
+fortran_no_cross := yes
+fortran_no_cross := no
+
+ifneq ($(with_base_only),yes)
+  ifneq ($(separate_lang),yes)
+    with_fortran := yes
+  endif
+endif
+ifeq ($(fortran_no_cross)-$(DEB_CROSS),yes-yes)
+  with_fortran := diasbled for cross compiler package
+endif
+with_fortran := $(call envfilt, fortran, , , $(with_fortran))
+
+# Build all packages needed for Fortran development
+ifeq ($(with_fortran),yes)
+  ifeq ($(with_dev),yes)
+    with_fdev := yes
+  endif
+  ifeq ($(with_common_libs),yes)
+    with_libgfortran := yes
+  endif
+  enabled_languages += fortran
+endif
+
+# ObjC ------------------------
+objc_no_cross := no
+
+ifneq ($(with_base_only),yes)
+  ifneq ($(separate_lang),yes)
+    with_objc := yes
+  endif
+endif
+ifeq ($(objc_no_cross)-$(DEB_CROSS),yes-yes)
+  with_objc := diasbled for cross compiler package
+endif
+with_objc := $(call envfilt, objc, obj-c++, , $(with_objc))
+
+ifeq ($(with_objc),yes)
+  # the ObjC runtime with garbage collection enabled needs the Boehm GC
+  with_objc_gc := yes
+
+  # disable ObjC garbage collection library (needs libgc)
+  libgc_no_cpus := avr mips mipsel # alpha amd64 arm armel armhf hppa i386 ia64 m68k mips mipsel powerpc s390 s390x sparc
+  libgc_no_systems := knetbsd-gnu
+  ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(libgc_no_cpus)))
+    with_objc_gc := disabled for cpu $(DEB_TARGET_ARCH_CPU)
+  endif
+  ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(libgc_no_systems)))
+    with_objc_gc := disabled for system $(DEB_TARGET_GNU_SYSTEM)
+  endif
+
+  # Build all packages needed for Objective-C development
+  ifeq ($(with_dev),yes)
+    with_objcdev := yes
+  endif
+  ifeq ($(with_common_libs),yes)
+    with_libobjc := yes
+  endif
+
+  enabled_languages += objc
+endif
+
+# ObjC++ ----------------------
+objcxx_no_cross := no
+
+ifneq ($(with_base_only),yes)
+  ifneq ($(separate_lang),yes)
+    with_objcxx := yes
+  endif
+endif
+ifeq ($(objcxx_no_cross)-$(DEB_CROSS),yes-yes)
+  with_objcxx := diasbled for cross compiler package
+endif
+with_objcxx := $(call envfilt, obj-c++, , c++ objc, $(with_objcxx))
+
+ifeq ($(with_objcxx),yes)
+  enabled_languages += obj-c++
+endif
+
+# -------------------------------------------------------------------
+# other config
+
+# not built from the main source package
+ifeq (,$(findstring gcc,$(PKGSOURCE)))
+  extra_package := yes
+endif
+
+with_nls := yes
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  with_nls := no
+endif
+with_nls := $(call envfilt, nls, , , $(with_nls))
+
+# powerpc nof libraries -----
+with_libnof := no
+
+ifneq (,$(findstring gcc-4,$(PKGSOURCE)))
+  with_source := yes
+endif
+with_source := $(call envfilt, source, , , $(with_source))
+
+# ssp & libssp -------------------------
+with_ssp := yes
+ssp_no_archs = alpha hppa ia64 m68k mips mipsel
+ifneq (, $(filter $(DEB_TARGET_ARCH),$(ssp_no_archs) $(ssp_no_archs:%=uclibc-%)))
+  with_ssp := not available on $(DEB_TARGET_ARCH)
+endif
+with_ssp := $(call envfilt, ssp, , , $(with_ssp))
+
+ifeq ($(with_ssp),yes)
+  ifneq ($(distribution),Debian)
+    ifneq (,$(findstring gcc-4, $(PKGSOURCE)))
+      with_ssp_default := yes
+    endif
+  endif
+endif
+
+# mudflap -------------------
+with_mudflap := yes
+with_mudflap := $(call envfilt, mudflap, , , $(with_mudflap))
+
+# gomp --------------------
+with_gomp := yes
+with_gomp := $(call envfilt, gomp, , , $(with_gomp))
+
+# gold --------------------
+gold_archs = amd64 armel armhf i386 lpia powerpc sparc
+gold_archs = amd64 i386 lpia
+ifneq (,$(filter $(DEB_TARGET_ARCH),$(gold_archs)))
+  ifneq (,$(findstring snapshot,$(PKGSOURCE))$(findstring 4.5,$(PKGSOURCE)))
+    with_gold := yes
+  endif
+endif
+
+# plugins --------------------
+ifneq (,$(findstring snapshot,$(PKGSOURCE))$(findstring 4.5,$(PKGSOURCE)))
+  with_plugins := yes
+endif
+with_plugins := no
+
+endif # ifndef DEB_STAGE
+
+# Don't include docs with GFDL invariant sections
+GFDL_INVARIANT_FREE := yes
+ifeq ($(distribution),Ubuntu)
+  GFDL_INVARIANT_FREE := no
+endif
+
+# -------------------------------------------------------------------
+# non-extra config
+ifeq ($(extra_package),yes)
+  ifeq ($(with_separate_libgcj)-$(with_standalone_gcj),yes-no)
+    # build stuff
+    with_mudflap :=
+
+    # package stuff
+    with_gccbase := no
+    with_cdev := no
+    with_cxx := no
+    with_cxxdev := no
+  endif
+else
+  # libssp ------------------
+  ifeq ($(with_ssp)-$(with_common_libs),yes-yes)
+    #ifneq ($(DEB_CROSS),yes)
+      with_libssp := $(if $(wildcard $(builddir)/gcc/auto-host.h), \
+                       $(shell if grep -qs '^\#define TARGET_LIBC_PROVIDES_SSP 1' $(builddir)/gcc/auto-host.h; then echo 'libc provides ssp'; else echo 'yes'; fi))
+    #endif
+  endif
+
+  # libmudflap --------------
+  ifeq ($(with_mudflap)-$(with_common_libs),yes-yes)
+      with_libmudflap := yes
+  endif
+
+  # libgomp -----------------
+  ifeq ($(with_gomp)-$(with_common_libs),yes-yes)
+    #ifneq ($(DEB_CROSS),yes)
+      with_libgomp := yes
+    #endif
+  endif
+
+  # protoize, fixincludes -------
+  ifneq ($(DEB_CROSS),yes)
+    with_proto	:= yes
+    ifeq ($(with_common_pkgs),yes)
+      with_fixincl	:= yes
+    endif
+  endif
+
+  # Shared libgcc --------------------
+  ifeq ($(with_common_libs),yes)
+    with_libgcc := yes
+    with_shared_libgcc := yes
+  endif
+
+  # libgcc-math --------------------
+  with_libgmath := no
+  ifneq (,$(findstring i486,$(DEB_TARGET_ARCH)))
+    #with_libgccmath := yes
+    #with_lib64gmath := yes
+    #with_libgmathdev := yes
+  endif
+  ifeq ($(DEB_TARGET_ARCH),amd64)
+    #with_libgccmath := yes
+    #with_lib32gmath := yes
+    #with_libgmathdev := yes
+  endif
+
+  # hppa64 build ----------------
+  hppa64_no_snap := no
+  ifeq ($(DEB_TARGET_ARCH),hppa)
+    with_hppa64 := yes
+  endif
+  ifeq ($(hppa64_no_snap)-$(PKGSOURCE),yes-gcc-snapshot)
+    with_hppa64 := disabled for snapshot build
+  endif
+  with_hppa64 := $(call envfilt, hppa64, , , $(with_hppa64))
+
+  # ia6432 build ----------------
+  ia6432_no_snap := no
+  ifeq ($(DEB_TARGET_ARCH),ia64)
+    ifneq ($(DEB_CROSS),yes)
+      with_ia6432 := yes
+    endif
+  endif
+  ifeq ($(ia6432_no_snap)-$(PKGSOURCE),yes-gcc-snapshot)
+    with_ia6432 := disabled for snapshot build
+  endif
+  with_ia6432 := disabled
+  with_ia6432 := $(call envfilt, ia6432, , , $(with_ia6432))
+
+  # spu build -------------------
+  spu_no_snap := no
+  ifneq (,$(findstring $(DEB_TARGET_ARCH),powerpc ppc64))
+    ifneq ($(DEB_CROSS),yes)
+      with_spu := yes
+    endif
+  endif
+  ifeq ($(spu_no_snap)-$(PKGSOURCE),yes-gcc-snapshot)
+    with_spu := disabled for snapshot build
+  endif
+  with_spu := $(call envfilt, spu, , , $(with_spu))
+
+  ifeq ($(with_spu),yes)
+    ifneq ($(PKGSOURCE),gcc-snapshot)
+      with_spucache := yes
+      with_spumea64 := yes
+    endif
+  endif
+
+  # neon build -------------------
+  # FIXME: build as a cross compiler to build on armv4 as well
+  ifneq (,$(findstring gcc-4, $(PKGSOURCE)))
+    ifeq ($(distribution),Ubuntu)
+#      neon_archs = armel armhf
+#      ifneq (, $(filter $(DEB_TARGET_ARCH),$(neon_archs)))
+#        with_neon = yes
+#      endif
+    endif
+  endif
+endif
+
+# run testsuite ---------------
+with_check := yes
+# if you don't want to run the gcc testsuite, uncomment the next line
+#with_check := disabled by hand
+ifeq ($(with_base_only),yes)
+  with_check := no
+endif
+ifeq ($(DEB_CROSS),yes)
+  with_check := disabled for cross compiler package
+endif
+ifeq ($(REVERSE_CROSS),yes)
+  with_check := disabled for reverse cross build
+endif
+check_no_cpus := m68k
+check_no_systems := gnu
+ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(check_no_cpus)))
+  with_check := disabled for cpu $(DEB_TARGET_ARCH_CPU)
+endif
+ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(check_no_systems)))
+  with_check := disabled for system $(DEB_TARGET_GNU_SYSTEM)
+endif
+ifeq ($(distribution)-$(DEB_HOST_ARCH),Ubuntu-hppa)
+  ifneq ($(PKGSOURCE),gcc-snapshot)
+    with_check := disabled, testsuite timeouts with expect
+  endif
+endif
+ifneq (,$(findstring gdc,$(PKGSOURCE)))
+  with_check := disabled for D
+endif
+with_check := $(call envfilt, check, , , $(with_check))
+ifdef WITHOUT_CHECK
+  with_check := disabled by environment
+endif
+ifneq ($(findstring nocheck, $(DEB_BUILD_OPTIONS)),)
+  with_check := disabled by DEB_BUILD_OPTIONS
+endif
+
+# not a dependency on all archs, but if available, use it for the testsuite
+ifneq (,$(wildcard /usr/bin/localedef))
+  locale_data = generate
+endif
+
+all_enabled_languages := $(enabled_languages)
+languages_without_lang_opt := c++ objc obj-c++ proto
+
+debian_extra_langs := $(subst obj-c++,objcp,$(debian_extra_langs))
+export debian_extra_langs
+
+# multilib
+ifeq (,$(filter $(distrelease),lenny etch squeeze sid dapper hardy jaunty karmic lucid))
+  biarch_map := i686=x86_64 powerpc=powerpc64 sparc=sparc64 s390=s390x s390x=s390 \
+		x86_64=i686 powerpc64=powerpc mips=mips64 mipsel=mips64el
+else
+  biarch_map := i486=x86_64 powerpc=powerpc64 sparc=sparc64 s390=s390x s390x=s390 \
+		x86_64=i486 powerpc64=powerpc mips=mips64 mipsel=mips64el
+endif
+biarch_cpu := $(strip $(patsubst $(DEB_TARGET_GNU_CPU)=%,%, \
+			 $(filter $(DEB_TARGET_GNU_CPU)=%,$(biarch_map))))
+
+biarch64 := no
+biarch32 := no
+biarchn32 := no
+flavours :=
+define gen_biarch
+  ifneq (yes,$$(call envfilt, biarch, , ,yes))
+    biarch$1archs :=
+  endif
+  ifneq (,$$(findstring /$$(DEB_TARGET_ARCH)/,$$(biarch$1archs)))
+    biarch$1 := yes
+    flavours += $1
+    #biarch$1subdir = $$(biarch_cpu)-$$(DEB_TARGET_GNU_SYSTEM)
+    biarch$1subdir = $1
+    ifeq ($$(with_libgcc),yes)
+      with_lib$1gcc := yes
+    endif
+    ifeq ($$(with_libcxx),yes)
+      with_lib$1cxx := yes
+    endif
+    ifeq ($$(with_libcxxdbg),yes)
+      with_lib$1cxxdbg := yes
+    endif
+    ifeq ($$(with_libobjc),yes)
+      with_lib$1objc := yes
+    endif
+    ifeq ($$(with_libgfortran),yes)
+      with_lib$1gfortran := yes
+    endif
+    ifeq ($$(with_libmudflap),yes)
+      with_lib$1mudflap := yes
+    endif
+    ifeq ($$(with_libssp),yes)
+      with_lib$1ssp := yes
+    endif
+    ifeq ($$(with_libgomp),yes)
+      with_lib$1gomp:= yes
+    endif
+
+    biarch_multidir_names = libiberty libgcc
+    ifneq (,$$(findstring gcc-, $$(PKGSOURCE)))
+      biarch_multidir_names += libstdc++-v3 libobjc libgfortran libssp \
+				libgomp libmudflap zlib
+      ifeq ($$(with_objc_gc),yes)
+        biarch_multidir_names += boehm-gc
+      endif
+    endif
+    export biarch_multidir_names
+    ifneq (,$$(findstring 32,$1))
+      TARGET64_MACHINE := $$(strip $$(subst $$(DEB_TARGET_GNU_CPU),$$(biarch_cpu), \
+				$$(TARGET_ALIAS)))
+      TARGET32_MACHINE := $$(TARGET_ALIAS)
+    else
+      TARGET64_MACHINE := $$(TARGET_ALIAS)
+      TARGET64_MACHINE := $$(strip $$(subst $$(DEB_TARGET_GNU_CPU),$$(biarch_cpu), \
+				$$(TARGET_ALIAS)))
+    endif
+    export TARGET32_MACHINE
+    export TARGET64_MACHINE
+  endif
+endef
+biarch32archs := /amd64/ppc64/kfreebsd-amd64/s390x/
+biarch64archs := /i386/powerpc/sparc/s390/mips/mipsel/
+biarchn32archs := /mips/mipsel/
+$(foreach x,32 64 n32,$(eval $(call gen_biarch,$(x))))
+
+ifneq (,$(filter yes,$(biarch32) $(biarch64) $(biarchn32)))
+  multilib := yes
+endif
+
+multilib_archs = $(sort $(subst /, , $(biarch64archs) $(biarch32archs) $(biarchn32archs)))
+
+biarchsubdirs := \
+  $(if $(filter yes,$(biarch64)),$(biarch64subdir),) \
+  $(if $(filter yes,$(biarch32)),$(biarch32subdir),) \
+  $(if $(filter yes,$(biarchn32)),$(biarchn32subdir),)
+biarchsubdirs := {$(strip $(shell echo $(biarchsubdirs) | tr " " ","))}
+
+#ifeq ($(DEB_TARGET_ARCH),ia64)
+#  biarch32 := yes
+#endif
+
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  no_biarch_libs := yes
+endif
+ifdef DEB_CROSS_NO_BIARCH
+  no_biarch_libs := yes
+endif
+ifeq ($(with_d)-$(with_separate_gdc),yes-yes)
+  no_biarch_libs := yes
+endif
+
+ifeq ($(no_biarch_libs),yes)
+  with_lib64gcc		:= no
+  with_lib64cxx		:= no
+  with_lib64cxxdbg	:= no
+  with_lib64objc	:= no
+  with_lib64ffi		:= no
+  with_lib64gcj		:= no
+  with_lib64gfortran	:= no
+  with_lib64mudflap	:= no
+  with_lib64ssp		:= no
+  with_lib64gomp	:= no
+
+  with_lib32gcc		:= no
+  with_lib32cxx		:= no
+  with_lib32cxxdbg	:= no
+  with_lib32objc	:= no
+  with_lib32ffi		:= no
+  with_lib32gcj		:= no
+  with_lib32gfortran	:= no
+  with_lib32mudflap	:= no
+  with_lib32ssp		:= no
+  with_lib32gomp	:= no
+
+  with_libn32gcc	:= no
+  with_libn32cxx	:= no
+  with_libn32cxxdbg	:= no
+  with_libn32objc	:= no
+  with_libn32ffi	:= no
+  with_libn32gcj	:= no
+  with_libn32gfortran	:= no
+  with_libn32mudflap	:= no
+  with_libn32ssp	:= no
+  with_libn32gomp	:= no
+
+  ifeq ($(PKGSOURCE),gcc-snapshot)
+    #biarch64	:= disabled for snapshot build
+    #biarch32	:= disabled for snapshot build
+    #biarchn32	:= disabled for snapshot build
+    with_java_plugin := no
+  endif
+
+  ifdef DEB_CROSS_NO_BIARCH
+    biarch64   	:= disabled by DEB_CROSS_NO_BIARCH
+    biarch32 	:= disabled by DEB_CROSS_NO_BIARCH
+    biarchn32 	:= disabled by DEB_CROSS_NO_BIARCH
+  endif
+
+  ifeq ($(with_d)-$(with_separate_gdc),yes-yes)
+    biarch64	:= disabled for D
+    biarch32	:= disabled for D
+    biarchn32	:= disabled for D
+  endif
+
+endif
+
+ifeq ($(biarch32),yes)
+  with_32bit_check := $(strip $(if $(wildcard build/runcheck.out), \
+				$(shell cat build/runcheck.out), \
+				$(shell CC="gcc -m32" bash debian/runcheck.sh)))
+endif
+
+ifeq ($(biarch64),yes)
+  ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),mips mipsel))
+    with_64bit_check := $(strip $(if $(wildcard build/runcheck.out), \
+			$(shell cat build/runcheck.out), \
+			$(shell CC="gcc -mabi=64" bash debian/runcheck.sh)))
+  else
+    with_64bit_check := $(strip $(if $(wildcard build/runcheck.out), \
+			$(shell cat build/runcheck.out), \
+			$(shell CC="gcc -m64" bash debian/runcheck.sh)))
+  endif
+endif
+
+ifeq ($(biarchn32),yes)
+  with_n32bit_check := $(strip $(if $(wildcard build/runcheck.out), \
+				$(shell cat build/runcheck.out), \
+				$(shell CC="gcc -mabi=n32" bash debian/runcheck.sh)))
+endif
+
+# GNU locales
+force_gnu_locales := yes
+locale_no_cpus :=
+locale_no_systems := knetbsd-gnu
+ifneq (,$(findstring $(DEB_TARGET_GNU_SYSTEM),$(locale_no_systems)))
+  force_gnu_locales := disabled for system $(DEB_TARGET_GNU_SYSTEM)
+endif
+
+gcc_tarpath		:= $(firstword $(wildcard gcc-*.tar.* /usr/src/gcc-$(BASE_VERSION)/gcc-*.tar.*))
+gcc_tarball		:= $(notdir $(gcc_tarpath))
+gcc_srcdir		:= $(subst -dfsg,,$(patsubst %.tar.xz,%,$(patsubst %.tar.lzma,%,$(patsubst %.tar.gz,%,$(gcc_tarball:.tar.bz2=)))))
+
+ifeq ($(with_pascal),yes)
+  gpc_tarpath		:= $(firstword $(wildcard gpc-*.tar.* /usr/src/gcc-$(BASE_VERSION)/gpc-*.tar.*))
+  gpc_tarball		:= $(notdir $(gpc_tarpath))
+  gpc_srcdir		:= $(patsubst %.tar.xz,%,$(patsubst %.tar.lzma,%,$(patsubst %.tar.gz,%,$(gpc_tarball:.tar.bz2=))))
+endif
+
+ifeq ($(with_d),yes)
+  gdc_tarpath		:= $(firstword $(wildcard gdc-*.tar.* /usr/src/gcc-$(BASE_VERSION)/gdc-*.tar.*))
+  gdc_tarball		:= $(notdir $(gdc_tarpath))
+  gdc_srcdir		:= $(patsubst %.tar.xz,%,$(patsubst %.tar.lzma,%,$(patsubst %.tar.gz,%,$(gdc_tarball:.tar.bz2=))))
+endif
+
+unpack_stamp		:= $(stampdir)/01-unpack-stamp
+pre_patch_stamp		:= $(stampdir)/02-pre-patch-stamp
+patch_stamp		:= $(stampdir)/02-patch-stamp
+src_spu_stamp		:= $(stampdir)/02-src-spu-stamp
+control_stamp		:= $(stampdir)/03-control-stamp
+configure_stamp		:= $(stampdir)/04-configure-stamp
+build_stamp		:= $(stampdir)/05-build-stamp
+build_html_stamp	:= $(stampdir)/05-build-html-stamp
+build_locale_stamp	:= $(stampdir)/05-build-locale-stamp
+build_doxygen_stamp	:= $(stampdir)/05-build-doxygen-stamp
+build_javasrc_stamp	:= $(stampdir)/05-build-javasrc-stamp
+build_javadoc_stamp	:= $(stampdir)/05-build-javadoc-stamp
+check_stamp		:= $(stampdir)/06-check-stamp
+check_inst_stamp	:= $(stampdir)/06-check-inst-stamp
+install_stamp		:= $(stampdir)/07-install-stamp
+install_snap_stamp	:= $(stampdir)/07-install-snap-stamp
+binary_stamp		:= $(stampdir)/08-binary-stamp
+
+configure_dummy_stamp	:= $(stampdir)/04-configure-dummy-stamp
+build_dummy_stamp	:= $(stampdir)/05-build-dummy-stamp
+install_dummy_stamp	:= $(stampdir)/07-install-dummy-stamp
+
+configure_hppa64_stamp	:= $(stampdir)/04-configure-hppa64-stamp
+build_hppa64_stamp	:= $(stampdir)/05-build-hppa64-stamp
+install_hppa64_stamp	:= $(stampdir)/07-install-hppa64-stamp
+
+configure_neon_stamp	:= $(stampdir)/04-configure-neon-stamp
+build_neon_stamp		:= $(stampdir)/05-build-neon-stamp
+install_neon_stamp	:= $(stampdir)/07-install-neon-stamp
+
+configure_ia6432_stamp	:= $(stampdir)/04-configure-ia6432-stamp
+build_ia6432_stamp	:= $(stampdir)/05-build-ia6432-stamp
+install_ia6432_stamp	:= $(stampdir)/07-install-ia6432-stamp
+
+configure_ia6432_stamp	:= $(stampdir)/04-configure-ia6432-stamp
+build_ia6432_stamp	:= $(stampdir)/05-build-ia6432-stamp
+install_ia6432_stamp	:= $(stampdir)/07-install-ia6432-stamp
+
+configure_spu_stamp	:= $(stampdir)/04-configure-spu-stamp
+build_spu_stamp		:= $(stampdir)/05-build-spu-stamp
+install_spu_stamp	:= $(stampdir)/07-install-spu-stamp
+
+control_dependencies	:= $(patch_stamp)
+
+ifeq ($(PKGSOURCE),gcc-snapshot)
+    configure_dependencies = $(configure_stamp)
+    build_dependencies = $(build_stamp)
+    install_dependencies = $(install_snap_stamp)
+    ifeq ($(with_check),yes)
+      check_dependencies += $(check_stamp)
+    endif
+else
+  ifeq ($(with_base_only),yes)
+    configure_dependencies = $(configure_dummy_stamp)
+    build_dependencies = $(build_dummy_stamp)
+    install_dependencies = $(install_dummy_stamp)
+  else
+    configure_dependencies = $(configure_stamp)
+    build_dependencies = $(build_stamp)
+    install_dependencies = $(install_stamp)
+    ifeq ($(with_check),yes)
+      check_dependencies += $(check_stamp)
+    endif
+  endif
+endif
+
+ifneq (,$(findstring gcj-, $(PKGSOURCE)))
+  ifeq ($(with_gcj_base_only),yes)
+    configure_dependencies = $(configure_dummy_stamp)
+    build_dependencies = $(build_dummy_stamp)
+    install_dependencies = $(install_dummy_stamp)
+  endif
+endif
+
+ifeq ($(with_neon),yes)
+  build_dependencies += $(build_neon_stamp)
+  install_dependencies += $(install_neon_stamp)
+endif
+
+ifeq ($(with_hppa64),yes)
+  build_dependencies += $(build_hppa64_stamp)
+  ifneq ($(PKGSOURCE),gcc-snapshot)
+    install_dependencies += $(install_hppa64_stamp)
+  endif
+endif
+
+ifeq ($(with_ia6432),yes)
+  build_dependencies += $(build_ia6432_stamp)
+  ifneq ($(PKGSOURCE),gcc-snapshot)
+    install_dependencies += $(install_ia6432_stamp)
+  endif
+endif
+
+ifeq ($(with_spu),yes)
+  control_dependencies += $(src_spu_stamp)
+  build_dependencies += $(build_spu_stamp)
+  ifneq ($(PKGSOURCE),gcc-snapshot)
+    install_dependencies += $(install_spu_stamp)
+  endif
+endif
+
+build_dependencies += $(check_dependencies)
+
+stamp-dir:
+	mkdir -p $(stampdir)
+
+ifeq ($(DEB_CROSS),yes)
+  define cross_mangle_shlibs
+	sed -i s/$(cross_lib_arch)//g debian/$(1)/DEBIAN/shlibs
+  endef
+  define cross_mangle_substvars
+	sed -i 's/lib[^ ,(]*/&$(cross_lib_arch)/g' debian/$(1).substvars
+  endef
+else
+  define cross_mangle_shlibs
+  endef
+  define cross_mangle_substvars
+  endef
+endif
+
+ifneq (,$(filter $(DEB_TARGET_ARCH), mips mipsel))
+  define cross_mangle_control
+	$(if $(findstring 64,$(1)),sed -i -r '/^(Dep|Rec|Sug)/s/[a-z0-9-]+32[^$(COMMA)]+($(COMMA) *|$$)//g;/^(Dep|Rec|Sug)/s/$(p_lgcc)/$(p_l64gcc)/;/^(Dep|Rec|Sug)/s/ *$(COMMA) *$$//' debian/$(1)/DEBIAN/control,@:)
+	$(if $(findstring n32,$(1)),sed -i -r '/^(Dep|Rec|Sug)/s/[a-z0-9-]+64[^$(COMMA)]+($(COMMA) *|$$)//g;/^(Dep|Rec|Sug)/s/$(p_lgcc)/$(p_ln32gcc)/;/^(Dep|Rec|Sug)/s/ *$(COMMA) *$$//' debian/$(1)/DEBIAN/control,@:)
+  endef
+else
+  define cross_mangle_control
+  endef
+endif
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64gfortran3.symbols.mips
+++ gdc-4.4-1.063-4.4.7/debian/lib64gfortran3.symbols.mips
@@ -0,0 +1,5 @@
+libgfortran.so.3 lib64gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.32bit
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.32bit
@@ -0,0 +1,536 @@
+#include "libstdc++6.symbols.common"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base16_M_get_free_listEj@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base9_M_refillEj@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reclaim_blockEPcj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reserve_blockEjj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reclaim_blockEPcj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reserve_blockEjj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx9free_list6_M_getEj@GLIBCXX_3.4.4 4.1.1
+ _ZNK10__cxxabiv117__class_type_info12__do_dyncastEiNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcEiPKvPKS0_S2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE2atEj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE6substrEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEEixEj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEjjPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSs16find_last_not_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs2atEj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4copyEPcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs6substrEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjRKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_checkEjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_limitEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSsixEj@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE6_M_putEPcjPKcPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE6_M_putEPwjPKwPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE9do_lengthERS0_PKcS4_j@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE9do_lengthERS0_PKcS4_j@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE12_M_transformEPcPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE12_M_transformEPwPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcjcRSt8ios_basePcS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcjcS6_PcS7_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEciRSt8ios_basePcPKcRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcjwRSt8ios_basePwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcjwPKwPwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwiRSt8ios_basePwPKwRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_numES3_S3_RiiijRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES3_S3_RiPPKcjRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_numES3_S3_RiiijRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES3_S3_RiPPKwjRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8valarrayIjE4sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEjwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEjjjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEjjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE2atEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_j@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEjjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5eraseEjj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_jw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EPKwjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EjwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EPKwjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EjwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEixEj@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPcic@GLIBCXX_3.4 4.1.1
+ _ZNSi4readEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi5seekgExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEi@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEi@GLIBCXX_3.4.5 4.1.1
+ _ZNSi6ignoreEii@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPcic@GLIBCXX_3.4 4.1.1
+ _ZNSi8readsomeEPci@GLIBCXX_3.4 4.1.1
+ _ZNSo5seekpExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSo5writeEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSo8_M_writeEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSs12_S_constructEjcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs14_M_replace_auxEjjjc@GLIBCXX_3.4 4.1.1
+ _ZNSs15_M_replace_safeEjjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs2atEj@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4.5 4.1.1
+ _ZNSs4_Rep8_M_cloneERKSaIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep9_S_createEjjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs5eraseEjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjRKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEj@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcj@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7_M_moveEPcPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_moveEPcPKcj@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_jc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjRKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjjc@GLIBCXX_3.4 4.1.1
+ _ZNSs7reserveEj@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcjc@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcjc@GLIBCXX_3.4.5 4.1.1
+ _ZNSs9_M_mutateEjjj@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EPKcjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsjjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EjcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EPKcjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsjjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EjcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsixEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPci@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EPSt18__moneypunct_cacheIcLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EPSt18__moneypunct_cacheIcLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EPSt18__moneypunct_cacheIcLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EPSt18__moneypunct_cacheIcLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EPSt18__moneypunct_cacheIwLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EPSt18__moneypunct_cacheIwLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EPSt18__moneypunct_cacheIwLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EPSt18__moneypunct_cacheIwLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EPSt17__timepunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EPSt17__timepunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EPSt17__timepunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EPSt17__timepunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE7seekoffExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE8xsputn_2EPKciS2_i@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_allocEj@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_setupEPcS0_i@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPFPvjEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKai@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKhi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPaiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPciS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPhiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1Ei@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPFPvjEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKai@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKhi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPaiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPciS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPhiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2Ei@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE13_M_set_bufferEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE22_M_convert_to_externalEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE13_M_set_bufferEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE22_M_convert_to_externalEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwiw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE4readEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5seekgExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4.5 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEij@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwiw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE8readsomeEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_writeEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9pubsetbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9pubsetbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EP15__locale_structPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EP15__locale_structPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC1EjRKSt8valarrayIjES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC2EjRKSt8valarrayIjES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl16_M_install_cacheEPKNS_5facetEj@GLIBCXX_3.4.7 4.1.1
+ _ZNSt6locale5_ImplC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1ERKS0_j@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2ERKS0_j@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EPSt16__numpunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EPSt16__numpunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EPSt16__numpunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EPSt16__numpunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC1ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC2ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEixEj@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i@GLIBCXX_3.4.9 4.2.1
+ _ZSt16__ostream_insertIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKS3_i@GLIBCXX_3.4.9 4.2.1
+ _ZSt17__copy_streambufsIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.6 4.1.1
+ _ZSt17__copy_streambufsIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.6 4.1.1
+ _ZSt17__verify_groupingPKcjRKSs@GLIBCXX_3.4.10 4.3
+ _ZSt21__copy_streambufs_eofIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZSt21__copy_streambufs_eofIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZThn8_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSiD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSiD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSoD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSoD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10istrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10istrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10ostrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10ostrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _Znaj@GLIBCXX_3.4 4.1.1
+ _ZnajRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _Znwj@GLIBCXX_3.4 4.1.1
+ _ZnwjRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcEC1EP15pthread_mutex_t@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcEC2EP15pthread_mutex_t@GLIBCXX_3.4 4.1.1
--- gdc-4.4-1.063-4.4.7.orig/debian/gnatvsn.gpr
+++ gdc-4.4-1.063-4.4.7/debian/gnatvsn.gpr
@@ -0,0 +1,31 @@
+--  Project file for use with GNAT
+--  Copyright (c) 2005, 2008 Ludovic Brenta <ludovic@ludovic-brenta.org>
+--
+--  This program is free software; you can redistribute it and/or modify
+--  it under the terms of the GNU General Public License as published by
+--  the Free Software Foundation; either version 3 of the License, or
+--  (at your option) any later version.
+--
+--  This program is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+--  GNU General Public License for more details.
+--
+--  This project file is designed to help build applications that use
+--  GNAT project files.  Here is an example of how to use this project file:
+--
+--  with "gnatvsn";
+--  project Example is
+--     for Object_Dir use "obj";
+--     for Exec_Dir use ".";
+--     for Main use ("example");
+--  end Example;
+
+project Gnatvsn is
+   for Library_Name use "gnatvsn";
+   for Library_Dir use "/usr/lib";
+   for Library_Kind use "dynamic";
+   for Source_Dirs use ("/usr/share/ada/adainclude/gnatvsn");
+   for Library_ALI_Dir use "/usr/lib/ada/adalib/gnatvsn";
+   for Externally_Built use "true";
+end Gnatvsn;
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++CXX-BV-doc.overrides
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++CXX-BV-doc.overrides
@@ -0,0 +1,2 @@
+libstdc++@CXX@-@BV@-doc: hyphen-used-as-minus-sign
+libstdc++@CXX@-@BV@-doc: manpage-has-bad-whatis-entry
--- gdc-4.4-1.063-4.4.7.orig/debian/locale-gen
+++ gdc-4.4-1.063-4.4.7/debian/locale-gen
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+LOCPATH=`pwd`/locales
+export LOCPATH
+
+[ -d $LOCPATH ] || mkdir -p $LOCPATH
+
+umask 022
+
+echo "Generating locales..."
+while read locale charset; do
+	case $locale in \#*) continue;; esac
+	[ -n "$locale" -a -n "$charset" ] || continue
+	echo -n "  `echo $locale | sed 's/\([^.\@]*\).*/\1/'`"
+	echo -n ".$charset"
+	echo -n `echo $locale | sed 's/\([^\@]*\)\(\@.*\)*/\2/'`
+	echo -n '...'
+        if [ -f $LOCPATH/$locale ]; then
+	    input=$locale
+	else
+            input=`echo $locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`
+	fi
+	localedef -i $input -c -f $charset $LOCPATH/$locale #-A /etc/locale.alias
+	echo ' done'; \
+done <<EOF
+# This file lists locales that the libstdc++ testsuite depends on
+de_DE			ISO-8859-1
+de_DE@euro		ISO-8859-15
+en_HK			ISO-8859-1
+en_PH			ISO-8859-1
+en_US			ISO-8859-1
+en_US.ISO-8859-1	ISO-8859-1
+en_US.ISO-8859-15	ISO-8859-15
+en_US.UTF-8		UTF-8
+es_ES			ISO-8859-1
+es_MX			ISO-8859-1
+fr_FR			ISO-8859-1
+fr_FR@euro		ISO-8859-15
+is_IS			ISO-8859-1
+is_IS.UTF-8		UTF-8
+it_IT			ISO-8859-1
+ja_JP.eucjp		EUC-JP
+se_NO.UTF-8		UTF-8
+ta_IN			UTF-8
+zh_TW			BIG5
+EOF
+
+echo "Generation complete."
--- gdc-4.4-1.063-4.4.7.orig/debian/dummy.texi
+++ gdc-4.4-1.063-4.4.7/debian/dummy.texi
@@ -0,0 +1 @@
+@c This file is empty because the original one has a non DFSG free license (GFDL)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules
+++ gdc-4.4-1.063-4.4.7/debian/rules
@@ -0,0 +1,107 @@
+#! /usr/bin/make -f
+# -*- makefile -*-
+# Build rules for gcc (>= 2.95) and gcc-snapshot
+# Targets found in this makefile:
+#	- unpack tarballs
+#	- patch sources
+#	- (re)create the control file
+#	- create a debian/rules.parameters file, which is included
+#	  by debian/rules2
+# All other targets are passed to the debian/rules2 file
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+unexport LANG LC_ALL LC_CTYPE LC_COLLATE LC_TIME LC_NUMERIC LC_MESSAGES
+
+default: build
+
+include debian/rules.defs
+include debian/rules.unpack
+include debian/rules.patch
+
+control: $(control_dependencies)
+	-mkdir -p $(stampdir)
+	$(MAKE) -f debian/rules.conf $@
+
+configure: $(configure_dependencies)
+$(configure_stamp): control $(unpack_stamp) $(patch_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(configure_dummy_stamp): control
+	$(MAKE) -f debian/rules2 $@
+$(configure_hppa64_stamp): $(build_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(configure_neon_stamp): $(build_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(configure_spu_stamp): $(build_stamp)
+	$(MAKE) -f debian/rules2 $@
+
+pre-build:
+#ifneq (,$(filter $(DEB_TARGET_ARCH),ia64 powerpc sparc))
+#	@echo explicitely fail the build for $(DEB_TARGET_ARCH)
+#	false
+#endif
+
+build: pre-build $(build_dependencies)
+$(build_stamp): $(unpack_stamp) $(patch_stamp) $(configure_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(build_dummy_stamp): $(configure_dummy_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(build_javadoc_stamp): $(build_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(build_hppa64_stamp): $(configure_hppa64_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(build_neon_stamp): $(configure_neon_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(build_spu_stamp): $(configure_spu_stamp)
+	$(MAKE) -f debian/rules2 $@
+
+check: $(check_stamp)
+$(check_stamp): $(build_stamp)
+	$(MAKE) -f debian/rules2 $@
+
+clean:
+	rm -rf $(stampdir)
+# remove temporary dirs used for unpacking
+	rm -rf $(gcc_srcdir) $(gpc_srcdir) p $(gdc_srcdir) d
+	-$(MAKE) -f debian/rules2 $@
+	rm -rf $(srcdir)* $(builddir)* debian/tmp* html
+	rm -f bootstrap-* first-move-stamp
+	rm -f autotools_files
+	rm -f debian/*.tmp
+	rm -f debian/soname-cache
+	find debian -name '.#*' | xargs -r rm -f
+	rm -f $(series_file)*
+	dh_clean
+
+install: $(install_dependencies)
+$(install_stamp): $(build_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(install_snap_stamp): $(build_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(install_dummy_stamp): $(build_dummy_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(install_hppa64_stamp): $(build_hppa64_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(install_neon_stamp): $(build_neon_stamp)
+	$(MAKE) -f debian/rules2 $@
+$(install_spu_stamp): $(build_spu_stamp)
+	$(MAKE) -f debian/rules2 $@
+
+html-docs doxygen-docs update-doxygen-docs update-ada-files xxx:
+	$(MAKE) -f debian/rules2 $@
+
+binary-indep binary-arch binary: install
+	$(MAKE) -f debian/rules2 $@
+
+source diff:
+	@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
+
+release:
+	foo=$(shell basename $(CURDIR)); \
+		if [ "$$foo" != "gcc-3.4" ]; then \
+			find -name CVS -o -name .cvsignore -o -name '.#*' | \
+				xargs rm -rf; \
+		fi
+
+.PHONY: build clean binary-indep binary-arch binary release
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.armel
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.armel
@@ -0,0 +1,26 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+ CXXABI_ARM_1.3.3@CXXABI_ARM_1.3.3 4.4.0
+ _ZNKSt9type_info6beforeERKS_@GLIBCXX_3.4 4.3.0
+ _ZNKSt9type_infoeqERKS_@GLIBCXX_3.4 4.3.0
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ __aeabi_atexit@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_cctor_nocookie_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_ctor_cookie_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_ctor_nocookie_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_delete3@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_delete3_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_delete@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_dtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_dtor_cookie@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_new_cookie@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_new_cookie_noctor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_new_cookie_nodtor@CXXABI_ARM_1.3.3 4.4.0
+ __aeabi_vec_new_nocookie@CXXABI_ARM_1.3.3 4.4.0
+ __cxa_begin_cleanup@CXXABI_1.3 4.3.0
+ __cxa_end_cleanup@CXXABI_1.3 4.3.0
+ __cxa_type_match@CXXABI_1.3 4.3.0
--- gdc-4.4-1.063-4.4.7.orig/debian/watch
+++ gdc-4.4-1.063-4.4.7/debian/watch
@@ -0,0 +1,2 @@
+version=2
+ftp://gcc.gnu.org/pub/gcc/releases/gcc-(4\.4[\d\.]*)	debian	uupdate
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.common
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.common
@@ -0,0 +1,740 @@
+ F2C_1.0@F2C_1.0 4.3
+ GFORTRAN_1.0@GFORTRAN_1.0 4.3
+ GFORTRAN_1.1@GFORTRAN_1.1 4.4.0
+ GFORTRAN_1.2@GFORTRAN_1.2 4.4.0
+ GFORTRAN_C99_1.0@GFORTRAN_C99_1.0 4.3
+ __iso_c_binding_c_f_pointer@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_c4@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_c8@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_d0@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_i1@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_i2@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_i4@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_i8@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_l1@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_l2@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_l4@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_l8@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_r4@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_r8@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_s0@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_u0@GFORTRAN_1.0 4.3
+ _gfortran_abort@GFORTRAN_1.0 4.3
+ _gfortran_access_func@GFORTRAN_1.0 4.3
+ _gfortran_adjustl@GFORTRAN_1.0 4.3
+ _gfortran_adjustl_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_adjustr@GFORTRAN_1.0 4.3
+ _gfortran_adjustr_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_alarm_sub_i4@GFORTRAN_1.0 4.3
+ _gfortran_alarm_sub_i8@GFORTRAN_1.0 4.3
+ _gfortran_alarm_sub_int_i4@GFORTRAN_1.0 4.3
+ _gfortran_alarm_sub_int_i8@GFORTRAN_1.0 4.3
+ _gfortran_all_l1@GFORTRAN_1.0 4.3
+ _gfortran_all_l2@GFORTRAN_1.0 4.3
+ _gfortran_all_l4@GFORTRAN_1.0 4.3
+ _gfortran_all_l8@GFORTRAN_1.0 4.3
+ _gfortran_any_l1@GFORTRAN_1.0 4.3
+ _gfortran_any_l2@GFORTRAN_1.0 4.3
+ _gfortran_any_l4@GFORTRAN_1.0 4.3
+ _gfortran_any_l8@GFORTRAN_1.0 4.3
+ _gfortran_arandom_r4@GFORTRAN_1.0 4.3
+ _gfortran_arandom_r8@GFORTRAN_1.0 4.3
+ _gfortran_associated@GFORTRAN_1.0 4.3
+ _gfortran_chdir_i4@GFORTRAN_1.0 4.3
+ _gfortran_chdir_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_chdir_i8@GFORTRAN_1.0 4.3
+ _gfortran_chdir_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_chmod_func@GFORTRAN_1.0 4.3
+ _gfortran_chmod_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_chmod_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_compare_string@GFORTRAN_1.0 4.3
+ _gfortran_compare_string_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_concat_string@GFORTRAN_1.0 4.3
+ _gfortran_concat_string_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_convert_char1_to_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_convert_char4_to_char1@GFORTRAN_1.1 4.4.0
+ _gfortran_count_1_l@GFORTRAN_1.0 4.3
+ _gfortran_count_2_l@GFORTRAN_1.0 4.3
+ _gfortran_count_4_l@GFORTRAN_1.0 4.3
+ _gfortran_count_8_l@GFORTRAN_1.0 4.3
+ _gfortran_cpu_time_4@GFORTRAN_1.0 4.3
+ _gfortran_cpu_time_8@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_1@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_1_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift0_1_char@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_2@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_2_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift0_2_char@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_4@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_4_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift0_4_char@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_8@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_8_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift0_8_char@GFORTRAN_1.0 4.3
+ _gfortran_cshift1_4@GFORTRAN_1.0 4.3
+ _gfortran_cshift1_4_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift1_4_char@GFORTRAN_1.0 4.3
+ _gfortran_cshift1_8@GFORTRAN_1.0 4.3
+ _gfortran_cshift1_8_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift1_8_char@GFORTRAN_1.0 4.3
+ _gfortran_ctime@GFORTRAN_1.0 4.3
+ _gfortran_ctime_sub@GFORTRAN_1.0 4.3
+ _gfortran_date_and_time@GFORTRAN_1.0 4.3
+ _gfortran_dtime@GFORTRAN_1.0 4.3
+ _gfortran_dtime_sub@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_1@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_1_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift0_1_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_2@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_2_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift0_2_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_4@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_4_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift0_4_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_8@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_8_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift0_8_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift1_4@GFORTRAN_1.0 4.3
+ _gfortran_eoshift1_4_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift1_4_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift1_8@GFORTRAN_1.0 4.3
+ _gfortran_eoshift1_8_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift1_8_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_1@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_1_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift2_1_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_2@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_2_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift2_2_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_4@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_4_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift2_4_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_8@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_8_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift2_8_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift3_4@GFORTRAN_1.0 4.3
+ _gfortran_eoshift3_4_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift3_4_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift3_8@GFORTRAN_1.0 4.3
+ _gfortran_eoshift3_8_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift3_8_char@GFORTRAN_1.0 4.3
+ _gfortran_erfc_scaled_r4@GFORTRAN_1.1 4.4.0
+ _gfortran_erfc_scaled_r8@GFORTRAN_1.1 4.4.0
+ _gfortran_etime@GFORTRAN_1.0 4.3
+ _gfortran_etime_sub@GFORTRAN_1.0 4.3
+ _gfortran_exit_i4@GFORTRAN_1.0 4.3
+ _gfortran_exit_i8@GFORTRAN_1.0 4.3
+ _gfortran_exponent_r4@GFORTRAN_1.0 4.3
+ _gfortran_exponent_r8@GFORTRAN_1.0 4.3
+ _gfortran_f2c_specific__abs_c4@F2C_1.0 4.3
+ _gfortran_f2c_specific__abs_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__acos_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__acosh_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__aimag_c4@F2C_1.0 4.3
+ _gfortran_f2c_specific__aimag_c8@F2C_1.0 4.3
+ _gfortran_f2c_specific__aint_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__anint_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__asin_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__asinh_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__atan2_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__atan_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__atanh_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__conjg_4@F2C_1.0 4.3
+ _gfortran_f2c_specific__conjg_8@F2C_1.0 4.3
+ _gfortran_f2c_specific__cos_c4@F2C_1.0 4.3
+ _gfortran_f2c_specific__cos_c8@F2C_1.0 4.3
+ _gfortran_f2c_specific__cos_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__cosh_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__dim_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__exp_c4@F2C_1.0 4.3
+ _gfortran_f2c_specific__exp_c8@F2C_1.0 4.3
+ _gfortran_f2c_specific__exp_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__log10_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__log_c4@F2C_1.0 4.3
+ _gfortran_f2c_specific__log_c8@F2C_1.0 4.3
+ _gfortran_f2c_specific__log_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__mod_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__sign_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__sin_c4@F2C_1.0 4.3
+ _gfortran_f2c_specific__sin_c8@F2C_1.0 4.3
+ _gfortran_f2c_specific__sin_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__sinh_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__sqrt_c4@F2C_1.0 4.3
+ _gfortran_f2c_specific__sqrt_c8@F2C_1.0 4.3
+ _gfortran_f2c_specific__sqrt_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__tan_r4@F2C_1.0 4.3
+ _gfortran_f2c_specific__tanh_r4@F2C_1.0 4.3
+ _gfortran_fdate@GFORTRAN_1.0 4.3
+ _gfortran_fdate_sub@GFORTRAN_1.0 4.3
+ _gfortran_fget@GFORTRAN_1.0 4.3
+ _gfortran_fget_i1_sub@GFORTRAN_1.0 4.3
+ _gfortran_fget_i2_sub@GFORTRAN_1.0 4.3
+ _gfortran_fget_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_fget_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_fgetc@GFORTRAN_1.0 4.3
+ _gfortran_fgetc_i1_sub@GFORTRAN_1.0 4.3
+ _gfortran_fgetc_i2_sub@GFORTRAN_1.0 4.3
+ _gfortran_fgetc_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_fgetc_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_flush_i4@GFORTRAN_1.0 4.3
+ _gfortran_flush_i8@GFORTRAN_1.0 4.3
+ _gfortran_fnum_i4@GFORTRAN_1.0 4.3
+ _gfortran_fnum_i8@GFORTRAN_1.0 4.3
+ _gfortran_fput@GFORTRAN_1.0 4.3
+ _gfortran_fput_i1_sub@GFORTRAN_1.0 4.3
+ _gfortran_fput_i2_sub@GFORTRAN_1.0 4.3
+ _gfortran_fput_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_fput_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_fputc@GFORTRAN_1.0 4.3
+ _gfortran_fputc_i1_sub@GFORTRAN_1.0 4.3
+ _gfortran_fputc_i2_sub@GFORTRAN_1.0 4.3
+ _gfortran_fputc_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_fputc_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_fraction_r4@GFORTRAN_1.0 4.3
+ _gfortran_fraction_r8@GFORTRAN_1.0 4.3
+ _gfortran_free@GFORTRAN_1.0 4.3
+ _gfortran_fseek_sub@GFORTRAN_1.0 4.3
+ _gfortran_fstat_i4@GFORTRAN_1.0 4.3
+ _gfortran_fstat_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_fstat_i8@GFORTRAN_1.0 4.3
+ _gfortran_fstat_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_ftell@GFORTRAN_1.0 4.3
+ _gfortran_ftell_i1_sub@GFORTRAN_1.0 4.3
+ _gfortran_ftell_i2_sub@GFORTRAN_1.0 4.3
+ _gfortran_ftell_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_ftell_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_generate_error@GFORTRAN_1.0 4.3
+ _gfortran_gerror@GFORTRAN_1.0 4.3
+ _gfortran_get_command_argument_i4@GFORTRAN_1.0 4.3
+ _gfortran_get_command_argument_i8@GFORTRAN_1.0 4.3
+ _gfortran_get_command_i4@GFORTRAN_1.0 4.3
+ _gfortran_get_command_i8@GFORTRAN_1.0 4.3
+ _gfortran_get_environment_variable_i4@GFORTRAN_1.0 4.3
+ _gfortran_get_environment_variable_i8@GFORTRAN_1.0 4.3
+ _gfortran_getarg_i4@GFORTRAN_1.0 4.3
+ _gfortran_getarg_i8@GFORTRAN_1.0 4.3
+ _gfortran_getcwd@GFORTRAN_1.0 4.3
+ _gfortran_getcwd_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_getcwd_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_getenv@GFORTRAN_1.0 4.3
+ _gfortran_getgid@GFORTRAN_1.0 4.3
+ _gfortran_getlog@GFORTRAN_1.0 4.3
+ _gfortran_getpid@GFORTRAN_1.0 4.3
+ _gfortran_getuid@GFORTRAN_1.0 4.3
+ _gfortran_gmtime_i4@GFORTRAN_1.0 4.3
+ _gfortran_gmtime_i8@GFORTRAN_1.0 4.3
+ _gfortran_hostnm@GFORTRAN_1.0 4.3
+ _gfortran_hostnm_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_hostnm_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_iargc@GFORTRAN_1.0 4.3
+ _gfortran_idate_i4@GFORTRAN_1.0 4.3
+ _gfortran_idate_i8@GFORTRAN_1.0 4.3
+ _gfortran_ierrno_i4@GFORTRAN_1.0 4.3
+ _gfortran_ierrno_i8@GFORTRAN_1.0 4.3
+ _gfortran_internal_pack@GFORTRAN_1.0 4.3
+ _gfortran_internal_unpack@GFORTRAN_1.0 4.3
+ _gfortran_irand@GFORTRAN_1.0 4.3
+ _gfortran_isatty_l4@GFORTRAN_1.0 4.3
+ _gfortran_isatty_l8@GFORTRAN_1.0 4.3
+ _gfortran_ishftc4@GFORTRAN_1.0 4.3
+ _gfortran_ishftc8@GFORTRAN_1.0 4.3
+ _gfortran_itime_i4@GFORTRAN_1.0 4.3
+ _gfortran_itime_i8@GFORTRAN_1.0 4.3
+ _gfortran_kill_i4@GFORTRAN_1.0 4.3
+ _gfortran_kill_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_kill_i8@GFORTRAN_1.0 4.3
+ _gfortran_kill_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_link_i4@GFORTRAN_1.0 4.3
+ _gfortran_link_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_link_i8@GFORTRAN_1.0 4.3
+ _gfortran_link_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_lstat_i4@GFORTRAN_1.0 4.3
+ _gfortran_lstat_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_lstat_i8@GFORTRAN_1.0 4.3
+ _gfortran_lstat_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_ltime_i4@GFORTRAN_1.0 4.3
+ _gfortran_ltime_i8@GFORTRAN_1.0 4.3
+ _gfortran_malloc@GFORTRAN_1.0 4.3
+ _gfortran_matmul_c4@GFORTRAN_1.0 4.3
+ _gfortran_matmul_c8@GFORTRAN_1.0 4.3
+ _gfortran_matmul_i1@GFORTRAN_1.0 4.3
+ _gfortran_matmul_i2@GFORTRAN_1.0 4.3
+ _gfortran_matmul_i4@GFORTRAN_1.0 4.3
+ _gfortran_matmul_i8@GFORTRAN_1.0 4.3
+ _gfortran_matmul_l4@GFORTRAN_1.0 4.3
+ _gfortran_matmul_l8@GFORTRAN_1.0 4.3
+ _gfortran_matmul_r4@GFORTRAN_1.0 4.3
+ _gfortran_matmul_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxval_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxval_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxval_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxval_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxval_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxval_r8@GFORTRAN_1.0 4.3
+ _gfortran_mclock8@GFORTRAN_1.0 4.3
+ _gfortran_mclock@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_minval_i1@GFORTRAN_1.0 4.3
+ _gfortran_minval_i2@GFORTRAN_1.0 4.3
+ _gfortran_minval_i4@GFORTRAN_1.0 4.3
+ _gfortran_minval_i8@GFORTRAN_1.0 4.3
+ _gfortran_minval_r4@GFORTRAN_1.0 4.3
+ _gfortran_minval_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminval_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminval_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminval_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminval_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminval_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminval_r8@GFORTRAN_1.0 4.3
+ _gfortran_move_alloc@GFORTRAN_1.0 4.3
+ _gfortran_move_alloc_c@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_c4@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_c8@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_i1@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_i2@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_i4@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_i8@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_r4@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_r8@GFORTRAN_1.0 4.3
+ _gfortran_msum_c4@GFORTRAN_1.0 4.3
+ _gfortran_msum_c8@GFORTRAN_1.0 4.3
+ _gfortran_msum_i1@GFORTRAN_1.0 4.3
+ _gfortran_msum_i2@GFORTRAN_1.0 4.3
+ _gfortran_msum_i4@GFORTRAN_1.0 4.3
+ _gfortran_msum_i8@GFORTRAN_1.0 4.3
+ _gfortran_msum_r4@GFORTRAN_1.0 4.3
+ _gfortran_msum_r8@GFORTRAN_1.0 4.3
+ _gfortran_mvbits_i1@GFORTRAN_1.0 4.3
+ _gfortran_mvbits_i2@GFORTRAN_1.0 4.3
+ _gfortran_mvbits_i4@GFORTRAN_1.0 4.3
+ _gfortran_mvbits_i8@GFORTRAN_1.0 4.3
+ _gfortran_nearest_r4@GFORTRAN_1.0 4.3
+ _gfortran_nearest_r8@GFORTRAN_1.0 4.3
+ _gfortran_os_error@GFORTRAN_1.0 4.3
+ _gfortran_pack@GFORTRAN_1.0 4.3
+ _gfortran_pack_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_pack_char@GFORTRAN_1.0 4.3
+ _gfortran_pack_s@GFORTRAN_1.0 4.3
+ _gfortran_pack_s_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_pack_s_char@GFORTRAN_1.0 4.3
+ _gfortran_pause_numeric@GFORTRAN_1.0 4.3
+ _gfortran_pause_string@GFORTRAN_1.0 4.3
+ _gfortran_perror_sub@GFORTRAN_1.0 4.3
+ _gfortran_pow_c4_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_c4_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_c8_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_c8_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_i4_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_i4_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_i8_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_i8_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_r4_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_r8_i8@GFORTRAN_1.0 4.3
+ _gfortran_product_c4@GFORTRAN_1.0 4.3
+ _gfortran_product_c8@GFORTRAN_1.0 4.3
+ _gfortran_product_i1@GFORTRAN_1.0 4.3
+ _gfortran_product_i2@GFORTRAN_1.0 4.3
+ _gfortran_product_i4@GFORTRAN_1.0 4.3
+ _gfortran_product_i8@GFORTRAN_1.0 4.3
+ _gfortran_product_r4@GFORTRAN_1.0 4.3
+ _gfortran_product_r8@GFORTRAN_1.0 4.3
+ _gfortran_rand@GFORTRAN_1.0 4.3
+ _gfortran_random_r4@GFORTRAN_1.0 4.3
+ _gfortran_random_r8@GFORTRAN_1.0 4.3
+ _gfortran_random_seed_i4@GFORTRAN_1.0 4.3
+ _gfortran_random_seed_i8@GFORTRAN_1.0 4.3
+ _gfortran_rename_i4@GFORTRAN_1.0 4.3
+ _gfortran_rename_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_rename_i8@GFORTRAN_1.0 4.3
+ _gfortran_rename_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_reshape@GFORTRAN_1.0 4.3
+ _gfortran_reshape_4@GFORTRAN_1.0 4.3
+ _gfortran_reshape_8@GFORTRAN_1.0 4.3
+ _gfortran_reshape_c4@GFORTRAN_1.0 4.3
+ _gfortran_reshape_c8@GFORTRAN_1.0 4.3
+ _gfortran_reshape_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_reshape_char@GFORTRAN_1.0 4.3
+ _gfortran_reshape_r4@GFORTRAN_1.0 4.3
+ _gfortran_reshape_r8@GFORTRAN_1.0 4.3
+ _gfortran_rrspacing_r4@GFORTRAN_1.0 4.3
+ _gfortran_rrspacing_r8@GFORTRAN_1.0 4.3
+ _gfortran_runtime_error@GFORTRAN_1.0 4.3
+ _gfortran_runtime_error_at@GFORTRAN_1.0 4.3
+ _gfortran_runtime_warning_at@GFORTRAN_1.1 4.4.0
+ _gfortran_secnds@GFORTRAN_1.0 4.3
+ _gfortran_second@GFORTRAN_1.0 4.3
+ _gfortran_second_sub@GFORTRAN_1.0 4.3
+ _gfortran_select_string@GFORTRAN_1.0 4.3
+ _gfortran_select_string_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_selected_char_kind@GFORTRAN_1.1 4.4.0
+ _gfortran_selected_int_kind@GFORTRAN_1.0 4.3
+ _gfortran_selected_real_kind@GFORTRAN_1.0 4.3
+ _gfortran_set_args@GFORTRAN_1.0 4.3
+ _gfortran_set_convert@GFORTRAN_1.0 4.3
+ _gfortran_set_exponent_r4@GFORTRAN_1.0 4.3
+ _gfortran_set_exponent_r8@GFORTRAN_1.0 4.3
+ _gfortran_set_fpe@GFORTRAN_1.0 4.3
+ _gfortran_set_max_subrecord_length@GFORTRAN_1.0 4.3
+ _gfortran_set_options@GFORTRAN_1.0 4.3
+ _gfortran_set_record_marker@GFORTRAN_1.0 4.3
+ _gfortran_shape_4@GFORTRAN_1.0 4.3
+ _gfortran_shape_8@GFORTRAN_1.0 4.3
+ _gfortran_signal_func@GFORTRAN_1.0 4.3
+ _gfortran_signal_func_int@GFORTRAN_1.0 4.3
+ _gfortran_signal_sub@GFORTRAN_1.0 4.3
+ _gfortran_signal_sub_int@GFORTRAN_1.0 4.3
+ _gfortran_size0@GFORTRAN_1.0 4.3
+ _gfortran_size1@GFORTRAN_1.0 4.3
+ _gfortran_sleep_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_sleep_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminval_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminval_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminval_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminval_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminval_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminval_r8@GFORTRAN_1.0 4.3
+ _gfortran_spacing_r4@GFORTRAN_1.0 4.3
+ _gfortran_spacing_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_c4@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_c8@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_i4@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_i8@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__acos_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__acos_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__acosh_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__acosh_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__aimag_c4@GFORTRAN_1.0 4.3
+ _gfortran_specific__aimag_c8@GFORTRAN_1.0 4.3
+ _gfortran_specific__aint_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__aint_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__anint_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__anint_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__asin_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__asin_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__asinh_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__asinh_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan2_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan2_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__atanh_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__atanh_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__char_1_i4@GFORTRAN_1.0 4.3
+ _gfortran_specific__char_1_i8@GFORTRAN_1.0 4.3
+ _gfortran_specific__conjg_4@GFORTRAN_1.0 4.3
+ _gfortran_specific__conjg_8@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_c4@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_c8@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__cosh_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__cosh_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_i4@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_i8@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__dprod_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_c4@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_c8@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__index_1_i4@GFORTRAN_1.0 4.3
+ _gfortran_specific__index_1_i8@GFORTRAN_1.0 4.3
+ _gfortran_specific__len_1_i4@GFORTRAN_1.0 4.3
+ _gfortran_specific__len_1_i8@GFORTRAN_1.0 4.3
+ _gfortran_specific__log10_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__log10_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_c4@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_c8@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_i4@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_i8@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_4_4@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_4_8@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_8_4@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_8_8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_i4@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_i8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_c4@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_c8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sinh_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__sinh_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_c4@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_c8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__tan_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__tan_r8@GFORTRAN_1.0 4.3
+ _gfortran_specific__tanh_r4@GFORTRAN_1.0 4.3
+ _gfortran_specific__tanh_r8@GFORTRAN_1.0 4.3
+ _gfortran_spread@GFORTRAN_1.0 4.3
+ _gfortran_spread_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_spread_char4_scalar@GFORTRAN_1.1 4.4.0
+ _gfortran_spread_char@GFORTRAN_1.0 4.3
+ _gfortran_spread_char_scalar@GFORTRAN_1.0 4.3
+ _gfortran_spread_scalar@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_c4@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_c8@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_i1@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_i2@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_i4@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_i8@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_r4@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_r8@GFORTRAN_1.0 4.3
+ _gfortran_srand@GFORTRAN_1.0 4.3
+ _gfortran_ssum_c4@GFORTRAN_1.0 4.3
+ _gfortran_ssum_c8@GFORTRAN_1.0 4.3
+ _gfortran_ssum_i1@GFORTRAN_1.0 4.3
+ _gfortran_ssum_i2@GFORTRAN_1.0 4.3
+ _gfortran_ssum_i4@GFORTRAN_1.0 4.3
+ _gfortran_ssum_i8@GFORTRAN_1.0 4.3
+ _gfortran_ssum_r4@GFORTRAN_1.0 4.3
+ _gfortran_ssum_r8@GFORTRAN_1.0 4.3
+ _gfortran_st_backspace@GFORTRAN_1.0 4.3
+ _gfortran_st_close@GFORTRAN_1.0 4.3
+ _gfortran_st_endfile@GFORTRAN_1.0 4.3
+ _gfortran_st_flush@GFORTRAN_1.0 4.3
+ _gfortran_st_inquire@GFORTRAN_1.0 4.3
+ _gfortran_st_iolength@GFORTRAN_1.0 4.3
+ _gfortran_st_iolength_done@GFORTRAN_1.0 4.3
+ _gfortran_st_open@GFORTRAN_1.0 4.3
+ _gfortran_st_read@GFORTRAN_1.0 4.3
+ _gfortran_st_read_done@GFORTRAN_1.0 4.3
+ _gfortran_st_rewind@GFORTRAN_1.0 4.3
+ _gfortran_st_set_nml_var@GFORTRAN_1.0 4.3
+ _gfortran_st_set_nml_var_dim@GFORTRAN_1.0 4.3
+ _gfortran_st_wait@GFORTRAN_1.1 4.4.0
+ _gfortran_st_write@GFORTRAN_1.0 4.3
+ _gfortran_st_write_done@GFORTRAN_1.0 4.3
+ _gfortran_stat_i4@GFORTRAN_1.0 4.3
+ _gfortran_stat_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_stat_i8@GFORTRAN_1.0 4.3
+ _gfortran_stat_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_stop_numeric@GFORTRAN_1.0 4.3
+ _gfortran_stop_string@GFORTRAN_1.0 4.3
+ _gfortran_store_exe_path@GFORTRAN_1.0 4.3
+ _gfortran_string_index@GFORTRAN_1.0 4.3
+ _gfortran_string_index_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_string_len_trim@GFORTRAN_1.0 4.3
+ _gfortran_string_len_trim_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_string_minmax@GFORTRAN_1.0 4.3
+ _gfortran_string_minmax_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_string_scan@GFORTRAN_1.0 4.3
+ _gfortran_string_scan_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_string_trim@GFORTRAN_1.0 4.3
+ _gfortran_string_trim_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_string_verify@GFORTRAN_1.0 4.3
+ _gfortran_string_verify_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_sum_c4@GFORTRAN_1.0 4.3
+ _gfortran_sum_c8@GFORTRAN_1.0 4.3
+ _gfortran_sum_i1@GFORTRAN_1.0 4.3
+ _gfortran_sum_i2@GFORTRAN_1.0 4.3
+ _gfortran_sum_i4@GFORTRAN_1.0 4.3
+ _gfortran_sum_i8@GFORTRAN_1.0 4.3
+ _gfortran_sum_r4@GFORTRAN_1.0 4.3
+ _gfortran_sum_r8@GFORTRAN_1.0 4.3
+ _gfortran_symlnk_i4@GFORTRAN_1.0 4.3
+ _gfortran_symlnk_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_symlnk_i8@GFORTRAN_1.0 4.3
+ _gfortran_symlnk_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_system@GFORTRAN_1.0 4.3
+ _gfortran_system_clock_4@GFORTRAN_1.0 4.3
+ _gfortran_system_clock_8@GFORTRAN_1.0 4.3
+ _gfortran_system_sub@GFORTRAN_1.0 4.3
+ _gfortran_time8_func@GFORTRAN_1.0 4.3
+ _gfortran_time_func@GFORTRAN_1.0 4.3
+ _gfortran_transfer_array@GFORTRAN_1.0 4.3
+ _gfortran_transfer_character@GFORTRAN_1.0 4.3
+ _gfortran_transfer_character_wide@GFORTRAN_1.1 4.4.0
+ _gfortran_transfer_complex@GFORTRAN_1.0 4.3
+ _gfortran_transfer_integer@GFORTRAN_1.0 4.3
+ _gfortran_transfer_logical@GFORTRAN_1.0 4.3
+ _gfortran_transfer_real@GFORTRAN_1.0 4.3
+ _gfortran_transpose@GFORTRAN_1.0 4.3
+ _gfortran_transpose_c4@GFORTRAN_1.0 4.3
+ _gfortran_transpose_c8@GFORTRAN_1.0 4.3
+ _gfortran_transpose_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_transpose_char@GFORTRAN_1.0 4.3
+ _gfortran_transpose_i4@GFORTRAN_1.0 4.3
+ _gfortran_transpose_i8@GFORTRAN_1.0 4.3
+ _gfortran_transpose_r4@GFORTRAN_1.0 4.3
+ _gfortran_transpose_r8@GFORTRAN_1.0 4.3
+ _gfortran_ttynam@GFORTRAN_1.0 4.3
+ _gfortran_ttynam_sub@GFORTRAN_1.0 4.3
+ _gfortran_umask_i4@GFORTRAN_1.0 4.3
+ _gfortran_umask_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_umask_i8@GFORTRAN_1.0 4.3
+ _gfortran_umask_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_unlink@GFORTRAN_1.0 4.3
+ _gfortran_unlink_i4_sub@GFORTRAN_1.0 4.3
+ _gfortran_unlink_i8_sub@GFORTRAN_1.0 4.3
+ _gfortran_unpack0@GFORTRAN_1.0 4.3
+ _gfortran_unpack0_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_unpack0_char@GFORTRAN_1.0 4.3
+ _gfortran_unpack1@GFORTRAN_1.0 4.3
+ _gfortran_unpack1_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_unpack1_char@GFORTRAN_1.0 4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/README.maintainers
+++ gdc-4.4-1.063-4.4.7/debian/README.maintainers
@@ -0,0 +1,237 @@
+-*- Outline -*-
+
+Read this file if you are a Debian Developer or would like to become
+one, or if you would like to create your own binary packages of GCC.
+
+* Overview
+
+From the GCC sources, Debian currently builds 3 source packages and
+almost 100 binary packages, using a single set of build scripts.  The
+3 source packages are:
+
+gcc-4.3: C, C++, Fortran, Objective-C and Objective-C++, plus many
+         common libraries like libssp, libmudflap, and libgcc.
+gcj-4.3: Java.
+gnat-4.3: Ada.
+
+The way we do this is quite peculiar, so listen up :)
+
+When we build from the gcc-4.3 source package, we produce, among many
+others, a gcc-4.3-source binary package that contains the pristine
+upstream tarball and some Debian-specific patches.  Any user can then
+install this package on their Debian system, and will have the full
+souces in /usr/src/gcc-4.3/gcc-<timestamp>.tar.bz2, along with the
+Makefile snippets that unpack and patch them.
+
+The intended use for this package is twofold: (a) allow users to build
+their own cross-compilers, and (b) build the other two packages,
+gcj-4.3 and gnat-4.3.
+
+For gcj-4.3 and gnat-4.3, the "source tarball" just contains an empty
+directory; e.g.:
+
+$ tar tzf gnat-4.3_4.3-20070609.orig.tar.gz
+gnat-4.3-4.3-20070609.orig/
+
+The build scripts for all source packages are the same, and they are
+included, as usual, in the .diff.gz file.
+
+* The build sequence
+
+As for all other Debian packages, you build GCC by calling
+debian/rules.
+
+The first thing debian/rules does it to look at the top-most entry in
+debian/changelog: this tells it which source package it is building.
+For example, if the first entry in debian/changelog reads:
+
+gcj-4.3 (4.3-20070609-1) unstable; urgency=low
+
+  * Upload as gcj-4.3.
+
+ -- Ludovic Brenta <lbrenta@debian.org>  Tue, 26 Jun 2007 00:26:42 +0200
+
+then, debian/rules will build only the Java binary packages.
+
+The second step is to unpack the GCC source tarball.  This tarball is
+either in the build directory (when building gcc-4.3), or in
+/usr/src/gcc-4.3/gcc-<timestamp>.tar.bz2 (when building the other
+source packages).
+
+The third step is to build debian/control from debian/control.m4 and a
+complex set of rules specified in debian/rules.conf.  The resulting
+control file contains only the binary packages to be built.
+
+The fourth step is to select which patches to apply (this is done in
+debian/rules.defs), and then to apply the selected patches (see
+debian/rules.patch).
+
+The fifth step is to create a "build" directory, cd into it, call
+../src/configure, and bootstrap the compiler and libraries selected.
+This is in debian/rules2.
+
+The sixth step is to call "make install" in the build directory: this
+installs the compiler and libraries into debian/tmp
+(i.e. debian/tmp/usr/bin/gcc, etc.)
+
+The seventh step is to run the GCC test suite (this actually takes at
+least as much time as bootstrapping, and you can disable it by setting
+WITHOUT_CHECK to "yes" in the environment).
+
+The eighth step is to build the binary packages, i.e. the .debs.  This
+is done by a set of language- and architecture-dependent Makefile
+snippets in the debian/rules.d/ directory, which move files from the
+debian/tmp tree to the debian/<package> trees.
+
+* Making your own packages
+
+In this example, we will build our own gnat-4.3 package.
+
+1) Create a .orig.tar.gz tarball containing a single, empty directory.
+
+$ mkdir gnat-4.3-4.3-20070609.orig
+$ tar czf gnat-4.3_4.3-20070609.orig.tar.gz gnat-4.3-4.3-20070609.orig
+
+2) Install gcc-4.3-source, which contains the real sources:
+
+# apt-get install gcc-4.3-source
+
+3) Create a build directory:
+
+$ mkdir gnat-4.3-4.3-20070609; cd gnat-4.3-4.3-20070609
+
+4) Checkout from Subversion:
+
+$ svn checkout svn://svn.debian.org/gcccvs/branches/sid/gcc-4.3/debian
+
+5) Edit the debian/changelog file, adding a new entry at the top that
+   starts with "gnat-4.3" instead of "gcc-4.3".
+
+6) Generate the debian/control file, adjusted for gnat:
+
+$ debian/rules control
+
+7) Build:
+
+$ dpkg-buildpackage -rfakeroot
+
+* Hints
+
+You need a powerful machine to build GCC.  The larger, the better.
+The build scripts take advantage of as many CPU threads as are
+available in your box (for example: 2 threads on a dual-core amd64; 4
+threads on a dual-core POWER5; 32 threads on an 8-core UltraSPARC T1,
+etc.).
+
+If you have 2 GB or more of physical RAM, you can achieve maximum
+performance by building in a tmpfs, like this:
+
+1) as root, create the new tmpfs:
+
+# mount -t tmpfs -o size=1280m none /home/lbrenta/src/debian/ram
+
+By default, the tmpfs will be limited to half your physical RAM.  The
+beauty of it is that it only consumes as much physical RAM as
+necessary to hold the files in it; deleting files frees up RAM.
+
+2) As your regular user, create the working directory in the tmpfs
+
+$ cp --archive ~/src/debian/gcc-4.3-4.3-20070901 ~/src/debian/ram
+
+3) Build in there.  On my dual-core, 2 GHz amd64, it takes 34 minutes
+   to build gnat, and the tmpfs takes 992 MiB of physical RAM but
+   exceeds 1 GiB during the build.
+
+Note that the build process uses a lot of temporary files.  Your $TEMP
+directory should therefore also be in a ram disk.  You can achieve
+that either by mounting it as tmpfs, or by setting TEMP to point to
+~/src/debian/ram.
+
+Also note that each thread in your processor(s) will run a compiler in
+it and use up RAM.  Therefore your physical memory should be:
+
+Physical_RAM >= 1.2 + 0.4 * Threads (in GiB)
+
+(this is an estimate; your mileage may vary).  If you have less
+physical RAM than recommended, reduce the number of threads allocated
+to the build process, or do not use a tmpfs to build.
+
+* Patching GCC
+
+Debian applies a large number of patches to GCC as part of the build
+process.  The patches are shell scripts located in debian/patches.
+The file debian/rules.defs selects the language front-ends and
+libraries to build.  Then, based on that, debian/rules.patch selects
+which patches to apply and in which order, then applies them and
+produces a file listing the applied patches in order in
+stamps/02-patch-stamp.
+
+There is currently no tool to help modify patches; you have to do it
+by hand.  Here is one possible way to do it:
+
+1) Apply all patches up to and EXCLUDING the patch you intend to
+   modify, in order.
+
+2) Make a deep copy of the src directory, e.g.
+   $ cp --archive src src.bak
+
+3) Apply the patch you intend to modify.
+
+4) Open the .dpatch file in your editor and remove the entire patch
+   section; leave alone the shell script part at the top.
+
+5) Change the files you want in the src directory.  After making
+   changes, you can experiment with
+   $ make -C build -jK
+   (where K is the number of processor threads you have)
+
+6) $ diff -rNu src.bak src >> debian/patches/<file>.dpatch
+
+7) Apply all remaining patches, to see if your change broke any of
+   them.
+
+8) $ svn commit debian/patches/<file>.dpatch
+
+If you want to add a new patch, the procedure is similar.  You must
+first choose where in the list of patches you want to insert your new
+patch.  Then, apply all patches up to that point and start editing.
+Do not forget to add a reference to your patch at the proper place in
+debian/rules.patch.
+
+** Patching GCC with Quilt
+
+The above method uses an entire copy of the source tree, which is
+currently 474 megabytes in size.  If you are in a one-gigabyte ram
+disk (see Hints above), this may be a problem.  One solution to this
+problem is to use quilt, which will only keep copies of the files
+touched by patches, not all files.  It also automates the updating of
+a patch after you change the sources.
+
+Quilt however does not take into account the selection of patches made
+in debian/rules.defs; instead it has a static list of patches.  After
+calling "debian/rules patch", you can generate such a list like this:
+
+$ egrep '^[^ ]+:' stamps/02-patch-stamp | \
+  sed 's!:!.dpatch -p0!' > debian/patches/series
+
+Unfortunately, not all patches are applied with -p0; you must then
+edit debian/patches/series by hand to replace -p0 with -p1 for a few
+patches.
+
+Once you have your debian/patches/series:
+
+$ debian/rules unpatch
+$ export QUILT_PATCHES=$PWD/debian/patches
+$ cd src
+$ quilt push -a (or quilt push <patch_name>)
+edit files at will; quilt add <file_name> to add a new file to the patch
+$ make -C ../build
+$ quilt refresh
+$ quilt push -a # check that no patch is broken
+$ quilt pop -a
+$ cd ..
+$ debian/rules clean build
+$ svn commit
+
+-- 
+Ludovic Brenta, 2007-12-05.
--- gdc-4.4-1.063-4.4.7.orig/debian/lib32gfortran3.symbols.ppc64
+++ gdc-4.4-1.063-4.4.7/debian/lib32gfortran3.symbols.ppc64
@@ -0,0 +1,3 @@
+libgfortran.so.3 lib32gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.mips
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.mips
@@ -0,0 +1,7 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.excprop"
+#include "libstdc++6.symbols.glibcxxmath"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc1.symbols.i386
+++ gdc-4.4-1.063-4.4.7/debian/libgcc1.symbols.i386
@@ -0,0 +1,132 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addtf3@GCC_4.4.0 1:4.4.0
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __copysigntf3@GCC_4.4.0 1:4.4.0
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.4.0 1:4.4.0
+ __divtf3@GCC_4.4.0 1:4.4.0
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.4.0 1:4.4.0
+ __extenddftf2@GCC_4.4.0 1:4.4.0
+ __extendsftf2@GCC_4.4.0 1:4.4.0
+ __fabstf2@GCC_4.4.0 1:4.4.0
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.4.0 1:4.4.0
+ __fixtfsi@GCC_4.4.0 1:4.4.0
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.4.0 1:4.4.0
+ __fixunstfsi@GCC_4.4.0 1:4.4.0
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfsi@GCC_3.0 1:4.1.1
+ __fixxfdi@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.4.0 1:4.4.0
+ __floatdixf@GCC_3.0 1:4.1.1
+ __floatsitf@GCC_4.4.0 1:4.4.0
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.4.0 1:4.4.0
+ __floatundixf@GCC_4.2.0 1:4.2.1
+ __floatunsitf@GCC_4.4.0 1:4.4.0
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.4.0 1:4.4.0
+ __gttf2@GCC_4.4.0 1:4.4.0
+ __letf2@GCC_4.4.0 1:4.4.0
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_4.4.0 1:4.4.0
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.4.0 1:4.4.0
+ __multf3@GCC_4.4.0 1:4.4.0
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negtf2@GCC_4.4.0 1:4.4.0
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __netf2@GCC_4.4.0 1:4.4.0
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.4.0 1:4.4.0
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subtf3@GCC_4.4.0 1:4.4.0
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __trunctfdf2@GCC_4.4.0 1:4.4.0
+ __trunctfsf2@GCC_4.4.0 1:4.4.0
+ __trunctfxf2@GCC_4.4.0 1:4.4.0
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unordtf2@GCC_4.4.0 1:4.4.0
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64gfortran3.symbols.sparc
+++ gdc-4.4-1.063-4.4.7/debian/lib64gfortran3.symbols.sparc
@@ -0,0 +1,5 @@
+libgfortran.so.3 lib64gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.hurd-i386
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.hurd-i386
@@ -0,0 +1,5 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit.hurd"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.mipsel
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.mipsel
@@ -0,0 +1,2 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++CXX.postinst
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++CXX.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/libstdc++@CXX@
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	    rm -rf $docdir
+	    ln -s gcc-@BV@-base $docdir
+	fi
+esac
+
+#DEBHELPER#
--- gdc-4.4-1.063-4.4.7.orig/debian/gij-hppa
+++ gdc-4.4-1.063-4.4.7/debian/gij-hppa
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+prctl=
+
+case "$(prctl --unaligned=)" in *signal)
+    echo >&2 "$(basename $0): ignore unaligned memory accesses"
+    prctl="prctl --unaligned=default"
+esac
+
+exec $prctl /usr/bin/gij-4.4.bin "$@"
+#! /bin/sh
+
+prctl=
+
+case "$(prctl --unaligned=)" in *signal)
+    echo >&2 "$(basename $0): ignore unaligned memory accesses"
+    prctl="prctl --unaligned=default"
+esac
+
+exec $prctl /usr/bin/gij-4.4.bin "$@"
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc1.symbols.powerpc
+++ gdc-4.4-1.063-4.4.7/debian/libgcc1.symbols.powerpc
@@ -0,0 +1,139 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3.4@GCC_3.3.4 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.1.0@GCC_4.1.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __adddf3@GCC_3.0 1:4.1.1
+ __addsf3@GCC_3.0 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdf3@GCC_3.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divsf3@GCC_3.0 1:4.1.1
+ __divtc3@GCC_4.1.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqdf2@GCC_3.0 1:4.1.1
+ __eqsf2@GCC_3.0 1:4.1.1
+ __extendsfdf2@GCC_3.0 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixdfsi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixsfsi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.1.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.1.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.1.0 1:4.1.1
+ __floatsidf@GCC_3.0 1:4.1.1
+ __floatsisf@GCC_3.0 1:4.1.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.2.0 1:4.2.1
+ __floatunsidf@GCC_4.2.0 1:4.2.1
+ __floatunsisf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __gcc_qadd@GCC_4.1.0 1:4.1.1
+ __gcc_qdiv@GCC_4.1.0 1:4.1.1
+ __gcc_qmul@GCC_4.1.0 1:4.1.1
+ __gcc_qsub@GCC_4.1.0 1:4.1.1
+ __gedf2@GCC_3.0 1:4.1.1
+ __gesf2@GCC_3.0 1:4.1.1
+ __gtdf2@GCC_3.0 1:4.1.1
+ __gtsf2@GCC_3.0 1:4.1.1
+ __ledf2@GCC_3.0 1:4.1.1
+ __lesf2@GCC_3.0 1:4.1.1
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __ltdf2@GCC_3.0 1:4.1.1
+ __ltsf2@GCC_3.0 1:4.1.1
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldf3@GCC_3.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __mulsf3@GCC_3.0 1:4.1.1
+ __multc3@GCC_4.1.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __nedf2@GCC_3.0 1:4.1.1
+ __negdf2@GCC_3.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negsf2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __nesf2@GCC_3.0 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.1.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subdf3@GCC_3.0 1:4.1.1
+ __subsf3@GCC_3.0 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __trampoline_setup@GCC_3.4.2 1:4.1.1
+ __truncdfsf2@GCC_3.0 1:4.1.1
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unorddf2@GCC_3.3.4 1:4.1.1
+ __unordsf2@GCC_3.3.4 1:4.1.1
--- gdc-4.4-1.063-4.4.7.orig/debian/lib32gomp1.symbols.ppc64
+++ gdc-4.4-1.063-4.4.7/debian/lib32gomp1.symbols.ppc64
@@ -0,0 +1,4 @@
+libgomp.so.1 lib32gomp1 #MINVER#
+#include "libgomp1.symbols.common"
+ omp_unset_nest_lock@Base 4.3.0
+ omp_unset_nest_lock_@Base 4.3.0
--- gdc-4.4-1.063-4.4.7.orig/debian/libmudflap.copyright
+++ gdc-4.4-1.063-4.4.7/debian/libmudflap.copyright
@@ -0,0 +1,30 @@
+This package was debianized by Matthias Klose <doko@debian.org> on
+Mon,  5 Jul 2004 21:29:57 +0200
+
+Mudflap is part of GCC.
+
+Authors: Frank Ch. Eigler <fche@redhat.com>, Graydon Hoare <graydon@redhat.com>
+
+Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+In addition to the permissions in the GNU General Public License, the
+Free Software Foundation gives you unlimited permission to link the
+compiled version of this file into combinations with other programs,
+and to distribute those combinations without any restriction coming
+from the use of this file.  (The General Public License restrictions
+do apply in other respects; for example, they cover modification of
+the file, and distribution when not linked into a combine
+executable.)
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
--- gdc-4.4-1.063-4.4.7.orig/debian/libgnatvsnBV.overrides
+++ gdc-4.4-1.063-4.4.7/debian/libgnatvsnBV.overrides
@@ -0,0 +1 @@
+libgnatvsn@BV@: missing-dependency-on-libc
--- gdc-4.4-1.063-4.4.7.orig/debian/reduce-test-diff.awk
+++ gdc-4.4-1.063-4.4.7/debian/reduce-test-diff.awk
@@ -0,0 +1,33 @@
+#! /usr/bin/gawk -f
+
+BEGIN {
+	skip=0
+	warn=0
+}
+
+/^-(FAIL|ERROR|UNRESOLVED|WARNING)/ {
+	next
+}
+
+# only compare gcc, g++, g77 and objc results
+/=== treelang tests ===/ {
+	skip=1
+}
+
+# omit extra files appended to test-summary
+/^\+Compiler version/ {
+	skip=1
+}
+
+skip == 0 {
+	print
+	next
+}
+
+/^\+(FAIL|ERROR|UNRESOLVED|WARNING)/ {
+	warn=1
+}
+
+END {
+	exit warn
+}
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.64
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.64
@@ -0,0 +1,2 @@
+ _gfortran_clz128@GFORTRAN_1.2 4.4.0
+ _gfortran_ctz128@GFORTRAN_1.2 4.4.0
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc1.symbols.sparc
+++ gdc-4.4-1.063-4.4.7/debian/libgcc1.symbols.sparc
@@ -0,0 +1,102 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_LDBL_3.0@GCC_LDBL_3.0 1:4.2.1
+ GCC_LDBL_4.0.0@GCC_LDBL_4.0.0 1:4.2.1
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_LDBL_4.0.0 1:4.2.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_LDBL_3.0 1:4.2.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_LDBL_3.0 1:4.2.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_LDBL_3.0 1:4.2.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_LDBL_4.0.0 1:4.2.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_LDBL_4.0.0 1:4.2.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
--- gdc-4.4-1.063-4.4.7.orig/debian/compat
+++ gdc-4.4-1.063-4.4.7/debian/compat
@@ -0,0 +1 @@
+5
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.16.powerpc64
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.16.powerpc64
@@ -0,0 +1,178 @@
+ __iso_c_binding_c_f_pointer_i16@GFORTRAN_1.0 4.3
+ _gfortran_all_l16@GFORTRAN_1.0 4.3
+ _gfortran_any_l16@GFORTRAN_1.0 4.3
+ _gfortran_count_16_l@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_16@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift0_16_char@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift1_16@GFORTRAN_1.0 4.3
+ _gfortran_cshift1_16_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift1_16_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_16@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift0_16_char@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift1_16@GFORTRAN_1.0 4.3
+ _gfortran_eoshift1_16_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift1_16_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_16@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift2_16_char@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift3_16@GFORTRAN_1.0 4.3
+ _gfortran_eoshift3_16_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift3_16_char@GFORTRAN_1.0 4.3
+ _gfortran_ishftc16@GFORTRAN_1.0 4.3
+ _gfortran_matmul_i16@GFORTRAN_1.0 4.3
+ _gfortran_matmul_l16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxval_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_minval_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminval_i16@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_i16@GFORTRAN_1.0 4.3
+ _gfortran_msum_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_c16_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_c4_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_c8_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_i16_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_i16_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_i16_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_i4_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_i8_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_r16_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_r4_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_r8_i16@GFORTRAN_1.0 4.3
+ _gfortran_product_i16@GFORTRAN_1.0 4.3
+ _gfortran_reshape_16@GFORTRAN_1.0 4.3
+ _gfortran_shape_16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_r16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminval_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__char_1_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__index_1_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__len_1_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_16_16@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_16_4@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_16_8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_i16@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_i16@GFORTRAN_1.0 4.3
+ _gfortran_ssum_i16@GFORTRAN_1.0 4.3
+ _gfortran_sum_i16@GFORTRAN_1.0 4.3
+ _gfortran_transpose_i16@GFORTRAN_1.0 4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/gcj-BV-jre-headless.prerm
+++ gdc-4.4-1.063-4.4.7/debian/gcj-BV-jre-headless.prerm
@@ -0,0 +1,13 @@
+#! /bin/sh -e
+
+if [ "$1" = "remove" ] || [ "$1" = "deconfigure" ]; then
+    update-alternatives --quiet --remove java /usr/bin/gij-@BV@
+    update-alternatives --quiet --remove rmiregistry /usr/bin/grmiregistry-@BV@
+    update-alternatives --quiet --remove keytool /usr/bin/gkeytool-@BV@
+    update-alternatives --quiet --remove orbd /usr/bin/gorbd-@BV@
+    update-alternatives --quiet --remove rmid /usr/bin/grmid-@BV@
+fi
+
+#DEBHELPER#
+
+exit 0
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.alpha
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.alpha
@@ -0,0 +1,9 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.64bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcjLGCJ.postinst
+++ gdc-4.4-1.063-4.4.7/debian/libgcjLGCJ.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/libgcj@GCJ@
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	  rm -rf /usr/share/doc/libgcj@GCJ@
+	  ln -s gcj-@BV@-base /usr/share/doc/libgcj@GCJ@
+	fi
+esac
+
+#DEBHELPER#
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.patch
+++ gdc-4.4-1.063-4.4.7/debian/rules.patch
@@ -0,0 +1,454 @@
+# -*- makefile -*-
+# rules to patch the unpacked files in the source directory
+# ---------------------------------------------------------------------------
+# various rules to unpack addons and (un)apply patches.
+# 	- patch / apply-patches
+#	- unpatch / reverse-patches
+
+.NOTPARALLEL:
+
+patchdir	?= debian/patches
+series_file	?= $(patchdir)/series
+
+# which patches should be applied?
+
+#	svn-updates \
+
+debian_patches = \
+	$(if $(with_linaro_branch),gcc-linaro) \
+
+ifeq ($(with_java),yes)
+#  debian_patches += \
+#	svn-class-updates
+endif
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  debian_patches += \
+	rename-info-files \
+	pr25509-doc \
+	$(if $(with_linaro_branch),gcc-linaro-doc) \
+
+#	$(if $(with_linaro_branch),,svn-doc-updates) \
+
+endif
+
+#	boehm-gc-nocheck: seems to work on the buildds \
+
+debian_patches += \
+	gcc-textdomain \
+	gcc-driver-extra-langs
+
+ifeq ($(distribution),Ubuntu)
+  ifneq (,$(filter $(distrelease),dapper hardy intrepid jaunty karmic lucid))
+    debian_patches += gcc-hash-style-both
+  else
+    debian_patches += gcc-hash-style-gnu
+  endif
+  ifeq (,$(filter $(distrelease),dapper hardy intrepid jaunty karmic lucid maverick))
+    debian-patches += gcc-no-add-needed
+  endif
+else
+  debian_patches += gcc-hash-style-both
+  ifeq (,$(filter $(distrelease),etch lenny squeeze))
+    debian_patches += gcc-no-add-needed
+  endif
+endif
+
+debian_patches += \
+	$(if $(with_linaro_branch),,gcc-build-id) \
+	libstdc++-pic \
+	libstdc++-doclink \
+	libstdc++-man-3cxx \
+	libjava-stacktrace \
+	libjava-subdir \
+	libjava-jnipath \
+	libjava-sjlj \
+	libjava-disable-plugin \
+	alpha-no-ev4-directive \
+	boehm-gc-getnprocs \
+	note-gnu-stack \
+	pr25509 \
+	pr38333 \
+	gcc-cloog-dl \
+	libgomp-omp_h-multilib \
+	sparc-force-cpu \
+	gcc-stack_chk_fail-check \
+	sh4_atomic_update \
+	libstdc++-arm-wno-abi \
+	gold-and-ld \
+	libstdc++-test-installed \
+	pr40816 \
+	gnat-snapshot-build-fix \
+	gcc-java-align-data \
+	linux-atomic-builtin-expect \
+	mips-fix-loongson2f-nop$(if $(with_linaro_branch),-linaro) \
+	gcc-system-root \
+	no_fpr_in_libgcc \
+	pr44364 \
+	gcc-lfs \
+	pr50090 \
+	arm-dynamic-linker \
+
+ifneq ($(with_linaro_branch),yes)
+  debian_patches += \
+	libjava-atomic-builtins-eabi \
+	pr39429 \
+	rev146451 \
+	gcc-unwind-debug-hook \
+	pr40521-revert-workaround \
+	pr41848 \
+	gcc-arm-thumb2-sched \
+	arm-boehm-gc-locks \
+	gcj-use-atomic-builtins \
+	sh4-scheduling \
+	pr42748 \
+	pr43323 \
+	pr42321 \
+	libsupc++-vmi_class_type_info \
+	gcc-m68k-support-for-tls-backport \
+	pr44626 \
+	arm-thumb2-speedup-division \
+	gcc-arm-implicit-it \
+
+else
+  debian_patches += \
+	pr45112
+endif
+
+# TODO: update ...
+#	libjava-rpath \
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  debian_patches += \
+	$(if $(with_linaro_branch),,gcj-use-atomic-builtins-doc) \
+	gold-and-ld-doc
+endif
+
+hardening_patches =
+ifneq ($(distribution),Debian)
+  ifneq (,$(findstring gcc-4, $(PKGSOURCE)))
+    hardening_patches += gcc-default-format-security \
+	gcc-default-fortify-source gcc-default-relro \
+	testsuite-hardening-format \
+	testsuite-hardening-fortify \
+	testsuite-hardening-printf-types
+  endif
+endif
+ifeq ($(with_ssp)-$(with_ssp_default),yes-yes)
+  hardening_patches += gcc-default-ssp
+endif
+
+# FIXME 4.5: Drop and adjust symbols files
+ifneq (,$(findstring 4.4, $(PKGSOURCE)))
+  debian_patches += pr39491
+endif
+
+ifeq ($(with_proto),yes)
+  debian_patches += deb-protoize
+endif
+
+ifeq ($(with_ada),yes)
+  debian_patches += \
+	ada-driver-check \
+	ada-gcc-name \
+	ada-default-project-path \
+	ada-symbolic-tracebacks \
+	ada-library-project-files-soname \
+	ada-polyorb-dsa \
+	ada-bug589164 \
+	ada-bug601133
+
+  ifeq ($(biarch64),yes)
+    debian_patches += \
+	ada-nobiarch-check
+  endif
+
+  ifeq ($(with_libgnat),yes)
+    debian_patches += \
+	ada-gnatvsn \
+	ada-link-lib \
+	ada-libgnatvsn \
+	ada-libgnatprj \
+	ada-acats
+    ifeq ($(with_gnat_zcx)-$(with_gnat_sjlj),yes-yes)
+      debian_patches += \
+	ada-sjlj
+    endif
+  endif
+
+  ifeq ($(DEB_TARGET_ARCH_OS),kfreebsd)
+    debian_patches += ada-bug564232
+  endif
+
+endif
+
+# gcc-4.4 is not yet supported by gpc
+ifeq ($(with_pascal),yes)
+#
+else
+#  debian_patches += gcc-pascal-lang
+endif
+
+ifeq ($(with_d),yes)
+  debian_patches += \
+       gdc-4.4$(if $(with_linaro_branch),-linaro) \
+       gdc-hg-updates \
+       gdc-hg-doc-updates \
+       gdc-ice-valist \
+       gdc-stubs \
+       gdc-fix-build-kbsd \
+       gdc-fix-build-arm \
+       gdc-pr26885 \
+       gdc-driver-zlib \
+       gdc-libphobos-math \
+       gdc-libphobos-std-format
+  ifeq ($(with_libphobos),yes)
+    debian_patches += gdc-libphobos-build
+  else
+    debian_patches += gdc-driver-nophobos
+  endif
+  ifeq ($(with_multiarch_lib),yes)
+    debian_patches += gdc-multiarch
+  endif
+else
+  debian_patches += gcc-d-lang
+endif
+
+ifeq ($(DEB_TARGET_ARCH_OS),hurd)
+  debian_patches += hurd-changes hurd-pthread
+endif
+
+ifeq ($(DEB_TARGET_ARCH),alpha)
+  debian_patches += alpha-ieee mudflap-nocheck
+  ifneq ($(GFDL_INVARIANT_FREE),yes)
+    debian_patches += alpha-ieee-doc
+  endif
+endif
+
+ifneq (,$(findstring $(DEB_TARGET_ARCH),arm armel armhf))
+  debian_patches += libjava-armel-unwind
+  debian_patches += $(if $(with_linaro_branch),,arm-gcc-gcse)
+  debian_patches += $(if $(with_linaro_branch),armhf-triplet-backport)
+endif
+ifeq ($(distribution),Ubuntu)
+  # times out on the buildd
+  debian_patches += libstdc++-arm-no-check
+endif
+debian_patches += gcc-arm-earlyclobbers
+
+debian_patches += \
+	$(if $(with_linaro_branch),,pr40133) \
+	$(if $(with_linaro_branch),,pr40134) \
+
+#ifeq ($(DEB_TARGET_ARCH),lpia)
+#  debian_patches += gcc-atom gcc-atom-doc
+#endif
+
+ifeq ($(DEB_TARGET_ARCH),m68k)
+  debian_patches += m68k-multilib
+  debian_patches += pr41302
+  debian_patches += pr43804
+  debian_patches += pr37053
+  debian_patches += pr46179
+  debian_patches += pr39531
+  debian_patches += pr41064
+  debian_patches += pr47908
+endif
+
+ifeq ($(DEB_TARGET_ARCH),powerpcspe)
+  debian_patches += powerpc_remove_many
+endif
+
+ifeq ($(DEB_TARGET_ARCH_OS),kfreebsd)
+  debian_patches += kbsd-gnu
+  debian_patches += kbsd-gnu-ada
+endif
+
+ifneq (,$(findstring sh4,$(DEB_TARGET_ARCH)))
+  debian_patches += sh4-mode-switching
+endif
+
+ifeq ($(DEB_CROSS),yes)
+  debian_patches += cross-include cross-fixes
+endif
+
+spu_patches = cell-branch$(if $(with_linaro_branch),-linaro)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  spu_patches += cell-branch-doc
+endif
+
+#debian_patches += link-libs
+
+# all patches below this line are applied for gcc-snapshot builds as well
+
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  spu_patches =
+  debian_patches =
+  debian_patches += pr40521-revert-workaround
+endif
+
+debian_patches += gcc-ice-hack gcc-ice-apport
+debian_patches += libjava-disable-static libjava-fixed-symlinks
+
+debian_patches += \
+	$(if $(with_linaro_branch),,ada-arm-eabi) \
+	ada-mips
+
+ifeq ($(distribution),Debian)
+  debian_patches += arm-unbreak-eabi-armv4t
+endif
+
+ifneq (,$(filter $(DEB_TARGET_ARCH), hppa))
+  # timeouts on the buildd's
+  debian_patches += libmudflap-no-testsuite
+endif
+
+debian_patches += gcc-multiarch
+debian_patches += gcc-multiarch$(if $(with_linaro_branch),-linaro,-fsf)
+ifeq ($(with_multiarch_lib),yes)
+  debian_patches += libjava-multiarch$(if $(with_linaro_branch),-linaro)
+endif
+
+debian_patches += gcc-powerpc-nof
+
+ifeq ($(biarch64),yes)
+  ifeq (,$(findstring libjava, $(biarch_multidir_names)))
+    debian_patches += libjava-nobiarch-check
+  endif
+  debian_patches += config-ml
+
+  ifeq ($(DEB_CROSS),yes)
+    debian_patches += cross-biarch
+  endif
+  debian_patches += s390-biarch
+endif
+
+ifeq ($(biarch32),yes)
+  ifeq (,$(findstring libjava, $(biarch_multidir_names)))
+    debian_patches += libjava-nobiarch-check
+  endif
+  debian_patches += config-ml
+endif
+
+debian_patches += mips-triarch
+
+ifeq ($(biarch32),yes)
+  ifeq ($(with_multiarch_lib),yes)
+    debian_patches += gcc-multilib64-multiarch
+  else
+    debian_patches += gcc-multilib64dir
+  endif
+endif
+
+
+series_stamp = $(stampdir)/02-series-stamp
+series: $(series_stamp)
+$(series_stamp):
+	echo $(strip $(addsuffix .diff,$(debian_patches))) \
+	  | sed -r 's/  +/ /g' | tr " " "\n" > $(series_file)
+ifneq (,$(strip $(hardening_patches)))
+  ifneq ($(DEB_CROSS),yes)
+    ifneq ($(PKGSOURCE),gcc-snapshot)
+	echo $(strip $(addsuffix .diff,$(hardening_patches))) \
+	  | sed -r 's/  +/ /g' | tr " " "\n" >> $(series_file)
+    endif
+  endif
+endif
+	sed -r 's/(.)$$/\1 -p1/' -i $(series_file)
+	touch $@
+
+autotools_files := $(addprefix ./,$(foreach file,$(shell lsdiff --no-filename \
+	$(foreach patch,$(debian_patches),$(patchdir)/$(patch).diff) \
+	| sed -r 's/[ab]\/src\//src\//' | sort | uniq),$(shell echo $(file) \
+	| egrep 'configure\.(ac|in)|Makefile\.(am|in)|acinclude.m4')))
+
+autoconf_version = 2.59
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  # The actual version depends on the build-dependencies set by
+  # variable AUTO_BUILD_DEP in rules.conf.  Here, we assume the
+  # correct version is installed.
+  autoconf_version =
+endif
+
+# FIXME: the auto* stuff is done every time for every subdir, which
+# leads to build errors. Idea: record the auto* calls in the patch
+# files (AUTO <dir> <auto-command with options>) and run them separately,
+# maybe only once per directory).
+$(patch_stamp): $(unpack_stamp) $(series_stamp)
+	QUILT_PATCHES=$(patchdir) \
+	  quilt --quiltrc /dev/null push -a || test $$? = 2
+
+ifneq (,$(filter svn-updates, $(debian_patches)))
+	awk '/^EOF/ {exit} p==1 {print} /EOF$$/ {p=1}' \
+	  $(patchdir)/svn-updates.diff > src/LAST_UPDATED
+endif
+
+	if ! test -f ./autotools_files ; then touch ./autotools_files ; fi
+
+	cd $(srcdir)/fixincludes && ./genfixes
+	rm -f $(srcdir)/gcc/gengtype-lex.c
+
+	for f in $(autotools_files) ; \
+	  do case $$f in \
+	    */classpath/m4/acinclude.m4) \
+		: ;; \
+	    */configure.*|*/acinclude.m4) \
+		if grep ^"$$(md5sum $$f)"$$ ./autotools_files >/dev/null ; \
+		  then echo "Skipping already regenerated file $$f." ; \
+		else \
+		  echo "Running autoconf$(autoconf_version) in $$(dirname $$f)..." ; \
+		  dir="$(CURDIR)"; cd $(CURDIR)/$$(dirname $$f) \
+		    && AUTOM4TE=/usr/bin/autom4te$(autoconf_version) autoconf$(autoconf_version) \
+		    && cd $$dir \
+		    && echo "$$(md5sum $$f)" >> ./autotools_files ; \
+		fi ;; \
+	    */Makefile.*) ;; \
+	    *) echo "Unknown file: $$f"; false; \
+	  esac; \
+	done
+
+	for i in $(debian_patches); do \
+	  echo -e "\n$$i:" >> pxxx; \
+	  sed -n 's/^# *DP: */  /p' $(patchdir)/$$i.diff >> pxxx; \
+	done
+#	-$(srcdir)/move-if-change pxxx $@
+	mv pxxx $@
+
+unpatch:
+	QUILT_PATCHES=$(patchdir) \
+	  quilt --quiltrc /dev/null pop -a -R || test $$? = 2
+	rm -rf .pc
+	for f in $(autotools_files); do \
+	  rm -f $$(echo $$f | sed -r 's/\.(ac|am|in)$$//'); \
+	done
+
+no_spu_patches = $(hardening_patches)
+
+$(src_spu_stamp): $(patch_stamp)
+	rm -rf src-spu
+ifeq (,$(strip $(no_spu_patches)))
+	ln -s src src-spu
+else
+	cp -a src src-spu
+	set -e; \
+	for p in $(no_spu_patches); do \
+	  list="$$p $$list"; \
+	done; \
+	for p in $$list; do \
+	  echo "Revert for spu build: $$p"; \
+	  patch -d src-spu -p2 -R < debian/patches/$$p.diff; \
+	done
+endif
+	set -e; \
+	for p in $(spu_patches); do \
+	  echo "Apply for spu build: $$p"; \
+	  patch -d src-spu -p2 < debian/patches/$$p.diff; \
+	done
+ifneq (,$(strip $(no_spu_patches)))
+	cd src-spu/libgfortran \
+	  && AUTOM4TE=/usr/bin/autom4te$(autoconf_version) autoconf$(autoconf_version)
+endif
+	touch $@
+
+patch: $(patch_stamp)
+.PHONY: patch series quilt autotools
--- gdc-4.4-1.063-4.4.7.orig/debian/gcc-BV-spu.overrides
+++ gdc-4.4-1.063-4.4.7/debian/gcc-BV-spu.overrides
@@ -0,0 +1,2 @@
+gcc-@BV@-spu: non-standard-dir-in-usr usr/spu/
+gcc-@BV@-spu: file-in-unusual-dir
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64gcc1.symbols.sparc
+++ gdc-4.4-1.063-4.4.7/debian/lib64gcc1.symbols.sparc
@@ -0,0 +1,106 @@
+libgcc_s.so.1 lib64gcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.2@GLIBC_2.2 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.2 1:4.1.1
+ __deregister_frame_info@GLIBC_2.2 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.0.0 1:4.1.1
+ __divti3@GCC_3.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfti@GCC_3.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfti@GCC_3.0 1:4.1.1
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_3.0 1:4.1.1
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.2 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __lshrti3@GCC_3.0 1:4.1.1
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.0.0 1:4.1.1
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.2 1:4.1.1
+ __register_frame_info@GLIBC_2.2 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.2 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.2 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
--- gdc-4.4-1.063-4.4.7.orig/debian/lib32gfortran3.symbols
+++ gdc-4.4-1.063-4.4.7/debian/lib32gfortran3.symbols
@@ -0,0 +1,3 @@
+libgfortran.so.3 lib32gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
--- gdc-4.4-1.063-4.4.7.orig/debian/README
+++ gdc-4.4-1.063-4.4.7/debian/README
@@ -0,0 +1,33 @@
+		The Debian GNU Compiler Collection setup
+		========================================
+
+Please see the README.Debian in /usr/share/doc/gcc, contained in the
+gcc package for a description of the setup of the different compiler
+versions.
+
+For general discussion about the Debian toolchain (GCC, glibc, binutils)
+please use the mailing list debian-toolchain@lists.debian.org; for GCC
+specific things, please use debian-gcc@lists.debian.org.  When in doubt
+use the debian-toolchain ML.
+
+
+Maintainers of these packages
+-----------------------------
+
+Matthias Klose <doko@debian.org>
+Ray Dassen <jdassen@debian.org>
+Jeff Bailey <jbailey@nisa.net>			(hurd-i386)
+Joel Baker <fenton@debian.org>			(netbsd-i386)
+Philip Blundell <pb@debian.org>			(arm-linux)
+Ben Collins <bcollins@debian.org>		(sparc-linux)
+Randolph Chung <tausq@debian.org>		(ia64-linux)
+Falk Hueffner <falk@debian.org>			(alpha-linux)
+Dan Jacobowitz <dan@debian.org>			(powerpc-linux)
+Thiemo Seufer <ths@networkno.de>		(mips*-linux)
+Matt Taggart <taggart@carmen.fc.hp.com>		(hppa-linux)
+Gerhard Tonn <GerhardTonn@swol.de>		(s390-linux)
+Roman Zippel <zippel@linux-m68k.org>		(m68k-linux)
+Ludovic Brenta <ludovic@ludovic-brenta.org>	(gnat)
+Arthur Loiret <arthur.loiret@gmail.com>		(gdc)
+
+===============================================================================
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64gcc1.symbols.i386
+++ gdc-4.4-1.063-4.4.7/debian/lib64gcc1.symbols.i386
@@ -0,0 +1,144 @@
+libgcc_s.so.1 lib64gcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addtf3@GCC_4.3.0 1:4.3
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GCC_3.0 1:4.1.1
+ __deregister_frame_info@GCC_3.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.0.0 1:4.3
+ __divtc3@GCC_4.3.0 1:4.4.0
+ __divtf3@GCC_4.3.0 1:4.3
+ __divti3@GCC_3.0 1:4.1.1
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.3.0 1:4.3
+ __extenddftf2@GCC_4.3.0 1:4.3
+ __extendsftf2@GCC_4.3.0 1:4.3
+ __extendxftf2@GCC_4.3.0 1:4.3
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.3.0 1:4.3
+ __fixtfsi@GCC_4.3.0 1:4.3
+ __fixtfti@GCC_4.3.0 1:4.3
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.3.0 1:4.3
+ __fixunstfsi@GCC_4.3.0 1:4.3
+ __fixunstfti@GCC_4.3.0 1:4.3
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfti@GCC_3.0 1:4.1.1
+ __fixxfti@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.3.0 1:4.3
+ __floatsitf@GCC_4.3.0 1:4.3
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_4.3.0 1:4.3
+ __floattixf@GCC_3.0 1:4.1.1
+ __floatunditf@GCC_4.3.0 1:4.3
+ __floatunsitf@GCC_4.3.0 1:4.3
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.3.0 1:4.3
+ __floatuntixf@GCC_4.2.0 1:4.2.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.3.0 1:4.3
+ __gttf2@GCC_3.0 1:4.3
+ __gttf2@GCC_4.3.0 1:4.4.0
+ __letf2@GCC_4.3.0 1:4.3
+ __lshrti3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_3.0 1:4.3
+ __lttf2@GCC_4.3.0 1:4.4.0
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.0.0 1:4.3
+ __multc3@GCC_4.3.0 1:4.4.0
+ __multf3@GCC_4.3.0 1:4.3
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negtf2@GCC_4.3.0 1:4.3
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __netf2@GCC_3.0 1:4.3
+ __netf2@GCC_4.3.0 1:4.4.0
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.0.0 1:4.3
+ __powitf2@GCC_4.3.0 1:4.4.0
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GCC_3.0 1:4.1.1
+ __register_frame_info@GCC_3.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GCC_3.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GCC_3.0 1:4.1.1
+ __subtf3@GCC_4.3.0 1:4.3
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __trunctfdf2@GCC_4.3.0 1:4.3
+ __trunctfsf2@GCC_4.3.0 1:4.3
+ __trunctfxf2@GCC_4.3.0 1:4.3
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
+ __unordtf2@GCC_4.3.0 1:4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/gcj-BV-jdk.prerm
+++ gdc-4.4-1.063-4.4.7/debian/gcj-BV-jdk.prerm
@@ -0,0 +1,15 @@
+#! /bin/sh -e
+
+if [ "$1" = "remove" ] || [ "$1" = "deconfigure" ]; then
+    update-alternatives --quiet --remove javac /usr/bin/gcj-wrapper-@BV@
+    update-alternatives --quiet --remove jar /usr/bin/gjar-@BV@
+    update-alternatives --quiet --remove jarsigner /usr/bin/gjarsigner-@BV@
+    update-alternatives --quiet --remove javah /usr/bin/gjavah-@BV@
+    update-alternatives --quiet --remove javadoc /usr/bin/gjdoc-@BV@
+    update-alternatives --quiet --remove native2ascii /usr/bin/gnative2ascii-@BV@
+    update-alternatives --quiet --remove rmic /usr/bin/grmic-@BV@
+    update-alternatives --quiet --remove serialver /usr/bin/gserialver-@BV@
+    update-alternatives --quiet --remove tnameserv /usr/bin/gtnameserv-@BV@
+fi
+
+#DEBHELPER#
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.sparc
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.sparc
@@ -0,0 +1,3 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.s390
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.s390
@@ -0,0 +1,3 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
--- gdc-4.4-1.063-4.4.7.orig/debian/gnat-BV-doc.doc-base.ug
+++ gdc-4.4-1.063-4.4.7/debian/gnat-BV-doc.doc-base.ug
@@ -0,0 +1,16 @@
+Document: gnat-ugn-@BV@
+Title: GNAT User's Guide for Unix Platforms
+Author: Various
+Abstract: This guide describes the use of GNAT, a compiler and
+ software development toolset for the full Ada 95 programming language.
+ It describes the features of the compiler and tools, and details how
+ to use them to build Ada 95 applications.
+Section: Programming/Ada
+
+Format: html
+Index: /usr/share/doc/gnat-@BV@-doc/gnat_ugn.html
+Files: /usr/share/doc/gnat-@BV@-doc/gnat_ugn.html
+
+Format: info
+Index: /usr/share/info/gnat_ugn-@BV@.info.gz
+Files: /usr/share/info/gnat_ugn-@BV@*
--- gdc-4.4-1.063-4.4.7.orig/debian/gcjh-wrapper-BV.1
+++ gdc-4.4-1.063-4.4.7/debian/gcjh-wrapper-BV.1
@@ -0,0 +1,20 @@
+.TH GCJH-WRAPPER 1 "June 6, 2002" gcjh-wrapper "Java User's Manual"
+.SH NAME
+gcjh-wrapper \- a wrapper around gcjh
+
+.SH SYNOPSIS
+gcjh-wrapper [\fB\s-1OPTION\s0\fR] ... [\fI\s-1ARGS\s0\fR...]
+
+.SH DESCRIPTION
+
+\fBgcjh-wrapper\fR is a wrapper around gcjh(1) to be called as the java header
+compiler. Options different for javah(1) and gcjh(1) are translated,
+options unknown to gcjh(1) are silently ignored.
+
+.SH OPTIONS
+See gcjh-@BV@(1) for a list of options that gcj understands.
+
+.SH "SEE ALSO"
+.BR gcjh-@BV@(1)
+,
+.BR javah(1)
--- gdc-4.4-1.063-4.4.7.orig/debian/README.snapshot
+++ gdc-4.4-1.063-4.4.7/debian/README.snapshot
@@ -0,0 +1,36 @@
+Debian gcc-snapshot package
+===========================
+
+This package contains  a recent development SNAPSHOT of all files
+contained in the GNU Compiler Collection (GCC).
+
+DO NOT USE THIS SNAPSHOT FOR BUILDING DEBIAN PACKAGES!
+
+This package will NEVER hit the testing distribution. It's used for
+tracking gcc bugs submitted to the Debian BTS in recent development
+versions of gcc.
+
+To use this snapshot, you should set the following environment variables:
+
+	LD_LIBRARY_PATH=/usr/lib/gcc-snapshot/lib:$LD_LIBRARY_PATH
+	PATH=/usr/lib/gcc-snapshot/bin:$PATH
+
+You might also like to use a shell script to wrap up this 
+funcationality, e.g. 
+ 
+place in /usr/local/bin/gcc-snapshot and chmod +x it 
+ 
+----------- snip ----------
+#! /bin/sh
+LD_LIBRARY_PATH=/usr/lib/gcc-snapshot/lib:$LD_LIBRARY_PATH
+PATH=/usr/lib/gcc-snapshot/bin:$PATH
+gcc "$@"
+----------- snip ----------
+
+Make the same for g++, g77, gij, gcj, cpp, ...
+ 
+Don't forget the quotes around the $@ or gcc will not parse it's 
+command line correctly! 
+
+Unset these variables before building Debian packages destined for an
+upload to ftp-master.debian.org.
--- gdc-4.4-1.063-4.4.7.orig/debian/lib32gcc1.symbols.amd64
+++ gdc-4.4-1.063-4.4.7/debian/lib32gcc1.symbols.amd64
@@ -0,0 +1,132 @@
+libgcc_s.so.1 lib32gcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addtf3@GCC_4.4.0 1:4.4.0
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __copysigntf3@GCC_4.4.0 1:4.4.0
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.4.0 1:4.4.0
+ __divtf3@GCC_4.4.0 1:4.4.0
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.4.0 1:4.4.0
+ __extenddftf2@GCC_4.4.0 1:4.4.0
+ __extendsftf2@GCC_4.4.0 1:4.4.0
+ __fabstf2@GCC_4.4.0 1:4.4.0
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.4.0 1:4.4.0
+ __fixtfsi@GCC_4.4.0 1:4.4.0
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.4.0 1:4.4.0
+ __fixunstfsi@GCC_4.4.0 1:4.4.0
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfsi@GCC_3.0 1:4.1.1
+ __fixxfdi@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.4.0 1:4.4.0
+ __floatdixf@GCC_3.0 1:4.1.1
+ __floatsitf@GCC_4.4.0 1:4.4.0
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.4.0 1:4.4.0
+ __floatundixf@GCC_4.2.0 1:4.2.1
+ __floatunsitf@GCC_4.4.0 1:4.4.0
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.4.0 1:4.4.0
+ __gttf2@GCC_4.4.0 1:4.4.0
+ __letf2@GCC_4.4.0 1:4.4.0
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_4.4.0 1:4.4.0
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.4.0 1:4.4.0
+ __multf3@GCC_4.4.0 1:4.4.0
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negtf2@GCC_4.4.0 1:4.4.0
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __netf2@GCC_4.4.0 1:4.4.0
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.4.0 1:4.4.0
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subtf3@GCC_4.4.0 1:4.4.0
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __trunctfdf2@GCC_4.4.0 1:4.4.0
+ __trunctfsf2@GCC_4.4.0 1:4.4.0
+ __trunctfxf2@GCC_4.4.0 1:4.4.0
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unordtf2@GCC_4.4.0 1:4.4.0
--- gdc-4.4-1.063-4.4.7.orig/debian/gnat-BV-doc.doc-base.rm
+++ gdc-4.4-1.063-4.4.7/debian/gnat-BV-doc.doc-base.rm
@@ -0,0 +1,16 @@
+Document: gnat-rm-@BV@
+Title: GNAT (GNU Ada) Reference Manual
+Author: Various
+Abstract: This manual contains useful information in writing programs
+ using the GNAT compiler.  It includes information on implementation
+ dependent characteristics of GNAT, including all the information
+ required by Annex M of the standard.
+Section: Programming/Ada
+
+Format: html
+Index: /usr/share/doc/gnat-@BV@-doc/gnat_rm.html
+Files: /usr/share/doc/gnat-@BV@-doc/gnat_rm.html
+
+Format: info
+Index: /usr/share/info/gnat_rm-@BV@.info.gz
+Files: /usr/share/info/gnat_rm-@BV@*
--- gdc-4.4-1.063-4.4.7.orig/debian/control
+++ gdc-4.4-1.063-4.4.7/debian/control
@@ -0,0 +1,36 @@
+Source: gdc-4.4
+Section: devel
+Priority: optional
+Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+Uploaders: Iain Buclaw <ibuclaw@ubuntu.com>, Arthur Loiret <aloiret@debian.org>, Matthias Klose <doko@debian.org>
+Standards-Version: 3.9.3
+Build-Depends: dpkg-dev (>= 1.16.0.3), debhelper (>= 5.0.62), g++-multilib [amd64 i386 mips mipsel powerpc ppc64 s390 s390x sparc kfreebsd-amd64], libc6.1-dev (>= 2.13-5) [alpha ia64] | libc0.3-dev (>= 2.13-5) [hurd-i386] | libc0.1-dev (>= 2.13-5) [kfreebsd-i386 kfreebsd-amd64] | libc6-dev (>= 2.13-5), libc6-dev-amd64 [i386], libc6-dev-sparc64 [sparc], libc6-dev-s390 [s390x], libc6-dev-s390x [s390], libc6-dev-i386 [amd64], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], libc0.1-dev-i386 [kfreebsd-amd64], lib32gcc1 [amd64 ppc64 kfreebsd-amd64 s390x], lib64gcc1 [i386 powerpc sparc s390], libc6-dev-mips64 [mips mipsel], libc6-dev-mipsn32 [mips mipsel], m4, libtool, autoconf2.59, automake1.9, libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], zlib1g-dev, gawk, lzma, xz-utils, patchutils, binutils (>= 2.20.1-15~) | binutils-multiarch (>= 2.20.1-15~), binutils-hppa64 (>= 2.20.1-15~) [hppa], gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext, texinfo (>= 4.3), locales [!knetbsd-i386 !knetbsd-alpha], procps, sharutils, libcloog-ppl-dev (>= 0.15.8-1~), libmpfr-dev (>= 3.0.0-9~), libgmp-dev (>= 2:5.0.1~), dejagnu [!m68k !hurd-i386 !hurd-alpha], gcc-4.4-source (>= 4.4.7), gcc-4.4-source (<< 4.4.8), realpath (>= 1.9.12), chrpath, lsb-release, make (>= 3.81), quilt
+Build-Depends-Indep:  
+Homepage: http://bitbucket.org/goshawk/gdc
+Vcs-Browser: http://svn.debian.org/viewsvn/gcccvs/branches/sid/gcc-4.4/
+Vcs-Svn: svn://svn.debian.org/svn/gcccvs/branches/sid/gcc-4.4
+
+Package: gdc-4.4
+Architecture: any
+Priority: optional
+Depends: gcc-4.4-base (>= ${gcc:SoftVersion}), g++-4.4 (>= ${gcc:SoftVersion}), libphobos-4.4-dev (= ${gdc:Version}) [!hurd-i386 !hurd-alpha], ${shlibs:Depends}, ${misc:Depends}
+Provides: d-compiler, d-v1-compiler
+Replaces: gdc (<< 4.4.6-5)
+Description: D compiler (version 1), based on the GCC backend
+ This is the D compiler, which compiles D on platforms supported by the gcc
+ compiler. It uses the GCC backend to generate optimised code.
+ .
+ This compiler supports D language version 1.
+Homepage: https://bitbucket.org/goshawk/gdc
+
+Package: libphobos-4.4-dev
+Architecture: any
+Section: libdevel
+Priority: optional
+Depends: gdc-4.4 (= ${gdc:Version}), zlib1g-dev, ${shlibs:Depends}, ${misc:Depends}
+Provides: libphobos-dev
+Description: Phobos D standard library
+ This is the Phobos standard library that comes with the D compiler.
+ .
+ For more information check http://www.digitalmars.com/d/phobos/phobos.html
+
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc1.symbols.hurd-i386
+++ gdc-4.4-1.063-4.4.7/debian/libgcc1.symbols.hurd-i386
@@ -0,0 +1,101 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 4.2.1
+ GCC_3.3.1@GCC_3.3.1 4.2.1
+ GCC_3.3@GCC_3.3 4.2.1
+ GCC_3.4.2@GCC_3.4.2 4.2.1
+ GCC_3.4@GCC_3.4 4.2.1
+ GCC_4.0.0@GCC_4.0.0 4.2.1
+ GCC_4.2.0@GCC_4.2.0 4.2.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3.0
+ GLIBC_2.0@GLIBC_2.0 4.2.1
+ _Unwind_Backtrace@GCC_3.3 4.2.1
+ _Unwind_DeleteException@GCC_3.0 4.2.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 4.2.1
+ _Unwind_Find_FDE@GCC_3.0 4.2.1
+ _Unwind_ForcedUnwind@GCC_3.0 4.2.1
+ _Unwind_GetCFA@GCC_3.3 4.2.1
+ _Unwind_GetDataRelBase@GCC_3.0 4.2.1
+ _Unwind_GetGR@GCC_3.0 4.2.1
+ _Unwind_GetIP@GCC_3.0 4.2.1
+ _Unwind_GetIPInfo@GCC_4.2.0 4.2.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 4.2.1
+ _Unwind_GetRegionStart@GCC_3.0 4.2.1
+ _Unwind_GetTextRelBase@GCC_3.0 4.2.1
+ _Unwind_RaiseException@GCC_3.0 4.2.1
+ _Unwind_Resume@GCC_3.0 4.2.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 4.2.1
+ _Unwind_SetGR@GCC_3.0 4.2.1
+ _Unwind_SetIP@GCC_3.0 4.2.1
+ __absvdi2@GCC_3.0 4.2.1
+ __absvsi2@GCC_3.0 4.2.1
+ __addvdi3@GCC_3.0 4.2.1
+ __addvsi3@GCC_3.0 4.2.1
+ __ashldi3@GCC_3.0 4.2.1
+ __ashrdi3@GCC_3.0 4.2.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 4.2.1
+ __clzdi2@GCC_3.4 4.2.1
+ __clzsi2@GCC_3.4 4.2.1
+ __cmpdi2@GCC_3.0 4.2.1
+ __ctzdi2@GCC_3.4 4.2.1
+ __ctzsi2@GCC_3.4 4.2.1
+ __deregister_frame@GLIBC_2.0 4.2.1
+ __deregister_frame_info@GLIBC_2.0 4.2.1
+ __deregister_frame_info_bases@GCC_3.0 4.2.1
+ __divdc3@GCC_4.0.0 4.2.1
+ __divdi3@GLIBC_2.0 4.2.1
+ __divsc3@GCC_4.0.0 4.2.1
+ __divxc3@GCC_4.0.0 4.2.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 4.2.1
+ __ffsdi2@GCC_3.0 4.2.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 4.2.1
+ __fixsfdi@GCC_3.0 4.2.1
+ __fixunsdfdi@GCC_3.0 4.2.1
+ __fixunsdfsi@GCC_3.0 4.2.1
+ __fixunssfdi@GCC_3.0 4.2.1
+ __fixunssfsi@GCC_3.0 4.2.1
+ __fixunsxfdi@GCC_3.0 4.2.1
+ __fixunsxfsi@GCC_3.0 4.2.1
+ __fixxfdi@GCC_3.0 4.2.1
+ __floatdidf@GCC_3.0 4.2.1
+ __floatdisf@GCC_3.0 4.2.1
+ __floatdixf@GCC_3.0 4.2.1
+ __floatundidf@GCC_4.2.0 4.2.1
+ __floatundisf@GCC_4.2.0 4.2.1
+ __floatundixf@GCC_4.2.0 4.2.1
+ __frame_state_for@GLIBC_2.0 4.2.1
+ __gcc_personality_v0@GCC_3.3.1 4.2.1
+ __lshrdi3@GCC_3.0 4.2.1
+ __moddi3@GLIBC_2.0 4.2.1
+ __muldc3@GCC_4.0.0 4.2.1
+ __muldi3@GCC_3.0 4.2.1
+ __mulsc3@GCC_4.0.0 4.2.1
+ __mulvdi3@GCC_3.0 4.2.1
+ __mulvsi3@GCC_3.0 4.2.1
+ __mulxc3@GCC_4.0.0 4.2.1
+ __negdi2@GCC_3.0 4.2.1
+ __negvdi2@GCC_3.0 4.2.1
+ __negvsi2@GCC_3.0 4.2.1
+ __paritydi2@GCC_3.4 4.2.1
+ __paritysi2@GCC_3.4 4.2.1
+ __popcountdi2@GCC_3.4 4.2.1
+ __popcountsi2@GCC_3.4 4.2.1
+ __powidf2@GCC_4.0.0 4.2.1
+ __powisf2@GCC_4.0.0 4.2.1
+ __powixf2@GCC_4.0.0 4.2.1
+ __register_frame@GLIBC_2.0 4.2.1
+ __register_frame_info@GLIBC_2.0 4.2.1
+ __register_frame_info_bases@GCC_3.0 4.2.1
+ __register_frame_info_table@GLIBC_2.0 4.2.1
+ __register_frame_info_table_bases@GCC_3.0 4.2.1
+ __register_frame_table@GLIBC_2.0 4.2.1
+ __subvdi3@GCC_3.0 4.2.1
+ __subvsi3@GCC_3.0 4.2.1
+ __ucmpdi2@GCC_3.0 4.2.1
+ __udivdi3@GLIBC_2.0 4.2.1
+ __udivmoddi4@GCC_3.0 4.2.1
+ __umoddi3@GLIBC_2.0 4.2.1
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.source
+++ gdc-4.4-1.063-4.4.7/debian/rules.source
@@ -0,0 +1,15 @@
+SOURCE_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
+patchdir = $(SOURCE_DIR)/patches
+
+include $(SOURCE_DIR)/debian/rules.defs
+include $(SOURCE_DIR)/debian/rules.patch
+include $(SOURCE_DIR)/debian/rules.unpack
+
+patch-source: $(patch_stamp)
+
+clean-source:
+	rm -rf $(stampdir)
+	rm -rf $(gcc_srcdir) $(gpc_srcdir) p $(gdc_srcdir) d
+	rm -rf bin
+	rm -rf $(srcdir)
+
--- gdc-4.4-1.063-4.4.7.orig/debian/gpc-BV-doc.doc-base.gpcs
+++ gdc-4.4-1.063-4.4.7/debian/gpc-BV-doc.doc-base.gpcs
@@ -0,0 +1,23 @@
+Document: gpcs-@BV@-doc
+Title: The GNU Pascal Coding Standards
+Author: Various
+Abstract: The GNU Pascal Coding Standards were designed by a group of
+ GNU Pascal project volunteers. The aim of this document is extending
+ the GNU Coding Standards with specific information relating Pascal
+ programming.  As a matter of fact, the information contained in the
+ GNU Coding Standards mainly pertains to programs written in the C
+ language. On the other hand, they also explain many of the rules and
+ principles that are useful for writing portable, robust and reliable
+ programs. Most of those general topics could be shared with this
+ document with just a few specific notes, thus cross references are
+ provided which will lead you to the more extensive information
+ contained in the GNU Coding Standards.
+Section: Programming/Pascal
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/pascal/gpcs.html
+Files: /usr/share/doc/gcc-@BV@-base/pascal/gpcs.html
+
+Format: info
+Index: /usr/share/info/gpcs-@BV@.info.gz
+Files: /usr/share/info/gpcs-@BV@*
--- gdc-4.4-1.063-4.4.7.orig/debian/gcc-BV-doc.doc-base.gomp
+++ gdc-4.4-1.063-4.4.7/debian/gcc-BV-doc.doc-base.gomp
@@ -0,0 +1,15 @@
+Document: gcc-@BV@-gomp
+Title: The GNU OpenMP Implementation (for GCC @BV@)
+Author: Various
+Abstract: This manual documents the usage of libgomp, the GNU implementation
+ of the OpenMP Application Programming Interface (API) for multi-platform
+ shared-memory parallel programming in C/C++ and Fortran.
+Section: Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/libgomp.html
+Files: /usr/share/doc/gcc-@BV@-base/libgomp.html
+
+Format: info
+Index: /usr/share/info/libgomp-@BV@.info.gz
+Files: /usr/share/info/libgomp-@BV@*
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.hurd-i386
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.hurd-i386
@@ -0,0 +1,3 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc1.symbols.lpia
+++ gdc-4.4-1.063-4.4.7/debian/libgcc1.symbols.lpia
@@ -0,0 +1,132 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addtf3@GCC_4.4.0 1:4.4.0
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __copysigntf3@GCC_4.4.0 1:4.4.0
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.4.0 1:4.4.0
+ __divtf3@GCC_4.4.0 1:4.4.0
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.4.0 1:4.4.0
+ __extenddftf2@GCC_4.4.0 1:4.4.0
+ __extendsftf2@GCC_4.4.0 1:4.4.0
+ __fabstf2@GCC_4.4.0 1:4.4.0
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.4.0 1:4.4.0
+ __fixtfsi@GCC_4.4.0 1:4.4.0
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.4.0 1:4.4.0
+ __fixunstfsi@GCC_4.4.0 1:4.4.0
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfsi@GCC_3.0 1:4.1.1
+ __fixxfdi@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.4.0 1:4.4.0
+ __floatdixf@GCC_3.0 1:4.1.1
+ __floatsitf@GCC_4.4.0 1:4.4.0
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.4.0 1:4.4.0
+ __floatundixf@GCC_4.2.0 1:4.2.1
+ __floatunsitf@GCC_4.4.0 1:4.4.0
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.4.0 1:4.4.0
+ __gttf2@GCC_4.4.0 1:4.4.0
+ __letf2@GCC_4.4.0 1:4.4.0
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_4.4.0 1:4.4.0
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.4.0 1:4.4.0
+ __multf3@GCC_4.4.0 1:4.4.0
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negtf2@GCC_4.4.0 1:4.4.0
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __netf2@GCC_4.4.0 1:4.4.0
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.4.0 1:4.4.0
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subtf3@GCC_4.4.0 1:4.4.0
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __trunctfdf2@GCC_4.4.0 1:4.4.0
+ __trunctfsf2@GCC_4.4.0 1:4.4.0
+ __trunctfxf2@GCC_4.4.0 1:4.4.0
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unordtf2@GCC_4.4.0 1:4.4.0
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.amd64
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.amd64
@@ -0,0 +1,7 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.sonames
+++ gdc-4.4-1.063-4.4.7/debian/rules.sonames
@@ -0,0 +1,60 @@
+ifneq ($(vafilt_defined),1)
+  $(error rules.defs must be included before rules.sonames)
+endif
+
+ifeq (,$(wildcard debian/soname-cache))
+  SONAME_VARS := $(shell \
+	cache=debian/soname-cache; \
+	rm -f $$cache; \
+	v=`awk -F= '/^libtool_VERSION/ {split($$2,v,":"); print v[1]}' \
+		$(srcdir)/libstdc++-v3/configure.ac`; \
+	echo CXX_SONAME=$$v >> $$cache; \
+	v=`awk -F= '/^VERSION/ {split($$2,v,":"); print v[1]}' \
+		$(srcdir)/libobjc/configure.ac`; \
+	echo OBJC_SONAME=$$v >> $$cache; \
+	v=`tail -1 $(srcdir)/libgfortran/libtool-version | cut -d: -f1`; \
+	echo FORTRAN_SONAME=$$v >> $$cache; \
+	v=`tail -1 $(srcdir)/libmudflap/libtool-version | cut -d: -f1`; \
+	echo MUDFLAP_SONAME=$$v >> $$cache; \
+	v=`tail -1 $(srcdir)/libssp/libtool-version | cut -d: -f1`; \
+	echo SSP_SONAME=$$v >> $$cache; \
+	v=`tail -1 $(srcdir)/libjava/libtool-version | cut -d: -f1`; \
+	echo GCJ_SONAME=$$v >> $$cache; \
+	if [ "$$v" -ge 70 ]; then \
+	  echo GCJ_SONAME1=`echo $$v | sed 's/.$$//'` >> $$cache; \
+	  echo GCJ_SONAME2=`echo $$v | sed 's/.*\(.\)$$/\1/'` >> $$cache; \
+	else \
+	  echo GCJ_SONAME1=$$v >> $$cache; \
+	  echo GCJ_SONAME2= >> $$cache; \
+	fi; \
+	v=`tail -1 $(srcdir)/libffi/libtool-version | cut -d: -f1`; \
+	echo FFI_SONAME=$$v >> $$cache; \
+	v=`awk -F= '/^libtool_VERSION/ {split($$2,v,":"); print v[1]}' \
+		$(srcdir)/libgomp/configure.ac`; \
+	echo GOMP_SONAME=$$v >> $$cache; \
+        if [ "$(with_libgmath)" = yes ]; then \
+	  v=`tail -1 $(srcdir)/libgcc-math/libtool-version | cut -d: -f1`; \
+	  echo GCCMATH_SONAME=$$v >> $$cache; \
+	fi; \
+	v=`grep '[^_]Library_Version.*:' $(srcdir)/gcc/ada/gnatvsn.ads \
+		| sed -e 's/.*"\([^"]*\)".*/\1/'`; \
+	echo GNAT_SONAME=$$v >> $$cache; \
+	cat $$cache)
+else
+  SONAME_VARS := $(shell cat debian/soname-cache)
+endif
+CXX_SONAME	= $(call vafilt,$(SONAME_VARS),CXX_SONAME)
+OBJC_SONAME	= $(call vafilt,$(SONAME_VARS),OBJC_SONAME)
+FORTRAN_SONAME	= $(call vafilt,$(SONAME_VARS),FORTRAN_SONAME)
+MUDFLAP_SONAME	= $(call vafilt,$(SONAME_VARS),MUDFLAP_SONAME)
+SSP_SONAME	= $(call vafilt,$(SONAME_VARS),SSP_SONAME)
+GCJ_SONAME	= $(call vafilt,$(SONAME_VARS),GCJ_SONAME)
+GCJ_SONAME1	= $(call vafilt,$(SONAME_VARS),GCJ_SONAME1)
+GCJ_SONAME2	= $(call vafilt,$(SONAME_VARS),GCJ_SONAME2)
+FFI_SONAME	= $(call vafilt,$(SONAME_VARS),FFI_SONAME)
+GOMP_SONAME	= $(call vafilt,$(SONAME_VARS),GOMP_SONAME)
+GCCMATH_SONAME	= $(call vafilt,$(SONAME_VARS),GCCMATH_SONAME)
+GNAT_SONAME	= $(call vafilt,$(SONAME_VARS),GNAT_SONAME)
+
+# alias
+GFORTRAN_SONAME = $(FORTRAN_SONAME)
--- gdc-4.4-1.063-4.4.7.orig/debian/logwatch.sh
+++ gdc-4.4-1.063-4.4.7/debian/logwatch.sh
@@ -0,0 +1,104 @@
+#! /bin/sh
+
+# script to trick the build daemons and output something, if there is
+# still test/build activity
+
+# $1: primary file to watch. if there is activity on this file, we do nothing
+# $2+: files to watch to look for activity despite no output in $1
+#      if the files are modified or are newly created, then the message
+#      is printed on stdout.
+#      if nothing is modified, don't output anything (so the buildd timeout
+#      hits).
+
+pidfile=logwatch.pid
+timeout=3600
+message='\nlogwatch still running\n'
+
+usage()
+{
+    echo >&2 "usage: `basename $0` [-p <pidfile>] [-t <timeout>] [-m <message>]"
+    echo >&2 "           <logfile> [<logfile> ...]"
+    exit 1
+}
+
+while [ $# -gt 0 ]; do
+    case $1 in
+    -p)
+	pidfile=$2
+	shift
+	shift
+	;;
+    -t)
+	timeout=$2
+	shift
+	shift
+	;;
+    -m)
+	message="$2"
+	shift
+	shift
+	;;
+    -*)
+	usage
+	;;
+    *)
+	break
+    esac
+done
+
+[ $# -gt 0 ] || usage
+
+logfile="$1"
+shift
+otherlogs="$@"
+
+cleanup()
+{
+    rm -f $pidfile
+    exit 0
+}
+
+#trap cleanup 0 1 3 15
+
+echo $$ > $pidfile
+
+update()
+{
+    _logvar=$1
+    _othervar=$2
+
+    # logfile may not exist yet
+    if [ -r $logfile ]; then
+	_logtail="`tail -10 $logfile | md5sum` $f"
+    else
+	_logtail="does not exist: $logfile"
+    fi
+    eval $_logvar="'$_logtail'"
+
+    _othertails=''
+    for f in $otherlogs; do
+	if [ -r $f ]; then
+	    _othertails="$_othertails `tail -10 $f | md5sum` $f"
+	else
+	    _othertails="$_othertails does not exist: $f"
+	fi
+    done
+    eval $_othervar="'$_othertails'"
+}
+
+update logtail othertails
+while true; do
+    sleep $timeout
+    update newlogtail newothertails
+    if [ "$logtail" != "$newlogtail" ]; then
+	# there is still action in the primary logfile. do nothing.
+	logtail="$newlogtail"
+    elif [ "$othertails" != "$newothertails" ]; then
+	# there is still action in the other log files, so print the message
+	/bin/echo -e $message
+	othertails="$newothertails"
+    else
+	# nothing changed in the other log files. maybe a timeout ...
+	:
+    fi
+done
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.glibcxxmath
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.glibcxxmath
@@ -0,0 +1,22 @@
+ acosl@GLIBCXX_3.4.3 4.1.1
+ asinl@GLIBCXX_3.4.3 4.1.1
+ atan2l@GLIBCXX_3.4 4.1.1
+ atanl@GLIBCXX_3.4.3 4.1.1
+ ceill@GLIBCXX_3.4.3 4.1.1
+ coshl@GLIBCXX_3.4 4.1.1
+ cosl@GLIBCXX_3.4 4.1.1
+ expl@GLIBCXX_3.4 4.1.1
+ floorl@GLIBCXX_3.4.3 4.1.1
+ fmodl@GLIBCXX_3.4.3 4.1.1
+ frexpl@GLIBCXX_3.4.3 4.1.1
+ hypotl@GLIBCXX_3.4 4.1.1
+ ldexpl@GLIBCXX_3.4.3 4.1.1
+ log10l@GLIBCXX_3.4 4.1.1
+ logl@GLIBCXX_3.4 4.1.1
+ modfl@GLIBCXX_3.4.3 4.1.1
+ powl@GLIBCXX_3.4 4.1.1
+ sinhl@GLIBCXX_3.4 4.1.1
+ sinl@GLIBCXX_3.4 4.1.1
+ sqrtl@GLIBCXX_3.4 4.1.1
+ tanhl@GLIBCXX_3.4 4.1.1
+ tanl@GLIBCXX_3.4 4.1.1
--- gdc-4.4-1.063-4.4.7.orig/debian/gfortran-BV-CRB.preinst.in
+++ gdc-4.4-1.063-4.4.7/debian/gfortran-BV-CRB.preinst.in
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+set -e
+
+if [ "$1" = "upgrade" ] || [ "$1" = "configure" ]; then
+    update-alternatives --quiet --remove @TARGET@-gfortran /usr/bin/@TARGET@-gfortran-@BV@
+fi
+
+#DEBHELPER#
+
+exit 0
--- gdc-4.4-1.063-4.4.7.orig/debian/gnat.1
+++ gdc-4.4-1.063-4.4.7/debian/gnat.1
@@ -0,0 +1,43 @@
+.\" Hey, Emacs!  This is an -*- nroff -*- source file.
+.\"
+.\" Copyright (C) 1996 Erick Branderhorst <branderh@debian.org>
+.\" Copyright (C) 2011 Nicolas Boulenguez <nicolas.boulenguez@free.fr>
+.\"
+.\" This is free software; you can redistribute it and/or modify it under
+.\" the terms of the GNU General Public License as published by the Free
+.\" Software Foundation; either version 2, or (at your option) any later
+.\" version.
+.\"
+.\" This is distributed in the hope that it will be useful, but WITHOUT
+.\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+.\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+.\" for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License with
+.\" your Debian GNU/Linux system, in /usr/doc/copyright/GPL, or with the
+.\" dpkg source package as the file COPYING.  If not, write to the Free
+.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+.\"
+.\"
+.TH "GNAT TOOLBOX" 1 "Jun 2002" "Debian Project" "Debian Linux"
+.SH NAME
+gnat, gnatbind, gnatbl, gnatchop, gnatfind, gnatkr, gnatlink,
+gnatls, gnatmake, gnatprep, gnatpsta, gnatpsys, gnatxref, gnathtml \-
+GNAT toolbox
+.SH DESCRIPTION
+Those programs are part of GNU GNAT, a freely available Ada compiler.
+.PP
+For accessing the full GNAT manuals, use
+.B info gnat-ug-4.4
+and
+.B info gnat-rm-4.4
+for the sections related to the reference manual.
+If those sections cannot be found, you will have to install the
+gnat-4.4-doc package as well (since these manuals contain invariant parts,
+the package is located in the non-free part of the Debian archive).
+You may also browse
+.B http://gcc.gnu.org/onlinedocs
+which provides the GCC online documentation.
+.SH AUTHOR
+This manpage has been written by Samuel Tardieu <sam@debian.org>, for the
+Debian GNU/Linux project.
--- gdc-4.4-1.063-4.4.7.orig/debian/README.Bugs.m4
+++ gdc-4.4-1.063-4.4.7/debian/README.Bugs.m4
@@ -0,0 +1,333 @@
+Reporting Bugs in the GNU Compiler Collection for DIST
+========================================================
+
+Before reporting a bug, please
+------------------------------
+
+- Check that the behaviour really is a bug. Have a look into some
+  ANSI standards document.
+
+- Check the list of well known bugs: http://gcc.gnu.org/bugs.html#known
+
+- Try to reproduce the bug with a current GCC development snapshot. You
+  usually can get a recent development snapshot from the gcc-snapshot
+ifelse(DIST,`Debian',`dnl
+  package in the unstable (or experimental) distribution.
+
+  See: http://packages.debian.org/gcc-snapshot
+', DIST, `Ubuntu',`dnl
+  package in the current development distribution.
+
+  See: http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-snapshot/
+')dnl
+
+- Try to find out if the bug is a regression (an older GCC version does
+  not show the bug).
+
+- Check if the bug is already reported in the bug tracking systems.
+
+ifelse(DIST,`Debian',`dnl
+    Debian:   http://bugs.debian.org/debian-gcc@lists.debian.org
+', DIST, `Ubuntu',`dnl
+    Ubuntu:   https://bugs.launchpad.net/~ubuntu-toolchain/+packagebugs
+    Debian:   http://bugs.debian.org/debian-gcc@lists.debian.org
+')dnl
+    Upstream: http://gcc.gnu.org/bugzilla/
+
+
+Where to report a bug
+---------------------
+
+ifelse(DIST,`Debian',`dnl
+Please report bugs found in the packaging of GCC to the Debian bug tracking
+system. See http://www.debian.org/Bugs/ for instructions (or use the
+reportbug script).
+', DIST, `Ubuntu',`dnl
+Please report bugs found in the packaging of GCC to Launchpad. See below
+how issues should be reported.
+')dnl
+
+DIST's current policy is to closely follow the upstream development and
+only apply a minimal set of patches (which are summarized in the README.Debian
+document).
+
+ifelse(DIST,`Debian',`dnl
+If you think you have found an upstream bug, you did check the section
+above ("Before reporting a bug") and are able to provide a complete bug
+report (see below "How to report a bug"), then you may help the Debian
+GCC package maintainers, if you report the bug upstream and then submit
+a bug report to the Debian BTS and tell us the upstream report number.
+This way you are able to follow the upstream bug handling as well. If in
+doubt, report the bug to the Debian BTS (but read "How to report a bug"
+below).
+', DIST, `Ubuntu',`dnl
+If you think you have found an upstream bug, you did check the section
+above ("Before reporting a bug") and are able to provide a complete bug
+report (see below "How to report a bug"), then you may help the Ubuntu
+GCC package maintainers, if you report the bug upstream and then submit
+a bug report to Launchpad and tell us the upstream report number.
+This way you are able to follow the upstream bug handling as well. If in
+doubt, report the bug to Launchpad (but read "How to report a bug" below).
+
+Report the issue to https://bugs.launchpad.net/ubuntu/+source/SRCNAME.
+')dnl
+
+
+How to report a bug
+-------------------
+
+There are complete instructions in the gcc info manual (found in the
+gcc-doc package), section Bugs.
+
+The manual can be read using `M-x info' in Emacs, or if the GNU info
+program is installed on your system by `info --node "(gcc)Bugs"'. Or see
+the file BUGS included with the gcc source code.
+
+Online bug reporting instructions can be found at
+
+	http://gcc.gnu.org/bugs.html
+
+[Some paragraphs taken from the above URL]
+
+The main purpose of a bug report is to enable us to fix the bug. The
+most important prerequisite for this is that the report must be
+complete and self-contained, which we explain in detail below.
+
+Before you report a bug, please check the list of well-known bugs and,
+if possible in any way, try a current development snapshot.
+
+Summarized bug reporting instructions
+-------------------------------------
+
+What we need
+
+Please include in your bug report all of the following items, the
+first three of which can be obtained from the output of gcc -v:
+
+    * the exact version of GCC;
+    * the system type;
+    * the options given when GCC was configured/built;
+    * the complete command line that triggers the bug;
+    * the compiler output (error messages, warnings, etc.); and
+    * the preprocessed file (*.i*) that triggers the bug, generated by
+      adding -save-temps to the complete compilation command, or, in
+      the case of a bug report for the GNAT front end, a complete set
+      of source files (see below).
+
+What we do not want
+
+    * A source file that #includes header files that are left out
+      of the bug report (see above)
+    * That source file and a collection of header files.
+    * An attached archive (tar, zip, shar, whatever) containing all
+      (or some :-) of the above.
+    * A code snippet that won't cause the compiler to produce the
+      exact output mentioned in the bug report (e.g., a snippet with
+      just a few lines around the one that apparently triggers the
+      bug, with some pieces replaced with ellipses or comments for
+      extra obfuscation :-)
+    * The location (URL) of the package that failed to build (we won't
+      download it, anyway, since you've already given us what we need
+      to duplicate the bug, haven't you? :-)
+    * An error that occurs only some of the times a certain file is
+      compiled, such that retrying a sufficient number of times
+      results in a successful compilation; this is a symptom of a
+      hardware problem, not of a compiler bug (sorry)
+    * E-mail messages that complement previous, incomplete bug
+      reports. Post a new, self-contained, full bug report instead, if
+      possible as a follow-up to the original bug report
+    * Assembly files (*.s) produced by the compiler, or any binary files,
+      such as object files, executables, core files, or precompiled
+      header files
+    * Duplicate bug reports, or reports of bugs already fixed in the
+      development tree, especially those that have already been
+      reported as fixed last week :-)
+    * Bugs in the assembler, the linker or the C library. These are
+      separate projects, with separate mailing lists and different bug
+      reporting procedures
+    * Bugs in releases or snapshots of GCC not issued by the GNU
+      Project. Report them to whoever provided you with the release
+    * Questions about the correctness or the expected behavior of
+      certain constructs that are not GCC extensions. Ask them in
+      forums dedicated to the discussion of the programming language
+
+
+Known Bugs and Non-Bugs
+-----------------------
+
+[Please see /usr/share/doc/gcc/FAQ or http://gcc.gnu.org/faq.html first]
+
+
+C++ exceptions don't work with C libraries
+------------------------------------------
+
+[Taken from the closed bug report #22769] C++ exceptions don't work
+with C libraries, if the C code wasn't designed to be thrown through.
+A solution could be to translate all C libraries with -fexceptions.
+Mostly trying to throw an exception in a callback function (qsort,
+Tcl command callbacks, etc ...). Example:
+
+    #include <stdio.h>
+    #include <tcl.h>
+
+    class A {};
+
+    static
+    int SortCondition(void const*, void const*)
+    {
+        printf("throwing 'sortcondition' exception\n");
+        throw A();
+    }
+
+    int main(int argc, char *argv[])
+    {
+        int list[2];
+
+        try {
+            SortCondition(NULL,NULL);
+        } catch (A) {
+            printf("caught test-sortcondition exception\n");
+        }
+        try {
+            qsort(&list, sizeof(list)/sizeof(list[0]),sizeof(list[0]),
+                 &SortCondition);
+        } catch (A) {
+            printf("caught real-sortcondition exception\n");
+        }
+        return 0;
+}
+
+Andrew Macleod <amacleod@cygnus.com> responded:
+
+When compiled with the table driven exception handling, exception can only
+be thrown through functions which have been compiled with the table driven EH.
+If a function isn't compiled that way, then we do not have the frame
+unwinding information required to restore the registers when unwinding.
+
+I believe the setjmp/longjmp mechanism will throw through things like this, 
+but its produces much messier code.  (-fsjlj-exceptions)
+
+The C compiler does support exceptions, you just have to turn them on
+with -fexceptions.
+
+Your main options are to:
+  a) Don't use callbacks, or at least don't throw through them.
+  b) Get the source and compile the library with -fexceptions (You have to
+     explicitly turn on exceptions in the C compiler)
+  c) always use -fsjlj-exceptions (boo, bad choice :-)
+
+
+g++: "undefined reference" to static const array in class
+---------------------------------------------------------
+
+The following code compiles under GNU C++ 2.7.2 with correct results,
+but produces the same linker error with GNU C++ 2.95.2.
+Alexandre Oliva <oliva@lsd.ic.unicamp.br> responded:
+
+All of them are correct.  A static data member *must* be defined
+outside the class body even if it is initialized within the class
+body, but no diagnostic is required if the definition is missing.  It
+turns out that some releases do emit references to the missing symbol,
+while others optimize it away.
+
+#include <iostream>
+
+class Test
+{
+  public:
+    Test(const char *q);
+  protected:
+    static const unsigned char  Jam_signature[4]   = "JAM";
+};
+
+Test::Test(const char *q)
+{
+  if (memcmp(q, Jam_signature, sizeof(Jam_signature)) != 0)
+  cerr << "Hello world!\n";
+}
+
+int main(void)
+{
+  Test::Test("JAM");
+  return 0;
+}
+
+g++: g++ causes passing non const ptr to ptr to a func with const arg
+     to cause an error (not a bug)
+---------------------------------------------------------------------
+
+Example:
+
+#include <stdio.h>
+void test(const char **b){
+        printf ("%s\n",*b);
+}
+int main(void){
+        char *test1="aoeu";
+        test(&test1);
+}
+
+make const
+g++     const.cc   -o const
+const.cc: In function `int main()':
+const.cc:7: passing `char **' as argument 1 of `test(const char **)' adds cv-quals without intervening `const'
+make: *** [const] Error 1
+
+Answer from "Martin v. Loewis" <martin@loewis.home.cs.tu-berlin.de>:
+
+> ok... maybe I missed something.. I haven't really kept up with the latest in
+> C++ news.  But I've never heard anything even remotly close to passing a non
+> const var into a const arg being an error before.
+
+Thanks for your bug report. This is a not a bug in the compiler, but
+in your code. The standard, in 4.4/4, puts it that way
+
+# A conversion can add cv-qualifiers at levels other than the first in
+# multi-level pointers, subject to the following rules:
+# Two pointer types T1 and T2 are similar if there exists a type T and
+# integer n > 0 such that:
+#   T1 is cv(1,0) pointer to cv(1,1) pointer to ... cv(1,n-1)
+#   pointer to cv(1,n) T
+# and
+#   T2 is cv(2,0) pointer to cv(2,1) pointer to ... cv(2,n-1)
+#   pointer to cv(2,n) T
+# where each cv(i,j) is const, volatile, const volatile, or
+# nothing. The n-tuple of cv-qualifiers after the first in a pointer
+# type, e.g., cv(1,1) , cv(1,2) , ... , cv(1,n) in the pointer type
+# T1, is called the cv-qualification signature of the pointer type. An
+# expression of type T1 can be converted to type T2 if and only if the
+# following conditions are satisfied:
+#  - the pointer types are similar.
+#  - for every j > 0, if const is in cv(1,j) then const is in cv(2,j) ,
+#    and similarly for volatile.
+#  - if the cv(1,j) and cv(2,j) are different, then const is in every
+#    cv(2,k) for 0 < k < j.
+
+It is the last rule that your code violates. The standard gives then
+the following example as a rationale:
+
+# [Note: if a program could assign a pointer of type T** to a pointer
+# of type const T** (that is, if line //1 below was allowed), a
+# program could inadvertently modify a const object (as it is done on
+# line //2). For example,
+# int main() { 
+#   const char c = 'c'; 
+#   char* pc; 
+#   const char** pcc = &pc; //1: not allowed 
+#   *pcc = &c; 
+#   *pc = 'C'; //2: modifies a const object 
+# }
+# - end note]
+
+If you question this line of reasoning, please discuss it in one of
+the public C++ fora first, eg. comp.lang.c++.moderated, or
+comp.std.c++.
+
+
+cpp removes blank lines
+-----------------------
+
+With the new cpp, you need to add -traditional to the "cpp -P" args, else 
+blank lines get removed.
+
+[EDIT ME: scan Debian bug reports and write some nice summaries ...]
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.16.powerpc
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.16.powerpc
@@ -0,0 +1,96 @@
+ __iso_c_binding_c_f_pointer_c16@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_r16@GFORTRAN_1.0 4.3
+ _gfortran_arandom_r16@GFORTRAN_1.0 4.3
+ _gfortran_cpu_time_16@GFORTRAN_1.0 4.3
+ _gfortran_erfc_scaled_r16@GFORTRAN_1.1 4.4.0
+ _gfortran_exponent_r16@GFORTRAN_1.0 4.3
+ _gfortran_fraction_r16@GFORTRAN_1.0 4.3
+ _gfortran_matmul_c16@GFORTRAN_1.0 4.3
+ _gfortran_matmul_r16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_maxval_r16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_minval_r16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_r16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_mminval_r16@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_c16@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_r16@GFORTRAN_1.0 4.3
+ _gfortran_msum_c16@GFORTRAN_1.0 4.3
+ _gfortran_msum_r16@GFORTRAN_1.0 4.3
+ _gfortran_nearest_r16@GFORTRAN_1.0 4.3
+ _gfortran_pow_c16_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_c16_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_r16_i8@GFORTRAN_1.0 4.3
+ _gfortran_product_c16@GFORTRAN_1.0 4.3
+ _gfortran_product_r16@GFORTRAN_1.0 4.3
+ _gfortran_random_r16@GFORTRAN_1.0 4.3
+ _gfortran_reshape_c16@GFORTRAN_1.0 4.3
+ _gfortran_reshape_r16@GFORTRAN_1.0 4.3
+ _gfortran_rrspacing_r16@GFORTRAN_1.0 4.3
+ _gfortran_set_exponent_r16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_r16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_r16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_r16@GFORTRAN_1.0 4.3
+ _gfortran_sminval_r16@GFORTRAN_1.0 4.3
+ _gfortran_spacing_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_c16@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__acos_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__acosh_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__aimag_c16@GFORTRAN_1.0 4.3
+ _gfortran_specific__aint_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__anint_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__asin_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__asinh_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan2_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__atanh_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__conjg_16@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_c16@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__cosh_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_c16@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__log10_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_c16@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_4_16@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_8_16@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_c16@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__sinh_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_c16@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__tan_r16@GFORTRAN_1.0 4.3
+ _gfortran_specific__tanh_r16@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_c16@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_r16@GFORTRAN_1.0 4.3
+ _gfortran_ssum_c16@GFORTRAN_1.0 4.3
+ _gfortran_ssum_r16@GFORTRAN_1.0 4.3
+ _gfortran_sum_c16@GFORTRAN_1.0 4.3
+ _gfortran_sum_r16@GFORTRAN_1.0 4.3
+ _gfortran_transpose_c16@GFORTRAN_1.0 4.3
+ _gfortran_transpose_r16@GFORTRAN_1.0 4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.ldbl.64bit
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.ldbl.64bit
@@ -0,0 +1,283 @@
+ CXXABI_LDBL_1.3@CXXABI_LDBL_1.3 4.2.1
+ GLIBCXX_LDBL_3.4.10@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ GLIBCXX_LDBL_3.4.7@GLIBCXX_LDBL_3.4.7 4.2.1
+ GLIBCXX_LDBL_3.4@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt3tr14hashIgEclEg@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIgEclEg@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ _ZGVNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16_M_extract_floatES4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8__do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16_M_extract_floatES4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8__do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcmcRSt8ios_basePcSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcmcS7_PcS8_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES4_S4_RSt8ios_baseccT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIgEES4_S4_RSt8ios_baseccT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEclRSt8ios_basePcPKcRi@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE8__do_putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcmwRSt8ios_basePwSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcmwPKwPwSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES4_S4_RSt8ios_basewcT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIgEES4_S4_RSt8ios_basewcT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwlRSt8ios_basePwPKwRi@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE8__do_putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8__do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8__do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_bRSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_bRSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_bRSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_bRSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE8__do_putES4_bRSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES4_S4_RSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES4_S4_RSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_bRSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_bRSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_bRSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_bRSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE8__do_putES4_bRSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSi10_M_extractIgEERSiRT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSirsERg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSo9_M_insertIgEERSoT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSolsEg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIgEERS2_RT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIgEERS2_T_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10has_denormE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10is_boundedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10is_integerE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE11round_styleE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12has_infinityE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12max_exponentE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12min_exponentE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE13has_quiet_NaNE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14is_specializedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14max_exponent10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14min_exponent10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE15has_denorm_lossE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE15tinyness_beforeE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE17has_signaling_NaNE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE5radixE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE5trapsE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE6digitsE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE8digits10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE8is_exactE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_iec559E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_moduloE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_signedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt14__convert_to_vIgEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStlsIgcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStlsIgwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStrsIgcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStrsIgwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTIPKg@CXXABI_LDBL_1.3 4.2.1
+ _ZTIPg@CXXABI_LDBL_1.3 4.2.1
+ _ZTIg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSPKg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSPg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSg@CXXABI_LDBL_1.3 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc1.symbols.amd64
+++ gdc-4.4-1.063-4.4.7/debian/libgcc1.symbols.amd64
@@ -0,0 +1,144 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addtf3@GCC_4.3.0 1:4.3
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GCC_3.0 1:4.1.1
+ __deregister_frame_info@GCC_3.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.0.0 1:4.3
+ __divtc3@GCC_4.3.0 1:4.4.0
+ __divtf3@GCC_4.3.0 1:4.3
+ __divti3@GCC_3.0 1:4.1.1
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.3.0 1:4.3
+ __extenddftf2@GCC_4.3.0 1:4.3
+ __extendsftf2@GCC_4.3.0 1:4.3
+ __extendxftf2@GCC_4.3.0 1:4.3
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.3.0 1:4.3
+ __fixtfsi@GCC_4.3.0 1:4.3
+ __fixtfti@GCC_4.3.0 1:4.3
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.3.0 1:4.3
+ __fixunstfsi@GCC_4.3.0 1:4.3
+ __fixunstfti@GCC_4.3.0 1:4.3
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfti@GCC_3.0 1:4.1.1
+ __fixxfti@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.3.0 1:4.3
+ __floatsitf@GCC_4.3.0 1:4.3
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_4.3.0 1:4.3
+ __floattixf@GCC_3.0 1:4.1.1
+ __floatunditf@GCC_4.3.0 1:4.3
+ __floatunsitf@GCC_4.3.0 1:4.3
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.3.0 1:4.3
+ __floatuntixf@GCC_4.2.0 1:4.2.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.3.0 1:4.3
+ __gttf2@GCC_3.0 1:4.3
+ __gttf2@GCC_4.3.0 1:4.4.0
+ __letf2@GCC_4.3.0 1:4.3
+ __lshrti3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_3.0 1:4.3
+ __lttf2@GCC_4.3.0 1:4.4.0
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.0.0 1:4.3
+ __multc3@GCC_4.3.0 1:4.4.0
+ __multf3@GCC_4.3.0 1:4.3
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negtf2@GCC_4.3.0 1:4.3
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __netf2@GCC_3.0 1:4.3
+ __netf2@GCC_4.3.0 1:4.4.0
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.0.0 1:4.3
+ __powitf2@GCC_4.3.0 1:4.4.0
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GCC_3.0 1:4.1.1
+ __register_frame_info@GCC_3.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GCC_3.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GCC_3.0 1:4.1.1
+ __subtf3@GCC_4.3.0 1:4.3
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __trunctfdf2@GCC_4.3.0 1:4.3
+ __trunctfsf2@GCC_4.3.0 1:4.3
+ __trunctfxf2@GCC_4.3.0 1:4.3
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
+ __unordtf2@GCC_4.3.0 1:4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/gcj-BV-jdk.overrides
+++ gdc-4.4-1.063-4.4.7/debian/gcj-BV-jdk.overrides
@@ -0,0 +1 @@
+gcj-@BV@-jdk binary: wrong-name-for-upstream-changelog
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.powerpc
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.powerpc
@@ -0,0 +1,3 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.arm
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.arm
@@ -0,0 +1,6 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+ __gxx_personality_sj0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.conf
+++ gdc-4.4-1.063-4.4.7/debian/rules.conf
@@ -0,0 +1,908 @@
+# -*- makefile -*-
+# rules.conf
+#	- used to build debian/control and debian/rules.parameters
+#	- assumes unpacked sources
+
+include debian/rules.defs
+include debian/rules.sonames
+
+# Helper to generate biarch/triarch dependencies.
+# For example, $(eval $(call gen_multilib_deps,gomp)) will create the
+# libgompbiarch variable, and make it contains the libgompbiarch{32,64,n32}
+# variables if biarch{32,64,n32} is set to yes.
+define gen_multilib_deps
+  lib$1biarch64	:= lib64$1$$($(shell echo $1 | tr "a-z" "A-Z")_SONAME)$(LS) (>= $$$${gcc:Version})
+  lib$1biarch32	:= lib32$1$$($(shell echo $1 | tr "a-z" "A-Z")_SONAME)$(LS) (>= $$$${gcc:Version})
+  lib$1biarchn32 := libn32$1$$($(shell echo $1 | tr "a-z" "A-Z")_SONAME)$(LS) (>= $$$${gcc:Version})
+  ifeq ($$(biarch64),yes)
+    lib$1biarch := $$(lib$1biarch64)
+  endif
+  ifeq ($$(biarch32),yes)
+    lib$1biarch := $$(lib$1biarch32)
+  endif
+  ifeq ($$(biarchn32),yes)
+    ifeq ($$(biarch64),yes)
+      lib$1biarch := $$(lib$1biarch64), $$(lib$1biarchn32)
+    else
+      lib$1biarch := $$(lib$1biarchn32)
+    endif
+  endif
+endef
+$(foreach x,gomp mudflap ssp gfortran objc,$(eval $(call gen_multilib_deps,$(x))))
+
+# Helper to generate _no_archs variables.
+# For example, $(eval $(call gen_no_archs,java)) will create the java_no_archs
+# variable, using the java_no_cpu and java_no_systems variables.
+define gen_no_archs
+  $1_no_archs :=
+  ifneq (,$$($1_no_cpus))
+    $1_no_archs += $$(foreach cpu,$$(filter-out i386 amd64 alpha arm,$$($1_no_cpus)),!$$(cpu))
+    ifneq (,$$(filter i386,$$($1_no_cpus)))
+      $1_no_archs += !i386 !hurd-i386 !kfreebsd-i386 !knetbsd-i386
+    endif
+    ifneq (,$$(filter amd64,$$($1_no_cpus)))
+      $1_no_archs += !amd64 !kfreebsd-amd64
+    endif
+    ifneq (,$$(filter alpha,$$($1_no_cpus)))
+      $1_no_archs += !alpha !hurd-alpha !knetbsd-alpha
+    endif
+    ifneq (,$$(filter arm,$$($1_no_cpus)))
+      $1_no_archs += !arm !armel !armhf
+    endif
+    ifneq (,$$(strip $3))
+      $1_no_systems_tmp := $$(subst $$(SPACE)gnu$$(SPACE),$$(SPACE)hurd-gnu$$(SPACE),$$(SPACE)$3$$(SPACE))
+      $1_no_archs += $$(foreach cpu,$$($1_no_cpus),$$(foreach system,$$($1_no_systems_tmp),!$$(subst gnu,$$(cpu),$$(system))))
+    endif
+  endif
+  ifneq (,$$($1_no_systems))
+    $1_no_systems_tmp := $$(subst $$(SPACE)gnu$$(SPACE),$$(SPACE)hurd-gnu$$(SPACE),$$(SPACE)$$($1_no_systems)$$(SPACE))
+    $1_no_archs += $$(foreach system,$$($1_no_systems_tmp),$$(foreach cpu,$2,!$$(subst gnu,$$(cpu),$$(system))))
+  endif
+  $1_no_archs := $$(strip $$($1_no_archs))
+endef
+base_deb_cpus := i386 alpha
+base_deb_systems :=
+$(foreach x,ada java java_plugin pascal fortran libphobos libgc check locale,$(eval $(call gen_no_archs,$(x),$(base_deb_cpus),$(base_deb_systems))))
+linux_no_archs := !hurd-i386 !hurd-alpha !kfreebsd-i386 !kfreebsd-amd64 !knetbsd-i386 !knetbsd-alpha
+
+GCC_VERSION := $(strip $(shell cat $(srcdir)/gcc/BASE-VER))
+NEXT_GCC_VERSION := $(shell echo $(GCC_VERSION) | \
+	awk -F. '{OFS="."; if (NF==2) $$3=1; else $$NF += 1; print}')
+GCC_MAJOR_VERSION := $(shell echo $(GCC_VERSION)   | sed -r 's/([0-9])\.[0-9]\.[0-9]/\1/')
+GCC_MINOR_VERSION := $(shell echo $(GCC_VERSION)   | sed -r 's/[0-9]\.([0-9])\.[0-9]/\1/')
+GCC_RELEASE_VERSION := $(shell echo $(GCC_VERSION) | sed -r 's/[0-9]\.[0-9]\.([0-9])/\1/')
+NEXT_GCC_MAJOR_VERSION := $(shell expr $(echo $(GCC_MAJOR_VERSION)) + 1)
+NEXT_GCC_MINOR_VERSION := $(shell expr $(echo $(GCC_MINOR_VERSION)) + 1)
+NEXT_GCC_RELEASE_VERSION := $(shell expr $(echo $(GCC_MAJOR_VERSION)) + 1)
+
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  BASE_VERSION := $(shell echo $(GCC_VERSION) | sed -e 's/\([1-9]\.[0-9]\).*/\1/')
+endif
+ifneq (,$(findstring gpc,$(PKGSOURCE)))
+  GPC_BASE_VERSION := $(word 1, $(subst -, ,$(DEB_VERSION)))
+  DEB_VERSION := $(subst $(GPC_BASE_VERSION)-,,$(DEB_VERSION))
+endif
+ifneq (,$(findstring gdc,$(PKGSOURCE)))
+  GDC_BASE_VERSION := $(word 1, $(subst -, ,$(DEB_VERSION)))
+  DEB_VERSION := $(subst $(GDC_BASE_VERSION)-,,$(DEB_VERSION))
+endif
+
+GCC_SOURCE_VERSION := $(shell echo $(DEB_VERSION) | sed 's/-.*//')
+NEXT_GCC_SOURCE_VERSION := $(shell echo $(GCC_SOURCE_VERSION) | \
+	awk -F. '{OFS="."; if (NF==2) $$3=1; else $$NF += 1; print}')
+
+MAINTAINER = Debian GCC Maintainers <debian-gcc@lists.debian.org>
+ifeq ($(distribution),Ubuntu)
+  ifneq (,$(findstring $(PKGSOURCE),gnat gpc gdc))
+    MAINTAINER = Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
+  else
+    MAINTAINER = Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+  endif
+endif
+
+UPLOADERS = Matthias Klose <doko@debian.org>
+ifneq (,$(findstring $(PKGSOURCE),gnat))
+  UPLOADERS = Ludovic Brenta <lbrenta@debian.org>
+endif
+ifneq (,$(findstring $(PKGSOURCE),gdc))
+  UPLOADERS = Arthur Loiret <arthur.loiret@gmail.com>
+endif
+
+DPKG_BUILD_DEP = dpkg-dev (>= 1.14.15),
+ifeq ($(with_multiarch_lib),yes)
+  DPKG_BUILD_DEP = dpkg-dev (>= $(if $(filter $(distribution),Ubuntu),1.16.0~ubuntu4,1.16.0.3)),
+endif
+ifeq ($(multiarch_stage1),yes)
+  DPKG_BUILD_DEP = dpkg-dev (>= $(if $(filter $(distribution),Ubuntu),1.16.0~ubuntu4,1.16.0.3)),
+endif
+
+ifeq ($(DEB_CROSS),yes)
+  DPKG_BUILD_DEP += dpkg-cross (>= 1.25.99),
+endif
+
+# The binutils version needed.
+# The oldest suitable versions for the various platforms can be found in
+# INSTALL/specific.html ; we take a tighter dependency if possible to be on
+# the safe side (something like newest( version in stable, versions for the
+# various platforms in INSTALL/specific.html) ).
+# We need binutils (>= 2.19.1) for a new dwarf unwind expression opcode.
+# See http://gcc.gnu.org/ml/gcc-patches/2008-09/msg01713.html
+BINUTILSV      = 2.20.1-15~
+ifeq ($(DEB_CROSS),yes)
+  BINUTILS_BUILD_DEP = binutils$(TS) (>= $(BINUTILSV))
+else
+  BINUTILS_BUILD_DEP = binutils (>= $(BINUTILSV)) | binutils-multiarch (>= $(BINUTILSV))
+endif
+ifneq (,$(findstring snapshot,$(PKGSOURCE))$(findstring 4.5,$(PKGSOURCE)))
+  BINUTILS_BUILD_DEP += , binutils-gold (>= $(BINUTILSV)) [$(gold_archs)]
+endif
+
+# libc-dev dependencies
+libc_ver := 2.5
+libc_dev_ver := $(libc_ver)
+ifneq (,$(findstring gnat,$(PKGSOURCE)))
+  libc_ver := 2.9-21
+endif
+ifeq ($(with_multiarch_lib),yes)
+  libc_dev_ver = $(if $(filter $(distribution),Ubuntu),2.13-0ubuntu6,2.13-5)
+endif
+ifeq ($(DEB_TARGET_ARCH_OS),linux)
+  ifneq (,$(findstring $(DEB_TARGET_ARCH),alpha ia64))
+    LIBC_DEP = libc6.1
+  else
+    LIBC_DEP = libc6
+  endif
+else
+  ifeq ($(DEB_TARGET_ARCH_OS),hurd)
+    LIBC_DEP = libc0.3
+  endif
+  ifeq ($(DEB_TARGET_ARCH_OS),kfreebsd)
+    LIBC_DEP = libc0.1
+  endif
+  ifeq ($(DEB_TARGET_ARCH),uclibc)
+       LIBC_DEP ?= libuclibc
+       LIBC_DEV_DEP ?= libuclibc-dev
+  endif
+endif
+LIBC_DEV_DEP = $(LIBC_DEP)-dev
+# for cross
+ifeq ($(DEB_CROSS),yes)
+  LIBC_DEP ?= $(LIBC_DEP)$(LS)
+  LIBC_DEV_DEP ?= $(LIBC_DEV_DEP)$(LS)
+endif
+
+# this is about Debian archs name, *NOT* GNU target triplet
+biarch_deb_map := \
+	i386=amd64 amd64=i386 \
+	mips=mips64 mipsel=mips64 \
+	powerpc=ppc64 ppc64=powerpc \
+	sparc=sparc64 \
+	s390=s390x s390x=s390 \
+	kfreebsd-amd64=i386
+
+biarch_deb_arch := $(patsubst $(DEB_TARGET_ARCH)=%,%, \
+	$(filter $(DEB_TARGET_ARCH)=%,$(biarch_deb_map)))
+
+LIBC_BIARCH_DEP :=
+LIBC_BIARCH_DEV_DEP :=
+LIBCXX_BIARCH_DEP :=
+LIBCXX_BIARCH_DBG_DEP :=
+ifneq (,$(findstring yes,$(biarch64) $(biarch32) $(biarchn32)))
+  LIBC_BIARCH_DEP := $(LIBC_DEP)-$(biarch_deb_arch)$(LS) (>= $(libc_ver))
+  LIBC_BIARCH_DEV_DEP := $(LIBC_DEV_DEP)-$(biarch_deb_arch)$(LS) (>= $(libc_ver))
+  ifeq ($(biarch64),yes)
+    LIBCXX_BIARCH_DEP := lib64stdc++$(CXX_SONAME)$(LS) (>= $${gcc:Version})
+    LIBCXX_BIARCH_DBG_DEP := lib64stdc++$(CXX_SONAME)-$(BASE_VERSION)-dbg$(LS)
+  endif
+  ifeq ($(biarch32),yes)
+    LIBCXX_BIARCH_DEP := lib32stdc++$(CXX_SONAME)$(LS) (>= $${gcc:Version})
+    LIBCXX_BIARCH_DBG_DEP := lib32stdc++$(CXX_SONAME)-$(BASE_VERSION)-dbg$(LS)
+  endif
+  ifeq ($(biarchn32),yes)
+    ifneq (,$(findstring $(DEB_TARGET_ARCH),mips mipsel))
+      triarch :=
+      ifeq ($(biarch64),yes)
+        triarch := $(COMMA)$(SPACE)
+      endif
+      LIBC_BIARCH_DEV_DEP += $(triarch)libc6-dev-mipsn32$(LS) (>= $(libc_ver))
+      LIBC_BIARCH_DEP += $(triarch)libc6-mipsn32$(LS) (>= $(libc_ver))
+      LIBCXX_BIARCH_DEP += $(triarch)libn32stdc++$(CXX_SONAME)$(LS) (>= $${gcc:Version})
+      LIBCXX_BIARCH_DBG_DEP += $(triarch)libn32stdc++$(CXX_SONAME)-$(BASE_VERSION)-dbg$(LS)
+    endif
+  endif
+endif
+
+# Add suffix and required version
+LIBC_DEV_DEP := $(LIBC_DEV_DEP)$(LS) (>= $(libc_dev_ver))
+
+# TODO: make this automatic, there must be a better way to define LIBC_DEP.
+ifneq ($(DEB_CROSS),yes)
+  LIBC_BUILD_DEP = libc6.1-dev (>= $(libc_dev_ver)) [alpha ia64] | libc0.3-dev (>= $(libc_dev_ver)) [hurd-i386] | libc0.1-dev (>= $(libc_dev_ver)) [kfreebsd-i386 kfreebsd-amd64] | libc6-dev (>= $(libc_dev_ver)),
+  LIBC_BIARCH_BUILD_DEP = libc6-dev-amd64 [i386], libc6-dev-sparc64 [sparc], libc6-dev-s390 [s390x], libc6-dev-s390x [s390], libc6-dev-i386 [amd64], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], libc0.1-dev-i386 [kfreebsd-amd64], lib32gcc1 [amd64 ppc64 kfreebsd-amd64 s390x], lib64gcc1 [i386 powerpc sparc s390], libc6-dev-mips64 [mips mipsel], libc6-dev-mipsn32 [mips mipsel],
+else
+  LIBC_BUILD_DEP = $(LIBC_DEV_DEP),
+  ifneq ($(LIBC_BIARCH_DEV_DEP),)
+    LIBC_BIARCH_BUILD_DEP = $(LIBC_BIARCH_DEV_DEP),
+  else
+    LIBC_BIARCH_BUILD_DEP =
+  endif
+endif
+
+GCC_MULTILIB_BUILD_DEP = gcc-multilib [$(multilib_archs)],
+
+LIBUNWIND_DEV_DEP := libunwind7-dev$(LS) (>= 0.98.5-6)
+LIBUNWIND_BUILD_DEP := $(LIBUNWIND_DEV_DEP) [ia64],
+LIBATOMIC_OPS_BUILD_DEP := libatomic-ops-dev$(LS) [ia64],
+ifneq ($(DEB_TARGET_ARCH),ia64)
+  LIBUNWIND_DEV_DEP := # nothing
+endif
+
+ifneq (,$(filter $(distrelease),lenny etch squeeze dapper hardy jaunty karmic lucid maverick natty))
+  GMP_BUILD_DEP = libgmp3-dev,
+  MPFR_BUILD_DEP = libmpfr-dev,
+else
+  GMP_BUILD_DEP = libgmp-dev (>= 2:5.0.1~),
+  MPFR_BUILD_DEP = libmpfr-dev (>= 3.0.0-9~),
+endif
+
+PPL_BUILD_DEP = libppl-dev (>= 0.10) | libppl0.10-dev (>= 0.10),
+CLOOG_BUILD_DEP = libcloog-ppl-dev (>= 0.15.8-1~),
+CLOOG_RUNTIME_DEP = libcloog-ppl0 (>= 0.15.8-1~), libppl-c2, libppl7
+# FIXME GCC-4.5
+ifneq (,$(findstring snapshot,$(PKGSOURCE)))
+  MPC_BUILD_DEP = libmpc-dev,
+  ELF_BUILD_DEP = libelfg0-dev (>= 0.8.12),
+endif
+ifneq (,$(findstring 4.5,$(PKGSOURCE)))
+  MPC_BUILD_DEP = libmpc-dev,
+  ELF_BUILD_DEP = libelfg0-dev (>= 0.8.12),
+endif
+
+SOURCE_BUILD_DEP :=
+ifeq (,$(findstring gcc,$(PKGSOURCE)))
+  SOURCE_BUILD_DEP := gcc-$(BASE_VERSION)-source (>= $(GCC_SOURCE_VERSION)), gcc-$(BASE_VERSION)-source (<< $(NEXT_GCC_SOURCE_VERSION)),
+endif
+
+CHECK_BUILD_DEP := dejagnu [$(check_no_archs)],
+ifneq (,$(findstring gcc,$(PKGSOURCE)))
+  CHECK_BUILD_DEP += autogen,
+endif
+
+AUTO_BUILD_DEP := m4, libtool,
+ifneq (,$(findstring 4.4,$(PKGSOURCE)))
+  AUTO_BUILD_DEP += autoconf2.59, automake1.9,
+else ifneq (,$(findstring 4.5,$(PKGSOURCE)))
+  AUTO_BUILD_DEP += autoconf (>= 2.64), autoconf (<< 2.65), automake (>= 1:1.11), automake (<< 1:1.12),
+else ifeq ($(PKGSOURCE),gcc-snapshot)
+  AUTO_BUILD_DEP += autoconf (>= 2.64), autoconf (<< 2.65), automake (>= 1:1.11), automake (<< 1:1.12),
+endif
+
+ifneq ($(DEB_CROSS),yes)
+LIBC_BUILD_DEP := libc6.1-dev (>= $(libc_dev_ver)) [alpha ia64] | libc0.3-dev (>= $(libc_dev_ver)) [hurd-i386] | libc0.1-dev (>= $(libc_dev_ver)) [kfreebsd-i386 kfreebsd-amd64] | libc6-dev (>= $(libc_dev_ver))
+JAVA_BUILD_DEP := libc6.1-dbg [alpha ia64] | libc0.3-dbg [hurd-i386] | libc0.1-dbg [kfreebsd-i386 kfreebsd-amd64] | libc6-dbg, zlib1g-dev, libantlr-java,
+
+ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+  bd_java_archs =
+else ifeq ($(PKGSOURCE)-$(with_java),gcc-snapshot-yes)
+  bd_java_archs =
+else
+  bd_java_archs = $(EMPTY) [$(java_no_archs)]
+endif
+
+ifneq (,$(java_awt_peers))
+  JAVA_BUILD_DEP += fastjar$(bd_java_archs), libmagic-dev$(bd_java_archs),
+  JAVA_BUILD_DEP += libecj-java (>= 3.3.0-2)$(bd_java_archs), zip$(bd_java_archs),
+  ifeq ($(with_java_maintainer_mode),yes)
+    # gcj-4.3 needed for gjavah-4.3.
+    JAVA_BUILD_DEP += gcj-4.4$(bd_java_archs), ecj (>= 3.3.0-2)$(bd_java_archs),
+  endif
+  JAVA_BUILD_DEP += libasound2-dev [$(java_no_archs) $(linux_no_archs)],
+  ifneq (,$(findstring gtk,$(java_awt_peers)))
+    JAVA_BUILD_DEP += libxtst-dev$(bd_java_archs), libxt-dev$(bd_java_archs), libgtk2.0-dev (>= 2.4.4-2)$(bd_java_archs), libart-2.0-dev$(bd_java_archs), libcairo2-dev$(bd_java_archs),
+  endif
+  ifneq (,$(findstring qt,$(java_awt_peers)))
+    JAVA_BUILD_DEP += libqt4-dev (>= 4.1.0)$(bd_java_archs),
+  endif
+  # gconf peer, disabled by default
+  #JAVA_BUILD_DEP += libgconf2-dev$(bd_java_archs),
+  # gstreamer peer
+  #JAVA_BUILD_DEP += libgstreamer-plugins-base0.10-dev$(bd_java_archs),
+  ifneq ($(PKGSOURCE),gcc-snapshot)
+    JAVA_BUILD_DEP += g++-4.4 [armel armhf],
+  endif
+endif
+ifneq ($(with_standalone_gcj),yes)
+  ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+    JAVA_BUILD_DEP += $(SOURCE_BUILD_DEP)
+  endif
+endif
+#JAVA_BUILD_INDEP := gcj-$(BASE_VERSION)-jdk
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  LIBSTDCXX_BUILD_INDEP = doxygen (>= 1.6.1), graphviz (>= 2.2), gsfonts-x11, texlive-latex-base
+  JAVA_BUILD_INDEP :=
+endif
+ifeq ($(with_separate_libgcj),yes)
+  ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+    JAVA_BUILD_DEP :=
+    JAVA_BUILD_INDEP :=
+  endif
+endif
+
+ECJ_DEP = ecj, libecj-java (>= 3.3.0-2)
+ECJ_DEP = ecj-gcj, libecj-java-gcj (>= 3.3.0-2)
+ifneq (,$(filter $(DEB_HOST_ARCH),arm armel armhf))
+  ECJ_DEP +=, ecj1
+endif
+
+ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+  LIBSTDCXX_BUILD_INDEP = doxygen (>= 1.4.2), graphviz (>= 2.2), gsfonts-x11, texlive-latex-base
+  JAVA_BUILD_INDEP :=, $(JAVA_BUILD_INDEP)
+endif
+
+PASCAL_BUILD_DEP := libncurses5-dev [pascal_no_archs], texlive-latex-base [pascal_no_archs], libgmp3-dev [pascal_no_archs], help2man [pascal_no_archs],
+
+SPU_BUILD_DEP := binutils-spu (>= $(BINUTILSV)) [powerpc ppc64], newlib-spu (>= 1.16.0) [powerpc ppc64], gcc-$(BASE_VERSION)-base [powerpc ppc64],
+SPU_BUILD_DEP := binutils-spu (>= $(BINUTILSV)) [powerpc ppc64], newlib-spu (>= 1.16.0) [powerpc ppc64],
+
+ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+  ifneq ($(with_separate_gnat),yes)
+    # Build gnat as part of the combiled gcc-x.y source package.  Do not fail
+    # if gnat is not present on unsupported architectures; the build scripts
+    # will not use gnat anyway.
+    GNAT_BUILD_DEP := gnat (>= 4.1) [$(ada_no_archs)],
+  endif
+  ifeq ($(with_separate_gpc),yes)
+    PASCAL_BUILD_DEP :=
+  endif
+else ifeq ($(PKGSOURCE),gcc-snapshot)
+  # Ditto, as part of the gcc-snapshot package.
+  # FIXME: ad hoc dependency, better fix setting of ada_no_archs
+  #GNAT_BUILD_DEP := gnat (>= 4.1) [$(ada_no_archs)], gcc-snapshot (>= 20090821-1) [armel],
+  GNAT_BUILD_DEP := gnat (>= 4.1) [!arm !armel !armhf !m68k !hurd-i386], gcc-snapshot (>= 20100116-1) [armel armhf],
+  PASCAL_BUILD_DEP :=
+else ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+  # Special source package just for gnat. Fail early if gnat is not present,
+  # rather than waste CPU cycles and fail later.
+  GNAT_BUILD_DEP := gnat (>= 4.1),
+  GNAT_BUILD_DEP += $(SOURCE_BUILD_DEP)
+  JAVA_BUILD_DEP :=
+  JAVA_BUILD_INDEP :=
+  GDC_BUILD_DEP :=
+  PASCAL_BUILD_DEP :=
+  # gnat on spu should work ...
+  SPU_BUILD_DEP :=
+else ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+  # Special source package just for gcj.
+  GNAT_BUILD_DEP :=
+  PASCAL_BUILD_DEP :=
+  GDC_BUILD_DEP :=
+  SPU_BUILD_DEP :=
+else ifeq ($(PKGSOURCE),gdc-$(BASE_VERSION))
+  # Special source package just for gdc.
+  GNAT_BUILD_DEP :=
+  JAVA_BUILD_DEP :=
+  JAVA_BUILD_INDEP :=
+  PASCAL_BUILD_DEP :=
+  GDC_BUILD_DEP := $(SOURCE_BUILD_DEP)
+  SPU_BUILD_DEP :=
+else ifeq ($(PKGSOURCE),gpc-$(BASE_VERSION))
+  # Special source package just for gpc.
+  GNAT_BUILD_DEP :=
+  JAVA_BUILD_DEP :=
+  JAVA_BUILD_INDEP :=
+  GDC_BUILD_DEP :=
+  PASCAL_BUILD_DEP += $(SOURCE_BUILD_DEP)
+  SPU_BUILD_DEP :=
+endif
+
+else
+# build cross compiler
+  CROSS_BUILD_DEP := libc6-dev$(cross_lib_arch),
+ifeq ($(REVERSE_CROSS),yes)
+  CROSS_BUILD_DEP += zlib1g-dev$(cross_lib_arch), libmpfr-dev$(cross_lib_arch),
+endif
+  SOURCE_BUILD_DEP := gcc-$(BASE_VERSION)-source (>= $(GCC_SOURCE_VERSION)), gcc-$(BASE_VERSION)-source (<< $(NEXT_GCC_SOURCE_VERSION)),
+  ifeq ($(with_java),yes)
+    JAVA_BUILD_DEP := zlib1g-dev, lib64z1-dev [i386 powerpc sparc s390], lib32z1-dev [amd64 ppc64 kfreebsd-amd64 s390x],
+  endif
+  JAVA_BUILD_INDEP :=
+  GNAT_BUILD_DEP :=
+  ifeq (,$(findstring spu,$(DEB_TARGET_GNU_CPU)))
+    SPU_BUILD_DEP :=
+  endif
+endif # cross compiler
+
+# The numeric part of the gcc version number (x.yy.zz)
+NEXT_GCC_VERSION := $(shell echo $(GCC_VERSION) | \
+		awk -F. '{OFS="."; if (NF==2) $$3=1; else $$NF += 1; print}')
+# first version with a new path component in gcc_lib_dir (i.e. GCC_VERSION
+# or TARGET_ALIAS changes), or last version available for all architectures
+DEB_GCC_SOFT_VERSION := 4.4.6-15
+DEB_GCJ_SOFT_VERSION := 4.4.6-11
+ifeq ($(with_pascal),yes)
+GPC_DATE := $(shell sed -n 's/^.define GPC_VERSION_STRING "\(.*\)"/\1/p' $(srcdir)/gcc/p/version.h || true)
+DEB_GPC_VERSION := $(shell echo $(DEB_VERSION) \
+			   | sed 's/.*:\(.*\)-\(.*\)/2:\1.$(GPC_DATE)-\2/')
+endif
+
+ifeq ($(with_pascal),yes)
+  DEB_GPC_VERSION := $(GPC_BASE_VERSION)-$(DEB_VERSION)
+endif
+
+ifeq ($(with_d),yes)
+  DEB_GDC_VERSION := $(GDC_BASE_VERSION)-$(DEB_VERSION)
+endif
+
+# semiautomatic ...
+DEB_SOVERSION		:= $(DEB_VERSION)
+DEB_SOVERSION		:= 4.4
+DEB_SOEVERSION		:= $(EPOCH):4.4
+DEB_STDCXX_SOVERSION	:= 4.4
+DEB_GCJ_SOVERSION	:= 4.4
+DEB_GOMP_SOVERSION	:= $(DEB_SOVERSION)
+DEB_GCCMATH_SOVERSION	:= $(DEB_SOVERSION)
+
+DEB_GCC_VERSION := $(DEB_VERSION)
+DEB_GCJ_VERSION := $(DEB_VERSION)
+ifeq ($(with_separate_libgcj),yes)
+  ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+    DEB_GCC_VERSION := $(DEB_GCC_SOFT_VERSION)
+  endif
+endif
+
+DEB_GNAT_VERSION := $(DEB_VERSION)
+ifeq ($(with_separate_gnat),yes)
+  ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+    DEB_GCC_VERSION := $(DEB_GCC_SOFT_VERSION)
+  endif
+endif
+
+# manual ...
+ifeq ($(DEB_TARGET_GNU_CPU), $(findstring $(DEB_TARGET_GNU_CPU),hppa m68k))
+  ifeq ($(DEB_TARGET_ARCH),m68k)
+    GCC_SONAME := 2
+  endif
+  ifeq ($(DEB_TARGET_ARCH),hppa)
+    GCC_SONAME := 4
+  endif
+  DEB_LIBGCC_SOVERSION := $(DEB_SOVERSION)
+  DEB_LIBGCC_VERSION := $(DEB_VERSION)
+else
+  GCC_SONAME := 1
+  DEB_LIBGCC_SOVERSION := $(DEB_SOEVERSION)
+  DEB_LIBGCC_VERSION := $(DEB_EVERSION)
+endif
+
+LIBGCC_DEP := libgcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+LIBGCC_BIARCH_DEP := 
+ifeq ($(biarch64),yes)
+  LIBGCC_BIARCH_DEP := lib64gcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+endif
+ifeq ($(biarch32),yes)
+  LIBGCC_BIARCH_DEP := lib32gcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+endif
+ifeq ($(biarchn32),yes)
+  ifeq ($(biarch64),yes)
+    LIBGCC_BIARCH_DEP := lib64gcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION)), libn32gcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+  else
+    LIBGCC_BIARCH_DEP := libn32gcc$(GCC_SONAME)$(LS) (>= $(DEB_LIBGCC_VERSION))
+  endif
+endif
+
+GNAT_VERSION := $(BASE_VERSION)
+
+LIBGNAT_DEP :=
+ifeq ($(with_libgnat),yes)
+  LIBGNAT_DEP := libgnat-$(GNAT_VERSION) (= $(DEB_VERSION))
+endif
+
+pkg_ver := -$(BASE_VERSION)
+
+PKG_GCJ_EXT = $(GCJ_SONAME1)
+PKG_LIBGCJ_EXT = $(GCJ_SONAME1)$(if $(GCJ_SONAME2),-$(GCJ_SONAME2))
+
+ctrl_flags = \
+	-DBINUTILSV=$(BINUTILSV) \
+	-DSRCNAME=$(PKGSOURCE) \
+	-D__$(DEB_TARGET_GNU_CPU)__ \
+	-DARCH=$(DEB_TARGET_ARCH) \
+	-DDIST=$(distribution)
+
+ctrl_flags += \
+	-DLIBC_DEV_DEP="$(LIBC_DEV_DEP)" \
+	-DLIBC_BIARCH_BUILD_DEP="$(LIBC_BIARCH_BUILD_DEP)" \
+	-DFORTRAN_BUILD_DEP="$(FORTRAN_BUILD_DEP)" \
+	-DGNAT_BUILD_DEP="$(GNAT_BUILD_DEP)" \
+	-DJAVA_BUILD_DEP="$(JAVA_BUILD_DEP)" \
+	-DJAVA_BUILD_INDEP="$(JAVA_BUILD_INDEP)" \
+	-DLIBSTDCXX_BUILD_INDEP="$(LIBSTDCXX_BUILD_INDEP)" \
+	-DPASCAL_BUILD_DEP="$(PASCAL_BUILD_DEP)" \
+	-DGDC_BUILD_DEP="$(GDC_BUILD_DEP)" \
+	-DSPU_BUILD_DEP="$(SPU_BUILD_DEP)" \
+	-DBINUTILS_BUILD_DEP="$(BINUTILS_BUILD_DEP)" \
+	-DLIBC_BUILD_DEP="$(LIBC_BUILD_DEP)" \
+	-DCHECK_BUILD_DEP="$(CHECK_BUILD_DEP)" \
+	-DAUTO_BUILD_DEP="$(AUTO_BUILD_DEP)" \
+	-DAUTOGEN_BUILD_DEP="$(AUTOGEN_BUILD_DEP)" \
+	-DCLOOG_BUILD_DEP="$(CLOOG_BUILD_DEP)" \
+	-DGMP_BUILD_DEP="$(GMP_BUILD_DEP)" \
+	-DMPFR_BUILD_DEP="$(MPFR_BUILD_DEP)" \
+	-DMPC_BUILD_DEP="$(MPC_BUILD_DEP)" \
+	-DELF_BUILD_DEP="$(ELF_BUILD_DEP)" \
+	-DDPKG_BUILD_DEP="$(DPKG_BUILD_DEP)" \
+	-DSOURCE_BUILD_DEP="$(SOURCE_BUILD_DEP)" \
+	-DCROSS_BUILD_DEP="$(CROSS_BUILD_DEP)" \
+	-DMULTILIB_ARCHS="$(multilib_archs)" \
+	-DNEON_ARCHS="$(neon_archs)" \
+	-DTP=$(TP) \
+	-DTS=$(TS) \
+	-DLS=$(LS)
+
+ifeq ($(DEB_CROSS),yes)
+  ctrl_flags += \
+	-DTARGET=$(DEB_TARGET_ARCH) \
+	-DLIBUNWIND_BUILD_DEP="$(LIBUNWIND_BUILD_DEP)" \
+	-DLIBATOMIC_OPS_BUILD_DEP="$(LIBATOMIC_OPS_BUILD_DEP)"
+else
+  # add '-DPRI=optional' to ctrl_flags if this is not the default compiler
+  # ctrl_flags += \
+  #     -DPRI=optional
+endif
+
+ifeq ($(with_base_only),yes)
+  ctrl_flags += \
+	-DBASE_ONLY=yes
+endif
+
+ifeq ($(with_multiarch_lib),yes)
+  ctrl_flags += \
+	-DMULTIARCH=yes
+endif
+
+control: control-file readme-bugs-file parameters-file copyright-file substvars-file versioned-files
+
+# stage1 and stage2 compilers are only C
+ifdef DEB_STAGE
+  languages = c
+  addons = cdev
+  ifeq ($(DEB_STAGE),stage2)
+    addons += libgcc gccxbase
+  endif
+else
+languages = c c++ fortran objc objpp
+ifeq ($(DEB_CROSS),yes)
+  addons = gccxbase
+else
+  addons = gccbase
+endif
+addons += cdev c++dev fdev objcdev source objppdev multilib
+ifneq (,$(filter yes,$(with_libgcc) $(keep_in_control)))
+  addons += libgcc lib4gcc lib32gcc lib64gcc libn32gcc
+endif
+ifneq (,$(filter yes,$(with_libcxx) $(keep_in_control)))
+  addons += libcxx lib32cxx lib64cxx libn32cxx
+endif
+ifeq ($(with_mudflap),yes)
+  addons += mudflap
+  ifneq (,$(filter yes,$(with_libmudflap) $(keep_in_control)))
+    addons += libmudf
+  endif
+endif
+ifneq (,$(filter yes,$(with_libgfortran) $(keep_in_control)))
+  addons += libgfortran lib32gfortran lib64gfortran libn32gfortran
+endif
+ifneq (,$(filter yes,$(with_libobjc) $(keep_in_control)))
+  addons += libobjc lib32objc lib64objc libn32objc
+endif
+ifneq (,$(filter yes,$(with_libgomp) $(keep_in_control)))
+  addons += libgomp lib32gomp lib64gomp libn32gomp
+endif
+ifeq ($(with_plugins),yes)
+  addons += plugindev
+endif
+
+ifneq ($(DEB_CROSS),yes)
+  languages += ada java # pascal
+  addons += libgcj libgcjdev gcjdoc libgnat libs source # libgmath libnof lib64gnat ssp
+
+  ifneq (,$(neon_archs))
+    addons += libneongcc libneongomp libneonobjc libneongfortran libneoncxx
+  endif
+  ifneq (,$(filter yes,$(with_proto) $(keep_in_control)))
+    addons += proto
+  endif
+  ifneq (,$(filter yes,$(with_fixincl) $(keep_in_control)))
+    addons += fixincl
+  endif
+  ifeq ($(with_libgcj_doc),yes)
+    addons += gcjdoc
+  endif
+#  ifneq (,$(findstring gtk, $(java_awt_peers)))
+#    addons += gtkpeer
+#  endif
+#  ifneq (,$(findstring qt, $(java_awt_peers)))
+#    addons += qtpeer
+#  endif
+  ifeq ($(with_separate_libgcj),yes)
+    ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+      languages := $(filter-out java,$(languages))
+      addons := $(filter-out gcj libgcj libgcjdev gcjdoc gtkpeer qtpeer,$(addons))
+    endif
+    ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+      languages = java
+      addons = gcj libgcj libgcjdev
+    ifeq ($(with_libgcj_doc),yes)
+      addons += gcjdoc
+    endif
+#      ifneq (,$(findstring gtk, $(java_awt_peers)))
+#        addons += gtkpeer
+#      endif
+#      ifneq (,$(findstring qt, $(java_awt_peers)))
+#        addons += qtpeer
+#      endif
+      ifeq ($(with_standalone_gcj),yes)
+	addons += libgcc lib4gcc lib64gcc lib32gcc libn32gcc
+      endif
+    endif
+  endif
+  ifeq ($(with_standalone_gcj),yes)
+    ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+      ctrl_flags += -DSTANDALONEJAVA
+    endif
+  endif
+  ifeq ($(with_separate_gnat),yes)
+    ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+      languages := $(filter-out ada,$(languages))
+      addons := $(filter-out libgnat,$(addons))
+    endif
+    ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+      languages = ada
+      addons = libgnat
+    endif
+  endif
+  ifeq ($(with_separate_gpc),yes)
+    ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+      languages := $(filter-out pascal,$(languages))
+    endif
+    ifeq ($(PKGSOURCE),gpc-$(BASE_VERSION))
+      languages = pascal
+      addons = 
+    endif
+  endif
+  ifeq ($(with_separate_gdc),yes)
+    ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
+      languages := $(filter-out d,$(languages))
+    endif
+    ifeq ($(PKGSOURCE),gdc-$(BASE_VERSION))
+      languages = d
+      addons = 
+      ifeq ($(with_libphobos),yes)
+        addons += libphobos
+      endif
+    endif
+  endif
+  ifneq ($(GFDL_INVARIANT_FREE),yes)
+    addons += gfdldoc
+  endif
+endif
+endif # not stage
+
+control-file:
+	echo "addons: $(addons)"; \
+	m4 $(ctrl_flags) \
+	  -DPV=$(pkg_ver) \
+	  -DCXX_SO=$(CXX_SONAME) \
+	  -DGCC_SO=$(GCC_SONAME) \
+	  -DOBJC_SO=$(OBJC_SONAME) \
+	  -DFORTRAN_SO=$(FORTRAN_SONAME) \
+	  -DGCJ_SO=$(PKG_GCJ_EXT) \
+	  -DLIBGCJ_EXT=$(PKG_LIBGCJ_EXT) \
+	  -DGNAT_SO=$(GNAT_SONAME) \
+	  -DGNAT_V=$(GNAT_VERSION) \
+	  -DPHOBOS_V=$(libphobos_version) \
+	  -DGOMP_SO=$(GOMP_SONAME) \
+	  -DGCCMATH_SO=$(GCCMATH_SONAME) \
+	  -DMF_SO=$(MUDFLAP_SONAME) \
+	  -DSSP_SO=$(SSP_SONAME) \
+	  -Denabled_languages="$(languages) $(addons)" \
+	  -Dada_no_archs="$(ada_no_archs)" \
+	  -Djava_no_archs="$(java_no_archs)" \
+	  -Dpascal_no_archs="$(pascal_no_archs)" \
+	  -Dfortran_no_archs="$(fortran_no_archs)" \
+	  -Dlibgc_no_archs="$(libgc_no_archs)" \
+	  -Dcheck_no_archs="$(check_no_archs)" \
+	  -Dlocale_no_archs="$(locale_no_archs)" \
+	  -Dlinux_gnu_archs="$(linux_gnu_archs)" \
+	  -Dlibphobos_no_archs="$(libphobos_no_archs)" \
+	  -Dbiarch32_archs="$(strip $(subst /, ,$(biarch32archs)))" \
+	  -Dbiarch64_archs="$(strip $(subst /, ,$(biarch64archs)))" \
+	  -Dbiarchn32_archs="$(strip $(subst /, ,$(biarchn32archs)))" \
+		debian/control.m4 > debian/control.tmp2
+	uniq debian/control.tmp2 | sed '/^Build/s/ *, */, /g' \
+		> debian/control.tmp
+	rm -f debian/control.tmp2
+	[ -e debian/control ] \
+	  && cmp -s debian/control debian/control.tmp \
+	  && rm -f debian/control.tmp && exit 0; \
+	  mv debian/control.tmp debian/control; touch $(control_stamp)
+
+readme-bugs-file:
+	m4 -DDIST=$(distribution) -DSRCNAME=$(PKGSOURCE) \
+		debian/README.Bugs.m4 > debian/README.Bugs
+
+copyright-file:
+	rm -f debian/copyright
+	if echo $(SOURCE_VERSION) | grep -E ^'[0-9]\.[0-9]-[0-9]{8}' ; \
+		then SVN_BRANCH="trunk" ; \
+	else \
+		SVN_BRANCH="gcc-$(subst .,_,$(BASE_VERSION))-branch" ; \
+	fi ; \
+	sed debian/copyright.in		\
+		-e "s/@BV@/$(BASE_VERSION)/g"		\
+		-e "s/@SVN_BRANCH@/$$SVN_BRANCH/g"	\
+		> debian/copyright
+
+substvars-file:
+	rm -f debian/substvars.local.tmp
+	( \
+		echo 'gcc:Version=$(DEB_GCC_VERSION)'; \
+		echo 'gcc:EpochVersion=$(DEB_EVERSION)'; \
+		echo 'gcc:SoftVersion=$(DEB_GCC_SOFT_VERSION)'; \
+		echo 'gpc:Version=$(DEB_GPC_VERSION)'; \
+		echo 'gdc:Version=$(DEB_GDC_VERSION)'; \
+		echo 'gcj:Version=$(DEB_GCJ_VERSION)'; \
+		echo 'gcj:SoftVersion=$(DEB_GCJ_SOFT_VERSION)'; \
+		echo 'gcj:BaseVersion=$(BASE_VERSION)'; \
+		echo 'gnat:Version=$(DEB_GNAT_VERSION)'; \
+		echo 'binutils:Version=$(BINUTILSV)'; \
+		echo 'dep:libgcc=$(LIBGCC_DEP)'; \
+		echo 'dep:libgccbiarch=$(LIBGCC_BIARCH_DEP)'; \
+		echo 'dep:libcdev=$(LIBC_DEV_DEP)'; \
+		echo 'dep:libcbiarch=$(LIBC_BIARCH_DEP)'; \
+		echo 'dep:libcbiarchdev=$(LIBC_BIARCH_DEV_DEP)'; \
+		echo 'dep:libunwinddev=$(LIBUNWIND_DEV_DEP)'; \
+		echo 'dep:libcxxbiarch=$(LIBCXX_BIARCH_DEP)'; \
+		echo 'dep:libcxxbiarchdbg=$(LIBCXX_BIARCH_DBG_DEP)'; \
+		echo 'dep:libgnat=$(LIBGNAT_DEP)'; \
+		echo 'dep:ecj=$(ECJ_DEP)'; \
+		echo 'dep:libcloog=$(CLOOG_RUNTIME_DEP)'; \
+	) > debian/substvars.local.tmp
+ifneq (,$(filter $(DEB_TARGET_ARCH), $(multilib_archs)))
+	( \
+		echo 'gcc:multilib=gcc-$(BASE_VERSION)-multilib$(TS)'; \
+		echo 'gxx:multilib=g++-$(BASE_VERSION)-multilib$(TS)'; \
+		echo 'gobjc:multilib=gobjc-$(BASE_VERSION)-multilib$(TS)'; \
+		echo 'gobjcxx:multilib=gobjc++-$(BASE_VERSION)-multilib$(TS)'; \
+		echo 'gfortran:multilib=gfortran-$(BASE_VERSION)-multilib$(TS)'; \
+	) >> debian/substvars.local.tmp
+endif
+ifeq ($(with_gold),yes)
+	echo 'dep:gold=binutils-gold (>= $(BINUTILSV))' \
+		>> debian/substvars.local.tmp
+endif
+ifeq ($(with_libssp),yes)
+	echo 'dep:libssp=libssp$(SSP_SONAME) (>= $${gcc:Version})' \
+		>> debian/substvars.local.tmp
+endif
+ifeq ($(with_gomp),yes)
+	echo 'dep:libgomp=libgomp$(GOMP_SONAME)$(LS) (>= $${gcc:Version})' \
+		>> debian/substvars.local.tmp
+endif
+ifeq ($(multilib),yes)
+	echo 'dep:libgfortranbiarch=$(libgfortranbiarch)' \
+		>> debian/substvars.local.tmp
+	echo 'dep:libobjcbiarch=$(libobjcbiarch)' \
+		>> debian/substvars.local.tmp
+  ifeq ($(with_mudflap),yes)
+	echo 'dep:libmudflapbiarch=$(libmudflapbiarch)' \
+		>> debian/substvars.local.tmp
+  endif
+  ifeq ($(with_libssp),yes)
+	echo 'dep:libsspbiarch=$(libsspbiarch)' \
+		>> debian/substvars.local.tmp
+  endif
+  ifeq ($(with_gomp),yes)
+	echo 'dep:libgompbiarch=$(libgompbiarch)' \
+		>> debian/substvars.local.tmp
+  endif
+endif
+ifneq ($(with_standalone_gcj),yes)
+  ifneq (,$(filter $(DEB_HOST_ARCH),armel armhf))
+	echo 'dep:gcj=g++$(pkg_ver) (>= $(DEB_GCC_SOFT_VERSION))' \
+		>> debian/substvars.local.tmp
+  else
+	echo 'dep:gcj=gcc$(pkg_ver) (>= $(DEB_GCC_SOFT_VERSION))' \
+		>> debian/substvars.local.tmp
+  endif
+endif
+#ifneq (,$(findstring gtk, $(java_awt_peers)))
+#	echo 'pkg:gcjgtk=libgcj$(subst 0,,$(GCJ_SONAME))-awt-gtk (>= $(DEB_GCJ_VERSION))' \
+#		>> debian/substvars.local.tmp
+#endif
+#ifneq (,$(findstring qt, $(java_awt_peers)))
+#	echo 'pkg:gcjqt=libgcj$(subst 0,,$(GCJ_SONAME))-awt-qt (>= $(DEB_GCJ_VERSION))' \
+#		>> debian/substvars.local.tmp
+#endif
+ifeq ($(DEB_HOST_ARCH),hppa)
+	echo 'dep:prctl=prctl' >> debian/substvars.local.tmp
+endif
+ifneq (,$(filter $(DEB_TARGET_ARCH), powerpc ppc64))
+	echo 'base:Replaces=gcc-$(BASE_VERSION)-spu (<< 4.4.0-1)' >> debian/substvars.local.tmp
+endif
+ifeq ($(distribution)-$(DEB_HOST_ARCH),Debian-amd64)
+	echo 'confl:lib32=libc6-i386 (<< 2.9-22)' >> debian/substvars.local.tmp
+endif
+	[ -e debian/substvars.local ] \
+	  && cmp -s debian/substvars.local debian/substvars.local.tmp \
+	  && rm -f debian/substvars.local.tmp && exit 0; \
+	  mv debian/substvars.local.tmp debian/substvars.local; \
+	  touch $(control_stamp)
+
+parameters-file:
+	rm -f debian/rules.parameters.tmp
+	( \
+		echo '# configuration parameters taken from upstream source files'; \
+		echo 'GCC_VERSION	:= $(GCC_VERSION)'; \
+		echo 'NEXT_GCC_VERSION	:= $(NEXT_GCC_VERSION)'; \
+		echo 'BASE_VERSION	:= $(BASE_VERSION)'; \
+		echo 'SOURCE_VERSION	:= $(SOURCE_VERSION)'; \
+		echo 'DEB_VERSION	:= $(DEB_VERSION)'; \
+		echo 'DEB_EVERSION	:= $(DEB_EVERSION)'; \
+		echo 'GPC_BASE_VERSION	:= $(GPC_BASE_VERSION)'; \
+		echo 'GDC_BASE_VERSION  := $(GDC_BASE_VERSION)'; \
+		echo 'DEB_GPC_VERSION	:= $(DEB_GPC_VERSION)'; \
+		echo 'DEB_GDC_VERSION	:= $(DEB_GDC_VERSION)'; \
+		echo 'DEB_SOVERSION	:= $(DEB_SOVERSION)'; \
+		echo 'DEB_SOEVERSION	:= $(DEB_SOEVERSION)'; \
+		echo 'DEB_LIBGCC_SOVERSION	:= $(DEB_LIBGCC_SOVERSION)'; \
+		echo 'DEB_LIBGCC_VERSION	:= $(DEB_LIBGCC_VERSION)'; \
+		echo 'DEB_STDCXX_SOVERSION	:= $(DEB_STDCXX_SOVERSION)'; \
+		echo 'DEB_GCJ_SOVERSION	:= $(DEB_GCJ_SOVERSION)'; \
+		echo 'PKG_GCJ_EXT	:= $(PKG_GCJ_EXT)'; \
+		echo 'PKG_LIBGCJ_EXT	:= $(PKG_LIBGCJ_EXT)'; \
+		echo 'DEB_GOMP_SOVERSION	:= $(DEB_GOMP_SOVERSION)'; \
+		echo 'DEB_GCCMATH_SOVERSION	:= $(DEB_GCCMATH_SOVERSION)'; \
+		echo 'GCC_SONAME	:= $(GCC_SONAME)'; \
+		echo 'CXX_SONAME	:= $(CXX_SONAME)'; \
+		echo 'FORTRAN_SONAME	:= $(FORTRAN_SONAME)'; \
+		echo 'OBJC_SONAME	:= $(OBJC_SONAME)'; \
+		echo 'GCJ_SONAME	:= $(GCJ_SONAME)'; \
+		echo 'GNAT_VERSION	:= $(GNAT_VERSION)'; \
+		echo 'GNAT_SONAME	:= $(GNAT_SONAME)'; \
+		echo 'FFI_SONAME	:= $(FFI_SONAME)'; \
+		echo 'MUDFLAP_SONAME	:= $(MUDFLAP_SONAME)'; \
+		echo 'SSP_SONAME	:= $(SSP_SONAME)'; \
+		echo 'GOMP_SONAME	:= $(GOMP_SONAME)'; \
+		echo 'GCCMATH_SONAME	:= $(GCCMATH_SONAME)'; \
+		echo 'LIBC_DEP		:= $(LIBC_DEP)'; \
+	) > debian/rules.parameters.tmp
+	[ -e debian/rules.parameters ] \
+	  && cmp -s debian/rules.parameters debian/rules.parameters.tmp \
+	  && rm -f debian/rules.parameters.tmp && exit 0; \
+	  mv debian/rules.parameters.tmp debian/rules.parameters; \
+	  touch $(control_stamp)
+
+versioned-files:
+	fs=`echo debian/*BV* debian/*GCJ* debian/*CXX* debian/*LC* debian/*MF* | sort -u`; \
+	for f in $$fs debian/source.lintian-overrides.in; do \
+	  [ -f $$f ] || echo "CANNOT FIND $$f"; \
+	  [ -f $$f ] || continue; \
+	  if [ -z "$(DEB_CROSS)" ]; then case "$$f" in *-CR*) continue; esac; fi; \
+	  f2=$$(echo $$f \
+		| sed 's/BV/$(BASE_VERSION)/;s/PV/$(GPC_BASE_VERSION)/;s/CXX/$(CXX_SONAME)/;s/LGCJ/$(PKG_LIBGCJ_EXT)/;s/GCJ/$(PKG_GCJ_EXT)/;s/LC/$(GCC_SONAME)/;s/MF/$(MUDFLAP_SONAME)/;s/-CRB/$(cross_bin_arch)/;s/\.in$$//'); \
+	  sed -e 's/@BV@/$(BASE_VERSION)/g' \
+	      -e 's/@PV@/$(GPC_BASE_VERSION)/g' \
+	      -e 's/@CXX@/$(CXX_SONAME)/g' \
+	      -e 's/@LGCJ@/$(PKG_LIBGCJ_EXT)/g' \
+	      -e 's/@GCJ@/$(PKG_GCJ_EXT)/g' \
+	      -e 's/@GCJSO@/$(GCJ_SONAME)/g' \
+	      -e 's/@LC@/$(GCC_SONAME)/g' \
+	      -e 's/@MF@/$(MUDFLAP_SONAME)/g' \
+	      -e 's/@SRC@/$(PKGSOURCE)/g' \
+	      -e 's/@GFDL@/$(if $(filter yes,$(GFDL_INVARIANT_FREE)),#)/g' \
+	      -e 's/@java_priority@/$(java_priority)/g' \
+	      -e 's/@gcc_priority@/$(subst .,,$(BASE_VERSION))/g' \
+	      -e 's/@TARGET@/$(DEB_TARGET_GNU_TYPE)/g' \
+	    $$f > $$f2; \
+	  touch -r $$f $$f2; \
+	done
--- gdc-4.4-1.063-4.4.7.orig/debian/source.lintian-overrides
+++ gdc-4.4-1.063-4.4.7/debian/source.lintian-overrides
@@ -0,0 +1,2 @@
+gdc-4.4: invalid-arch-string-in-source-relation
+gdc-4.4: quilt-build-dep-but-no-series-file
--- gdc-4.4-1.063-4.4.7.orig/debian/gcc-BV-source.overrides
+++ gdc-4.4-1.063-4.4.7/debian/gcc-BV-source.overrides
@@ -0,0 +1,5 @@
+gcc-@BV@-source: changelog-file-not-compressed
+
+# these are patches taken over unmodified from 4.3
+gcc-@BV@-source: script-not-executable
+gcc-@BV@-source: shell-script-fails-syntax-check
--- gdc-4.4-1.063-4.4.7.orig/debian/NEWS.html
+++ gdc-4.4-1.063-4.4.7/debian/NEWS.html
@@ -0,0 +1,763 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+  <!DOCTYPE html
+            PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ 
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  
+  
+   <head>
+ 
+    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+    <link rev="made" href="mailto:gcc@gcc.gnu.org" />
+    <link rel="shortcut icon" href="http://gcc.gnu.org/favicon.ico" />
+    <link rel="stylesheet" type="text/css" href="/gnu.css" />
+    <link rel="stylesheet" type="text/css" href="http://gcc.gnu.org/gcc.css" />
+  
+ <title>
+GCC 4.4 Release Series &mdash; Changes, New Features, and Fixes
+- GNU Project - Free Software Foundation (FSF)</title>
+   </head>
+ 
+
+<!-- GCC maintainers, please do not hesitate to update/contribute entries
+     concerning those part of GCC you maintain!  2002-03-23, Gerald.
+-->
+
+<body bgcolor="#FFFFFF" text="#000000" link="#1F00FF" alink="#FF0000" vlink="#9900DD">
+
+
+
+<h1 align="center">
+GCC 4.4 Release Series<br />Changes, New Features, and Fixes
+</h1>
+
+<h2>Caveats</h2>
+
+  <ul>
+    <li><code>__builtin_stdarg_start</code> has been completely
+    removed from GCC.  Support for <code>&lt;varargs.h&gt;</code> had
+    been deprecated since GCC 4.0.  Use
+    <code>__builtin_va_start</code> as a replacement.  </li>
+
+    <li>Some of the errors issued by the C++ front end that could be
+    downgraded to warnings in previous releases by using
+    <code>-fpermissive</code> are now warnings by default. They can be
+    converted into errors by using <code>-pedantic-errors</code>.</li>
+
+    <li>Use of the cpp assertion extension will now emit a warning
+    when <code>-Wdeprecated</code> or <code>-pedantic</code> is used.
+    This extension has been deprecated for many years, but never
+    warned about.</li>
+
+    <li>Packed bit-fields of type <code>char</code> were not properly
+    bit-packed on many targets prior to GCC 4.4.  On these targets, the fix in
+    GCC 4.4 causes an ABI change.  For example there is no longer a 4-bit
+    padding between field <code>a</code> and <code>b</code> in this structure:
+    <pre>
+    struct foo
+    {
+      char a:4;
+      char b:8;
+    } __attribute__ ((packed));</pre>
+    <p>There is a new warning to help identify fields that are affected:</p>
+    <pre>
+    foo.c:5: note: Offset of packed bit-field 'b' has changed in GCC 4.4</pre>
+    <p>The warning can be disabled with
+    <code>-Wno-packed-bitfield-compat</code>.</p></li>
+
+    <li>On ARM EABI targets, the C++ mangling of
+    the <code>va_list</code> type has been changed to conform to the
+    current revision of the EABI.  This does not affect the libstdc++
+    library included with GCC.</li>
+
+    <li>The SCOUNT and POS bits of the MIPS DSP control register are now
+    treated as global. Previous versions of GCC treated these fields as
+    call-clobbered instead.</li>
+
+    <li>The MIPS port no longer recognizes the <code>h</code>
+    <code>asm</code> constraint.  It was necessary to remove
+    this constraint in order to avoid generating unpredictable
+    code sequences.
+
+    <p>One of the main uses of the <code>h</code> constraint
+    was to extract the high part of a multiplication on
+    64-bit targets.  For example:</p>
+    <pre>
+    asm ("dmultu\t%1,%2" : "=h" (result) : "r" (x), "r" (y));</pre>
+    <p>You can now achieve the same effect using 128-bit types:</p>
+    <pre>
+    typedef unsigned int uint128_t __attribute__((mode(TI)));
+    result = ((uint128_t) x * y) >> 64;</pre>
+    <p>The second sequence is better in many ways.  For example,
+    if <code>x</code> and <code>y</code> are constants, the
+    compiler can perform the multiplication at compile time.
+    If <code>x</code> and <code>y</code> are not constants,
+    the compiler can schedule the runtime multiplication
+    better than it can schedule an <code>asm</code> statement.</p>
+    </li>
+
+    <li><p>Support for a number of older systems and recently
+    unmaintained or untested target ports of GCC has been declared
+    obsolete in GCC 4.4.  Unless there is activity to revive them, the
+    next release of GCC will have their sources permanently
+    <strong>removed</strong>.</p>
+
+    <p>The following ports for individual systems on particular
+    architectures have been obsoleted:</p>
+
+    <ul>
+      <li>Generic a.out on IA32 and m68k (i[34567]86-*-aout*,
+        m68k-*-aout*)</li>
+      <li>Generic COFF on ARM, H8300, IA32, m68k and SH (arm-*-coff*,
+        armel-*-coff*, h8300-*-*, i[34567]86-*-coff*, m68k-*-coff*,
+        sh-*-*).  This does not affect other more specific targets
+        using the COFF object format on those architectures, or the
+        more specific H8300 and SH targets (h8300-*-rtems*,
+        h8300-*-elf*, sh-*-elf*, sh-*-symbianelf*, sh-*-linux*,
+        sh-*-netbsdelf*, sh-*-rtems*, sh-wrs-vxworks).</li>
+      <li>2BSD on PDP-11 (pdp11-*-bsd)</li>
+      <li>AIX 4.1 and 4.2 on PowerPC (rs6000-ibm-aix4.[12]*,
+        powerpc-ibm-aix4.[12]*)</li>
+      <li>Tuning support for Itanium1 (Merced) variants.  Note that
+        code tuned for Itanium2 should also run correctly on Itanium1.</li>
+    </ul>
+
+    </li>
+
+    <li>The <code>protoize</code> and <code>unprotoize</code>
+    utilities have been obsoleted and will be removed in GCC 4.5.
+    These utilities have not been installed by default since GCC
+    3.0.</li>
+
+    <li>Support has been removed for all the <a
+    href="../gcc-4.3/changes.html#obsoleted">configurations obsoleted
+    in GCC 4.3</a>.</li>
+
+    <li>Unknown <code>-Wno-*</code> options are now silently ignored
+    by GCC if no other diagnostics are issued. If other diagnostics
+    are issued, then GCC warns about the unknown options.</li>
+   
+    <li>More information on porting to GCC 4.4 from previous versions
+    of GCC can be found in
+    the <a href="http://gcc.gnu.org/gcc-4.4/porting_to.html">porting
+    guide</a> for this release.</li>
+ </ul>
+
+<h2>General Optimizer Improvements</h2>
+
+  <ul>
+    <li>A new command-line switch <code>-findirect-inlining</code> has been
+      added.  When turned on it allows the inliner to also inline indirect
+      calls that are discovered to have known targets at compile time
+      thanks to previous inlining.  </li>
+
+    <li>A new command-line switch <code>-ftree-switch-conversion</code> has
+      been added.  This new pass turns simple initializations of scalar
+      variables in switch statements into initializations from a static array,
+      given that all the values are known at compile time and the ratio between
+      the new array size and the original switch branches does not exceed 
+      the parameter <code>--param switch-conversion-max-branch-ratio</code> 
+      (default is eight).  </li>
+
+    <li>A new command-line switch <code>-ftree-builtin-call-dce</code>
+      has been added.  This optimization eliminates unnecessary calls
+      to certain builtin functions when the return value is not used,
+      in cases where the calls can not be eliminated entirely because
+      the function may set <code>errno</code>.  This optimization is
+      on by default at <code>-O2</code> and above.</li>
+
+    <li>A new command-line switch <code>-fconserve-stack</code>
+      directs the compiler to minimize stack usage even if it makes
+      the generated code slower.  This affects inlining
+      decisions.</li>
+
+    <li>When the assembler supports it, the compiler will now emit
+      unwind information using assembler <code>.cfi</code> directives.
+      This makes it possible to use such directives in inline
+      assembler code.  The new option <code>-fno-dwarf2-cfi-asm</code>
+      directs the compiler to not use <code>.cfi</code>
+      directives.</li>
+
+    <li><p>The <a href="http://gcc.gnu.org/wiki/Graphite">Graphite</a>
+      branch has been merged.  This merge has brought in a new
+      framework for loop optimizations based on a polyhedral
+      intermediate representation.  These optimizations apply to all
+      the languages supported by GCC.  The following new code
+      transformations are available in GCC 4.4:</p>
+      
+      <ul>
+	<li><code>-floop-interchange</code>
+	  performs loop interchange transformations on loops.  Interchanging two
+	  nested loops switches the inner and outer loops.  For example, given a
+	  loop like:
+	  <pre>
+          DO J = 1, M
+            DO I = 1, N
+              A(J, I) = A(J, I) * C
+            ENDDO
+          ENDDO
+	  </pre>
+	    <p>loop interchange will transform the loop as if the user had written:</p>
+	      <pre>
+          DO I = 1, N
+            DO J = 1, M
+              A(J, I) = A(J, I) * C
+            ENDDO
+          ENDDO
+	      </pre>
+	    <p>which can be beneficial when <code>N</code> is larger than the caches,
+	      because in Fortran, the elements of an array are stored in memory
+	      contiguously by column, and the original loop iterates over rows,
+	      potentially creating at each access a cache miss.</p>
+	</li>
+	<li><code>-floop-strip-mine</code>
+	  performs loop strip mining transformations on loops.  Strip mining
+	  splits a loop into two nested loops.  The outer loop has strides
+	  equal to the strip size and the inner loop has strides of the
+	  original loop within a strip.  For example, given a loop like:
+	  <pre>
+          DO I = 1, N
+            A(I) = A(I) + C
+          ENDDO
+	  </pre>
+	  <p>loop strip mining will transform the loop as if the user had written:</p>
+	    <pre>
+          DO II = 1, N, 4
+            DO I = II, min (II + 3, N)
+              A(I) = A(I) + C
+            ENDDO
+          ENDDO
+	    </pre>
+	</li>
+	<li><code>-floop-block</code>
+	  performs loop blocking transformations on loops.  Blocking strip mines
+	  each loop in the loop nest such that the memory accesses of the
+	  element loops fit inside caches.  For example, given a loop like:
+	  <pre>
+          DO I = 1, N
+            DO J = 1, M
+              A(J, I) = B(I) + C(J)
+            ENDDO
+          ENDDO
+	  </pre>
+	  <p>loop blocking will transform the loop as if the user had written:</p>
+	  <pre>
+          DO II = 1, N, 64
+            DO JJ = 1, M, 64
+              DO I = II, min (II + 63, N)
+                DO J = JJ, min (JJ + 63, M)
+                  A(J, I) = B(I) + C(J)
+                ENDDO
+              ENDDO
+            ENDDO
+          ENDDO
+	  </pre>
+	  <p>which can be beneficial when <code>M</code> is larger than the caches,
+	    because the innermost loop will iterate over a smaller amount of data
+	    that can be kept in the caches.</p>
+	</li>
+      </ul>
+    </li>
+    <li>A new register allocator has replaced the old one.  It is
+        called <em>integrated register allocator</em> (<em>IRA</em>)
+        because coalescing, register live range splitting, and hard
+        register preferencing are done on-the-fly during coloring.  It
+        also has better integration with the reload pass.  IRA is a
+        regional register allocator which uses modern Chaitin-Briggs
+        coloring instead of Chow's priority coloring used in the old
+        register allocator.  More info about IRA internals and options
+        can be found in the GCC manuals.
+    </li>
+    <li>A new instruction scheduler and software pipeliner, based on 
+        the selective scheduling approach, has been added.  The new pass
+        performs instruction unification, register renaming, substitution
+        through register copies, and speculation during scheduling.
+        The software pipeliner is able to pipeline non-countable loops.
+        The new pass is targeted at scheduling-eager in-order platforms.
+        In GCC 4.4 it is available for the Intel Itanium platform
+        working by default as the second scheduling pass (after register
+        allocation) at the <code>-O3</code> optimization level.
+    </li>
+
+    <li>When using <code>-fprofile-generate</code> with a
+      multi-threaded program, the profile counts may be slightly wrong
+      due to race conditions.  The
+      new <code>-fprofile-correction</code> option directs the
+      compiler to apply heuristics to smooth out the inconsistencies.
+      By default the compiler will give an error message when it finds
+      an inconsistent profile.</li>
+
+    <li>The new <code>-fprofile-dir=PATH</code> option permits setting
+      the directory where profile data files are stored when
+      using <code>-fprofile-generate</code> and friends, and the
+      directory used when reading profile data files
+      using <code>-fprofile-use</code> and friends.</li>
+
+  </ul>
+
+<h2>New warning options</h2>
+  <ul>
+
+    <li>The new <code>-Wframe-larger-than=NUMBER</code> option directs
+      GCC to emit a warning if any stack frame is larger
+      than <code>NUMBER</code> bytes.  This may be used to help ensure that
+      code fits within a limited amount of stack space.</li>
+
+    <li>The new <code>-Wno-mudflap</code> option disables warnings
+      about constructs which can not be instrumented when
+      using <code>-fmudflap</code>.</li>
+
+  </ul>
+
+<h2>New Languages and Language specific improvements</h2>
+
+  <ul>
+    <li>Version 3.0 of the <a
+    href="http://openmp.org/wp/openmp-specifications/">OpenMP specification</a>
+    is now supported for the C, C++, and Fortran compilers.</li>
+  </ul>
+
+<h3>C family</h3>
+
+  <ul>
+    <li>A new <code>optimize</code> attribute was added to allow programmers to
+    change the optimization level and particular optimization options for an
+    individual function.  You can also change the optimization options via the
+    <code>GCC optimize</code> pragma for functions defined after the pragma.
+    The <code>GCC push_options</code> pragma and the
+    <code>GCC pop_options</code> pragma allow you temporarily save and restore
+    the options used.  The <code>GCC reset_options</code> pragma restores the
+    options to what was specified on the command line.
+    </li>
+
+    <li>Uninitialized warnings do not require enabling optimization
+    anymore, that is, <code>-Wuninitialized</code> can be used
+    together with <code>-O0</code>.  Nonetheless, the warnings given
+    by <code>-Wuninitialized</code> will probably be more accurate if
+    optimization is enabled.
+    </li>
+
+    <li><code>-Wparentheses</code> now warns about expressions such as
+    <code>(!x | y)</code> and <code>(!x &amp; y)</code>. Using explicit
+    parentheses, such as in <code>((!x) | y)</code>, silences this
+    warning.</li>
+
+    <li><code>-Wsequence-points</code> now warns within
+    <code>if</code>, <code>while</code>,<code>do while</code>
+    and <code>for</code> conditions, and within <code>for</code>
+    begin/end expressions.
+    </li>
+
+    <li>A new option <code>-dU</code> is available to dump definitions
+    of preprocessor macros that are tested or expanded.</li>
+
+  </ul>
+
+<h3>C++</h3>
+  <ul>
+    <li><a href="cxx0x_status.html">Improved experimental support for
+    the upcoming ISO C++ standard, C++0x</a>. Including support
+    for <code>auto</code>, inline namespaces, generalized initializer
+    lists, defaulted and deleted functions, new character types, and
+    scoped enums.</li>
+
+    <li> Those errors that may be downgraded to warnings to build
+    legacy code now mention <code>-fpermissive</code> when
+    <code>-fdiagnostics-show-option</code> is enabled.</li>
+
+    <li><code>-Wconversion</code> now warns if the result of a
+    <code>static_cast</code> to enumeral type is unspecified because
+    the value is outside the range of the enumeral type.
+    </li>
+
+    <li><code>-Wuninitialized</code> now warns if a non-static
+    reference or non-static <code>const</code> member appears in a
+    class without constructors.
+    </li>
+
+    <li>G++ now properly implements value-initialization, so objects with
+    an initializer of <code>()</code> and an implicitly defined default
+    constructor will be zero-initialized before the default constructor is
+    called.</li>
+  </ul>
+  
+  <h4>Runtime Library (libstdc++)</h4>
+  <ul>
+    <li><a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#id476343">
+	Improved experimental support for the upcoming ISO C++ standard, 
+	C++0x</a>, including:
+      <ul>
+      <li>Support for &lt;chrono&gt;, &lt;condition_variable&gt;, 
+	&lt;cstdatomic&gt;, &lt;forward_list&gt;, &lt;initializer_list&gt;, 
+	&lt;mutex&gt;, &lt;ratio&gt;, &lt;system_error&gt;, and 
+	&lt;thread&gt;.</li>
+      <li><code>unique_ptr</code>, &lt;algorithm&gt;
+	additions, exception propagation, and support for the new
+	character types in &lt;string&gt; and &lt;limits&gt;.</li>
+      <li>Existing facilities now exploit initializer lists, defaulted and 
+	deleted functions, and the newly implemented core C++0x features.</li>
+      <li>The standard containers are more efficient together with stateful
+	allocators.</li>
+      </ul>
+    </li>
+    <li>Experimental support for non-standard pointer types in containers.</li>
+    <li>The long standing libstdc++/30928 has been fixed for targets running
+      glibc 2.10 or later.</li>
+    <li>As usual, many small and larger bug fixes, in particular quite a few
+      corner cases in &lt;locale&gt;.</li>
+  </ul>
+
+<h3>Fortran</h3>
+  <ul>
+    <li>GNU Fortran now employs libcpp directly instead of using cc1 as an
+    external preprocessor. The <a
+    href="http://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html">
+    <code>-cpp</code></a> option was added to allow manual invocation of the
+    preprocessor without relying on filename extensions.</li>
+
+    <li>The <a
+    href="http://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125">
+    <code>-Warray-temporaries</code></a> option warns about array temporaries
+    generated by the compiler, as an aid to optimization.</li>
+
+    <li>The <a
+    href="http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221">
+    <code>-fcheck-array-temporaries</code></a> option has been added, printing
+    a notification at run time, when an array temporary had to be created for
+    an function argument. Contrary to <code>-Warray-temporaries</code> the
+    warning is only printed if the array is noncontiguous.</li>
+
+    <li>Improved generation of DWARF debugging symbols</li>
+
+    <li>If using an intrinsic not part of the selected standard (via
+      <code>-std=</code> and <code>-fall-intrinsics</code>) gfortran will now
+      treat it as if this procedure were declared <code>EXTERNAL</code> and
+      try to link to a user-supplied procedure. <code>-Wintrinsics-std</code>
+      will warn whenever this happens. The now-useless option
+      <code>-Wnonstd-intrinsic</code> was removed.</li>
+
+    <li>The flag <code>-falign-commons</code> has been added to control the
+      alignment of variables in COMMON blocks, which is enabled by default in
+      line with previous GCC version. Using <code>-fno-align-commons</code> one
+      can force commons to be contiguous in memory as required by the Fortran
+      standard, however, this slows down the memory access. The option
+      <code>-Walign-commons</code>, which is enabled by default, warns when
+      padding bytes were added for alignment. The proper solution is to sort
+      the common objects by decreasing storage size, which avoids the alignment
+      problems.</li>
+
+    <li>Fortran 2003 support has been extended: 
+      <ul>
+        <li>Wide characters (ISO 10646, UCS-4, <code>kind=4</code>) and UTF-8
+          I/O is now supported (except internal reads from/writes to wide
+          strings). <a
+          href="http://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34">
+          <code>-fbackslash</code></a> now supports also
+          <code>\u<em>nnnn</em></code> and <code>\U<em>nnnnnnnn</em></code>
+          to enter Unicode characters.</li>
+        <li>Asynchronous I/O (implemented as synchronous I/O) and the
+          <code>decimal=</code>, <code>size=</code>, <code>sign=</code>,
+          <code>pad=</code>, <code>blank=</code>, and <code>delim=</code>
+          specifiers are now supported in I/O statements.</li>
+        <li>Support for Fortran 2003 structure constructors and for
+          array constructor with typespec has been added.</li>
+        <li>Procedure Pointers (but not yet as component in derived types
+          and as function results) are now supported.</li>
+        <li>Abstract types, type extension, and type-bound procedures (both
+          <code>PROCEDURE</code> and <code>GENERIC</code> but not as
+          operators). Note: As <code>CLASS</code>/polymorphyic types are
+          not implemented, type-bound procedures with <code>PASS</code>
+          accept as non-standard extension <code>TYPE</code> arguments.</li>
+      </ul>
+    </li>
+    <li>Fortran 2008 support has been added:
+      <ul>
+        <li>The <code>-std=f2008</code> option and support for the file
+          extensions <code>.f2008</code> and <code>.F2008</code> has been
+          added.</li>
+        <li>The g0 format descriptor is now supported.</li>
+        <li>The Fortran 2008 mathematical intrinsics <code>ASINH</code>,
+          <code>ACOSH</code>, <code>ATANH</code>, <code>ERF</code>,
+          <code>ERFC</code>, <code>GAMMA</code>, <code>LOG_GAMMA</code>,
+          <code>BESSEL_*</code>, <code>HYPOT</code>,
+          and <code>ERFC_SCALED</code> are now available
+          (some of them existed as GNU extension before). Note: The hyperbolic
+          functions are not yet supporting complex arguments and the three-
+          argument version of <code>BESSEL_*N</code> is not available.</li>
+        <li>The bit intrinsics <code>LEADZ</code> and <code>TRAILZ</code>
+          have been added.</li>
+      </ul>
+    </li>
+  </ul>
+
+<h3>Java (GCJ)</h3>
+
+<h3>Ada</h3>
+<ul>
+  <li>The Ada runtime now supports multilibs on many platforms including 
+    x86_64, SPARC and PowerPC. Their build is enabled by default.</li>
+</ul>
+
+<h2 id="targets">New Targets and Target Specific Improvements</h2>
+
+<h3>ARM</h3>
+  <ul>
+    <li>GCC now supports optimizing for the Cortex-A9, Cortex-R4 and
+    Cortex-R4F processors and has many other improvements to
+    optimization for ARM processors.</li>
+    <li>GCC now supports the VFPv3 variant with 16 double-precision
+    registers with <code>-mfpu=vfpv3-d16</code>.  The
+    option <code>-mfpu=vfp3</code> has been renamed
+    to <code>-mfpu=vfpv3</code>.</li>
+    <li>GCC now supports the <code>-mfix-cortex-m3-ldrd</code> option
+    to work around an erratum on Cortex-M3 processors.</li>
+    <li>GCC now supports the <code>__sync_*</code> atomic operations
+    for ARM EABI GNU/Linux.</li>
+    <li>The section anchors optimization is now enabled by default
+    when optimizing for ARM.</li>
+    <li>GCC now uses a new EABI-compatible profiling interface for
+    EABI targets.  This requires a
+    function <code>__gnu_mcount_nc</code>, which is provided by GNU
+    libc versions 2.8 and later.</li>
+  </ul>
+
+<h3>AVR</h3>
+  <ul>
+    <li>The <code>-mno-tablejump</code> option has been deprecated because
+    it has the same effect as the <code>-fno-jump-tables</code> option.</li>
+    <li>Added support for these new AVR devices:
+      <ul>
+        <li>ATA6289</li>
+        <li>ATtiny13A</li>
+        <li>ATtiny87</li>
+        <li>ATtiny167</li>
+        <li>ATtiny327</li>
+        <li>ATmega8C1</li>
+        <li>ATmega16C1</li>
+        <li>ATmega32C1</li>
+        <li>ATmega8M1</li>
+        <li>ATmega16M1</li>
+        <li>ATmega32M1</li>
+        <li>ATmega32U4</li>
+        <li>ATmega16HVB</li>
+        <li>ATmega4HVD</li>
+        <li>ATmega8HVD</li>
+        <li>ATmega64C1</li>
+        <li>ATmega64M1</li>
+        <li>ATmega16U4</li>
+        <li>ATmega32U6</li>
+        <li>ATmega128RFA1</li>
+        <li>AT90PWM81</li>
+        <li>AT90SCR100</li>
+        <li>M3000F</li>
+        <li>M3000S</li>
+        <li>M3001B</li>
+      </ul>
+    </li>
+  </ul>
+
+<h3>IA-32/x86-64</h3>
+  <ul>
+    <li>Support for Intel AES built-in functions and code generation is
+	available via <code>-maes</code>.</li>
+    <li>Support for Intel PCLMUL built-in function and code generation is
+	available via <code>-mpclmul</code>.</li>
+    <li>Support for Intel AVX built-in functions and code generation is
+	available via <code>-mavx</code>.</li>
+    <li>Automatically align the stack for local variables with alignment
+	requirement. </li>
+    <li>GCC can now utilize the SVML library for vectorizing calls to
+	a set of C99 functions if <code>-mveclibabi=svml</code> is specified
+	and you link to an SVML ABI compatible library.</li>
+    <li>A new <code>target</code> attribute was added to allow programmers to change the target options like <code>-msse2</code> or <code>-march=k8</code> for an individual function.  You can also change the target options via the <code>GCC target</code> pragma for functions defined after the pragma.</li>
+    <li>GCC can now be configured with
+    options <code>--with-arch-32</code>, <code>--with-arch-64</code>,
+    <code>--with-cpu-32</code>, <code>--with-cpu-64</code>,
+    <code>--with-tune-32</code> and <code>--with-tune-64</code> to
+    control the default optimization separately for 32-bit and 64-bit
+    modes.</li>
+  </ul>
+
+<h3>IA-32/IA64</h3>
+  <ul>
+    <li>Support for <code>__float128</code> (TFmode) IEEE quad type and
+	corresponding TCmode IEEE complex quad type is available
+	via the soft-fp library on <code>IA-32/IA64</code> targets.
+	This includes basic arithmetic operations (addition, subtraction,
+	negation, multiplication and division) on <code>__float128</code>
+	real and TCmode complex values, the full set of IEEE comparisons
+	between <code>__float128</code> values, conversions to and from
+	<code>float</code>, <code>double</code> and <code>long double</code>
+	floating point types, as well as conversions to and from
+	<code>signed</code> or <code>unsigned</code> integer,
+	<code>signed</code> or <code>unsigned long</code> integer and
+	<code>signed</code> or <code>unsigned</code> quad
+	(TImode, <code>IA64</code> only) integer types.  Additionally,
+	all operations generate the full set of IEEE exceptions and support
+	the full set of IEEE rounding modes.</li>
+  </ul>
+
+<h3>M68K/ColdFire</h3>
+  <ul>
+    <li>GCC now supports instruction scheduling for ColdFire V1, V3
+    and V4 processors.  (Scheduling support for ColdFire V2 processors
+    was added in GCC 4.3.)</li>
+    <li>GCC now supports the <code>-mxgot</code> option to support
+    programs requiring many GOT entries on ColdFire.</li>
+    <li>The m68k-*-linux-gnu target now builds multilibs by
+    default.</li>
+  </ul>
+
+<h3>MIPS</h3>
+  <ul>
+    <li><p>MIPS Technologies have extended the original MIPS SVR4 ABI
+        to include support for procedure linkage tables (PLTs)
+        and copy relocations.  These extensions allow GNU/Linux
+        executables to use a significantly more efficient code
+        model than the one defined by the original ABI.</p>
+
+        <p>GCC support for this code model is available via a
+        new command-line option, <code>-mplt</code>.  There is also
+        a new configure-time option, <code>--with-mips-plt</code>,
+        to make <code>-mplt</code> the default.</p>
+
+        <p>The new code model requires support from the assembler,
+        the linker, and the runtime C library.  This support is available
+        in binutils 2.19 and GLIBC 2.9.</p></li>
+    <li>GCC can now generate MIPS16 code for 32-bit GNU/Linux executables
+        and 32-bit GNU/Linux shared libraries.  This feature requires
+        GNU binutils 2.19 or above.</li>
+    <li>Support for RMI's XLR processor is now available through the
+        <code>-march=xlr</code> and <code>-mtune=xlr</code> options.</li>
+    <li>64-bit targets can now perform 128-bit multiplications inline,
+        instead of relying on a <code>libgcc</code> function.</li>
+    <li>Native GNU/Linux toolchains now support <code>-march=native</code>
+        and <code>-mtune=native</code>, which select the host processor.</li>
+    <li>GCC now supports the R10K, R12K, R14K and R16K processors.  The
+        canonical <code>-march=</code> and <code>-mtune=</code> names for
+        these processors are <code>r10000</code>, <code>r12000</code>,
+        <code>r14000</code> and <code>r16000</code> respectively.</li>
+    <li>GCC can now work around the side effects of speculative execution
+        on R10K processors.  Please see the documentation of the
+        <code>-mr10k-cache-barrier</code> option for details.</li>
+    <li>Support for the MIPS64 Release 2 instruction set has been added.  The
+        option <code>-march=mips64r2</code> enables generation of these
+        instructions.</li>
+    <li>GCC now supports Cavium Networks' Octeon processor.  This support is
+        available through the <code>-march=octeon</code> and
+        <code>-mtune=octeon</code> options.</li>
+    <li>GCC now supports STMicroelectronics' Loongson 2E/2F processors.  The
+        canonical <code>-march=</code> and <code>-mtune=</code> names for
+        these processors are <code>loongson2e</code> and
+        <code>loongson2f</code>.</li>
+  </ul>
+
+<h3 id="picochip">picochip</h3>
+
+  <p>Picochip is a 16-bit processor.  A typical picoChip contains over 250
+  small cores, each with small amounts of memory. There are three processor
+  variants (STAN, MEM and CTRL) with different instruction sets and memory
+  configurations and they can be chosen using the <code>-mae</code> option.
+  </p>
+
+  <p>This port is intended to be a "C" only port.</p>
+
+<h3>Power Architecture and PowerPC</h3>
+  <ul>
+    <li>GCC now supports the e300c2, e300c3 and e500mc processors.</li>
+    <li>GCC now supports Xilinx processors with a single-precision FPU.</li>
+    <li>Decimal floating point is now supported for e500 processors.</li>
+  </ul>
+
+<h3>S/390, zSeries and System z9/z10</h3>
+  <ul>
+    <li>Support for the IBM System z10 EC/BC processor has
+        been added.  When using the <code>-march=z10</code> option,
+        the compiler will generate code making use of instructions
+        provided by the General-Instruction-Extension Facility and the
+        Execute-Extension Facility.</li>
+  </ul>
+
+<h3>VxWorks</h3>
+  <ul>
+    <li>GCC now supports the thread-local storage mechanism used on
+    VxWorks.</li>
+  </ul>
+
+<h3>Xtensa</h3>
+  <ul>
+    <li>GCC now supports thread-local storage (TLS) for Xtensa processor
+    configurations that include the Thread Pointer option.  TLS also requires
+    support from the assembler and linker; this support is provided in the
+    GNU binutils beginning with version 2.19.</li>
+  </ul>
+
+<h2>Documentation improvements</h2>
+
+<h2>Other significant improvements</h2>
+
+
+
+
+<!-- ==================================================================== -->
+
+<div class="copyright">
+
+<p>Please send FSF &amp; GNU inquiries &amp; questions to
+<a href="mailto:gnu@gnu.org">gnu@gnu.org</a>.
+There are also <a href="http://www.gnu.org/home.html#ContactInfo">other ways
+to contact</a> the FSF.</p>
+
+<p>These pages are maintained by
+<a href="http://gcc.gnu.org/about.html">the GCC team</a>.</p>
+
+<address>For questions related to the use of GCC, please consult these web
+pages and the <a href="http://gcc.gnu.org/onlinedocs/">GCC manuals</a>. If
+that fails, the <a href="mailto:gcc-help@gcc.gnu.org">gcc-help@gcc.gnu.org</a>
+mailing list might help.<br />
+Please send comments on these web pages and the development of GCC to our
+developer mailing list at <a href="mailto:gcc@gnu.org">gcc@gnu.org</a>
+or <a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a>.  All of our lists
+have <a href="http://gcc.gnu.org/lists.html">public archives</a>.
+</address>
+
+<p>Copyright (C) Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110, USA.</p>
+<p>Verbatim copying and distribution of this entire article is
+permitted in any medium, provided this notice is preserved.</p>
+
+<table width="100%" border="0"><tr><td>
+  <!-- IGNORE DIFF -->Last modified 2009-04-21
+</td><td align="right" valign="bottom">
+  <a href="http://validator.w3.org/check/referer">
+      <img src="http://www.w3.org/Icons/valid-xhtml10"
+     alt="Valid XHTML 1.0" border="0" width="88" height="31" />
+   
+  </a>
+</td></tr></table>
+
+</div>
+
+<!-- ==================================================================== -->
+
+</body>
+     </html>
+  
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc1.symbols.alpha
+++ gdc-4.4-1.063-4.4.7/debian/libgcc1.symbols.alpha
@@ -0,0 +1,107 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_LDBL_4.0.0@GCC_LDBL_4.0.0 1:4.2.1
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_LDBL_4.0.0 1:4.2.1
+ __divti3@GCC_3.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfti@GCC_3.0 1:4.2.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfti@GCC_3.0 1:4.2.1
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_3.0 1:4.2.1
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __lshrti3@GCC_3.0 1:4.1.1
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_LDBL_4.0.0 1:4.2.1
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_LDBL_4.0.0 1:4.2.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.m68k
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.m68k
@@ -0,0 +1,5 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0
--- gdc-4.4-1.063-4.4.7.orig/debian/gcj-BV-jre-headless.postinst
+++ gdc-4.4-1.063-4.4.7/debian/gcj-BV-jre-headless.postinst
@@ -0,0 +1,48 @@
+#! /bin/sh -e
+
+prio=@java_priority@
+
+update-alternatives --quiet \
+    --install /usr/bin/java java /usr/bin/gij-@BV@ $prio \
+    @GFDL@--slave /usr/share/man/man1/java.1.gz java.1.gz /usr/share/man/man1/gij-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/rmiregistry rmiregistry /usr/bin/grmiregistry-@BV@ $prio \
+    --slave /usr/share/man/man1/rmiregistry.1.gz rmiregistry.1.gz /usr/share/man/man1/grmiregistry-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/keytool keytool /usr/bin/gkeytool-@BV@ $prio \
+    --slave /usr/share/man/man1/keytool.1.gz keytool.1.gz /usr/share/man/man1/gkeytool-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/orbd orbd /usr/bin/gorbd-@BV@ $prio \
+    --slave /usr/share/man/man1/orbd.1.gz orbd.1.gz /usr/share/man/man1/gorbd-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/rmid rmid /usr/bin/grmid-@BV@ $prio \
+    --slave /usr/share/man/man1/rmid.1.gz rmid.1.gz /usr/share/man/man1/grmid-@BV@.1.gz
+
+case "$1" in
+configure)
+    if [ ! -f /var/lib/gcj-@BV@/classmap.db ]; then
+	uname=$(uname -m)
+	mkdir -p /var/lib/gcj-@BV@
+	if gcj-dbtool-@BV@ -n /var/lib/gcj-@BV@/classmap.db; then
+	    case "$uname" in arm*|m68k|parisc*)
+	        echo >&2 "gcj-dbtool succeeded unexpectedly"
+	    esac
+	else
+	    case "$uname" in
+	    arm*|m68k|parisc*)
+	        echo >&2 "ERROR: gcj-dbtool did fail; known problem on $uname";;
+	    *)
+		exit 2
+	    esac
+	    touch /var/lib/gcj-@BV@/classmap.db
+	fi
+    fi
+esac
+
+#DEBHELPER#
+
+exit 0
--- gdc-4.4-1.063-4.4.7.orig/debian/gcj-wrapper-BV
+++ gdc-4.4-1.063-4.4.7/debian/gcj-wrapper-BV
@@ -0,0 +1,91 @@
+#!/usr/bin/perl -w
+#
+# Starts the GNU Java compiler.
+#
+# Command-line arguments should be in the style of Sun's Java compiler;
+# these will be converted to gcj arguments before being passed to the
+# gcj itself.
+#
+# Copyright (C) 2002-2003 by Ben Burton <bab@debian.org>
+# Based on the original gcj-wrapper-3.2 shell script.
+
+use strict;
+
+# The real Java compiler:
+my $javaCompiler = '/usr/bin/gcj-@BV@';
+
+# The command-line arguments to pass to the real Java compiler:
+my @commandLine;
+
+# The warning flags to pass to the GNU Java compiler:
+my $warnings = '-Wall';
+
+# Build the command-line from the arguments given.
+my $parsingOptions = 1;
+my $copyNextArg = 0;
+my $ignoreNextArg = 0;
+my $appendNextArg = '';
+foreach my $arg (@ARGV) {
+    # See if we already know what to do with this argument.
+    if ($ignoreNextArg) {
+        # Throw it away.
+        $ignoreNextArg = 0;
+        next;
+    } elsif ($copyNextArg or not $parsingOptions) {
+        # Copy it directly.
+        push @commandLine, $arg;
+        $copyNextArg = 0;
+        next;
+    } elsif ($appendNextArg) {
+        # Append it to $appendNextArg and then copy directly.
+        push @commandLine, ($appendNextArg . $arg);
+        $appendNextArg = '';
+        next;
+    }
+
+    # Try to interpret Sun-style options.
+    if ($arg eq '-version') {
+        push @commandLine, '--version';
+    } elsif ($arg eq '-h' or $arg eq '-help') {
+        push @commandLine, '--help';
+    } elsif ($arg eq '-classpath' or $arg eq '--classpath' or $arg eq '--cp') {
+        $appendNextArg = '--classpath=';
+    } elsif ($arg eq '-encoding' or $arg eq '-bootclasspath' or
+             $arg eq '-extdirs') {
+        $appendNextArg = '-' . $arg . '=';
+    } elsif ($arg eq '-d') {
+        push @commandLine, '-d';
+        $copyNextArg = 1;
+    } elsif ($arg eq '-nowarn') {
+        $warnings = '';
+    } elsif ($arg =~ /^-g/) {
+        # Some kind of debugging option - just switch debugging on.
+        push @commandLine, '-g' if ($arg ne '-g:none');
+    } elsif ($arg eq '-O') {
+        push @commandLine, '-O2';
+    } elsif ($arg eq '-Xss') {
+        push @commandLine, $arg;
+    } elsif ($arg =~ /^-X/) {
+        # An extended Sun option (which we don't support).
+        push @commandLine, '--help' if ($arg eq '-X');
+    } elsif ($arg eq '-source' or $arg eq '-sourcepath' or $arg eq '-target') {
+        # An unsupported option with a following argument.
+        $ignoreNextArg = 1;
+    } elsif ($arg =~ /^-/) {
+        # An unsupported standalone option.
+    } else {
+        # Some non-option argument has been given.
+        # Stop parsing options at this point.
+        push @commandLine, $arg;
+        $parsingOptions = 0;
+    }
+}
+
+# Was there a partial argument that was never completed?
+push @commandLine, $appendNextArg if ($appendNextArg);
+
+# Call the real Java compiler.
+my @fullCommandLine = ( $javaCompiler, '-C' );
+push @fullCommandLine, $warnings if ($warnings);
+push @fullCommandLine, @commandLine;
+exec @fullCommandLine or exit(1);
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.common
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.common
@@ -0,0 +1,2873 @@
+ CXXABI_1.3.1@CXXABI_1.3.1 4.1.1
+ CXXABI_1.3.2@CXXABI_1.3.2 4.3
+ CXXABI_1.3.3@CXXABI_1.3.3 4.4.0
+ CXXABI_1.3@CXXABI_1.3 4.1.1
+ GLIBCXX_3.4.10@GLIBCXX_3.4.10 4.3
+ GLIBCXX_3.4.11@GLIBCXX_3.4.11 4.4.0
+ GLIBCXX_3.4.12@GLIBCXX_3.4.12 4.4.0
+ GLIBCXX_3.4.13@GLIBCXX_3.4.13 4.4.1-4
+ GLIBCXX_3.4.1@GLIBCXX_3.4.1 4.1.1
+ GLIBCXX_3.4.2@GLIBCXX_3.4.2 4.1.1
+ GLIBCXX_3.4.3@GLIBCXX_3.4.3 4.1.1
+ GLIBCXX_3.4.4@GLIBCXX_3.4.4 4.1.1
+ GLIBCXX_3.4.5@GLIBCXX_3.4.5 4.1.1
+ GLIBCXX_3.4.6@GLIBCXX_3.4.6 4.1.1
+ GLIBCXX_3.4.7@GLIBCXX_3.4.7 4.1.1
+ GLIBCXX_3.4.8@GLIBCXX_3.4.8 4.1.1
+ GLIBCXX_3.4.9@GLIBCXX_3.4.9 4.2.1
+ GLIBCXX_3.4@GLIBCXX_3.4 4.1.1
+ _ZGVNSt10moneypunctIcLb0EE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt10moneypunctIcLb1EE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt10moneypunctIwLb0EE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt10moneypunctIwLb1EE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt11__timepunctIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt11__timepunctIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt7collateIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt7collateIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8messagesIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8messagesIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8numpunctIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8numpunctIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZGVNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZN10__cxxabiv116__enum_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv116__enum_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv116__enum_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__array_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__array_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__array_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__class_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__class_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__class_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__pbase_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__pbase_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv117__pbase_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv119__pointer_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv119__pointer_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv119__pointer_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv120__function_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv120__function_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv120__function_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv120__si_class_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv120__si_class_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv120__si_class_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv121__vmi_class_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv121__vmi_class_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv121__vmi_class_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv123__fundamental_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv123__fundamental_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv123__fundamental_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv129__pointer_to_member_type_infoD0Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv129__pointer_to_member_type_infoD1Ev@CXXABI_1.3 4.1.1
+ _ZN10__cxxabiv129__pointer_to_member_type_infoD2Ev@CXXABI_1.3 4.1.1
+ _ZN10__gnu_norm15_List_node_base4hookEPS0_@GLIBCXX_3.4 4.1.1
+ _ZN10__gnu_norm15_List_node_base4swapERS0_S1_@GLIBCXX_3.4 4.1.1
+ _ZN10__gnu_norm15_List_node_base6unhookEv@GLIBCXX_3.4 4.1.1
+ _ZN10__gnu_norm15_List_node_base7reverseEv@GLIBCXX_3.4 4.1.1
+ _ZN10__gnu_norm15_List_node_base8transferEPS0_S1_@GLIBCXX_3.4 4.1.1
+ _ZN11__gnu_debug19_Safe_iterator_base12_M_get_mutexEv@GLIBCXX_3.4.9 4.2.1
+ _ZN11__gnu_debug19_Safe_iterator_base16_M_attach_singleEPNS_19_Safe_sequence_baseEb@GLIBCXX_3.4.9 4.2.1
+ _ZN11__gnu_debug19_Safe_iterator_base16_M_detach_singleEv@GLIBCXX_3.4.9 4.2.1
+ _ZN11__gnu_debug19_Safe_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@GLIBCXX_3.4 4.1.1
+ _ZN11__gnu_debug19_Safe_iterator_base9_M_detachEv@GLIBCXX_3.4 4.1.1
+ _ZN11__gnu_debug19_Safe_sequence_base12_M_get_mutexEv@GLIBCXX_3.4.9 4.2.1
+ _ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@GLIBCXX_3.4 4.1.1
+ _ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@GLIBCXX_3.4 4.1.1
+ _ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@GLIBCXX_3.4 4.1.1
+ _ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@GLIBCXX_3.4 4.1.1
+ _ZN14__gnu_parallel9_Settings3getEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN14__gnu_parallel9_Settings3setERS0_@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx17__pool_alloc_base12_M_get_mutexEv@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE4fileEv@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE4syncEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE4syncEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE5uflowEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE5uflowEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE8overflowEi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE9pbackfailEi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE9underflowEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEC1EP8_IO_FILE@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEC2EP8_IO_FILE@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE4fileEv@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE4syncEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE5uflowEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE8overflowEj@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE9pbackfailEj@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE9underflowEv@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEC1EP8_IO_FILE@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEC2EP8_IO_FILE@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx27__verbose_terminate_handlerEv@CXXABI_1.3 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE10_M_destroyEv@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE13_M_initializeEv@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE10_M_destroyEv@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE13_M_initializeEPFvPvE@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE13_M_initializeEv@GLIBCXX_3.4.6 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_get_thread_idEv@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE21_M_destroy_thread_keyEPv@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx9free_list8_M_clearEv@GLIBCXX_3.4.4 4.1.1
+ _ZNK10__cxxabiv117__class_type_info10__do_catchEPKSt9type_infoPPvj@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PKvRNS0_15__upcast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PPv@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__pbase_type_info10__do_catchEPKSt9type_infoPPvj@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__pbase_type_info15__pointer_catchEPKS0_PPvj@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv119__pointer_type_info14__is_pointer_pEv@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv119__pointer_type_info15__pointer_catchEPKNS_17__pbase_type_infoEPPvj@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__function_type_info15__is_function_pEv@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv129__pointer_to_member_type_info15__pointer_catchEPKNS_17__pbase_type_infoEPPvj@CXXABI_1.3 4.1.1
+ _ZNK11__gnu_debug16_Error_formatter10_M_messageENS_13_Debug_msg_idE@GLIBCXX_3.4 4.1.1
+ _ZNK11__gnu_debug16_Error_formatter10_Parameter14_M_print_fieldEPKS0_PKc@GLIBCXX_3.4 4.1.1
+ _ZNK11__gnu_debug16_Error_formatter10_Parameter20_M_print_descriptionEPKS0_@GLIBCXX_3.4 4.1.1
+ _ZNK11__gnu_debug16_Error_formatter13_M_print_wordEPKc@GLIBCXX_3.4 4.1.1
+ _ZNK11__gnu_debug16_Error_formatter15_M_print_stringEPKc@GLIBCXX_3.4 4.1.1
+ _ZNK11__gnu_debug16_Error_formatter17_M_get_max_lengthEv@GLIBCXX_3.4.10 4.3
+ _ZNK11__gnu_debug16_Error_formatter8_M_errorEv@GLIBCXX_3.4 4.1.1
+ _ZNK11__gnu_debug19_Safe_iterator_base11_M_singularEv@GLIBCXX_3.4 4.1.1
+ _ZNK11__gnu_debug19_Safe_iterator_base14_M_can_compareERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@GLIBCXX_3.4.5 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13get_allocatorEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE3endEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_leakedEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_sharedEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4dataEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4rendEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5beginEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5c_strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5emptyEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE6_M_repEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE6lengthEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE6rbeginEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7_M_dataEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7_M_iendEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8capacityEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8max_sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE9_M_ibeginEv@GLIBCXX_3.4 4.1.1
+ _ZNKSi6gcountEv@GLIBCXX_3.4 4.1.1
+ _ZNKSi6sentrycvbEv@GLIBCXX_3.4 4.1.1
+ _ZNKSo6sentrycvbEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs11_M_disjunctEPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs11_M_disjunctEPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSs13get_allocatorEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs3endEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs4_Rep12_M_is_leakedEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs4_Rep12_M_is_sharedEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs4dataEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs4rendEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs4sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs5beginEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs5c_strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs5emptyEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs6_M_repEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs6lengthEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs6rbeginEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs7_M_dataEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs7_M_iendEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareERKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSs8capacityEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs8max_sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNKSs9_M_ibeginEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10bad_typeid4whatEv@GLIBCXX_3.4.9 4.2.1
+ _ZNKSt10error_code23default_error_conditionEv@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt10istrstream5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10lock_error4whatEv@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt10moneypunctIcLb0EE10neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE10pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE11curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE11do_groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE11frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE13decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE13do_neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE13do_pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE13negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE13positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE13thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE14do_curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE14do_frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE16do_decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE16do_negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE16do_positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE16do_thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb0EE8groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE10neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE10pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE11curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE11do_groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE11frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE13decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE13do_neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE13do_pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE13negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE13positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE13thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE14do_curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE14do_frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE16do_decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE16do_negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE16do_positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE16do_thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIcLb1EE8groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE10neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE10pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE11curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE11do_groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE11frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE13decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE13do_neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE13do_pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE13negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE13positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE13thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE14do_curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE14do_frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE16do_decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE16do_negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE16do_positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE16do_thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb0EE8groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE10neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE10pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE11curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE11do_groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE11frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE13decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE13do_neg_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE13do_pos_formatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE13negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE13positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE13thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE14do_curr_symbolEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE14do_frac_digitsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE16do_decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE16do_negative_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE16do_positive_signEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE16do_thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10moneypunctIwLb1EE8groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10ostrstream5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt10ostrstream6pcountEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE15_M_am_pm_formatEPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE15_M_date_formatsEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE15_M_time_formatsEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE19_M_days_abbreviatedEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE20_M_date_time_formatsEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE21_M_months_abbreviatedEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE7_M_daysEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE8_M_am_pmEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE9_M_monthsEPPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE15_M_am_pm_formatEPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE15_M_date_formatsEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE15_M_time_formatsEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE19_M_days_abbreviatedEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE20_M_date_time_formatsEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE21_M_months_abbreviatedEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE7_M_daysEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE8_M_am_pmEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE9_M_monthsEPPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt11logic_error4whatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt12__basic_fileIcE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt12strstreambuf6pcountEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13bad_exception4whatEv@GLIBCXX_3.4.9 4.2.1
+ _ZNKSt13basic_filebufIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_filebufIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_fstreamIcSt11char_traitsIcEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4.5 4.1.1
+ _ZNKSt13basic_fstreamIwSt11char_traitsIwEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4.5 4.1.1
+ _ZNKSt13basic_istreamIwSt11char_traitsIwEE6gcountEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_istreamIwSt11char_traitsIwEE6sentrycvbEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13basic_ostreamIwSt11char_traitsIwEE6sentrycvbEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt13runtime_error4whatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ifstreamIcSt11char_traitsIcEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4.5 4.1.1
+ _ZNKSt14basic_ifstreamIwSt11char_traitsIwEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4.5 4.1.1
+ _ZNKSt14basic_ofstreamIcSt11char_traitsIcEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4.5 4.1.1
+ _ZNKSt14basic_ofstreamIwSt11char_traitsIwEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4.5 4.1.1
+ _ZNKSt14error_category10equivalentERKSt10error_codei@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt14error_category10equivalentEiRKSt15error_condition@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt14error_category23default_error_conditionEi@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt15basic_streambufIcSt11char_traitsIcEE4gptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIcSt11char_traitsIcEE4pptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIcSt11char_traitsIcEE5ebackEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIcSt11char_traitsIcEE5egptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIcSt11char_traitsIcEE5epptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIcSt11char_traitsIcEE5pbaseEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIcSt11char_traitsIcEE6getlocEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIwSt11char_traitsIwEE4gptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIwSt11char_traitsIwEE4pptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIwSt11char_traitsIwEE5ebackEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIwSt11char_traitsIwEE5egptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIwSt11char_traitsIwEE5epptrEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIwSt11char_traitsIwEE5pbaseEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_streambufIwSt11char_traitsIwEE6getlocEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt18basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt18basic_stringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_istringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_istringstreamIwSt11char_traitsIwESaIwEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_istringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt3tr14hashIRKSbIwSt11char_traitsIwESaIwEEEclES6_@GLIBCXX_3.4.10 4.3
+ _ZNKSt3tr14hashIRKSsEclES2_@GLIBCXX_3.4.10 4.3
+ _ZNKSt3tr14hashISbIwSt11char_traitsIwESaIwEEEclES4_@GLIBCXX_3.4.10 4.3
+ _ZNKSt3tr14hashISsEclESs@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIRKSbIwSt11char_traitsIwESaIwEEEclES5_@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIRKSsEclES1_@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashISbIwSt11char_traitsIwESaIwEEEclES3_@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashISsEclESs@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashISt10error_codeEclES0_@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt5ctypeIcE10do_tolowerEPcPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIcE10do_tolowerEc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIcE10do_toupperEPcPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIcE10do_toupperEc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIcE13_M_widen_initEv@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt5ctypeIcE14_M_narrow_initEv@GLIBCXX_3.4.11 4.4.0
+ _ZNKSt5ctypeIcE8do_widenEPKcS2_Pc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIcE8do_widenEc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIcE9do_narrowEPKcS2_cPc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIcE9do_narrowEcc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE10do_scan_isEtPKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE10do_tolowerEPwPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE10do_tolowerEw@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE10do_toupperEPwPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE10do_toupperEw@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE11do_scan_notEtPKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE19_M_convert_to_wmaskEt@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE5do_isEPKwS2_Pt@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE5do_isEtw@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE8do_widenEPKcS2_Pw@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE8do_widenEc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE9do_narrowEPKwS2_cPc@GLIBCXX_3.4 4.1.1
+ _ZNKSt5ctypeIwE9do_narrowEwc@GLIBCXX_3.4 4.1.1
+ _ZNKSt6locale2id5_M_idEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt6locale4nameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt6localeeqERKS_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE11do_encodingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE13do_max_lengthEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE16do_always_noconvEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE5do_inERS0_PKcS4_RS4_PcS6_RS6_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE6do_outERS0_PKcS4_RS4_PcS6_RS6_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE11do_encodingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE13do_max_lengthEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE16do_always_noconvEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE5do_inERS0_PKcS4_RS4_PwS6_RS6_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE6do_outERS0_PKwS4_RS4_PcS6_RS6_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE10_M_compareEPKcS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE10do_compareEPKcS2_S2_S2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE12do_transformEPKcS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE4hashEPKcS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE7compareEPKcS2_S2_S2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE7do_hashEPKcS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE9transformEPKcS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE10_M_compareEPKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE10do_compareEPKwS2_S2_S2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE12do_transformEPKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE4hashEPKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE7compareEPKwS2_S2_S2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE7do_hashEPKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE9transformEPKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16_M_extract_floatES3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16_M_extract_floatES3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES3_S3_RSt8ios_basecT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES3_S3_RSt8ios_basecT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES3_S3_RSt8ios_basecT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES3_S3_RSt8ios_basecT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES3_S3_RSt8ios_baseccT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIeEES3_S3_RSt8ios_baseccT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPKv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basece@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecy@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecPKv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basece@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecy@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES3_S3_RSt8ios_basewT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES3_S3_RSt8ios_basewT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES3_S3_RSt8ios_basewT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES3_S3_RSt8ios_basewT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES3_S3_RSt8ios_basewcT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIeEES3_S3_RSt8ios_basewcT_@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewPKv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewe@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewy@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewPKv@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewb@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewd@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewe@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewl@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewx@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewy@GLIBCXX_3.4 4.1.1
+ _ZNKSt8bad_cast4whatEv@GLIBCXX_3.4.9 4.2.1
+ _ZNKSt8ios_base7failure4whatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE18_M_convert_to_charERKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE20_M_convert_from_charEPc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE3getEiiiRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE4openERKSsRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE4openERKSsRKSt6localePKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE5closeEi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE6do_getEiiiRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE7do_openERKSsRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIcE8do_closeEi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE18_M_convert_to_charERKSbIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE20_M_convert_from_charEPc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE3getEiiiRKSbIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE4openERKSsRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE4openERKSsRKSt6localePKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE5closeEi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE6do_getEiiiRKSbIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE7do_openERKSsRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNKSt8messagesIwE8do_closeEi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE11do_groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE11do_truenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE12do_falsenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE13decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE13thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE16do_decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE16do_thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE8groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE8truenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIcE9falsenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE11do_groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE11do_truenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE12do_falsenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE13decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE13thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE16do_decimal_pointEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE16do_thousands_sepEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE8groupingEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE8truenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8numpunctIwE9falsenameEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10date_orderEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11do_get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11do_get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11do_get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE11get_weekdayES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE13do_date_orderEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE13get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14do_get_weekdayES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16do_get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10date_orderEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE11do_get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE11do_get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE11do_get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE11get_weekdayES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE13do_date_orderEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE13get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14do_get_weekdayES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16do_get_monthnameES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_yearES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPK2tmPKcSB_@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_RSt8ios_basecPK2tmcc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_RSt8ios_basecPK2tmcc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewPK2tmPKwSB_@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_RSt8ios_basewPK2tmcc@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewPK2tmcc@GLIBCXX_3.4 4.1.1
+ _ZNKSt9bad_alloc4whatEv@GLIBCXX_3.4.9 4.2.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE10exceptionsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE3badEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE3eofEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE3tieEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE4failEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE4fillEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE4goodEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE6narrowEcc@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEE7rdstateEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEEcvPvEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIcSt11char_traitsIcEEntEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE10exceptionsEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE3badEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE3eofEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE3tieEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE4failEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE4fillEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE4goodEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE5widenEc@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE6narrowEwc@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEE7rdstateEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEEcvPvEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9basic_iosIwSt11char_traitsIwEEntEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9exception4whatEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSbIwS2_SaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRSbIwS2_SaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_bRSt8ios_basecRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES3_bRSt8ios_basece@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_bRSt8ios_basecRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES3_bRSt8ios_basece@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES3_S3_RSt8ios_basecRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES3_S3_RSt8ios_basecRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_bRSt8ios_basewRKSbIwS2_SaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES3_bRSt8ios_basewe@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_bRSt8ios_basewRKSbIwS2_SaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_bRSt8ios_basewe@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES3_S3_RSt8ios_basewRKSbIwS2_SaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES3_S3_RSt8ios_basewRKSbIwS2_SaIwEE@GLIBCXX_3.4 4.1.1
+ _ZNKSt9strstream5rdbufEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9strstream6pcountEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9type_info10__do_catchEPKS_PPvj@GLIBCXX_3.4 4.1.1
+ _ZNKSt9type_info11__do_upcastEPKN10__cxxabiv117__class_type_infoEPPv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9type_info14__is_pointer_pEv@GLIBCXX_3.4 4.1.1
+ _ZNKSt9type_info15__is_function_pEv@GLIBCXX_3.4 4.1.1
+ _ZNSaIcEC1ERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSaIcEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSaIcEC2ERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSaIcEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSaIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSaIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSaIwEC1ERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSaIwEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSaIwEC2ERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSaIwEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSaIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSaIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIPKwS2_EES8_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIS3_S2_EES6_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwPKwS5_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwS3_S3_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE3endEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroyERKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_disposeERKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refcopyEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refdataEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep11_S_max_sizeE@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep11_S_terminalE@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep12_S_empty_repEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep13_M_set_leakedEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep15_M_set_sharableEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep7_M_grabERKS1_S5_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4nposE@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4rendEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4swapERS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5beginEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5clearEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EE@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendESt16initializer_listIwE@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignESt16initializer_listIwE@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EESt16initializer_listIwE@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6rbeginEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_dataEPw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_leakEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_NS4_IPKwS2_EES9_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwS8_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_RKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S5_S5_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S6_S6_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_St16initializer_listIwE@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EPKwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1IN9__gnu_cxx17__normal_iteratorIPwS2_EEEET_S8_RKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1IPKwEET_S6_RKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1IPwEET_S5_RKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EPKwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ESt16initializer_listIwERKS1_@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ESt16initializer_listIwERKS1_@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2IN9__gnu_cxx17__normal_iteratorIPwS2_EEEET_S8_RKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2IPKwEET_S6_RKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2IPwEET_S5_RKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEaSEPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEaSERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEaSESt16initializer_listIwE@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEEaSEw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEpLEPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEpLERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEpLESt16initializer_listIwE@GLIBCXX_3.4.11 4.4.0
+ _ZNSbIwSt11char_traitsIwESaIwEEpLEw@GLIBCXX_3.4 4.1.1
+ _ZNSdC1EPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSdC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSdC2EPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSdC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSdD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSi10_M_extractIPvEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIbEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIdEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIeEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIfEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIjEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIlEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractImEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractItEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIxEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi10_M_extractIyEERSiRT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSi3getERSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSi3getERSt15basic_streambufIcSt11char_traitsIcEEc@GLIBCXX_3.4 4.1.1
+ _ZNSi3getERc@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEv@GLIBCXX_3.4 4.1.1
+ _ZNSi4peekEv@GLIBCXX_3.4 4.1.1
+ _ZNSi4syncEv@GLIBCXX_3.4 4.1.1
+ _ZNSi5seekgESt4fposI11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZNSi5tellgEv@GLIBCXX_3.4 4.1.1
+ _ZNSi5ungetEv@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEv@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEv@GLIBCXX_3.4.5 4.1.1
+ _ZNSi6sentryC1ERSib@GLIBCXX_3.4 4.1.1
+ _ZNSi6sentryC2ERSib@GLIBCXX_3.4 4.1.1
+ _ZNSi7putbackEc@GLIBCXX_3.4 4.1.1
+ _ZNSiC1EPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSiC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSiC2EPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSiC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSiD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSiD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSiD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSirsEPFRSiS_E@GLIBCXX_3.4 4.1.1
+ _ZNSirsEPFRSt8ios_baseS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSirsEPFRSt9basic_iosIcSt11char_traitsIcEES3_E@GLIBCXX_3.4 4.1.1
+ _ZNSirsEPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSirsERPv@GLIBCXX_3.4 4.1.1
+ _ZNSirsERb@GLIBCXX_3.4 4.1.1
+ _ZNSirsERd@GLIBCXX_3.4 4.1.1
+ _ZNSirsERe@GLIBCXX_3.4 4.1.1
+ _ZNSirsERf@GLIBCXX_3.4 4.1.1
+ _ZNSirsERi@GLIBCXX_3.4 4.1.1
+ _ZNSirsERj@GLIBCXX_3.4 4.1.1
+ _ZNSirsERl@GLIBCXX_3.4 4.1.1
+ _ZNSirsERm@GLIBCXX_3.4 4.1.1
+ _ZNSirsERs@GLIBCXX_3.4 4.1.1
+ _ZNSirsERt@GLIBCXX_3.4 4.1.1
+ _ZNSirsERx@GLIBCXX_3.4 4.1.1
+ _ZNSirsERy@GLIBCXX_3.4 4.1.1
+ _ZNSo3putEc@GLIBCXX_3.4 4.1.1
+ _ZNSo5flushEv@GLIBCXX_3.4 4.1.1
+ _ZNSo5seekpESt4fposI11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZNSo5tellpEv@GLIBCXX_3.4 4.1.1
+ _ZNSo6sentryC1ERSo@GLIBCXX_3.4 4.1.1
+ _ZNSo6sentryC2ERSo@GLIBCXX_3.4 4.1.1
+ _ZNSo6sentryD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSo6sentryD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSo9_M_insertIPKvEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSo9_M_insertIbEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSo9_M_insertIdEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSo9_M_insertIeEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSo9_M_insertIlEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSo9_M_insertImEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSo9_M_insertIxEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSo9_M_insertIyEERSoT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSoC1EPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSoC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSoC2EPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSoC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSoD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSoD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSoD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSolsEPFRSoS_E@GLIBCXX_3.4 4.1.1
+ _ZNSolsEPFRSt8ios_baseS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSolsEPFRSt9basic_iosIcSt11char_traitsIcEES3_E@GLIBCXX_3.4 4.1.1
+ _ZNSolsEPKv@GLIBCXX_3.4 4.1.1
+ _ZNSolsEPSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZNSolsEb@GLIBCXX_3.4 4.1.1
+ _ZNSolsEd@GLIBCXX_3.4 4.1.1
+ _ZNSolsEe@GLIBCXX_3.4 4.1.1
+ _ZNSolsEf@GLIBCXX_3.4 4.1.1
+ _ZNSolsEi@GLIBCXX_3.4 4.1.1
+ _ZNSolsEj@GLIBCXX_3.4 4.1.1
+ _ZNSolsEl@GLIBCXX_3.4 4.1.1
+ _ZNSolsEm@GLIBCXX_3.4 4.1.1
+ _ZNSolsEs@GLIBCXX_3.4 4.1.1
+ _ZNSolsEt@GLIBCXX_3.4 4.1.1
+ _ZNSolsEx@GLIBCXX_3.4 4.1.1
+ _ZNSolsEy@GLIBCXX_3.4 4.1.1
+ _ZNSs12_Alloc_hiderC1EPcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs12_Alloc_hiderC2EPcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs12_M_leak_hardEv@GLIBCXX_3.4 4.1.1
+ _ZNSs12_S_empty_repEv@GLIBCXX_3.4 4.1.1
+ _ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4_@GLIBCXX_3.4 4.1.1
+ _ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2_@GLIBCXX_3.4 4.1.1
+ _ZNSs13_S_copy_charsEPcPKcS1_@GLIBCXX_3.4 4.1.1
+ _ZNSs13_S_copy_charsEPcS_S_@GLIBCXX_3.4 4.1.1
+ _ZNSs3endEv@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep10_M_destroyERKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep10_M_disposeERKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep10_M_refcopyEv@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep10_M_refdataEv@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep11_S_max_sizeE@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep11_S_terminalE@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep12_S_empty_repEv@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep13_M_set_leakedEv@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep15_M_set_sharableEv@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep20_S_empty_rep_storageE@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep7_M_grabERKSaIcES2_@GLIBCXX_3.4 4.1.1
+ _ZNSs4nposE@GLIBCXX_3.4 4.1.1
+ _ZNSs4rendEv@GLIBCXX_3.4 4.1.1
+ _ZNSs4swapERSs@GLIBCXX_3.4 4.1.1
+ _ZNSs5beginEv@GLIBCXX_3.4 4.1.1
+ _ZNSs5clearEv@GLIBCXX_3.4 4.1.1
+ _ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEE@GLIBCXX_3.4 4.1.1
+ _ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEES2_@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendESt16initializer_listIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSs6assignEPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignESt16initializer_listIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEESt16initializer_listIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEc@GLIBCXX_3.4 4.1.1
+ _ZNSs6rbeginEv@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_dataEPc@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_leakEv@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_NS0_IPKcSsEES5_@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcS4_@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_RKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S1_S1_@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S2_S2_@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_St16initializer_listIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSs9push_backEc@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EPKcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ESt16initializer_listIcERKSaIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSsC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSsC1IN9__gnu_cxx17__normal_iteratorIPcSsEEEET_S4_RKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1IPKcEET_S2_RKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1IPcEET_S1_RKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EPKcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ESt16initializer_listIcERKSaIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSsC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSsC2IN9__gnu_cxx17__normal_iteratorIPcSsEEEET_S4_RKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2IPKcEET_S2_RKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2IPcEET_S1_RKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSsD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSsaSEPKc@GLIBCXX_3.4 4.1.1
+ _ZNSsaSERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSsaSESt16initializer_listIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSsaSEc@GLIBCXX_3.4 4.1.1
+ _ZNSspLEPKc@GLIBCXX_3.4 4.1.1
+ _ZNSspLERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSspLESt16initializer_listIcE@GLIBCXX_3.4.11 4.4.0
+ _ZNSspLEc@GLIBCXX_3.4 4.1.1
+ _ZNSt10__num_base11_S_atoms_inE@GLIBCXX_3.4 4.1.1
+ _ZNSt10__num_base12_S_atoms_outE@GLIBCXX_3.4 4.1.1
+ _ZNSt10__num_base15_S_format_floatERKSt8ios_basePcc@GLIBCXX_3.4 4.1.1
+ _ZNSt10bad_typeidD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10bad_typeidD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10bad_typeidD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5alnumE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5alphaE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5cntrlE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5digitE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5graphE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5lowerE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5printE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5punctE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5spaceE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base5upperE@GLIBCXX_3.4 4.1.1
+ _ZNSt10ctype_base6xdigitE@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstream3strEv@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPc@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPc@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10money_base18_S_default_patternE@GLIBCXX_3.4 4.1.1
+ _ZNSt10money_base20_S_construct_patternEccc@GLIBCXX_3.4 4.1.1
+ _ZNSt10money_base8_S_atomsE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EE24_M_initialize_moneypunctEP15__locale_structPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EE24_M_initialize_moneypunctEP15__locale_structPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EE24_M_initialize_moneypunctEP15__locale_structPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EE24_M_initialize_moneypunctEP15__locale_structPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstream3strEv@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstream6freezeEb@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstreamC1EPciSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstreamC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstreamC2EPciSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstreamC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt10ostrstreamD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcE23_M_initialize_timepunctEP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwE23_M_initialize_timepunctEP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11char_traitsIcE2eqERKcS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt11char_traitsIcE2eqERKcS2_@GLIBCXX_3.4.5 4.1.1
+ _ZNSt11char_traitsIwE2eqERKwS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt11char_traitsIwE2eqERKwS2_@GLIBCXX_3.4.5 4.1.1
+ _ZNSt11logic_errorC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt11logic_errorC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt11logic_errorD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11logic_errorD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11logic_errorD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11range_errorC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt11range_errorC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt11range_errorD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt11range_errorD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE2fdEv@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE4fileEv@GLIBCXX_3.4.1 4.1.1
+ _ZNSt12__basic_fileIcE4openEPKcSt13_Ios_Openmodei@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE4syncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE8sys_openEP8_IO_FILESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE8sys_openEiSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE9showmanycEv@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12domain_errorC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt12domain_errorC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt12domain_errorD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12domain_errorD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12length_errorC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt12length_errorC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt12length_errorD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12length_errorD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12out_of_rangeC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt12out_of_rangeC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt12out_of_rangeD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12out_of_rangeD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf3strEv@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf6freezeEb@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf7_M_freeEPc@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8overflowEi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf9pbackfailEi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf9underflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt12system_errorD0Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt12system_errorD1Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt12system_errorD2Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt13bad_exceptionD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13bad_exceptionD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13bad_exceptionD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE15_M_create_pbackEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE16_M_destroy_pbackEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE19_M_terminate_outputEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE26_M_destroy_internal_bufferEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE27_M_allocate_internal_bufferEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE4syncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE5imbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE8overflowEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE9pbackfailEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE9showmanycEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE9underflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE15_M_create_pbackEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE16_M_destroy_pbackEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE19_M_terminate_outputEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE26_M_destroy_internal_bufferEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE27_M_allocate_internal_bufferEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE4syncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE5imbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE8overflowEj@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE9pbackfailEj@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE9showmanycEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE9underflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIcSt11char_traitsIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEEC1EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEEC2EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_fstreamIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIPvEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIbEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIdEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIeEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIfEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIjEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIlEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractImEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractItEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIxEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIyEERS2_RT_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getERSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getERSt15basic_streambufIwS1_Ew@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getERw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE4peekEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE4syncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5seekgESt4fposI11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5tellgEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5ungetEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv@GLIBCXX_3.4.5 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6sentryC1ERS2_b@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6sentryC2ERS2_b@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7putbackEw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEEC1EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEEC2EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsEPFRS2_S3_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsEPFRSt8ios_baseS4_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsEPFRSt9basic_iosIwS1_ES5_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsEPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERPv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERb@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERd@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERe@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERf@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERj@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERm@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERs@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERt@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERx@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERy@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE3putEw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5flushEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpESt4fposI11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5tellpEv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentryC1ERS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentryC2ERS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentryD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentryD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIPKvEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIbEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIdEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIeEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIlEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertImEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIxEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIyEERS2_T_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEEC1EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEEC2EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRS2_S3_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRSt8ios_baseS4_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRSt9basic_iosIwS1_ES5_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPKv@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEb@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEd@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEe@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEf@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEj@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEm@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEs@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEt@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEx@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEy@GLIBCXX_3.4 4.1.1
+ _ZNSt13runtime_errorC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt13runtime_errorC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt13runtime_errorD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13runtime_errorD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt13runtime_errorD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIcSt11char_traitsIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEEC1EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEEC2EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ifstreamIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_iostreamIwSt11char_traitsIwEEC1EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_iostreamIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_iostreamIwSt11char_traitsIwEEC2EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_iostreamIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_iostreamIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEEC2EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIcSt11char_traitsIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEE4openEPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEE4openERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEE5closeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEEC1EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEEC2EPKcSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4.13 4.4.1-4
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14basic_ofstreamIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIDiE10has_denormE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE10is_boundedE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE10is_integerE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE11round_styleE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE12has_infinityE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE12max_exponentE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE12min_exponentE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE13has_quiet_NaNE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE14is_specializedE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE14max_exponent10E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE14min_exponent10E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE15has_denorm_lossE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE15tinyness_beforeE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE17has_signaling_NaNE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE5radixE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE5trapsE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE6digitsE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE8digits10E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE8is_exactE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE9is_iec559E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE9is_moduloE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDiE9is_signedE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE10has_denormE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE10is_boundedE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE10is_integerE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE11round_styleE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE12has_infinityE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE12max_exponentE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE12min_exponentE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE13has_quiet_NaNE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE14is_specializedE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE14max_exponent10E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE14min_exponent10E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE15has_denorm_lossE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE15tinyness_beforeE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE17has_signaling_NaNE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE5radixE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE5trapsE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE6digitsE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE8digits10E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE8is_exactE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE9is_iec559E@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE9is_moduloE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIDsE9is_signedE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt14numeric_limitsIaE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIaE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIbE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIcE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIdE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIeE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIfE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIhE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIiE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIjE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIlE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsImE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIsE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsItE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIwE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIxE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt14numeric_limitsIyE9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt14overflow_errorC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt14overflow_errorC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt14overflow_errorD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt14overflow_errorD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15_List_node_base4hookEPS_@GLIBCXX_3.4 4.1.1
+ _ZNSt15_List_node_base4swapERS_S0_@GLIBCXX_3.4 4.1.1
+ _ZNSt15_List_node_base6unhookEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15_List_node_base7reverseEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15_List_node_base8transferEPS_S0_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5gbumpEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5imbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5pbumpEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sputcEc@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5uflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6sbumpcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6snextcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6stosscEv@GLIBCXX_3.4.10 4.3
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7pubsyncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7sungetcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE8in_availEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE8overflowEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE8pubimbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9pbackfailEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9showmanycEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9sputbackcEc@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9underflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEEC1ERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEEC2ERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5gbumpEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5imbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5pbumpEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sgetcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sputcEw@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5uflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6sbumpcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6snextcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6stosscEv@GLIBCXX_3.4.10 4.3
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7pubsyncEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7sungetcEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE8in_availEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE8overflowEj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE8pubimbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9pbackfailEj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9showmanycEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9sputbackcEw@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9underflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEEC1ERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEEC2ERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEEaSERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE15_M_update_egptrEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE17_M_stringbuf_initESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@GLIBCXX_3.4.6 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9underflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE15_M_update_egptrEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE17_M_stringbuf_initESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strERKSbIwS1_S2_E@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@GLIBCXX_3.4.6 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9underflowEv@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15underflow_errorC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt15underflow_errorC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt15underflow_errorD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt15underflow_errorD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcE8_M_cacheERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwE8_M_cacheERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16invalid_argumentC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt16invalid_argumentC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt16invalid_argumentD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt16invalid_argumentD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcE12_S_timezonesE@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwE12_S_timezonesE@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EE4intlE@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EE8_M_cacheERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EE8_M_cacheERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EE8_M_cacheERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EE8_M_cacheERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEE3strERKSbIwS1_S2_E@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt18condition_variable10notify_allEv@GLIBCXX_3.4.11 4.4.0
+ _ZNSt18condition_variable10notify_oneEv@GLIBCXX_3.4.11 4.4.0
+ _ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt18condition_variableC1Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt18condition_variableC2Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt18condition_variableD1Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt18condition_variableD2Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEE3strERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEE3strERKSbIwS1_S2_E@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE3strERKSbIwS1_S2_E@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv@GLIBCXX_3.4 4.1.1
+ _ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv@GLIBCXX_3.4.5 4.1.1
+ _ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv@GLIBCXX_3.4 4.1.1
+ _ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv@GLIBCXX_3.4.5 4.1.1
+ _ZNSt21__numeric_limits_base10has_denormE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base10is_boundedE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base10is_integerE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base11round_styleE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base12has_infinityE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base12max_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base12min_exponentE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base13has_quiet_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base14is_specializedE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base14max_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base14min_exponent10E@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base15has_denorm_lossE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base15tinyness_beforeE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base17has_signaling_NaNE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base5radixE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base5trapsE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base6digitsE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base8digits10E@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base8is_exactE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base9is_iec559E@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base9is_moduloE@GLIBCXX_3.4 4.1.1
+ _ZNSt21__numeric_limits_base9is_signedE@GLIBCXX_3.4 4.1.1
+ _ZNSt22condition_variable_anyC1Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt22condition_variable_anyC2Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt22condition_variable_anyD1Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt22condition_variable_anyD2Ev@GLIBCXX_3.4.11 4.4.0
+ _ZNSt3tr18__detail12__prime_listE@GLIBCXX_3.4.10 4.3
+ _ZNSt5ctypeIcE10table_sizeE@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcE13classic_tableEv@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwE19_M_initialize_ctypeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6__norm15_List_node_base4hookEPS0_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt6__norm15_List_node_base4swapERS0_S1_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt6__norm15_List_node_base6unhookEv@GLIBCXX_3.4.9 4.2.1
+ _ZNSt6__norm15_List_node_base7reverseEv@GLIBCXX_3.4.9 4.2.1
+ _ZNSt6__norm15_List_node_base8transferEPS0_S1_@GLIBCXX_3.4.9 4.2.1
+ _ZNSt6chrono12system_clock12is_monotonicE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt6chrono12system_clock3nowEv@GLIBCXX_3.4.11 4.4.0
+ _ZNSt6locale11_M_coalesceERKS_S1_i@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale21_S_normalize_categoryEi@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale3allE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale4noneE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale4timeE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl16_M_install_facetEPKNS_2idEPKNS_5facetE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl16_M_replace_facetEPKS0_PKNS_2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl19_M_replace_categoryEPKS0_PKPKNS_2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl21_M_replace_categoriesEPKS0_i@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5ctypeE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5facet13_S_get_c_nameEv@GLIBCXX_3.4.6 4.1.1
+ _ZNSt6locale5facet15_S_get_c_localeEv@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5facet17_S_clone_c_localeERP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5facet18_S_create_c_localeERP15__locale_structPKcS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5facet19_S_destroy_c_localeERP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5facetD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5facetD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5facetD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale6globalERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale7classicEv@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale7collateE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale7numericE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale8messagesE@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale8monetaryE@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC1EPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC1EPNS_5_ImplE@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC1ERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC1ERKS_PKci@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC1ERKS_S1_i@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC2EPKc@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC2EPNS_5_ImplE@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC2ERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC2ERKS_PKci@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC2ERKS_S1_i@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt6localeaSERKS_@GLIBCXX_3.4 4.1.1
+ _ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@GLIBCXX_3.4.11 4.4.0
+ _ZNSt6thread4joinEv@GLIBCXX_3.4.11 4.4.0
+ _ZNSt6thread6detachEv@GLIBCXX_3.4.11 4.4.0
+ _ZNSt7codecvtIcc11__mbstate_tE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8__detail12__prime_listE@GLIBCXX_3.4.10 4.3
+ _ZNSt8bad_castD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8bad_castD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8bad_castD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base10floatfieldE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base10scientificE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base11adjustfieldE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base13_M_grow_wordsEib@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base15sync_with_stdioEb@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base17_M_call_callbacksENS_5eventE@GLIBCXX_3.4.6 4.1.1
+ _ZNSt8ios_base17register_callbackEPFvNS_5eventERS_iEi@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base20_M_dispose_callbacksEv@GLIBCXX_3.4.6 4.1.1
+ _ZNSt8ios_base2inE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3appE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3ateE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3begE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3curE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3decE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3endE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3hexE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3octE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base3outE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base4InitC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base4InitC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base4InitD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base4InitD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base4leftE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base5fixedE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base5imbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base5rightE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base5truncE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base6badbitE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base6binaryE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base6eofbitE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base6skipwsE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base6xallocEv@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7_M_initEv@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7failbitE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7failureC1ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7failureC2ERKSs@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7failureD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7failureD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7failureD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7goodbitE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7showposE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base7unitbufE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base8internalE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base8showbaseE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base9basefieldE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base9boolalphaE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base9showpointE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_base9uppercaseE@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_baseC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_baseC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_baseD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_baseD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8ios_baseD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcE22_M_initialize_numpunctEP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwE22_M_initialize_numpunctEP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9__cxx199815_List_node_base4hookEPS0_@GLIBCXX_3.4.10 4.3
+ _ZNSt9__cxx199815_List_node_base4swapERS0_S1_@GLIBCXX_3.4.10 4.3
+ _ZNSt9__cxx199815_List_node_base6unhookEv@GLIBCXX_3.4.10 4.3
+ _ZNSt9__cxx199815_List_node_base7reverseEv@GLIBCXX_3.4.10 4.3
+ _ZNSt9__cxx199815_List_node_base8transferEPS0_S1_@GLIBCXX_3.4.10 4.3
+ _ZNSt9bad_allocD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9bad_allocD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9bad_allocD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE10exceptionsESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE11_M_setstateESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE15_M_cache_localeERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE3tieEPSo@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE4fillEc@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE5imbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE5rdbufEPSt15basic_streambufIcS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE7copyfmtERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEEC1EPSt15basic_streambufIcS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEEC2EPSt15basic_streambufIcS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIcSt11char_traitsIcEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE10exceptionsESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE11_M_setstateESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE15_M_cache_localeERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE3tieEPSt13basic_ostreamIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE4fillEw@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE4initEPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE5clearESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE5imbueERKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE5rdbufEPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE7copyfmtERKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEE8setstateESt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEEC1EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEEC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEEC2EPSt15basic_streambufIwS1_E@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEEC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9basic_iosIwSt11char_traitsIwEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9exceptionD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9exceptionD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9exceptionD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstream3strEv@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstream6freezeEb@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstreamC1EPciSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstreamC1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstreamC2EPciSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstreamC2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9strstreamD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9type_infoD0Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9type_infoD1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt9type_infoD2Ev@GLIBCXX_3.4 4.1.1
+ _ZNVSt9__atomic011atomic_flag12test_and_setESt12memory_order@GLIBCXX_3.4.11 4.4.0
+ _ZNVSt9__atomic011atomic_flag5clearESt12memory_order@GLIBCXX_3.4.11 4.4.0
+ _ZSt10adopt_lock@GLIBCXX_3.4.11 4.4.0
+ _ZSt10defer_lock@GLIBCXX_3.4.11 4.4.0
+ _ZSt10unexpectedv@GLIBCXX_3.4 4.1.1
+ _ZSt11__once_call@GLIBCXX_3.4.11 4.4.0
+ _ZSt11try_to_lock@GLIBCXX_3.4.11 4.4.0
+ _ZSt13set_terminatePFvvE@GLIBCXX_3.4 4.1.1
+ _ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@GLIBCXX_3.4 4.1.1
+ _ZSt14set_unexpectedPFvvE@GLIBCXX_3.4 4.1.1
+ _ZSt15__once_callable@GLIBCXX_3.4.11 4.4.0
+ _ZSt15set_new_handlerPFvvE@GLIBCXX_3.4 4.1.1
+ _ZSt15system_categoryv@GLIBCXX_3.4.11 4.4.0
+ _ZSt16__throw_bad_castv@GLIBCXX_3.4 4.1.1
+ _ZSt16generic_categoryv@GLIBCXX_3.4.11 4.4.0
+ _ZSt17__throw_bad_allocv@GLIBCXX_3.4 4.1.1
+ _ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_base@GLIBCXX_3.4 4.1.1
+ _ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base@GLIBCXX_3.4 4.1.1
+ _ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base@GLIBCXX_3.4 4.1.1
+ _ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base@GLIBCXX_3.4 4.1.1
+ _ZSt18__throw_bad_typeidv@GLIBCXX_3.4 4.1.1
+ _ZSt18uncaught_exceptionv@GLIBCXX_3.4 4.1.1
+ _ZSt19__throw_ios_failurePKc@GLIBCXX_3.4 4.1.1
+ _ZSt19__throw_logic_errorPKc@GLIBCXX_3.4 4.1.1
+ _ZSt19__throw_range_errorPKc@GLIBCXX_3.4 4.1.1
+ _ZSt20_Rb_tree_black_countPKSt18_Rb_tree_node_baseS1_@GLIBCXX_3.4 4.1.1
+ _ZSt20_Rb_tree_rotate_leftPSt18_Rb_tree_node_baseRS0_@GLIBCXX_3.4 4.1.1
+ _ZSt20__throw_domain_errorPKc@GLIBCXX_3.4 4.1.1
+ _ZSt20__throw_length_errorPKc@GLIBCXX_3.4 4.1.1
+ _ZSt20__throw_out_of_rangePKc@GLIBCXX_3.4 4.1.1
+ _ZSt20__throw_system_errori@GLIBCXX_3.4.11 4.4.0
+ _ZSt21_Rb_tree_rotate_rightPSt18_Rb_tree_node_baseRS0_@GLIBCXX_3.4 4.1.1
+ _ZSt21__throw_bad_exceptionv@GLIBCXX_3.4 4.1.1
+ _ZSt21__throw_runtime_errorPKc@GLIBCXX_3.4 4.1.1
+ _ZSt22__throw_overflow_errorPKc@GLIBCXX_3.4 4.1.1
+ _ZSt23__throw_underflow_errorPKc@GLIBCXX_3.4 4.1.1
+ _ZSt24__throw_invalid_argumentPKc@GLIBCXX_3.4 4.1.1
+ _ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_@GLIBCXX_3.4 4.1.1
+ _ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_@GLIBCXX_3.4 4.1.1
+ _ZSt2wsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt2wsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt3cin@GLIBCXX_3.4 4.1.1
+ _ZSt4cerr@GLIBCXX_3.4 4.1.1
+ _ZSt4clog@GLIBCXX_3.4 4.1.1
+ _ZSt4cout@GLIBCXX_3.4 4.1.1
+ _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt4endlIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt4endsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt4endsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt4wcin@GLIBCXX_3.4 4.1.1
+ _ZSt5flushIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt5flushIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_@GLIBCXX_3.4 4.1.1
+ _ZSt5wcerr@GLIBCXX_3.4 4.1.1
+ _ZSt5wclog@GLIBCXX_3.4 4.1.1
+ _ZSt5wcout@GLIBCXX_3.4 4.1.1
+ _ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@GLIBCXX_3.4 4.1.1
+ _ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_ES4_@GLIBCXX_3.4 4.1.1
+ _ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@GLIBCXX_3.4 4.1.1
+ _ZSt7getlineIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_ES4_@GLIBCXX_3.4 4.1.1
+ _ZSt7nothrow@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt10moneypunctIcLb0EEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt10moneypunctIwLb0EEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt11__timepunctIcEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt11__timepunctIwEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt5ctypeIcEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt5ctypeIwEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7codecvtIcc11__mbstate_tEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7codecvtIwc11__mbstate_tEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7collateIcEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7collateIwEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8messagesIcEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8messagesIwEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8numpunctIcEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8numpunctIwEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9has_facetISt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEbRKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9terminatev@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt10moneypunctIcLb0EEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt10moneypunctIcLb1EEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt10moneypunctIwLb0EEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt10moneypunctIwLb1EEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt11__timepunctIcEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt11__timepunctIwEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt5ctypeIcEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt5ctypeIwEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7codecvtIcc11__mbstate_tEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7codecvtIwc11__mbstate_tEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7collateIcEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7collateIwEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8messagesIcEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8messagesIwEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8numpunctIcEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8numpunctIwEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZSt9use_facetISt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEERKT_RKSt6locale@GLIBCXX_3.4 4.1.1
+ _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKa@GLIBCXX_3.4 4.1.1
+ _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@GLIBCXX_3.4 4.1.1
+ _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKh@GLIBCXX_3.4 4.1.1
+ _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_a@GLIBCXX_3.4 4.1.1
+ _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c@GLIBCXX_3.4 4.1.1
+ _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_h@GLIBCXX_3.4 4.1.1
+ _ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St12_Setiosflags@GLIBCXX_3.4 4.1.1
+ _ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St13_Setprecision@GLIBCXX_3.4 4.1.1
+ _ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St14_Resetiosflags@GLIBCXX_3.4 4.1.1
+ _ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St5_Setw@GLIBCXX_3.4 4.1.1
+ _ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St8_Setbase@GLIBCXX_3.4 4.1.1
+ _ZStlsIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_St8_SetfillIS3_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKSbIS4_S5_T1_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIdcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIdwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIecSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIewSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIfcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIfwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKS3_@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKc@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_S3_@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St12_Setiosflags@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St13_Setprecision@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St14_Resetiosflags@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St5_Setw@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St8_Setbase@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_St8_SetfillIS3_E@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_c@GLIBCXX_3.4 4.1.1
+ _ZStlsIwSt11char_traitsIwESaIwEERSt13basic_ostreamIT_T0_ES7_RKSbIS4_S5_T1_E@GLIBCXX_3.4 4.1.1
+ _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_@GLIBCXX_3.4 4.1.1
+ _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_@GLIBCXX_3.4 4.1.1
+ _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ES3_RKS6_@GLIBCXX_3.4 4.1.1
+ _ZStplIwSt11char_traitsIwESaIwEESbIT_T0_T1_EPKS3_RKS6_@GLIBCXX_3.4 4.1.1
+ _ZStplIwSt11char_traitsIwESaIwEESbIT_T0_T1_ERKS6_S8_@GLIBCXX_3.4 4.1.1
+ _ZStplIwSt11char_traitsIwESaIwEESbIT_T0_T1_ES3_RKS6_@GLIBCXX_3.4 4.1.1
+ _ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Pa@GLIBCXX_3.4 4.1.1
+ _ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Ph@GLIBCXX_3.4 4.1.1
+ _ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Ra@GLIBCXX_3.4 4.1.1
+ _ZStrsISt11char_traitsIcEERSt13basic_istreamIcT_ES5_Rh@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_PS3_@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_RS3_@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St12_Setiosflags@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St13_Setprecision@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St14_Resetiosflags@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St5_Setw@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St8_Setbase@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_St8_SetfillIS3_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIdcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIdwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIecSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIewSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIfcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIfwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_PS3_@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_RS3_@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St12_Setiosflags@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St13_Setprecision@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St14_Resetiosflags@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St5_Setw@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St8_Setbase@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwEERSt13basic_istreamIT_T0_ES6_St8_SetfillIS3_E@GLIBCXX_3.4 4.1.1
+ _ZStrsIwSt11char_traitsIwESaIwEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E@GLIBCXX_3.4 4.1.1
+ _ZTIDi@CXXABI_1.3.3 4.4.0
+ _ZTIDs@CXXABI_1.3.3 4.4.0
+ _ZTIN10__cxxabiv115__forced_unwindE@CXXABI_1.3.2 4.3
+ _ZTIN10__cxxabiv116__enum_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv117__array_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv117__class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv117__pbase_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv119__foreign_exceptionE@CXXABI_1.3.2 4.3
+ _ZTIN10__cxxabiv119__pointer_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv120__function_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv120__si_class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv121__vmi_class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv123__fundamental_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN10__cxxabiv129__pointer_to_member_type_infoE@CXXABI_1.3 4.1.1
+ _ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTINSt6locale5facetE@GLIBCXX_3.4 4.1.1
+ _ZTINSt8ios_base7failureE@GLIBCXX_3.4 4.1.1
+ _ZTIPDi@CXXABI_1.3.3 4.4.0
+ _ZTIPDs@CXXABI_1.3.3 4.4.0
+ _ZTIPKDi@CXXABI_1.3.3 4.4.0
+ _ZTIPKDs@CXXABI_1.3.3 4.4.0
+ _ZTIPKa@CXXABI_1.3 4.1.1
+ _ZTIPKb@CXXABI_1.3 4.1.1
+ _ZTIPKc@CXXABI_1.3 4.1.1
+ _ZTIPKd@CXXABI_1.3 4.1.1
+ _ZTIPKe@CXXABI_1.3 4.1.1
+ _ZTIPKf@CXXABI_1.3 4.1.1
+ _ZTIPKh@CXXABI_1.3 4.1.1
+ _ZTIPKi@CXXABI_1.3 4.1.1
+ _ZTIPKj@CXXABI_1.3 4.1.1
+ _ZTIPKl@CXXABI_1.3 4.1.1
+ _ZTIPKm@CXXABI_1.3 4.1.1
+ _ZTIPKs@CXXABI_1.3 4.1.1
+ _ZTIPKt@CXXABI_1.3 4.1.1
+ _ZTIPKv@CXXABI_1.3 4.1.1
+ _ZTIPKw@CXXABI_1.3 4.1.1
+ _ZTIPKx@CXXABI_1.3 4.1.1
+ _ZTIPKy@CXXABI_1.3 4.1.1
+ _ZTIPa@CXXABI_1.3 4.1.1
+ _ZTIPb@CXXABI_1.3 4.1.1
+ _ZTIPc@CXXABI_1.3 4.1.1
+ _ZTIPd@CXXABI_1.3 4.1.1
+ _ZTIPe@CXXABI_1.3 4.1.1
+ _ZTIPf@CXXABI_1.3 4.1.1
+ _ZTIPh@CXXABI_1.3 4.1.1
+ _ZTIPi@CXXABI_1.3 4.1.1
+ _ZTIPj@CXXABI_1.3 4.1.1
+ _ZTIPl@CXXABI_1.3 4.1.1
+ _ZTIPm@CXXABI_1.3 4.1.1
+ _ZTIPs@CXXABI_1.3 4.1.1
+ _ZTIPt@CXXABI_1.3 4.1.1
+ _ZTIPv@CXXABI_1.3 4.1.1
+ _ZTIPw@CXXABI_1.3 4.1.1
+ _ZTIPx@CXXABI_1.3 4.1.1
+ _ZTIPy@CXXABI_1.3 4.1.1
+ _ZTISd@GLIBCXX_3.4 4.1.1
+ _ZTISi@GLIBCXX_3.4 4.1.1
+ _ZTISo@GLIBCXX_3.4 4.1.1
+ _ZTISt10bad_typeid@GLIBCXX_3.4 4.1.1
+ _ZTISt10ctype_base@GLIBCXX_3.4 4.1.1
+ _ZTISt10istrstream@GLIBCXX_3.4 4.1.1
+ _ZTISt10lock_error@GLIBCXX_3.4.11 4.4.0
+ _ZTISt10money_base@GLIBCXX_3.4 4.1.1
+ _ZTISt10moneypunctIcLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTISt10moneypunctIcLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTISt10moneypunctIwLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTISt10moneypunctIwLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTISt10ostrstream@GLIBCXX_3.4 4.1.1
+ _ZTISt11__timepunctIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt11__timepunctIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt11logic_error@GLIBCXX_3.4 4.1.1
+ _ZTISt11range_error@GLIBCXX_3.4 4.1.1
+ _ZTISt12codecvt_base@GLIBCXX_3.4 4.1.1
+ _ZTISt12ctype_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt12ctype_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt12domain_error@GLIBCXX_3.4 4.1.1
+ _ZTISt12length_error@GLIBCXX_3.4 4.1.1
+ _ZTISt12out_of_range@GLIBCXX_3.4 4.1.1
+ _ZTISt12strstreambuf@GLIBCXX_3.4 4.1.1
+ _ZTISt12system_error@GLIBCXX_3.4.11 4.4.0
+ _ZTISt13bad_exception@GLIBCXX_3.4 4.1.1
+ _ZTISt13basic_filebufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt13basic_filebufIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt13basic_fstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt13basic_fstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt13basic_istreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt13basic_ostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt13messages_base@GLIBCXX_3.4 4.1.1
+ _ZTISt13runtime_error@GLIBCXX_3.4 4.1.1
+ _ZTISt14basic_ifstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt14basic_ifstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt14basic_iostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt14basic_ofstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt14basic_ofstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt14codecvt_bynameIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTISt14codecvt_bynameIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTISt14collate_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt14collate_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt14error_category@GLIBCXX_3.4.11 4.4.0
+ _ZTISt14overflow_error@GLIBCXX_3.4 4.1.1
+ _ZTISt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15basic_streambufIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15basic_stringbufIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15basic_stringbufIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15messages_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt15messages_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt15numpunct_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt15numpunct_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt15underflow_error@GLIBCXX_3.4 4.1.1
+ _ZTISt16invalid_argument@GLIBCXX_3.4 4.1.1
+ _ZTISt17moneypunct_bynameIcLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTISt17moneypunct_bynameIcLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTISt17moneypunct_bynameIwLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTISt17moneypunct_bynameIwLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTISt18basic_stringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt18basic_stringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt19basic_istringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt19basic_istringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt21__ctype_abstract_baseIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt21__ctype_abstract_baseIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt23__codecvt_abstract_baseIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTISt23__codecvt_abstract_baseIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTISt5ctypeIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt5ctypeIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt7codecvtIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTISt7codecvtIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTISt7collateIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt7collateIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt8bad_cast@GLIBCXX_3.4 4.1.1
+ _ZTISt8ios_base@GLIBCXX_3.4 4.1.1
+ _ZTISt8messagesIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt8messagesIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt8numpunctIcE@GLIBCXX_3.4 4.1.1
+ _ZTISt8numpunctIwE@GLIBCXX_3.4 4.1.1
+ _ZTISt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt9bad_alloc@GLIBCXX_3.4 4.1.1
+ _ZTISt9basic_iosIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTISt9basic_iosIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTISt9exception@GLIBCXX_3.4 4.1.1
+ _ZTISt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTISt9strstream@GLIBCXX_3.4 4.1.1
+ _ZTISt9time_base@GLIBCXX_3.4 4.1.1
+ _ZTISt9type_info@GLIBCXX_3.4 4.1.1
+ _ZTIa@CXXABI_1.3 4.1.1
+ _ZTIb@CXXABI_1.3 4.1.1
+ _ZTIc@CXXABI_1.3 4.1.1
+ _ZTId@CXXABI_1.3 4.1.1
+ _ZTIe@CXXABI_1.3 4.1.1
+ _ZTIf@CXXABI_1.3 4.1.1
+ _ZTIh@CXXABI_1.3 4.1.1
+ _ZTIi@CXXABI_1.3 4.1.1
+ _ZTIj@CXXABI_1.3 4.1.1
+ _ZTIl@CXXABI_1.3 4.1.1
+ _ZTIm@CXXABI_1.3 4.1.1
+ _ZTIs@CXXABI_1.3 4.1.1
+ _ZTIt@CXXABI_1.3 4.1.1
+ _ZTIv@CXXABI_1.3 4.1.1
+ _ZTIw@CXXABI_1.3 4.1.1
+ _ZTIx@CXXABI_1.3 4.1.1
+ _ZTIy@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv116__enum_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv117__array_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv117__class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv117__pbase_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv119__pointer_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv120__function_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv120__si_class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv121__vmi_class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv123__fundamental_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN10__cxxabiv129__pointer_to_member_type_infoE@CXXABI_1.3 4.1.1
+ _ZTSN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSNSt6locale5facetE@GLIBCXX_3.4 4.1.1
+ _ZTSNSt8ios_base7failureE@GLIBCXX_3.4 4.1.1
+ _ZTSPKa@CXXABI_1.3 4.1.1
+ _ZTSPKb@CXXABI_1.3 4.1.1
+ _ZTSPKc@CXXABI_1.3 4.1.1
+ _ZTSPKd@CXXABI_1.3 4.1.1
+ _ZTSPKe@CXXABI_1.3 4.1.1
+ _ZTSPKf@CXXABI_1.3 4.1.1
+ _ZTSPKh@CXXABI_1.3 4.1.1
+ _ZTSPKi@CXXABI_1.3 4.1.1
+ _ZTSPKj@CXXABI_1.3 4.1.1
+ _ZTSPKl@CXXABI_1.3 4.1.1
+ _ZTSPKm@CXXABI_1.3 4.1.1
+ _ZTSPKs@CXXABI_1.3 4.1.1
+ _ZTSPKt@CXXABI_1.3 4.1.1
+ _ZTSPKv@CXXABI_1.3 4.1.1
+ _ZTSPKw@CXXABI_1.3 4.1.1
+ _ZTSPKx@CXXABI_1.3 4.1.1
+ _ZTSPKy@CXXABI_1.3 4.1.1
+ _ZTSPa@CXXABI_1.3 4.1.1
+ _ZTSPb@CXXABI_1.3 4.1.1
+ _ZTSPc@CXXABI_1.3 4.1.1
+ _ZTSPd@CXXABI_1.3 4.1.1
+ _ZTSPe@CXXABI_1.3 4.1.1
+ _ZTSPf@CXXABI_1.3 4.1.1
+ _ZTSPh@CXXABI_1.3 4.1.1
+ _ZTSPi@CXXABI_1.3 4.1.1
+ _ZTSPj@CXXABI_1.3 4.1.1
+ _ZTSPl@CXXABI_1.3 4.1.1
+ _ZTSPm@CXXABI_1.3 4.1.1
+ _ZTSPs@CXXABI_1.3 4.1.1
+ _ZTSPt@CXXABI_1.3 4.1.1
+ _ZTSPv@CXXABI_1.3 4.1.1
+ _ZTSPw@CXXABI_1.3 4.1.1
+ _ZTSPx@CXXABI_1.3 4.1.1
+ _ZTSPy@CXXABI_1.3 4.1.1
+ _ZTSSd@GLIBCXX_3.4 4.1.1
+ _ZTSSi@GLIBCXX_3.4 4.1.1
+ _ZTSSo@GLIBCXX_3.4 4.1.1
+ _ZTSSt10bad_typeid@GLIBCXX_3.4 4.1.1
+ _ZTSSt10ctype_base@GLIBCXX_3.4 4.1.1
+ _ZTSSt10istrstream@GLIBCXX_3.4 4.1.1
+ _ZTSSt10lock_error@GLIBCXX_3.4.11 4.4.0
+ _ZTSSt10money_base@GLIBCXX_3.4 4.1.1
+ _ZTSSt10moneypunctIcLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt10moneypunctIcLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt10moneypunctIwLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt10moneypunctIwLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt10ostrstream@GLIBCXX_3.4 4.1.1
+ _ZTSSt11__timepunctIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt11__timepunctIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt11logic_error@GLIBCXX_3.4 4.1.1
+ _ZTSSt11range_error@GLIBCXX_3.4 4.1.1
+ _ZTSSt12codecvt_base@GLIBCXX_3.4 4.1.1
+ _ZTSSt12ctype_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt12ctype_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt12domain_error@GLIBCXX_3.4 4.1.1
+ _ZTSSt12length_error@GLIBCXX_3.4 4.1.1
+ _ZTSSt12out_of_range@GLIBCXX_3.4 4.1.1
+ _ZTSSt12strstreambuf@GLIBCXX_3.4 4.1.1
+ _ZTSSt12system_error@GLIBCXX_3.4.11 4.4.0
+ _ZTSSt13bad_exception@GLIBCXX_3.4 4.1.1
+ _ZTSSt13basic_filebufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt13basic_filebufIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt13basic_fstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt13basic_fstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt13basic_istreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt13basic_ostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt13messages_base@GLIBCXX_3.4 4.1.1
+ _ZTSSt13runtime_error@GLIBCXX_3.4 4.1.1
+ _ZTSSt14basic_ifstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14basic_ifstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14basic_iostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14codecvt_bynameIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14codecvt_bynameIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14collate_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14collate_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt14error_category@GLIBCXX_3.4.11 4.4.0
+ _ZTSSt14overflow_error@GLIBCXX_3.4 4.1.1
+ _ZTSSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15basic_streambufIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15basic_stringbufIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15basic_stringbufIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15messages_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15messages_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15numpunct_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15numpunct_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt15underflow_error@GLIBCXX_3.4 4.1.1
+ _ZTSSt16invalid_argument@GLIBCXX_3.4 4.1.1
+ _ZTSSt17moneypunct_bynameIcLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt17moneypunct_bynameIcLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt17moneypunct_bynameIwLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt17moneypunct_bynameIwLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTSSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt18basic_stringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt19basic_istringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt19basic_istringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt21__ctype_abstract_baseIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt21__ctype_abstract_baseIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTSSt23__codecvt_abstract_baseIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTSSt5ctypeIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt5ctypeIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7codecvtIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7codecvtIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7collateIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7collateIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8bad_cast@GLIBCXX_3.4 4.1.1
+ _ZTSSt8ios_base@GLIBCXX_3.4 4.1.1
+ _ZTSSt8messagesIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8messagesIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8numpunctIcE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8numpunctIwE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt9bad_alloc@GLIBCXX_3.4 4.1.1
+ _ZTSSt9basic_iosIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt9basic_iosIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt9exception@GLIBCXX_3.4 4.1.1
+ _ZTSSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTSSt9strstream@GLIBCXX_3.4 4.1.1
+ _ZTSSt9time_base@GLIBCXX_3.4 4.1.1
+ _ZTSSt9type_info@GLIBCXX_3.4 4.1.1
+ _ZTSa@CXXABI_1.3 4.1.1
+ _ZTSb@CXXABI_1.3 4.1.1
+ _ZTSc@CXXABI_1.3 4.1.1
+ _ZTSd@CXXABI_1.3 4.1.1
+ _ZTSe@CXXABI_1.3 4.1.1
+ _ZTSf@CXXABI_1.3 4.1.1
+ _ZTSh@CXXABI_1.3 4.1.1
+ _ZTSi@CXXABI_1.3 4.1.1
+ _ZTSj@CXXABI_1.3 4.1.1
+ _ZTSl@CXXABI_1.3 4.1.1
+ _ZTSm@CXXABI_1.3 4.1.1
+ _ZTSs@CXXABI_1.3 4.1.1
+ _ZTSt@CXXABI_1.3 4.1.1
+ _ZTSv@CXXABI_1.3 4.1.1
+ _ZTSw@CXXABI_1.3 4.1.1
+ _ZTSx@CXXABI_1.3 4.1.1
+ _ZTSy@CXXABI_1.3 4.1.1
+ _ZTTSd@GLIBCXX_3.4 4.1.1
+ _ZTTSi@GLIBCXX_3.4 4.1.1
+ _ZTTSo@GLIBCXX_3.4 4.1.1
+ _ZTTSt10istrstream@GLIBCXX_3.4 4.1.1
+ _ZTTSt10ostrstream@GLIBCXX_3.4 4.1.1
+ _ZTTSt13basic_fstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt13basic_fstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt13basic_istreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt13basic_ostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt14basic_ifstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt14basic_ifstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt14basic_iostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt14basic_ofstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt14basic_ofstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt18basic_stringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt19basic_istringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt19basic_istringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTTSt9strstream@GLIBCXX_3.4 4.1.1
+ _ZTVN10__cxxabiv116__enum_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv117__array_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv117__pbase_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv119__pointer_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv120__function_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv120__si_class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv121__vmi_class_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv123__fundamental_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN10__cxxabiv129__pointer_to_member_type_infoE@CXXABI_1.3 4.1.1
+ _ZTVN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVNSt6locale5facetE@GLIBCXX_3.4 4.1.1
+ _ZTVNSt8ios_base7failureE@GLIBCXX_3.4 4.1.1
+ _ZTVSd@GLIBCXX_3.4 4.1.1
+ _ZTVSi@GLIBCXX_3.4 4.1.1
+ _ZTVSo@GLIBCXX_3.4 4.1.1
+ _ZTVSt10bad_typeid@GLIBCXX_3.4 4.1.1
+ _ZTVSt10istrstream@GLIBCXX_3.4 4.1.1
+ _ZTVSt10lock_error@GLIBCXX_3.4.11 4.4.0
+ _ZTVSt10moneypunctIcLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt10moneypunctIcLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt10moneypunctIwLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt10moneypunctIwLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt10ostrstream@GLIBCXX_3.4 4.1.1
+ _ZTVSt11__timepunctIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt11__timepunctIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt11logic_error@GLIBCXX_3.4 4.1.1
+ _ZTVSt11range_error@GLIBCXX_3.4 4.1.1
+ _ZTVSt12ctype_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt12ctype_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt12domain_error@GLIBCXX_3.4 4.1.1
+ _ZTVSt12length_error@GLIBCXX_3.4 4.1.1
+ _ZTVSt12out_of_range@GLIBCXX_3.4 4.1.1
+ _ZTVSt12strstreambuf@GLIBCXX_3.4 4.1.1
+ _ZTVSt12system_error@GLIBCXX_3.4.11 4.4.0
+ _ZTVSt13bad_exception@GLIBCXX_3.4 4.1.1
+ _ZTVSt13basic_filebufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt13basic_filebufIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt13basic_fstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt13basic_fstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt13basic_istreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt13basic_ostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt13runtime_error@GLIBCXX_3.4 4.1.1
+ _ZTVSt14basic_ifstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14basic_ifstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14basic_iostreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14basic_ofstreamIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14basic_ofstreamIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14codecvt_bynameIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14codecvt_bynameIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14collate_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14collate_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt14error_category@GLIBCXX_3.4.11 4.4.0
+ _ZTVSt14overflow_error@GLIBCXX_3.4 4.1.1
+ _ZTVSt15basic_streambufIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15basic_streambufIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15basic_stringbufIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15messages_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15messages_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15numpunct_bynameIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15numpunct_bynameIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt15underflow_error@GLIBCXX_3.4 4.1.1
+ _ZTVSt16invalid_argument@GLIBCXX_3.4 4.1.1
+ _ZTVSt17moneypunct_bynameIcLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt17moneypunct_bynameIcLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt17moneypunct_bynameIwLb0EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt17moneypunct_bynameIwLb1EE@GLIBCXX_3.4 4.1.1
+ _ZTVSt18basic_stringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt18basic_stringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt19basic_istringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt19basic_istringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt21__ctype_abstract_baseIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt21__ctype_abstract_baseIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt23__codecvt_abstract_baseIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTVSt23__codecvt_abstract_baseIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTVSt5ctypeIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt5ctypeIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7codecvtIcc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7codecvtIwc11__mbstate_tE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7collateIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7collateIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8bad_cast@GLIBCXX_3.4 4.1.1
+ _ZTVSt8ios_base@GLIBCXX_3.4 4.1.1
+ _ZTVSt8messagesIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8messagesIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8numpunctIcE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8numpunctIwE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt9bad_alloc@GLIBCXX_3.4 4.1.1
+ _ZTVSt9basic_iosIcSt11char_traitsIcEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt9basic_iosIwSt11char_traitsIwEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt9exception@GLIBCXX_3.4 4.1.1
+ _ZTVSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@GLIBCXX_3.4 4.1.1
+ _ZTVSt9strstream@GLIBCXX_3.4 4.1.1
+ _ZTVSt9type_info@GLIBCXX_3.4 4.1.1
+ _ZdaPv@GLIBCXX_3.4 4.1.1
+ _ZdaPvRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _ZdlPv@GLIBCXX_3.4 4.1.1
+ _ZdlPvRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ __atomic_flag_for_address@GLIBCXX_3.4.11 4.4.0
+ __atomic_flag_wait_explicit@GLIBCXX_3.4.11 4.4.0
+ __cxa_allocate_exception@CXXABI_1.3 4.1.1
+ __cxa_bad_cast@CXXABI_1.3 4.1.1
+ __cxa_bad_typeid@CXXABI_1.3 4.1.1
+ __cxa_begin_catch@CXXABI_1.3 4.1.1
+ __cxa_call_unexpected@CXXABI_1.3 4.1.1
+ __cxa_current_exception_type@CXXABI_1.3 4.1.1
+ __cxa_demangle@CXXABI_1.3 4.1.1
+ __cxa_end_catch@CXXABI_1.3 4.1.1
+ __cxa_free_exception@CXXABI_1.3 4.1.1
+ __cxa_get_exception_ptr@CXXABI_1.3.1 4.1.1
+ __cxa_get_globals@CXXABI_1.3 4.1.1
+ __cxa_get_globals_fast@CXXABI_1.3 4.1.1
+ __cxa_guard_abort@CXXABI_1.3 4.1.1
+ __cxa_guard_acquire@CXXABI_1.3 4.1.1
+ __cxa_guard_release@CXXABI_1.3 4.1.1
+ __cxa_pure_virtual@CXXABI_1.3 4.1.1
+ __cxa_rethrow@CXXABI_1.3 4.1.1
+ __cxa_throw@CXXABI_1.3 4.1.1
+ __cxa_vec_cctor@CXXABI_1.3 4.1.1
+ __cxa_vec_cleanup@CXXABI_1.3 4.1.1
+ __cxa_vec_ctor@CXXABI_1.3 4.1.1
+ __cxa_vec_delete2@CXXABI_1.3 4.1.1
+ __cxa_vec_delete3@CXXABI_1.3 4.1.1
+ __cxa_vec_delete@CXXABI_1.3 4.1.1
+ __cxa_vec_dtor@CXXABI_1.3 4.1.1
+ __cxa_vec_new2@CXXABI_1.3 4.1.1
+ __cxa_vec_new3@CXXABI_1.3 4.1.1
+ __cxa_vec_new@CXXABI_1.3 4.1.1
+ __dynamic_cast@CXXABI_1.3 4.1.1
+ __once_proxy@GLIBCXX_3.4.11 4.4.0
+ atomic_flag_clear_explicit@GLIBCXX_3.4.11 4.4.0
+ atomic_flag_test_and_set_explicit@GLIBCXX_3.4.11 4.4.0
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.parameters
+++ gdc-4.4-1.063-4.4.7/debian/rules.parameters
@@ -0,0 +1,34 @@
+# configuration parameters taken from upstream source files
+GCC_VERSION	:= 4.4.7
+NEXT_GCC_VERSION	:= 4.4.8
+BASE_VERSION	:= 4.4
+SOURCE_VERSION	:= 1.063-4.4.7-1
+DEB_VERSION	:= 4.4.7-1
+DEB_EVERSION	:= 1:1.063-4.4.7-1
+GPC_BASE_VERSION	:= 
+GDC_BASE_VERSION  := 1.063
+DEB_GPC_VERSION	:= 
+DEB_GDC_VERSION	:= 1.063-4.4.7-1
+DEB_SOVERSION	:= 4.4
+DEB_SOEVERSION	:= 1:4.4
+DEB_LIBGCC_SOVERSION	:= 1:4.4
+DEB_LIBGCC_VERSION	:= 1:1.063-4.4.7-1
+DEB_STDCXX_SOVERSION	:= 4.4
+DEB_GCJ_SOVERSION	:= 4.4
+PKG_GCJ_EXT	:= 10
+PKG_LIBGCJ_EXT	:= 10
+DEB_GOMP_SOVERSION	:= 4.4
+DEB_GCCMATH_SOVERSION	:= 4.4
+GCC_SONAME	:= 1
+CXX_SONAME	:= 6
+FORTRAN_SONAME	:= 3
+OBJC_SONAME	:= 2
+GCJ_SONAME	:= 10
+GNAT_VERSION	:= 4.4
+GNAT_SONAME	:= 4.4
+FFI_SONAME	:= 4
+MUDFLAP_SONAME	:= 0
+SSP_SONAME	:= 0
+GOMP_SONAME	:= 1
+GCCMATH_SONAME	:= 
+LIBC_DEP		:= libc6
--- gdc-4.4-1.063-4.4.7.orig/debian/libobjc2.symbols
+++ gdc-4.4-1.063-4.4.7/debian/libobjc2.symbols
@@ -0,0 +1,3 @@
+libobjc.so.2 libobjc2 #MINVER#
+#include "libobjc2.symbols.common"
+ __gnu_objc_personality_v0@Base 4.2.1
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.amd64
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.amd64
@@ -0,0 +1,5 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
+#include "libgfortran3.symbols.16"
+#include "libgfortran3.symbols.64"
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.16
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.16
@@ -0,0 +1,178 @@
+ __iso_c_binding_c_f_pointer_i16@GFORTRAN_1.0 4.3
+ _gfortran_all_l16@GFORTRAN_1.0 4.3
+ _gfortran_any_l16@GFORTRAN_1.0 4.3
+ _gfortran_count_16_l@GFORTRAN_1.0 4.3
+ _gfortran_cshift0_16@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift0_16_char@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift1_16@GFORTRAN_1.0 4.3
+ _gfortran_cshift1_16_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_cshift1_16_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift0_16@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift0_16_char@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift1_16@GFORTRAN_1.0 4.3
+ _gfortran_eoshift1_16_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift1_16_char@GFORTRAN_1.0 4.3
+ _gfortran_eoshift2_16@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift2_16_char@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift3_16@GFORTRAN_1.0 4.3
+ _gfortran_eoshift3_16_char4@GFORTRAN_1.1 4.4.0
+ _gfortran_eoshift3_16_char@GFORTRAN_1.0 4.3
+ _gfortran_ishftc16@GFORTRAN_1.0 4.3
+ _gfortran_matmul_i16@GFORTRAN_1.0 4.3
+ _gfortran_matmul_l16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_maxval_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_minval_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_mminval_i16@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_i16@GFORTRAN_1.0 4.3
+ _gfortran_msum_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_c10_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_c4_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_c8_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_i16_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_i16_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_i16_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_i4_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_i8_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_r10_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_r4_i16@GFORTRAN_1.0 4.3
+ _gfortran_pow_r8_i16@GFORTRAN_1.0 4.3
+ _gfortran_product_i16@GFORTRAN_1.0 4.3
+ _gfortran_reshape_16@GFORTRAN_1.0 4.3
+ _gfortran_shape_16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i1@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i2@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_i8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_r10@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_r4@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_16_r8@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_i16@GFORTRAN_1.0 4.3
+ _gfortran_sminval_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__char_1_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__index_1_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__len_1_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_i16@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_16_10@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_16_4@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_16_8@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_i16@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_i16@GFORTRAN_1.0 4.3
+ _gfortran_ssum_i16@GFORTRAN_1.0 4.3
+ _gfortran_sum_i16@GFORTRAN_1.0 4.3
+ _gfortran_transpose_i16@GFORTRAN_1.0 4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/README.libstdc++-baseline.in
+++ gdc-4.4-1.063-4.4.7/debian/README.libstdc++-baseline.in
@@ -0,0 +1,2 @@
+The libstdc++ baseline file is a list of symbols exported by the
+libstdc++ library.
--- gdc-4.4-1.063-4.4.7.orig/debian/TODO
+++ gdc-4.4-1.063-4.4.7/debian/TODO
@@ -0,0 +1,50 @@
+(It is recommended to edit this file with emacs' todoo mode)
+Last updated: 2008-05-02
+
+* General
+
+- Clean up the sprawl of debian/rules.  I'm sure there are neater
+  ways to do some of it; perhaps split it up into some more files?
+  Partly done.
+
+- Make debian/rules control build the control file without unpacking
+  the sources or applying patches.  Currently, it unpacks the sources,
+  patches them, creates the control file, and a subsequent
+  dpkg-buildpackage deletes the sources, re-unpacks them, and
+  re-patches them.
+
+- Reorganise debian/rules.defs to decide which packages to build in a
+  more straightforward and less error-prone fashion: (1) start with
+  all languages; override the list of languages depending on the name
+  of the source package (gcc-4.3, gnat-4.3, gdc-4.3, gcj-4.3).  (2)
+  filter the list of languages depending on the target platform; (3)
+  depending on the languages to build, decide on which libraries to
+  build.
+
+o [Ludovic Brenta] Ada
+
+- Done: Link the gnat tools with libgnat.so, instead of statically.
+
+- Done: Build libgnatvsn containing parts of the compiler (version
+  string, etc.) under GNAT-Modified GPL.  Link the gnat tools with it.
+
+- Done: Build libgnatprj containing parts of the compiler (the project
+  manager) under pure GPL.  Link the gnat tools with it.
+
+- Done: Build both the zero-cost and setjump/longjump exceptions
+  versions of libgnat.  In particular, gnat-glade (distributed systems)
+  works best with SJLJ.
+
+- Done: Re-enable running the test suite.
+
+- Add support for building cross-compilers.
+
+- Add support for multilib (not yet supported upstream).
+
+* Fortran
+
+- gfortran man page generation
+
+* Java
+
+- build java-gcj-compat from the gcc source?
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64gfortran3.symbols.powerpc
+++ gdc-4.4-1.063-4.4.7/debian/lib64gfortran3.symbols.powerpc
@@ -0,0 +1,5 @@
+libgfortran.so.3 lib64gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64gomp1.symbols
+++ gdc-4.4-1.063-4.4.7/debian/lib64gomp1.symbols
@@ -0,0 +1,4 @@
+libgomp.so.1 lib64gomp1 #MINVER#
+#include "libgomp1.symbols.common"
+ GOMP_atomic_end@GOMP_1.0 4.2.1
+ GOMP_atomic_start@GOMP_1.0 4.2.1
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64stdc++6.symbols.sparc
+++ gdc-4.4-1.063-4.4.7/debian/lib64stdc++6.symbols.sparc
@@ -0,0 +1,9 @@
+libstdc++.so.6 lib64stdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVli@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVli@GLIBCXX_3.4 4.1.1
+# FIXME: Currently no ldbl symbols in the 64bit libstdc++ on sparc.
+# #include "libstdc++6.symbols.ldbl.64bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/gcj-wrapper-BV.1
+++ gdc-4.4-1.063-4.4.7/debian/gcj-wrapper-BV.1
@@ -0,0 +1,20 @@
+.TH GCJ-WRAPPER 1 "June 6, 2002" gcj-wrapper "Java User's Manual"
+.SH NAME
+gcj-wrapper \- a wrapper around gcj
+
+.SH SYNOPSIS
+gcj-wrapper [\fB\s-1OPTION\s0\fR] ... [\fI\s-1ARGS\s0\fR...]
+
+.SH DESCRIPTION
+
+\fBgcj-wrapper\fR is a wrapper around gcj(1) to be called as the java
+compiler. Options different for javac(1) and gcj(1) are translated,
+options unknown to gcj(1) are silently ignored.
+
+.SH OPTIONS
+See gcj-@BV@(1) for a list of options that gcj understands.
+
+.SH "SEE ALSO"
+.BR gcj-@BV@(1)
+,
+.BR javac(1)
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.10
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.10
@@ -0,0 +1,96 @@
+ __iso_c_binding_c_f_pointer_c10@GFORTRAN_1.0 4.3
+ __iso_c_binding_c_f_pointer_r10@GFORTRAN_1.0 4.3
+ _gfortran_arandom_r10@GFORTRAN_1.0 4.3
+ _gfortran_cpu_time_10@GFORTRAN_1.0 4.3
+ _gfortran_erfc_scaled_r10@GFORTRAN_1.1 4.4.0
+ _gfortran_exponent_r10@GFORTRAN_1.0 4.3
+ _gfortran_fraction_r10@GFORTRAN_1.0 4.3
+ _gfortran_matmul_c10@GFORTRAN_1.0 4.3
+ _gfortran_matmul_r10@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_maxloc0_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_maxloc1_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_maxval_r10@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_minloc0_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_minloc1_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_minval_r10@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc0_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_mmaxloc1_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_mmaxval_r10@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_mminloc0_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_mminloc1_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_mminval_r10@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_c10@GFORTRAN_1.0 4.3
+ _gfortran_mproduct_r10@GFORTRAN_1.0 4.3
+ _gfortran_msum_c10@GFORTRAN_1.0 4.3
+ _gfortran_msum_r10@GFORTRAN_1.0 4.3
+ _gfortran_nearest_r10@GFORTRAN_1.0 4.3
+ _gfortran_pow_c10_i4@GFORTRAN_1.0 4.3
+ _gfortran_pow_c10_i8@GFORTRAN_1.0 4.3
+ _gfortran_pow_r10_i8@GFORTRAN_1.0 4.3
+ _gfortran_product_c10@GFORTRAN_1.0 4.3
+ _gfortran_product_r10@GFORTRAN_1.0 4.3
+ _gfortran_random_r10@GFORTRAN_1.0 4.3
+ _gfortran_reshape_c10@GFORTRAN_1.0 4.3
+ _gfortran_reshape_r10@GFORTRAN_1.0 4.3
+ _gfortran_rrspacing_r10@GFORTRAN_1.0 4.3
+ _gfortran_set_exponent_r10@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc0_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_smaxloc1_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_smaxval_r10@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_sminloc0_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_4_r10@GFORTRAN_1.0 4.3
+ _gfortran_sminloc1_8_r10@GFORTRAN_1.0 4.3
+ _gfortran_sminval_r10@GFORTRAN_1.0 4.3
+ _gfortran_spacing_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_c10@GFORTRAN_1.0 4.3
+ _gfortran_specific__abs_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__acos_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__acosh_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__aimag_c10@GFORTRAN_1.0 4.3
+ _gfortran_specific__aint_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__anint_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__asin_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__asinh_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan2_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__atan_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__atanh_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__conjg_10@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_c10@GFORTRAN_1.0 4.3
+ _gfortran_specific__cos_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__cosh_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__dim_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_c10@GFORTRAN_1.0 4.3
+ _gfortran_specific__exp_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__log10_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_c10@GFORTRAN_1.0 4.3
+ _gfortran_specific__log_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__mod_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_4_10@GFORTRAN_1.0 4.3
+ _gfortran_specific__nint_8_10@GFORTRAN_1.0 4.3
+ _gfortran_specific__sign_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_c10@GFORTRAN_1.0 4.3
+ _gfortran_specific__sin_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__sinh_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_c10@GFORTRAN_1.0 4.3
+ _gfortran_specific__sqrt_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__tan_r10@GFORTRAN_1.0 4.3
+ _gfortran_specific__tanh_r10@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_c10@GFORTRAN_1.0 4.3
+ _gfortran_sproduct_r10@GFORTRAN_1.0 4.3
+ _gfortran_ssum_c10@GFORTRAN_1.0 4.3
+ _gfortran_ssum_r10@GFORTRAN_1.0 4.3
+ _gfortran_sum_c10@GFORTRAN_1.0 4.3
+ _gfortran_sum_r10@GFORTRAN_1.0 4.3
+ _gfortran_transpose_c10@GFORTRAN_1.0 4.3
+ _gfortran_transpose_r10@GFORTRAN_1.0 4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/protoize.1
+++ gdc-4.4-1.063-4.4.7/debian/protoize.1
@@ -0,0 +1,42 @@
+.TH PROTOIZE 1
+.\" NAME should be all caps, SECTION should be 1-8, maybe w/ subsection
+.\" other parms are allowed: see man(7), man(1)
+.SH NAME
+protoize, unprotoize \- create/remove ANSI prototypes from C code
+.SH SYNOPSIS
+.B protoize
+.I "[options] files ...." 
+.br
+.B unprotoize
+.I "[options] files ...." 
+.SH "DESCRIPTION"
+This manual page documents briefly the
+.BR protoize ,
+and
+.B unprotoize
+commands.
+This manual page was written for the Debian GNU/Linux distribution
+(but may be used by others), because the original program does not
+have a manual page.
+Instead, it has documentation in the GNU Info format; see below.
+.PP
+.B protoize
+is an optional part of GNU C.  You can use it to add prototypes to a
+program, thus converting the program to ANSI C in one respect.  The companion
+program `unprotoize' does the reverse: it removes argument types from
+any prototypes that are found.
+.PP
+When you run these programs, you must specify a set of source files
+as command line arguments.
+.SH OPTIONS
+These programs are non-trivial to operate, and it is neither possible nor
+desirable to properly summarize options in this man page.  Read the info
+documentation for more information.
+.SH "SEE ALSO"
+The programs are documented fully by
+.IR "Gcc: The use and the internals of the GNU compiler",
+available via the Info system.  The documentation for protoize/unprotoize
+can be found in the subsection "Invoking GCC", under "Running Protoize."
+.SH AUTHOR
+This manual page was written by Galen Hazelwood,
+for the Debian GNU/Linux system.
--- gdc-4.4-1.063-4.4.7.orig/debian/dh_rmemptydirs
+++ gdc-4.4-1.063-4.4.7/debian/dh_rmemptydirs
@@ -0,0 +1,10 @@
+#! /bin/sh -e
+
+pkg=`echo $1 | sed 's/^-p//'`
+
+: # remove empty directories, when all components are in place
+for d in `find debian/$pkg -depth -type d -empty 2> /dev/null`; do \
+    while rmdir $d 2> /dev/null; do d=`dirname $d`; done; \
+done
+
+exit 0
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.ldbl.32bit
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.ldbl.32bit
@@ -0,0 +1,283 @@
+ CXXABI_LDBL_1.3@CXXABI_LDBL_1.3 4.2.1
+ GLIBCXX_LDBL_3.4.10@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ GLIBCXX_LDBL_3.4.7@GLIBCXX_LDBL_3.4.7 4.2.1
+ GLIBCXX_LDBL_3.4@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt3tr14hashIgEclEg@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIgEclEg@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ _ZGVNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16_M_extract_floatES4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8__do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16_M_extract_floatES4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8__do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcjcRSt8ios_basePcSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcjcS7_PcS8_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES4_S4_RSt8ios_baseccT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIgEES4_S4_RSt8ios_baseccT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEciRSt8ios_basePcPKcRi@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE8__do_putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcjwRSt8ios_basePwSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcjwPKwPwSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES4_S4_RSt8ios_basewcT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIgEES4_S4_RSt8ios_basewcT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwiRSt8ios_basePwPKwRi@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE8__do_putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8__do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8__do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_bRSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_bRSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_bRSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_bRSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE8__do_putES4_bRSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES4_S4_RSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES4_S4_RSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_bRSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_bRSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_bRSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_bRSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE8__do_putES4_bRSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSi10_M_extractIgEERSiRT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSirsERg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSo9_M_insertIgEERSoT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSolsEg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIgEERS2_RT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIgEERS2_T_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10has_denormE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10is_boundedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10is_integerE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE11round_styleE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12has_infinityE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12max_exponentE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12min_exponentE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE13has_quiet_NaNE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14is_specializedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14max_exponent10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14min_exponent10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE15has_denorm_lossE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE15tinyness_beforeE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE17has_signaling_NaNE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE5radixE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE5trapsE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE6digitsE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE8digits10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE8is_exactE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_iec559E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_moduloE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_signedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt14__convert_to_vIgEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStlsIgcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStlsIgwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStrsIgcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStrsIgwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTIPKg@CXXABI_LDBL_1.3 4.2.1
+ _ZTIPg@CXXABI_LDBL_1.3 4.2.1
+ _ZTIg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSPKg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSPg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSg@CXXABI_LDBL_1.3 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64objc2.symbols
+++ gdc-4.4-1.063-4.4.7/debian/lib64objc2.symbols
@@ -0,0 +1,3 @@
+libobjc.so.2 lib64objc2 #MINVER#
+#include "libobjc2.symbols.common"
+ __gnu_objc_personality_v0@Base 4.2.1
--- gdc-4.4-1.063-4.4.7.orig/debian/README.source
+++ gdc-4.4-1.063-4.4.7/debian/README.source
@@ -0,0 +1,14 @@
+Patches applied to the Debian version of GCC
+--------------------------------------------
+
+Debian specific patches can be found in the debian/patches directory.
+Quilt is used as the patch system.  See /usr/share/doc/quilt/README.source
+for details about quilt.
+
+Patches are applied by calling `debian/rules patch'.  The `series'
+file is constructed on the fly, configure scripts are regenerated
+in the `patch' target.
+
+The source packages gcj-x.y and gnat-x.y do not contain copies of the
+source code but build-depend on the appropriate gcc-x.y-source package
+instead.
--- gdc-4.4-1.063-4.4.7.orig/debian/cpp-BV-doc.doc-base.cpp
+++ gdc-4.4-1.063-4.4.7/debian/cpp-BV-doc.doc-base.cpp
@@ -0,0 +1,16 @@
+Document: cpp-@BV@
+Title: The GNU C preprocessor
+Author: Various
+Abstract: The C preprocessor is a "macro processor" that is used automatically
+ by the C compiler to transform your program before actual compilation.
+ It is called a macro processor because it allows you to define "macros",
+ which are brief abbreviations for longer constructs.
+Section: Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/cpp.html
+Files: /usr/share/doc/gcc-@BV@-base/cpp.html
+
+Format: info
+Index: /usr/share/info/cpp-@BV@.info.gz
+Files: /usr/share/info/cpp-@BV@*
--- gdc-4.4-1.063-4.4.7.orig/debian/FAQ.gcj
+++ gdc-4.4-1.063-4.4.7/debian/FAQ.gcj
@@ -0,0 +1,494 @@
+The GCJ FAQ
+===========
+
+      The latest version of this document is always available at
+      http://gcc.gnu.org/java/faq.html.
+
+        General Questions
+
+            What license is used for libgcj?
+            How can I report a bug in libgcj?
+            How can I contribute to libgcj
+            Is libgcj part of GCC?
+            Will gcj and libgcj work on my machine?
+            How can I debug my Java program?
+            Can I interface byte-compiled and native java code?
+
+
+        Java Feature Support
+
+            What Java API's are supported? How complete is
+              the support?
+            Does GCJ support using straight C native methods
+              ala JNI?
+            Why does GCJ use CNI?
+            What is the state of AWT support?
+            How about support for Swing ?
+            What support is there for RMI ?
+            Can I use any code from other OpenSource projects
+              to supplement libgcj's current features ?
+            What features of the Java language are/arn't supported
+
+
+        Build Issues
+
+            I need something more recent than the last release; how
+                  should I build it?
+            Linker bug on Solaris
+            Can I configure/build in the source tree?
+            My libgcj build fails with "invalid use of undefined type
+                  struct sigcontext_struct"
+
+
+        Gcj Compile/Link Questions
+
+            Why do I get undefined reference to `main' errors?
+            Can GCJ only handle source code?
+            "gcj -C" Doesn't seem to work like javac/jikes. Whats going on?
+            Where does GCJ look for files?
+            How does gcj resolve wether to compile .class or .java files?
+            I'm getting link errors!
+            I'm getting 'undefined symbol: __dso_handle'
+
+
+        Runtime Questions
+
+            My program is dumping core! What's going on?
+            When I run the debugger I get a SEGV in the GC! What's going on?
+            I have just compiled and benchmarked my Java application
+            and it seems to be running slower than than XXX JIT JVM. Is there
+            anything I can do to make it go faster?
+            Can I profile Garbage Collection?
+            How do I increase the runtime's initial and maximum heap sizes?
+            How can I profile my application?
+            My program seems to hang and doesn't produce any output
+
+
+        Programming Issues
+
+            Are there any examples of how to use CNI?
+            Is it possible to invoke GCJ compiled Java code from a
+            C++ application?
+
+General Questions
+=================
+
+      1.1 What license is used for libgcj?
+
+          libgcj is distributed under the GPL, with the 'libgcc exception'.
+          This means that linking with libgcj does not by itself cause
+          your program to fall under the GPL.  See LIBGCJ_LICENSE in
+          the source tree for more details.
+
+      1.2 How can I report a bug in libgcj?
+
+          libgcj has a corresponding Gnats bug database which you can
+          browse. You can also submit new bug reports from the Gnats
+          page.
+
+      1.3 How can I contribute to libgcj?
+
+          You can send simple bug fixes in as patches. Please follow
+          the GCC guidelines for submitting patches. For more complex
+          changes, you must sign copyright over to the Free Software
+          Foundation. See the contribution page for details.
+
+      1.4 Is libgcj part of GCC?
+
+          Yes, libgcj is now part of GCC. It can be downloaded,
+          configured and built as one single tree.
+
+      1.5 Will gcj and libgcj work on my machine?
+
+          Gcj and libgcj are known to work more or less with IA-32 and
+          Sparc Solaris, Tru64 Unix, as well as IA-32, IA-64, Alpha,
+          and PowerPC Linux. They might work on other
+          systems. Generally speaking, porting to a new system should
+          not be hard. This would be a good way to volunteer.
+
+      1.6 How can I debug my Java program?
+
+          gdb 5.0 includes support for debugging gcj-compiled Java
+          programs. For more information please read Java Debugging
+          with gdb.
+
+      1.7 Can I interface byte-compiled and native java code
+
+          libgcj has a bytecode interpreter that allows you to mix
+          .class files with compiled code. It works pretty
+          transparently: if a compiled version of a class is not found
+          in the application binary or linked shared libraries, the
+          class loader will search for a bytecode version in your
+          classpath, much like a VM would. Be sure to build libgcj
+          with the --enable-interpreter option to enable this
+          functionality.
+
+          The program "gij" provides a front end to the interpreter
+          that behaves much like a traditional virtual machine. You
+          can even use "gij" to run a shared library which is compiled
+          from java code and contains a main method:
+
+          $ gcj -shared -o lib-HelloWorld.so HelloWorld.java
+          $ gij HelloWorld
+
+          This works because gij uses Class.forName, which knows how
+          to load shared objects.
+
+Java Feature Support
+====================
+
+      2.1 What Java API's are supported? How complete is
+        the support?
+
+          Matt Welsh writes:
+
+            Just look in the 'libjava' directory of libgcj and see
+            what classes are there. Most GUI stuff isn't there yet,
+            that's true, but many of the other classes are easy to add
+            if they don't yet exist.
+
+            I think it's important to stress that there is a big
+            difference between Java and the many libraries which Java
+            supports. Unfortunately, Sun's promise of "write once, run
+            everywhere" assumes much more than a JVM: you also need
+            the full set of JDK libraries. Considering that new Java
+            APIs come out every week, it's going to be impossible to
+            track everything.
+
+            To make things worse, you can't simply run Sun's JDK
+            classes on any old JVM -- they assume that a bunch of
+            native methods are also defined. Since this native method
+            requirement isn't defined by the JDK specs, you're
+            effectively constrained to using Sun's JVMs if you want to
+            use Sun's JDK libraries. Oh yes -- you could also
+            reimplement all of those native methods yourself, and make
+            sure they behave exactly as Sun's do. Note that they're
+            undocumented!
+
+      2.2 Does GCJ support using straight C native methods
+         ala JNI?
+
+          Yes. libgcj now has experimental support for JNI, in
+          addition to its native Compiled Native Interface (CNI). gcjh
+          will generate JNI stubs and headers using the "-jni"
+          option. However, we do prefer CNI: it is more efficient,
+          easier to write, and (at least potentially) easier to debug.
+
+      2.3 Why does GCJ use CNI?
+
+          Per Bothner explains:
+
+            We use CNI because we think it is a better solution,
+            especially for a Java implementation that is based on the
+            idea that Java is just another programming language that
+            can be implemented using standard compilation
+            techniques. Given that, and the idea that languages
+            implemented using Gcc should be compatible where it makes
+            sense, it follows that the Java calling convention should
+            be as similar as practical to that used for other
+            languages, especially C++, since we can think of Java as a
+            subset of C++. CNI is just a set of helper functions and
+            conventions built on the idea that C++ and Java have the
+            *same* calling convention and object layout; they are
+            binary compatible. (This is a simplification, but close
+            enough.)
+
+      2.4 What is the state of AWT support?
+
+          Work is in progress to implement AWT and Java2D. We intend
+          to support both GTK and xlib peers written using CNI. Some
+          components are already working atop the xlib peers.
+
+      2.5 How about support for Swing?
+
+          Once AWT support is working then Swing support can be
+          considered. There is at least one free-software partial
+          implementations of Swing that may be usable.
+
+      2.6 What support is there for RMI?
+
+         RMI code exists on the CVS trunk (aka gcc 3.1), but it has
+         not been heavily tested.  This code was donated by
+         Transvirtual Technologies.
+
+      2.7 Can I use any code from other OpenSource
+          projects to supplement libgcj's current features?
+
+           Certainly. However, in many cases, if you wanted to
+           contribute the code back into the official libgcj
+           distribution, we would require that the original author(s)
+           assign copyright to the Free Software Foundation.  As of
+           March 6, 2000, libgcj has been relicenced, and copyright
+           has been assigned to the FSF. This allows us to share and
+           merge much of the libgcj codebase with the Classpath
+           project.  Our eventual goal is for Classpath to be an
+           upstream source provider for libgcj, however it will be
+           some time before this becomes reality: libgcj and Classpath
+           have different implementations of many core java
+           classes. In order to merge them, we need to select the best
+           (most efficient, cleanest) implementation of each
+           method/class/package, resolve any conflicts created by the
+           merge, and test the final result.  Needless to say, this is
+           a lot of work. If you can help out, please let us know!
+
+      2.8 What features of the Java language are/aren't supported.
+
+          GCJ supports all Java language constructs as per the Java
+          language Specification.  Recent GCJ snapshots have added
+          support for most JDK1.1 (and beyond) language features,
+          including inner classes.
+
+Build Issues
+============
+
+      3.1 I need something more recent than the last release.
+          How should I build it?
+
+          Please read here: http://gcc.gnu.org/java/build-snapshot.html
+
+      3.2 Linker bug on Solaris
+
+          There is a known problem with the native Solaris linker when
+          using gcc/gcj. A good indication you've run into this
+          problem is if you get an error that looks like the following
+          when building libgcj:
+
+ld: warning: option -o appears more than once, first setting taken
+ld: fatal: file libfoo.so: cannot open file: No such file or directory
+ld: fatal: File processing errors. No output written to .libs/libfoo.so
+collect2: ld returned 1 exit status
+
+          A known workaround for this and other reported link problems
+          on the various releases of Solaris is to build gcc/gcj with
+          the latest GNU binutils instead of the native Solaris
+          ld. The most straightforward way to do this is to build and
+          install binutils, and then reference it in the configure for
+          gcc via --with-ld=/path_to_binutils_install/bin/ld
+          (--with-as may also be similarly specified but is not
+          believed to be required).
+
+          Please note, gcc/gcj must be built using GNU ld prior to
+          doing a clean build of libgcj!
+
+      3.3 Can I configure/build in the source tree?
+
+          No.  You cannot configure/build in the source tree.  If you
+          try, you'll see something like:
+
+              $ ./configure [...]
+              Configuring for a i686-pc-linux-gnu host.
+              *** Cannot currently configure in source tree.
+
+          Instead, you must build in another directory.  E.g.:
+
+              $ mkdir build
+              $ cd build
+              $ ../configure [...]
+
+      3.4 My libgcj build fails with "invalid use of undefined type
+          struct sigcontext_struct"
+
+          If you're using Linux, this probably means you need to
+          upgrade to a newwer, glibc (libc6) based Linux
+          distribution. libgcj does not support the older linux libc5.
+          It might be possible to get a working libgcj by changing
+          occurances of "sigcontext_struct" to "sigcontext", however
+          this has not been tested.  Even if it works, it is likely
+          that there are other issues with older libc versions that
+          would prevent libgcj from working correctly (threads bugs,
+          for example).
+
+Gcj Compile/Link Questions
+==========================
+
+      4.1 Why do I get undefined reference to `main' errors?
+
+          When using gcj to link a Java program, you must use the --main=
+          option to indicate the class that has the desired main method.
+          This is because every Java class can have a main method, thus
+          you have to tell gcj which one to use.
+
+      4.2 Can GCJ only handle source code?
+
+          GCJ will compile both source (.java) and bytecode (.class)
+          files. However, in many cases the native code produced by
+          compiling from source is better optimized than that compiled
+          from .class files.
+
+          Per Bothner explains:
+
+            The reason is that when you compile to bytecode you lose a
+            lot of information about program structure etc. That
+            information helps in generating better code. We can in
+            theory recover the information we need by analysing the
+            structure of the bytecodes, but it is sometimes difficult
+            - or sometimes it just that no-one has gotten around to
+            it.  Specific examples include loop structure (gcc
+            generates better code with explicit loops rather than with
+            the equivalent spaghetti code), array initializers, and
+            the JDK 1.1 `CLASS.class' syntax, all of which are
+            represented using more low-level constructs in bytecode.
+
+      4.3 "gcj -C" Doesn't seem to work like javac/jikes.  Whats going on?
+
+          The behavior of "gcj -C" is not at all like javac or jikes,
+          which will compile (not just scan) all .java's which are out
+          of date with regard to their .class's.
+
+      4.4 Where does GCJ look for files?
+
+          GCJ looks for classes to compile based on the CLASSPATH
+          environment variable. libgcj.jar and other files are found
+          relative to the path of the compiler itself, so it is safe
+          to move the entire compiler tree to a different path, and
+          there is no need to include libgcj.jar in your CLASSPATH.
+
+      4.5 How does gcj resolve whether to compile .class or .java files?
+
+          GCJ compiles only the files presented to it on the command
+          line. However, it also needs to scan other files in order to
+          determine the layout of other classes and check for errors
+          in your code.  For these dependencies, GCJ will favour
+          .class files if they are available because it is faster to
+          parse a class file than source code.
+
+      4.6 I'm getting link errors
+
+          If you get errors at link time that refer to 'undefined
+          reference to `java::lang::Object type_info function', verify
+          that you have compiled any CNI C++ files with the -fno-rtti
+          option. This is only required for versions of GCJ earlier
+          than 3.0.
+
+      4.7 I'm getting 'undefined symbol: __dso_handle'
+
+          Some versions of the GNU linker have broken support for the
+          '.hidden' directive, which results in problems with shared
+          libraries built with recent versions of gcc.
+
+          There are three solutions:
+
+            - downgrade to binutils that don't support .hidden at all,
+            - upgrade to a recent binutils, or
+            - undef the HAVE_GAS_HIDDEN definition in gcc's auto-host.h
+              (and rebuild gcc).
+
+Runtime Questions
+=================
+
+      5.1 My program is dumping core! What's going on?
+
+          It could be any number of things. One common mistake is
+          having your CLASSPATH environment variable pointing at a
+          third party's java.lang and friends. Either unset CLASSPATH,
+          or make sure it does not refer to core libraries other than
+          those found in libgcj.jar.Note that newwer versions of GCJ
+          will reject the core class library if it wasn't generated by
+          GCJ itself.
+
+      5.2 When I run the debugger I get a SEGV in the GC! What's going on?
+
+          This is "normal"; the Garbage Collector (GC) uses it to
+          determine stack boundaries. It is ordinarily caught and
+          handled by the GC -- you can see this in the debugger by
+          using cont to continue to the "real" segv.
+
+      5.3 I have just compiled and benchmarked my Java application
+          and it seems to be running slower than than XXX JIT JVM. Is there
+          anything I can do to make it go faster?
+
+        A few things:
+
+          - If your programs allocate many small, short lived objects,
+            the heap could be filling and triggering GC too
+            regularly. Try increasing the initial and maximum heap sizes
+            as per 5.5 How do I increase the runtime's initial and
+            maximum heap size?
+          - RE - array accesses. We have sub-optimal runtime checking
+            code, and the compiler is still not so smart about
+            automatically removing array checks. If your code is ready,
+            and it doesn't rely on them, try compiling with
+            --no-bounds-check.
+          - Try static linking.  On many platforms, dynamic (PIC)
+            function calls are more expensive than static ones. In
+            particular, the interaction with boehm-gc seems to incur
+            extra overhead when shared libraries are used.
+          - If your Java application doesn't need threads, try
+            building libgcj using --enable-threads=none. Portions of the
+            libgcj runtime are still more efficient when
+            single-threaded.
+
+       5.4 Can I profile Garbage Collection?
+
+          It is possible to turn on verbose GC output by supressing
+          the -DSILENT flag during build. One way to do this is to
+          comment out the line with #define SILENT 1 from
+          boehm-gc/configure before configuring libgcj.  The GC will
+          print collection statistics to stdout. (Rebuilding boehm-gc
+          alone without this flag doesn't seem to work.)
+
+      5.5 How do I increase the runtime's initial and maximum heap sizes?
+
+          Some programs that allocate many small, short-lived objects
+          can cause the default-sized heap to fill quickly and GC
+          often. With the 2.95.1 release there is no means to adjust
+          the heap at runtime. Recent snapshots provide the -ms and
+          -mx arguments to gij to specify the initial and maximum heap
+          sizes, respectively.
+
+      5.6 How can I profile my application?
+
+          Currently, only single threaded Java code may be used by the
+          profiler (gprof). POSIX threads seem to be incompatible with
+          the gmon stuff.  A couple of other tools that have been
+          mentioned on the GCJ mailing list are sprof and cprof.  The
+          former is part of GNU libc.
+
+      5.7 My program seems to hang and doesn't produce any output
+
+          Some versions had a bug in the iconv support. You can work
+          around it by setting LANG=en_US.UTF-8 at runtime, or give
+          the following option during compile time
+          -Dfile.encoding=UTF-8.  This problem should no longer occur
+          as of November 1, 2000.
+
+Programming Issues
+==================
+
+      6.1 Are there any examples of how to use CNI?
+
+          Glenn Chambers has created a couple of trivial examples for
+          version 2.95 and version 3.0.  As a comparison, here is the
+          same example as a JNI application using Kaffe.  The same
+          code will work with GCJ, as shown here.
+
+          Note that for version 2.95, you must compile the C++ files
+          used for CNI with the -fno-rtti option.  This constraint
+          does not apply in version 3.0 and later.
+
+          The primary source of documentation for CNI is at
+          http://gcc.gnu.org/java/papers/cni/t1.html
+
+      6.2 Is it possible to invoke GCJ compiled Java code from a
+          C++ application?
+
+          Yes, GCJ 3.1 supports a CNI-based invocation interface as
+          well as the traditional JNI invocation API.  See the GCJ
+          Manual for more details on how to use the CNI interface.
+
+Please send FSF & GNU inquiries & questions tognu@gnu.org.There are
+also other waysto contact the FSF.
+
+These pages are maintained by The GCC team.
+
+Please send comments on these web pages and GCC to our publicmailing
+list at gcc@gnu.org orgcc@gcc.gnu.org, send other questions to
+gnu@gnu.org.
+
+Copyright (C) Free Software Foundation, Inc.,
+59 Temple Place - Suite 330, Boston, MA  02111,  USA.
+
+Verbatim copying and distribution of this entire article is permitted
+in any medium, provided this notice is preserved.
+
+Last modified 2003-04-30
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.armel
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.armel
@@ -0,0 +1,2 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc1.symbols.aeabi
+++ gdc-4.4-1.063-4.4.7/debian/libgcc1.symbols.aeabi
@@ -0,0 +1,65 @@
+ __aeabi_cdcmpeq@GCC_3.5 1:4.4.0
+ __aeabi_cdcmple@GCC_3.5 1:4.4.0
+ __aeabi_cdrcmple@GCC_3.5 1:4.4.0
+ __aeabi_cfcmpeq@GCC_3.5 1:4.4.0
+ __aeabi_cfcmple@GCC_3.5 1:4.4.0
+ __aeabi_cfrcmple@GCC_3.5 1:4.4.0
+ __aeabi_d2f@GCC_3.5 1:4.4.0
+ __aeabi_d2iz@GCC_3.5 1:4.4.0
+ __aeabi_d2lz@GCC_3.5 1:4.4.0
+ __aeabi_d2uiz@GCC_3.5 1:4.4.0
+ __aeabi_d2ulz@GCC_3.5 1:4.4.0
+ __aeabi_dadd@GCC_3.5 1:4.4.0
+ __aeabi_dcmpeq@GCC_3.5 1:4.4.0
+ __aeabi_dcmpge@GCC_3.5 1:4.4.0
+ __aeabi_dcmpgt@GCC_3.5 1:4.4.0
+ __aeabi_dcmple@GCC_3.5 1:4.4.0
+ __aeabi_dcmplt@GCC_3.5 1:4.4.0
+ __aeabi_dcmpun@GCC_3.5 1:4.4.0
+ __aeabi_ddiv@GCC_3.5 1:4.4.0
+ __aeabi_dmul@GCC_3.5 1:4.4.0
+ __aeabi_dneg@GCC_3.5 1:4.4.0
+ __aeabi_drsub@GCC_3.5 1:4.4.0
+ __aeabi_dsub@GCC_3.5 1:4.4.0
+ __aeabi_f2d@GCC_3.5 1:4.4.0
+ __aeabi_f2iz@GCC_3.5 1:4.4.0
+ __aeabi_f2lz@GCC_3.5 1:4.4.0
+ __aeabi_f2uiz@GCC_3.5 1:4.4.0
+ __aeabi_f2ulz@GCC_3.5 1:4.4.0
+ __aeabi_fadd@GCC_3.5 1:4.4.0
+ __aeabi_fcmpeq@GCC_3.5 1:4.4.0
+ __aeabi_fcmpge@GCC_3.5 1:4.4.0
+ __aeabi_fcmpgt@GCC_3.5 1:4.4.0
+ __aeabi_fcmple@GCC_3.5 1:4.4.0
+ __aeabi_fcmplt@GCC_3.5 1:4.4.0
+ __aeabi_fcmpun@GCC_3.5 1:4.4.0
+ __aeabi_fdiv@GCC_3.5 1:4.4.0
+ __aeabi_fmul@GCC_3.5 1:4.4.0
+ __aeabi_fneg@GCC_3.5 1:4.4.0
+ __aeabi_frsub@GCC_3.5 1:4.4.0
+ __aeabi_fsub@GCC_3.5 1:4.4.0
+ __aeabi_i2d@GCC_3.5 1:4.4.0
+ __aeabi_i2f@GCC_3.5 1:4.4.0
+ __aeabi_idiv@GCC_3.5 1:4.4.0
+ __aeabi_idivmod@GCC_3.5 1:4.4.0
+ __aeabi_l2d@GCC_3.5 1:4.4.0
+ __aeabi_l2f@GCC_3.5 1:4.4.0
+ __aeabi_lasr@GCC_3.5 1:4.4.0
+ __aeabi_lcmp@GCC_3.5 1:4.4.0
+ __aeabi_ldivmod@GCC_3.5 1:4.4.0
+ __aeabi_llsl@GCC_3.5 1:4.4.0
+ __aeabi_llsr@GCC_3.5 1:4.4.0
+ __aeabi_lmul@GCC_3.5 1:4.4.0
+ __aeabi_ui2d@GCC_3.5 1:4.4.0
+ __aeabi_ui2f@GCC_3.5 1:4.4.0
+ __aeabi_uidiv@GCC_3.5 1:4.4.0
+ __aeabi_uidivmod@GCC_3.5 1:4.4.0
+ __aeabi_ul2d@GCC_3.5 1:4.4.0
+ __aeabi_ul2f@GCC_3.5 1:4.4.0
+ __aeabi_ulcmp@GCC_3.5 1:4.4.0
+ __aeabi_uldivmod@GCC_3.5 1:4.4.0
+ __aeabi_unwind_cpp_pr0@GCC_3.5 1:4.4.0
+ __aeabi_uread4@GCC_3.5 1:4.4.0
+ __aeabi_uread8@GCC_3.5 1:4.4.0
+ __aeabi_uwrite4@GCC_3.5 1:4.4.0
+ __aeabi_uwrite8@GCC_3.5 1:4.4.0
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcjGCJ-dev.overrides
+++ gdc-4.4-1.063-4.4.7/debian/libgcjGCJ-dev.overrides
@@ -0,0 +1 @@
+libgcj@GCJ@-dev binary: library-not-linked-against-libc
--- gdc-4.4-1.063-4.4.7.orig/debian/libgnat-BV.overrides
+++ gdc-4.4-1.063-4.4.7/debian/libgnat-BV.overrides
@@ -0,0 +1 @@
+libgnat-@BV@: package-name-doesnt-match-sonames
--- gdc-4.4-1.063-4.4.7.orig/debian/gcc-snapshot.overrides
+++ gdc-4.4-1.063-4.4.7/debian/gcc-snapshot.overrides
@@ -0,0 +1 @@
+
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.i386
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.i386
@@ -0,0 +1,3 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcjGCJ-awt.overrides
+++ gdc-4.4-1.063-4.4.7/debian/libgcjGCJ-awt.overrides
@@ -0,0 +1,2 @@
+# pick up the exact version, in case another gcj version is installed
+libgcj@GCJ@-awt binary: binary-or-shlib-defines-rpath
--- gdc-4.4-1.063-4.4.7.orig/debian/changelog
+++ gdc-4.4-1.063-4.4.7/debian/changelog
@@ -0,0 +1,6679 @@
+gdc-4.4 (1.063-4.4.7-1.3.201410011749) ucs4-0-0-0; urgency=low
+
+  * UCS auto build. The following patches have been applied to the original source package
+    00_hardcode-debian-settings-in-lsb-detection
+
+ -- Univention builddaemon <buildd@univention.de>  Wed, 01 Oct 2014 17:49:17 +0200
+
+gdc-4.4 (1.063-4.4.7-1) unstable; urgency=low
+
+  * GCC 4.4.7 release.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 27 Mar 2012 23:18:33 +0000
+
+gdc-4.4 (1.063-4.4.6-10) unstable; urgency=low
+
+  * Provide <gnu-triplet>-{gdc,gdmd}-4.4 symlinks.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 10 Dec 2011 22:05:32 +0100
+
+gdc-4.4 (1.063-4.4.6-9) unstable; urgency=low
+
+  * Fix passing the dynamic linker on armel.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 08 Dec 2011 15:02:31 +0100
+
+gdc-4.4 (1.063-4.4.6-8) unstable; urgency=low
+
+  * Update the packaging corresponding to gcc-4.4 4.4.6-13.
+  * For ARM hard float, set the dynamic linker to
+    /lib/arm-linux-gnueabihf/ld-linux.so.3.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 07 Dec 2011 12:32:41 +0100
+
+gdc-4.4 (1.063-4.4.6-7) unstable; urgency=high
+
+  * Recognize -imultilib. Closes: #641284.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 12 Sep 2011 21:04:45 +0200
+
+gdc-4.4 (1.063-4.4.6-6) unstable; urgency=low
+
+  * Fix non-biarch builds.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed, 31 Aug 2011 22:39:16 +0200
+
+gdc-4.4 (1.063-4.4.6-5) unstable; urgency=low
+
+  * Update the packaging corresponding to gcc-4.4 4.4.6-9.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 31 Aug 2011 14:41:23 +0200
+
+gdc-4.4 (1.063-4.4.6-4) unstable; urgency=low
+
+  [ Aurelien Jarno ]
+  * Configure gdc with --disable-multilib on kfreebsd-amd64. Closes: #630101.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 13 Jun 2011 11:49:08 +0200
+
+gdc-4.4 (1.063-4.4.6-3) unstable; urgency=low
+
+  * Update the packaging corresponding to gcc-4.4 4.4.6-4.
+  * Enable multiarch.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 09 Jun 2011 11:34:40 +0200
+
+gdc-4.4 (1.063-4.4.6-2) unstable; urgency=low
+
+  * Update the packaging corresponding to gcc-4.4 4.4.6-2.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 17 Apr 2011 18:11:39 +0200
+
+gdc-4.4 (1.063-4.4.6-1) unstable; urgency=low
+
+  * Base package on the GCC 4.4.6 final release.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 16 Apr 2011 16:57:43 +0200
+
+gdc-4.4 (1.063-4.4.5-14) unstable; urgency=low
+
+  * Update the packaging corresponding to gcc-4.4 4.4.5-14.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 14 Mar 2011 04:11:44 +0100
+
+gdc-4.4 (1.063-4.4.5-10) unstable; urgency=low
+
+  * Update the packaging corresponding to gcc-4.4 4.4.5-10.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 01 Dec 2010 12:15:29 +0100
+
+gdc-4.4 (1.063-4.4.5-2ubuntu1) natty; urgency=low
+
+  * Adjust gdc-4.4.diff for the linaro branch.
+
+ -- Matthias Klose <doko@ubuntu.com>  Tue, 12 Oct 2010 11:57:59 +0200
+
+gdc-4.4 (1.063-4.4.5-2) unstable; urgency=low
+
+  * Update the packaging corresponding to gcc-4.4 4.4.5-3.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 11 Oct 2010 22:08:36 +0200
+
+gdc-4.4 (1.063-4.4.5-1) unstable; urgency=low
+
+  * Base package on the GCC 4.4.5 final release.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 01 Oct 2010 13:53:12 +0200
+
+gdc-4.4 (1.063-4.4.4-4) unstable; urgency=low
+
+  * Add copyrights and licenses for the gdc and libphobos.
+  * Updates from the gdc branch up to 20100912.
+
+ -- Iain Buclaw <ibuclaw@ubuntu.com>  Mon, 13 Sep 2010 18:43:52 +0200
+
+gdc-4.4 (1.063-4.4.4-3ubuntu2) maverick; urgency=low
+
+  * Really apply the patches from the last upload.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed, 01 Sep 2010 18:12:19 +0200
+
+gdc-4.4 (1.063-4.4.4-3ubuntu1) maverick; urgency=low
+
+  * gdc-ice-valist.diff: Fixed to handle armel's va_list type.
+  * gdc-stubs.diff: Fixed for powerpc.
+
+ -- Iain Buclaw <ibuclaw@ubuntu.com>  Wed, 01 Sep 2010 16:07:16 +0200
+
+gdc-4.4 (1.063-4.4.4-3) unstable; urgency=low
+
+  * Added stubs for various functions referenced by $(C_TARGET_OBJS).
+
+ -- Iain Buclaw <ibuclaw@ubuntu.com>  Sun, 29 Aug 2010 15:52:42 +0200
+
+gdc-4.4 (1.063-4.4.4-2) unstable; urgency=low
+
+  * Update gdc-4.4.diff.
+
+ -- Iain Buclaw <ibuclaw@ubuntu.com>  Sat, 28 Aug 2010 12:35:54 +0200
+
+gdc-4.4 (1.063-4.4.4-1) unstable; urgency=low
+
+  * Initial upload as gdc-4.4
+  * Update gdc to upstream HG 20100824.
+
+ -- Iain Buclaw <ibuclaw@ubuntu.com>  Tue, 24 Aug 2010 12:48:02 +0100
+
+gdc-4.3 (1:1.060-4.3.5-1) unstable; urgency=low
+
+  * Update to SVN 20100714 from the gcc-4_3-branch.
+    - Fix PR target/43740, PR target/39690, PR target/44597.
+  * New release based on D 1.060.
+  * Fix assertion failure. Closes: #581700.
+
+ -- Iain Buclaw <ibuclaw@ubuntu.com>  Mon, 16 Aug 2010 13:37:31 +0100
+
+gdc-4.3 (1:1.046-4.3.5-2) unstable; urgency=low
+
+  * Update to SVN 20100714 from the gcc-4_3-branch.
+    - Fix PR target/43733, PR c++/43555, PR target/44481, PR target/44075,
+      PR target/43740, PR target/39690, PR target/44597.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 15 Jul 2010 07:49:29 +0200
+
+gdc-4.3 (1:1.046-4.3.5-1) unstable; urgency=low
+
+  * Based on GCC-4.3.5.
+
+  [ Iain Buclaw ]
+  * Fix some wrong-code bugs. Closes: #581240, #581698.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 23 May 2010 09:50:27 +0200
+
+gdc-4.3 (1:1.046-4.3.4-5) unstable; urgency=low
+
+  [ Iain Buclaw ]
+  * Revert the removal of the gdc-ice-null-tree patch. Closes: #577420.
+  * Build std.c.freebsd into phobos library. Closes: #577721.
+
+  [ Matthias Klose ]
+  * Provide symlink to README.Bugs. Closes: #577418.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 18 Apr 2010 18:44:11 +0200
+
+gdc-4.3 (1:1.046-4.3.4-4) unstable; urgency=low
+
+  * Revert the removal of the gdc-ice-null-tree patch. Closes: #577420.
+
+ -- Iain Buclaw <ibuclaw@ubuntu.com>  Sun, 11 Apr 2010 21:37:16 +0200
+
+gdc-4.3 (1:1.046-4.3.4-3) unstable; urgency=low
+
+  * Regenerate sparc-biarch patch to fix build failure on sparc.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 11 Apr 2010 12:05:41 +0200
+
+gdc-4.3 (1:1.046-4.3.4-2) unstable; urgency=low
+
+  [ Iain Buclaw ]
+  * Revert last change to gdc-fix-build.dpatch to fix the powerpc build.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 10 Apr 2010 19:00:49 +0200
+
+gdc-4.3 (1:1.046-4.3.4-1) unstable; urgency=low
+
+  * Upload to unstable.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 10 Apr 2010 16:41:37 +0200
+
+gdc-4.3 (1:1.046-4.3.4-0ubuntu1) lucid; urgency=low
+
+  [ Iain Buclaw ]
+  * Update to new upstream mecurial branch 20100405.
+  * Fixes error on static initialization of arrays with trailing comma,
+    regression compared to gdc-4.1, causing build failures.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sat, 10 Apr 2010 15:51:38 +0100
+
+gdc-4.3 (1:1.043-4.3.4-1ubuntu1) lucid; urgency=low
+
+  [ Iain Buclaw ]
+  * Fix gdc build on armel.
+  * Work around build problem on kfreebsd-amd64. Closes: #575312.
+  * Fix libphobos build for kfreebsd platforms.
+
+  [ Matthias Klose ]
+  * Let the gcc driver know about .[dD] files.
+  * Configure --with-pkgversion with correct gdc-4.3 version.
+
+ -- Iain Buclaw <ibuclaw@ubuntu.com>  Sat, 20 Mar 2010 15:38:42 +0100
+
+gdc-4.3 (1:1.043-4.3.4-1) unstable; urgency=low
+
+  * Update to new upstream mecurial branch 20100301.
+    - gdc-4.3.dpatch: Add.
+    - gdc-ice-null-tree.dpatch: Add.
+    - gdc-ice-wrong-type.dpatch: Add.
+    - gdc-libphobos-std-process.dpatch: Add.
+    - gdc-fix-build.dpatch: Update.
+    - gdc-libphobos-build.dpatch: Update.
+    - gdc-pr26885.dpatch: Update.
+  * debian/control.m4: update upstream website.
+  * Split out a libphobos-4.3-dev package.
+  * Don't install the unversioned manual pages. Closes: #573487.
+
+ -- Iain Buclaw <ibuclaw@ubuntu.com>  Fri, 12 Mar 2010 14:28:43 +0100
+
+gdc-4.3 (2.015-4.3.4-1) unstable; urgency=low
+
+   [ Ian Bucklaw ]
+  * Upload as gdc-4.3, based on 2.015.
+  * Sync with upstream.
+  * Allow GDC to build if GNU C has execvpe() implemented (staring with
+    glibc-2.11).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 15 Feb 2010 17:32:10 +0100
+
+gdc-4.1 (0.25-20080616-4.1.2-27) unstable; urgency=low
+
+  * Upload as gdc-4.1, merge packaging form gcc-4.1 4.1.2-27.
+  * Remove build-dependency on expect-tcl8.3, don't care about hppa.
+    Closes: #472975.
+  * Use autoconf2.59 instead of autoconf. Closes: #542976.
+
+  gcc-4.1 (4.1.2-27) unstable; urgency=low
+
+    * Adjust section of debug packages.
+    * Use autoconf2.59 instead of autoconf. Closes: #539972.
+
+   -- Matthias Klose <doko@debian.org>  Thu, 27 Aug 2009 01:14:10 +0200
+
+  gcc-4.1 (4.1.2-26) unstable; urgency=low
+
+    * Reference lib32 directories instead of /emul/ia32-linux.
+
+   -- Matthias Klose <doko@debian.org>  Sat, 20 Jun 2009 14:51:19 +0200
+
+  gcc-4.1 (4.1.2-25) unstable; urgency=low
+
+    * Update backport for PR28322 (Gunther Nikl).
+
+   -- Matthias Klose <doko@debian.org>  Sun, 18 Jan 2009 09:53:00 +0100
+
+  gcc-4.1 (4.1.2-24) unstable; urgency=low
+
+    * Update to the gcc-4_1-branch 20081201.
+      - Fix PR target/38287 (sparc, wrong code). Addresses: #506713.
+    * Do not build-depend on autogen, if the package is not installable.
+    * Apply arm-unbreak-eabi-armv4t patch only for Debian builds.
+    * Configure with --with-tune=generic for x86 targets.
+
+   -- Matthias Klose <doko@debian.org>  Mon, 01 Dec 2008 23:10:08 +0100
+
+ -- Matthias Klose <doko@debian.org>  Sat, 26 Sep 2009 13:01:24 +0200
+
+gdc-4.1 (0.25-20080616-4.1.2-23.2) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Fix debian/copyright, include info on license obtained from Digital
+    Mars. Thanks to Walter Bright. Closes: #499927
+
+ -- Thomas Viehmann <tv@beamnet.de>  Thu, 02 Oct 2008 20:50:10 +0200
+
+gdc-4.1 (0.25-20080616-4.1.2-23.1) unstable; urgency=low
+
+  * Non-Maintainer Upload
+  * Fix string concatenation segfaults on powerpc, thanks to Ulrich
+    Eckhardt and Arthur Loiret (Closes: #473167).
+
+ -- Don Armstrong <don@debian.org>  Fri, 08 Aug 2008 08:58:51 -0700
+
+gdc-4.1 (0.25-20080616-4.1.2-23) unstable; urgency=low
+
+  * Upload as gdc-4.1.
+  * Update to upstream SVN 20080616.
+    - gdc-fix-build.dpatch: Update.
+  * debian/rules.defs: Disable biarch.
+    - debian/rules2: Fix build with amd64 biarch disabled.
+  * gdc-libstdcxx-nobuild: New: don't build libstdc++ when building gdc.
+
+ -- Arthur Loiret <arthur.loiret@gmail.com>  Wed, 02 Jul 2008 19:43:06 +0000
+
+gcc-4.1 (4.1.2-23) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20080623.
+    - mips/mipsel only updates.
+  * On hurd-i386 with -fstack-protector do not link with libssp_nonshared
+    (Samuel Thibault). Closes: #483609.
+  * Fix cross build targeting powerpc biarch (Hector Oron). Closes: #483906.
+  * Include library symlinks in gobjc and gfortran multilib packages, when
+    not building the library packages.
+  * Fix some lintian warnings and errors.
+
+  [Arthur Loiret]
+  * debian/rules2: configure sh4-linux with --with-multilib-list=m4,m4-nofpu
+    and --with-cpu=sh4.
+  * debian/rules.patch: Don't apply sh4-multilib.dpatch.
+  * mips-warnings.dpatch: Add missing #undef ASM_OUTPUT_EXTERNAL to fix
+    warnings during build.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 23 Jun 2008 23:18:53 +0200
+
+gcc-4.1 (4.1.2-22) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20080420.
+    - Fix PR middle-end/35163, wrong code, folding comparison loses cast.
+  * Remove treelang build support.
+  * Add gcc-multilib64dir patch, remove ppc64-biarch patch; gcc
+    -print-multi-os-directory prints `../lib' again.
+
+  [Aurelien Jarno]
+  * Disable amd64-biarch patch on kfreebsd-amd64.
+
+  [Arthur Loiret]
+  * Support sh4 targets:
+    - sh4-multilib.dpatch: Add, fix multilib (m4/m4-nofpu) for sh4-linux.
+  * Update gdc to upstream SVN 20080419.
+    + Don't use svn-gdc-updates this time, new orig tarball.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 24 Apr 2008 18:48:34 +0200
+
+gcc-4.1 (4.1.2-21) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20080308.
+    - debian/patches/amd64-biarch.dpatch: Remove.
+    - debian/patches/{powerpc,ppc64}-biarch.dpatch: Update.
+  * Update PR other/28322, ignore only unknown -W* options.
+
+  [Arthur Loiret]
+  * pr25524.dpatch: Update, backport register_include_chains call fix from
+    trunk.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 09 Mar 2008 21:53:13 +0100
+
+gcc-4.1 (4.1.2-20) unstable; urgency=low
+
+  [Ludovic Brenta]
+  * debian/rules.d/binary-ada.mk, debian/control.m4: merge from
+    gnat-4.2 (= 4.2.2-7).  This restores libgnatvsn-dev and
+    libgnatprj-dev and therefore closes: #447348.
+  * change package names: libgnatvsn-dev becomes libgnatvsn4.1-dev;
+	                  libgnatprj-dev becomes libgnatprj4.1-dev;
+    the unversioned packages will be provided by gcc-defaults.
+
+  [ Aurelien Jarno]
+  * debian/multiarch.inc: change mipsel64 into mips64el.
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20080301.
+  * Fix PR other/28322, GCC new warnings and compatibility.
+  * Disable building ObjC, ObjC++, Fortran and Treelang compilers.
+  * Remove 4.1.2 compatibility symlinks in gcclibdir.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 02 Mar 2008 00:57:59 +0100
+
+gcc-4.1 (4.1.2-19) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20080114.
+  * Fix build failures for gnat-4.1, gpc-4.1, gdc-4.1 introduced by recent
+    gdc changes.
+  * Set the priority of gcc-4.1-base to optional.
+  * Update debian/watch. Closes: #459388. Addresses: #459389, #459390.
+  * Apply fixes for PR java/33639, PR java/33765, taken from the trunk.
+  * Fix build failure with dpkg-shlibdeps (>= 1.14.15).
+
+  [Arthur Loiret]
+  * debian/rules.defs: Disable phobos on hurd-i386.
+    - gdc-hurd-proc_maps.dpatch: Remove.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 16 Jan 2008 17:14:11 +0100
+
+gcc-4.1 (4.1.2-18) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20071209.
+    - Fix PR middle-end/34130, wrong code with some __builtin_abs expressions.
+      Closes: #452113.
+  * debian/rules2 (STAGE1_CFLAGS): Fix build failure on m68k.
+  * Don't run the testsuite on hppa when expect-tcl8.3 is not available.
+  * Fix again profiling support on the Hurd (Thomas Schwinge). Closes: #433539.
+  * debian/rules.d/binary-java.mk: dpkg-shlibsdeps can't handle the dangling
+    symlink to libgcj_bc.so.1. Remove it temporarily.
+  * Add libgcj_bc to the libgcj7-1 shlibs file.
+  * Build-depend on gcc-4.1-multilib instead of gcc-multilib.
+  * Build the java plugin always using libxul-dev.
+
+  [Arthur Loiret]
+  * Update gdc to upstream SVN 20071124.
+  * Separate libphobos from gdc package.
+  * Build gdc on all archs, without libphobos on unsupported upstream archs.
+    - debian/rules.defs: disable libphobos on sparc
+  * Install libphobos in the private gcc lib dir.
+  * Update gdc driver to use system zlib.
+  * Always build with parallel=1 to hopefully have readable logs.
+  * Always disable the testsuite with gdc.
+  * debian/rules.patch: Update gdc patches list:
+    - gdc-4.1.dpatch: Update from upstream SVN, update gcc/DEV-PHASE.
+    - gdc-pr26885.dpatch: Add, enable pr26885 again.
+    - gdc-driver-zlib.dpatch: Add, use up-to-date system zlib.
+    - gdc-build.dpatch: Remove, renamed to gdc-libphobos-build.dpatch
+    - gdc-libphobos-build.dpatch: Add.
+    - gdc-driver-nophobos.dpatch: Add, disable phobos on unsupported archs.
+    - gdc-fix-build.dpatch: Add, fix build on non-biarched 64 bit targets,
+      fix a small gcc/config/ issue.
+    - gdc-libphobos-std-format.dpatch: Add.
+    - gdc-arm-unwind_ptr.dpatch: Add, fix build on arm.
+    - gdc-mips-gcc-config.dpatch: Add, fix build on mips.
+    - gdc-hurd-proc_maps.dpatch: Add, fix build on hurd.
+  * Begin to work on cross-compilation support, now supported upstream.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 09 Dec 2007 13:17:23 +0100
+
+gcc-4.1 (4.1.2-17) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20071019.
+    - Fix PR target/33256 (mips).
+    - Fix PR tree-optimization/33142, wrong code with VRP through ABS_EXPR.
+      Closes: #429657.
+    - Fix PR c++/29226, ICE in make_decl_rtl (closes: #388626).
+    - Fix PR target/31641, ICE in s390_expand_setmem (closes: #385580).
+  * Set the priority of the source package to optional.
+  * Remove .la files from the biarch libstdc++ debug packages,
+    conflict with the 3.4 package. Addresses: #440490.
+  * Update Hurd fixes (Samuel Thibault).
+  * When -fstack-protector is the default (Ubuntu), do not enable
+    -fstack-protector when -nostdlib is specified. LP: #77865.
+  * Add -g to BOOT_CFLAGS, set STAGE1_CFLAGS to -g -O, only pass
+    other settings when required.
+  * Fix installation of the s390 libstdc++ biarch headers.
+  * Allow the powerpc build on a 32bit machine (without running the
+    biarch testsuite).
+  * Add niagara2 optimization support (David Miller).
+
+  * Only remove libgcj7's classmap db if no other libgcj7* library is
+    installed.
+  * Disable building gcj for mipsel.
+
+  * Update gpc to CVS 20070904.
+  * debian/copyright: gpc is now licensed under the GPL3. The gpc
+    changes are only found in the gpc-4.1 sources.
+  * Loosen dependency of gpc-4.1 on gcc-4.1. LP: #145561.
+
+  [Arthur Loiret]
+  * Port on k*bsd*-gnu:
+    - Apply Debian patch in upstream SVN. (target-ver-syms.sh,
+      phobos/acinclude.m4, phobos/configure.in)
+    - debian/control.m4: add kfreebsd-i386 and kfreebsd-amd64 to gdc
+      Architecture list.
+  * svn-gdc-updates.dpatch: Update to SVN 20070914.
+    - Merge DMD 1.021
+    - dmd-script, d-spec.c (lang_specific_driver): Support -debuglib= and
+      -defaultlib= options.
+    - phobos/std/stdio.d (readln): Use the result of getdelim correctly.
+      (SF 1788195)
+    - d-glue.cc (FuncDeclaration::toObjFile): Do not gimplify if there were
+      errors. (Bugzilla 1415)
+    - d-objfile.cc (outdata): Do not set TREE_CONSTANT on initializers.
+      (Bugzilla 1453)
+    -  phobos/std/c/stdio.d: Define fpos_t correctly for Drawin.
+       (Bugzilla 1469)
+    - d-codegen.{h, cc}, d-glue.cc: Change rawArray to toDArray. Do
+      not cast result to void[]. (Bugzilla 1490)
+    - d-glue.cc, d-codegen.h, d-codegen.cc: Make it an error
+      to reference a nested function without a body. (SF 1793594)
+    - d-codegen.cc (convertTo, call): Prevent multiple re-evaluation
+      of delgate. (Bugzilla 1492)
+
+  * debian/rules.d/binary-d.mk: Add $(DEB_TARGET_GNU_TYPE) symlinks for
+    gdc/gdmd binaries.
+  * gdc-sqrt-double-cast.dpatch: disable (not removed yet) in rules.patch,
+    should be fixed upstream.
+
+  [Ludovic Brenta]
+  * Disable building libgnatprj-dev and libgnatvsn-dev; now provided by
+    gnat-4.2.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 19 Oct 2007 11:38:11 +0200
+
+gcc-4.1 (4.1.2-16) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20070831.
+  * Apply proposed patches:
+    - Improve debug info for packed arrays with constant bounds
+      (PR fortran/22244).
+    - Fix libgcc.a(tramp.o) on ppc32.
+  * Update the -fdirectives-only backport.
+  * debian/patches/libjava-class-igf.dpatch: Backport from the trunk.
+  * Build-depend again on locales on arm, hppa, mipsel.
+  * gdc-4.1: Loosen dependency on g++-4.1.
+  * Disable gij/gcj for arm, armel, hppa, mips; currently fails to build.
+
+  * Update gpc patches and build support for GCC-4.1.
+  * Update gpc frontend and backend patch to gcc-4.1-5f.
+
+  [Arthur Loiret]
+  * debian/control.m4 set gdc Architecture to i386 amd64 powerpc ppc64 lpia
+    until there are some others supported archs.
+  * debian/rules.conf: Use GDC_BASE_VERSION for DEB_GDC_VERSION rather than
+    specifying the upstream gdc version by hand.
+  * debian/rules.unpack: symlink-tree libphobos after unpack instead of right
+    before patch, update debian/rules.patch accordingly.
+  * debian/rules2: Add -std=gnu99 to CFLAGS and -lm to LDFLAGS when building
+    the D compiler.
+  * debian/copyright: Set the D compiler package name as gdc-4.1.
+  * gdc-sqrt-double-cast.dpatch: Fix build on powerpc.
+  * gdc-4.1.dpatch: Update
+    - gcc/tree-sra.c: Do not use SRA on structs with aliased fields created
+      for anonymous unions.
+    - gcc/predict.c: Add null-pointer check.
+
+  * svn-gdc-updates.dpatch: Update to SVN 20070829.
+    - d-decls.cc (uniqueName): Allow multiple static declaration with the same
+      name if in a function. (SF 1783085)
+    - d-codegen.cc (call): Use CommaExp correctly. (Bugzilla 1443)
+    - dmd/todt.c (createTsarrayDt): Don't take quadratic time to build the
+      initializer. (Bugzilla 1440)
+
+ -- Matthias Klose <doko@debian.org>  Sat, 01 Sep 2007 01:33:17 +0200
+
+gcc-4.1 (4.1.2-15) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to the gcc-4_1-branch 20070812.
+
+  * Period of grace is over, turn on again the testsuite on m68k.
+  * Update infrastructure for the gcc-source package (Bastian Blank).
+  * Update profiling on the Hurd (Samuel Thibault, Michael Casadevall).
+    Closes: #433539.
+  * debian/rules2: Allow DEB_BUILD_OPTIONS=parallel=<n> to overwrite NJOBS.
+  * Allow lang=<l1>,<l2> nolang=<l3,l4> in DEB_BUILD_OPTIONS; deprecating
+    WITHOUT_LANG, and WITHOUT_CHECK.
+  * debian/rules.defs, debian/rules.conf: Cache some often used macros.
+  * Backport from trunk: -fdirectives-only (when preprocessing, handle
+    directives, but do not expand macros).
+  * Report an ICE to apport (if apport is available).
+
+  * Don't build a libgcj-doc package from the gcj-4.1 source.
+  * Install gappletviewer man page. Closes: #423094.
+  * Fix gcj build failure on the Hurd (Samuel Thibault). Closes: #408888.
+  * Fix PR java/32862, bugs in EnumMap implementation. Closes: #423160.
+  * Fix PR classpath/32844.
+  * Support @ arguments in gjar.
+  * gcjwebplugin: Register for more browsers (package currently not built).
+  * gij/boehm-gc: Use sysconf as fallback, if reading /proc/stat fails.
+    Closes: #422469.
+  * libjava: Avoid dependency on MAXHOSTNAMELEN (Samuel Thibault).
+  * Tighten dependencies on ecj/libecj-java.
+  * Don't build and test libjava for the biarch architecture.
+  * Build only needed multilib libraries when building as gcj or gnat.
+  * Link libgcj using -Bsymbolic-functions.
+
+  * Integrate gdc build infrastructure.
+
+  [Arthur Loiret]
+  * Fix cross builds targeting x86_64. Closes: LP: #121834.
+  * New build infrastructure to build the gdc compiler.
+    Closes: #312367, #317983, #403460.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 12 Aug 2007 17:49:20 +0200
+
+gcc-4.1 (4.1.2-14) unstable; urgency=low
+
+  * Update to SVN 20070718.
+  * Update boehm-gc, libjava from the gcc-4.1 Fedora branch 20070718.
+  * Explicitely use fastjar to build gcj-4.1. Closes: #416001.
+  * Configure with --enable-libgcj on m32r (Kazuhiro Inaoka). Closes: #417275.
+  * On i386, don't configure --with-tune=i686 (generic is the default).
+  * Tighten build dependency on libmpfr-dev.
+  * Fix profiling on the Hurd. Closes: #433539.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 18 Jul 2007 21:29:19 +0200
+
+gcc-4.1 (4.1.2-13) unstable; urgency=low
+
+  * Update to SVN 20070629.
+  * Add version information for the libjava test summary; add
+    test summary for gnat builds.
+  * Update libjava from the gcc-4.1 Fedora branch 20070611.
+  * On mips*-linux, always imply -lpthread for -pthread (Thiemo Seufer).
+    Closes: #428741.
+  * For ix86 lpia targets, configure --with-tune=i586.
+  * README.Debian: Point to debian-toolchain for general toolchain topics.
+  * Build the 64bit biarch libstdc++ using the gnu locale model.
+  * Only suggest multilib packages on multilib architectures.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 29 Jun 2007 23:43:57 +0200
+
+gcc-4.1 (4.1.2-12) unstable; urgency=high
+
+  * i386-biarch.dpatch: Update for the backport for PR target/31868.
+    Closes: #427185.
+  * m68k-libffi2.dpatch: Update. Closes: #425399.
+
+ -- Matthias Klose <doko@debian.org>  Mon,  4 Jun 2007 23:53:23 +0200
+
+gcc-4.1 (4.1.2-11) unstable; urgency=low
+
+  * Update to SVN 20070601.
+  * Build the libmudflap0-dev package again.
+  * Don't build libffi, when the packages are not built.
+
+ -- Matthias Klose <doko@debian.org>  Fri,  1 Jun 2007 23:55:22 +0200
+
+gcc-4.1 (4.1.2-10) unstable; urgency=low
+
+  * Regenerate the control file.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 30 May 2007 00:29:29 +0200
+
+gcc-4.1 (4.1.2-9) unstable; urgency=low
+
+  * Update to SVN 20070528.
+  * Don't build packages now built from the gcc-4.2 source (arm, m68k,
+    mips, mipsel).
+  * Add backport for PR middle-end/20218.
+  * Add backport for PR target/31868.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 29 May 2007 00:01:12 +0200
+
+gcc-4.1 (4.1.2-8) unstable; urgency=low
+
+  * Update to SVN 20070518.
+  * Don't build packages now built from the gcc-4.2 source.
+
+  [ Aurelian Jarno ]
+  * Update libffi patch for ARM. Closes: #425011.
+  * arm-pr30486, arm-pr28516, arm-unbreak-eabi-armv4t: New.
+  * Disable FFI, Java, ObjC for armel.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 20 May 2007 10:31:24 +0200
+
+gcc-4.1 (4.1.2-7) unstable; urgency=low
+
+  * Update to SVN 20070514.
+  * Link using --hash-style=both on supported architectures. Addresses: #421790.
+  * On hppa, build ecjx as a native binary.
+  * note-gnu-stack.dpatch: Fix ARM comment marker (Daniel Jacobowitz).
+    Closes: #422978.
+  * Add build dependency on libxul-dev for *-freebsd. Closes: #422995.
+  * Update config.guess/config.sub and build gcjwebplugin on GNU/kFreeBSD
+    (Aurelian Jarno). Closes: #422995.
+  * Disable ssp on hurd-i386. Closes: #423757.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 14 May 2007 08:40:08 +0200
+
+gcc-4.1 (4.1.2-6) unstable; urgency=low
+
+  * Update libjava from the gcc-4.1 Fedora branch 20070504.
+  * gfortran-4.1: Fix the target of the libgfortran.so symlink.
+    Closes: #421362.
+  * Build-depend on gcc-multilib [amd64 i386 powerpc ppc64 s390 sparc].
+  * Readd build dependency on binutils on arm.
+  * (Build-) depend on glibc (>= 2.5) for all architectures.
+  * Remove libssp packages from the control file.
+  * Fix wrong code generation on hppa when TLS variables are used.
+    Closes: #422421.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  6 May 2007 10:00:23 +0200
+
+gcc-4.1 (4.1.2-5) unstable; urgency=low
+
+  * Update to SVN 20070429.
+  * Update libjava from the gcc-4.1 Fedora branch 20070428.
+  * Update m68k patches:
+    - Remove pr25514, pr27736, applied upstream.
+    - Update m68k-java.
+  * Link using --hash-style=gnu/both.
+  * Tighten (build) dependency on binutils. Closes: #421197.
+  * gij-4.1: Add a conflict with java-gcj-compat (<< 1.0.69).
+  * gfortran-4.1: Depend on libgfortran1, provide the libgfortran.so
+    symlink. Closes: #421362.
+  * gcc-4.1, gcc-4.1-multilib: Fix compatibility symlinks. Closes: #421382.
+  * Temporarily remove build dependency on locales on arm, hppa, m68k, mipsel.
+  * Temporarily remove build dependency on binutils on arm.
+  * Fix FTBFS on GNU/kFreeBSD (Aurelian Jarno). Closes: #421423.
+  * gij-4.1 postinst: Create /var/lib/gcj-4.1. Closes: #421526.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 30 Apr 2007 08:13:32 +0200
+
+gcc-4.1 (4.1.2-4) unstable; urgency=medium
+
+  * Update to SVN 20070423.
+    - Remove pr11953, applied upstream.
+    - Fix ld version detection in libstdc++v3.
+  * Update libjava from the gcc-4.1 Fedora branch 20070423.
+  * Merge libgfortran1-dev into gfortran-4.1.
+  * Add multilib packages for gcc, g++, gobjc, gobjc++, gfortran.
+  * Don't link using --hash-style=gnu/both; loosen dependency on binutils.
+  * Don't revert the patch to fix PR c++/27227.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 23 Apr 2007 23:13:14 +0200
+
+gcc-4.1 (4.1.2-3) experimental; urgency=low
+
+  * Update to SVN 20070405.
+  * Update libjava from the gcc-4.1 Fedora branch 20070405.
+  * Robustify setting of make's -j flag. Closes: #414316.
+  * Only build the libssp packages, when building the common libraries.
+  * gcc-4.1-hppa64: Don't depend on libc6-dev.
+
+ -- Matthias Klose <doko@debian.org>  Fri,  6 Apr 2007 00:28:29 +0200
+
+gcc-4.1 (4.1.2-2) experimental; urgency=low
+
+  * Update to SVN 20070306.
+  * Update libjava from the gcc-4.1 Fedora branch 20070306.
+
+  [Matthias Klose]
+  * Don't install gij-wrapper anymore, directly register gij as a java
+    alternative.
+  * Don't install gcjh-wrapper anymore.
+  * Don't use exact versioned dependencies on gcj-base for libgcj and
+    libgcj-awt.
+  * Fix glibc build dependency for alpha.
+  * Support -ffast-math on hurd-i386 (Samuel Thibault). Closes: #413342.
+  * Update kfreebsd-amd64 patches (Aurelien Jarno). Closes: #406015.
+  * gij: Consistently use $(dbexecdir) to reference the gcj sub dir.
+  * Install into /usr/lib/gcc/<target_alias>/4.1, to ease upgrades
+    between minor versions.
+    Add compatibility symlinks in <target_alias>/4.1.2 to build gnat-4.1
+    and gcj-4.1 from separate sources.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  7 Mar 2007 03:51:47 +0100
+
+gcc-4.1 (4.1.2-1) experimental; urgency=low
+
+  [Matthias Klose]
+  * Update to gcc-4.1.2.
+  * Update libjava backport patches, split out boehm-gc-backport patch.
+  * Enable the cpu-default-generic patch (i386, amd64), backport from 4.2.
+  * Correct mfctl instruction syntax (hppa), backport from the trunk.
+  * Backport PR java/9861 (name mangling updates).
+  * gcc.c (main): Call expandargv (backport from 4.2).
+  * Apply gcc dwarf2 unwinding patches from the trunk.
+  * Apply backport for PR 20208 on amd64 i386 powerpc ppc64 sparc s390.
+  * Apply patches from the 4.1 branch for PR rtl-optimization/28772,
+    PR middle-end/30313, PR middle-end/30473, PR c++/30536, PR debug/30189,
+    PR fortran/30478, PR rtl-optimization/30787, PR tree-optimization/30823,
+    PR rtl-optimization/28173, PR ada/30684, bug in pointer dependency test,
+    PR rtl-optimization/30931, PR fortran/25392, PR fortran/30400,
+    PR libgfortran/30910, PR libgfortran/30918, PR fortran/29441,
+    PR target/30634.
+  * Update NEWS files.
+  * Include a backport of the ecj+generics java updates as
+    gcj-ecj-20070215.tar.bz2. Install it into the gcc-4.1-source package.
+  * Do not build fastjar anymore from this source.
+  * debian/control.m4: Move expect-tcl8.3 before dejagnu.
+  * Work around firefox/icewhatever dropping plugin dependencies on xpcom.
+  * Refactor naming of libgcj packages in the build files.
+  * Make libstdc++-doc's build dependencies depending on the source package.
+  * Do not build packages on architectures, which are already built by gcc-4.2.
+
+  * Merge the gcj generics backport from Ubuntu:
+
+    - Merge the Java bits (eclipse based compiler, 1.5 compatibility,
+      classpath generics) from the gcc-4.1 Fedora branch.
+    - Drop all previous patches from the classpath-0.93 merge, keep
+      the boehm-gc backport (splitted out as a separate patch).
+    - Add a gcj-ecj-generics.tar.bz2 tarball, containing gcc/java, libjava,
+      config/unwind_ipinfo.m4, taken from the Fedora branch.
+    - Drop the libjava-hppa, libjava-plugin-binary, pr29362, pr29805 patches
+      integrated in the backport.
+    - Update patches for the merge: reporting, libjava-subdir, i386-biarch,
+      classpath-tooldoc, pr26885
+    - Add libjava-dropped, libjava-install; dropped chunks from the merge.
+    - Add pr9861-nojava mangling changes, non-java parts for PR 9861.
+    - Add gcc-expandv, expand `@' parameters on the commandline; backport
+      from the trunk.
+    - Disable the m68k-gc patch, needs update for the merge.
+    - Configure --with-java-home set for 1.5.0.
+    - Configure with --enable-java-maintainer-mode to build the header
+      and class files on the fly.
+    - Add build dependency on ecj-bootstrap, configure --with-ecj-jar.
+    - Build an empty libgcj-doc package; gjdoc currently cannot handle
+      generics.
+    - Apply gcc dwarf2 unwinding patches from the trunk, allowing the Events
+      testcase to pass.
+      - Tighten dependencies on shared libraries.
+    - Use /usr/lib/gcj-4-1-71 as private gcj subdir.
+    - Bump the libgcj soversion to 71, rename the libgcj7-0 package
+      to libgcj7-1, rename the libgcj7-awt package to libgcj7-1-awt.
+    - gij-4.1: Add and provide alternatives for gorbd, grmid, gserialver.
+    - gcj-4.1: Remove gcjh, gcjh-wrapper, gjnih.
+    - gcj-4.1: Add and provide alternatives for jar, javah, native2ascii,
+      tnameserv.
+    - gcj-4.1: Add dependency on ecj-bootstrap, recommend fastjar,
+      ecj-bootstrap-gcj.
+    - Add build dependency on ecj-bootstrap version providing the GCCMain
+      class.
+    - libgcj7-1: Recommend libgcj7-1-awt.
+    - Add build dependency on libmagic-dev.
+    - Build-depend on gcj-4.1; build our own ecj1 and gjdoc before
+      starting the build.
+    - Make ecj1 available when running the testsuite.
+    - Fix build failure on sparc-linux.
+    - Fix gjavah compatibility problems (PR cp-tools/3070[67]).
+    - Fixed driver issue source files (PR driver/30714).
+    - Add (rudimentary) manual pages for classpath tools.
+
+  [Kevin Brown]
+  * debian/control.m4, debian/rules.d/binary-ada.mk: provide new packages
+    containing debugging symbols for Ada libraries: libgnat-4.1-dbg,
+    libgnatprj4.1-dbg, and libgnatvsn4.1-dbg.  Adresses: #401385.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  3 Mar 2007 23:12:08 +0100
+
+gcc-4.1 (4.1.1ds2-30) experimental; urgency=low
+
+  * Update to SVN 20070106.
+  * Do not revert the fixes for PR 25878, PR 29138, PR 29408.
+  * Don't build the packages built by gcc-4.2 source.
+  * debian/patches/note-gnu-stack.dpatch: Add .note.GNU-stack sections
+    for gcc's crt files, libffi and boehm-gc. Taken from FC. Closes: #382741.
+  * Merge from Ubuntu:
+    - Backport g++ visibility patches from the FC gcc-4_1-branch.
+    - Update the long-double patches; require glibc-2.4 as a build dependency
+      on alpha, powerpc, sparc, s390. Bump the shlibs dependencies to
+      require 4.1.1-21.
+    - On powerpc-linux configure using --enable-secureplt. Closes: #382748.
+    - When using the cpu-default-generic patch, build for generic x86-64
+      on amd64 and i386 biarch.
+    - Link using --hash-style=both (alpha, amd64, ia64, i386, powerpc, ppc64,
+      s390, sparc).
+  * gij-4.1: Recommends libgcj7-awt instead of suggesting it. Closes: #394917.
+  * Split the gcc-long-double patch into a code and doc part.
+  * Set priority of development packages to optional.
+  * Add support for kfreebsd-amd64 (Aurelian Jarno). Closes: #406015.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  6 Jan 2007 10:35:42 +0100
+
+gcc-4.1 (4.1.1ds2-22) unstable; urgency=high
+
+  * Enable -pthread for GNU/Hurd (Michael Banck). Closes: #400031.
+  * Update the m68k-fpcompare patch (Roman Zippel). Closes: #401585.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 10 Dec 2006 12:35:06 +0100
+
+gcc-4.1 (4.1.1ds2-20) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to SVN 20061115.
+    - Fix PR tree-optimization/27891, ICE in tree_split_edge.
+      Closes: #370248, #391657, #394630.
+    - Fix PR tree-optimization/9814, duplicate of PR tree-optimization/29797.
+      Closes: #181096.
+  * Apply the libjava/net backport from the redhat/gcc-4_1-branch.
+  * Apply proposed patch for PR java/29805.
+
+  [Roman Zippel]
+  * Build the ObjC and ObjC++ compilers in cross builds.
+  * debian/patches/m68k-symbolic-operand.dpatch: Better recognize
+    symbolic operands in addresses.
+  * debian/patches/m68k-bitfield-offset.dpatch: Only use constant offset
+    for register bitfields (combine expects shifts, but does a rotate).
+  * debian/patches/m68k-bitfield-offset.dpatch: Update and apply.
+
+  [Daniel Jacobowitz]
+  * Don't try to use _Unwind_Backtrace on SJLJ targets.
+    See bug #387875, #388505, GCC PR 29206.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 15 Nov 2006 08:59:53 -0800
+
+gcc-4.1 (4.1.1ds2-19) unstable; urgency=low
+
+  * Fix typo in arm-pragma-pack.dpatch.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 28 Oct 2006 11:04:00 +0200
+
+gcc-4.1 (4.1.1ds2-18) unstable; urgency=medium
+
+  [Matthias Klose]
+  * Update to SVN 20061028.
+  * Fix #pragma pack on ARM (Paul Brook). Closes: #394703.
+  * Revert PR c++/29138, PR c++/29408. Closes: #392559.
+  * Revert PR c++/25878. Addresses: #387989.
+  * fastjar: Provide jar. Closes: #395397.
+
+  [Ludovic Brenta]
+  * debian/control.m4 (libgnatprj-dev): depend on libgnatvsn-dev.
+    debian/gnatprj.gpr: with gnatvsn.gpr. Closes: #395000.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 26 Oct 2006 23:51:10 +0200
+
+gcc-4.1 (4.1.1ds2-17) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to SVN 20061020.
+    - Fix PR debug/26881, ICE in dwarf2out_finish. Closes: #377613.
+    - Fix PR PR c++/29408, parse error for valid code. Closes: #392327, #393010.
+    - Fix PR c++/29435, segfault with sizeof and templates. Closes: #393071.
+    - Fix PR target/29338, segfault with -finline-limit on arm. Closes: 390620.
+    - Fix 3.4/4.0 backwards compatibility problem in libstdc++.
+  * Fix PR classpath/29362, taken from the redhat/gcc-4_1-branch.
+  * Remove the INSTALL directory from the source tarball. Closes: #392974.
+  * Disable building the static libgcj; non-functional, and cutting
+    down build times.
+  * libgcj7-0: Tighten dependency on libgcj-common.
+  * libgcj7-dev: Install .pc file as libgcj-4.1.pc.
+  * README.cross: Updated (Hector Oron). Addresses: #380251.
+  * config-ml.dpatch: Use *-linux-gnu as *_GNU_TYPE. Closes: #394034.
+
+  [Nikita V. Youshchenko]
+  * Fix typo in the cross build scripts.  Closes: #391445.
+
+  [Falk Hueffner]
+  * alpha-no-ev4-directive.dpatch: Fix kernel build failure.
+
+  [Roman Zippel]
+  * debian/patches/m68k-align-code.dpatch: Use "move.l %a4,%a4" to advance
+    within code.
+  * debian/patches/m68k-align-stack.dpatch: Try to keep the stack word aligned.
+  * debian/patches/m68k-dwarf3.dpatch: Emit correct dwarf info for cfa offset
+    and register with -fomit-frame-pointer.
+  * debian/patches/m68k-fpcompare.dpatch: Bring fp compare early to its
+    desired form to relieve reload. Closes: #390879.
+  * debian/patches/m68k-prevent-swap.dpatch: Don't swap operands
+    during reloads.
+  * debian/patches/m68k-reg-inc.dpatch: Reinsert REG_INC notes after splitting
+    an instruction.
+  * debian/patches/m68k-secondary-addr-reload.dpatch: Add secondary reloads
+    to allow reload to get byte values into addr regs. Closes: #385327.
+  * debian/patches/m68k-symbolic-operand.dpatch: Better recognize symbolic
+    operands in addresses.
+  * debian/patches/m68k-limit_reload.dpatch: Remove, superseded by
+    m68k-secondary-addr-reload.dpatch.
+  * debian/patches/m68k-notice-move.dpatch: Apply, was checked in in -16.
+  * debian/patches/m68k-autoinc.dpatch: Updated, don't attempt to increment
+    the register, if it's used multiple times in the instruction .
+
+ -- Matthias Klose <doko@debian.org>  Sat, 21 Oct 2006 00:25:05 +0200
+
+gcc-4.1 (4.1.1ds1-16) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to SVN 20061008.
+    - Fix PR c++/29226, ICE in make_decl_rtl. Closes: #388263.
+  * libgcj7-0: Fix package removal. Closes: #390874.
+  * Configure with --disable-libssp on architectures that don't
+    support it (alpha, hppa, ia64, m68k, mips, mipsel).
+  * On hppa, remove build-dependency on dash.
+  * gij/gcj: Do not install slave links for the non DFSG manpages.
+    Closes: #390425, #390532.
+  * libgcj-common: rebuild-gcj-db: Don't do anything, if no classmap
+    files are found. Closes: #390966.
+  * Fix PR libstdc++/11953, extended for all linux architectures.
+    Closes: #391268.
+  * libffi4-dev: Conflict with libffi. Closes: #387561.
+  * Backport PR target/27880 to the gcc-4_1-branch. Patch by Steve Ellcey.
+    Closes: #390693.
+  * On ia64, don't use _Unwind_GetIPInfo in libjava and libstdc++.
+  * Add a README.ssp with minimal documentation about stack smashing
+    protection. Closes: #366094.
+  * Do not build libgcj-common from the gcc-4.1/gcj-4.1 sources anymore.
+
+  [Roman Zippel]
+  * debian/patches/m68k-notice-move.dpatch: Don't set cc_status
+    for fp move without fp register.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  8 Oct 2006 02:21:49 +0200
+
+gcc-4.1 (4.1.1ds1-15) unstable; urgency=medium
+
+  * Update to SVN 20060927.
+    - Fix PR debug/29132, exception handling on mips. Closes: #389468, #390042.
+    - Fix typo in gcc documentation. Closes: #386180.
+    - Fix PR target/29230, wrong code generation on arm. Closes: #385505.
+  * libgcj-common: Ignore exit value of gcj-dbtool in rebuild-gcj-db on
+    arm, m68k, hppa. Adresses: #388505.
+  * libgcj-common: Replaces java-gcj-compat-dev and java-gcj-compat.
+    Closes: #389539.
+  * libgcj-common: /usr/share/gcj/debian_defaults: Define gcj_native_archs.
+  * Update the java backport from the redhat/gcc-4_1-branch upto 2006-09-27;
+    remove libjava-str2double.dpatch, pr28661.dpatch.
+  * Disable ssp on hppa, not supported.
+  * i386-biarch.dpatch: Avoid warnings about macro redefinitions.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 29 Sep 2006 22:32:41 +0200
+
+gcc-4.1 (4.1.1ds1-14) unstable; urgency=medium
+	
+  [Matthias Klose]
+  * Update to SVN 20060920.
+    - Fix PR c++/26957. Closes: #373257, #386910.
+    - Fix PR rtl-optimization/28243. Closes: #378325.
+  * Remove patch for PR rtl-optimization/28634, applied upstream.
+  * Fix FTBFS on GNU/kFreeBSD (fallout from the backport of classpath-0.92).
+    (Petr Salinger). Closes: #385974.
+  * Merge from Ubuntu:
+    - Do not encode the subminor version in the jar files.
+    - Fix typo for the versioned gcj subdirectory in lib32gcj-0.
+    - When running the i386 binaries on amd64, adjust the properties
+      java.home, gnu.classpath.home.url, sun.boot.class.path,
+      gnu.gcj.precompiled.db.path.
+    - Configure the 32bit build on amd64 
+      --with-java-home=/usr/lib32/jvm/java-1.4.2-gcj-4.1-1.4.2.0/jre.
+    - Configure --with-long-double-128 for glibc-2.4 on alpha, powerpc, ppc64,
+      s390, s390x, sparc, sparc64.
+    - Update the java backport from the redhat/gcc-4_1-branch upto 2006-09-20.
+      - Fix PR java/29013, invalid byte code generation. Closes: #386926.
+    - debian/patches/gcc-pfrs-2.dpatch: Apply a fix for a regression in the
+      backport of PR 28946 from the trunk (H.J. Lu).
+  * Backport PR classpath/28661 from the trunk.
+  * Don't ship the .la files for the java modules. Closes: #386228.
+  * gcj-4.1: Remove dangling symlink. Closes: #386430.
+  * gij: Suggest java-gcj-compat, gcj: Suggest java-gcj-compat-dev.
+    Closes: #361942.
+  * Fix infinite loop in string-to-double conversion on 64bit targets.
+    Closes: #348792.
+  * gij-4.1: Ignore exit value of gcj-dbtool in postinst. Adresses: #388505.
+  * libgcj-common: Move rebuild-gcj-db from java-gcj-compat into libgcj-common.
+  * On hppa, install a wrapper around gij-4.1 to ignore unaligned memory
+    accesses. Works around buildd configurations enabling this check by
+    default. Addresses: #364819.
+
+  [Ludovic Brenta]
+  * debian/patches/ada-libgnatprj.dpatch: Build mlib-tgt-linux.adb instead of
+    mlib-tgt.adb.  Closes: #387826.
+  * debian/patches/ada-pr15802.dpatch: Backport from the trunk.
+    Closes: #246384.
+  * debian/control.m4 (gnat-4.1): do not provide gnat (supplied by
+    gcc-defaults instead); conflict with gnat-4.2 which will soon be in
+    unstable.
+
+  [Roman Zippel]
+  * debian/patches/m68k-dwarf2.dpatch: Recognize stack adjustments also
+    in the src of an instruction.
+  * debian/patches/m68k-jumptable.dpatch: Don't force byte offset when
+    accessing the jumptable, gas can generate the correct offset size instead.
+  * debian/patches/m68k-peephole.dpatch: Convert some text peepholes to rtl
+    peepholes, so the correct DWARF2 information can be generated for stack
+    manipulations (Keep a few peepholes temporarily disabled).
+  * debian/patches/m68k-peephole-note.dpatch: Don't choke on notes while
+    reinserting REG_EH_REGION notes.
+  * debian/patches/m68k-return.dpatch: Don't use single return if fp register
+    have to be restored. Closes: #386864.
+  * debian/patches/m68k-sig-unwind.dpatch: Add support for unwinding over
+    signal frames.
+  * Fix PR rtl-optimization/27736, backport from the trunk.
+  * Add java support for m68k. Closes: #312830, #340874, #381022.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 24 Sep 2006 19:36:31 +0200
+
+gcc-4.1 (4.1.1ds1-13) unstable; urgency=medium
+
+  * Update to SVN 20060901; remove patches applied upstream:
+    - PR target/24367.
+    - PR c++/26670.
+  * Apply proposed patch for PR fortran/28908.
+  * Fix biarch symlinks in lib64stdc++ for cross builds.
+  * Fix biarch symlinks in lib32objc on amd64.
+
+ -- Matthias Klose <doko@debian.org>  Fri,  1 Sep 2006 00:04:05 +0200
+
+gcc-4.1 (4.1.1ds1-12) unstable; urgency=medium
+
+  [Matthias Klose]
+  * Update to SVN 20060830.
+  * Add backport of PR other/26208, bump libgcc1 shlibs dependency.
+  * Add backport of PR c++/26670. Closes: #356548.
+  * Apply proposed patch for PR target/24367 (s390).
+  * Add /usr/lib/jni to the libjava dlsearch path. Closes: #364820.
+  * Build without GFDL licensed docs. Closes: #384036.
+    - debian/patches/{svn-doc-updates,pr25524-doc,pr26885-doc}.dpatch:
+      Split out -doc specific patches.
+    - debian/*.texi, debian/porting.html: Add dummy documentation.
+    - debian/rules.unpack, debian/rules.patch: Update for non-gfdl build.
+    - fastjar.texi: Directly define the gcctabopt and gccoptlist macros.
+
+  * Merge from Ubuntu:
+    - Backport the classpath-0.92, libjava, gcc/java merge from the
+      redhat/gcc-4_1-branch branch.
+    - Apply the proposed patch for PR libgcj/28698.
+    - Change the libgcj/libgij sonames. Rename libgcj7 to libgcj7-0.
+    - Do not remove the rpath from libjvm.so and libjawt.so. Some
+      configure scripts rely on being able to link that libraries
+      directly.
+    - When running the i386 binaries on amd64, look in
+      /usr/lib32/gcj-x.y and /usr/lib32/jni instead.
+    - Add /usr/lib/jni to java.library.path. Closes: #364820.
+    - Add debugging symbols for more binary packages to libgcj7-dbg.
+      Closes: #383705.
+    - libgcj7-dev: Remove conflicts with older libgcjX-dev packages.
+    - Do not build the libgcj-bc and lib32gcj-bc packages anymore from
+      the gcj-4.1 source.
+
+  [Roman Zippel]
+  * debian/patches/m68k-limit_reload.dpatch: Correctly limit reload class.
+    Closes: #375522.
+  * debian/patches/m68k-split_shift.dpatch: Use correct predicates for
+    long long shifts and use more splits. Closes: #381572.
+  * debian/patches/m68k-prevent-qipush.dpatch: Prevent combine from creating
+    a byte push on the stack (invalid on m68k). Closes: #385021.
+  * debian/patches/m68k-autoinc.dpatch: Recognize a few more autoinc
+    possibilities.
+  * debian/patches/pr25514.dpatch: Backport from the trunk.
+  * debian/patches/m68k-gc.dpatch: Change STACKBOTTOM to LINUX_STACKBOTTOM
+    so it works with 2.6 kernels.
+  * Other m68k bug reports fixed in 4.1.1-11 and 4.1.1-12:
+    Closes: #378599, #345574, #344041, #323426, #340293.
+  * Build the stage1 compiler using -g -O2; saves a few hours build time
+    and apparently is working at the moment.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 29 Aug 2006 21:37:28 +0200
+
+gcc-4.1 (4.1.1-11) unstable; urgency=low
+
+  * The "Our priority are our users, remove the documentation!" release.
+
+  [Matthias Klose]
+  * Fix build failure building the hppa->hppa64 cross compiler.
+  * Update to SVN 20060814.
+    - Fix directory traversal vulnerability in fastjar. Closes: #368397.
+      CVE-2006-3619.
+    - Fix PR rtl-optimization/23454, ICE in invert_exp_1 on sparc.
+      Closes: #321215.
+    - Fix PR c++/26757, C++ front-end producing two DECLs with the same UID.
+      Closes: #356569.
+  * Remove patch for PR rtl-optimization/28075, applied upstream.
+  * Apply proposed patch for PR rtl-optimization/28634, rounding problem with
+    -fdelayed-branch on hppa/mips. Closes: #381710.
+  * Fixed at least in 4.1.1-10: boost::date_time build failure.
+    Closes: #382352.
+  * Build-depend on make (>= 3.81), add make (>= 3.81) as dependency to
+    gcc-4.1-source. Closes: #381117.
+  * Backport of libffi from the trunk; needed for the java backport in
+    experimental.
+  * libffi4-dev: Install the libffi_convenience library as libffi_pic.a.
+  * When building a package without the GFDL'd documentation, don't create
+    the alternative's slave links for manual pages for the java tools.
+  * Do not build the -doc packages and derived manual pages licensed under
+    the GFDL with invariant sections or cover texts.
+  * Only build the libssp package, if the target libc doesn't provide
+    ssp support.
+  * Run the complete testsuite, when building a standalone gcj package.
+
+  [Roman Zippel]
+  * debian/patches/m68k-fjump.dpatch:
+    Always use as fjcc pseudo op, we rely heavily on as to generate the
+    right size for the jump instructions. Closes: #359281.
+  * debian/patches/m68k-gc.dpatch:
+    The thread suspend handler has to save all registers.
+    Reenable MPROTECT_VDB, it should work, otherwise it's probably a kernel bug.
+  * debian/patches/m68k-save_pic.dpatch:
+    Correctly save the pic register, when not done by reload().
+    (fixes _Unwind_RaiseException and thus exception handling).
+  * debian/patches/m68k-libffi.dpatch: Add support for closures.
+  * debian/patches/m68k-bitfield.dpatch: Avoid propagation of mem expression
+    past a zero_extract lvalue.
+  * debian/patches/m68k-dwarf.dpatch: Correct the dwarf frame information,
+    but preserve compatibility.
+
+  [Christian Aichinger]
+  * Fix building a cross compiler targeted for ia64. Closes: #382627.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 15 Aug 2006 00:41:00 +0200
+
+gcc-4.1 (4.1.1-10) unstable; urgency=low
+
+  * Update to SVN 20060729.
+    - Fix PR c++/28225, segfault in type_dependent_expression_p.
+      Closes: #376148.
+  * Apply proposed patch for PR rtl-optimization/28075.
+    Closes: #373820.
+  * Apply proposed backport and proposed patch for PR rtl-optimization/28221.
+    Closes: #376084.
+  * libgcj7-jar: Loosen dependency on gcj-4.1-base.
+  * Add ssp header files to the private gcc includedir.
+  * Do not build the Ada packages from the gcc-4.1 source, introducing
+    a new gnat-4.1 source package.
+  * Build libgnat on alpha and s390 as well.
+  * Do not build the gnat-4.1-doc package (GFDL with invariant sections or
+    cover texts).
+  * Remove references to the stl-manual package. Closes: #378698.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 29 Jul 2006 22:08:59 +0200
+
+gcc-4.1 (4.1.1-9) unstable; urgency=low
+
+  * Update to SVN 20060715.
+    - Fix PR c++/28016, do not emit uninstantiated static data members.
+      Closes: #373895, #376871.
+  * Revert the patch to fix PR c++/27227. Closes: #378321.
+  * multiarch-include.dpatch: Renamed from biarch-include.dpatch;
+    apply for all architectures.
+  * Do not build the java compiler in gcc-4.1 package, just include the
+    options and specs in the gcc driver.
+  * Remove gnat-4.0 as an alternative build dependency.
+  * Add a patch to enable -fstack-protector by default for C, C++, ObjC, ObjC++.
+    The patch is disabled by default.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 15 Jul 2006 17:07:29 +0200
+
+gcc-4.1 (4.1.1-8) unstable; urgency=medium
+
+  * Update to SVN 20060708.
+    - Fix typo in gcov documentation. Closes: #375140.
+    - Fix typo in gccint documentation. Closes: #376412.
+    - [alpha], Fix -fvisibility-inlines-hidden segfaults on reference to
+      static method. PR target/27082. Closes: #369642.
+
+  * Fix ppc64 architecture string in debian/multiarch.inc. Closes: #374535.
+  * Fix conflict, replace and provide libssp0-dev for cross compilers.
+    Closes: #377012.
+  * Ignore compiler warnings when checking whether compiler driver understands
+    Ada fails. Closes: #376660.
+  * Backport fix for PR libmudflap/26864 from the trunk. Closes: #26864.
+  * README.C++: Remove non-existing URL. Closes: #347601.
+  * gij-4.1: Provide java2-runtime. Closes: #360906.
+
+  * Closed reports reported against gcc-3.0 and fixed in gcc-4.1:
+    - C++
+      + PR libstdc++/13943, call of overloaded `llabs(int)' is ambiguous.
+        Closes: #228645.
+    - Java
+      + Fixed segmentation fault on compiling bad program. Closes: #165635
+  * Closed reports reported against gcc-3.3 and fixed in gcc-4.1:
+    - Stack protector available. Closes: #213994, #233208.
+    - Better documentation of -finline-limit option. Closes: #296047.
+  * Closed reports reported against gcc-3.4 and fixed in gcc-4.1:
+    - General
+      + Fixed [unit-at-a-time] Using -O2 cannot detect missing return
+        statement in a function. Closes: #276843.
+    - C++
+      + PR13943, call of overloaded `llabs(int)' is ambiguous. Closes: #228645.
+      + PR c++/21280, #pragma interface, templates, and "inline function used
+        but never defined". Closes: #364412.
+    - Architecture specific:
+      - m68k
+        + Segfault building glibc. Closes: #353618.
+        + ICE when trying to build boost. Closes: #321486.
+  * Closed reports reported against gcc-4.0 and fixed in gcc-4.1:
+    - General
+      + Handling of #pragma GCC visibility for builtin functions.
+        Closes: #330279.
+      + gettext interpretation the two conditional strings as one.
+        Closes: #227193.
+      + ICE due to if-conversion. Closes: #335078.
+      + Fix unaligned accesses with __attribute__(packed) and memcpy.
+        Closes: #355297.
+      + Fix ICE in expand_expr_real_1, at expr.c. Closes: #369817.
+    - Ada
+      + Link error not finding -laddr2line. Closes: #322849.
+      + ICE on invalid code. Closes: #333564.
+    - C++
+      + libstdc++: bad thousand separator with fr_FR.UTF-8. Closes: #351786.
+      + The Compiler uses less memory than 4.0. Closes: #336225.
+      + Fix "fails to compare reverse map iterators". Closes: #362840.
+      + Fix "fail to generate code for base destructor defined inline with
+        pragma interface". Closes: #356435.
+      + Fix ICE in cp_expr_size, at cp/cp-objcp-common.c. Closes: #317455.
+      + Fix wrong warning: control may reach end of non-void function.
+        Closes: #319309.
+      + Fix bogus warning "statement has no effect" with template and
+        statement-expression. Closes: #336915.
+      + Fixed segfault on syntax error. Closes: #349087.
+      + Fix ICE with __builtin_constant_p in template argument.
+        Closes: #353366.
+      + Implement DR280 (fixing "no operator!= for const_reverse_iterator").
+        Closes: #244894.
+    - Fortran
+      + Fix wrong behaviour in unformatted writing. Closes: #369547.
+    - Java
+      + Fixed segfault on -fdump-tree-all-all. Closes: #344265.
+      + Fixed ant code completion in eclipse generating a nullpointer
+        exception. Closes: #337510.
+      + Fixed abort in gnu_java_awt_peer_gtk_GtkImage.c. Closes: #343112.
+      + Fixed assertion failure in gij with rhdb-explain. Closes: #335650.
+      + Fixed assertion failure when calling JTabbedPane.addTab(null, ...).
+        Closes: #314704.
+      + Fixed error when displaying empty window with bound larger than the
+        displayed content. Closes: #324502.
+      + Fixed: Exception in JComboBox.removeAllItems(). Closes: #314706.
+      + Fixed assertian error in gnu_java_awt_peer_gtk_GtkImage.c.
+        Closes: #333733.
+    - libmudflap
+      + PR libmudflap/23170, libmudflap should not use functions marked
+        obsolescent by POSIX/SUS. Closes: #320398.
+    - Architecture specific:
+      - m68k
+        + FTBFS building tin. Closes: #323016.
+        + ICE with -g -fomit-frame-pointer. Closes: #331150.
+        + ICE in instantiate_virtual_regs_lossage. Closes: #333536.
+        + Wrong code generation with loop unrolling. Closes: #342121.
+        + ICEs while building gst-ffmpeg. Closes: #343692.
+      - mips
+        + Fix gjdoc build failure. Closes: #344986.
+        + Fix link failure for static libs and object files when xgot
+          needs to be used. Closes: #274942.
+  * gnat bug reports fixed since gnat-3.15p:
+    - GNAT miscounts UTF8 characters in string with -gnaty. Closes: #66175.
+    - Bug box from "with Text_IO" when compiling optimized. Closes: #243795.
+    - Nonconforming parameter lists not detected. Closes: #243796.
+    - Illegal use clause not detected. Closes: #243797.
+    - Compiler enters infinite loop on illegal program with tagged records.
+      Closes: #243799.
+    - Compiler crashes on illegal program (missing discriminant, unconstrained
+      parent). Closes: #243800.
+    - Bug box at sinfo.adb:1215 on illegal program. Closes: #243801.
+    - Bug box at sinfo.adb:1651 on illegal program. Closes: #243802.
+    - Illegal program not detected (entry families). Closes: #243803.
+    - Illegal program not detected, RM 10.1.1(14). Closes: #243807.
+    - Bug box at exp_ch9.adb:7254 on illegal code. Closes: #243812.
+    - Illegal program not detected, RM 4.1.4(14). Closes: #243816.
+    - Bug box in Gigi, code=116, on legal program. Closes: #244225.
+    - Illegal program not detected, 12.7(10) (generic parameter is visible,
+      shouldn't be). Closes: #244483.
+    - Illegal program not detected, ambiguous aggregate. Closes: #244496.
+    - Bug box at sem_ch3.adb:8003. Closes: #244940.
+    - Bug box in Gigi, code=103, on illegal program. Closes: #244945.
+    - Legal program rejected, overloaded procedures. Closes: #246188.
+    - Bug box in Gigi, code=999, on legal program. Closes: #246388.
+    - Illegal program not detected, RM 10.1.6(3). Closes: #246389.
+    - Illegal program not detected, RM 3.10.2(24). Closes: #247014.
+    - Illegal program not detected, RM 3.9(17). Closes: #247015.
+    - Legal program rejected. Closes: #247016.
+    - Legal program rejected. Closes: #247021.
+    - Illegal program not detected, RM 4.7(3). Closes: #247022.
+    - Illegal program not detected, RM 3.10.2(27). Closes: #247562.
+    - Legal program rejected, "limited type has no stream attributes".
+      Closes: #247563.
+    - Wrong output from legal program. Closes: #247565.
+    - Compiler enters infinite loop on illegal program. Closes: #247567.
+    - Illegal program not detected, RM 8.6(31). Closes: #247568.
+    - Legal program rejected, visible declaration not seen. Closes: #247572.
+    - Illegal program not detected, RM 8.2(9). Closes: #247573.
+    - Wrong output from legal program, dereferencing access all T'Class.
+      Closes: #248171.
+    - Compiler crashes on illegal program, RM 5.2(6). Closes: #248174.
+    - Cannot find generic package body, RM 1.1.3(4). Closes: #248677.
+    - Illegal program not detected, RM 3.4.1(5). Closes: #248679.
+    - Compiler ignores legal override of abstract subprogram. Closes: #248686.
+    - Bug box, Assert_Failure at sinfo.adb:2365 on illegal program.
+      Closes: #251266.
+    - Ada.Numerics.Generic_Elementary_Functions.Log erroneout with -gnatN.
+      Closes: #263498.
+    - Bug box, Assert_Failure at atree.adb:2906 or Gigi abort, code=102
+      with -gnat -gnatc. Closes: #267788.
+    - Bug box in Gigi, code=116, 'Unrestricted_Access of a protected
+      subprogram. Closes: #269775.
+    - Stack overflow on illegal program, AI-306. Closes: #276225.
+    - Illegal program not detected, RM B.1(24). Closes: #276226.
+    - Wrong code generated with -O -fPIC. Closes: #306833.
+    - Obsolete: bashism's in debian/rules file. Closes: #370681.
+    - Supports more debian architectures. Closes: #171477.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  8 Jul 2006 16:24:47 +0200
+
+gcc-4.1 (4.1.1-7) unstable; urgency=low
+
+  * Prefer gnat-4.1 over gnat-4.0 as a build dependency.
+  * libssp0: Set priority to standard.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  2 Jul 2006 10:22:50 +0000
+
+gcc-4.1 (4.1.1-6) unstable; urgency=low
+
+  [Ludovic Brenta]
+  * Do not provide the symbolic link /usr/bin/gnatgcc; this will now
+    be provided by package gnat from the source package gcc-defaults.
+  * debian/control.m4, debian/control (gnat): conflict with gnat (<< 4.1),
+    not all versions of gnat, since gcc-defaults will now provide gnat (= 4.1)
+    which depends on gnat-4.1.
+
+  [Matthias Klose]
+  * libjava: Change the default for enable_hash_synchronization_default
+    on PA-RISC. Tighten the libgcj7 shlibs version on hppa.
+  * Update to SVN 20060630.
+  * Apply proposed patch for PR 26991.
+  * Don't use the version for the libstdc++ shlibs dependency for the libgcj
+    shlibs dependency.
+  * Merge from Ubuntu edgy:
+    - Fix %g7 usage in TLS, add patch sparc-g7.dpatch, fixes glibc-2.4 build
+      failure on sparc (Fabio M. Di Nitto).
+    - Merge libssp0-dev into gcc-4.1 (-fstack-protector is a common option).
+    - Run the testsuite with -fstack-protector as well.
+
+  [Bastian Blank]
+  * Make it possible to overwrite arch per DEB_TARGET_ARCH and DEB_TARGET_GNU_TYPE.
+  * Disable biarch only on request for cross builds.
+  * Use correct source directory for tarballs.
+  * Produce correct multiarch.inc for source builds.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  1 Jul 2006 01:49:55 +0200
+
+gcc-4.1 (4.1.1-5) unstable; urgency=low
+
+  * Fix build error running with dpkg-buildpackage -rsudo.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 14 Jun 2006 01:54:13 +0200
+
+gcc-4.1 (4.1.1-4) unstable; urgency=low
+
+  * Really do not backout the fix for PR c++/26068.
+    Closes: #372152, #372559.
+  * Update fastjar version string to 4.1.
+  * Disable pascal again.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 12 Jun 2006 20:29:57 +0200
+
+gcc-4.1 (4.1.1-3) unstable; urgency=low
+
+  * Update to SVN 20060608, do not revert the fix for PR c++/26068.
+    Closes: #372152, #372559.
+  * Fix build failures for Pascal, enable Pascal on all architectures.
+  * Fix another build failure on GNU/kFreeBSD (Aurelien Jarno).
+    Closes: #370661.
+  * Fix build fauilure in gcc/p with parallel make.
+  * Remove cross-configure patch (Kazuhiro Inaoka). Closes: #370649.
+  * Only build the gcc-4.1-source package, when building from the gcc-4.1
+    source.
+  * Fix upgrade problem from standalone gcj-4.1.
+  * Fix build error using bison-2.2, build-depend on bison (>= 2.3).
+    Closes: #372605.
+  * Backport PR libstdc++/25524 from the trunk, update the biarch-include
+    patch. mips triarch support can be added more easily.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 12 Jun 2006 00:23:45 +0200
+
+gcc-4.1 (4.1.1-2) unstable; urgency=low
+
+  * Update to SVN 20060604.
+    - Fix PR c++/26757, C++ front-end producing two DECLs with the same UID.
+      Closes: #356569.
+    - Fix PR target/27158, ICE in extract_insn with -maltivec.
+      Closes: #362307.
+  * Revert PR c++/26068 to work around PR c++/27884 (Martin Michlmayr).
+    Closes: #370308.
+  * Mention Ada in copyright, update copyright file (Ludovic Brenta).
+    Closes: #366744.
+  * Fix kbsd-gnu-java.dpatch (Petr Salinger). Closes: #370320.
+  * Don't include version control files in gcc-4.1-source.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  4 Jun 2006 19:13:37 +0000
+
+gcc-4.1 (4.1.1-1) unstable; urgency=low
+
+  [Matthias Klose]
+  * Update to SVN 20060601.
+  * Reenable the gpc build.
+  * PR libgcj/26483, libffi patch for IA-64 denorms, taken from trunk.
+  * Disable Ada for m32r targets. Closes: #367595.
+  * lib32gfortran1: Do not create empty directory /usr/lib32. Closes: #367999.
+  * gcc-4.1: Add a conflict to the gcj-4.1 version with a different
+    gcc_libdir.
+  * Build gij/gcj for GNU/k*BSD. Closes: #367166.
+  * Update hurd-changes patch (Michael Banck). Closes: #369690.
+  * debian/copyright: Add exception for the gpc runtime library.
+  * Update gpc/gpc-doc package descriptions.
+
+  [Ludovic Brenta]
+  * patches/ada-libgnatprj.dpatch: add prj-pars.ad[bs] and sfn_scan.ad[bs]
+    to libgnatprj; remove them from gnatmake.
+
+ -- Matthias Klose <doko@debian.org>  Thu,  1 Jun 2006 20:35:54 +0200
+
+gcc-4.1 (4.1.0-4) unstable; urgency=low
+
+  [Ludovic Brenta]
+  * Fix a stupid bug whereby fname.ad{b,s} would be included in both
+    libgnatvsn-dev and libgnatprj-dev, preventing use of gnatprj.gpr.
+    Closes: #366733.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 11 May 2006 04:34:50 +0200
+
+gcc-4.1 (4.1.0-3) unstable; urgency=low
+
+  * Update to SVN 20060507.
+  * debian/rules.d/binary-java.mk: Use $(lib32) everywhere. Closes: #365388.
+  * Always configure hppa64-linux-gnu with
+    --includedir=/usr/hppa64-linux-gnu/include.
+  * Make libgnatvsn4.1 and libgnatprj4.1 priority optional. Closes: #365900.
+  * Call autoconf2.13 explicitely in the Ada patches, build-depend on
+    autoconf2.13. Closes: #365780.
+  * Fix libgnatprj-dev and libgnatvsn-dev dependencies on their shared
+    libraries.
+  * Deduce softfloat and vfp (ARM) configure options (Pjotr Kourzanov).
+  * Update proposed patch for PR26885 (May 2 version).
+  * Build the libxxstdc++-dbg packages, when not building the library pacakges.
+  * Do not include the _pic library in the libxxstdc++-dbg packages.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  7 May 2006 15:29:53 +0200
+
+gcc-4.1 (4.1.0-2) unstable; urgency=medium
+
+  * Update to SVN 20060428.
+  * Apply proposed patches for PR26885.
+
+  * Keep libffi doc files in its own directory. Closes: #360466.
+  * Update ppc64 patches for 4.1 (Andreas Jochens). Closes: #360498.
+  * Fix PR tree-optimization/26763, wrong-code, taken from the 4.1 branch.
+    Closes: #356896. CVE-2006-1902.
+  * hppa-cbranch, hppa-cbranch2 patches: Fix for PR target/26743,
+    PR target/11254, PR target/10274, backport from trunk (Randolph Chung).
+  * Let libgccN provide -dcv1 when cross-compiling (Pjotr Kourzanov).
+    Closes: #363289.
+  * (Build-)depend on glibc-2.3.6-7. Closes: #360895, #361904.
+  * Fix a pedantic report about a package description. Add a hint that
+    we do not like bug reports with locales other than "C". Closes: #361409.
+  * Enable the libjava interpreter on mips/mipsel.
+  * gcc-4.1-source: Depend on gcc-4.1-base.
+  * gnat-4.1: Fix permissions of .ali files.
+  * Build lib32gcj7 on amd64.
+  * debian/patches/ada-gnatvsn.dpatch: New.  Apply proposed fix for
+    PR27194.
+
+  [Ludovic Brenta]
+  * debian/patches/ada-default-project-path.dpatch: new.  Change the
+    default search path for project files to the one specified
+    by the Debian Policy for Ada: /usr/share/ada/adainclude.
+  * debian/patches/ada-symbolic-tracebacks.dpatch: new.  Enable support for
+    symbolic tracebacks in exceptions.
+  * debian/patches/ada-missing-lib.dpatch: remove, superseded by the above.
+  * debian/patches/ada-link-lib.dpatch: changed.
+    - Instead of building libada as a target library only, build it as
+      both a host and, if different, target library.
+    - Build the GNAT tools in their top-level directory; do not use
+      recursive makefiles.
+    - Link the GNAT tools dynamically against libgnat.
+    - Apply proposed fix for PR27300.
+    - Rerun autoconf (Matthias Klose).
+  * debian/patches/ada-libgnatvsn.dpatch: new.
+    - Introduce a new shared library named libgnatvsn, containing
+      common components of GNAT under the GNAT-Modified GPL, for
+      use in GNAT tools, ASIS, GLADE and GPS.
+    - Link the gnat tools against this new library.
+    - Rerun autoconf (Matthias Klose).
+  * debian/patches/ada-libgnatprj.dpatch: new.
+    - Introduce a new shared library named libgnatprj, containing the
+      GNAT Project Manager, i.e. the parts of GNAT that parses project
+      files (*.gpr).  Licensed under pure GPL; for use in GLADE and GPS.
+    - Link the gnat tools against this new library.
+    - Rerun autoconf (Matthias Klose).
+  * debian/patches/ada-acats.dpatch: new.
+     - When running the ACATS, look for the gnat tools in their new
+       directory (build/gnattools), and for the shared libraries in
+       build/gcc/ada/rts, build/libgnatvsn and build/libgnatprj.
+  * debian/gnatvsn.gpr, debian/gnatprj.gpr: new.
+  * debian/rules.d/binary-ada.mk, debian/control.m4: new binary packages:
+    libgnatvsn-dev, libgnatvsn4.1, libgnatprj-dev, libgnatprj4.1. Place
+    the *.gpr files in their respective -dev packages.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 29 Apr 2006 00:32:09 +0200
+
+gcc-4.1 (4.1.0-1) unstable; urgency=low
+
+  * libstdc++CXX-BV-dev.preinst: Remove (handling of c++ include dir for 4.0).
+  * libgcj-common: Move removal of docdir from preinst into postinst.
+  * libgcj7: Move removal of docdir from preinst into postinst.
+  * Drop alternative build dependency on gnat-3.4, not built anymore.
+  * Fix PR libgcj/26103, wrong exception thrown (4.1 branch).
+  * debian/patches/libjava-stacktrace.dpatch: Add support to print file names
+    and line numbers in stacktraces.
+  * Add debugging symbols for libgcjawt and lib-gnu-java-awt-peer-gtk
+    in the libgcj7-dbg and lib32gcj7-dbg packages.
+  * Remove dependency of the libgcj-dbg packages on the libgcj-dev packages,
+    add recommendations on binutils and libgcj-dev. Mention the requirement
+    of binutils for the stacktraces.
+  * Fix upgrade from version 4.0.2-9, loosing the Debian changelog.
+    Closes: #355439.
+  * gij/gcj: Install one alternative for each command, do not use slave
+    links for rmiregistry, javah, rmic. Ubuntu #26781. Closes: #342557.
+  * Fix for PR tree-optimization/26587, taken from the 4.1 branch.
+  * Fix PR libstdc++/26526 (link failure when _GLIBCXX_DEBUG is defined).
+  * Configure with --enable-clocale=gnu, even if not building C++ packages.
+  * Remove runtime path from biarch libraries as well.
+  * PR middle-end/26557 (ice-on-vaild-code, regression), taken from
+    the gcc-4_1-branch. Closes: #349083.
+  * PR tree-optimization/26672 (ice-on-vaild-code, regression), taken from
+    the gcc-4_1-branch. Closes: #356231.
+  * PR middle-end/26004 (rejects-vaild-code, regression), taken from
+    the gcc-4_1-branch.
+  * When building as standalone gcj, build libgcc4 (hppa only) and fastjar.
+  * Configure --with-cpu=v8 on sparc.
+  * debian/patches/libjava-hppa.dpatch: pa/pa32-linux.h
+    (CRT_CALL_STATIC_FUNCTION): Define when CRTSTUFFS_O is defined.
+    (John David Anglin). Closes: #353346.
+  * Point to the 4.1 version of README.Bugs (closes: #356230).
+  * Disable the libmudflap testsuite on alpha (getting killed).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 18 Mar 2006 23:00:39 +0100
+
+gcc-4.1 (4.1.0-0) experimental; urgency=low
+
+  * GCC 4.1.0 final release.
+  * Build the packages for the Java language from a separate source.
+  * Update NEWS.html, NEWS.gcc.
+  * libgcj-doc: Auto generated API documentation for libgcj7, classpath
+    example programs.
+  * Add gjdoc to Build-Depends-Indep.
+  * On amd64, build-depend on libc6-dev-i386 instead of ia32-libs-dev.
+  * Internal ssp headers now installed in the gcc libdir.
+  * Do not build gcj-4.1-base when building the gcc-4.1 packages.
+  * When building as gcj-4.1, use the tarball from the gcc-4.1-source
+    package.
+
+  [Ludovic Brenta]
+  * Allow to enable and disable NLS and bootstrapping from the environment.
+    - Adding "nls" to WITHOUT_LANG disables NLS support.
+    - If WITH_BOOTSTRAP is set, debian/rules2 calls configure
+      --enable-bootstrap=$(WITH_BOOTSTRAP) and just "make".  If
+      WITH_BOOTSTRAP is unset, it calls configure without a bootstrapping
+      option and calls "make profiledbootstrap" or "make bootstrap-lean"
+      depending on the target CPU.
+      Currently overwritten to default to "bootstrap".
+
+ -- Matthias Klose <doko@debian.org>  Thu,  2 Mar 2006 00:03:45 +0100
+
+gcc-4.1 (4.1ds9-0exp9) experimental; urgency=low
+
+  * Update to GCC 4.1.0 release candidate 1 (gcc-4.1.0-20060219 tarball).
+  * Update gcc-version patch for gcc-4.1.
+  * libgccN, libstdc++N*: Fix upgrade of /usr/share/doc symlinks.
+  * libjava awt & swing update, taken from trunk 2006-02-16.
+  * libgcj7-dev: Suggest libgcj-doc, built from a separate source package.
+  * Shorten build-dependency line (work around buildd problems
+    on arm* and mips*).
+  * New patch gcc-ice-hack (saving the preprocessed source on an ICE),
+    taken from Fedora.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 20 Feb 2006 10:07:23 +0100
+
+gcc-4.1 (4.1ds8-0exp8) experimental; urgency=low
+
+  * Update to SVN 20060212, taken from the 4.1 release branch.
+  * libgccN: Fix upgrade of /usr/share/doc/libgccN symlink.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 12 Feb 2006 19:48:31 +0000
+
+gcc-4.1 (4.1ds7-0exp7) experimental; urgency=low
+
+  * Update to SVN 20060127, taken from the 4.1 release branch.
+    - On hppa, bump the libgcc soversion to 4.
+  * Add an option not to depend on the system -base package for cross compiler
+    (Ian Wienand). Closes: #347484.
+  * Remove workaround increasing the stack size limit for some architectures,
+    not needed anymore on ia64.
+  * On amd64, build-depend on libc6-dev-i386, depend on libc6-i386, where
+    available.
+  * libstdc++6: Properly upgrade the doc directory. Closes: #346171.
+  * libstdc++6: Add a conflict to scim (<< 1.4.2-1). Closes: #343313.
+  * Set default 32bit ix86 architecture to i486.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 27 Jan 2006 22:23:22 +0100
+
+gcc-4.1 (4.1ds6-0ubuntu6) experimental; urgency=low
+
+  * Update to SVN 20060107, taken from the 4.1 release branch.
+    - Remove fix for PR ada/22533, fixed by patch for PR c++/23171.
+  * Remove binary packages from the control file, which aren't built
+    yet on any architecture.
+  * gcc-hppa64: Use /usr/hppa64-linux-gnu/include as location for the glibc
+    headers, tighten glibc (build-)dependency.
+  * libffi [arm]: Add support for closures, libjava [arm]: enable the gij
+    interpreter (Phil Blundell). Addresses: #337263.
+  * For the gcj standalone build, include cc1 into the gcj-4.1 package,
+    needed for linking java programs compiled to native code.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  7 Jan 2006 03:36:33 +0100
+
+gcc-4.1 (4.1ds4-0exp4) experimental; urgency=low
+
+  * Update to SVN 20051210, taken from the 4.1 release branch.
+  * Prepare to build the java packages from it's own source (merged
+    from Ubuntu).
+    - Build the java packages from the gcc-4.1 source, as long as packages
+      are prepared for experimental.
+    - When built as gcj, run only the libjava testsuite, don't build the
+      libstdc++ debug packages, don't package the gcc source.
+    - Loosen package dependencies, when java packages are built from
+      separate sources.
+    - Fix gcj hppa build, when java packages are built from separate sources.
+    - gij-4.1: Install test-summary, when doing separate builds.
+    - Allow java packages be installed independent from other packages built
+      from the source package.
+    - Rename libgcj7-common to libgcj7-jar.
+    - Introduce a gcj-4.1-base package to completely separate the two and not
+      duplicate the changelog in each gcj/gij package.
+  * Java related changes:
+    - libjava-xml-transform: Update from classpath trunk, needed for
+      eclipse (Michael Koch), applied upstream.
+    - Fix java wrapper scripts to point to 4.1 (closes: #341710).
+    - Reenable java on mips and mipsel.
+    - Fix libgcj6 dependency. Ubuntu #19935.
+    - Add libxt-dev as a java build dependency. autoconf explicitely checks
+      for X11/Intrinsic.h.
+  * Ada related changes:
+    - Apply proposed fix for PR ada/22533, reenable ada on alpha, powerpc,
+      mips, mipsel and s390.
+    - Add Ada support for GNU/kFreeBSD (Aurelien Jarno). Closes: #341356.
+    - Remove ada bootstrap workaround for alpha.
+  * Build a separate gcc-4.1-source package (Bastian Blank). Closes: #333922.
+  * Remove obsolete patch: libstdc++-automake.
+  * Remove patch integrated upstream: libffi-mips.
+  * Fix the installation of the hppa64 compiler in snapshot builds.
+  * Rename libgfortran0* to libgfortran1* (upstream soversion change).
+  * Add a dependency on libc-dev for all compilers / -dev packages except
+    gcc (which can be used for kernel builds without libc-dev).
+  * libffi4-dev: Fix package description.
+  * On amd64, install 32bit libraries into /emul/ia32-linux/usr/lib.
+    Addresses: #341147.
+  * Fix installation of biarch libstdc++ headers on amd64.
+  * Configure --with-tune=i686 on ix86 architectures (on Ubuntu with
+    -mtune=pentium4). Remove the cpu-default-* patches.
+  * debian/control.m4: Fix libxxgcc package names.
+  * Update the build infrastructure to build cross compilers
+    (Nikita V. Youshchenko).
+  * Tighten binutils (build-)dependency. Closes: #342484.
+  * Symlink more doc directories.
+  * debian/control.m4: Explicitely set Architecture for biarch packages.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 10 Dec 2005 16:56:45 +0100
+
+gcc-4.1 (4.1ds1-0ubuntu1) UNRELEASED; urgency=low
+
+  * Build Java packages only.
+  * Update to SVN 20051121, taken from the 4.1 release branch.
+    - Remove libjava-saxdriver-fix patch, applied upstream.
+    - Remove ada-gnat-version patch, applied upstream.
+  * Fix FTBFS in biarch builds on 32bit kernels.
+  * Update libstdc++-doc doc-base file (closes: #339046).
+  * Remove obsolete patch: gcc-alpha-ada_fix.
+  * Fix installation of biarch libstdc++ headers (Ubuntu #19655).
+  * Fix sparc and s390 biarch patches to build the 64bit libffi.
+  * Work around biarch build failure in libjava/classpath/native/jni/midi-alsa.
+  * Install spe.h header on powerpc.
+  * Add libasound build dependencies.
+  * libgcj: Fix installation of libgjsmalsa library.
+  * Remove patches not used anymore: libjava-no-rpath, i386-config-ml-nomf,
+    libobjc, multiarch-include, disable-biarch-check-mf, gpc-profiled,
+    gpc-no-gpidump, libgpc-shared, acats-expect.
+  * Fix references to manuals in gnat(1). Ubuntu #19772.
+  * Remove build dependency on xlibs-dev, add libxtst-dev.
+  * Do not configure with --disable-werror.
+  * Merge *-config-ml patches into one config-ml patch, configure the biarch
+    libs in debian/rules.defs.
+  * debian/gcj-wrapper: Accept -Xss.
+  * Do not build biarch java on Debian (missing biarch libasound).
+  * Do not build the java packages from this source package, avoiding
+    dependencies on X.
+
+ -- Matthias Klose <doko@ubuntu.com>  Mon, 21 Nov 2005 20:29:43 +0100
+
+gcc-4.1 (4.1ds0-0exp0) experimental; urgency=low
+
+  * Configure libstdc++ using the default allocator.
+  * Update to 20051112, taken from the svn trunk.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 12 Nov 2005 23:47:01 +0100
+
+gcc-4.1 (4.1ds0-0ubuntu0) breezy; urgency=low
+
+  * UNRELEASED
+  * First snapshot of gcc-4.1 (CVS 20051019).
+    - adds SSP support (closes: #213994, #233208).
+  * Remove patches applied upstream/not needed anymore.
+  * Update patches for 4.1: link-libs, gcc-textdomain, libjava-dlsearch-path,
+    rename-info-files, reporting, classmap-path, i386-biarch, sparc-biarch,
+    libjava-biarch-awt, ada-gcc-name.
+  * Disable patches:
+    - 323016, m68k, necessary for 4.1?
+  * debian/copyright: Update for 4.1.
+  * debian/control, debian/control.m4, debian/rules.defs, debian/rules.conf:
+    Update for 4.1, add support for Obj-C++ and SSP.
+  * Fix generation of Ada docs in info format.
+  * Set Ada library version to 4.1.
+  * Drop gnat-3.3 as an alternative build dependency.
+  * Use fortran instead of f95 for the build files.
+  * Update build support for awt peer libs.
+  * Add packaging support for SSP library.
+  * Add packaging support for Obj-C++.
+  * Run the testsuite for -march=i686 on i386 and amd64 as well.
+  * Fix generation of Pascal docs in html format.
+  * Update config-ml patches to build libssp biarch.
+  * Disable libssp for hppa64 build.
+  * libgcj7-dev: Install jni_md.h.
+  * Disable gnat for powerpc, currently fails to build.
+  * Add biarch runtime lib packages for ssp, mudflap, ffi.
+  * Do not explicitely configure with --enable-java-gc=boehm, which is the
+    default.
+  * libjava-saxdriver-fix: Fix a problem in the Aelfred2 SAX parser.
+  * libstdc++6-4.0-dev: Depend on the libc-dev package. Ubuntu #18885.
+  * Build-depend on expect-tcl8.3 on all architectures.
+  * Build-depend on lib32z1-dev on amd64 and ppc64, drop build dependency on
+    amd64-libs.
+  * Disable ada on alpha mips mipsel powerpc s390, currently broken.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed, 19 Oct 2005 11:02:31 +0200
+
+gcc-4.0 (4.0.2-3) unstable; urgency=low
+
+  * Update to CVS 20051015, taken from the gcc-4_0-branch.
+    - gcc man page fixes (closes: #327254, #330099).
+    - PR java/19870, PR java/20338, PR java/21844, PR java/21540:
+      Remove Debian patches.
+    - Applied libjava-echo-fix patch.
+    - Fix PR target/24284, ICE (Segmentation fault) on sparc-linux.
+      Closes: #329840.
+    - Fix PR c++/23797, ICE on typename outside template. Closes: #325545.
+    - Fix PR c++/22551, ICE in tree_low_cst. Closes: #318932.
+  * libstdc++6: Tighten libstdc++ shlibs version to 4.0.2-3 (new symbol).
+  * Update generated Ada files.
+  * Fix logic to disable mudflap and Obj-C++ via the environment.
+  * Remove f77 build bits.
+  * gij-4.0: Remove /var/lib/gcj-4.0/classmap.db on purge (closes: #330800).
+  * Let gcj-4.0 depend on libgcj6-dev, instead of recommending it. This is
+    not necessary for byte-code compilations, but for compilations to native
+    code. For compilations to byte-code, use a better compiler like ecj
+    for now (found in the ecj-bootstrap package).
+  * Disable biarch setup in cross compilers (Josh Triplett). Closes: #333952.
+  * Fix with_libnof logic for cross-compilations (Josh Triplett).
+    Closes: #333951.
+  * Depend on binutils (>= 2.16.1cvs20050902-1) on the alpha architecture.
+    Closes: #333954.
+  * On i386, build-depend on libc6-dev-amd64. Closes: #329108.
+  * (Build-)depend on glibc 2.3.5-5.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  2 Oct 2005 14:25:54 +0200
+
+gcc-4.0 (4.0.2-2) unstable; urgency=low
+
+  * Update to CVS 20051001, taken from the gcc-4_0-branch. Includes the
+    changes between 4.0.2 RC3 and the final 4.0.2 release, missing from
+    the upstream tarball. Remove patches applied upstream (gcc-c-decl,
+    pr23182, pr23043, pr23367, pr23891, pr21418, pr24018).
+  * On ix86 architectures run the testsuite for -march=i686 as well.
+  * Build libffi on the Hurd (closes: #328705).
+  * Add big-endian arm (armeb) support (Lennert Buytenhek). Closes: #330730.
+  * Update libjava xml to classpath CVS HEAD 20050930 (Michael Koch).
+  * Reapply patch to make -mieee the default on alpha-linux. Closes: #330826.
+  * Add workaround not to make libmudflap _start/_end not small data on
+    mips/mipsel, taken from CVS HEAD.
+  * Don't build the nof libraries on powerpc.
+  * Number crunching time on m68k, reenable gfortran on m68k-linux-gnu.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  1 Oct 2005 15:42:10 +0200
+
+gcc-4.0 (4.0.2-1) unstable; urgency=low
+
+  * GCC 4.0.2 release.
+  * lib64stdc++6: Set priority to optional.
+  * Fix bug in StreamSerializer, seen with eclipse-3.1 (Ubuntu 12744).
+    Backport from CVS HEAD, Michael Koch.
+  * Apply java patches, proposed for the 4.0 branch: PR java/24018,
+    PR libgcj/23182, PR java/19870, PR java/21844, PR libgcj/23367,
+    PR java/20338.
+  * Update the expect/pty test to actually call expect directly, rather
+    than test for the existence of PTYs, since a working expect is what
+    we really care about, not random device files (Adam Conrad).
+    Closes: #329715.
+  * Add build dependencies on lib64z1-dev.
+  * gcc-c-decl.dpatch: Fix C global decl handling regression in 4.0.2 from
+    4.0.1
+
+ -- Matthias Klose <doko@debian.org>  Thu, 29 Sep 2005 19:50:08 +0200
+
+gcc-4.0 (4.0.1-9) unstable; urgency=low
+
+  * Update to CVS 20050922, taken from the gcc-4_0-branch (4.0.2 RC3).
+  * Apply patches:
+    - Fix PR java/21418: Order of source files matters when compiling,
+      backported from mainline.
+    - Fix for PR 23043, backported form mainline.
+    - Proposed patch for #323016 (m68k only). Patch by Roman Zippel.
+  * libstdc++6: Tighten libstdc++ shlibs version to 4.0.1-9 (new symbol).
+  * Fail the build early, if the system doesn't have any pty devices
+    created in /dev. Needed for running the testsuite.
+  * Update hurd changes again (closes: #328973).
+
+ -- Matthias Klose <doko@debian.org>  Thu, 22 Sep 2005 07:28:18 +0200
+
+gcc-4.0 (4.0.1-8) unstable; urgency=medium
+
+  * Update to CVS 20050917, taken from the gcc-4_0-branch.
+    - Fix FTBFS for boost, introduced in 4.0.1-7 (closes: #328684).
+  * Fix PR java/23891, eclipse bootstrap.
+  * Set priority of gcc-4.0-hppa64 package to standard.
+  * Bump standards version to 3.6.2.
+  * Fix java wrapper script, mishandles command line options with arguments.
+    Patch from Olly Betts. Closes: #296456.
+  * Bump epoch of the lib32gcc1 package to the same epoch as for the the
+    libgcc1 and lib64gcc1 packages.
+  * Fix some lintian warnings.
+  * Build libffi on the Hurd (closes: #328705).
+  * For biarch builds, disable the testsuite for the non-default architecture
+    for runtime libraries, which are not built by default (libjava).
+  * Add gsfonts-x11 to Build-Depends-Indep to avoid warnings from doxygen.
+  * Install Ada .ali files read-only.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 17 Sep 2005 10:35:23 +0200
+
+gcc-4.0 (4.0.1-7) unstable; urgency=low
+
+  * Update to CVS 20050913, taken from the gcc-4_0-branch.
+    - Fix PR c++/19004, ICE in uses_template_parms (closes: #284777).
+    - Fix PR rtl-optimization/23454, ICE in invert_exp_1 on sparc.
+      Closes: #321215.
+    - Fix PR libstdc++/23417, make bits/stl_{list,tree}.h -Weffc++ clean.
+      Closes: ##322170.
+  * Install 'altivec.h' on ppc64 (closes: #323945).
+  * Install locale data with the versioned package name (closes: #321591).
+  * Fix fastjar build without building libjava.
+  * On hppa, don't build using gcc-3.3 when ada is disabled.
+  * On m68k, don't build the stage1 compiler using -O.
+
+  * Ludovic Brenta <ludovic@ludovic-brenta.org>
+    - Allow the choice whether or not to build with NLS.
+    - Fix a typo whereby libffi was always enabled on i386.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 13 Sep 2005 23:23:11 +0200
+
+gcc-4.0 (4.0.1-6) unstable; urgency=low
+
+  * Update to CVS 20050821, taken from the gcc-4_0-branch.
+    - debian/patches/pr21562.dpatch: Removed, applied upstream.
+    - debian/patches/libjava-awt-name.dpatch: Updated.
+    - debian/patches/classpath-20050618.dpatch: Updated.
+  * Use all available CPU's for the check target, unless USE_NJOBS == no.
+  * debian/patches/biarch-include.dpatch: Include
+    /usr/local/include/<arch>-linux-gnu before including /usr/local/include.
+  * Fix biarch system include directories for the non-default architecture.
+  * Prefer gnat-4.0 over gnat-3.4 over gnat-3.3 as a build-dependency.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 18 Aug 2005 18:36:23 +0200
+
+gcc-4.0 (4.0.1-5) unstable; urgency=low
+
+  * Update to CVS 20050816, taken from the gcc-4_0-branch.
+    - Fix PR middle-end/23369, wrong code generation for funcptr comparison
+      on hppa. Closes: #321785.
+    - Fix PR fortran/23368 ICE with NAG routines (closes: #322912).
+  * Build-depend on libcairo2-dev (they say, that's the final package name ...)
+  * libgcj: Search /usr/lib/gcj-4.0 for dlopened libraries, place a copy
+    of the .la files in the libgcj6 package into this directory.
+    Closes: #322576.
+  * Tighten the dependencies between the compiler packages to the same
+    version and release. Use some substitution variables for control file
+    generation.
+  * Remove build dependencies for gpc.
+  * Don't use '/emul/ia32-linux' on ppc64 (closes: #322890).
+  * Synchronize with Ubuntu.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 16 Aug 2005 22:45:47 +0200
+
+gcc-4.0 (4.0.1-4ubuntu1) breezy; urgency=low
+
+  * Jeff Bailey <jbailey@ubuntu.com>
+
+    Enable i386 biarch using biarch glibc (not yet enabled for unstable).
+    - debian/rules.d/binary-libgcc.mk: Make i386 lib64gcc1 depend on
+      libc6-amd64
+    - debian/control.m4: Suggest libc6-amd64 rather than amd64-libs.
+    - debian/rules.conf: Build-Dep on libc6-dev-amd64 [i386]
+      Build-Dep on binutils >= 2.16.1-2ubuntu3
+    - debian/rules2: Enable biarch build in Ubuntu.
+
+  * Matthias Klose <doko@ubuntu.com>
+
+    - Add shlibs file and dependency information for the lib32gcc1 package.
+    - debian/patches/gcc-textdomain.dpatch: Update (closes: #321591).
+    - Set priority of gcc-4.0-base and libstdc++6 packages to `required'.
+      Closes: #321016.
+    - libffi-hppa.dpatch: Remove, applied upstream.
+
+ -- Matthias Klose <doko@debian.org>  Mon,  8 Aug 2005 19:39:02 +0200
+
+gcc-4.0 (4.0.1-4) unstable; urgency=low
+
+  * Enable the biarch compiler for powerpc (closes: #268023).
+  * Update to CVS 20050806, taken from the gcc-4_0-branch.
+  * Build depend on libcairo0.6.0-dev (closes: #321540).
+  * Fix Ada build on the hurd (closes: #321350).
+  * Update libffi for mips (Thiemo Seufer). Closes: #321100.
+  * Fix segfault on 64bit archs in the AWT Gtk peer library (Dan Frazier).
+    Closes: #320915.
+  * Add libXXgcc1 build dependencies for biarch builds.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  7 Aug 2005 07:01:59 +0000
+
+gcc-4.0 (4.0.1-3) unstable; urgency=medium
+
+  * Update to CVS 20050725, taken from the gcc-4_0-branch.
+    - Fix ICE with -O and -mno-ieee-fp/-ffast-math (closes: #319087).
+  * Synchronize with Ubuntu.
+  * Fix applying hurd specific patches for the hurd build (closes: #318443).
+  * Do not build-depend on libmpfr-dev on architectures, where fortran
+    is not built.
+  * Apply biarch include patch on ppc64 as well (closes: #318603).
+  * Correct libstdc++-dev package description (closes: #319082).
+  * debian/rules.defs: Replace DEB_TARGET_GNU_CPU with DEB_TARGET_ARCH_CPU.
+  * gcc-4.0-hppa64: Rename hppa64-linux-gcc to hppa64-linux-gnu-gcc.
+    Closes: #319818.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 25 Jul 2005 10:43:06 +0200
+
+gcc-4.0 (4.0.1-2ubuntu3) breezy; urgency=low
+
+  * Update to CVS 20050720, taken from the gcc-4_0-branch.
+    - Fix PR22278, volatile issues, seen when building xorg.
+  * Build against new libcairo1-dev (0.5.2).
+
+ -- Matthias Klose <doko@debian.org>  Wed, 20 Jul 2005 12:29:50 +0200
+
+gcc-4.0 (4.0.1-2ubuntu2) breezy; urgency=low
+
+  * Acknowledge that i386 biarch builds still need to be fixed for glibc-2.3.5.
+
+ -- Matthias Klose <doko@ubuntu.com>  Tue, 19 Jul 2005 08:29:30 +0000
+
+gcc-4.0 (4.0.1-2ubuntu1) breezy; urgency=low
+
+  * Synchronize with Debian.
+  * Update to CVS 20050718, taken from the gcc-4_0-branch.
+    - Fix PR c++/22132 (closes: #318488), upcasting a const class pointer
+      to struct the class derives from generates wrong code.
+  * Build biarch runtime libraries for Fortran and ObjC.
+  * Apply proposed patch for PR22309 (crash with mt_allocator if libstdc++
+    is dlclosed). Closes: #293466.
+
+ -- Matthias Klose <doko@ubuntu.com>  Mon, 18 Jul 2005 17:10:18 +0200
+
+gcc-4.0 (4.0.1-2) unstable; urgency=low
+
+  * Don't apply the patch to make -mieee the default on alpha-linux-gnu.
+    Causes the bootstrap to fail on alpha-linux-gnu.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 12 Jul 2005 00:14:12 +0200
+
+gcc-4.0 (4.0.1-1) unstable; urgency=high
+
+  * GCC 4.0.1 final release.  See /usr/share/doc/gcc-4.0/NEWS.{gcc,html}.
+  * Build fastjar on mips/mipsel, fix fastjar build without building java.
+  * Disable the comparision check on unstable/ia64. adaint.o differs,
+    currently cannot be reproduced with glibc-2.3.5 and binutils-2.16.1.
+  * libffi/hppa: Fix handling of 3 and 5-7 byte struct returns.
+  * amd64: Fix libgcc symlinks to point to /usr/lib32, instead of /lib32.
+  * On powerpc, don't build with -j >1, apparently doesn't succeeds
+    on the Debian buildd.
+  * Apply revised patch to make -mieee the default on alpha-linux,
+    and add -mieee-disable switch to turn the default off (Tyson Whitehead).
+  * Disable multiarch-includes; redo biarch-includes to include the paths
+    for the non-default biarch, when called with -m32/-m64.
+  * Move new java headers from libstdc++-dev to libgcj-dev, add replaces
+    line.
+  * Update classpath patch to work with cairo-0.5.1. Patch provided by
+    Michael Koch.
+  * Further classpath updates for gnu.xml and javax.swing.text.html.
+    Patch provided by Michael Koch.
+  * Require binutils (>= 2.16.1) as a build dependency and a dependency.
+  * On i386, require amd64-libs-dev (>= 1.2).
+  * Update debian/NEWS.{html,gcc}.
+
+  * Closing bug reports reported against older gcc versions (some of them
+    still present in Debian, but not anymore as the default compiler).
+    Usually, forwarded bug reports are linked to
+        http://gcc.gnu.org/PR<upstream bug number>
+    The upstream bug number usually can be found in the Debian reports.
+
+  * Closed reports reported against gcc-3.3 and fixed in gcc-3.4:
+    - General:
+      + PR rtl-optimization/2960: Duplicate loop conditions even with -Os
+        Closes: #94701.
+      + PR optimization/3995: i386 optimisation: joining tests.
+        Closes: #105309.
+      + PR rtl-optimization/11635: Unnecessary store onto stack, more
+        curefully expand union cast (closes: #202016).
+      + PR target/7618: vararg disallowed in virtual function. Closes: #205404.
+      + Large array problem on 64 bit platforms (closes: #209152).
+      + Mark more strings as translatable (closes: #227129).
+      + PR gcc/14711: ICE when compiling a huge source file Closes: #234711.
+      + Better code generation for if(!p) return NULL;return p;
+        Closes: #242318.
+      + PR rtl-optimization/16152: Perl ftbfs on {ia64,arm,m68k}-linux.
+        Closes: #255801.
+      + ICE (segfault) while compiling Linux 2.6.9 (closes: #277206).
+      + Link error building memtest (closes: #281445).
+    - Ada:
+      + PR ada/12450: Constraint error for valid input (closes: #210844).
+      + PR ada/13620: miscompilation of array initializer with
+        -O3 -fprofile-arcs. Closes: #226244.
+    - C:
+      + PR c/6897: Code produced with -fPIC reserves EBX, but compiles
+        bad __asm__ anyway (closes: #73065).
+      + PR c/9209: On i386, gcc-3.0 allows $ in indentifiers but not the asm.
+        Closes: #121282.
+      + PR c/11943: Accepts invalid declaration "int x[2, 3];" in C99 mode.
+        Closes: #177303.
+      + PR c/11942: restrict keyword broken in C99 mode. Closes: #187091.
+      + PR other/11370: -Wunreachable-code gives false complaints.
+        Closes: #196600.
+      + PR c/11369: Too relaxed checking with -Wstrict-prototypes.
+        Closes: #197504.
+      + PR c/11445: False positive warning with -Wunreachable-code.
+        Closes: #200140.
+      + PR c/11459: -stdc=c90 -pedantic warns about C90's non long-long
+         support when in C99 mode. Closes: #200392.
+      + PR c/456: Handling of constant expressions. Closes: #225935.
+      + ICE on invalid #define with -traditional (closes: #242916).
+      + No warning when initializing a variable with itself, new option
+        -Winit-self (closes: #293957).
+    - C++:
+      + C++ parse error (closes: #42946).
+      + PR libstdc++/9073: Replacement for __STL_ASSERTIONS (libstdc++v3
+        debug mode). Closes: #128993.
+      + Parse errors in nested constructor calls (closes: #138561).
+      + PR optimization/1823: -ftrapv aborts with pointer difference due to
+        division optimization. Closes: #169862.
+      + ICE on invalid code (closes: #176101).
+      + PR c++/10199: ICE handling method parametrized by template.
+        Closes: #185604.
+      + High memory usage building packages OpenOffice.org and MythTV.
+        Closes: #194345, #194513.
+      + Improved documentation of std::lower_bound (closes: #196380).
+      + ICE in regenerate_decl_from_template (closes: #197674).
+      + PR c++/11444: Function fails to propagate up class tree
+        (template-related).  Closes: #198042.
+      + ICE when using namespaced typedef of primitive type as struct.
+        Closes: #198261.
+      + Bug using streambuf / iostream to read from a named pipe.
+        Closes: #216105.
+      + PR c++/11437: ICE in lookup_name_real (closes: #200011).
+      + Add large file support (LFS) in libstdc++ (closes: #220000).
+      + PR c++/13621: ICE compiling a statement expression returning type
+        string (closes: #224413).
+      + g++ doesn't find inherited inner class after template instantiation.
+        Closes: #227518.
+      + PR libstdc++/13928: Add whatis info in man pages generated by doxygen.
+        Closes: #229642.
+      + Missing symbol _M_setstate in libstdc++ (closes: #232709).
+      + Unable to parse declaration of inline constructor explicit
+        specialization (closes: #234709).
+      + ICE (segfault) on invalid C++ code (closes: #246031).
+      + ICE in lookup_tempate_function (closes: #262441).
+      + Undefined symbols in libstdc++, when using specials char_traits.
+        Closes: #266110.
+      + PR libstdc++/16011: Outputting numbers with ostream in the locale fr_BE
+        causes infinite recursion (closes: #270795).
+      + ICE in tree_low_cst (closes: #276291).
+      + ICE in in expand_call (closes: #283503).
+      + typeof operator is misparsed in a template function (closes: #288555).
+      + ICE in tree_low_cs (closes: #291374).
+      + Improve uninformative error messages (closes: #292961, #293076).
+      + ICE on array initialization (closes: #294560).
+      + Failure to build xine-lib with -finline-functions (closes: #306854).
+    - Java:
+      + Fix error finding files in subdirectories (closes: #195480).
+      + Implement java.text.CollationElementIterator lacks getOffset().
+        Closes: #259789.
+    - Treelang:
+      + Pointer truncation on 64bit architectures (closes: #308367).
+    - Architecture specific:
+      - alpha
+        + PR debug/10695: ICE on alpha while building agistudio.
+          Closes: #192568.
+        + ICE when building fceu (closes: #228018, #252764).
+      - amd64
+        + Miscompilation of Objective-C code (closes: #250174).
+        + g++ hangs compiling k3d on amd64 (closes: #285364).
+      - arm
+        + PR target/19008: gcc -O3 -fPIC produces wrong code via auto inlining.
+          Closes: #285238.
+      - i386
+        + PR target/4106: i386 -fPIC asm ebx clobber no error.
+          Closes: #153472.
+        + PR target/10984: x86/sse2 ICEs on vector intrinsics. Closes: #166940.
+        + Wrong code generation on at least ix86 (closes: #275655).
+      - m68k
+        + PR target/9201: ICE compiling octave-2.1 (closes: #175478).
+        + ICE in verify_initial_elim_offsets (closes: #204407, #257012).
+        + g77 generates invalid assembly code (closes: #225621).
+        + ICE in verify_local_live_at_start (closes #245584).
+      - powerpc
+        + PR optimization/12828: -floop-optimize is unstable on PowerPC (float
+          to int conversion problem). Closes: #218219.
+        + PR target/13619: ICE building altivec code in ffmpeg.
+          Closes: #226148.
+        + PR target/20046: Miscompilation of bind 9.3.0. Closes: #292958.
+      - sparc
+        + ICE (segfault) while building atlas3 on sparc32 (closes: #249108).
+        + Wrong optimization on sparc32 when building linux kernel.
+          Closes: #254626.
+
+  * Closed reports reported against gcc-3.3 or gcc-3.4 and fixed in gcc-4.0:
+    - General:
+      + PR rtl-optimization/6901: Optimizer improvement (removing unused
+        local variables). Closes: #67206.
+      + PR middle-end/179: Failure to detect use of unitialized variable
+        with -O -Wall. Closes: #117765.
+      + ICE building glibc's nptl on amd64 (closes: #260710, #307993).
+      + PR middle-end/17827: ICE in make_decl_rtl. Closes: #270854.
+      + PR middle-end/21709: ICE on compile-time complex NaN. Closes: #305344.
+    - Ada:
+      + PR ada/10889: Convention Fortran matrices mishandled in generics.
+        Closes: #192135.
+      + PR ada/13897: Implement tasking on powerpc. Closes: #225346.
+    - C:
+      + PR c/13072: Bogus warning with VLA in switch. Closes: #218803.
+      + PR c/13519: typeof(nonconst+const) is const. Closes: #208981.
+      + PR c/12867: Incorrect warning message (void format, should be void*
+        format). Closes: #217360.
+      + PR c/16066: PR 16066] i386 loop strength reduction bug.
+        Closes: #254659.
+    - C++:
+      + PR c++/13518: -Wnon-virtual-dtor doesn't always work. Closes: #212260.
+      + PR translation/16025: ICE with unsupported locale(closes: #242158).
+      + PR c++/15125: -Wformat doesn't warn for different types in fprintf.
+        Closes: #243507.
+      + PR c++/15214: Warn only if the dtor is non-private or the class has
+        friends. (closes: #246639).
+      + PR libstdc++/17218: Unknown subjects in generated libstdc++ manpages.
+        Closes: #262934.
+      + PR libstdc++/17223: Missing .so references in generated libstdc++
+        manpages. Closes: #262956.
+      + libstdc++-doc: Improve man pages (closes: #280910).
+      + PR c++/19006: ICE in tree_low_cst. Closes: #285692.
+      + g++ does not check arguments to fprintf. Closes: #281847.
+    - Java:
+      + PR java/7304: gcj ICE (closes: #152501).
+      + PR libgcj/7305: Installation of headers not directly in /usr/include.
+        Closes: #195483.
+      + PR libgcj/11941: libgcj timezone handling (closes: #203212).
+      + PR java/14709: gcj fails to wait for its child processes on exec().
+        Closes: #238432.
+      + PR libgcj/21703: gcj hangs when rapidly calling String.intern().
+        Closes: #275547.
+      + SocketChannel.get(ByteBuffer) returns 0 at EOF. Closes: #281602.
+      + PR java/19711: gcj segfaults instead of reporting the ambiguous
+        expression. Closes: #286715.
+      + Static libgcj contains repeated archive members (closes: #298263).
+    - Architecture specific:
+      - alpha
+        + Unaligned accesses with ?-operator (closes: #301983).
+      - arm
+        + Compilation error of glibc-2.3.4 on arm (closes: #298508).
+      - m68k
+        + ICE in add_insn_before (closes: #248432).
+      - mips
+        + Fix o32 ABI breakage in gcc 3.3/3.4 (closes: #270620).
+      - powerpc
+        + ICE in extract_insn (closes: #311128).
+
+  * Closing bug reports as wontfix:
+    - g++ defines _GNU_SOURCE when using the libstdc++ header files.
+      Behaviour did change since 3.0. Closes: #126703, #164872.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  9 Jul 2005 17:10:54 +0000
+
+gcc-4.0 (4.0.0ds2-12) unstable; urgency=high
+
+  * Update to CVS 20050701, taken from the gcc-4_0-branch.
+  * Apply proposed patch for MMAP configure fix; aka PR 19877. Backport
+    from mainline.
+  * Disable Fortran on m68k. Currently FTBFS.
+  * Split multiarch-include/lib patches. Update multiarch-include patch.
+  * Fix FTBFS of the hppa64-linux cross compiler. Don't add the
+    multiarch include dirs when cross compiling.
+  * Configure --with-java-home, as used by java-gcj-compat.
+    Closes: #315646.
+  * Make libgcj-dbg packages priority extra.
+  * Set the path of classmap.db to /var/lib/gcj-@gcc_version@.
+  * On m68k, do not create the default classmap.db in the gcj postinst.
+    See #312830.
+  * On amd64, install the 32bit libraries into /emul/ia32-linux/usr/lib.
+    Restore the /usr/lib32 symlink.
+  * On amd64, don't reference lib64, but instead lib (lib64 is a symlink
+    to lib). Closes: #293050.
+  * Remove references to build directories from the .la files.
+  * Make cpp-X.Y conflict with earlier versions of gcc-X.Y, g++-X.Y, gobjc-X.Y,
+    gcj-X.Y, gfortran-X.Y, gnat-X.Y, treelang-X.Y, if a path component in
+    the gcc library path changes (i.e. version or target alias).
+  * Disable Ada for sh3 sh3eb sh4 sh4eb.
+  * For gcj-4.0, add a conflict to libgcj4-dev and libgcj5-dev.
+    Closes: #316499.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  2 Jul 2005 11:04:35 +0200
+
+gcc-4.0 (4.0.0ds1-11) unstable; urgency=low
+
+  * debian/rules.defs: Disable Ada for alpha.
+  * debian/rules.conf: Fix typo in type-handling replacement code.
+  * Don't ship an empty libgcj6-dbg package.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 23 Jun 2005 09:03:21 +0200
+
+gcc-4.0 (4.0.0ds1-10) unstable; urgency=medium
+
+  * debian/patches/libstdc++-api-compat.dpatch: Apply proposed patch
+    to fix libstdc++ 3.4.5/4.0 compatibility.
+  * type-handling output became insane. Don't use it anymore.
+  * Drop the reference to the stl-manual package (closes: #314983).
+  * Disable java on GNU/kFreeBSD targets, requested by Robert Millan.
+    Closes: #315140.
+  * Terminate the acats-killer process, even if the build is aborted
+    by the user (closes: #314405).
+  * debian/rules.defs: Define DEB_TARGET_ARCH_{OS,CPU}.
+  * Start converting the use of DEB_*_GNU_* to DEB_*_ARCH_* in the build
+    files.
+  * Do not configure with --enable-gtk-cairo. Needs newer gtk. Drop
+    build dependency on libcairo-dev.
+  * Fix setting of the system header directory for the hurd (Michael Banck).
+    Closes: #315386.
+  * Fix FTBFS on hurd-i386: MAXPATHLEN issue (Michael Banck). Closes: #315384.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 22 Jun 2005 19:45:50 +0200
+
+gcc-4.0 (4.0.0ds1-9ubuntu2) breezy; urgency=low
+
+  * Fix version number in libgcj shlibs file.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sun, 19 Jun 2005 10:34:02 +0200
+
+gcc-4.0 (4.0.0ds1-9ubuntu1) breezy; urgency=low
+
+  * Update to 4.0.1, release candidate 2.
+  * libstdc++ shlibs file: Require 4.0.0ds1-9ubuntu1 as minimum version.
+  * Rename libawt to libgcjawt to avoid conflicts with other
+    libawt implementations (backport from HEAD).
+  * Update classpath awt, swing and xml parser for HTML support in swing.
+    Taken from classpath CVS HEAD 2005-06-18. Patch provided by Michael Koch.
+  * Remove the libgcj-buffer-strategy path, part of the classpath update.
+  * libgcj shlibs file: Require 4.0.0ds1-9ubuntu1 as minimum version.
+  * Require cairo-0.5 as build dependency.
+  * gij-4.0: Provide java1-runtime.
+  * gij-4.0: Provide an rmiregistry alternative (using grmiregistry-4.0).
+  * gcj-4.0: Provide an rmic alternative (using grmic-4.0).
+  * libgcj6-dev conflicts with libgcj5-dev, libgcj4-dev, not libgcj6.
+    Closes: #312741.
+  * libmudflap-entry-point.dpatch: Correct name of entry point on mips/mipsel.
+  * Apply proposed patch for PR 18421 and PR 18719 (m68k only).
+  * Apply proposed path for PR 21562.
+  * Add build dependency on dpkg (>= 1.13.7).
+  * On linux systems, configure for <cpu>-linux-gnu.
+  * Configure the hppa64 cross compiler to target hppa64-linux-gnu.
+  * (Build-)depend on binutils-2.16.1.
+  * libstdc{32,64}++6-4.0-dbg: Depend on libstdc++6-4.0-dev.
+  * gnat-4.0: only depend on libgnat, when a shared libgnat is built.
+  * gfortran-4.0: Depend on libgmp3c2 | libgmp3.
+  * On hppa, explicitely use gcc-3.3 as a build dependency in the case
+    that Ada is disabled.
+  * libmudflap: Always build the library for the non-default biarch
+    architecture, or else the test results show link failures.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sat, 18 Jun 2005 00:42:55 +0000
+
+gcc-4.0 (4.0.0-9) unstable; urgency=low
+
+  * Upload to unstable.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 25 May 2005 19:02:20 +0200
+
+gcc-4.0 (4.0.0-8ubuntu3) breezy; urgency=low
+
+  * debian/control: Regenerate.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sat,  4 Jun 2005 10:56:27 +0200
+
+gcc-4.0 (4.0.0-8ubuntu2) breezy; urgency=low
+
+  * Fix powerpc-config-ml patch.
+
+ -- Matthias Klose <doko@ubuntu.com>  Fri,  3 Jun 2005 15:47:52 +0200
+
+gcc-4.0 (4.0.0-8ubuntu1) breezy; urgency=low
+
+  * powerpc biarch support:
+    - Enable powerpc biarch support, build lib64gcc1 on powerpc.
+    - Add patch to disable libstdc++'s configure checking, if it can't run
+      64bit binaries on 32bit kernels (Sven Luther).
+    - Apply the same patch to the other runtime librararies as well.
+    - Run the testsuite with -m64, if we can execute 64bit binaries.
+    - Add libc6-dev-ppc64 as build dependency for powerpc.
+  * 32bit gcj libs for amd64.
+  * debian/logwatch.sh: Don't remove logwatch pid file on exit (suggested
+    by Ryan Murray).
+  * Update to CVS 20050603, taken from the gcc-4_0-branch.
+  * g++-4.0 provides c++abi2-dev.
+  * Loosen dependencies on packages of architecture `all' to not break
+    binary only uploads.
+  * Build libgfortran for biarch as well, else the testsuite will fail.
+
+ -- Matthias Klose <doko@ubuntu.com>  Fri,  3 Jun 2005 13:38:19 +0200
+
+gcc-4.0 (4.0.0-8) experimental; urgency=low
+
+  * Synchronize with Ubuntu.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 23 May 2005 01:56:28 +0000
+
+gcc-4.0 (4.0.0-7ubuntu7) breezy; urgency=low
+
+  * Fix build failures for builds with disabled testsuite.
+  * Adjust debian/rules conditionals to work with all dpkg versions.
+  * Build separate lib32stdc6-4.0-dbg/lib64stdc6-4.0-dbg packages.
+  * Add the debugging symbols of the optimzed libstdc++ build in the
+    lib*stdc++6-dbg packages as well.
+  * Build a libgcj6-dbg package.
+  * Update to CVS 20050522, taken from the gcc-4_0-branch.
+  * Add Ada support for the ppc64 architecture (Andreas Jochens):
+    * debian/patches/ppc64-ada.dpatch
+      - Add gcc/ada/system-linux-ppc64.ads, which has been copied from
+        gcc/ada/system-linux-ppc.ads and changed to use 'Word_Size' 64
+        instead of 32.
+      - gcc/ada/Makefile.in: Use gcc/ada/system-linux-ppc64.ads on powerpc64.
+    * debian/rules.patch
+      - Use ppc64-ada patch on ppc64.
+    * debian/rules.d/binary-ada.mk
+      Place the symlinks libgnat.so, libgnat-4.0.so, libgnarl.so,
+      libgnarl-4.0.so in '/usr/lib' instead of '<gcc_lib_dir>/adalib'.
+    Closes: #308948.
+  * Add libc6-dev-i386 as an alternative build dependency for amd64.
+    Closes: #305690.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sun, 22 May 2005 22:14:20 +0200
+
+gcc-4.0 (4.0.0-7ubuntu6) breezy; urgency=low
+
+  * Don't trust dpkg-architecture (1.13.4), it "hurds" ...
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed, 18 May 2005 11:36:38 +0200
+
+gcc-4.0 (4.0.0-7ubuntu5) breezy; urgency=low
+
+  * libgcj6-dev: Don't provide libgcj-dev.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed, 18 May 2005 00:30:32 +0000
+
+gcc-4.0 (4.0.0-7ubuntu4) breezy; urgency=low
+
+  * Update to CVS 20050517, taken from the gcc-4_0-branch.
+  * Apply proposed patch for PR21293.
+
+ -- Matthias Klose <doko@ubuntu.com>  Tue, 17 May 2005 23:05:40 +0000
+
+gcc-4.0 (4.0.0-7ubuntu2) breezy; urgency=low
+
+  * Update to CVS 20050515, taken from the gcc-4_0-branch.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sun, 15 May 2005 23:48:00 +0200
+
+gcc-4.0 (4.0.0-7ubuntu1) breezy; urgency=low
+
+  * Synchronize with Debian.
+
+ -- Matthias Klose <doko@ubuntu.com>  Mon,  9 May 2005 19:35:29 +0200
+
+gcc-4.0 (4.0.0-7) experimental; urgency=low
+
+  * Update to CVS 20050509, taken from the gcc-4_0-branch.
+  * Remove the note from the fastjar package description, stating, that
+    fastjar is incomplete compared to the "standard" jar utility.
+  * Fix typo in build depends. dpkg-checkbuilddeps doesn't like a comma
+    inside [].
+  * Tighten shlibs dependencies to require the current version.
+
+ -- Matthias Klose <doko@debian.org>  Mon,  9 May 2005 19:02:03 +0200
+
+gcc-4.0 (4.0.0-6) experimental; urgency=low
+
+  * Update to CVS 20050508, taken from the gcc-4_0-branch.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  8 May 2005 14:08:28 +0200
+
+gcc-4.0 (4.0.0-5ubuntu1) breezy; urgency=low
+
+  * Temporarily disable the i386 biarch build. Remove the amd64-libs-dev
+    build dependency, add (build-)conflict (<= 1.1ubuntu1).
+
+ -- Matthias Klose <doko@ubuntu.com>  Sat,  7 May 2005 16:56:21 +0200
+
+gcc-4.0 (4.0.0-5) breezy; urgency=low
+
+  * gnat-3.3 and gnat-4.0 are alternative build dependencies (closes: #308002).
+  * Update to CVS 20050507, taken from the gcc-4_0-branch.
+  * gcj-4.0: Install gjnih.
+  * Add libgcj buffer strategy framework (Thomas Fitzsimmons), needed for OOo2.
+    Backport from 4.1.
+  * Fix all lintian errors and most of the warnings.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sat,  7 May 2005 12:26:15 +0200
+
+gcc-4.0 (4.0.0-4) breezy; urgency=low
+
+  * Still prefer gnat-3.3 over gnat-4.0 as a build dependency.
+
+ -- Matthias Klose <doko@ubuntu.com>  Fri,  6 May 2005 22:30:43 +0200
+
+gcc-4.0 (4.0.0-3) breezy; urgency=low
+
+  * Update to CVS 20050506, taken from the gcc-4_0-branch.
+  * Update priority of java alternatives to 40.
+  * Move gcj-dbtool to gij package, move the default classmap.db to
+    /var/lib/gcj-4.0/classmap.db. Create it in the postinst.
+  * Fix gcc-4.0-hppa64 postinst (closes: #307762).
+  * Fix gcc-4.0-hppa64, gij-4.0 and gcj-4.0 postinst, to not ignore errors
+    from update-alternatives.
+  * Fix gcc-4.0-hppa64, fastjar, gij-4.0 and gcj-4.0 prerm,
+    to not ignore errors from update-alternatives.
+
+ -- Matthias Klose <doko@ubuntu.com>  Fri,  6 May 2005 17:50:58 +0200
+
+gcc-4.0 (4.0.0-2) experimental; urgency=low
+
+  * GCC 4.0.0 release.
+  * Update to CVS 20050503, taken from the gcc-4_0-branch.
+  * Add gnat-4.0 as an alternative build dependency (closes: #305690).
+
+ -- Matthias Klose <doko@debian.org>  Tue,  3 May 2005 15:41:26 +0200
+
+gcc-4.0 (4.0.0-1) experimental; urgency=low
+
+  * GCC 4.0.0 release.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 24 Apr 2005 11:28:42 +0200
+
+gcc-4.0 (4.0ds11-0pre11) breezy; urgency=low
+
+  * CVS 20050413, taken from the gcc-4_0-branch.
+  * Add proposed patches for PR20126, PR20490, PR20929.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed, 13 Apr 2005 09:43:00 +0200
+
+gcc-4.0 (4.0ds10-0pre10) experimental; urgency=low
+
+  * gcc-4.0.0-20050410 release candidate 1, built from the prerelease tarball.
+    - C++ fix for "optimizer breaks function inlining". Closes: #302989.
+  * Append the GCC version to the fastjar/grepjar version string.
+  * Use short file names in the libstdc++ docs (closes: #301140).
+  * Fix libstdc++-dbg dependencies (closes: #303866).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 11 Apr 2005 13:16:01 +0200
+
+gcc-4.0 (4.0ds9-0pre9) experimental; urgency=low
+
+  * CVS 20050326, taken from the gcc-4_0-branch.
+  * Reenable Ada on ia64.
+  * Build libgnat on hppa, sparc, s390 again.
+  * ppc64 support (Andreas Jochens):
+    * debian/control.m4
+      - Add libc6-dev-powerpc [ppc64] to the Build-Depends.
+      - Change the Description for lib32gcc1: s/ia32/32 bit Version/
+    * debian/rules.defs
+      - Define 'biarch_ia32' for ppc64 to use the same 32 bit multilib
+        facilities as amd64.
+    * debian/rules.d/binary-gcc.mk
+      - Correct an error in the 'files_gcc' definition for biarch_ia32
+        (replace '64' by '32').
+    * debian/rules2
+      - Do not use '--disable-multilib' on powerpc64-linux.
+        Use '--disable-nof --disable-softfloat' instead.
+    * debian/rules.d/binary-libstdcxx.mk
+      - Put the 32 bit libstdc++ files in '/usr/lib32'.
+    * debian/rules.patch
+      - Apply 'ppc64-biarch' patch on ppc64.
+    * debian/patches/ppc64-biarch.dpatch
+      - MULTILIB_OSDIRNAMES: Use /lib for native 64 bit libraries and
+        /lib32 for 32 bit libraries.
+      - Add multilib handling to src/config-ml.in (taken from
+        amd64-biarch.dpatch).
+  * Rename biarch_ia32 to biarch32, as suggsted by Andreas.
+  * Use /bin/dash on hppa.
+  * Reenable the build of the hppa64 compiler.
+  * Enable parallel builds by defaults (set environment variale USE_NJOBS=no
+    or USE_NJOBS=<number> to modify the default, which is to use the
+    number of available processors).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 26 Mar 2005 19:07:30 +0100
+
+gcc-4.0 (4.0ds8-0pre8) experimental; urgency=low
+
+  * CVS 20050322, taken from the gcc-4_0-branch.
+    - Add proposed fix for PR19406.
+  * Configure --with-gtk-cairo only if version 0.3.0 is found.
+  * Split out gcc-4.0-locales package. Better chance of getting
+    bug reports in english language.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 22 Mar 2005 14:20:24 +0100
+
+gcc-4.0 (4.0ds7-0pre7) experimental; urgency=low
+
+  * CVS 20050304, taken from the gcc-4_0-branch.
+  * Build the treelang compiler.
+
+ -- Matthias Klose <doko@debian.org>  Fri,  4 Mar 2005 21:29:56 +0100
+
+gcc-4.0 (4.0ds6-0pre6ubuntu6) hoary; urgency=low
+
+  * Fix lib32gcc1 symlink on amd64. Ubuntu #7099.
+
+ -- Matthias Klose <doko@ubuntu.com>  Thu,  3 Mar 2005 00:17:26 +0100
+
+gcc-4.0 (4.0ds6-0pre6ubuntu5) hoary; urgency=low
+
+  * Add patch from PR20160, avoid creating archives with components
+    that have duplicate basenames.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed,  2 Mar 2005 14:22:04 +0100
+
+gcc-4.0 (4.0ds6-0pre6ubuntu4) hoary; urgency=low
+
+  * CVS 20050301, taken from the gcc-4_0-branch.
+    Test builds on i386, amd64, powerpc, ia64, check libgcc_s.so.1.
+  * Add fastjar-4.0 binary and manpage. Some java packages append it
+    for all java related tools.
+  * Add libgcj6-src package for source code availability in IDE's.
+  * On hppa, disable the build of the hppa64 cross compiler, disable
+    java, disable running the testsuite (request by Lamont).
+  * On amd64, lib32gcc1 replaces ia32-libs.openoffice.org (<< 1ubuntu3).
+  * Build-Depend on libcairo1-dev, configure with --enable-gtk-cairo.
+    Work around libtool problems install libjawt.
+    Install jawt header files in libgcj6-dev.
+  * Add workaround for PR debug/19769.
+
+ -- Matthias Klose <doko@ubuntu.com>  Tue,  1 Mar 2005 11:26:19 +0100
+
+gcc-4.0 (4.0ds5-0pre6ubuntu3) hoary; urgency=low
+
+  * Drop libgmp3-dev (<< 4.1.4-3) as an alterntative build dependency.
+
+ -- Matthias Klose <doko@ubuntu.com>  Thu, 10 Feb 2005 15:16:27 +0100
+
+gcc-4.0 (4.0ds5-0pre6ubuntu2) hoary; urgency=low
+
+  * Disable Ada for powerpc.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed,  9 Feb 2005 16:47:07 +0100
+
+gcc-4.0 (4.0ds5-0pre6ubuntu1) hoary; urgency=low
+
+  * Avoid build dependency on type-handling.
+  * Install 32bit libs on amd64 in /lib32 and /usr/lib32.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed,  9 Feb 2005 08:27:21 +0100
+
+gcc-4.0 (4.0ds5-0pre6) experimental; urgency=low
+
+  * gcc-4.0 snapshot, taken from the HEAD branch CVS 20050208.
+  * Build-depend on graphviz (moved to main), remove the pregenerated
+    libstdc++ docs from the diff.
+  * Fix PR19162, libobjc build failure on arm-linux (closes: #291497).
+
+ -- Matthias Klose <doko@debian.org>  Tue,  8 Feb 2005 11:47:31 +0000
+
+gcc-4.0 (4.0ds4-0pre5) experimental; urgency=low
+
+  * gcc-4.0 snapshot, taken from the HEAD branch CVS 20050125.
+  * Call the 4.0 gcx versions in the java wrappers (closes: #291075).
+  * Correctly install libgij (closes: #291077).
+  * libgcj6-dev: Add conflicts to other libgcj-dev packages (closes: #290950).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 24 Jan 2005 23:59:54 +0100
+
+gcc-4.0 (4.0ds3-0pre4) experimental; urgency=low
+
+  * gcc-4.0 snapshot, taken from the HEAD branch CVS 20050115.
+  * Update cross build patches (Nikita V. Youshchenko).
+  * Enable Ada on i386, amd64, mips, mipsel, powerpc, sparc, s390.
+    Doesn't yet bootstrap on alpha, hppa, ia64.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 15 Jan 2005 18:44:03 +0100
+
+gcc-4.0 (4.0ds2-0pre3) experimental; urgency=low
+
+  * gcc-4.0 snapshot, taken from the HEAD branch CVS 20041224.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 22 Dec 2004 00:31:44 +0100
+
+gcc-4.0 (4.0ds1-0pre2) experimental; urgency=low
+
+  * gcc-4.0 snapshot, taken from the HEAD branch CVS 20041205.
+  * Lot's of merges and updates from the gcc-3.4 packages.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 04 Dec 2004 12:14:51 +0100
+
+gcc-4.0 (4.0ds0-0pre1) experimental; urgency=low
+
+  * gcc-4.0 snapshot, taken from the HEAD branch CVS 20041114.
+    - Addresses many issues with the libstdc++ man pages (closes: #278549).
+  * Disable Ada on hppa, ia64, mips, mipsel, powerpc, s390 and sparc, at least
+    these are known to be broken at the time of the snapshot.
+  * Minor kbsd.gnu build fixes (Robert Millan). Closes: #273004.
+  * For amd64, add missing libstdc++ files to 'libstdc++6-dev' package.
+    (Andreas Jochens). Fixes: #274362.
+  * Update libffi-mips patch (closes: #274096).
+  * Updated i386-biarch patch. Don't build 64bit libstdc++, ICE.
+  * Update sparc biarch patch.
+  * Fix symlinks for gfortran manpage (closes: #278548).
+  * Update cross build patches (Nikita V. Youshchenko).
+  * Update Ada patches (Ludovic Brenta).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 13 Nov 2004 10:38:25 +0100
+
+gcc-4.0 (4.0-0pre0) experimental; urgency=low
+
+  * gcc-4.0 snapshot, taken from the HEAD branch CVS 20040912.
+
+  * Matthias Klose <doko@debian.org>
+
+    - Integrate accumulated packaging patches from gcc-3.4.
+    - Rename libstdc++6-* packages to libstdc++6-4-* (closes: #261693).
+    - libffi4-dev: conflict with libffi3-dev (closes: #265939).
+
+  * Robert Millan <rmh@debian.org>
+
+    * control.m4: 
+      - s/locale_no_archs !hurd-i386/locale_no_archs/g 
+        (This is now handled in rules.defs. [1]) 
+      - s/procps [check_no_archs]/procps [linux_gnu_archs]/g [2] 
+      - Add type-handling to build-deps. [3] 
+    * rules.conf: 
+      - Don't require (>= $(libc_ver)) for libc0.1-dev. [4] 
+      - Generate *_no_archs variables with type-handling and use them for 
+        for m4's -D parameters. [3] 
+    * rules.defs: 
+      - use filter instead of findstring [1]. 
+      - s/netbsd-elf-gnu/netbsdelf-gnu/g [5]. 
+      - enable java for kfreebsd-gnu [6] 
+      - enable ffi for kfreebsd-gnu and knetbsd-gnu [6] 
+      - enable libgc for kfreebsd-gnu [6] 
+      - enable checks for kfreebsd-gnu and knetbsd-gnu [7] 
+      - enable locales for kfreebsd-gnu and gnu [1] [8]. 
+    * Closes: #264025.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 12 Sep 2004 12:52:56 +0200
+
+gcc-3.5 (3.5ds1-0pre1) experimental; urgency=low
+
+  * gcc-3.5 snapshot, taken from the HEAD branch CVS 20040724.
+  * Install locale data with versioned package name (closes: #260497).
+  * Fix libgnat symlinks.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 24 Jul 2004 21:26:23 +0200
+
+gcc-3.5 (3.5-0pre0) experimental; urgency=low
+
+  * gcc-3.5 snapshot, taken from the HEAD branch CVS 20040718.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 18 Jul 2004 12:26:00 +0200
+
+gcc-3.4 (3.4.1-1) experimental; urgency=low
+
+  * gcc-3.4.1 final release.
+    - configured wth --enable-libstdcxx-allocator=mt.
+  * Fixes for generating cross compiler packages (Jeff Bailey).
+
+ -- Matthias Klose <doko@debian.org>  Fri,  2 Jul 2004 22:49:05 +0200
+
+gcc-3.4 (3.4.0-4) experimental; urgency=low
+
+  * gcc-3.4.1 release candidate 1.
+  * Add logic to build biarch compiler on powerpc (disabled, needs lib64c).
+  * Don't build the libg2c0 package on mipsel-linux (no clear answer on
+    debian-mips, if the libg2c0's built by gcc-3.3 and gcc-3.4 are compatible
+    (post-sarge issue).
+  * Don't use gcc-2.95 as bootstrap compiler on m68k anymore.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 26 Jun 2004 22:40:20 +0200
+
+gcc-3.4 (3.4.0-3) experimental; urgency=low
+
+  * Update to gcc-3.4 CVS 20040613.
+  * On sparc, set the the build target to sparc64-linux, build with
+    switch defaulting to code generation for v7. To generate code for
+    sparc64, use the -m64 switch.
+  * Add missing doc-base files to -doc packages.
+  * Add portability patches and kbsd-gnu patch (Robert Millan).
+    Closes: #251293, #251294.
+  * Apply fixes for cross build (Nikita V. Youshchenko).
+  * Do not include the precompiled libstdc++ header files into the -dev
+    package (still experimental). Closes: #251707.
+  * Reflect renaming of Ada user's guide.
+  * Move AWT peer libraries for libgcj into it's own package (fixes: #247791).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 14 Jun 2004 00:03:18 +0200
+
+gcc-3.4 (3.4.0-2) experimental; urgency=low
+
+  * Update to gcc-3.4 CVS 20040516.
+  * Do not provide the /usr/hppa64-linux/include in the gcc-hppa64 package,
+    migrated to libc6-dev. Adjust dependencies.
+  * Integrate gpc test results into the GCC test summary.
+  * gnatchop calls gcc-3.4 (closes: #245438).
+  * debian/locale-gen.sh: Update for recent libstdc+++ testsuite.
+  * debian/copyright: Add libstdc++-v3's exception clause.
+  * Add libffi update for mips (Thiemo Seufer).
+  * Reference Debian specific bug reporting instructions.
+  * Update README.Bugs.
+  * Fix FTBFS for libstdc++-doc.
+  * Update libjava patch for hppa (Randolph Chung).
+  * Fix installation of ffitarget.h header file.
+  * On amd64-linux, configure --without-multilib, disable Ada.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 16 May 2004 07:53:39 +0200
+
+gcc-3.4 (3.4.0-1) experimental; urgency=low
+
+  * gcc-3.4.0 final release.
+
+  * Why experimental?
+    - Do not interfer with packages currently built from gcc-3.3 sources,
+      i.e. libgcc1, libobjc1, libffi2, libffi2-dev, libg2c0.
+    - Biarch sparc compiler doesn't built yet.
+    - Use of configure flags affecting binary ABI's not yet determined.
+    - Several ABI bugs have been fixed. Unfortunately, these changes will break
+      binary compatibility with earlier releases on several architectures:
+      alpha, mips, sparc, 
+    - hppa and m68k changed sjlj based exception handling to dwarf2 based
+      exception handling.
+
+      See NEWS.html or http://gcc.gnu.org/gcc-3.4/changes.html for more
+      specific information.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 20 Apr 2004 20:54:56 +0200
+
+gcc-3.4 (3.4ds3-0pre4) experimental; urgency=low
+
+  * Update to gcc-3.4 CVS 20040403.
+  * Add gpc tarball, gpc patches for 3.4 (Waldek Hebisch).
+  * Reenable sparc-biarch patches (closes: #239856).
+  * Build the shared libgnat library, needed to fix FTBFS for some
+    Ada library packages (Ludovic Brenta).
+    Currently enabled for hppa, i386, ia64.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  3 Apr 2004 08:47:55 +0200
+
+gcc-3.4 (3.4ds1-0pre2) experimental; urgency=low
+
+  * Update to gcc-3.4 CVS 20040320.
+  * For libstdc++6-doc, add a conflict to libstdc++5-3.3-doc (closes: #236560).
+  * For libstdc++6-dbg, add a conflict to libstdc++5-3.3-dbg (closes: #236798).
+  * Reenable s390-biarch patches.
+  * Update the cross compiler build files (Nikita V. Youshchenko).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 20 Mar 2004 09:15:10 +0100
+
+gcc-3.4 (3.4ds0-0pre1) experimental; urgency=low
+
+  * Start gcc-3.4 packaging, get rid of the epoch for most of the
+    packages.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 22 Feb 2004 16:00:03 +0100
+
+gcc-3.3 (1:3.3.3ds6-6) unstable; urgency=medium
+
+  * Update to gcc-3_3-branch CVS 20040401.
+    - Fixed ICE in emit_move_insn_1 on legal code (closed: #223215).
+    - Fix PR 14755, miscompilation of loops with bitfield counter.
+      Closes: #241255.
+    - Fix PR 16040, crash in function initializing const data with
+      reinterpret_cast-ed pointer-to-member function crashes (closes: #238621).
+    - Remove patches integrated upstream.
+  * Reenable build of gpidump on powerpc and s390.
+
+ -- Matthias Klose <doko@debian.org>  Thu,  1 Apr 2004 23:51:54 +0200
+
+gcc-3.3 (1:3.3.3ds6-5) unstable; urgency=medium
+
+  * Update to gcc-3_3-branch CVS 20040321.
+    - Fix PR target/13889 (ICE on valid code on m68k).
+  * Fix FTFBS on s390. Do not build gpc's gpidump on s390.
+  * Reenable gpc on arm.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 22 Mar 2004 07:37:26 +0100
+
+gcc-3.3 (1:3.3.3ds6-4) unstable; urgency=low
+
+  * Update to gcc-3_3-branch CVS 20040320.
+    - Revert patch for PR14640 (with this, at least mozilla-firefox was
+      miscompiled on x86 (closes: #238621).
+  * Update the gpc tarball (there were two releases with the same name ...).
+  * Reenable gpc on alpha and ia64.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 20 Mar 2004 07:39:24 +0100
+
+gcc-3.3 (1:3.3.3ds5-3) unstable; urgency=low
+
+  * Update to gcc-3_3-branch CVS 20040314.
+    - Fixes miscompilation with -O -funroll-loops on powerpc (closes: #229567).
+    - Fix ICE in dwarf-2 on code using altivec (closes: #203835).
+  * Update hurd-changes patch.
+  * Add libgcj4-dev as a recommendation for gcj (closes: #236547).
+  * debian/copyright: Added exemption to static linking of libgcc.
+
+  * Phil Blundell:
+    - debian/patches/arm-ldm.dpatch, debian/patches/arm-gotoff.dpatch: Update.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 14 Mar 2004 09:56:06 +0100
+
+gcc-3.3 (1:3.3.3ds5-2) unstable; urgency=low
+
+  * Update to gcc-3_3-branch CVS 20040306.
+    - Fixes bootstrap comparision error on ia64.
+    - Allows ghc build with gcc-3.3.
+    - On amd64, don't imply 3DNow! for -m64 by default.
+    - Some arm specific changes
+    - Fix C++/13944: exception in constructor of a class to be thrown is not
+      caught. Closes: #228099.
+  * Enable the build of gcc-3.3-hppa64 on hppa.
+    Add symlinks for as and ld to point to hppa64-linux-{as,ld}.
+  * gcj-3.3 depends on g++-3.3, recommends gij-3.3. gij-3.3 suggests gcj-3.3.
+  * Fix libgc2c-pic compatibility links (closes: #234333).
+    The link will be removed for gcc-3.4.
+  * g77-3.3: Conflict with other g77-x.y packages.
+  * Tighten shlibs dependencies to latest released versions.
+
+  * Phil Blundell:
+    - debian/patches/arm-233633.dpatch: New  Fixes problems with half-word
+      loads on ARMv3 architecture.  (Closes: #233633)
+    - debian/patches/arm-ldm.dpatch: New.  Avoids inefficient epilogue for
+      leaf functions in PIC code on ARM.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  6 Mar 2004 10:57:14 +0100
+
+gcc-3.3 (1:3.3.3ds5-1) unstable; urgency=medium
+
+  * gcc-3.3.3 final release.
+    See /usr/share/doc/gcc-3.3/NEWS.{gcc,html}.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 16 Feb 2004 08:59:52 +0100
+
+gcc-3.3 (1:3.3.3ds4-0pre4) unstable; urgency=low
+
+  * Update to gcc-3.3.3 CVS 20040214 (2nd gcc-3.3.3 prerelease).
+  * Fix title of libstdc++'s html main index (closes: #196381).
+  * Move libg2c libraray files out of the gcc specific libdir to /usr/lib.
+    For g77-3.3 add conflicts to other g77 packages. Closes: #224848.
+  * Update the stack protector patch to 3.3-7, but don't apply it by default.
+    Closes: #230338.
+  * On arm, use arm6 as the cpu default (backport from mainline, PR12527).
+  * Add libffi and libjava support for hppa (Randolph Chung). Closes: #232615.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 14 Feb 2004 09:26:15 +0100
+
+gcc-3.3 (1:3.3.3ds3-0pre3) unstable; urgency=low
+
+  * Update to gcc-3.3.3 CVS 20040125.
+    - Fixed PR11350, undefined labels with -Os -fPIC (closes: #195911).
+    - Fixed PR11793, ICE in extract_insn, at recog.c (closes: #203835).
+    - Fixed PR13544, removed backport for PR12862.
+    - Integrated backport for PR12441.
+  * Fixed since 3.3: java: not implemented interface methods of abstract
+    classes not found (closes: #225438).
+  * Disable pascal on arm architecture (currently broken).
+  * Update the build files to build a cross compiler (Nikita V. Youshchenko).
+    See debian/README.cross in the source package.
+  * Apply revised patch to make -mieee the default on alpha-linux,
+    and add -mieee-disable switch to turn the default off (closes: #212912).
+    (Tyson Whitehead)
+
+ -- Matthias Klose <doko@debian.org>  Sun, 25 Jan 2004 17:41:04 +0100
+
+gcc-3.3 (1:3.3.3ds2-0pre2) unstable; urgency=medium
+
+  * Update to gcc-3.3.3 CVS 20040110.
+    - Fixes compilation not terminating at -O1 on hppa (closes: #207516).
+  * Add backport to fix PR12441 (closes: #224576).
+  * Revert backport to 3.3 branch to fix PR12862, which introduced another
+    regression (PR13544). Closes: #225663.
+  * Tighten dependency of gnat-3.3 on gcc-3.3 (closes: #226273).
+  * Disable treelang build for cross compiler build.
+  * Disable pascal on alpha and ia64 architectures (currently broken).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 10 Jan 2004 12:33:59 +0100
+
+gcc-3.3 (1:3.3.3ds1-0pre1) unstable; urgency=low
+
+  * Update to gcc-3.3.3 CVS 20031229.
+    - Fixes bootstrap error on ia64-linux.
+    - Fix -pthread on mips{,el}-linux (closes: #224875).
+    - Fix -Wformat for C++ (closes: #217075).
+  * Backport from mainline: Preserve inline-ness when redeclaring
+    a function template (closes: #195264).
+  * Add missing intrinsics headers on ix86 (closes: #224593).
+  * Fix location of libg2c libdir in libg2c.la file (closes: #224848).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 29 Dec 2003 10:36:29 +0100
+
+gcc-3.3 (1:3.3.3ds0-0pre0.1) unstable; urgency=high
+
+   * NMU
+   * Fixed mips(el) spec file for -pthread: (Closes: #224875)
+   * [debian/patches/mips-pthread.dpatch] New.
+   * [debian/rules.patch] Added it to debian_patches.
+
+ -- J.H.M. Dassen (Ray) <jdassen@debian.org>  Sat, 27 Dec 2003 15:51:47 +0100
+
+gcc-3.3 (1:3.3.3ds0-0pre0) unstable; urgency=low
+
+  * Update to gcc-3.3.3 CVS 20031206.
+    - Fixes ICE in verify_local_live_at_start (hppa). Closes: #201550.
+    - Fixes miscompilation of linux-2.6/sound/core/oss/rate.c.
+      Closes: #219949.
+  * Add missing unwind.h to gcc package (closes: #220846).
+  * Regenerate control file to fix build dependencies for m68k.
+  * More gpc only patches to fix test failures on m68k.
+  * Reenable gpc for the Hurd (closes: #189851).
+
+ -- Matthias Klose <doko@debian.org>  Sat,  6 Dec 2003 10:29:07 +0100
+
+gcc-3.3 (1:3.3.2ds5-4) unstable; urgency=low
+
+  * Update libffi-dev package description (closes: #219508).
+  * For gij and libgcj fix dependency on the libstdc++ package, if
+    the latter isn't installed during the build.
+  * Apply patch to emit .note.GNU-stack section on linux arches
+    which by default need executable stack.
+  * Prefer gnat-3.3 over gnat-3.2 as a build dependency.
+  * Update the pascal tarball (different version released with the
+    same name).
+  * Add pascal patches to address various gpc testsuite failures.
+    On alpha and ia64, build gpc from the 20030830 version. Reenable
+    the build on m68k.
+    Remove the 20030507 gpc version from the tarball.
+  * Apply patch to build the shared ada libs and link the ada tools
+    against the shared libs. Not enabled by default, because gnat
+    and gnatlib are rebuilt during install. (Ludovic Brenta)
+
+ -- Matthias Klose <doko@debian.org>  Sun,  9 Nov 2003 22:34:33 +0100
+
+gcc-3.3 (1:3.3.2ds4-3) unstable; urgency=low
+
+  * Fix rules to omit inclusion of gnatpsta in mips(el) gnat package.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  2 Nov 2003 14:29:59 +0100
+
+gcc-3.3 (1:3.3.2ds4-2) unstable; urgency=medium
+
+  * s390-ifcvt patch added. Fixes gcl miscompilation (closes: #217240).
+    (Gerhard Tonn)
+  * Fix an infinite loop in g++ compiling lufs, regression from 3.3.1.
+  * Fix a wrong code generation bug on alpha.
+    (Falk Hueffner)
+  * Update NEWS files.
+  * Add Falk Hueffner to the Debian GCC maintainers.
+  * Enable ada on mips and mipsel, but don't build the gnatpsta tool.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 29 Oct 2003 00:12:37 +0100
+
+gcc-3.3 (1:3.3.2ds4-1) unstable; urgency=medium
+
+  * Update to gcc-3.3.2.
+  * Update NEWS files.
+  * Miscompilation in the pari package at -O3 fixed (closes: #198172).
+  * On alpha-linux, revert -mieee as the default (Falk Hueffner).
+    Reopens: #212912.
+  * Add ia64-unwind patch (Jeff Bailey).
+  * Closed reports reported against gcc-2.96 (ia64), fixed at least in gcc-3.3:
+    - ICE in verify_local_live_at_start, at flow.c:2733 (closes: #135404).
+    - Compilation failure of stlport (closes: #135224).
+    - Infinite loop compiling cssc's pfile.cc with -O2 (closes: #115390).
+    - Added missing some string::compare() members (closes: #141199).
+    - <cmath> header declares std::pow (closes: #161853).
+    - <vector> does have at() method (closes: #59776).
+    - Fixed error in stl_deque.h (closes: #69530).
+    - Fixed problem with bastring (closes: #75759, #96539).
+    - bad_alloc and std:: namespace problem (closes: #75120).
+    - Excessive warnings from headers with -Weffc++ (closes: #76827).
+
+ -- Matthias Klose <doko@debian.org>  Fri, 17 Oct 2003 08:07:01 +0200
+
+gcc-3.3 (1:3.3.2ds3-0pre5) unstable; urgency=low
+
+  * Update to gcc-3.3.2 CVS 20031005.
+    - Fixes cpp inserting a spurious newline (closes: #210478, #210482).
+    - Fixes generation of unrecognizable insn compiling kernel source
+      on alpha (closes: #202762).
+    - Fixes ICE in add_abstract_origin_attribute (closes: #212406).
+    - Fixes forward declaration in libstdc++ (closes: #209386).
+    - Fixes ICE in in extract_insn, at recog.c on alpha (closes: #207564).
+  * Make libgcj-common architecture all (closes: #211909).
+  * Build depend on: flex-old | flex (<< 2.5.31).
+  * Fix spec linking libraries with -pthread on powerpc (closes: #211054).
+  * debian/patches/arm-gotoff.dpatch: fix two kinds of PIC lossage.
+    (Phil Blundell)
+  * debian/patches/arm-common.dpatch: fix excessive alignment of common
+    blocks causing binutils testsuite failures.
+    (Phil Blundell)
+  * Update priorities in debian/control to match the archive.
+    (Ryan Murray)
+  * s390-nonlocal-goto patch added. Fixes some pascal testcase failures. 
+    (Gerhard Tonn)
+  * On alpha-linux, make -mieee default and add -mieee-disable switch
+    to turn default off (closes: #212912).
+    (Tyson Whitehead)
+  * Add gpc upstream patch for memory corruption fix.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  5 Oct 2003 19:53:49 +0200
+
+gcc-3.3 (1:3.3.2ds2-0pre4) unstable; urgency=low
+
+  * Add gcc-unsharing_lhs patch (closes: #210848)
+
+ -- Ryan Murray <rmurray@debian.org>  Fri, 19 Sep 2003 22:51:19 -0600
+
+gcc-3.3 (1:3.3.2ds2-0pre3) unstable; urgency=low
+
+  * Update to gcc-3.3.2 CVS 20030908.
+  * PR11716 (Michael Eager, Dan Jacobowitz):
+    Make GCC think that the maximum length of a short branch is
+    64K instead of 128K.  It's a big hammer, but it works.
+    Closes: #207915.
+  * Downgrade gpc to 20030507 on alpha and ia64 (closes: #208717).
+
+ -- Matthias Klose <doko@debian.org>  Mon,  8 Sep 2003 21:49:52 +0200
+
+gcc-3.3 (1:3.3.2ds1-0pre2) unstable; urgency=low
+
+  * Update to gcc-3.3.2 CVS 20030831.
+    - Fix java NullPointerException detection with 2.6 kernels.
+      Closes: #206377.
+    - Fix bug in C++ typedef handling (closes: #205402).
+    - Fix -Wunreachable-code giving false complaints (closes: #196600).
+  * Update to gpc-20030830.
+  * Don't include /usr/share/java/repository into the class path according
+    to the new version of th Debian Java policy (closes: #205643).
+  * Build-Depend/Depend on libgc-dev.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 31 Aug 2003 08:56:53 +0200
+
+gcc-3.3 (1:3.3.2ds0-0pre1) unstable; urgency=low
+
+  * Remove the build dependency on locales for now.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 15 Aug 2003 07:48:18 +0200
+
+gcc-3.3 (1:3.3.2ds0-0pre0) unstable; urgency=medium
+
+  * Update to gcc-3.3.2 CVS 20030812.
+    - Fixes generation of wrong code for XDM-AUTHORIZATION-1 key generation
+      and/or validation. Closes: #196090.
+  * Update NEWS files.
+  * Change ix86 default CPU type for code generation:
+    - i386-linux       -> i486-linux
+    - i386-gnu         -> i586-gnu
+    - i386-freebsd-gnu -> i486-freebsd-gnu
+    Use -march=i386 to target i386 CPUs.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 12 Aug 2003 10:31:28 +0200
+
+gcc-3.3 (1:3.3.1ds3-1) unstable; urgency=low
+
+  * gcc-3.3.1 (taken from CVS 20030805).
+    - C++: Fix declaration conflicts (closes: #203351).
+    - Fix ICE on ia64 (closes: #203840).
+
+ -- Matthias Klose <doko@debian.org>  Tue,  5 Aug 2003 20:38:02 +0200
+
+gcc-3.3 (1:3.3.1ds2-0rc2) unstable; urgency=low
+
+  * Update to gcc-3.3.1 CVS 20030728.
+    - Fix ICE in extract_insn, at recog.c:2148 on m68k.
+      Closes: #177840, #180375, #190818.
+    - Fix ICE while building libquicktime on alpha (closes: #192576).
+    - Fix failure to deal with using and private inheritance (closes: #202696).
+  * On sparc, /usr/lib was added to the library search path. Fix it.
+  * Closed reports reported against gcc-3.2.x and fixed in gcc-3.3:
+    - Fix error building the gcl package on arm (closes: #199835).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 28 Jul 2003 20:39:07 +0200
+
+gcc-3.3 (1:3.3.1ds1-0rc1) unstable; urgency=low
+
+  * Update to gcc-3.3.1 CVS 20030722 (3.3.1 release candidate 1).
+    - Fix ICE in copy_to_mode_reg on 64-bit targets (closes: #189365).
+    - Remove documentation about multi-line strings (closes: #194391).
+    - Correctly document -falign-* parameters (closes: #198269).
+    - out-of-class specialization of a private nested template class.
+      Closes: #193830.
+    - Tighten shlibs dependency due to new symbols in libgcc.
+  * README.Debian for libg2c0, describing the need for g77-x.y when
+    working with the g2c header and library (closes: #189059).
+  * Call make with -j<number of CPU's>, if USE_NJOBS is set and non-empty
+    in the environment.
+  * Add another two m68k patches, partly replacing the workarounds provided
+    by Roman Zippel.
+  * Add the stack protector patch, but don't apply it by default. Edit
+    debian/rules.patch to apply it (closes: #171699, #189494).
+  * Remove wrong symlinks from gnat package (closes: #201882).
+  * Closed reports reported against gcc-2.95 and fixed in newer versions:
+    - SMP kernel compilation on alpha (closes: #134197, #146883).
+    - ICE on arm while building imagemagick (closes: #173475).
+  * Closed reports reported against gcc-3.2.x and fixed in gcc-3.3:
+    - Miscompilation of octave2.1 on hppa (closes: #192296, #193804).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 13 Jul 2003 10:26:30 +0200
+
+gcc-3.3 (1:3.3.1ds0-0pre0) unstable; urgency=medium
+
+  * Update to gcc-3.3.1 CVS 20030626.
+    - Fix ICE on arm compiling xfree86 (closes: #195424).
+    - Fix ICE on arm compiling fftw (closes: #186185).
+    - Fix ICE on arm in change_address_1, affecting a few packages.
+      Closes: #197099.
+    - Fix ICE in merge_assigned_reloads building Linux 2.4.2x sched.c.
+      Closes: #195237.
+    - Do not warn about failing to inline functions declared in system headers.
+      Closes: #193049.
+    - Fix ICE on mips{,el} in propagate_one_insn (closes: #194330, #196091).
+    - Fix ICE on m68k in reg_overlap_mentioned_p (closes: #194749).
+    - Build crtbeginT.o on m68k (closes: #197613).
+  * Fix g++ man page symlink (closes: #196271).
+  * mips/mipsel: Depend on binutils (>= 2.14.90.0.4). Closes: #196744.
+  * Disable treelang on powerpc (again). Closes: #196915.
+  * Pass -encoding in gcj-wrapper.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 27 Jun 2003 00:14:43 +0200
+
+gcc-3.3 (1:3.3ds9-3) unstable; urgency=low
+
+  * Closing more reports, fixed in 3.2/3.3:
+    - ICE building texmacs on m68k (closes: #177433).
+    - libstdc++: <cmath> doesn't define trunc(...) (closes: #105285).
+    - libstdc++: setw is ignored for strings output (closes: #52382, #76645).
+  * Add build support to omit the manual pages and info docs from the
+    packages, disabled by default. Wait for a Debian statement, which can
+    be cited. Adresses: #193787.
+  * Reenable the m68k-const patch, don't run the g77 testsuite on m68k.
+    Addresses ICEs (#177840, #190818).
+  * Update arm-xscale patch.
+  * libstdc++: use __attribute__(__unknown__), instead of (unknown).
+    Closes: #195796.
+  * Build-Depend on glibc (>= 2.3.1) to prevent incorrect builds on woody.
+    Request from Adrian Bunk.
+  * Add treelang-update patch (Tim Josling), reenable treelang on powerpc.
+  * Add <GNU_TYPE>-{cpp,gcc,g++,gcj,g77} symlinks (addresses: #189466).
+  * Make sure not to build using binutils-2.14.90.0.[12].
+
+ -- Matthias Klose <doko@debian.org>  Mon,  2 Jun 2003 22:35:45 +0200
+
+gcc-3.3 (1:3.3ds9-2) unstable; urgency=medium
+
+  * Correct autoconf-related snafu in newly added ARM patches (Phil Blundell).
+  * Correct libgcc1 dependency (closes: #193689).
+  * Work around ldd/dpkg-shlibs failure on s390x.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 18 May 2003 09:40:15 +0200
+
+gcc-3.3 (1:3.3ds9-1) unstable; urgency=low
+
+  * gcc-3.3 final release.
+    See /usr/share/doc/gcc-3.3/NEWS.{gcc,html}.
+  * First merge of i386/x86-64 biarch support (Arnd Bergmann).
+    Disabled by default. Closes: #190066.
+  * New gpc-20030507 version.
+  * Upstream gpc update to fix netbsd build failure (closes: #191407).
+  * Add arm-xscale.dpatch, arm-10730.dpatch, arm-tune.dpatch, copied
+    from gcc-3.2 (Phil Blundell).
+  * Closing bug reports reported against older gcc versions (some of them
+    still present in Debian, but not anymore as the default compiler).
+    Usually, forwarded bug reports are linked to
+        http://gcc.gnu.org/PR<upstream bug number>
+    The upstream bug number usually can be found in the Debian reports.
+
+  * Closed reports reported against gcc-3.1.x, gcc-3.2.x and fixed in gcc-3.3:
+    - General:
+      + GCC accepts multi-line strings without \ or " " &c (closes: #2910).
+      + -print-file-name sometimes fails (closes: #161615).
+      + ICE: reporting routines re-entered (closes: #179597, #180937).
+      + Misplaced paragraph in gcc documentation (closes: #179363).
+      + Error: suffix or operands invalid for `div' (closes: #150558).
+      + builtin memcmp() could be optimised (closes: #85535).
+    - Ada:
+      + Preelaborate, exceptions, and -gnatN (closes: #181679).
+    - C:
+      + Duplicate loop conditions even with -Os (closes: #94701).
+      + ICE (signal 11) (closes: #65686).
+    - C++:
+      + C++ error on virtual function which uses ... (closes: #165829).
+      + ICE when warning about cleanup nastiness in switch statements
+        (closes: #184108).
+      + Fails to compile virtual inheritance with variable number of
+        argument method (closes: #151357).
+      + xmmintrin.h broken for c++ (closes: #168310).
+      + Stack corruption with variable-length automatic arrays and virtual
+        destructors (closes: #188527).
+      + ICE on illegal code (closes: #184862).
+      + _attribute__((unused)) is ignored in C++ (closes: #45440).
+      + g++ handles &(void *)foo bizzarely (closes: #79225).
+      + ICE (with wrong code, though) (closes: #81122).
+    - Java:
+      + Broken zip file handling (closes: #180567).
+    - ObjC:
+      + @protocol forward definitions do not work (closes: #80468).
+    - Architecture specific:
+      - alpha
+        + va_start is off by one (closes: #186139).
+        + ICE while building kseg/ddd (closes: #184753).
+        + g++ -O2 optimization error (closes: #70743).
+      - arm
+        + ICE with -O2 in change_address_1 (closes: #180750).
+        + gcc optimization error with -O2, affecting bison (closes: #185903).
+      - hppa
+        + ICE in insn_default_length (closes: #186447).
+      - ia64
+        + gcc-3.2 fails w/ optimization (closes: #178830).
+      - i386
+        + unnecessary generation of instruction cwtl (closes: #95318).
+        + {athlon} ICE building mplayer (closes: #184800).
+        + {pentium4} ICE while compiling mozilla with -march=pentium4
+          (closes: #187910).
+        + i386 optimisation: joining tests (closes: #105309).
+      - m68k
+        + ICE in instantiate_virtual_regs_1 (closes: #180493).
+        + gcc optimizer bug on m68k (closes: #64832).
+      - powerpc
+        + ICE in extract_insn, at recog.c:2175 building php3 (closes: #186299).
+        + ICE with -O -Wunreachable-code (closes: #189702).
+      - s390
+        + Operand out of range at assembly time when using -O2
+          (closes: #178596).
+      - sparc
+        + gcc-3.2 regression (wrong code) (closes: #176387).
+        + ICE in mem_loc_descriptor when optimizing (closes: #178909).
+        + ICE in gen_reg_rtx when optimizing (closes: #178965).
+        + Optimisation leads to unaligned access in memcpy (closes: #136659).
+
+  * Closed reports reported against gcc-3.0 and fixed in gcc-3.2.x:
+    - General:
+      + Use mkstemp instead of mktemp (closed: #127802).
+    - Preprocessor:
+      + Fix redundant error message from cpp (closed: #100722).
+    - C:
+      + Optimization issue on ix86 (pointless moving) (closed: #97904).
+      + Miscompilation of allegro on ix86 (closed: #105741).
+      + Fix generation of ..ng references for static aliases (alpha-linux).
+        (closed: #108036).
+      + ICE compiling pari on hppa (closed: #111613).
+      + ICE on ia64 in instantiate_virtual_regs_1 (closed: #121668).
+      + ICE in c-typeck.c (closed: #123687).
+      + ICE in gen_subprogram_die on alpha (closed: #127890).
+      + SEGV in initialization of flexible char array member (closed: #131399).
+      + ICE on arm compiling lapack (closed: #135967).
+      + ICE in incomplete_type_error (closed: #140606).
+      + Fix -Wswitch (also part of -Wall) (closed: #140995).
+      + Wrong code in mke2fs on hppa (closed: #150232).
+      + sin(a) * sin(b) gives wrong result (closed: #164135).
+    - C++:
+      + Error in std library headers on arm (closed: #107633).
+      + ICE nr. 19970302 (closed: #119635).
+      + std::wcout does not perform encoding conversions (closed: #128026).
+      + SEGV, when compiling iostream.h with -fPIC (closed: #134315).
+      + Fixed segmentation fault in included code for <rope> (closed: #137017).
+      + Fix with exception handling and -O (closed: #144232).
+      + Fix octave-2.1 build failure on ia64 (closed: #144584).
+      + nonstandard overloads in num_get facet (closed: #155900).
+      + ICE in expand_end_loop with -O (closed: #158371).
+    - Fortran:
+      + Fix blas build failure on arm (closed: #137959).
+    - Java:
+      + Interface members are public by default (closed: #94974).
+      + Strange message with -fno-bounds-check in combination with -W.
+        (closed: #102353).
+      + Crash in FileWriter using IOException (closed: #116128).
+      + Fix ObjectInputStream.readObject() calling constructors.
+        (closed: #121636).
+      + gij: better error reporting on `class not found' (closed: #125649).
+      + Lockup during .java->.class compilation (closed: #141899).
+      + Compile breaks using temporary inner class instance (closed: #141900).
+      + Default constructor for inner class causes broken bytecode.
+        (closed: #141902).
+      + gij-3.2 linked against libgcc1 (closed: #165180).
+      + gij-wrapper understands -classpath parameter (closed: #146634).
+      + gij-3.2 doesn't ignore -jar when run as "java" (closed: #167673).
+    - ObjC:
+      + ICE on alpha (closed: #172353).
+
+  * Closed reports reported against gcc-2.95 and fixed in newer versions:
+    - General:
+      + Undocumented option -pthread (closes: #165110).
+      + stdbool.h broken (closes: #167439).
+      + regparm/profiling breakage (closes: #20695).
+      + another gcc optimization error (closes: #51456).
+      + ICE in `output_fix_trunc' (closes: #55967).
+      + Fix "Unable to generate reloads for" (closes: #58219, #131890).
+      + gcc -c -MD x/y.c -o x/y.o leaves y.d in cwd (closes: #59232).
+      + Compiler error with -O2 (closes: #67631).
+      + ICE (unrecognizable insn) compiling php4 (closes: #83550, #84969).
+      + Another ICE (closes: #90666).
+      + man versus info inconsistency (-W and -Wall) (closes: #93708).
+      + ICE on invalid extended asm (closes: #136630).
+      + ICE in `emit_no_conflict_block' compiling perl (closes: #154599).
+      + ICE in `gen_tagged_type_instantiation_die'(closes: #166766).
+      + ICE on __builtin_memset(s, 0, -1) (closes: #170994).
+      + -Q option to gcc appears twice in the documentation (closes: #137382).
+      + New options for specifying targets:- -MQ and -MT (closes: #27878).
+      + Configure using --enable-nls (closes: #51651).
+      + gcc -dumpspecs undocumented (closes: #65406).
+    - Preprocessor:
+      + cpp fails to parse macros with varargs correctly(closes: #154767).
+      + __VA_ARGS__ stringification crashes preprocessor if __VA_ARGS__ is
+        empty (closes: #152709).
+      + gcc doesn't handle empty args in macro function if there is only
+        one arg(closes: #156450).
+    - C:
+      + Uncaught floating point exception causes ICE (closes: #33786).
+      + gcc -fpack-struct doesn't pack structs (closes: #64628).
+      + ICE in kernel (matroxfb) code (closes: #151196).
+      + gcc doesn't warn about unreachable code (closes: #158704).
+      + Fix docs for __builtin_return_address(closes: #165992).
+      + C99 symbols in limits.h not defined (closes: #168346).
+      + %zd printf spec generates warning, even in c9x mode (closes: #94891).
+      + Update GCC attribute syntax (closes: #12253, #43119).
+    - C++ & libstdc++-v3:
+      + template and virtual inheritance bug (closes: #152315).
+      + g++ has some troubles with nested templates (closes: #21255).
+      + vtable thunks implementation is broken (closes: #34876, #35477).
+      + ICE for templated friend (closes: #42662).
+      + ICE compiling mnemonic (closes: #42989).
+      + Deprecated: result naming doesn't work for functions defined in a
+        class (closes: #43170).
+      + volatile undefined ... (closes: #50529).
+      + ICE concerning templates (closes: #53698).
+      + Program compiled -O3 -malign-double segfaults in ofstream::~ofstream
+        (closes: #56867).
+      + __attribute__ ((constructor)) doesn't work with C++ (closes: #61806).
+      + Another ICE (closes: #65687).
+      + ICE in `const_hash' (closes: #72933).
+      + ICE on illegal code (closes: #83221).
+      + Wrong code with -O2 (closes: #83363).
+      + ICE on template class (closes: #85934).
+      + No warning for missing return in non-void member func (closes: #88260).
+      + Not a bug/fixed in libgcc1: libgcc.a symbols end up exported by
+        shared libraries (closes: #118670).
+      + ICE using nested templates (closes: #118781).
+      + Another ICE with templates (closes: #127489).
+      + More ICEs (closes: #140427, #141797).
+      + ICE when template declared after use(closes: #148603).
+      + template function default arguments are not handled (closes: #157292).
+      + Warning when including stl.h (closes: #162074).
+      + g++ -pedantic-errors -D_GNU_SOURCE cannot #include <complex>
+        (closes: #151671).
+      + c++ error message improvement suggestion (closes: #46181).
+      + Compilation error in stl_alloc.h with -fhonor-std (closes: #59005).
+      + libstdc++ has no method at() in stl_= (closes: #68963).
+    - Fortran:
+      + g77 crash (closes: #130415).
+    - ObjC:
+      + ICE: program cc1obj got fatal signal 11 (closes: #62309).
+      + Interface to garbage collector is undocumented. (closes: #68987).
+    - Architecture specific:
+      - alpha
+        + Can't compile with define gnu_source with stdio and curses
+          (closes: #97603).
+        + Header conflicts on alpha (closes: #134558).
+        + lapack-dev: cannot link on alpha (closes: #144602).
+        + ICE `fixup_var_refs_1' (closes: #43001).
+        + Mutt segv on viewing list of attachments (closes: #47981).
+        + ICE building open-amulet (closes: #48530).
+        + ICE compiling hatman (closes: #55291).
+        + dead code removal in switch() broken (closes: #142844).
+      - arm
+        + Miscompilation using -fPIC on arm (closes: #90363).
+        + infinite loop with -O on arm (closes: #151675).
+      - i386
+        + ICE when using -mno-ieee-fp and -march=i686 (closes: #87540).
+      - m68k
+        + Optimization (-O2) broken on m68k (closes: #146006).
+      - mips
+        + g++ exception catching does not work... (closes: #105569).
+        + update-menus gets Bus Error (closes: #120333).
+      - mipsel
+        + aspell: triggers ICE on mipsel (closes: #128367).
+      - powerpc
+        + -O2 produces wrong code (gnuchess example) (closes: #131454).
+      - sparc
+        + Misleading documentation for -malign-{jump,loop,function}s
+          (closes: #114029).
+        + Sparc GCC issue with -mcpu=ultrasparc (closes: #172956).
+        + flightgear: build failure on sparc (closes: #88694).
+
+ -- Matthias Klose <doko@debian.org>  Fri, 16 May 2003 07:13:57 +0200
+
+gcc-3.3 (1:3.3ds8-0pre9) unstable; urgency=high
+
+  * gcc-3.3 second prerelease.
+    - Fixing exception handling on s390 (urgency high).
+  * Reenabled gpc build (I had it disabled ...). Closes: #192347.
+
+ -- Matthias Klose <doko@debian.org>  Fri,  9 May 2003 07:32:14 +0200
+
+gcc-3.3 (1:3.3ds8-0pre8) unstable; urgency=low
+
+  * gcc-3.3 prerelease.
+    - Fixes gcj ICE (closes: #189545).
+  * For libstdc++ use the i486 atomicity implementation, introduced with
+    0pre6, left out in 0pre7 (closes: #191684).
+  * Add README.Debian for treelang (closes: #190812).
+  * Apply NetBSD changes (Joel Baker). Closes: #191551.
+  * New symbols in libgcc1, tighten the shlibs dependency.
+  * Disable testsuite run on mips/mipsel because of an outdated libc-dev
+    package.
+  * Do not build libffi with debug information, although configuring
+    with --enable-debug.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  6 May 2003 06:53:49 +0200
+
+gcc-3.3 (1:3.3ds7-0pre7) unstable; urgency=low
+
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030429).
+  * Revert upstream libstdc++ change (closes: #191145, #191147, #191148,
+    #191149, #149159, #149151, and other reports).
+    Sorry for not detecting this before the upload, seems to be
+    broken on i386 "only".
+  * hurd-i386: Use /usr/include, not /include.
+  * Disable gpc on hurd-i386 (closes: #189851).
+  * Disable building the debug version of libstdc++ on powerpc-linux
+    (fixes about 200 java test cases).
+  * Install libstdc++v3 man pages (closes: #127263).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 29 Apr 2003 23:28:44 +0200
+
+gcc-3.3 (1:3.3ds6-0pre6) unstable; urgency=high
+
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030426).
+  * libstdc++-doc: Fix index.html link (closes: #189424).
+  * Revert back to the i486 atomicity implementation, that was used
+    for gcc-3.2 as well. Reopens: #184446, #185662. Closes: #189983.
+    For this reason, tighten the libstdc++5 shlibs dependency. See
+    http://lists.debian.org/debian-devel/2003/debian-devel-200304/msg01895.html
+    Don't build the ix86 specfic libstdc++ libs anymore.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 27 Apr 2003 19:47:54 +0200
+
+gcc-3.3 (1:3.3ds5-0pre5) unstable; urgency=low
+
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030415).
+  * Disable treelang on powerpc.
+  * Disable gpc on m68k.
+  * Install locale data. Conflict with gcc-3.2 (<= 1:3.2.3-0pre8).
+  * Fix generated bits/atomicity.h (closes: #189183).
+  * Tighten libgcc1 shlibs dependency (new symbol _Unwind_Backtrace).
+
+ -- Matthias Klose <doko@debian.org>  Wed, 16 Apr 2003 00:37:05 +0200
+
+gcc-3.3 (1:3.3ds4-0pre4) unstable; urgency=low
+
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030412).
+  * Avoid sparc64 dependencies for libgcc1 on sparc (Clint Adams).
+  * Make the default sparc 32bit target v8 instead of v7. This mainly
+    enables hardmul, which should speed up v8 and v9 systems by a large
+    margin (Ben Collins).
+  * Tighten binutils dependency for sparc.
+  * On i386, build libstdc++ optimized for i486 and above. The library
+    in /usr/lib is built for i386. Closes: #184446, #185662.
+  * Add gpc build (from gcc-snapshot package).
+  * debian/control: Include all packages, that _can_ be built from
+    this source package (except the cross packages).
+  * Add m68k patches: m68k-const, m68k-subreg, m68k-loop.
+  * Run the 3.3 testsuite a second time with the installed gcc-3.2
+    to check for regressions (promised, only this time, and for the
+    final release ;). Add build dependencies (gobjc-3.2, g77-3.2, g++-3.2).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 12 Apr 2003 10:11:11 +0200
+
+gcc-3.3 (1:3.3ds3-0pre3) unstable; urgency=low
+
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030331).
+  * Reenable java on arm.
+  * Build-Depend on binutils-2.13.90.0.18-1.3 on m68k. Fixes all
+    bprob/gcov testsuite failures.
+  * Enable C++ build on arm.
+  * Enable the sparc64 build.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 31 Mar 2003 23:24:54 +0200
+
+gcc-3.3 (1:3.3ds2-0pre2) unstable; urgency=low
+
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030317).
+  * Disable building the gcc-3.3-nof package.
+  * Disable Ada on mips and mipsel.
+  * Remove the workaround to build Ada on powerpc.
+  * Add GNU Free documentation license to copyright file.
+  * Update the sparc64 build patches (Clint Adams). Not yet enabled.
+  * Disable C++ on arm (Not yet tested).
+  * Add fix for ICE on powerpc (see: #184684).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 16 Mar 2003 21:40:57 +0100
+
+gcc-3.3 (1:3.3ds1-0pre1) unstable; urgency=low
+
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030310).
+  * Add gccbug manpage.
+  * Don't build libgnat package (no shared library).
+  * Configure with --enable-sjlj-exceptions on hppa and m68k for
+    binary compatibility with libstdc++ built with gcc-3.2.
+  * Disable Java on arm-linux (never seen it sucessfully bootstrap).
+  * Install non-conflicting baseline README.
+  * multilib *.so and *.a moved to /usr/lib/gcc-lib/... , so that several
+    compiler versions can be installed concurrently.
+  * Remove libstdc++-incdir patch applied upstream.
+  * libstdc++ 64 bit development files now handled in -dev target.
+    (Gerhard Tonn)
+  * Drop build dependencies for gpc (tetex-bin, help2man, libncurses5-dev).
+  * Add libstdc++5-3.3-dev confict to libstdc++5-dev (<= 1:3.2.3-0pre3).
+  * Enable builds on m68k (all but C++ for the moment). gcc-3.3 bootstraps,
+    while gcc-3.2 doesn't.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 10 Mar 2003 23:41:00 +0100
+
+gcc-3.3 (1:3.3ds0-0pre0) unstable; urgency=low
+
+  * First gcc-3.3 package, built for s390 only. All other architectures
+    build the gcc-3.3-base package only.
+    To build the package on other architectures, edit debian/rules.defs
+    (macro no_dummy_archs).
+  * gcc-3.3 prerelease taken from the gcc-3_3-branch (CVS 20030301).
+  * Don't include the gcc locale files (would conflict with 3.2).
+  * Remove libffi-install-fix patch.
+  * Fix netbsd-i386 patches.
+  * Change priority of libstdc++5 and gcc-3.2-base to important.
+  * Install gcjh-wrapper for javah.
+  * gij suggests fastjar, gcj recommends fastjar.
+  * Allow builds using automake1.4 | automake (<< 1.5).
+  * Backport fix for to output more correct line numbers.
+  * Add help2man to build dependencies needed for some gpc man pages.
+  * gpc: Install binobj and gpidump binaries and man pages.
+  * Apply cross compilation patches submitted by Bastian Blank.
+  * Replace s390-biarch patch and copy s390-config-ml patch from 3.2
+    (Gerhard Tonn).
+  * Configure using --enable-debug.
+  * Add infrastructure to only build a subset of binary packages.
+  * Rename libstdc++-{dev,dbg,pic,doc} packages.
+  * Build treelang compiler.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  1 Mar 2003 12:56:42 +0100
+
+gcc-3.2 (1:3.2.3ds2-0pre3) unstable; urgency=low
+
+  * gcc-3.2.3 prerelease (CVS 20030228)
+    - Fixes bootstrap failure on alpha-linux.
+    - Fixes ICE on m68k (closes: #177016).
+  * Build Pascal with -O1 on powerpc, disable Pascal on arm, m68k and
+    sparc (due to wrong code generation for fwrite in glibc,
+    see PR optimization/9279).
+  * Apply cross compilation patches submitted by Bastian Blank.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 28 Feb 2003 20:26:30 +0100
+
+gcc-3.2 (1:3.2.3ds1-0pre2) unstable; urgency=medium
+
+  * gcc-3.2.3 prerelease (CVS 20030221)
+    - Fixes ICE on hppa (closes: #181813).
+  * Patch for ffitest in s390-java.dpatch deleted, since already fixed
+    upstream. (Gerhard Tonn)
+  * Build crtbeginT.o on m68k-linux (closes: #179807).
+  * Install gcjh-wrapper for javah (closes: #180218).
+  * gij suggests fastjar, gcj recommends fastjar (closes: #179298).
+  * Allow builds using automake1.4 | automake (<< 1.5) (closes: #180048).
+  * Backport fix for to output more correct line numbers (closes: #153965).
+  * Add help2man to build dependencies needed for some gpc man pages.
+  * gpc: Install binobj and gpidump binaries and man pages.
+  * Disable gpc on arm due to wrong code generation for fwrite in
+    glibc (see PR optimization/9279).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 22 Feb 2003 19:58:20 +0100
+
+gcc-3.2 (1:3.2.3ds0-0pre1) unstable; urgency=low
+
+  * gcc-3.2.3 prerelease (CVS 20030210)
+    - Fixes long millicode calls on hppa (closes: #180520)
+  * New gpc-20030209 version.  Remove gpc-update.dpatch and gpc-testsuite.dptch
+    as they are no longer needed.
+  * Fix netbsd-i386 patches (closes: #180129, #179931)
+  * m68k-bootstrap.dpatch: backport gcse.c changes from 3.3/MAIN to 3.2
+  * Change priority of libstdc++5 and gcc-3.2-base to important.
+
+ -- Ryan Murray <rmurray@debian.org>  Tue, 11 Feb 2003 06:18:09 -0700
+
+gcc-3.2 (1:3.2.2ds8-1) unstable; urgency=low
+
+  * gcc-3.2.2 release.
+    - Fixes ICE, regression from 2.95 (closes: #176117).
+    - Fixes ICE, regression from 2.95 (closes: #179161).
+  * libstdc++ for biarch installs now upstream to usr/lib64,
+    therefore mv usr/lib/64 usr/lib64 no longer necessary. (Gerhard Tonn)
+
+ -- Ryan Murray <rmurray@debian.org>  Wed,  5 Feb 2003 01:35:29 -0700
+
+gcc-3.2 (1:3.2.2ds7-0pre8) unstable; urgency=low
+
+  * gcc-3.2.2 prerelease (CVS 20030130).
+  * update s390 libffi patch
+  * debian/control: add myself to uploaders and change libc12-dev depends to
+    libc-dev on i386 (closes: #179128)
+  * Build-Depend on procps so that ps is available for logwatch
+
+ -- Ryan Murray <rmurray@debian.org>  Fri, 31 Jan 2003 04:00:15 -0700
+
+gcc-3.2 (1:3.2.2ds6-0pre7) unstable; urgency=low
+
+  * gcc-3.2.2 prerelease (CVS 20030128).
+    - Update needed for hppa.
+    - Fixes ICE on arm, regression from 2.95.x (closes: #168086).
+    - Can use default bison (1.875).
+  * Apply netbsd build patches (closes: #177674, #178328, #178325,
+    #178326, #178327).
+  * Run the logwatch script on "slow" architectures (arm, m68k) only.
+  * autoreconf.dpatch: Only update libtool.m4, which is newer conceptually
+    than libtool 1.4 (Ryan Murray).
+  * Apply autoreconf patch universally (Ryan Murray).
+  * More robust gij/gcj wrapper scripts, include /usr/lib/jni in default
+    JNI search path (Ben Burton). Closes: #167932.
+  * Build crtbeginT.o on m68k (closes: #177036).
+  * Fixed libc-dev source dependency (closes: #178602).
+  * Tighten shlib dependency to the current package version; should be
+    1:3.2.2-1 for the final release (closes: #178867).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 28 Jan 2003 21:59:30 +0100
+
+gcc-3.2 (1:3.2.2ds5-0pre6) unstable; urgency=low
+
+  * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20030123).
+  * Build locales needed by the libstdc++ testsuite.
+  * Update config.{guess,sub} files from autotools-dev (closes: #177674).
+  * Disable Ada and Java on netbsd-i386 (closes: #177679).
+  * gnat: Add suggests for gnat-doc and ada-reference-manual.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 23 Jan 2003 22:16:53 +0100
+
+gcc-3.2 (1:3.2.2ds4-0pre5.1) unstable; urgency=low
+
+  * Readd build dependency `locales' on arm.  locales is now installable
+  * Add autoreconf patch for mips{,el}. (closes: #176311)
+
+ -- Ryan Murray <rmurray@debian.org>  Wed, 22 Jan 2003 14:31:14 -0800
+
+gcc-3.2 (1:3.2.2ds4-0pre5) unstable; urgency=low
+
+  * Remove build dependency `libc6-dev-sparc64 [sparc]' for now.
+  * Remove build dependency `locales' on arm. locales is uninstallable
+    on arm due to the missing glibc-2.3.
+  * Use bison-1.35. bison-1.875 causes an hard error on the reduce/reduce
+    conflict in objc-parse.y.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 10 Jan 2003 10:10:43 +0100
+
+gcc-3.2 (1:3.2.2ds4-0pre4) unstable; urgency=low
+
+  * Try building with gcc-2.95 on m68k-linux. Building gcc-3.2 with gcc-3.2
+    does not work for me. m68k-linux doesn't look good at all ...
+  * Fix s390 build error.
+  * Add locales to build dependencies. A still unsolved issue is the
+    presence of the locales de_DE, en_PH, en_US, es_MX, fr_FR and it_IT,
+    or else some tests in the libstdc++ testsuite will fail.
+  * Put all -nof files in the -nof package (closes: #175253).
+  * Correctly exit logwatch script (closes: #175251).
+  * Install linker-map.gnu file for libstdc++_pic (closes: #175144).
+  * Install versioned gpcs docs only (closes: #173844).
+  * Include gpc test results in gpc package.
+  * Link local libstdc++ documentation to local source-level documentation.
+  * Clarify libstdc++ description (so version and library version).
+    Closes: #175799.
+  * Include library in libstdc++-dbg package (closes: #176005).
+
+ -- Matthias Klose <doko@debian.org>  Wed,  8 Jan 2003 23:39:50 +0100
+
+gcc-3.2 (1:3.2.2ds3-0pre3) unstable; urgency=low
+
+  * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20021231).
+    - Fix loop count computation for preconditioned unrolled loops.
+      Closes: #162919.
+    - Fix xmmintrin.h (_MM_TRANSPOSE4_PS) CVS 20021027 (closes: #163647).
+    - Fix [PR 8601] strlen/template interaction causes ICE CVS 20021201.
+      Closes: #166143.
+  * Watch the log files, which are written during the testsuite runs and print
+    out a message, if there is still activity. No more buildd timeouts on arm
+    and m68k ...
+  * Remove gpc's reference to librx1g-dev package (closes: #172953).
+  * Remove trailing dots on package descriptions.
+  * Fix external reference to cpp.info in gcc.info (closes: #174598).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 31 Dec 2002 13:47:52 +0100
+
+gcc-3.2 (1:3.2.2ds2-0pre2) unstable; urgency=medium
+
+  * Friday, 13th upload, so what do you expect ...
+  * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20021212).
+  * Fix gnat build (autobuild maintainers: please revert back to gnat-3.2
+    (<= 1:3.2.1ds6-1) for building gnat-3.2, if the build fails building
+    gnatlib and gnattools).
+  * Really disable sparc64 support.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 13 Dec 2002 00:26:37 +0100
+
+gcc-3.2 (1:3.2.2ds1-0pre1) unstable; urgency=low
+
+  * A candidate for the transition ...
+  * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20021210).
+    - doc/invoke.texi: Remove last reference to -a (closes: #171748).
+  * Disable sparc64 support. For now please use egcs64 to build sparc64
+    kernels.
+  * Disable Pascal on the sparc architecture (doesn't bootstrap).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 10 Dec 2002 22:33:13 +0100
+
+gcc-3.2 (1:3.2.2ds0-0pre0) unstable; urgency=low
+
+  * gcc-3.2 snapshot taken from the gcc-3_2-branch (CVS 20021202).
+    - Should fix _Pragma expansion within macros (closes: #157416).
+  * New gpc-20021128 version. Run check using EXTRA_TEST_PFLAGS=-g0
+  * Add tetex-bin to build dependencies (gpc needs it). Closes: #171203.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  3 Dec 2002 08:22:33 +0100
+
+gcc-3.2 (1:3.2.1ds6-1) unstable; urgency=low
+
+  * gcc-3.2.1 final release.
+  * Build gpc-20021111 for all architectures. hppa and i386 are
+    known to work. For the other architectures, send the usual FTBFS ...
+    WARNING: this gpc version is an alpha version, especially debug info
+    doesn't work well, so use -g0 for compiling. If you need a stable
+    gpc compiler, use gpc-2.95.
+  * Encode the gpc upstream version in the package name, the gpc release
+    date in the version number (requested by gpc upstream).
+  * Added libncurses5-dev and libgmp3-dev as build dependencies for the
+    gpc tests and runtime.
+  * Clean CVS files as well (closes: #169101).
+  * s390-biarch.dpatch added, backported from CVS (Gerhard Tonn).
+  * s390-config-ml.dpatch added, disables biarch for java,
+    libffi and boehm-gc on s390. They need a 64 bit runtime
+    during build which is not yet available on s390 (Gerhard Tonn).
+  * Biarch support for packaging adapted (Gerhard Tonn).
+    biarch variable added and with-sparc64 variable substituted in
+    most places by biarch.
+    dh_shlibdeps is applied only to 32 bit libraries on s390, since
+    ldd for 64 bit libraries don't work on 32 bit runtime.
+    Build dependency to libc6-dev-s390x added.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 20 Nov 2002 00:20:58 +0100
+
+gcc-3.2 (1:3.2.1ds5-0pre6) unstable; urgency=medium
+
+  * gcc-3.2.1 prerelease.
+  * Removed arm patch integrated upstream.
+  * Adjust gnat build dependency (closes: #167116).
+  * Always configure with --enable-clocale=gnu. The autobuilders do have
+    locales installed, but not generated the "de_DE" locale needed for
+    the autoconf test in libstdcc++-v3/aclocal.m4.
+  * libstdc++ documentaion: Don't compresss '*.txt' referenced by html pages.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 12 Nov 2002 07:19:44 +0100
+
+gcc-3.2 (1:3.2.1ds4-0pre5) unstable; urgency=medium
+
+  * gcc-3.2.1 snapshot (CVS 20021103).
+  * sparc64-build.dpatch: Updated. Lets sparc boostrap again.
+  * s390-loop.dpatch removed, already fixed upstream (Gerhard Tonn).
+  * bison.dpatch: Removed, patch submitted upstream.
+  * backport-java-6865.dpatch: Apply again during build.
+  * Tighten glibc dependency (closes: #166703).
+
+ -- Matthias Klose <doko@debian.org>  Sun,  3 Nov 2002 12:22:02 +0100
+
+gcc-3.2 (1:3.2.1ds3-0pre4) unstable; urgency=high
+
+  * gcc-3.2.1 snapshot (CVS 20021020).
+    - Expansion of _Pragma within macros fixed (closes: #157416).
+  * FTBFS: With the switch to bison-1.50 (and 1.75), gcc-3.2 fails to build from
+    source on Debian unstable systems. This is fixed in gcc HEAD, but not on
+    the current release branch.
+    HELP NEEDED:
+    - check what is missing from the patches in debian/patches/bison.dpatch.
+      This is a backport of the bison related patches, but showing regressions
+      in the gcc testsuite, so it cannot be applied.
+    - build gcc using byacc (bootstrap currently fails using byacc).
+    - build bison-1.35 in it's own package (the current 1.35-3 package fails
+      to build form source).
+    - and finally ask upstream to backport the patch to the branch. It's not
+      helpful not beeing able to follow the stable branch. Maybe we should
+      just switch to gcc HEAD as BSD does ...
+    As a terrible workaround, build the sources from CVS first on a machine,
+    with bison-1.35 installed, then package the tarball, so the bison
+    generated files are not rebuilt.
+
+  * re-add lost patch: configure with --enable-__cxa_atexit (closes: #163422),
+    Therefore urgency high.
+  * gcj-wrapper, gij-wrapper: Accept names starting with `.' (closes: #163172,
+    #164009).
+  * Point g++ manpage to correct g++ version (closes: #162843).
+  * Support for i386-freebsd-gnu (closes: #163883).
+  * s390-java.dpatch replaced with backport from cvs head (Gerhard Tonn).
+  * Disable the testsuite run on the Hurd (closes: #159650).
+  * s390-loop.dpatch added, fixes runtime problem (Gerhard Tonn).
+  * debian/patches/bison.dpatch: Backport for bison-1.75 compatibility.
+    Don't use it due to regressions.
+  * debian/patches/backport-java-6865.dpatch: Directly applied in the
+    included tarball because of bison problems.
+  * Make fixincludes priority optional, so linda can depend on it.
+  * Tighten binutils dependency.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 20 Oct 2002 10:52:49 +0200
+
+gcc-3.2 (1:3.2.1ds2-0pre3) unstable; urgency=low
+
+  * gcc-3.2.1 snapshot (CVS 20020923).
+  * Run the libstdc++ check-abi script. Results are put into the file
+    /usr/share/doc/libstdc++5/README.libstdc++-baseline in the libstdc++5-dev
+    package. This file contains a new baseline, if no baseline for this
+    architecture is included in the gcc sources.
+  * gcj-wrapper: Accept files starting with an underscore, accept
+    path names (closes: #160859, #161517).
+  * Explicitely call automake-1.4 when rebuilding Makefiles (closes: #161438).
+  * Let installed fixincludes script find files in /usr/lib/fixincludes.
+  * debian/rules.patch: Add .NOTPARALLEL as target, so that patches are
+    applied sequentially (closes: #159395).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 24 Sep 2002 07:36:56 +0200
+
+gcc-3.2 (1:3.2.1ds1-0pre2) unstable; urgency=low
+
+  * gcc-3.2.1 snapshot (CVS 20020913). Welcome back m68k in bootstrap land!
+  * Fix arm-tune.dpatch (closes: #159354).
+  * Don't overwrite LD_LIBRARY_PATH in build (closes: #158459).
+  * --disable-__cxa_atexit on NetBSD (closes: #159620).
+  * Reenable installation of message catalogs (disabled in 3.2-0pre2).
+    Closes: #160175.
+  * Ben Collins
+    - Re-enable sparc64 build. This time, it's part of the default compiler.
+      I have disabled 64/alt libraries as they are too much overhead. All
+      libraries build 64bit, but currently only libgcc/libstdc++ include the
+      64bit libraries.
+    Closes: #160404.
+  * Depend on autoconf2.13, instead of autoconf.
+  * Phil Blundell
+    - debian/patches/arm-update.dpatch: Fix python2.2 build failure.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  7 Sep 2002 08:05:02 +0200
+
+gcc-3.2 (1:3.2.1ds0-0pre1) unstable; urgency=medium
+
+  * gcc-3.2.1 snapshot (CVS 20020829).
+    New g++ option -Wabi:
+      Warn when G++ generates code that is probably not compatible with the
+      vendor-neutral C++ ABI.  Although an effort has been made to warn about
+      all such cases, there are probably some cases that are not warned about,
+      even though G++ is generating incompatible code.  There may also be
+      cases where warnings are emitted even though the code that is generated
+      will be compatible.
+    The current version of the ABI is 102, defined by the __GXX_ABI_VERSION
+    macro.
+  * debian/NEWS.*: Updated.
+  * Fix libstdc++-dev dependency on libc-dev for the Hurd (closes: #157004).
+  * Add versioned expect build dependency.
+  * Tighten binutils dependency to 2.13.90.0.4.
+  * debian/patches/arm-tune.dpatch: Increase stack limit for configure.
+  * 3.2-0pre4 did build gnat-3.2 compilers for all architectures. Build-Depend
+    on gnat-3.2 now (closes: #156734).
+  * Remove bashism's in gcj-wrapper (closes: #157982).
+  * Add -cp and -classpath options to gij(1). Backport from HEAD (#146634).
+  * Add fastjar documentation.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 30 Aug 2002 10:35:00 +0200
+
+gcc-3.2 (1:3.2ds0-0pre4) unstable; urgency=low
+
+  * Correct build dependency on gnat-3.1.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 12 Aug 2002 01:21:58 +0200
+
+gcc-3.2 (1:3.2ds0-0pre3) unstable; urgency=low
+
+  * gcc-3.2 upstream prerelease.
+  * Disable all configure options, which are standard:
+    --enable-threads=posix --enable-long-long, --enable-clocale=gnu
+
+ -- Matthias Klose <doko@debian.org>  Fri,  9 Aug 2002 21:59:08 +0200
+
+gcc-3.2 (1:3.2ds0-0pre2) unstable; urgency=low
+
+  * gcc-3.2 snapshot (CVS 20020802).
+  * Fix g++-include dir.
+  * Don't install the locale files (temporarily, until we don't build
+    gcc-3.1 anymore).
+  * New package libgcj-common to avoid conflict with classpath package.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  3 Aug 2002 09:08:34 +0200
+
+gcc-3.2 (1:3.2ds0-0pre1) unstable; urgency=low
+
+  * gcc-3.2 snapshot (CVS 20020729).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 29 Jul 2002 20:36:54 +0200
+
+gcc-3.1 (1:3.1.1ds3-1) unstable; urgency=low
+
+  * gcc-3.1.1 release. Following this release we will have a gcc-3.2
+    release soon, which is gcc-3.1.1 plus some C++ ABI changes. Once
+    gcc-3.2 hits the archives, gcc-3.1.1 will go away.
+  * Don't build the sparc64 compiler. The packaging/patches are
+    currently broken.
+  * Add missing headers on m68k and powerpc.
+  * Install libgcc_s_nof on powerpc.
+  * Install libffi's copyright and doc files (closes: #152198).
+  * Remove dangling symlink (closes: #149002).
+  * libgcj3: Add a conflict to the classpath package (closes: #148664).
+  * README.C++: Fix URLs.
+  * libstdc++-dbg: Install into /usr/lib/debug, document it.
+  * backport-java-6865.dpatch: backport from HEAD.
+  * Fix typo in gcj docs (closes: #148890).
+  * Change libstdc++ include dir: /usr/include/c++/3.1.
+  * libstdc++-codecvt.dpatch: New patch (closes: #149776).
+  * Build libstdc++-pic package.
+  * Move 64bit libgcc in its own package libgcc1-64 (closes: #147249).
+  * Tighten glibc dependency.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 29 Jul 2002 00:34:49 +0200
+
+gcc-3.1 (1:3.1.1ds2-0pre3) unstable; urgency=low
+
+  * Updated to CVS 2002-06-06 (gcc-3_1-branch).
+  * Updated s390-java patch (Gerhard Tonn).
+  * Don't use -O in STAGE1_FLAGS on m68k.
+  * Fix `-classpath' option in gcj-wrapper script (closes: #150142).
+  * Remove g++-cxa-atexit patch, use --enable-__cxa_atexit configure option.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  3 Jul 2002 23:52:58 +0200
+
+gcc-3.1 (1:3.1.1ds1-0pre2) unstable; urgency=low
+
+  * Updated to CVS 2002-06-06 (gcc-3_1-branch), fixing an ObjC regression.
+  * Welcome m68k to bootstrap land (thanks to Andreas Schwab).
+  * Add javac wrapper for gcj-3.1 (Michael Koch).
+  * Remove dangling symlink in /usr/share/doc/gcc-3.1 (closes: #149002).
+
+ -- Matthias Klose <doko@debian.org>  Fri,  7 Jun 2002 00:26:05 +0200
+
+gcc-3.1 (1:3.1.1ds0-0pre1) unstable; urgency=low
+
+  * Updated to CVS 2002-05-31 (gcc-3_1-branch).
+  * Change priorities from fastjar and gij-wrapper-3.1 from 30 to 31.
+  * Update arm-tune patch.
+  * Install xmmintrin.h header on i386 (closes: #148181).
+  * Install altivec.h header on powerpc.
+  * Call correct gij in gij-wrapper (closes: #148662, #148682).
+
+ -- Matthias Klose <doko@debian.org>  Wed, 29 May 2002 22:47:40 +0200
+
+gcc-3.1 (1:3.1ds2-2) unstable; urgency=low
+
+  * Tighten binutils dependency.
+  * Fix libstdc include dir for multilibs (Dan Jacobowitz).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 21 May 2002 08:03:49 +0200
+
+gcc-3.1 (1:3.1ds2-1) unstable; urgency=low
+
+  * GCC 3.1 release.
+  * Ada cannot be built by the autobuilders for the first time. Do it by hand.
+    gnatgcc and gnatbind need to be in the PATH.
+  * Build with CC=gnatgcc, when building the Ada compiler.
+  * Hurd fixes.
+  * Don't build the sparc64 compiler; the hack isn't up to date and glibc
+    isn't converted to use /lib64 and /usr/lib64.
+  * m68k-linux shows bootstrap comparision failures. If you want to build
+    the compiler anyway and ignore the bootstrap comparision failure, edit
+    debian/rules.patch and uncomment the patch to ignore the failure. See
+    /usr/share/doc/gcc-3.1/BOOTSTRAP_COMPARISION_FAILURE for the differences.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 15 May 2002 09:53:00 +0200
+
+gcc-3.1 (1:3.1ds1-0pre6) unstable; urgency=low
+
+  * Build from the "final prerelease" tarball (gcc-3.1-20020508.tar.gz).
+  * Build gnat-3.1-doc package.
+  * Build fastjar package without building java packages.
+  * Hurd fixes.
+  * Updated sparc64-build patch.
+  * Add s390-ada patch (Gerhard Tonn).
+  * Undo the dwarf2 support for hppa from -0pre5.
+
+ -- Matthias Klose <doko@debian.org>  Thu,  9 May 2002 17:21:09 +0200
+
+gcc-3.1 (1:3.1ds0-0pre5) unstable; urgency=low
+
+  * Use /usr/include/g++-v3-3.1 as C++ include dir.
+  * Update s390-java patch (Gerhard Tonn).
+  * Tighten binutils dependency (gas patch for m68k-linux).
+  * Use gnat-3.1 as the gnat package name (as found in gcc/ada/gnatvsn.ads).
+  * dwarf2 support hppa: a snapshot of the gcc/config/pa directory
+    from the trunk dated 2002-05-02.
+
+ -- Matthias Klose <doko@debian.org>  Fri,  3 May 2002 22:51:37 +0200
+
+gcc-3.1 (1:3.1ds0-0pre4) unstable; urgency=low
+
+  * Use gnat-5.00w as the gnat package name (as found in gcc/ada/gnatvsn.ads).
+  * Don't build the shared libgnat library. It assumes an existing shared
+    libiberty library.
+  * Don't install the libgcjgc library.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 25 Apr 2002 08:48:04 +0200
+
+gcc-3.1 (1:3.1ds0-0pre3) unstable; urgency=low
+
+  * Build fastjar on all architectures.
+  * Update m68k patches.
+  * Update s390-java patch (Gerhard Tonn).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 14 Apr 2002 15:34:47 +0200
+
+gcc-3.1 (1:3.1ds0-0pre2) unstable; urgency=low
+
+  * Add Ada support. To successfully build, a working gnatbind and gcc
+    driver with Ada support is needed.
+  * Apply needed arm patches from 3.0.4.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  6 Apr 2002 13:17:08 +0200
+
+gcc-3.1 (1:3.1ds0-0pre1) unstable; urgency=low
+
+  * First try for gcc-3.1.
+
+ -- Matthias Klose <doko@debian.org>  Mon,  1 Apr 2002 23:39:30 +0200
+
+gcc-3.0 (1:3.0.4ds3-6) unstable; urgency=medium
+
+  * Second try at fixing sparc build problems.
+
+ -- Phil Blundell <pb@debian.org>  Sun, 24 Mar 2002 14:49:26 +0000
+
+gcc-3.0 (1:3.0.4ds3-5) unstable; urgency=medium
+
+  * Enable java on ARM.
+  * Create missing directory to fix sparc build.
+
+ -- Phil Blundell <pb@debian.org>  Fri, 22 Mar 2002 20:21:59 +0000
+
+gcc-3.0 (1:3.0.4ds3-4) unstable; urgency=low
+
+  * Link with system zlib (closes: #136359).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 12 Mar 2002 20:47:59 +0100
+
+gcc-3.0 (1:3.0.4ds3-3) unstable; urgency=low
+
+  * Build libf2c (pic and non-pic) with -mieee on alpha-linux.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 10 Mar 2002 00:37:24 +0100
+
+gcc-3.0 (1:3.0.4ds3-2) unstable; urgency=medium
+
+  * Apply hppa-build patch (Randolph Chung). Closes: #136731.
+  * Make libgcc1 conflict/replace with libgcc1-sparc64. Closes: #135709.
+  * gij-3.0 provides the `java' command. Closes: #128947.
+  * Depend on binutils (>= 2.11.93.0.2-2), allows stripping of libgcj.a
+    again. Closes: #99307.
+  * Update README.cross pointing to the README of the toolchain-source
+    package.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  6 Mar 2002 21:53:34 +0100
+
+gcc-3.0 (1:3.0.4ds3-1) unstable; urgency=low
+
+  * Final gcc-3.0.4 release.
+  * debian/rules.d/binary-java.mk: Fix dormant typo, exposed by removing the
+    duplicate libgcj dependency and adding the gij-3.0 package.
+    Closes: #134005.
+  * New patch by Phil Blundell to fix scalapack build error on m68k.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 20 Feb 2002 23:59:43 +0100
+
+gcc-3.0 (1:3.0.4ds2-0pre020210) unstable; urgency=low
+
+  * Make the base package dependent on the binary-arch target. Closes: #133433.
+  * Get libstdc++ on arm woring (define _GNU_SOURCE). Closes: #133435.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 11 Feb 2002 20:31:12 +0100
+
+gcc-3.0 (1:3.0.4ds2-0pre020209) unstable; urgency=high
+
+  * Update to CVS sources (20020209 gcc-3_0-branch).
+  * Apply patch to fix bootstrap error on arm-linux (submitted upstream
+    by Phil Blundell). Closes: #130422.
+  * Make base package architecture any.
+  * Decouple versioned shlib dependencies from release number for
+    libobjc as well.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  9 Feb 2002 01:30:11 +0100
+
+gcc-3.0 (1:3.0.4ds1-0pre020203) unstable; urgency=medium
+
+  * One release critical bug outstanding:
+    - bootstrap error on arm.
+  * Update to CVS sources (20020203 gcc-3_0-branch).
+  * Fixed upstream: PR c/3504: Correct documentation of __alignof__.
+    Closes: #85445.
+  * Remove libgcc-powerpc patch, integrated upstream (closes: #131977).
+  * Tighten binutils build dependency (to address #126162).
+  * Move jv-convert to gcj package (closes: #131985).
+
+ -- Matthias Klose <doko@debian.org>  Sun,  3 Feb 2002 14:47:14 +0100
+
+gcc-3.0 (1:3.0.4ds0-0pre020127) unstable; urgency=low
+
+  * Two release critical bugs outstanding:
+    - bootstrap error on arm.
+    - bus errors for C++ and java executables on sparc (see the testsuite
+      results).
+  * Update to CVS sources (20020125 gcc-3_0-branch).
+  * Enable java support for s390 architecture (patch from Gerhard Tonn).
+  * Updated NEWS file for 3.0.3.
+  * Disable building the gcc-sparc64, but build a multilibbed compiler
+    for sparc as the default.
+  * Disabled the subreg-byte patch for sparc (request from Ben Collins).
+  * Fixed reference to libgcc1 package in README (closes: #126218).
+  * Do recommend libc-dev, not depend on it. For low-end or embedded systems
+    the dependency on libc-dev can make the difference between
+    having enough or having too little space to build a kernel.
+  * README.cross: Updated by Hakan Ardo.
+  * Decouple versioned shlib dependencies from release number. Closes: #118391.
+  * Fix diversions for gcc-3.0-sparc64 package (closes: #128178),
+    unconditionally remove `sparc64-linux-gcc' alternative.
+  * g77/README.libg2c.Debian: New file mentioning `libg2c-pic'. The next
+    g77 version (3.1) does build a static and shared library (closes: #104250).
+  * Fix formatting errors in the synopsis of the java man pages. Maybe the
+    reason for #127571. Closes: #127571.
+  * fastjar: Fail for the (currently incorrect) -u option. Addresses: #116145.
+    Add alternative for `jar' using priority 30 (closes: #118648).
+  * jv-convert: Add --help option and man page. Backport from HEAD branch.
+  * libgcj2-dev: Remove duplicate dependency (closes: #127805).
+  * Giving up and make just another new package gij-X.Y with only the gij-X.Y
+    binary for policy conformance (closes: #127111).
+  * gij: Provides an alternative for `java' (priority 30) using a wrapper
+    script (Stephen Zander) (closes: #128974). Added simple manpage.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 27 Jan 2002 13:33:41 +0100
+
+gcc-3.0 (1:3.0.3ds3-1) unstable; urgency=low
+
+  * Final gcc-3.0.3 release.
+  * Do not compress .txt files in libstdc++ docs referenced from html
+    pages (closes: #124136).
+  * libstdc++-dev suggests libstdc++-doc.
+  * debian/patches/gcc-ia64-NaT.dpatch: Update (closes: #123685).
+
+ -- Matthias Klose <doko@debian.org>  Fri, 21 Dec 2001 02:54:11 +0100
+
+gcc-3.0 (1:3.0.3ds2-0pre011215) unstable; urgency=low
+
+  * Update to CVS sources (011215).
+  * libstdc++ documentation updated upstream (closes: #123790).
+  * debian/patches/gcc-ia64-NaT.dpatch: Disable. Fixes bootstrap error
+    on ia64 (#123685).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 15 Dec 2001 14:43:21 +0100
+
+gcc-3.0 (1:3.0.3ds1-0pre011210) unstable; urgency=medium
+
+  * Update to CVS sources (011208).
+  * Supposed to fix powerpc build error (closes: #123155).
+
+ -- Matthias Klose <doko@debian.org>  Thu, 13 Dec 2001 07:26:05 +0100
+
+gcc-3.0 (1:3.0.3ds0-0pre011209) unstable; urgency=medium
+
+  * Update to CVS sources (011208). Frozen for upstream 3.0.3 release.
+  * Apply contrib/PR3145.patch, a backport of Nathan Sidwell's patch to
+    fix PR c++/3145, the infamous "virtual inheritance" bug. This affected
+    especially KDE2 (eg. artsd). Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+  * cc1plus segfault in strength reduction fixed upstream. Closes: #122547.
+  * debian/patches/gcc-ia64-NaT.dpatch: Add patch to avoid a bug that can
+    cause miscompiled userapps to crash the kernel. Closes: #121924.
+  * Reenable shared libgcc for powerpc. Fixed upstream.
+    http://gcc.gnu.org/ml/gcc-patches/2001-11/msg00340.html
+    debian/patches/libgcc-powerpc.dpatch: New patch.
+  * Add upstream changelogs.
+  * Remove gij alternative. Move to gij package.
+
+ -- Matthias Klose <doko@debian.org>  Sun,  9 Dec 2001 09:36:48 +0100
+
+gcc-3.0 (1:3.0.2ds4-4) unstable; urgency=medium
+
+  * Disable building of libffi on mips and mipsel.
+    (closes: #117503).
+  * Enable building of shared libgcc on s390
+    (closes: #120452).
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sat, 1 Dec 2001 06:15:29 -0500
+
+gcc-3.0 (1:3.0.2ds4-3) unstable; urgency=medium
+
+  * Fix logic to build libffi without java (closes: #117503).
+
+ -- Matthias Klose <doko@debian.org>  Sun,  4 Nov 2001 14:34:50 +0100
+
+gcc-3.0 (1:3.0.2ds4-2) unstable; urgency=medium
+
+  * Enable java for ia64 (Jeff Licquia). Closes: #116798.
+  * Allow building of libffi without gcj (Jeff Licquia).
+    New libffi packages for arm hurd-i386 mips mipsel,
+    still missing: hppa, s390.
+  * debian/NEWS.gcc: Add 3.0.2 release notes.
+  * debian/patches/hppa-align.dpatch: New patch from Alan Modra,
+    submitted by Randolph Tausq.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 25 Oct 2001 23:59:31 +0200
+
+gcc-3.0 (1:3.0.2ds4-1) unstable; urgency=medium
+
+  * Final gcc-3.0.2 release. The source tarball is not the released
+    tarball, but taken from CVS 011024).
+  * Remove patch for s390, included upstream.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 24 Oct 2001 00:49:40 +0200
+
+gcc-3.0 (1:3.0.2ds3-0pre011014) unstable; urgency=low
+
+  * Update to CVS sources (011014). Frozen for upstream 3.0.2 release.
+    Closes: #109351, #114099, #114216, #105741 (allegro3938).
+  * Added debian/patches/fastjar.dpatch, which makes fastjar extract
+    filenames correctly (previously, some had incorrect names on extract).
+    Closes: #113236.
+  * Priorities fixed in the past (closes: #94404).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 14 Oct 2001 13:19:43 +0200
+
+gcc-3.0 (1:3.0.2ds2-0pre010923) unstable; urgency=low
+
+  * Bootstraps on powerpc again (closes: #112777).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 23 Sep 2001 01:32:11 +0200
+
+gcc-3.0 (1:3.0.2ds2-0pre010922) unstable; urgency=low
+
+  * Update to CVS sources (010922).
+  * Fixed upstream (closes: #111801). #105569 on hppa.
+  * Update hppa patch (Matt Taggart).
+  * Fix libstdc++-dev package description (closes: #112758).
+  * debian/rules.d/binary-objc.mk: Fix build error (closes: #112462).
+  * Make gobjc-3.0 conflict with gcc-3.0-sparc64 (closes: #111772).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 22 Sep 2001 09:34:49 +0200
+
+gcc-3.0 (1:3.0.2ds1-0pre010908) unstable; urgency=low
+
+  * Update to CVS sources (010908).
+  * Update hppa patch (Matt Taggart).
+  * Depend on libgc6-dev, not libgc5-dev, which got obsolete (during
+    the freeze ...). However adds s390 support (closes: #110189).
+  * debian/patches/m68k-reload.dpatch: New patch (Roman Zippel).
+    Fixes #89023.
+  * debian/patches/gcc-sparc.dpatch: New patch ("David S. Miller").
+    Fixes libstdc++ testsuite failures on sparc.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 8 Sep 2001 14:26:20 +0200
+
+gcc-3.0 (1:3.0.2ds0-0pre010826) unstable; urgency=low
+
+  * gcc-3.0-nof: Fix symlink to gcc-3.0-base doc directory.
+  * debian/patches/gcj-without-rpath: New patch.
+  * Remove self dependency on libgcj package.
+  * Handle diversions for upgrades from 3.0 and 3.0.1 -> 3.0.2
+    in gcc-3.0-sparc64 package.
+  * Build libg2c.a with -fPIC -DPIC and name the result libg2c-pic.a.
+    Link with this library to avoid linking with non-pic code.
+    Use this library when building dynamically loadable objects (python
+    modules, gimp plugins, ...), which need to be linked against g2c or
+    a library which is linked against g2c (i.e. lapack).
+    Packages needing '-lg2c-pic' must have a build dependency on
+    'g77-3.0 (>= 1:3.0.2-0pre010826).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 26 Aug 2001 13:59:03 +0200
+
+gcc-3.0 (1:3.0.2ds0-0pre010825) unstable; urgency=low
+
+  * Update to CVS sources (010825).
+  * Add libc6-dev-sparc64 to gcc-3.0-sparc64 and to sparc build dependencies.
+  * Remove conflicts on egcc package (closes: #109718).
+  * Fix gcc-3.0-nof dependency.
+  * s390 patches against gcc-3.0.1 (Gerhard Tonn).
+  * debian/control: Require binutils (>= 2.11.90.0.27)
+
+ -- Matthias Klose <doko@debian.org>  Sat, 25 Aug 2001 10:59:15 +0200
+
+gcc-3.0 (1:3.0.1ds3-1) unstable; urgency=low
+
+  * Final gcc-3.0.1 release.
+  * Changed upstream: default of -flimit-inline is 600 (closes: #106716).
+  * Add fastjar man page (submitted by "The Missing Man Pages Project",
+    http://www.netmeister.org/misc/m2p2i/) (closes: #103051).
+  * Fixed in last upload as well: #105246.
+  * debian/patches/cpp-memory-leak.dpatch: New patch
+  * Disable installation of shared libgcc on s390 (Gerhard Tonn).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 20 Aug 2001 20:47:13 +0200
+
+gcc-3.0 (1:3.0.1ds2-0pre010811) unstable; urgency=high
+
+  * Update to CVS sources (010811). Includes s390 support.
+  * Add xlibs-dev to Build-Depends (libgcj).
+  * Enable java for powerpc, disable java for ia64.
+  * Enable ObjC garbage collection for all archs, which have a libgc5-dev
+    package.
+  * New patch libstdc++-codecvt (Michael Piefel) (closes: #104614).
+  * Don't strip static libgcj library (work around binutils bug #107812).
+  * Handle diversions for upgrade 3.0 -> 3.0.1 in gcc-3.0-sparc64 package
+    (closes: #107569).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 11 Aug 2001 20:42:15 +0200
+
+gcc-3.0 (1:3.0.1ds1-0pre010801) unstable; urgency=high
+
+  * Update to CVS sources (010801). (closes: #107012).
+  * Remove build dependency on non-free graphviz and include pregenerated
+    docs (closes: #107124).
+  * Fixed in 3.0.1 (closes: #99307).
+  * Updated m68k-updates patch (Roman Zippel).
+  * Another fix for ia64 packaging bits (Randolph Chung).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 31 Jul 2001 21:52:55 +0200
+
+gcc-3.0 (1:3.0.1ds0-0pre010727) unstable; urgency=high
+
+  * Update to CVS sources (010727).
+  * Add epoch to source version. Change '.dsx' to 'dsx', so that
+    3.1.1ds0 gt 3.1ds7 (closes: #106538).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 28 Jul 2001 09:56:29 +0200
+
+gcc-3.0 (3.0.1.ds0-0pre010723) unstable; urgency=high
+
+  * ia64 packaging bits (Randolph Chung) (closes: #106252).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 23 Jul 2001 23:02:03 +0200
+
+gcc-3.0 (3.0.1.ds0-0pre010721) unstable; urgency=high
+
+  * Update to CVS sources (010721).
+    - Remove patches applied upstream: libstdc++-limits.dpatch,
+      objc-data-references
+    - Updated other patches.
+  * Fix gij alternative (closes: #103468, #103883).
+  * Patch to fix bootstrap on sparc (closes: #103568).
+  * Corrected (closes: #105371) and updated README.Debian.
+  * m68k patches for sucessful bootstrap (Roman Zippel).
+  * Add libstdc++v3 porting hints to README.Debian and README.C++.
+  * m68k md fix (#105622) (Roman Zippel).
+  * debian/rules2: Disable non-functional ulimit on Hurd (#105884).
+  * debian/control: Require binutils (>= 2.11.90.0.24)
+  * Java is enabled for alpha (closes: #87300).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 22 Jul 2001 08:24:04 +0200
+
+gcc-3.0 (3.0.ds9-4) unstable; urgency=high
+
+  * Move this version to testing ASAP. testing still has a prerelease
+    version with now incompatible ABI's. If sparc doesn't build,
+    then IMHO it's better to remove it from testing.
+  * debian/control.m4: Set uploaders field. Adjust description of
+    gcc-3.0 (binary) package (closes: #102271, #102620).
+  * Separate gij.1 in it's own pseudo man page (closes: #99523).
+  * debian/patches/java-manpages.dpatch: New patch.
+  * libgcj: Install unversioned gij.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  3 Jul 2001 07:38:08 +0200
+
+gcc-3.0 (3.0.ds9-3) unstable; urgency=high
+
+  * Reenable configuration with posix threads on i386 (lost in hurd-i386
+    merge).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 24 Jun 2001 22:21:45 +0200
+
+gcc-3.0 (3.0.ds9-2) unstable; urgency=medium
+
+  * Move this version to testing ASAP. testing still has a prerelease
+    version with now incompatible ABI's.
+  * Add libgcc0 and libgcc300 to the build conflicts (#102041).
+  * debian/README.FIRST: Removed (#101534).
+  * Updated subreg-byte patch (doc files).
+  * Disable java for the Hurd, mips and mipsel (#101570).
+  * Patch for building on the Hurd (#101708) (Jeff Bailey <jbailey@nisa.net>).
+  * Packaging fixes for the Hurd (#101711) (Jeff Bailey <jbailey@nisa.net>).
+  * Include pregenerated doxygen (1.2.6) docs for libstdc++-v3 (#101557).
+    The current doxygen-1.2.8.1 segaults.
+  * C++: Enable -fuse-cxa-atexit by default (#101901).
+  * Correct mail address in gccbug (#101743).
+  * Make rules resumable after failure in binary-xxx targets (#101637).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 24 Jun 2001 16:04:53 +0200
+
+gcc-3.0 (3.0.ds9-1) unstable; urgency=low
+
+  * Final 3.0 release.
+  * Update libgcc version number (#100983, #100988, #101069, #101115, #101328).
+  * Updated hppa-build patch (Matt Taggart <taggart@carmen.fc.hp.com>).
+  * Disable java for hppa.
+  * Updated subreg-byte patch for sparc (Ben Collins).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 18 Jun 2001 18:26:04 +0200
+
+gcc-3.0 (3.0.ds8-0pre010613) unstable; urgency=low
+
+  * Update patches for recent (010613 23:13 +0200) CVS sources.
+  * Fix packaging bugs (#100459, #100447, #100483).
+  * Build-Depend on gawk, mawk doesn't work well with test_summary.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 13 Jun 2001 23:13:38 +0200
+
+gcc-3.0 (3.0.ds7-0pre010609) unstable; urgency=low
+
+  * Fix build dependency for the hurd (#99164).
+  * Update patches for recent (010609) CVS sources.
+  * Disable java on powerpc (link error in libjava).
+  * gcc-3.0-base.postinst: Don't prompt for non-interactive installs (#100110).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 10 Jun 2001 09:45:57 +0200
+
+gcc-3.0 (3.0.ds6-0pre010526) unstable; urgency=high
+
+  * Urgency "high" for replacing the gcc-3.0 snapshots in testing, which
+    now are incompatile due to the changed ABIs.
+  * Upstream begins tagging with "gcc-3_0_pre_2001mmdd".
+  * Tighten dependencies to install only binary packages derived from
+    one source (#98851). Tighten libc6-dev dependency to match libc6.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 27 May 2001 11:35:31 +0200
+
+gcc-3.0 (3.0.ds6-0pre010525) unstable; urgency=low
+
+  * ATTENTION: The ABI (exception handling) changed. No upgrade path from
+    earlier snapshots (you had been warned in the postinst ...)
+    Closing #93597, #94576, #96448, #96461.
+    You have to rebuild
+  * HELP is appreciated for scanning the Debian BTS and sending followups
+    to bug reports!!!
+  * Should we name debian gcc uploads? What about a "still seeking
+    g++ maintainer" upload?
+  * Fixed in gcc-3.0: #97030
+  * Update patches for recent (010525) CVS sources.
+  * Make check depend on build target (fakeroot problmes).
+  * debian/rules.d/binary-libgcc.mk: new file, build first.
+  * Free memory detection on the hurd for running the testsuite.
+  * Update debhelper build dependency.
+  * libstdc++-doc: Include doxygen generated docs.
+  * Fix boring packaging bugs, too tired for appropriate changelogs ...
+    #93343, #96348, #96262, #97134, #97905, #96451, #95812, #93157
+  * Fixed bugs: #87000.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 26 May 2001 23:10:42 +0200
+
+gcc-3.0 (3.0.ds5-0pre010510) unstable; urgency=low
+
+  * Update patches for recent (010506) CVS sources.
+  * New version of source, as of 2001-05-10
+  * New version of gpc source, as of 2001-05-06 (disabled by default).
+  * Make gcc-3.0-sparc64 provide an alternative for sparc64-linux-gcc,
+    since it can build kernels just fine (it seems)
+  * Add hppa patch from Matt Taggart
+  * Fix objc info inclusion...now merged with gcc info
+  * Do not install the .la for libstdc++, since it confuses libtool linked
+    applications when libstdc++3-dev and libstdc++2.10-dev are both
+    installed (closes #97905).
+  * Fixed gcc-base and libgcc section/prio to match overrides
+
+ -- Ben Collins <bcollins@debian.org>  Mon,  7 May 2001 00:08:52 +0200
+
+gcc-3.0 (3.0.ds5-0pre010427) unstable; urgency=low
+
+  * Fixed priority for fastjar from optional to extra
+  * New version of source, as of 2001-04-27
+  * Fix description of libgcj-dev
+  * libffi-install: Make libffi installable
+  * Add libffi and libffi-dev packages. libffi is only enabled for java
+    targets right now. Perhaps more will be enabled later.
+  * Fixes to build cross compiler package (for avr)
+    (Hakan Ardo <hakan@debian.org>).
+  * Better fixincludes description (#93157).
+  * Remove all remnants of libg++
+  * Remove all hacks around libstdc++ version. Since we are strictly v3 now,
+    we can treat it like a normal shared lib, and not worry about all those
+    ABI changes.
+  * Remove all cruft control scripts. Note, debhelper will create scripts
+    that it needs to. It will do the doc link stuff and the ldconfig stuff
+    explicitly.
+  * Clean up the SONAME parsing stuff, make it a little more cleaner over
+    all the lib packages
+  * Make libffi install when built (IOW, whenever java is enabled). This
+    should obsolete the libffi package, which is old and broken
+  * Revert to normal sonames, except for ia64 (for now)
+  * Remove all references to dh_testversion, since they are deprecated for
+    Build-Depends
+  * Fix powerpc nof build
+  * Remove all references to the MULTILIB stuff, since the arches are
+    using specialized builds anyway (nof, softfloat).
+  * Added 64bit sparc64 package (gcc-3.0-sparc64, libgcc0-sparc64)
+  * Removed obsolete shlibs.local file
+
+ -- Ben Collins <bcollins@debian.org>  Sun, 15 Apr 2001 21:33:15 -0400
+
+gcc-3.0 (3.0.ds4-0pre010403) unstable; urgency=low
+
+  * debian/README: Updated for gcc-3.0
+  * debian/rules.patch: Added subreg-byte patch for sparc
+  * debian/rules.unpack: Update to current CVS for gcc tarball name
+  * debian/patches/subreg-byte.dpatch: sparc subreg-byte support
+  * debian/patches/gcc-rawhide.dpatch: Removed
+    debian/patches/gpc-2.95.dpatch: Removed
+    debian/patches/sparc32-rfi.dpatch: Removed
+    debian/patches/temporary.dpatch: Removed
+  * Moving to unstable now
+  * debian/patches/gcc-ppc-disable-shared-libgcc.dpatch: New patch,
+    disables shared libgcc for powerpc target, since it isn't compatible
+    with the EABI objects.
+  * Create $(with_shared_libgcc) var
+  * debian/rules.d/binary-gcc.mk: Use this new variable to determine if
+    the libgcc package actually has any files
+
+ -- Ben Collins <bcollins@debian.org>  Tue,  3 Apr 2001 23:00:55 -0400
+
+gcc-3.0 (3.0.ds2-0pre010223) experimental; urgency=low
+
+  * New snapshot. Use distinct shared object names for shared libraries:
+    we don't know if binary API's still change until the final release.
+  * Versioned package names.
+  * debian/control.m4: New file. Add gcc-base, libgcc0, libobjc1,
+    libstdc++-doc, libgcj1, libgcj1-dev, fastjar, fixincludes packages.
+    Remove gcc-docs package.
+  * debian/gcov.1: Remove.
+  * debian/*: Remove 2.95.x support. Prepare for 3.0.
+  * debian/patches: Remove 2.95.x patches.
+  * Changed source package name. It's not allowed anymore to overwrite
+    source packages with different content. Introducing a 'debian source
+    element' (.ds<num>), which is stripped again from the version number
+    for the binary packages.
+  * Fixed bugs and added functionality:
+    #26436, #27878, #33786, #34876, #35477, #42662, #46181, #42989,
+    #47981, #48530, #50529, #51227, #51456, #51651, #52382, #53698,
+    #55291, #55967, #56867, #58219, #59005, #59232, #59776, #64628,
+    #65687, #67631, #68632, #68963, #68987, #69530, #72933, #75120,
+    #75759, #76645, #76827, #83221, #87540
+  * libgcj fixes: 42894, #51266, #68560, #71187, #79984
+
+ -- Matthias Klose <doko@debian.org>  Sat, 24 Feb 2001 13:41:11 +0100
+
+gcc-2.95 (2.95.3-2.001222) experimental; urgency=low
+
+  * New upstream version 2.95.3 experimental (CVS 20001222).
+  * debian/control.in: Versioned package names, removal of snapshot logic.
+    Remove fake gcc-docs package.
+  * Reserve -1 release numbers for woody.
+  * Updated to gpc-20001218.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 22 Dec 2000 19:53:03 +0100
+
+gcc (2.95.2-20) unstable; urgency=low
+
+    * Apply patch from gcc-2_95-branch; remove ulimit for make check.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 10 Dec 2000 17:01:13 +0100
+
+gcc (2.95.2-19) unstable; urgency=low
+
+  * Added testsuite-20001207 from current snapshots. We'll need results
+    for 2.95.2 to make sure there are no regressions against that release.
+    Dear build daemons and porters to other architectures, please send an
+    email to gcc-testresults@gcc.gnu.org.
+    You can do this by running "debian/rules mail-summary".
+  * Updated to gpc-20001206.
+  * Added S/390 patch prepared by Chu-yeon Park <kokids@debian.org> (#78983).
+  * debian/patches/libio.dpatch: Fix iostream doc (fixes #77647).
+  * debian/patches/gcc-doc.dpatch: Update URL (fixes #77542).
+  * debian/patches/gcc-reload1.dpatch Patch from the gcc-bug list which
+    fixes a problem in "long long" on i[345]86 (i686 was not affected).
+
+ -- Matthias Klose <doko@debian.org>  Sat,  9 Dec 2000 12:30:32 +0100
+
+gcc (2.95.2-18) unstable; urgency=low
+
+  * debian/control.in: Fix syntax errors (fixes #76146, #76458).
+    Disable gpc on the hurd by request (#75686).
+  * debian/patches/arm-various.dpatch: Patches from Philip Blundell
+    for ARM arch (fixes #75801).
+  * debian/patches/gcc-alpha-mi-thunk.dpatch: Patches from Chris Chimelis
+    for alpha arch.
+  * debian/patches/g77-docs.dpatch: Adjust g77 docs (fixes #72594).
+  * Update gpc to gpc-20001118.
+  * Reenable gpc for alpha.
+  * debian/README.C++: Merge debian/README.libstdc++ and C++ FAQ information
+    provided by Matt Zimmermann.
+  * Build gcj only on architectures, where libgcj-2.95.1 can be built as well.
+    Probably needs some adjustments ...
+  * Conditionalize for chill, fortran, java, objc and chill.
+
+  * NOT APPLIED:
+    debian/patches/libstdc++-bastring.dpatch: Apply fix (fixes #75759).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 19 Nov 2000 10:40:41 +0100
+
+gcc (2.95.2-17) unstable; urgency=low
+
+  * Disable gpc for alpha.
+  * Include gpc-cpp in gpc package (fixes #74492).
+  * Don't build gcc-docs compatibility package anymore.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 11 Oct 2000 06:16:53 +0200
+
+gcc (2.95.2-16) unstable; urgency=low
+
+  * Applied the emdebian/cross compiler patch and documentation
+    (Frank Smith <smith@amirix.com>).
+  * Applied patch for avr target (Hakan Ardo <hakan@debian.org>).
+  * debian/control.in: Add awk to Build-Depends.
+    Tighten libc6-dev dependency for libstdc++-dev (fixes #73031,
+    #72531, #72534).
+  * Disable libobjc_gc for m68k again (fixes #74380).
+  * debian/patches/arm-namespace.dpatch: Apply patch from Philip
+    Blundell <pb@futuretv.com> to fix name space pollution on arm
+    (fixes #70937).
+  * Fix more warnings in STL headers (fixes #69352, #71943).
+
+ -- Matthias Klose <doko@debian.org>  Mon,  9 Oct 2000 21:51:41 +0200
+
+gcc (2.95.2-15) unstable; urgency=low
+
+  * debian/control.in: Add libgc5-dev to build depends (fixes #67015).
+  * debian/rules.def: Build GC enabled ObjC runtime for sparc.
+  * Bug #58741 fixed (in some version since 2.95.2-5).
+  * debian/control.in: Recommend librx1g-dev, libgmp2-dev, libncurses5-dev
+    (unit dependencies).
+  * Patches from Marcus Brinkmann for the hurd (fixes #67763):
+    - debian/rules.defs: Disable objc_gc on hurd-i386.
+      Disable libg++ on GNU systems.
+    - debian/rules2: Set correct names of libstdc++/libg++
+      libraries on GNU systems.
+      Write out correct shlibs and shlibs.local file content.
+    - Keep _G_config.h for the Hurd.
+  * Apply patch for ObjC linker warnings.
+  * Don't apply gcj backport patch for sparc.
+  * Apply libio compatability patch
+  * debian/glibcver.sh: generate appropriate version for glibc
+  * debian/rules.conf: for everything after glibc 2.1, we always append
+    "-glibc$(ver)" to the C++ libs for linux.
+  * Back down gpc to -13 version (-14 wont compile on anything but i386
+    and m68k becuase of gpc).
+  * Remove extraneous and obsolete sparc64 patches/files from debian/*
+
+ -- Ben Collins <bcollins@debian.org>  Thu, 21 Sep 2000 08:08:35 -0400
+
+gcc-snapshot (20000901-2.2) experimental; urgency=low
+
+  * New snapshot.
+  * debian/rules2: Move tradcpp0 to cpp package.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  2 Sep 2000 01:14:28 +0200
+
+gcc-snapshot (20000802-2.1) experimental; urgency=low
+
+  * New snapshot.
+  * debian/rules2: Fixes. tradcpp0 is in gcc package, not cpp.
+
+ -- Matthias Klose <doko@debian.org>  Thu,  3 Aug 2000 07:40:05 +0200
+
+gcc-snapshot (20000720-2) experimental; urgency=low
+
+  * New snapshot.
+  * Enable libstdc++-v3.
+  * debian/rules2: Don't use -D for /usr/bin/install.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 20 Jul 2000 22:33:37 +0200
+
+gcc (2.95.2-14) unstable; urgency=low
+
+  * Update gpc patch.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  5 Jul 2000 20:51:16 +0200
+
+gcc (2.95.2-13) frozen unstable; urgency=low
+
+  * Update debian/README: document how to compile 2.0.xx kernels; don't
+    register gcc272 as an alternative for gcc (closes #62419).
+    Clarify compiler setup (closes #65548).
+  * debian/control.in: Make libstdc++-dev depend on current version of g++.
+  * Undo CVS update from release -8 (problems on alpha, #55263).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 19 Jun 2000 23:06:48 +0200
+
+gcc (2.95.2-12) frozen unstable; urgency=low
+
+  * debian/gpc.postinst: Correct typo introduced with -11 (fixes #64193).
+  * debian/patches/gcc-rs600.dpatch: ppc codegen fix (fixes #63933).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 21 May 2000 15:56:05 +0200
+
+gcc (2.95.2-11) frozen unstable; urgency=medium
+
+  * Upload to unstable again (fixes critical #63784).
+  * Fix doc-base files (fixes important #63810).
+  * gpc wasn't built in -10 (fixes #63977).
+  * Make /usr/bin/pc an alternative (fixes #63888).
+  * Add SYSCALLS.c.X to gcc package.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 14 May 2000 22:17:44 +0200
+
+gcc (2.95.2-10) frozen; urgency=low
+
+  * debian/control.in: make gcc conflict on any version of egcc
+    (slink to potato upgrade problem, fixes grave #62084).
+  * Build protoize programs, separate out in new package (fixes #59436,
+    #62911).
+  * Create dummy gcc-docs package for smooth update from slink (fixes #62537).
+  * Add doc-base support for all -doc packages (fixes #63380).
+
+ -- Matthias Klose <doko@debian.org>  Mon,  1 May 2000 22:24:28 +0200
+
+gcc (2.95.2-9) frozen unstable; urgency=low
+
+  * Disable the sparc-bi-arch.dpatch (patch from Ben Collins, built
+    for sparc as NMU 8.1) (fixes critical #61529 and #61511).
+    "Seems that when you compile gcc 2.95.x for sparc64-linux and compile
+     sparc32 programs, the code is not the same as sparc-linux compile for
+     sparc32 (this is a bug, and is fixed in gcc 2.96 CVS)."
+  * debian/patches/gcj-vs-iconv.dpatch: Option '--encoding' for
+    encoding of input files. Patch from Tom Tromey  <tromey@cygnus.com>
+    backported to 2.95.2 (fixes #42895).
+    Compile a Latin-1 encoded file with `gcj --encoding=Latin1 ...'.
+  * debian/control.in: gcc, g++ and gobjc suggest their corresponding
+    task packages (fixes #59623).
+
+ -- Matthias Klose <doko@debian.org>  Sat,  8 Apr 2000 20:19:15 +0200
+
+gcc (2.95.2-8) frozen unstable; urgency=low
+
+  * Post-2.95.2 CVS updates of the gcc-2_95-branch until 20000313.
+  * debian/rules2: configure with --enable-java-gc=no for sparc. Fixes
+    gcj side of #60535.
+  * debian/rules.patch: Disable gcc-emit-rtl patch for all archs but
+    alpha. Disable g++-is-tree patch ("just for 2.95.1").
+  * debian/README: Update for gcc-2.95.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 27 Mar 2000 00:03:16 +0200
+
+gcc (2.95.2-7) frozen unstable; urgency=low
+
+  * debian/patches/gcc-empty-struct-init.dpatch; Apply patch from
+    http://gcc.gnu.org/ml/gcc-patches/2000-02/msg00637.html. Fixes
+    compilation of 2.3.4x kernels.
+  * debian/patches/gcc-emit-rtl.dpatch: Apply patch from David Huggins-Daines
+    <dhuggins@linuxcare.com> (backport from 2.96 CVS to fix #55263).
+  * debian/patches/gcc-pointer-arith.dpatch: Apply patch from Jim Kingdon
+    <kingdon@redhat.com> (backport from 2.96 CVS to fix #54951).
+
+ -- Matthias Klose <doko@debian.org>  Thu,  2 Mar 2000 23:16:43 +0100
+
+gcc (2.95.2-6) frozen unstable; urgency=low
+
+  * Post-2.95.2 CVS updates of the gcc-2_95-branch until 20000220.
+  * Remove dangling symlink probably left over from libstdc++2.9
+    package (fixes #53661).
+  * debian/patches/gcc-alpha-complex-float.dpatch: Fixed patch by
+    David Huggins-Daines (fixes #58486).
+  * debian/g++.{postinst,prerm}: Remove outdated g++FAQ registration
+    (fixes #58253).
+  * debian/control.in: gcc-doc replaces gcc-docs (fixes #58108).
+  * debian/rules2: Include some fixed headers (asm, bits, linux, ...).
+  * debian/patches/{gcc-alpha-ev5-fix,libstdc++-valarray}.dpatch: Remove.
+    Applied upstream.
+  * debian/patches/libstdc++-bastring.dpatch: Add patch from
+    sicard@bigruth.solsoft.fr (fixes #56715).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 20 Feb 2000 15:08:13 +0100
+
+gcc (2.95.2-5) frozen unstable; urgency=low
+
+  * Post-2.95.2 CVS updates of the gcc-2_95-branch until 20000116.
+  * Add more build dependencies (fixes #53204).
+  * debian/patches/gcc-alpha-complex-float.dpatch: Patch from
+    Joel Klecker <jk@espy.org> to compile glibc correctly on alpha.
+    "Should fix the g77 problems too."
+  * debian/patches/{libio,libstdc++-wall2}.dpatch. Remove patches
+    applied upstream.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 16 Jan 2000 19:16:54 +0100
+
+gcc (2.95.2-4) unstable; urgency=low
+
+  * debian/patches/libio.dpatch: Patch from Martin v. Loewis.
+    (fixes: #35628).
+  * debian/patches/libstdc++-deque.dpatch: Patch from Martin v. Loewis.
+    (fixes: #52689).
+  * debian/control.in: Updated Build-Depends, removed outdated README.build.
+    Fixes #51246.
+  * Tighten dependencies to cpp (>= 2.95.2-4) (closes: #50294).
+  * debian/rules.patch: Really do not apply patches/gcj-backport.dpatch.
+    Fixes #51636.
+  * Apply updated sparc-bi-arch.dpatch from Ben Collins.
+  * libstdc++: Define wstring type, if __ENABLE_WSTRING is defined. Request
+    from the author of the War FTP Daemon for Linux ("Jarle Aase"
+    <jgaa@jgaa.com>).
+  * debain/g++.preinst: Remove dangling sysmlinks (fixes #52359).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 19 Dec 1999 21:53:48 +0100
+
+gcc (2.95.2-3) unstable; urgency=low
+
+  * debian/rules2: Don't install $(gcc_lib_dir)/include/asm; these are
+    headers fixed for glibc-1.x (closes: #49434).
+  * debian/patches/cpp-dos-newlines.dpatch: Keep CR's without
+    following LF (closes: #49186).
+  * Bug #37358 (internal compiler errors when building vdk_0.6.0-5)
+    fixed in gcc-2.95.? (closes: #37358).
+  * Apply patch gcc-alpha-ev5-fix from Richard Henderson <rth@cygnus.com>
+    (should fix #48527 and #46963).
+  * debian/README.Bugs: Documented non bug #44554.
+  * Applied patch from Alexandre Oliva to fix gpc boostrap on alpha.
+    Reenabled gpc on all architectures.
+  * Post-2.95.2 CVS updates of the gcc-2_95-branch until 19991108.
+  * Explicitely generate postinst/prerm chunks for usr/doc transition.
+    debhelper currently doesn't handle generation for packages with
+    symlinked directories.
+  * debian/patches/libstdc++-wall3.dpatch: Fix warnings in stl_deque.h
+    and stl_rope.h (closes: #46444, #46720).
+  * debian/patches/gcj-backport.dpatch: Add file, don't apply (yet).
+
+ -- Matthias Klose <doko@debian.org>  Wed, 10 Nov 1999 18:58:45 +0100
+
+gcc (2.95.2-2) unstable; urgency=low
+
+  * New gpc-19991030 snapshot.
+  * Post-2.95.2 CVS updates of the gcc-2_95-branch until 19991103.
+  * Reintegrated sparc patches (bcollins@debian.org), which were lost
+    in 2.95.2-1.
+  * debian/rules2: Only install $(gcc_lib_dir)/include/asm, when existing.
+  * debian/patches/gpc-2.95.{dpatch,diff}: updated patch to drop
+    initialization in stor-layout.c.
+  * debian/NEWS.gcc: Updated for gcc-2.95.2.
+  * debian/bugs/bug-...: Removed testcases for fixed bugs.
+  * debian/patches/...dpatch: Removed patches applied upstream.
+  * debian/{rules2,g++.postinst,g++.prerm}: Handle c++ alternative.
+  * debian/changelog: Merged gcc272, egcs and snapshot changelogs.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  2 Nov 1999 23:09:23 +0200
+
+gcc (2.95.2-1.1) unstable; urgency=low
+
+  * Most of the powerpc patches have been applied upstream.  Remove all
+    but ppc-ice, ppc-andrew-dwarf-eh, and ppc-descriptions.
+  * mulilib-install.dpatch was definitely a bad idea.  Fix it properly
+    by using install -D.
+  * Also, don't make directories before installing any more.  Simplifies
+    rules a (tiny) bit.
+  * Do not build with LDFLAGS=-s.  Everything gets stripped out anyway by
+    dh_strip -a -X_debug; so leave the binaries in the build tree with
+    debugging symbols for simplified debugging of the packages.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Sat, 30 Oct 1999 12:40:12 -0400
+
+gcc (2.95.2-1) unstable; urgency=low
+
+  * gcc-2.95.2 release (taken from the CVS archive). -fstrict-aliasing
+    is disabled upstream.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 25 Oct 1999 10:26:19 +0200
+
+gcc (2.95.2-0pre4) unstable; urgency=low
+
+  * Updated to cvs updates of the gcc-2_95-branch until 19991021.
+  * Updated gpc to gpc-19991018 snapshot (closes: #33037, #47453).
+    Enable gpc for all architectures ...
+  * Document gcc exit codes (closes: #43863).
+  * According to the bug submitter (Sergey V Kovalyov <sqk0316@scires.nyu.edu>)
+    the original source of these CERN librarties is outdated now. The latest
+    version of cernlibs compiles and works fine with slink (closes #31546).
+  * According to the bug submitter (Gergely Madarasz <gorgo@sztaki.hu>),
+    the problem triggered on i386 cannot be reproduced with the current
+    jade and php3 versions anymore (closes: #35215).
+  * Replace corrupted m68k-pic.dpatch (from Roman Hodek and Andreas Schwab
+    <Roman.Hodek@informatik.uni-erlangen.de> <schwab@suse.de> and apply to
+    all architectures (closes: #48011).
+  * According to the bug submitter (Herbert Xu <herbert@gondor.apana.org.au>)
+    this bug "probably has been fixed". Setting it to severity "fixed"
+    (fixes: #39616), will close it later ...
+  * debian/README.Bugs: Document throwing C++ exceptions "through" C
+    libraries (closes: #22769).
+
+ -- Matthias Klose <doko@debian.org>  Fri, 22 Oct 1999 20:33:00 +0200
+
+gcc (2.95.2-0pre3) unstable; urgency=low
+
+  * Updated to cvs updates of the gcc-2_95-branch until 19991019.
+  * Apply NMU patches (closes: #46217).
+  * debian/control.in: Fix egcs64 conflict-dependency for sparc
+    architecture (closes: #47088).
+  * debian/rules2: dbg-packages share doc dir with lib packages
+    (closes #45067).
+  * debian/patches/gcj-debian-policy.dpatch: Patch from Stephane
+    Bortzmeyer to conform to Debian policy (closes: #44463).
+  * debian/bugs/bug-*: Added test cases for new bug reports.
+  * debian/patches/libstdc++-bastring.dpatch: Patch by Richard Kettlewell
+    (closes #46550).
+  * debian/rules.patch: Apply libstdc++-wall2 patch (closes #46609).
+  * debian/README: Fix typo (closes: #45253).
+  * debian/control.in: Remove primary/secondary distinction;
+    dbg-packages don't provide their normal counterparts (closes #45206).
+  * debian/rules.patch: gcc-combine patch applied upstream.
+  * debian/rules2: Only use mail if with_check is set (off by default).
+  * debian/rules.conf: Tighten binutils dependency to 2.9.5.0.12.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 19 Oct 1999 20:33:00 +0200
+
+gcc (2.95.2-0pre2.0.2) unstable; urgency=HIGH (for m68k)
+
+  * Binary-only NMU for m68k as quick fix for another bug; the patch
+    is in CVS already, too.
+  * Applied another patch by Andreas Schwab to fix %a5 restauration in
+    some cases.
+
+ -- Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de>  Thu, 30 Sep 1999 16:09:15 +0200
+
+gcc (2.95.2-0pre2.0.1) unstable; urgency=HIGH (for m68k)
+
+  * Binary-only NMU for m68k as quick fix for serious bugs; the patches
+    are already checked into gcc CVS and should be in the next official
+    version, too.
+  * Applied two patches by Andreas Schwab to fix -fpic and loop optimization.
+
+ -- Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de>  Mon, 27 Sep 1999 15:32:49 +0200
+
+gcc (2.95.2-0pre2) unstable; urgency=low
+
+  * Fixed in 2.95.2 (closes: #43478).
+  * Previous version had Pascal examples missing in doc directory.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 8 Sep 1999 22:18:17 +0200
+
+gcc (2.95.2-0pre1) unstable; urgency=low
+
+  * Updated to cvs updates of the gcc-2_95-branch until 19990828.
+  * Apply work around memory corruption (just for 2.95.1)  by
+    Daniel Jacobowitz <dan@debian.org>.
+  * debian/patches/libstdc++-wall2.dpatch: Patch from Franck Sicard
+    <sicard@miniruth.solsoft.fr> to fix some warnings (closes: #44670).
+  * debian/patches/libstdc++-valarray.dpatch: Patch from Hideaki Fujitani
+    <fjtani@flab.fujitsu.co.jp> to fix a bug in valarray_array.h.
+  * Applied NMU from Jim Pick minus the jump.c and fold-const.c patches
+    already in the gcc-2_95-branch (closes: #44690).
+  * Conform to debian-java policy (closes: #44463).
+  * Move docs to /usr/share/doc (closes: #44782).
+  * Remove debian/patches/gcc-align.dpatch applied upstream.
+  * debian/*.postinst: Call install-info only, when configuring.
+  * debian/*.{postinst,prerm}: Add #DEBHELPER# comments to handle
+    /usr/doc -> /usr/share/doc transition.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  8 Sep 1999 22:18:17 +0200
+
+gcc (2.95.1-2.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * ARM platform no longer needs library-prefix patch.
+  * Updated patches from Philip Blundell.
+
+ -- Jim Pick <jim@jimpick.com>  Wed,  8 Sep 1999 20:14:07 -0700
+
+gcc (2.95.1-2) unstable; urgency=low
+
+  * debian/gcc.{postinst,prerm}: gcc provides an alternative for
+    sparc64-linux-gcc.
+  * Applied patch from Ben Collins to enable bi-architecture (32/64)
+    support for sparc.
+  * Rebuild debian/control and debian/rules.parameters after unpacking.
+  * debian/rules2: binary-indep. Conditionalize on with_pascal.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  4 Sep 1999 13:47:30 +0200
+
+gcc (2.95.1-1) unstable; urgency=low
+
+  * Updated to release gcc-2.95.1 and cvs updates of the gcc-2_95-branch
+    until 19990828.
+  * debian/README.gcc: Updated NEWS file to include 2.95 and 2.95.1 news.
+  * debian/README.java: New file.
+  * debian/rules.defs: Disabled gpc for alpha, arm. Disabled ObjC-GC
+    for alpha.
+  * debian/rules [clean]: Remove debian/rules.parameters.
+  * debian/rules2 [binary-arch]: Call dh_shlibdeps with LD_LIBRARY_PATH set
+    to installation dir of libstdc++. Why isn't this the default?
+  * debian/control.in: *-dev packages do not longer conflict with
+    libg++272-dev package.
+  * Apply http://egcs.cygnus.com/ml/gcc-patches/1999-08/msg00599.html.
+  * Only define BAD_THROW_ALLOC, when using exceptions (fixes #43462).
+  * For ObjC (when configured with GC) recommend libgc4-dev, not libgc4.
+  * New version of 68060 build patch.
+  * debian/rules.conf: For m68k, depend on binutils version 2.9.1.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 28 Aug 1999 18:16:31 +0200
+
+gcc (2.95.1-0pre2) unstable; urgency=medium
+
+  * gpc is back again (fixes grave #43022).
+  * debian/patches/gpc-updates.dpatch: Patches sent to upstream authors.
+  * Work around the fatal dependtry assertion failure bug in dpkg (hint
+    from "Antti-Juhani Kaijanaho" <ajk@debian.org>, fixes important #43072).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 16 Aug 1999 19:34:14 +0200
+
+gcc (2.95.1-0pre1) unstable; urgency=low
+
+  * Updated to cvs 19990815 gcc-2_95-branch; included install docs and
+    FAQ from 2.95 release; upload source package as well.
+  * Source package contains tarballs only (gcc, libg++, installdocs).
+  * debian/rules: Splitted into debian/rules{,.unpack,.patch,.conf,2}.
+  * debian/gcc.postinst: s/any key/RETURN; warn only when upgrading from
+    pre 2.95 version; reference /usr/doc, not /usr/share/doc.
+  * Checked syntax for attributes of functions; checked for #35068;
+    checked for bad gmon.out files (at least with libc6 2.1.2-0pre5 and
+    binutils 2.9.1.0.25-2 the problem doesn't show up anymore).
+  * debian/patches/cpp-macro-doc.dpatch: Document macro varargs in cpp.texi.
+  * gcc is primary compiler for all platforms but m68k. Setting
+    severity of #22513 to fixed.
+  * debian/patches/gcc-default-arch.dpatch: New patch to enable generation
+    of i386 instruction as default (fixes #42743).
+  * debian/rules: Removed outdated gcc NEWS file (fixes #42742).
+  * debian/patches/libstdc++-out-of-mem.dpatch: Throw exception instead
+    of aborting when out of memory (fixes #42622).
+  * debian/patches/cpp-dos-newlines.dpatch: Handle ibackslashes after
+    DOS newlines (fixes #29240).
+  * Fixed in gcc-2.95.1: #43001.
+  * Bugs closed in this version:
+    Closes: #11525, #12253, #22513, #29240, #35068, #36182, #42584, #42585,
+    #42602, #42622, #42742 #42743, #43001, #43002.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 15 Aug 1999 10:31:50 +0200
+
+gcc (2.95-3) unstable; urgency=high
+
+  * Provide /lib/cpp again (fixes important bug #42524).
+  * Updated to cvs 19990805 gcc-2_95-branch.
+  * Build with the default scheduler.
+  * Apply install-multilib patch from Dan Jacobowitz.
+  * Apply revised cpp-A- patch from Dan Jacobowitz.
+
+ -- Matthias Klose <doko@debian.org>  Fri,  6 Aug 1999 07:25:19 +0200
+
+gcc (2.95-2) unstable; urgency=low
+
+  * Remove /lib/cpp. This driver uses files from /usr/lib/gcc-lib anyway.
+  * The following bugs are fixed (compared to egcs-1.1.2).
+    Closes: #4429, #20889, #21122, #26369, #28417, #28261, #31416, #35261,
+    #35900, #35906, #38246, #38872, #39098, #39526, #40659, #40991, #41117,
+    #41290, #41302, #41313.
+  * The following by Joel Klecker:
+    - Adopt dpkg-architecture variables.
+    - Go back to SHELL = bash -e or it breaks where /bin/sh is not bash.
+    - Disabled the testsuite, it is not included in the gcc 2.95 release.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 31 Jul 1999 18:00:42 +0200
+
+gcc (2.95-1) unstable; urgency=low
+
+  * Update for official gcc-2.95 release.
+  * Built without gpc.
+  * debian/rules: Remove g++FAQ from rules, which is outdated.
+    For ix86, build for i386, not i486.
+  * Apply patch from Jim Pick for building multilib package on arm.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 31 Jul 1999 16:38:21 +0200
+
+gcc (2.95-0pre10) unstable; urgency=low
+
+  * Use ../builddir-gcc-$(VER) by default instead of ./builddir; upstream
+    strongly advises configuring outside of the source tree, and it makes
+    some things much easier.
+  * Add patch to prevent @local branches to weak symbols on powerpc (fixes
+    apt compilation).
+  * Add patch to make cpp -A- work as expected.
+  * Renamed debian/patches/ppc-library-prefix.dpatch to library-prefix.dpatch;
+    apply on all architectures.
+  * debian/control.in: Remove snapshot dependencies.
+  * debian/*.postinst: Reflect use of /usr/share/{info,man}.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Thu, 22 Jul 1999 19:27:12 -0400
+
+gcc (2.95-0pre9) unstable; urgency=low
+
+  * The following bugs are fixed (compared to egcs-1.1.2): #4429, #20889,
+    #21122, #26369, #28417, #28261, #35261, #38246, #38872, #39526, #40659,
+    #40991, #41117, #41290.
+  * Updated to CVS gcc-19990718 snapshot.
+  * debian/control.in: Removed references to egcs in descriptions.
+    Changed gcj's Recommends libgcj-dev to Depends.
+  * debian/rules: Apply ppc-library-prefix for alpha as well.
+  * debian/patches/arm-config.dpatch: Updated patch sent by Jim Pick.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 18 Jul 1999 12:21:07 +0200
+
+gcc (2.95-0pre8) unstable; urgency=low
+
+  * Updated CVS.
+  * debian/copyright: s%doc/copyright%share/common-licenses%
+  * debian/README.Bugs: s/egcs.cygnus.com/gcc.gnu.org/ s/egcs-bugs/gcc-bugs/
+  * debian/patches/reporting.dpatch: Remake diff for current sources.
+  * debian/libstdc++-dev.postinst: It's /usr/share/info/iostream.info.
+  * debian/rules: Current dejagnu snapshot reports a framework version
+    of 1.3.1.
+
+ -- Joel Klecker <espy@debian.org>  Sun, 18 Jul 1999 02:09:57 -0700
+
+gcc-snapshot (19990714-0pre6) experimental; urgency=low
+
+  * Updated to CVS gcc-19990714 snapshot.
+  * Applied ARM patch (#40515).
+  * Converted DOS style linefeeds in debian/patches/ppc-* files.
+  * debian/rules: Reflect change in gcc/version.c; use sh -e as shell:
+    for some obscure reason, bash -e doesn't work.
+  * Reflect version change for libstdc++ (2.10). Remove libg++-name
+    patch; libg++ now has version 2.8.1.3. Removed libc version from
+    the package name.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 14 Jul 1999 18:43:57 +0200
+
+gcc-snapshot (19990625-0pre5.1) experimental; urgency=low
+
+  * Non-maintainer upload.
+  * Added ARM specific patch.
+
+ -- Jim Pick <jim@jimpick.com>  Tue, 29 Jun 1999 22:36:08 -0700
+
+gcc-snapshot (19990625-0pre5) experimental; urgency=low
+
+  * Updated to CVS gcc-19990625 snapshot.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 25 Jun 1999 16:11:53 +0200
+
+gcc-snapshot (19990609-0pre4.1) experimental; urgency=low
+
+  * Added and re-added a few last PPC patches.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Sat, 12 Jun 1999 16:48:01 -0500
+
+gcc-snapshot (19990609-0pre4) experimental; urgency=low
+
+  * Updated to CVS egcs-19990611 snapshot.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 11 Jun 1999 10:20:09 +0200
+
+gcc-snapshot (19990609-0pre3) experimental; urgency=low
+
+  * CVS gcc-19990609 snapshot.
+  * New gpc-19990607 snapshot.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  9 Jun 1999 19:40:44 +0200
+
+gcc-snapshot (19990524-0pre1) experimental; urgency=low
+
+  * egcs-19990524 snapshot.
+  * First snapshot of the gcc-2_95-branch. egcs-1.2 is renamed to gcc-2.95,
+    which is now the "official" successor to gcc-2.8.1. The full version
+    name is: gcc-2.95 19990521 (prerelease).
+  * debian/control.in: Changed maintainers to `Debian GCC maintainers'.
+  * Moved all version numbers to epoch 1.
+  * debian/rules: Major changes. The support for secondary compilers
+    was already removed for the egcs-1.2 snapshots. Many fixes by
+    Joel Klecker <espy@debian.org>.
+    - Send mail to Debian maintainers for successful builds.
+    - Fix VER and VERNO sed expressions.
+    - Replace remaining GNUARCH occurrences.
+  * New gpc snapshot (but don't build).
+  * debian/patches/valarray.dpatch: Backport from libstdc++-v3.
+  * debian/gcc-doc.*: Info is now gcc.info* (Joel Klecker <espy@debian.org>).
+  * Use cpp driver provided by the package.
+  * New script c89 (fixes #28261).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 22 May 1999 16:10:36 +0200
+
+egcs (1.1.2-2) unstable; urgency=low
+
+  * Integrate NMU's for arm and sparc (fixes #37582, #36857).
+  * Apply patch for the Hurd (fixes #37753).
+  * Describe open bugs in TODO.Debian. Please have a look if you can help.
+  * Update README / math functions section (fixes #35906).
+  * Done by J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>:
+    - At Richard Braakman's request, made -dbg packages for libstdc++
+      and libg++.
+    - Provide egcc(1) (fixes lintian error).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 16 May 1999 14:30:56 +0200
+
+egcs-snapshot (19990502-1) experimental; urgency=low
+
+  * New snapshot.
+
+ -- Matthias Klose <doko@debian.org>  Thu,  6 May 1999 11:51:02 +0200
+
+egcs-snapshot (19990418-2) experimental; urgency=low
+
+  * Merged Rays changes to build debug packages.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 21 Apr 1999 16:54:56 +0200
+
+egcs-snapshot (19990418-1) experimental; urgency=low
+
+  * New snapshot.
+  * Disable cpplib.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 19 Apr 1999 11:32:19 +0200
+
+egcs (1.1.2-1.2) unstable; urgency=low
+
+  * NMU for arm
+  * Added arm-optimizer.dpatch with optimizer workaround for ARM
+
+ -- Jim Pick <jim@jimpick.com>  Mon, 19 Apr 1999 06:17:13 -0700
+
+egcs (1.1.2-1.1) unstable; urgency=low
+
+  * NMU for sparc
+  * Included dpatch to modify the references to gcc/crtstuff.c so that
+    __register_frame_info is not a weak reference. This allows potato to
+    remain binary compatible with slink, while still retaining compatibility
+    with other sparc/egcs1.1.2 distributions. Diff in .dpatch format has
+    been sent to the maintainer with a note it may not be needed for 1.1.3.
+
+ -- Ben Collins <bcollins@debian.org>  Tue, 27 Apr 1999 10:15:03 -0600
+
+egcs (1.1.2-1) unstable; urgency=low
+
+  * Final egcs-1.1.2 release built for potato as primary compiler
+    for all architectures except m68k.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Thu,  8 Apr 1999 13:14:29 +0200
+
+egcs-snapshot (19990321-1) experimental; urgency=low
+
+  * New snapshot.
+  * Disable gpc.
+  * debian/rules: Simplified (no secondary compiler, bumped all versions
+    to same epoch, libapi patch is included upstream).
+  * Separated out cpp documentation to cpp-doc package.
+  * Fixed in this version: #28417.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 23 Mar 1999 02:11:18 +0100
+
+egcs (1.1.2-0slink2) stable; urgency=low
+
+  * Applied H.J.Lu's egcs-19990315.linux patch.
+  * Install faq.html and egcs-1.1.2 announcment.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 23 Mar 1999 01:14:54 +0100
+
+egcs (1.1.2-0slink1) stable; urgency=low
+
+  * Final egcs-1.1.2 release; compiled with glibc-2.0 for slink on i386.
+  * debian/control.in: gcc provides egcc, when FIRST_PRIMARY defined.
+  * Fixes #30767, #32278, #34252, #34352.
+  * Don't build the libstdc++.so.2.9 library on architectures, which have
+    switched to glibc-2.1.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 17 Mar 1999 12:55:59 +0100
+
+egcs (1.1.1.63-2.2) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Incorporate patch from Joel Klecker to fix snapshot packages
+    by moving/removing the application of libapi.
+  * Disable the new libstdc++-dev-config and the postinst message in
+    glibc 2.1 versions.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Mon, 12 Mar 1999 14:16:02 -0500
+
+egcs (1.1.1.63-2.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Compile with glibc 2.1 release version.
+  * New upstream version egcs-1.1.2 pre3.
+  * Miscellaneous rules updates (see changelog.snapshot).
+  * New set of powerpc-related patches from Franz Sirl,
+    <fsirl@kernel.crashing.org>.
+  * Disable libgcc.dpatch (new solution implemented upstream).  Remove it.
+  * Also pass $target to config.if.
+  * Enable Dwarf2 EH for powerpc.  Bump the C++ binary version.  No
+    loss in -backwards- compatibility as far as I can tell, so add a
+    compatibility symlink, and add to shlibs file.
+  * Add --no-backup-if-mismatch to the debian/patches/*.dpatch files,
+    to prevent bogus .orig's in diffs.
+  * Merged with (unreleased) 1.1.1.62-1 and 1.1.1.63-{1,2} packages from
+    Matthias Klose <doko@debian.org>.
+  * Stop adding a backwards compatibility link for egcs-nof on powerpc.
+    To my knowledge, nothing uses it.  Do add the libstdc++ API change
+    link, though.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Mon, 8 Mar 1999 14:24:01 -0500
+
+egcs (1.1.1.63-2) stable; urgency=low
+
+  * Provide a libstdc++ with a shared object name, which is compatible
+    to other distributions. Documented the change in README.Debian,
+    the libstdc++-2.9.postinst and the libstdc++-dev-config script.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 12 Mar 1999 00:36:20 +0100
+
+egcs (1.1.1.63-1.1) unstable; urgency=low
+
+  * Non-Maintainer release.
+  * Build against glibc 2.1.
+  * Make egcs the primary compiler on i386.
+  * Also confilct with egcc (<< FIRST_PRIMARY)
+    if FIRST_PRIMARY is defined.
+    (this tells dpkg that gcc completely obsoletes egcc)
+  * Remove hjl-12 patch again, HJL says it should not be
+    necessary with egcs 1.1.2.
+    (as per forwarded reply from Christopher Chimelis)
+  * Apply libapi patch in clean target before regenerating debian/control
+    and remove the patch afterward. Otherwise, the libstdc++ and libg++
+    package names are generated wrong on a glibc 2.1 system.
+
+ -- Joel Klecker <espy@debian.org>  Tue,  9 Mar 1999 15:31:02 -0800
+
+egcs (1.1.1.63-1) unstable; urgency=low
+
+  * New upstream version egcs-1.1.1-pre3.
+  * Applied improved libstdc++ warning patch from Rob Browning.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  9 Mar 1999 16:14:07 +0100
+
+egcs (1.1.1.62-1) unstable; urgency=low
+
+  * New upstream version egcs-1.1.1-pre2.
+  * New upstream version libg++-2.8.1.3.
+  * Readded ARM support
+  * Readded hjl-12 per request from Christopher C Chimelis
+    <chris@classnet.med.miami.edu>
+
+ -- Matthias Klose <doko@debian.org>  Fri, 26 Feb 1999 09:54:01 +0100
+
+egcs-snapshot (19990224-0.1) experimental; urgency=low
+
+  * New snapshot.
+  * Add the ability to disable CPPLIB by setting CPPLIB=no in
+    the environment.
+  * Disable gpc for powerpc; I spent a long time getting it to
+    make correctly, and then it goes and ICEs.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Tue, 24 Feb 1999 23:34:12 -0500
+
+egcs (1.1.1.61-1) unstable; urgency=low
+
+  * New upstream version egcs-1.1.1-pre1.
+  * debian/control.in: Applied patch from bug report #32987.
+  * Split up H.J.Lu's hjl-19990115-linux patch into several small
+    chunks: libapi, arm-mips, libgcc, hjl-other. The changelog.Linux
+    aren't included in the separate chunks. Please refer to the
+    unmodified hjl-19990115-linux patch file in the egcs source pkg.
+  * Apply warning patch to fix the annoying spew you get if you try to
+    use ropes or deques with -Wall (which makes -Wall mostly useless for
+    spotting errors in your own code). Fixes #32996.
+  * debian/rules: Unapply patches in the exact reverse order they were
+    applied.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 20 Feb 1999 22:06:21 +0100
+
+egcs (1.1.1-5) frozen unstable; urgency=medium
+
+  * Move libgcc.map file to g++ package, where gcc is the secondary
+    compiler (fixes #32329, #32605, #32631).
+  * Prepare to rename libstdc++2.9 package for glibc-2.1 (fixes #32148).
+  * Apply NMU patch for arm architecure (fixes #32367).
+  * Don't apply hjl-12 patch for alpha architectures (requested by the
+    alpha developers, Christopher C Chimelis <chris@classnet.med.miami.edu>).
+  * Call makeinfo with --no-validate to fix obscure build failure on alpha.
+  * Build gpc info files in doc subdirectory.
+  * Remove c++filt diversion (C++ name demangling patch is now in binutils,
+    fixes #30820 and #32502).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 31 Jan 1999 23:19:35 +0100
+
+egcs (1.1.1-4.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Pascal doesn't build for ARM.
+
+ -- Jim Pick <jim@jimpick.com>  Sun, 24 Jan 1999 16:13:34 -0800
+
+egcs (1.1.1-4) frozen unstable; urgency=high
+
+  * Don't strip compiler libraries libgcc.a libobjc.a libg2c.a libgpc.a
+  * Move Pascal examples to the right place (fixes #32149, part 1).
+  * Add dependencies for switching from secondary to primary compiler,
+    if FIRST_PRIMARY is defined (fixes #32149, part 2).
+
+ -- Matthias Klose <doko@debian.org>  Wed, 20 Jan 1999 16:51:30 +0100
+
+egcs (1.1.1-3) frozen unstable; urgency=low
+
+  * Updated with the H.J.Lu's hjl-19990115-linux patch (fixes the
+    __register_frame_info problems, mips and arm port included).
+  * Update gpc to 19990118 (beta release candidate).
+  * Strip static libraries (fixes #31247 and #31248).
+  * Changed maintainer address.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 19 Jan 1999 16:34:28 +0100
+
+egcs (1.1.1-2) frozen unstable; urgency=low
+
+  * Moved egcs-docs, g77-doc and gpc-doc packages to doc section.
+  * Downgraded Recommends: egcs-docs to Suggests: egcs-docs dependencies
+    (for archs, where egcs is the primary compiler).
+  * Add 'Suggests: stl-manual' dependency to libstdc++2.9-dev.
+  * Applied one more alpha patch:
+    ftp://ftp.yggdrasil.com/private/hjl/egcs/1.1.1/egcs-1.1.1.diff.12.gz
+  * Applied PPro optimization patch.
+  * Apply emit-rtl-nan patch.
+  * Upgraded to libg++-2.8.1.2a-19981218.tar.gz.
+  * Upgraded to gpc-19981218.
+  * Make symlinks for gobjc, libstdc++2.9-dev and libg++2.8.2 doc directories.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 23 Dec 1998 18:04:53 +0200
+
+egcs-snapshot (19981211-1) experimental; urgency=low
+
+  * New snapshot.
+  * Adapted gpc to egcs-2.92.x (BOOT_CFLAGS must include -g).
+  * New libg++-2.8.1.2a-19981209.tar.gz.
+  * debian/rules: new target mail-summary.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 11 Dec 1998 18:14:53 +0200
+
+egcs (1.1.1-1) frozen unstable; urgency=high
+
+  * Final egcs-1.1.1 release.
+  * The last version depended on a versioned libc6 again.
+  * Add lost dependency for libg++ on libstdc++.
+  * Added debian-libstdc++.sh script to generate a libstdc++ on a Linux
+    system, which doesn't use the libapi patch.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Wed,  2 Dec 1998 12:06:15 +0200
+
+egcs (1.1.0.91.59-2) frozen unstable; urgency=high
+
+  * Fixes bugs from libc6 2.0.7u-6 upload without dependency line
+    Conflicts: libstdc++-2.9 (<< 2.91.59): #30019, #30066, #30078.
+  * debian/copyright: Updated URLs.
+  * gcc --help now mentions /usr/doc/debian/bug-reporting.txt.
+  * Install README.Debian and include information about patches applied.
+  * Depend on unversioned libc6 on i386, such that libstdc++2.9 can be used
+    on a hamm system.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Fri, 27 Nov 1998 18:32:02 +0200
+
+egcs (1.1.0.91.59-1) frozen unstable; urgency=low
+
+  * This is egcs-1.1.1 prerelease #3, compiled with libc6 2.0.7u-6.
+  * Added dependency for libstdc++2.9-dev on g++ (fixes #29631).
+  * Package g77 provides f77 (fixes #29817).
+  * Already fixed in earlier egcs-1.1 releases: #2493, #25271, #10620.
+  * Bugs reported for gcc-2.7.x and fixed in the egcs version of gcc:
+    #2493, #4430, #4954, #5367, #6047, #10612, #12375, #20606, #24788, #26100.
+  * Upgraded libg++ to libg++-2.8.1.2a-19981114.
+  * Upgraded gpc to gpc-19981124.
+  * Close #25869: egcs and splay maintainers are unable to reproduce this
+    bug with the current Debian packages. Bug submitter doesn't respond.
+  * Close #25407: egcs maintainer cannot reproduce this bug with the current
+    Debian compiler. Bug submitter doesn't respond.
+  * Use debhelper 1.2.7 for building.
+  * Replace the libstdc++ and libg++ compatibility links with fake libraries.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Wed, 25 Nov 1998 12:11:42 +0200
+
+egcs (1.1.0.91.58-5) frozen unstable; urgency=low
+
+  * Applied patch to build on the m68060.
+  * Added c++filt and c++filt.1 to the g++ package.
+  * Updated gpc to gpc-981105; fixes some regressions compared to egcs-1.1.
+  * Separated out g77 and gpc doumentation to new packages g77-doc and gpc-doc.
+  * Closed bugs (#22158).
+  * Close #20248; on platforms where gas and gld are the default versions,
+    it makes no difference to configure with or without enable-ld.
+  * Close #24349. The bugs are in the amulet source.
+    See http://www.cs.cmu.edu/afs/cs/project/amulet/www/FAQ.html#GCC28x
+  * Rename gcc.info* files to egcs.info* (fixes #24088).
+  * Documented known bugs (and workarounds) in BUGS.Debian.
+  * Fixed demangling of C++ names (fixes #28787).
+  * Applied patch form aspell to libstdc++/stl/stl_rope.h.
+  * Updated from cvs 16 Nov 1998.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Tue, 17 Nov 1998 09:41:24 +0200
+
+egcs-snapshot (19981115-2) experimental; urgency=low
+
+  * New snapshot. Disabled gpc.
+  * New packages g77-doc and gpc-doc.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 16 Nov 1998 12:48:09 +0200
+
+egcs (1.1.0.91.58-3) frozen unstable; urgency=low
+
+  * Previous version installed in potato, not slink.
+  * Updated from cvs 3 Nov 1998.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Tue, 3 Nov 1998 18:34:44 +0200
+
+egcs (1.1.0.91.58-2) unstable; urgency=low
+
+  * [debian/rules]: added targets to apply and unapply patches.
+  * [debian/README.patches]: New file.
+  * Moved patches dir to debian/patches. debian/rules has to select
+    the patches to apply.
+  * Manual pages for genclass and gcov (fixes #5995, #20950, #22196).
+  * Apply egcs-1.1-reload patch needed for powerpc architecture.
+  * Fixed bugs (#17768, #20252, #25508, #27788).
+  * Reapplied alpha patch (#20875).
+  * Fixes first part of #22513, extended README.Debian (combining C & C++).
+  * Already fixed in earlier egcs-1.1 releases: #17963, #20252, #20524,
+    #20640, #22450, #24244, #24288, #28520.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Fri, 30 Oct 1998 13:41:45 +0200
+
+egcs (1.1.0.91.58-1) experimental; urgency=low
+
+  * New upstream version. That's the egcs-1.1.1 prerelease plus patches from
+    the cvs archive upto 29 Oct 1998.
+  * Merged files from the egcs and snapshot packages.
+  * Updated libg++ to libg++-2.8.1.2 (although the Debian package name is still
+    2.8.2).
+  * Moved patches dir to patches-1.1.
+  * Dan Jacobowitz:
+    * This is a snapshot from the egcs_1_1_branch, with
+      libapi, reload, builtin-apply, and egcs patches from
+      the debian/patches/ dir applied, along with the egcs-gpc-patches
+      and gcc/p/diffs/gcc-egcs-2.91.55.diff.
+    * Conditionalize gcj and chill (since they aren't in this branch).
+    * Fake snapshots drop the -snap-main.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Thu, 29 Oct 1998 15:15:19 +0200
+
+egcs-snapshot (1.1-19981019-5.1) experimental; urgency=low
+
+  * This is a snapshot from the egcs_1_1_branch, with
+    libapi, reload, builtin-apply, and egcs patches from
+    the debian/patches/ dir applied, along with the egcs-gpc-patches
+    and gcc/p/diffs/gcc-egcs-2.91.55.diff.
+  * Conditionalize gcj and chill (since they aren't in this
+    branch).
+  * Fake snapshots drop the -snap-main.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Mon, 19 Oct 1998 22:19:23 -0400
+
+egcs (1.1b-5) unstable; urgency=low
+
+  * [debian/control.in] Fixed typo in dependencies (#28076, #28087, #28092).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sun, 18 Oct 1998 22:56:51 +0200
+
+egcs (1.1b-4) unstable; urgency=low
+
+  * Strengthened g++ dependency on libstdc++_LIB_SO_-dev from
+    `Recommends' to `Depends'.
+  * Updated README.Debian for egcs-1.1.
+  * Updated TODO.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Thu, 15 Oct 1998 12:38:47 +0200
+
+egcs-snapshot (19981005-0.1) experimental; urgency=low
+
+  * Make libstdc++2.9-snap-main and libg++-snap-main provide
+    their mainstream equivalents and put those equivalents into
+    their shlibs file.
+  * Package gcj, the GNU Compiler for Java(TM).
+
+  * New upstream version of egcs (The -regcs_latest_snapshot branch).
+  * Build without libg++ entirely.
+  * Leave out gpc for now - the internals are sufficiently different
+    that it does not trivially compile.
+  * Include an experimental reload patch for powerpc - this is,
+    in the words of its author, not release quality, but it allows
+    powerpc linuxthreads to function.
+  * On architectures where we are the primary compiler, let snapshots
+    build with --prefix=/usr and conflict with the stable versions.
+  * Package chill, a front end for the language Chill.
+  * Other applied patches from debian/patches/: egcs-patches and
+    builtin-apply-patch.
+  * Use reload.c revision 1.43 to avoid a nasty bug.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Wed,  7 Oct 1998 00:27:42 -0400
+
+egcs (1.1b-3.1) unstable; urgency=low
+
+  * NMU to fix the egcc -> gcc link once and for all
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Tue, 22 Sep 1998 16:11:19 -0500
+
+egcs (1.1b-3) unstable; urgency=low
+
+  * Oops. The egcc -> gcc link on archs where gcc is egcc was broken.
+    Thanks to Chris Chimelis for pointing this out.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Mon, 21 Sep 1998 20:51:35 +0200
+
+egcs (1.1b-2) unstable; urgency=low
+
+  * New upstream spellfix release (Debian revision is 2 as the internal
+    version numbers didn't change).
+  * Added egcc -> gcc symlink on architectures where egcc is the primary C
+    compiler. Thus, maintainers of packages that require egcc, can now
+    simply use "egcc" without conditionals.
+  * Porters: we hope/plan to make egcs's gcc the default C compiler on all
+    platforms once the 2.2.x kernels are available. Please test this version
+    thoroughly, and give us a GO / NO GO for your architecture.
+  * Some symbols cpp used to predefine were removed upstream in order to clean
+    up the cpp namespace, but imake requires them for determining the proper
+    settings for LinuxMachineDefines (see /usr/X11R6/lib/X11/{Imake,linux}.cf),
+    thus we put them back. Thanks to Paul Slootman for reporting his imake
+    problems on Alpha.
+    * [gcc/config/alpha/linux.h] Added -D__alpha to CPP_PREDEFINES .
+      Thanks to Chris Chimelis for the alpha-only 1.1a-1.1 NMU which fixed
+      this already.
+    * [gcc/config/i386/linux.h] Added -D__i386__ to CPP_PREDEFINES .
+    * [gcc/config/sparc/linux.h] Has -Dsparc in CPP_PREDEFINES .
+    * [gcc/config/sparc/linux64.h] Has -Dsparc in CPP_PREDEFINES .
+    * [gcc/config/m68k/linux.h] Has -Dmc68000 in CPP_PREDEFINES .
+    * [gcc/config/rs6000/linux.h] Has -Dpowerpc in CPP_PREDEFINES .
+    * [gcc/config/arm/linux.h] Has -Darm in CPP_PREDEFINES .
+    * [gcc/config/i386/gnu.h] Has -Di386 in CPP_PREDEFINES .
+  * Small fixes and updates in README.
+  * Changes affecting the source package only:
+    * [gcc/Makefile.in, gcc/cp/Make-lang.in, gcc/p/Make-lang.in]
+      Daniel Jacobowitz: Ugly hacks of various kinds to make cplib2.txt get
+      properly regenerated with multilib.
+    * [debian/TODO] Created.
+    * [INSTALL/index.html] Fixed broken link.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sun, 20 Sep 1998 14:05:15 +0200
+
+egcs (1.1a-1) unstable; urgency=low
+
+  * New upstream release.
+  * Added README.libstdc++ .
+  * Updated Standards-Version.
+  * Matthias:
+    * Downgraded gobjc dependency on egcs-docs from Recommends: to Suggests: .
+    * [libg++/Makefile.in] Patched not to rely on a `-f' flag of `ln'.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Wed,  2 Sep 1998 19:57:43 +0200
+
+egcs (1.1-1) unstable; urgency=low
+
+  * egcs-1.1 prerelease (from the last Debian package only the version file
+    changed).
+  * "Final" gpc Beta 2.1 gpc-19980830.
+  * Included libg++ and gpc in the .orig tarball. so that diffs are getting
+    smaller.
+  * debian/control.in: Changed maintainer address to galenh-egcs@debian.org.
+  * debian/copyright: Updated URLs.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Mon, 31 Aug 1998 12:43:13 +0200
+
+egcs (1.0.99.56-0.1) unstable; urgency=low
+
+  * New upstream snapshot 19980830 from CVS (called egcs-1.1 19980830).
+  * New libg++ snapshot 980828.
+  * Put all patches patches subdirectory; see patches/README in the source.
+  * debian/control.in: readded for libg++2.8.2-dev:
+    Replaces: libstdc++2.8-dev (<= 2.90.29-0.5)
+  * Renamed libg++2.9 package to libg++2.8.2.
+  * gcc/p/gpc-decl.c: Fix from Peter@Gerwinski.de; fixes optimization errors.
+  * patches/gpc-patch2: Fix from Peter@Gerwinski.de; fixes alpha errors.
+  * debian/rules: New configuration flag for building with and without
+    libstdc++api patch; untested without ...
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Sun, 30 Aug 1998 12:04:22 +0200
+
+egcs (1.0.99-0.6) unstable; urgency=low
+
+  * PowerPC fixes.
+  * On powerpc, generate the -msoft-float libs and package them
+    as egcs-nof.
+  * Fix signed char error in gpc.
+  * Create a libg++.so.2.9 compatibility symlink.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Tue, 25 Aug 1998 11:44:09 -0400
+
+egcs (1.0.99-0.5) unstable; urgency=low
+
+  * New upstream snapshot 19980824.
+  * New gpc snapshot gpc-980822; reenabled gpc for alpha.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Tue, 25 Aug 1998 01:21:08 +0200
+
+egcs (1.0.99-0.4) unstable; urgency=low
+
+  * New upstream snapshot 19980819. Should build glibc 2.0.9x on PPC.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Wed, 19 Aug 1998 14:18:07 +0200
+
+egcs (1.0.99-0.3) unstable; urgency=low
+
+  * New upstream snapshot 19980816.
+  * debian/rules: build correct debian/control and debian/*.shlibs
+  * Enabled Haifa scheduler for ix86.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Mon, 17 Aug 1998 16:29:35 +0200
+
+egcs (1.0.99-0.2) unstable; urgency=low
+
+  * New upstream snapshot: egcs-19980812, minor changes only.
+  * Fixes for building on `primary' targets.
+  * Disabled gpc on `alpha' architecture.
+  * Uses debhelper 1.1.6
+  * debian/control.in: Replace older snapshot versions in favor of newer
+    normal versions.
+  * debian/rules: Fixes building of binary-arch target only.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Thu, 13 Aug 1998 11:59:41 +0200
+
+egcs (1.0.99-0.1) unstable; urgency=low
+
+  * New upstream version: pre egcs-1.1 version.
+  * Many changes ... for details see debian/changelog.snapshot in the
+    source package.
+  * New packages libstdc++2.9 and libstdc++2.9-dev.
+  * New libg++ snapshot 980731: new packages libg++2.9 and libg++2.9-dev.
+  * New gpc snapshot gpc-980729: new package gpc.
+  * Uses debhelper 1.1
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Mon, 10 Aug 1998 13:00:27 +0200
+
+egcs-snapshot (19980803-4) experimental; urgency=low
+
+  * rebuilt debian/control.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  5 Aug 1998 08:51:47 +0200
+
+egcs-snapshot (19980803-3) experimental; urgency=low
+
+  * debian/rules: fix installation locations of NEWS, header and
+    `undocumented' files.
+  * man pages aren't compressed for the snapshot package.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  4 Aug 1998 17:34:31 +0200
+
+egcs-snapshot (19980803-2) experimental; urgency=low
+
+  * debian/rules: Uses debhelper. Old in debian/rules.old.
+    renamed postinst, prerm files for use with debhelper.
+  * debian/{libg++2.9,libstdc++2.9}/postinst: call ldconfig only,
+    when called for configure.
+  * egcs-docs is architecture independent package.
+  * new libg++ snapshot 980731.
+  * installed libstdc++ api patch (still buggy).
+
+ -- Matthias Klose <doko@debian.org>  Mon,  3 Aug 1998 13:20:59 +0200
+
+egcs-snapshot (19980729-1) experimental; urgency=low
+
+  * New snapshot version 19980729 from CVS archive.
+  * New gpc snapshot gpc-980729.
+  * Let gcc/configure decide about using the Haifa scheduler.
+  * Remove -DDEBIAN. That was needed for the security improvements with
+    regard to the /tmp problem. egcs-1.1 chooses another approach.
+  * Save test-protocol and extract gpc errors to gpc-test-summary.
+  * Tighten binutils dependency to 2.9.1.
+  * debian/rules: new build-info target
+  * debian/{control.in,rules}: _SO_ and BINUTILSV substitution.
+  * debian/rules: add dependency for debian/control.
+  * debian/rules: remove bin/c++filt
+  * TODO: next version will use debhelper; the unorganized moving of
+    files becomes unmanageable ...
+  * TODO: g++ headers in stdc++ package? check!
+
+ -- Matthias Klose <doko@debian.org>  Thu, 30 Jul 1998 12:10:20 +0200
+
+egcs-snapshot (19980721-1) experimental; urgency=low
+
+  * Unreleased. Infinite loops in executables made by gpc.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 22 Jul 1998 18:07:20 +0200
+
+egcs-snapshot (19980715-1) experimental; urgency=low
+
+  * New snapshot version from CVS archive.
+  * New gpc snapshot gpc-980715.
+  * New libg++ version libg++-2.8.2-980708. Changed versioning
+    schema for library. The major versions of libc, libstdc++ and the
+    g++ interface are coded in the library name. Use this new schema,
+    but provide a symlink to our previous schema, since the library
+    seems to be binary compatible.
+  * [debian/rules]: Fixed bug in build target, when bootstrap returns
+    with an error
+
+ -- Matthias Klose <doko@debian.org>  Wed, 15 Jul 1998 10:55:05 +0200
+
+egcs-snapshot (19980701-1) experimental; urgency=low
+
+  * New snapshot version from CVS archive.
+    Two check programs in libg++ had to be manually killed to finish the
+    testsuite (tBag and tSet).
+  * New gpc snapshot gpc-980629.
+  * Incorporated debian/rules changes from egcs-1.0.3a-0.5 (but don't remove
+    gcc/cp/parse.c gcc/c-parse.c gcc/c-parse.y gcc/objc/objc-parse.c
+    gcc/objc/objc-parse.y, since these files are part of the release).
+  * Disable the -DMKTEMP_EACH_FILE -DHAVE_MKSTEMP -DDEBIAN flags for the
+    snapshot. egcs-1.1 will have another solution.
+  * Don't bootstrap the snapshot with -fno-force-mem. Internal compiler
+    error :-(
+  * libf2c.a and f2c.h have changed names to libg2c.a and g2c.h and
+    have moved again into the gcc-lib dir. They are installed under
+    libg2c.a and g2c.h. Is it necessary to provide links f2c -> g2c ?
+  * debian/rules: reflect change of build dir of libraries.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  2 Jul 1998 13:15:28 +0200
+
+egcs-snapshot (19980628-0.1) experimental; urgency=low
+
+  * New upstream snapshot version.
+  * Non-maintainer upload; Matthias appears to be absent currently.
+  * Updated shlibs.
+  * Merged changes from regular egcs:
+    * [debian/control] Tightened dependency on binutils to 2.8.1.0.23 or
+      newer, as according to INSTALL/SPECIFIC PowerPC (and possibly Sparc)
+      need this.
+    * [debian/rules] Clean up some generated files outside builddir,
+      so the .diff.gz becomes smaller.
+    * [debian/rules] Partial sync/update with the one for the regular egcs
+      version.
+  * [debian/rules] Make gcc/p/configure executable.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Wed,  1 Jul 1998 07:12:15 +0200
+
+egcs (1.0.3a-0.6) frozen unstable; urgency=low
+
+  * Some libg++ development files were in libstdc++2.8-dev rather than
+    libg++2.8-dev. Fixed this and dealt with upgrading from the earlier
+    versions (fixes #23908; this bug is not marked release-critical, but
+    is annoying and can be quite confusing for users. Therefore, I think
+    this fix should go in 2.0).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Tue, 30 Jun 1998 11:10:14 +0200
+
+egcs (1.0.3a-0.5) frozen unstable; urgency=low
+
+  * Fixed location of .hP files (Fixes #23448).
+  * [debian/rules] simplified extraction of the files for libg++2.8-dev.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Wed, 17 Jun 1998 09:33:41 +0200
+
+egcs (1.0.3a-0.4) frozen unstable; urgency=low
+
+  * [gcc/gcc.c] There is one call to choose_temp_base for determining the
+    tempdir to be used only; #ifdef HAVE_MKSTEMP delete the tempfile created
+    as a side effect. (fixes #23123 for egcs).
+  * [gcc/collect2.c] There's still a vulnerability here; I don't see how
+    I can fix it without leaving behind tempfiles though.
+  * [debian/control] Tightened dependency on binutils to 2.8.1.0.23 or
+    newer, as according to INSTALL/SPECIFIC PowerPC (and possibly Sparc)
+    need this.
+  * [debian/rules] Clean up some generated files outside builddir, so the
+    .diff.gz becomes smaller.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sat, 13 Jun 1998 09:06:52 +0200
+
+egcs-snapshot (19980608-1) experimental; urgency=low
+
+  * New snapshot version.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  9 Jun 1998 14:07:44 +0200
+
+egcs (1.0.3a-0.3) frozen unstable; urgency=high (security fixes)
+
+  * [gcc/toplev.c] set flag_force_mem to 1 at optimisation level 3 or higher.
+    This works around #17768 which is considered release-critical.
+  * Changes by Matthias:
+    * [debian/README] Documentation of the compiler situation for Objective C.
+    * [debian/rules, debian/control.*] Generate control file from a master
+      file.
+    * [debian/rules] Updates for Pascal and Fortran parts; brings it in sync
+      with the one for the egcs snapshots.
+  * Use the recommended settings LDFLAGS=-s CFLAGS= BOOT_CFLAGS='-O2'.
+  * Really compile -DMKTEMP_EACH_FILE -DHAVE_MKSTEMP (really fixes #19453
+    for egcs).
+  * [gcc/gcc.c] A couple of temp files weren't marked for deletion.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sun, 31 May 1998 22:56:22 +0200
+
+egcs (1.0.3a-0.2) frozen unstable; urgency=high (security fixes)
+
+  * Security improvements with regard to the /tmp problem
+    (gcc opens predictably named files in TMPDIR which can be abused via
+    symlinks)  (Fixes #19453 for egcs).
+    * Compile -DMKTEMP_EACH_FILE to ensure the %u name is generated randomly
+      every time; affects gcc/gcc.c .
+    * [gcc/choose-temp.c, libiberty/choose-temp.c]: use mktemp(3) if compiled
+      -DUSE_MKSTEMP .
+    * Security improvements: don't use the result of choose_temp_base in a
+      predictable fashion.
+      [gcc/gcc.c]:
+      * @c, @objective-c: use random name rather then tempbasename.i for
+        intermediate preprocessor output (%g.i -> %d%u).
+      * @c, @objective-c: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @c, @objective-c, @cpp-output, @assembler-with-cpp: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @c, @objective-c, @assembler-with-cpp: use previous random name
+        (cc1|cpp output) rather then tempbasename.s for intermediate assembler
+        input (%g.s -> %U)
+      [gcc/f/lang-specs.h]:
+      * @f77-cpp-input: use random name rather then tempbasename.i for
+        intermediate cpp output (%g.i -> %d%u).
+      * @f77-cpp-input: use previous random name (cpp output) rather than
+        tempbasename.i for f771 input (%g.i -> %U).
+      * @f77-cpp-input: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @f77-cpp-input: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @ratfor: use random name rather then tempbasename.i for
+        intermediate ratfor output (%g.f -> %d%u).
+      * @ratfor: use previous random name (ratfor output) rather than
+        tempbasename.i for f771 input (%g.f -> %U).
+      * @ratfor: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @ratfor: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @ratfor: use previous random name
+        (ratfor output) rather then tempbasename.s for intermediate assembler
+        input (%g.s -> %U).
+      * @f77: use random name rather then tempbasename.s for
+        intermediate ratfor output (%g.f -> %d%u).
+      * @ratfor: use previous random name (ratfor output) rather than
+        tempbasename.i for f771 input (%g.f -> %U).
+      * @ratfor: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @ratfor: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @ratfor: use previous random name
+        (ratfor output) rather then tempbasename.s for intermediate assembler
+        input (%g.s -> %U).
+      * @f77: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @f77: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @ratfor: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %U).
+  * Run the testsuite (this requires the dejagnu package in experimental;
+    unfortunately, it is difficult to distinguish this version from the one
+    in frozen).
+    if possible, and log the results in warn_summary and bootstrap-summary.
+  * [gcc/choose-temp.c, libiberty/choose-temp.c]: s|returh|return| in
+    comment.
+  * Added notes on the Debian compiler setup [debian/README] to the
+    development packages.
+  * Matthias:
+    * [libg++/etc/lf/Makefile.in] Replaced "-ltermcap" by "-lncurses".
+    * [debian/rules] Updated so it can be used for both egcs releases and
+      snapshots easily; added support for the GNU Pascal Compiler gpc.
+    * [contrib/test_summary, contrib/warn_summary] Added from CVS.
+    * Run compiler checks and include results in /usr/doc/<package>.
+    * Updates to the README.
+    * [debian/rules] Use assignments to speed up startup.
+  * [debian/rules] Show the important variables at the start of the build
+    process.
+  * [debian/control.secondary] Added a dependency of gobjc on egcc on
+    architectures where egcs provides the secondary compiler, as
+    /usr/bin/egcc is the compiler driver for gobjc. (Fixes #22829).
+  * [debian/control.*] Bumped Standards-Version; used shorter version
+    numbers in the dependency relationships (esthetic difference only);
+    fixed typo.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Tue, 26 May 1998 21:47:41 +0200
+
+egcs-snapshot (19980525-1) experimental; urgency=low
+
+  * New snapshot version.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 26 May 1998 18:04:06 +0200
+
+egcs-snapshot (19980517-1) experimental; urgency=low
+
+  * "Initial" release of the egcs-snapshot package; many debian/* files
+    derived from the egcs-1.0.3a-0.1 package (maintained by Galen Hazelwood
+    <galenh@micron.net>, NMU's by J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>)
+  * The egcs-snapshot packages can coexist with the packages of the
+    egcs release. Package names have a '-ss' appended.
+  * All packages are installed in a separate tree (/usr/lib/egcs-ss following
+    the FHSS).
+  * Made all snapshot packages extra, all snapshot packages conflict
+    with correspondent egcs packages, which are newer than the snapshot.
+  * Included libg++-2.8.1-980505.
+  * Included GNU Pascal (gpc-980511).
+  * Haifa scheduler enabled for all snapshot packages.
+  * Run compiler checks and include results in /usr/doc/<package>.
+  * Further information in /usr/doc/<package>/README.snapshot.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 20 May 1998 11:14:06 +0200
+
+egcs (1.0.3a-0.1) frozen unstable; urgency=low
+
+  * New upstream release egcs-2.90.29 980515 (egcs-1.0.3 release)
+    (we were using 1.0.3-prerelease).  This includes the Haifa patches
+    we had since 1.0.3-0.2 and the gcc/objc/thr-posix.c patch we had
+    since 1.0.3-0.1; the differences with 1.0.3-prerelease + patches
+    we had is negligable.
+  * iostream info documentation was in the wrong package (libg++2.8-dev).
+    Now it's in libstdc++2.8-dev. (Thanks to Jens Rosenboom for bringing
+    this to my attention). As 1.0.3-0.3 didn't make it out of Incoming,
+    I'm not adding "Replaces:" for this; folks who had 1.0.3-0.3 installed
+    already know enough to use --force-overwrite.
+  * [gcc/objc/objc-act.c] Applied patch Matthias Klose supplied me with that
+    demangles Objective C method names in gcc error messages.
+  * Explicitly disable Haifa scheduling on Alpha, to make it easier to use
+    this package's diff with egcs snapshots, which may turn on Haifa
+    scheduling even though it is still unstable. (Requested by Chris Chimelis)
+  * Don't run "configure" again if builddir already exists (makes it faster
+    to restart builds in case one is hacking internals). Requested by
+    Johnnie Ingram.
+  * [gcc/gbl-ctors.h] Don't use extern declaration for atexit on glibc 2.1
+    and higher (the prototype has probably changed; having the declaration
+    broke Sparc compiles).
+  * [debian/rules] Determine all version number automatically (from the
+    version string in gcc/version.c).
+  * [debian/copyright] Updated FTP locations; added text about libg++ (fixes
+    #22465).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sat, 16 May 1998 17:41:44 +0200
+
+egcs (1.0.3-0.3) frozen unstable; urgency=low
+
+  * Made an "egcs-doc" package containing documentation for egcs (e)gcc,
+    g++, gobjc, so that administrators can choose whether to have this
+    documenation or the documentation that comes with the GNU gcc package.
+    Dependency on this is Recommends: on architectures where egcs provides
+    the primary C compiler; Suggests: on the others (where GNU gcc is still
+    the primary C compiler).
+  * Use the g++ FAQ from gcc/cp rather than libg++, as that version is more
+    up to date.
+  * Added iostream info documentation to libstdc++2.8-dev.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Wed, 13 May 1998 08:46:10 +0200
+
+egcs (1.0.3-0.2) frozen unstable; urgency=low
+
+  * Added libg++ that works with egcs, found at
+    ftp://ftp.yggdrasil.com/private/hjl/libg++-2.8.1-980505.tar.gz
+    (fixes #20587 (Severity: important)).
+  * The "libg++" and "libg++-dev" virtual packages now refer to the GNU
+    extensions.
+  * Added the g++ FAQ that comes with libg++ to the g++ package.
+  * libg++/Makefile.in: added $(srcdir) to rule for g++FAQ.info so that it
+    builds OK in builddir.
+  * Added -D__i386__ to the cpp predefines on intel.
+  * Patches Matthias supplied me with:
+    * Further 1.0.3 prerelease patches from CVS.
+      This includes patches to the Haifa scheduler. Alpha porters, please
+      check if this makes the Haifa scheduler OK again.
+    * Objective C patches from CVS.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Fri,  8 May 1998 14:43:20 +0200
+
+egcs (1.0.3-0.1) frozen unstable; urgency=low (high for maintainers that use objc)
+
+  * bug fixes only in new upstream version
+  * Applied patches from egcs CVS archive (egcs_1_03_prerelease)
+    (see gcc/ChangeLog in the egcs source package).
+  * libstdc++2.8-dev no longer Provides: libg++-dev (fixes #21153).
+  * libstdc++2.8-dev now Conflicts: libg++27-dev (bo),
+    libg++272-dev (hamm) [regular packages] rather than
+    Conflicts: libg++-dev [virtual package] to prepare the way for "libg++"
+    to be used as a virtual package for a new libg++ package (i.e. an up to
+    date one, which not longer contains libstdc++, but only the GNU
+    extensions) that is compatible with the egcs g++ packages. Such a package
+    isn't available yet. Joel Klecker tried building libg++2.8.1.1a within
+    egcs's libstdc++ setup, but it appears to need true gcc 2.8.1 .
+  * Filed Severity: important bugs against wxxt1-dev (#21707) because these
+    still depend on libg++-dev, which is removed in this version.
+    A fixed libsidplay1-dev has already been uploaded.
+  * libstdc++2.8 is now Section: base and Priority: required (as dselect is
+    linked against it).
+  * Disabled Haifa scheduling on Alpha again; Chris Chimelis reported
+    that this caused problems on some machines.
+  * [gcc/extend.texi]
+    ftp://maya.idiap.ch/pub/tmb/usenix88-lexic.ps.Z is no longer available;
+    use http://master.debian.org/~karlheg/Usenix88-lexic.pdf .
+    (fixes the egcs part of #20002).
+  * Updated Standards-Version.
+  * Changed chmod in debian/rules at Johnie Ingram's request.
+  * Rather than hardwire the Debian part of the packages' version number,
+    extract it from debian/changelog .
+  * Use gcc/objc/thr-posix.c from 980418 egcs snapshot to make objc work.
+    (Fixes #21192).
+  * Applied workaround for the GNUstep packages on sparc systems.
+    See README.sparc (on sparc packages only) in the doc directory.
+    This affects the other compilers as well.
+  * Already done in 1.0.2-0.7: the gobjc package now provides a virtual
+    package objc-compiler.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Tue, 28 Apr 1998 12:05:28 +0200
+
+egcs (1.0.2-0.7) frozen unstable; urgency=low
+
+  * Separated out Objective-C compiler.
+  * Applied patch from http://www.cygnus.com/ml/egcs/1998-Apr/0614.html
+
+ -- Matthias Klose <doko@debian.org>  Fri, 17 Apr 1998 10:25:48 +0200
+
+egcs (1.0.2-0.6) frozen unstable; urgency=low
+
+  * Due to upstream changes (libg++ is now only the GNU specific C++
+    classes, and is no longer maintained; libstdc++ contains the C++
+    standard library, including STL), the virtual "libg++-dev"
+    package's meaning has become confusing. Therefore, new or updated
+    packages should no longer use the virtual "libg++-dev" package.
+  * Corrected g++'s Recommends to libstdc++2.8-dev (>=2.90.27-0.1).
+    The previous version had Recommends: libstdc++-dev (>=2.90.27-0.1)
+    which doesn't work, as libstc++-dev is a virtual package.
+  * Bumped Standards-Version.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Tue, 14 Apr 1998 11:52:08 +0200
+
+egcs (1.0.2-0.5) frozen unstable; urgency=low (high for maintainers of packages that use libstdc++)
+
+  * Modified shlibs file for libstdc++ to generate versioned dependencies,
+    as it is not link compatible with the 1.0.1-x versions in
+    project/experimental. (Fixes #20247, #20033)
+    Packages depending on libstd++ should be recompiled to fix their
+    dependencies.
+  * Strenghtened g++'s Recommends: libstdc++-dev to the 1.0.2 version or
+    newer.
+  * Fixed problems with the unknown(7) symlink for gcov.
+  * Reordering links now works.
+
+ -- Adam Heath <adam.heath@usa.net>  Sun, 12 Apr 1998 13:09:30 -0400
+
+egcs (1.0.2-0.4) frozen unstable; urgency=low
+
+  * Unreleased. This is the version Adam Heath received from me.
+  * Replaces: gcc (<= 2.7.2.3-3) so that the overlap with the older gcc
+    packages (including bo's gcc_2.7.2.1-8) is handled properly
+    (fixes #19931, #19672, #20217, #20593).
+  * Alpha architecture (fixes #20875):
+    * Patched gcc/config/alpha/linux.h for the gmon functions to operate
+      properly.
+    * Made egcs the primary C compiler.
+    * Enabled Hafia scheduling.
+  * Lintian-detected problems:
+    * E: libstdc++2.8: ldconfig-symlink-before-shlib-in-deb usr/lib/libstdc++.so.2.8
+    * E: egcc: binary-without-manpage gcov
+      Reported as wishlist bug; added link to undocumented(7).
+    * W: libstdc++2.8: non-standard-executable-perm usr/lib/libstdc++.so.2.8.0 0555
+    * E: libstdc++2.8: shlib-with-executable-bit usr/lib/libstdc++.so.2.8.0 0555
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Fri, 10 Apr 1998 14:46:46 +0200
+
+egcs (1.0.2-0.3) frozen unstable; urgency=low
+
+  * Really fixed dependencies.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Mon, 30 Mar 1998 11:30:26 +0200
+
+egcs (1.0.2-0.2) frozen unstable; urgency=low
+
+  * Fixed dependencies.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sat, 28 Mar 1998 13:58:58 +0100
+
+egcs (1.0.2-0.1) frozen unstable; urgency=low
+
+  * New upstream version; it now has -Di386 in CPP_PREDEFINES.
+  * Only used the debian/* patches from 1.0.1-2; the rest of it appears
+    to be in 1.0.2 already.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Fri, 27 Mar 1998 11:47:14 +0100
+
+egcs (1.0.1-2) unstable; urgency=low
+
+  * Integrated pre-release 1.0.2 patches
+  * Split out g++
+  * egcs may now provide either the primary or secondary C compiler
+
+ -- Galen Hazelwood <galenh@micron.net>  Sat, 14 Mar 1998 14:15:32 -0700
+
+egcs (1.0.1-1) unstable; urgency=low
+
+  * New upstream version
+  * egcs is now the standard Debian gcc!
+  * gcc now provides c-compiler (#15248 et al.)
+  * g77 now provides fortran77-compiler
+  * g77 dependencies now correct (#16991)
+  * /usr/doc/gcc/changelog.gz now has correct permissions (#16139)
+
+ -- Galen Hazelwood <galenh@micron.net>  Sat,  7 Feb 1998 19:22:30 -0700
+
+egcs (1.0-1) experimental; urgency=low
+
+  * First official release
+
+ -- Galen Hazelwood <galenh@micron.net>  Thu,  4 Dec 1997 16:30:11 -0700
+
+egcs (970917-1) experimental; urgency=low
+
+  * New upstream snapshot (There's a lot of stuff here as well, including
+    a new libstdc++, but it _still_ won't build...)
+  * eg77 driver now works properly
+
+ -- Galen Hazelwood <galenh@micron.net>  Wed, 17 Sep 1997 20:44:29 -0600
+
+egcs (970904-1) experimental; urgency=low
+
+  * New upstream snapshot
+
+ -- Galen Hazelwood <galenh@micron.net>  Sun,  7 Sep 1997 18:25:06 -0600
+
+egcs (ss-970814-1) experimental; urgency=low
+
+  * Initial packaging (of initial snapshot!)
+
+ -- Galen Hazelwood <galenh@micron.net>  Wed, 20 Aug 1997 00:36:28 +0000
+
+gcc272 (2.7.2.3-12) unstable; urgency=low
+
+  * Compiled on a glibc-2.0 based system.
+  * Reflect move of manpage to /usr/share in gcc.postinst as well.
+  * Moved gcc272-docs to section doc, priority optional.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Sat, 28 Aug 1999 13:42:13 +0200
+
+gcc272 (2.7.2.3-11) unstable; urgency=low
+
+  * Follow Debian policy for GNU system type (fixes #42657).
+  * config/i386/linux.h: Remove %[cpp_cpu] from CPP_SPEC. Stops gcc-2.95
+    complaining about obsolete spec operators (using gcc -V 2.7.2.3).
+    Patch suggested by Zack Weinberg <zack@bitmover.com>.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Sun, 15 Aug 1999 20:12:21 +0200
+
+gcc272 (2.7.2.3-10) unstable; urgency=low
+
+  * Renamed source package to gcc272. The egcs source package is renamed
+    to gcc, because it's now the "official" GNU C compiler.
+  * Changed maintainer address to "Debian GCC maintainers".
+  * Install info and man stuff to /usr/share.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Thu, 27 May 1999 12:29:23 +0200
+
+gcc (2.7.2.3-9) unstable; urgency=low
+
+  * debian/{postinst,prerm}-doc: handle gcc272.info, not gcc.info.
+    Fixes #36306.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Tue, 20 Apr 1999 07:32:58 +0200
+
+gcc (2.7.2.3-8) unstable; urgency=low
+
+  * Make gcc-2.7 the secondary compiler. Rename gcc package to gcc272.
+    On i386, sparc and m68k, this package is compiled against glibc2.0.
+  * The cpp package is built from the egcs source package.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Mon, 29 Mar 1999 22:48:50 +0200
+
+gcc (2.7.2.3-7) frozen unstable; urgency=low
+
+  * Separated out ObjC compiler to gobjc27 package.
+  * Changed maintainer address.
+  * Synchronized README.Debian with egcs-1.1.1-3.
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Tue, 29 Dec 1998 19:05:26 +0100
+
+gcc (2.7.2.3-6) frozen unstable; urgency=low
+
+  * Link with -lc on i386, m68k, sparc, when building shared libraries
+    (fixes #25122).
+
+ -- Matthias Klose <doko@cs.tu-berlin.de>  Thu,  3 Dec 1998 12:12:12 +0200
+
+gcc (2.7.2.3-5) frozen unstable; urgency=low
+
+  * Updated maintainer info.
+  * Updated Standards-Version; made lintian-clean.
+  * gcc-docs can coexist with the latest egcs-docs, so added (<= version) to
+    the Conflicts.
+  * Updated the README and renamed it to README.Debian .
+  * Put a reference to /usr/doc/gcc/README.Debian in the info docs.
+  * Updated description of g++272 .
+  * Clean up generated info files, to keep the diff small.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Tue, 17 Nov 1998 20:05:59 +0100
+
+gcc (2.7.2.3-4.8) frozen unstable; urgency=high
+
+  * Non-maintainer release
+  * Fix type in extended description
+  * Removed wrong test in postinst
+  * Add preinst to clean up some stuff from an older gcc package properly
+    and stop man complaining about dangling symlinks
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Fri, 17 Jul 1998 18:48:32 +0200
+
+gcc (2.7.2.3-4.7) frozen unstable; urgency=high
+
+  * Really fixed gcc-docs postinst (Fixes #23470), so that `gcc-docs'
+    becomes installable.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Mon, 15 Jun 1998 07:53:40 +0200
+
+gcc (2.7.2.3-4.6) frozen unstable; urgency=high
+
+  * [gcc.c] There is one call to choose_temp_base for determining the
+    tempdir to be used only;
+    #ifdef HAVE_MKSTEMP delete the tempfile created as a side effect.
+    (fixes #23123 for gcc).
+  * gcc-docs postinst was broken (due to a broken line) (fixes #23391, #23401).
+  * [debian/control] description for gcc-docs said `egcs' where it should have
+    said `gcc' (fixes #23396).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Thu, 11 Jun 1998 12:48:50 +0200
+
+gcc (2.7.2.3-4.5) frozen unstable; urgency=high
+
+  * The previous version left temporary files behind, as they were not
+    marked for deletion afterwards.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sun, 31 May 1998 22:49:14 +0200
+
+gcc (2.7.2.3-4.4) frozen unstable; urgency=high (security fixes)
+
+  * Security improvements with regard to the /tmp problem
+    (gcc opens predictably named files in TMPDIR which can be abused via
+    symlinks)  (Fixes #19453 for gcc):
+    * Compile -DMKTEMP_EACH_FILE to ensure the %u name is generated randomly
+      every time; affects gcc/gcc.c .
+    * [cp/g++.c, collect2.c, gcc.c] If compiled -DHAVE_MKSTEMP use mkstemp(3)
+      rather than mktemp(3).
+    * Security improvements: don't use the result of choose_temp_base in a
+      predictable fashion.
+      [gcc.c]:
+      * @c, @objective-c: use random name rather then tempbasename.i for
+        intermediate preprocessor output (%g.i -> %d%u).
+      * @c, @objective-c: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @c, @objective-c, @cpp-output, @assembler-with-cpp: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @c, @objective-c, @assembler-with-cpp: use previous random name
+        (cc1|cpp output) rather then tempbasename.s for intermediate assembler
+        input (%g.s -> %U)
+      [f/lang-specs.h]:
+      * @f77-cpp-input: use random name rather then tempbasename.i for
+        intermediate cpp output (%g.i -> %d%u).
+      * @f77-cpp-input: use previous random name (cpp output) rather than
+        tempbasename.i for f771 input (%g.i -> %U).
+      * @f77-cpp-input: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @f77-cpp-input: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @ratfor: use random name rather then tempbasename.i for
+        intermediate ratfor output (%g.f -> %d%u).
+      * @ratfor: use previous random name (ratfor output) rather than
+        tempbasename.i for f771 input (%g.f -> %U).
+      * @ratfor: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @ratfor: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @ratfor: use previous random name
+        (ratfor output) rather then tempbasename.s for intermediate assembler
+        input (%g.s -> %U).
+      * @f77: use random name rather then tempbasename.s for
+        intermediate ratfor output (%g.f -> %d%u).
+      * @ratfor: use previous random name (ratfor output) rather than
+        tempbasename.i for f771 input (%g.f -> %U).
+      * @ratfor: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @ratfor: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @ratfor: use previous random name
+        (ratfor output) rather then tempbasename.s for intermediate assembler
+        input (%g.s -> %U).
+      * @f77: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %d%u).
+      * @f77: switched
+        "as [-o output file] <input file>" to
+        "as <input file> [-o output file]".
+      * @ratfor: use random name rather then tempbasename.s for
+        intermediate compiler output (%g.s -> %U).
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Sat, 30 May 1998 17:27:03 +0200
+
+gcc (2.7.2.3-4.3) frozen unstable; urgency=high
+
+  * The "alpha" patches from -4 affected a lot more than alpha support,
+    and in all likeliness broke compilation of libc6 2.0.7pre3-1
+    and 2.0.7pre1-4 . I removed them by selective application of the
+    diff between -4 and -4. (should fix #22292).
+  * Fixed reference to the trampolines paper (fixes #20002 for Debian;
+    this still needs to be forwarded).
+  * This is for frozen too. (obsoletes #22390 (request to move -4.2 to
+    frozen)).
+  * Split of gcc-docs package, so that the gcc can be succesfully installed
+    on systems that have egcs-docs installed.
+  * Added the README on the compiler situation that's already in the egcs
+    packages.
+  * Use the recommended settings LDFLAGS=-s CFLAGS= BOOT_CFLAGS='-O2'.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Thu, 28 May 1998 20:03:59 +0200
+
+gcc (2.7.2.3-4.2) unstable; urgency=low
+
+  * Still for unstable, as I have received no feedback about the g++272
+    package yet.
+  * gcc now Provides: objc-compiler .
+  * Clean up /etc/alternatives/{g++,g++.1.gz} if they are dangling.
+    (fixes #19765, #20563)
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Wed, 22 Apr 1998 12:40:45 +0200
+
+gcc (2.7.2.3-4.1) unstable; urgency=low
+
+  * Bumped Standards-Version.
+  * Forked off a g++272 package (e.g. for code that uses the GNU extensions
+    in libg++); for now this is in "unstable" only; feedback appreciated.
+  * Some cleanup (lintian): permissions, absolute link, gzip manpage.
+
+ -- J.H.M. Dassen (Ray) <jdassen@wi.LeidenUniv.nl>  Fri, 17 Apr 1998 13:05:25 +0200
+
+gcc (2.7.2.3-4) unstable; urgency=low
+
+  * Added alpha patches
+  * Only build C and objective-c compilers, split off g++
+
+ -- Galen Hazelwood <galenh@micron.net>  Sun,  8 Mar 1998 21:16:39 -0700
+
+gcc (2.7.2.3-3) unstable; urgency=low
+
+  * Added patches for m68k
+  * Added patches for sparc (#13968)
+
+ -- Galen Hazelwood <galenh@micron.net>  Fri, 17 Oct 1997 18:25:21 -0600
+
+gcc (2.7.2.3-2) unstable; urgency=low
+
+  * Added g77 support (g77 0.5.21)
+
+ -- Galen Hazelwood <galenh@micron.net>  Wed, 10 Sep 1997 18:44:54 -0600
+
+gcc (2.7.2.3-1) unstable; urgency=low
+
+  * New upstream version
+  * Now using pristine source
+  * Removed misplaced paragraph in cpp.texi (#10877)
+  * Fix security bug for temporary files (#5298)
+  * Added Suggests: libg++-dev (#12335)
+  * Patched objc/thr-posix.c to support conditions (#12502)
+
+ -- Galen Hazelwood <galenh@micron.net>  Mon,  8 Sep 1997 12:20:07 -0600
+
+gcc (2.7.2.2-7) unstable; urgency=low
+
+  * Made cc and c++ managed through alternates mechanism (for egcs)
+
+ -- Galen Hazelwood <galenh@micron.net>  Tue, 19 Aug 1997 22:37:03 +0000
+
+gcc (2.7.2.2-6) unstable; urgency=low
+
+  * Tweaked Objective-C thread support (#11069)
+
+ -- Galen Hazelwood <galenh@micron.net>  Wed,  9 Jul 1997 11:56:57 -0600
+
+gcc (2.7.2.2-5) unstable; urgency=low
+
+  * More updated m68k patches
+  * Now conflicts with libc5-dev (#10006, #10112)
+  * More strict Depends: cpp, prevents version mismatch (#9954)
+
+ -- Galen Hazelwood <galenh@micron.net>  Thu, 19 Jun 1997 01:29:02 -0600
+
+gcc (2.7.2.2-4) unstable; urgency=low
+
+  * Moved to unstable
+  * Temporarily removed fortran support (waiting for new g77)
+  * Updated m68k patches
+
+ -- Galen Hazelwood <galenh@micron.net>  Fri,  9 May 1997 13:35:14 -0600
+
+gcc (2.7.2.2-3) experimental; urgency=low
+
+  * Built against libc6 (fixes bug #8511)
+
+ -- Galen Hazelwood <galenh@micron.net>  Fri, 4 Apr 1997 13:30:10 -0700
+
+gcc (2.7.2.2-2) experimental; urgency=low
+
+  * Fixed configure to build crt{begin,end}S.o on i386
+
+ -- Galen Hazelwood <galenh@micron.net>  Tue, 11 Mar 1997 16:15:02 -0700
+
+gcc (2.7.2.2-1) experimental; urgency=low
+
+  * Built for use with libc6-dev (experimental purposes only!)
+  * Added m68k patches from Andreas Schwab
+
+ -- Galen Hazelwood <galenh@micron.net>  Fri, 7 Mar 1997 12:44:17 -0700
+
+gcc (2.7.2.1-7) unstable; urgency=low
+
+  * Patched to support g77 0.5.20
+
+ -- Galen Hazelwood <galenh@micron.net>  Thu, 6 Mar 1997 22:20:23 -0700
+
+gcc (2.7.2.1-6) unstable; urgency=low
+
+  * Added (small) manpage for protoize/unprotoize (fixes bug #6904)
+  * Removed -lieee from specs file (fixes bug #7741)
+  * No longer builds aout-gcc
+
+ -- Galen Hazelwood <galenh@micron.net>  Mon, 3 Mar 1997 11:10:20 -0700
+
+gcc (2.7.2.1-5) unstable; urgency=low
+
+  * debian/control now lists cpp in section "interpreters"
+  * Re-added Objective-c patches for unstable
+
+ -- Galen Hazelwood <galenh@micron.net>  Wed, 22 Jan 1997 10:27:52 -0700
+
+gcc (2.7.2.1-4) stable unstable; urgency=low
+
+  * Changed original source file so dpkg-source -x works
+  * Removed Objective-c patches (unsafe for stable)
+  * Built against rex's libc, so fixes placed in -3 are available to
+    those still using rex
+
+ -- Galen Hazelwood <galenh@micron.net>  Tue, 21 Jan 1997 11:11:53 -0700
+
+gcc (2.7.2.1-3) unstable; urgency=low
+
+  * New (temporary) maintainer
+  * Updated to new standards and source format
+  * Integrated aout-gcc into gcc source package
+  * Demoted aout-gcc to Priority "extra"
+  * cpp package description more clear (fixes bug #5428)
+  * Removed cpp "Replaces: gcc" (fixes bug #5762)
+  * Minor fix to invoke.texi (fixes bug #2909)
+  * Added latest Objective-C patches for GNUstep people (fixes bug #4657)
+
+ -- Galen Hazelwood <galenh@micron.net>  Sun, 5 Jan 1997 09:57:36 -0700
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcjLGCJ.postrm
+++ gdc-4.4-1.063-4.4.7/debian/libgcjLGCJ.postrm
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    remove|purge)
+        # only purge if no other library is installed.
+        if [ -z "$(ls /usr/lib/libgcj.so.@GCJ@* 2>/dev/null)" ]; then
+	    rm -f /var/lib/gcj-@BV@/classmap.db
+	    rmdir --ignore-fail-on-non-empty /var/lib/gcj-@BV@ 2>/dev/null || true
+	fi
+esac
+
+#DEBHELPER#
--- gdc-4.4-1.063-4.4.7.orig/debian/gcc-snapshot.prerm
+++ gdc-4.4-1.063-4.4.7/debian/gcc-snapshot.prerm
@@ -0,0 +1,5 @@
+#! /bin/sh -e
+
+rm -f /usr/lib/gcc-snapshot/share/python/*.py[co]
+
+#DEBHELPER#
--- gdc-4.4-1.063-4.4.7.orig/debian/README.ssp
+++ gdc-4.4-1.063-4.4.7/debian/README.ssp
@@ -0,0 +1,28 @@
+Stack smashing protection is a feature of GCC that enables a program to
+detect buffer overflows and immediately terminate execution, rather than
+continuing execution with corrupt internal data structures. It uses
+"canaries" and local variable reordering to reduce the likelihood of
+stack corruption through buffer overflows.
+
+Options that affect stack smashing protection:
+
+-fstack-protector
+    Enables protection for functions that are vulnerable to stack
+    smashing, such as those that call alloca() or use pointers.
+
+-fstack-protector-all
+    Enables protection for all functions.
+
+-Wstack-protector
+    Warns about functions that will not be protected. Only active when
+    -fstack-protector has been used.
+
+Applications built with stack smashing protection should link with the
+ssp library by using the option "-lssp" for systems with glibc-2.3.x or
+older; glibc-2.4 and newer versions provide this functionality in libc.
+
+The Debian architectures alpha, hppa, ia64, m68k, mips, mipsel do not
+have support for stack smashing protection.
+
+More documentation can be found at the project's website:
+http://researchweb.watson.ibm.com/trl/projects/security/ssp/
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64gfortran3.symbols
+++ gdc-4.4-1.063-4.4.7/debian/lib64gfortran3.symbols
@@ -0,0 +1,5 @@
+libgfortran.so.3 lib64gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
+#include "libgfortran3.symbols.16"
+#include "libgfortran3.symbols.64"
--- gdc-4.4-1.063-4.4.7.orig/debian/copyright.in
+++ gdc-4.4-1.063-4.4.7/debian/copyright.in
@@ -0,0 +1,339 @@
+This is the Debian GNU/Linux prepackaged version of the GNU compiler
+collection, containing Ada, C, C++, Fortran 95, Java, Objective-C,
+Objective-C++, and Treelang compilers, documentation, and support
+libraries.  In addition, Debian provides the gdc compiler, either in
+the same source package, or built from a separate same source package.
+Packaging is done by the Debian GCC Maintainers
+<debian-gcc@lists.debian.org>, with sources obtained from:
+
+  ftp://gcc.gnu.org/pub/gcc/releases/  (for full releases)
+  svn://gcc.gnu.org/svn/gcc/           (for prereleases)
+  http://gnu-pascal.de/alpha/          (for GNU Pascal)
+  http://bitbucket.org/goshawk/gdc     (for D)
+
+The current gcc-@BV@ source package is taken from the SVN @SVN_BRANCH@.
+
+Changes: See changelog.Debian.gz
+
+Debian splits the GNU Compiler Collection into packages for each language,
+library, and documentation as follows:
+
+Language       Compiler package  Library package    Documentation
+---------------------------------------------------------------------------
+Ada            gnat-@BV@          libgnat-@BV@        gnat-@BV@-doc
+C              gcc-@BV@                              gcc-@BV@-doc
+C++            g++-@BV@           libstdc++6         libstdc++6-@BV@-doc
+D              gdc-@BV@
+Fortran 95     gfortran-@BV@      libgfortran3       gfortran-@BV@-doc
+Java           gcj-@BV@           libgcj10           libgcj-doc
+Objective C    gobjc-@BV@         libobjc2
+Objective C++  gobjc++-@BV@
+
+For some language run-time libraries, Debian provides source files,
+development files, debugging symbols and libraries containing position-
+independent code in separate packages:
+
+Language  Sources      Development   Debugging            Position-Independent
+------------------------------------------------------------------------------
+C++                                  libstdc++6-@BV@-dbg  libstdc++6-@BV@-pic
+D         libphobos-@BV@-dev
+Java      libgcj10-src libgcj10-dev  libgcj10-dbg
+
+Additional packages include:
+
+All languages:
+libgcc1, libgcc2, libgcc4       GCC intrinsics (platform-dependent)
+gcc-@BV@-base                    Base files common to all compilers
+gcc-@BV@-soft-float              Software floating point (ARM only)
+gcc-@BV@-source                  The sources with patches
+
+Ada:
+libgnatvsn-dev, libgnatvsn@BV@   GNAT version library
+libgnatprj-dev, libgnatprj@BV@   GNAT Project Manager library
+
+C:
+cpp-@BV@, cpp-@BV@-doc            GNU C Preprocessor
+libmudflap0-dev, libmudflap0    Library for instrumenting pointers
+libssp0-dev, libssp0            GCC stack smashing protection library
+fixincludes                     Fix non-ANSI header files
+protoize                        Create/remove ANSI prototypes from C code
+
+Java:
+gij                             The Java bytecode interpreter and VM
+libgcj-common                   Common files for the Java run-time
+libgcj10-awt                    The Abstract Windowing Toolkit
+libgcj10-jar                    Java ARchive for the Java run-time
+
+C, C++ and Fortran 95:
+libgomp1-dev, libgomp1		GCC OpenMP (GOMP) support library
+
+Biarch support: On some 64-bit platforms which can also run 32-bit code,
+Debian provides additional packages containing 32-bit versions of some
+libraries.  These packages have names beginning with 'lib32' instead of
+'lib', for example lib32stdc++6.  Similarly, on some 32-bit platforms which
+can also run 64-bit code, Debian provides additional packages with names
+beginning with 'lib64' instead of 'lib'.  These packages contain 64-bit
+versions of the libraries.  (At this time, not all platforms and not all
+libraries support biarch.)  The license terms for these lib32 or lib64
+packages are identical to the ones for the lib packages.
+
+
+COPYRIGHT STATEMENTS AND LICENSING TERMS
+
+
+GCC is Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+2008 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+Files that have exception clauses are licensed under the terms of the
+GNU General Public License; either version 3, or (at your option) any
+later version.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License is in `/usr/share/common-licenses/GPL', version 3 of this
+license in `/usr/share/common-licenses/GPL-3'.
+
+The following runtime libraries are licensed under the terms of the
+GNU General Public License (v3 or later) with version 3.1 of the GCC
+Runtime Library Exception (included in this file):
+
+ - libgcc (libgcc/, gcc/libgcc2.[ch], gcc/unwind*, gcc/gthr*,
+   gcc/coretypes.h, gcc/crtstuff.c, gcc/defaults.h, gcc/dwarf2.h,
+   gcc/emults.c, gcc/gbl-ctors.h, gcc/gcov-io.h, gcc/libgcov.c,
+   gcc/tsystem.h, gcc/typeclass.h).
+ - libdecnumber
+ - libgomp
+ - libssp
+ - libstdc++-v3
+ - libobjc
+ - libmudflap
+ - libgfortran
+ - The libgnat-@BV@ Ada support library and libgnatvsn library.
+ - Various config files in gcc/config/ used in runtime libraries.
+
+In contrast, libgnatprj is licensed under the terms of the pure GNU
+General Public License.
+
+The libgcj library is licensed under the terms of the GNU General
+Public License, with a special exception:
+
+    Linking this library statically or dynamically with other modules
+    is making a combined work based on this library.  Thus, the terms
+    and conditions of the GNU General Public License cover the whole
+    combination.
+
+    As a special exception, the copyright holders of this library give
+    you permission to link this library with independent modules to
+    produce an executable, regardless of the license terms of these
+    independent modules, and to copy and distribute the resulting
+    executable under terms of your choice, provided that you also
+    meet, for each linked independent module, the terms and conditions
+    of the license of that module.  An independent module is a module
+    which is not derived from or based on this library.  If you modify
+    this library, you may extend this exception to your version of the
+    library, but you are not obligated to do so.  If you do not wish
+    to do so, delete this exception statement from your version.
+
+The libffi library is licensed under the following terms:
+
+    libffi - Copyright (c) 1996-2003  Red Hat, Inc.
+
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+    the following conditions:
+
+    The above copyright notice and this permission notice shall be included
+    in all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
+    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+    IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+    OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+    ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
+
+
+The documentation is licensed under the GNU Free Documentation License (v1.2).
+On Debian GNU/Linux systems, the complete text of this license is in
+`/usr/share/common-licenses/GFDL-1.2'.
+
+
+GCC RUNTIME LIBRARY EXCEPTION
+
+Version 3.1, 31 March 2009
+
+Copyright (C) 2009 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+This GCC Runtime Library Exception ("Exception") is an additional
+permission under section 7 of the GNU General Public License, version
+3 ("GPLv3"). It applies to a given file (the "Runtime Library") that
+bears a notice placed by the copyright holder of the file stating that
+the file is governed by GPLv3 along with this Exception.
+
+When you use GCC to compile a program, GCC may combine portions of
+certain GCC header files and runtime libraries with the compiled
+program. The purpose of this Exception is to allow compilation of
+non-GPL (including proprietary) programs to use, in this way, the
+header files and runtime libraries covered by this Exception.
+
+0. Definitions.
+
+A file is an "Independent Module" if it either requires the Runtime
+Library for execution after a Compilation Process, or makes use of an
+interface provided by the Runtime Library, but is not otherwise based
+on the Runtime Library.
+
+"GCC" means a version of the GNU Compiler Collection, with or without
+modifications, governed by version 3 (or a specified later version) of
+the GNU General Public License (GPL) with the option of using any
+subsequent versions published by the FSF.
+
+"GPL-compatible Software" is software whose conditions of propagation,
+modification and use would permit combination with GCC in accord with
+the license of GCC.
+
+"Target Code" refers to output from any compiler for a real or virtual
+target processor architecture, in executable form or suitable for
+input to an assembler, loader, linker and/or execution
+phase. Notwithstanding that, Target Code does not include data in any
+format that is used as a compiler intermediate representation, or used
+for producing a compiler intermediate representation.
+
+The "Compilation Process" transforms code entirely represented in
+non-intermediate languages designed for human-written code, and/or in
+Java Virtual Machine byte code, into Target Code. Thus, for example,
+use of source code generators and preprocessors need not be considered
+part of the Compilation Process, since the Compilation Process can be
+understood as starting with the output of the generators or
+preprocessors.
+
+A Compilation Process is "Eligible" if it is done using GCC, alone or
+with other GPL-compatible software, or if it is done without using any
+work based on GCC. For example, using non-GPL-compatible Software to
+optimize any GCC intermediate representations would not qualify as an
+Eligible Compilation Process.
+
+1. Grant of Additional Permission.
+
+You have permission to propagate a work of Target Code formed by
+combining the Runtime Library with Independent Modules, even if such
+propagation would otherwise violate the terms of GPLv3, provided that
+all Target Code was generated by Eligible Compilation Processes. You
+may then convey such a combination under terms of your choice,
+consistent with the licensing of the Independent Modules.
+
+2. No Weakening of GCC Copyleft.
+
+The availability of this Exception does not imply any general
+presumption that third-party software is unaffected by the copyleft
+requirements of the license of GCC.
+
+
+D:
+gdc-@BV@                         GNU D Compiler
+libphobos-@BV@-dev               D standard runtime library
+
+The D source package is made up of the following components.
+
+The D front-end for GCC:
+ - d/*
+
+Copyright (C) 2004-2007 David Friedman
+Modified by Vincenzo Ampolo, Michael Parrot, Iain Buclaw, (C) 2009, 2010
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License is in `/usr/share/common-licenses/GPL', version 2 of this
+license in `/usr/share/common-licenses/GPL-2'.
+
+
+The DMD Compiler implementation of the D programming language:
+ - d/dmd/*
+
+Copyright (c) 1999-2010 by Digital Mars
+All Rights Reserved
+written by Walter Bright
+http://www.digitalmars.com
+License for redistribution is by either the Artistic License or
+the GNU General Public License (v1).
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License is in `/usr/share/common-licenses/GPL', the Artistic
+license in `/usr/share/common-licenses/Artistic'.
+
+
+The Zlib data compression library:
+ - d/phobos/etc/c/zlib/*
+
+ (C) 1995-2004 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+
+The Phobos standard runtime library:
+ - d/phobos/*
+
+Unless otherwise marked within the file, each file in the source
+is under the following licenses:
+
+Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com
+Written by Walter Bright
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, in both source and binary form, subject to the following
+restrictions:
+
+ o  The origin of this software must not be misrepresented; you must not
+    claim that you wrote the original software. If you use this software
+    in a product, an acknowledgment in the product documentation would be
+    appreciated but is not required.
+ o  Altered source versions must be plainly marked as such, and must not
+    be misrepresented as being the original software.
+ o  This notice may not be removed or altered from any source
+    distribution.
+
+By plainly marking modifications, something along the lines of adding to each
+file that has been changed a "Modified by Foo Bar" line
+underneath the "Written by" line would be adequate.
+
--- gdc-4.4-1.063-4.4.7.orig/debian/gnat-BV-doc.doc-base.style
+++ gdc-4.4-1.063-4.4.7/debian/gnat-BV-doc.doc-base.style
@@ -0,0 +1,16 @@
+Document: gnat-style-@BV@
+Title: GNAT Coding Style
+Author: Various
+Abstract: Most of GNAT is written in Ada using a consistent style to
+ ensure readability of the code.  This document has been written to
+ help maintain this consistent style, while having a large group of
+ developers work on the compiler.
+Section: Programming/Ada
+
+Format: html
+Index: /usr/share/doc/gnat-@BV@-doc/gnat-style.html
+Files: /usr/share/doc/gnat-@BV@-doc/gnat-style.html
+
+Format: info
+Index: /usr/share/info/gnat-style-@BV@.info.gz
+Files: /usr/share/info/gnat-style-@BV@*
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64gccLC.postinst
+++ gdc-4.4-1.063-4.4.7/debian/lib64gccLC.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/lib64gcc@LC@
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	    rm -rf $docdir
+	    ln -s gcc-@BV@-base $docdir
+	fi
+esac
+
+#DEBHELPER#
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64gcc1.symbols.s390
+++ gdc-4.4-1.063-4.4.7/debian/lib64gcc1.symbols.s390
@@ -0,0 +1,107 @@
+libgcc_s.so.1 lib64gcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.1.0@GCC_4.1.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.2@GLIBC_2.2 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.2 1:4.1.1
+ __deregister_frame_info@GLIBC_2.2 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.1.0 1:4.1.1
+ __divti3@GCC_3.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfti@GCC_4.1.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfti@GCC_4.1.0 1:4.1.1
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_4.1.0 1:4.1.1
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.2 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __lshrti3@GCC_3.0 1:4.1.1
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.1.0 1:4.1.1
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.1.0 1:4.1.1
+ __register_frame@GLIBC_2.2 1:4.1.1
+ __register_frame_info@GLIBC_2.2 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.2 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.2 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
--- gdc-4.4-1.063-4.4.7.orig/debian/gnatprj.gpr
+++ gdc-4.4-1.063-4.4.7/debian/gnatprj.gpr
@@ -0,0 +1,32 @@
+--  Project file for use with GNAT
+--  Copyright (c) 2005, 2008 Ludovic Brenta <ludovic@ludovic-brenta.org>
+--
+--  This program is free software; you can redistribute it and/or modify
+--  it under the terms of the GNU General Public License as published by
+--  the Free Software Foundation; either version 3 of the License, or
+--  (at your option) any later version.
+--
+--  This program is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+--  GNU General Public License for more details.
+--
+--  This project file is designed to help build applications that use
+--  GNAT project files.  Here is an example of how to use this project file:
+--
+--  with "gnatprj";
+--  project Example is
+--     for Object_Dir use "obj";
+--     for Exec_Dir use ".";
+--     for Main use ("example");
+--  end Example;
+
+with "gnatvsn.gpr";
+project Gnatprj is
+   for Library_Name use "gnatprj";
+   for Library_Dir use "/usr/lib";
+   for Library_Kind use "dynamic";
+   for Source_Dirs use ("/usr/share/ada/adainclude/gnatprj");
+   for Library_ALI_Dir use "/usr/lib/ada/adalib/gnatprj";
+   for Externally_Built use "true";
+end Gnatprj;
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64gfortran3.symbols.s390
+++ gdc-4.4-1.063-4.4.7/debian/lib64gfortran3.symbols.s390
@@ -0,0 +1,5 @@
+libgfortran.so.3 lib64gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.lpia
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.lpia
@@ -0,0 +1,6 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/dh_doclink
+++ gdc-4.4-1.063-4.4.7/debian/dh_doclink
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+pkg=`echo $1 | sed 's/^-p//'`
+target=$2
+
+[ -d debian/$pkg/usr/share/doc ] || mkdir -p debian/$pkg/usr/share/doc
+if [ -d debian/$pkg/usr/share/doc/$p -a ! -h debian/$pkg/usr/share/doc/$p ]
+then
+    echo "WARNING: removing doc directory  $pkg"
+    rm -rf debian/$pkg/usr/share/doc/$pkg
+fi
+ln -sf $target debian/$pkg/usr/share/doc/$pkg
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.excprop
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.excprop
@@ -0,0 +1,17 @@
+ _ZNKSt15__exception_ptr13exception_ptr20__cxa_exception_typeEv@CXXABI_1.3.3 4.4.0
+ _ZNKSt15__exception_ptr13exception_ptrcvMS0_FvvEEv@CXXABI_1.3.3 4.4.0
+ _ZNKSt15__exception_ptr13exception_ptrntEv@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptr4swapERS0_@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrC1EMS0_FvvE@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrC1ERKS0_@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrC1Ev@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrC2EMS0_FvvE@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrC2ERKS0_@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrC2Ev@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrD1Ev@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptrD2Ev@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptr13exception_ptraSERKS0_@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@CXXABI_1.3.3 4.4.0
+ _ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@CXXABI_1.3.3 4.4.0
+ _ZSt17current_exceptionv@CXXABI_1.3.3 4.4.0
+ _ZSt17rethrow_exceptionNSt15__exception_ptr13exception_ptrE@CXXABI_1.3.3 4.4.0
--- gdc-4.4-1.063-4.4.7.orig/debian/gcc-BV-doc.doc-base.gccint
+++ gdc-4.4-1.063-4.4.7/debian/gcc-BV-doc.doc-base.gccint
@@ -0,0 +1,17 @@
+Document: gccint-@BV@
+Title: Internals of the GNU C and C++ compiler
+Author: Various
+Abstract: This manual documents the internals of the GNU compilers,
+ including how to port them to new targets and some information about
+ how to write front ends for new languages.  It corresponds to GCC
+ version @BV@.x.  The use of the GNU compilers is documented in a
+ separate manual.
+Section: Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/gccint.html
+Files: /usr/share/doc/gcc-@BV@-base/gccint.html
+
+Format: info
+Index: /usr/share/info/gccint-@BV@.info.gz
+Files: /usr/share/info/gccint-@BV@*
--- gdc-4.4-1.063-4.4.7.orig/debian/gij-wrapper-BV.1
+++ gdc-4.4-1.063-4.4.7/debian/gij-wrapper-BV.1
@@ -0,0 +1,22 @@
+.TH GIJ-WRAPPER 1 "August 11, 2001" gij-wrapper "Java User's Manual"
+.SH NAME
+gij-wrapper \- a wrapper around gij
+
+.SH SYNOPSIS
+gij-wrapper [\fB\s-1OPTION\s0\fR] ... \fI\s-1JARFILE\s0\fR [\fI\s-1ARGS\s0\fR...]
+.PP
+gij-wrapper [\fB\-jar\fR] [\fB\s-1OPTION\s0\fR] ... \fI\s-1CLASS\s0\fR [\fI\s-1ARGS\s0\fR...]
+
+.SH DESCRIPTION
+
+\fBgij-wrapper\fR is a wrapper around gij(1) to be called as the java
+interpreter. Options different for java(1) and gij(1) are translated,
+options unknown to gij(1) are silently ignored.
+
+.SH OPTIONS
+See gij-@BV@(1) for a list of options that gij understands.
+
+.SH "SEE ALSO"
+.BR gij-@BV@(1)
+,
+.BR java(1)
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64stdc++6.symbols.s390
+++ gdc-4.4-1.063-4.4.7/debian/lib64stdc++6.symbols.s390
@@ -0,0 +1,11 @@
+libstdc++.so.6 lib64stdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# ldexpf@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# powf@GLIBCXX_3.4 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.64bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64stdc++6.symbols.powerpc
+++ gdc-4.4-1.063-4.4.7/debian/lib64stdc++6.symbols.powerpc
@@ -0,0 +1,9 @@
+libstdc++.so.6 lib64stdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.64bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc4.symbols.hppa
+++ gdc-4.4-1.063-4.4.7/debian/libgcc4.symbols.hppa
@@ -0,0 +1,93 @@
+libgcc_s.so.4 libgcc4 #MINVER#
+ GCC_3.0@GCC_3.0 4.1.1
+ GCC_3.3.1@GCC_3.3.1 4.1.1
+ GCC_3.3@GCC_3.3 4.1.1
+ GCC_3.4.2@GCC_3.4.2 4.1.1
+ GCC_3.4@GCC_3.4 4.1.1
+ GCC_4.0.0@GCC_4.0.0 4.1.1
+ GCC_4.2.0@GCC_4.2.0 4.1.1
+ GCC_4.3.0@GCC_4.3.0 4.3
+ GLIBC_2.0@GLIBC_2.0 4.1.1
+ _Unwind_Backtrace@GCC_3.3 4.1.1
+ _Unwind_DeleteException@GCC_3.0 4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 4.1.1
+ _Unwind_Find_FDE@GCC_3.0 4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 4.1.1
+ _Unwind_GetCFA@GCC_3.3 4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 4.1.1
+ _Unwind_GetGR@GCC_3.0 4.1.1
+ _Unwind_GetIP@GCC_3.0 4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 4.1.1
+ _Unwind_RaiseException@GCC_3.0 4.1.1
+ _Unwind_Resume@GCC_3.0 4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 4.1.1
+ _Unwind_SetGR@GCC_3.0 4.1.1
+ _Unwind_SetIP@GCC_3.0 4.1.1
+ __absvdi2@GCC_3.0 4.1.1
+ __absvsi2@GCC_3.0 4.1.1
+ __addvdi3@GCC_3.0 4.1.1
+ __addvsi3@GCC_3.0 4.1.1
+ __ashldi3@GCC_3.0 4.1.1
+ __ashrdi3@GCC_3.0 4.1.1
+ __bswapdi2@GCC_4.3.0 4.3
+ __bswapsi2@GCC_4.3.0 4.3
+ __clear_cache@GCC_3.0 4.1.1
+ __clzdi2@GCC_3.4 4.1.1
+ __clzsi2@GCC_3.4 4.1.1
+ __cmpdi2@GCC_3.0 4.1.1
+ __ctzdi2@GCC_3.4 4.1.1
+ __ctzsi2@GCC_3.4 4.1.1
+ __deregister_frame@GLIBC_2.0 4.1.1
+ __deregister_frame_info@GLIBC_2.0 4.1.1
+ __deregister_frame_info_bases@GCC_3.0 4.1.1
+ __divdc3@GCC_4.0.0 4.1.1
+ __divdi3@GLIBC_2.0 4.1.1
+ __divsc3@GCC_4.0.0 4.1.1
+ __emutls_get_address@GCC_4.3.0 4.3
+ __emutls_register_common@GCC_4.3.0 4.3
+ __enable_execute_stack@GCC_3.4.2 4.1.1
+ __ffsdi2@GCC_3.0 4.1.1
+ __ffssi2@GCC_4.3.0 4.3
+ __fixdfdi@GCC_3.0 4.1.1
+ __fixsfdi@GCC_3.0 4.1.1
+ __fixunsdfdi@GCC_3.0 4.1.1
+ __fixunsdfsi@GCC_3.0 4.1.1
+ __fixunssfdi@GCC_3.0 4.1.1
+ __fixunssfsi@GCC_3.0 4.1.1
+ __floatdidf@GCC_3.0 4.1.1
+ __floatdisf@GCC_3.0 4.1.1
+ __floatundidf@GCC_4.2.0 4.2.1
+ __floatundisf@GCC_4.2.0 4.2.1
+ __frame_state_for@GLIBC_2.0 4.1.1
+ __gcc_personality_v0@GCC_3.3.1 4.1.1
+ __lshrdi3@GCC_3.0 4.1.1
+ __moddi3@GLIBC_2.0 4.1.1
+ __muldc3@GCC_4.0.0 4.1.1
+ __muldi3@GCC_3.0 4.1.1
+ __mulsc3@GCC_4.0.0 4.1.1
+ __mulvdi3@GCC_3.0 4.1.1
+ __mulvsi3@GCC_3.0 4.1.1
+ __negdi2@GCC_3.0 4.1.1
+ __negvdi2@GCC_3.0 4.1.1
+ __negvsi2@GCC_3.0 4.1.1
+ __paritydi2@GCC_3.4 4.1.1
+ __paritysi2@GCC_3.4 4.1.1
+ __popcountdi2@GCC_3.4 4.1.1
+ __popcountsi2@GCC_3.4 4.1.1
+ __powidf2@GCC_4.0.0 4.1.1
+ __powisf2@GCC_4.0.0 4.1.1
+ __register_frame@GLIBC_2.0 4.1.1
+ __register_frame_info@GLIBC_2.0 4.1.1
+ __register_frame_info_bases@GCC_3.0 4.1.1
+ __register_frame_info_table@GLIBC_2.0 4.1.1
+ __register_frame_info_table_bases@GCC_3.0 4.1.1
+ __register_frame_table@GLIBC_2.0 4.1.1
+ __subvdi3@GCC_3.0 4.1.1
+ __subvsi3@GCC_3.0 4.1.1
+ __ucmpdi2@GCC_3.0 4.1.1
+ __udivdi3@GLIBC_2.0 4.1.1
+ __udivmoddi4@GCC_3.0 4.1.1
+ __umoddi3@GLIBC_2.0 4.1.1
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.lpia
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.lpia
@@ -0,0 +1,3 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
--- gdc-4.4-1.063-4.4.7.orig/debian/lib32stdc++CXX.postinst
+++ gdc-4.4-1.063-4.4.7/debian/lib32stdc++CXX.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/lib32stdc++@CXX@
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	    rm -rf $docdir
+	    ln -s gcc-@BV@-base $docdir
+	fi
+esac
+
+#DEBHELPER#
--- gdc-4.4-1.063-4.4.7.orig/debian/libobjc2.symbols.armel
+++ gdc-4.4-1.063-4.4.7/debian/libobjc2.symbols.armel
@@ -0,0 +1,4 @@
+libobjc.so.2 libobjc2 #MINVER#
+#include "libobjc2.symbols.common"
+ __gnu_objc_personality_v0@Base 4.2.1
+ __objc_exception_class@Base 4.3.0
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64stdc++CXX.postinst
+++ gdc-4.4-1.063-4.4.7/debian/lib64stdc++CXX.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/lib64stdc++@CXX@
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	    rm -rf $docdir
+	    ln -s gcc-@BV@-base $docdir
+	fi
+esac
+
+#DEBHELPER#
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.mips
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.mips
@@ -0,0 +1,2 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.alpha
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.alpha
@@ -0,0 +1,5 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcjGCJ.overrides
+++ gdc-4.4-1.063-4.4.7/debian/libgcjGCJ.overrides
@@ -0,0 +1,9 @@
+# pick up the exact version, in case another gcj version is installed
+libgcj@GCJ@ binary: binary-or-shlib-defines-rpath
+
+# intended
+libgcj@GCJ@ binary: unused-shlib-entry-in-control-file
+libgcj@GCJ@ binary: shlibs-declares-dependency-on-other-package
+
+# keep patched ltdl copy
+libgcj@GCJ@ binary: embedded-library
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64stdc++6.symbols.i386
+++ gdc-4.4-1.063-4.4.7/debian/lib64stdc++6.symbols.i386
@@ -0,0 +1,31 @@
+libstdc++.so.6 lib64stdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# acosl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# asinl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# atan2l@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# atanl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# ceill@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# coshl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# cosl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# expl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# floorl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# fmodl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# frexpl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# hypotl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# ldexpf@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# ldexpl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# log10l@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# logl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# modfl@GLIBCXX_3.4.3 4.1.1
+#DEPRECATED: 4.2.2-4# powf@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# powl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# sinhl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# sinl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# sqrtl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# tanhl@GLIBCXX_3.4 4.1.1
+#DEPRECATED: 4.2.2-4# tanl@GLIBCXX_3.4 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/rename-pkgs.sh
+++ gdc-4.4-1.063-4.4.7/debian/rename-pkgs.sh
@@ -0,0 +1,32 @@
+#! /bin/bash
+
+rename_pkg()
+{
+  src=$1
+  dest=$2
+  for ext in preinst postinst prerm postrm doc-base; do
+    if [ -f $src.$ext ]; then
+      if [ -f $dest.ext ]; then
+	echo already exists: $dest.$ext
+      else
+	echo "$src.$ext --> $dest.$ext"
+	svn rename $src.$ext $dest.$ext
+	#mv $src.$ext $dest.$ext
+      fi
+    fi
+  done
+}
+
+v_new=3.4
+v_old=3.3
+
+for p in chill cpp gcc g++ g77 gpc gij gcj gobjc protoize treelang; do
+  rename_pkg $p-$v_old $p-$v_new
+done
+
+for p in cpp gcc g77 gnat; do
+  rename_pkg $p-$v_old-doc $p-$v_new-doc
+done
+
+rename_pkg gcc-$v_old-base gcc-$v_new-base
+rename_pkg gcc-$v_old-sparc64 gcc-$v_new-sparc64
--- gdc-4.4-1.063-4.4.7.orig/debian/README.C++
+++ gdc-4.4-1.063-4.4.7/debian/README.C++
@@ -0,0 +1,35 @@
+libstdc++ is an implementation of the Standard C++ Library, including the
+Standard Template Library (i.e. as specified by ANSI and ISO).
+
+Some notes on porting applications from libstdc++-2.90 (or earlier versions)    
+to libstdc++-v3 can be found in the libstdc++6-4.3-doc package. After the
+installation of the package, look at:
+
+  file:///usr/share/doc/gcc-4.3-base/libstdc++/html/17_intro/porting-howto.html
+
+On Debian GNU/Linux you find additional documentation in the
+libstdc++6-4.3-doc package. After installing these packages,
+point your browser to
+
+  file:///usr/share/doc/libstdc++6-4.3-doc/libstdc++/html/index.html
+
+Other documentation can be found:
+
+    http://www.sgi.com/tech/stl/
+
+with a good, recent, book on C++.
+
+A great deal of useful C++ documentation can be found in the C++ FAQ-Lite,
+maintained by Marshall Cline <cline@parashift.com>.  It can be found at the
+mirror sites linked from the following URL (this was last updated on
+2010/09/11):
+
+     http://www.parashift.com/c++-faq/
+
+or use some search engin site to find it, e.g.:
+
+     http://www.google.com/search?q=c%2B%2B+faq+lite
+
+Be careful not to use outdated mirors.
+
+Please send updates to this list as bug report for the g++ package.
--- gdc-4.4-1.063-4.4.7.orig/debian/gcj-BV-jdk.postinst
+++ gdc-4.4-1.063-4.4.7/debian/gcj-BV-jdk.postinst
@@ -0,0 +1,45 @@
+#! /bin/sh -e
+
+if [ -d /usr/share/doc/gcc-@BV@-base/java ] && [ ! -h /usr/share/doc/gcc-@BV@-base/java ]; then
+    rm -rf /usr/share/doc/gcc-@BV@-base/java
+    ln -s ../gcj-@BV@-base /usr/share/doc/gcc-@BV@-base/java
+fi
+
+prio=@java_priority@
+update-alternatives --quiet \
+    --install /usr/bin/javac javac /usr/bin/gcj-wrapper-@BV@ $prio \
+    @GFDL@--slave /usr/share/man/man1/javac.1.gz javac.1.gz /usr/share/man/man1/gcj-wrapper-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/jar jar /usr/bin/gjar-@BV@ $prio \
+    --slave /usr/share/man/man1/jar.1.gz jar.1.gz /usr/share/man/man1/gjar-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/jarsigner jarsigner /usr/bin/gjarsigner-@BV@ $prio \
+    --slave /usr/share/man/man1/jarsigner.1.gz jarsigner.1.gz /usr/share/man/man1/gjarsigner-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/javah javah /usr/bin/gjavah-@BV@ $prio \
+    --slave /usr/share/man/man1/javah.1.gz javah.1.gz /usr/share/man/man1/gjavah-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/javadoc javadoc /usr/bin/gjdoc-@BV@ $prio \
+    --slave /usr/share/man/man1/javadoc.1.gz javadoc.1.gz /usr/share/man/man1/gjdoc-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/native2ascii native2ascii /usr/bin/gnative2ascii-@BV@ $prio \
+    --slave /usr/share/man/man1/native2ascii.1.gz native2ascii.1.gz /usr/share/man/man1/gnative2ascii-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/rmic rmic /usr/bin/grmic-@BV@ $prio \
+    @GFDL@--slave /usr/share/man/man1/rmic.1.gz rmic.1.gz /usr/share/man/man1/grmic-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/serialver serialver /usr/bin/gserialver-@BV@ $prio \
+    --slave /usr/share/man/man1/serialver.1.gz serialver.1.gz /usr/share/man/man1/gserialver-@BV@.1.gz
+
+update-alternatives --quiet \
+    --install /usr/bin/tnameserv tnameserv /usr/bin/gtnameserv-@BV@ $prio \
+    --slave /usr/share/man/man1/tnameserv.1.gz tnameserv.1.gz /usr/share/man/man1/gtnameserv-@BV@.1.gz
+
+#DEBHELPER#
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.64bit
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.64bit
@@ -0,0 +1,535 @@
+#include "libstdc++6.symbols.common"
+ _ZN9__gnu_cxx17__pool_alloc_base16_M_get_free_listEm@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base9_M_refillEm@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsgetnEPcl@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsputnEPKcl@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsgetnEPwl@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsputnEPKwl@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reclaim_blockEPcm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reserve_blockEmm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reclaim_blockEPcm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reserve_blockEmm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx9free_list6_M_getEm@GLIBCXX_3.4.4 4.1.1
+ _ZNK10__cxxabiv117__class_type_info12__do_dyncastElNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcElPKvPKS0_S2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastElNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcElPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastElNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcElPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEmmPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE2atEm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE6substrEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEEixEm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEmmPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSs16find_last_not_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs2atEm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4copyEPcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs6substrEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_checkEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_limitEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSsixEm@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE6_M_putEPcmPKcPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE6_M_putEPwmPKwPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE9do_lengthERS0_PKcS4_m@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE9do_lengthERS0_PKcS4_m@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE12_M_transformEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE12_M_transformEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcmcRSt8ios_basePcS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcmcS6_PcS7_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEclRSt8ios_basePcPKcRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcmwRSt8ios_basePwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcmwPKwPwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwlRSt8ios_basePwPKwRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_numES3_S3_RiiimRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES3_S3_RiPPKcmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_numES3_S3_RiiimRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES3_S3_RiPPKwmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8valarrayImE4sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEmmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE2atEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_m@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEmmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5eraseEmm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_mw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EPKwmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EPKwmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEixEm@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPclc@GLIBCXX_3.4 4.1.1
+ _ZNSi4readEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSi5seekgElSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEl@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEl@GLIBCXX_3.4.5 4.1.1
+ _ZNSi6ignoreEli@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPclc@GLIBCXX_3.4 4.1.1
+ _ZNSi8readsomeEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSo5seekpElSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSo5writeEPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSo8_M_writeEPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSs12_S_constructEmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs14_M_replace_auxEmmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs15_M_replace_safeEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs2atEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs4_Rep8_M_cloneERKSaIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep9_S_createEmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs5eraseEmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEm@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7_M_moveEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_moveEPcPKcm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_mc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs7reserveEm@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcmc@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcmc@GLIBCXX_3.4.5 4.1.1
+ _ZNSs9_M_mutateEmmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EPKcmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EPKcmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsixEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EPSt18__moneypunct_cacheIcLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EPSt18__moneypunct_cacheIcLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EPSt18__moneypunct_cacheIcLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EPSt18__moneypunct_cacheIcLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EPSt18__moneypunct_cacheIwLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EPSt18__moneypunct_cacheIwLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EPSt18__moneypunct_cacheIwLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EPSt18__moneypunct_cacheIwLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EPSt17__timepunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EPSt17__timepunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EPSt17__timepunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EPSt17__timepunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsgetnEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsputnEPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE7seekoffElSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE8xsputn_2EPKclS2_l@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf6setbufEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_allocEm@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_setupEPcS0_l@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPFPvmEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKal@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKhl@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPalS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPclS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPhlS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1El@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPFPvmEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKal@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKhl@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPalS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPclS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPhlS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2El@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE13_M_set_bufferEl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE22_M_convert_to_externalEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6setbufEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsgetnEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsputnEPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7_M_seekElSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE13_M_set_bufferEl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE22_M_convert_to_externalEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6setbufEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsgetnEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsputnEPKwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7_M_seekElSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwlw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE4readEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5seekgElSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEl@GLIBCXX_3.4.5 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreElj@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwlw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE8readsomeEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpElSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKwl@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_writeEPKwl@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetnEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sputnEPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsgetnEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsputnEPKcl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9pubsetbufEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sgetnEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sputnEPKwl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6setbufEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsgetnEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsputnEPKwl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9pubsetbufEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPcl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwl@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EP15__locale_structPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EP15__locale_structPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC1EmRKSt8valarrayImES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC2EmRKSt8valarrayImES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl16_M_install_cacheEPKNS_5facetEm@GLIBCXX_3.4.7 4.1.1
+ _ZNSt6locale5_ImplC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1ERKS0_m@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2ERKS0_m@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EPSt16__numpunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EPSt16__numpunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EPSt16__numpunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EPSt16__numpunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC1ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC2ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEixEm@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l@GLIBCXX_3.4.9 4.2.1
+ _ZSt16__ostream_insertIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKS3_l@GLIBCXX_3.4.9 4.2.1
+ _ZSt17__copy_streambufsIcSt11char_traitsIcEElPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.8 4.1.1
+ _ZSt17__copy_streambufsIwSt11char_traitsIwEElPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.8 4.1.1
+ _ZSt17__verify_groupingPKcmRKSs@GLIBCXX_3.4.10 4.3
+ _ZSt21__copy_streambufs_eofIcSt11char_traitsIcEElPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZSt21__copy_streambufs_eofIwSt11char_traitsIwEElPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZThn16_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn16_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSiD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSiD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSoD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSoD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt10istrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt10istrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt10ostrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt10ostrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_istreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_istreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_ostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt13basic_ostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ifstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ifstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ofstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt14basic_ofstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n24_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _Znam@GLIBCXX_3.4 4.1.1
+ _ZnamRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _Znwm@GLIBCXX_3.4 4.1.1
+ _ZnwmRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+ _ZNSt12__basic_fileIcEC1EP15pthread_mutex_t@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcEC2EP15pthread_mutex_t@GLIBCXX_3.4 4.1.1
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcj-doc.doc-base
+++ gdc-4.4-1.063-4.4.7/debian/libgcj-doc.doc-base
@@ -0,0 +1,10 @@
+Document: libgcj-doc
+Title: The GNU LibGCJ Classpath library
+Author: Various
+Abstract: Autogenerated documentation describing the libgcj
+ library (GCC 4.4), based on the classpath library.
+Section: Programming/Java
+
+Format: html
+Index: /usr/share/doc/gcj-4.4-base/api/index.html
+Files: /usr/share/doc/gcj-4.4-base/api/*.html
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc1.symbols.s390
+++ gdc-4.4-1.063-4.4.7/debian/libgcc1.symbols.s390
@@ -0,0 +1,101 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.1.0@GCC_4.1.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.1.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.1.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.1.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.1.0 1:4.1.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.1.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.1.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
--- gdc-4.4-1.063-4.4.7.orig/debian/control.m4
+++ gdc-4.4-1.063-4.4.7/debian/control.m4
@@ -0,0 +1,1864 @@
+divert(-1)
+
+define(`checkdef',`ifdef($1, , `errprint(`error: undefined macro $1
+')m4exit(1)')')
+define(`errexit',`errprint(`error: undefined macro `$1'
+')m4exit(1)')
+
+dnl The following macros must be defined, when called:
+dnl ifdef(`SRCNAME',	, errexit(`SRCNAME'))
+dnl ifdef(`PV',		, errexit(`PV'))
+dnl ifdef(`ARCH',		, errexit(`ARCH'))
+
+dnl The architecture will also be defined (-D__i386__, -D__powerpc__, etc.)
+
+define(`PN', `$1')
+ifdef(`PRI', `', `
+    define(`PRI', `$1')
+')
+define(`MAINTAINER', `Debian GCC Maintainers <debian-gcc@lists.debian.org>')
+
+define(`ifenabled', `ifelse(index(enabled_languages, `$1'), -1, `dnl', `$2')')
+
+divert`'dnl
+dnl --------------------------------------------------------------------------
+Source: SRCNAME
+Section: devel
+Priority: PRI(optional)
+ifelse(DIST,`Ubuntu',`dnl
+ifelse(regexp(SRCNAME, `gnat\|gpc-|gdc-'),0,`dnl
+Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
+', `dnl
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+')dnl SRCNAME
+XSBC-Original-Maintainer: MAINTAINER
+', `dnl
+Maintainer: MAINTAINER
+')dnl DIST
+ifelse(regexp(SRCNAME, `gnat'),0,`dnl
+Uploaders: Ludovic Brenta <lbrenta@debian.org>, Matthias Klose <doko@debian.org>
+', regexp(SRCNAME, `gdc'),0,`dnl
+Uploaders: Iain Buclaw <ibuclaw@ubuntu.com>, Arthur Loiret <aloiret@debian.org>, Matthias Klose <doko@debian.org>
+', regexp(SRCNAME, `gpc'),0,`dnl
+Uploaders: Matthias Klose <doko@debian.org>
+', `dnl
+Uploaders: Matthias Klose <doko@debian.org>, Arthur Loiret <aloiret@debian.org>
+')dnl SRCNAME
+Standards-Version: 3.9.3
+ifdef(`TARGET',`dnl cross
+Build-Depends: DPKG_BUILD_DEP debhelper (>= 5.0.62), dpkg-cross (>= 1.25.99), LIBC_BUILD_DEP, LIBC_BIARCH_BUILD_DEP LIBUNWIND_BUILD_DEP LIBATOMIC_OPS_BUILD_DEP AUTOGEN_BUILD_DEP CLOOG_BUILD_DEP AUTO_BUILD_DEP SOURCE_BUILD_DEP CROSS_BUILD_DEP MPFR_BUILD_DEP GMP_BUILD_DEP zlib1g-dev, gawk, lzma, xz-utils, patchutils, BINUTILS_BUILD_DEP, bison (>= 1:2.3), flex, realpath (>= 1.9.12), lsb-release, make (>= 3.81), quilt
+',`dnl native
+Build-Depends: DPKG_BUILD_DEP debhelper (>= 5.0.62), g++-multilib [amd64 i386 mips mipsel powerpc ppc64 s390 s390x sparc kfreebsd-amd64], LIBC_BUILD_DEP, LIBC_BIARCH_BUILD_DEP AUTO_BUILD_DEP AUTOGEN_BUILD_DEP libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], zlib1g-dev, gawk, lzma, xz-utils, patchutils, BINUTILS_BUILD_DEP, binutils-hppa64 (>= BINUTILSV) [hppa], gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext, texinfo (>= 4.3), FORTRAN_BUILD_DEP locales [locale_no_archs], procps, sharutils, PASCAL_BUILD_DEP JAVA_BUILD_DEP GNAT_BUILD_DEP SPU_BUILD_DEP CLOOG_BUILD_DEP MPC_BUILD_DEP MPFR_BUILD_DEP GMP_BUILD_DEP ELF_BUILD_DEP CHECK_BUILD_DEP GDC_BUILD_DEP realpath (>= 1.9.12), chrpath, lsb-release, make (>= 3.81), quilt
+Build-Depends-Indep: LIBSTDCXX_BUILD_INDEP JAVA_BUILD_INDEP
+')dnl
+dnl Build-Conflicts: qt3-dev-tools
+ifelse(regexp(SRCNAME, `gnat'),0,`dnl
+Homepage: http://gcc.gnu.org/
+', regexp(SRCNAME, `gdc'),0,`dnl
+Homepage: http://bitbucket.org/goshawk/gdc
+', regexp(SRCNAME, `gpc'),0,`dnl
+Homepage: http://www.gnu-pascal.de/gpc/h-index.html
+', `dnl
+Homepage: http://gcc.gnu.org/
+')dnl SRCNAME
+Vcs-Browser: http://svn.debian.org/viewsvn/gcccvs/branches/sid/gcc`'PV/
+Vcs-Svn: svn://svn.debian.org/svn/gcccvs/branches/sid/gcc`'PV
+
+ifelse(SRCNAME,gcc-snapshot,`dnl
+Package: gcc-snapshot
+Architecture: any
+Section: devel
+Priority: extra
+Depends: binutils`'TS (>= ${binutils:Version}), ${dep:libcbiarchdev}, ${dep:libcdev}, ${dep:libunwinddev}, ${snap:depends}, ${shlibs:Depends}, ${dep:ecj}, python, ${misc:Depends}
+Recommends: ${snap:recommends}
+Suggests: ${dep:gold}
+Provides: c++-compiler`'TS`'ifdef(`TARGET)',`',`, c++abi2-dev')
+Description: A SNAPSHOT of the GNU Compiler Collection
+ This package contains a recent development SNAPSHOT of all files
+ contained in the GNU Compiler Collection (GCC).
+ .
+ The source code for this package has been exported from SVN trunk.
+ .
+ DO NOT USE THIS SNAPSHOT FOR BUILDING DEBIAN PACKAGES!
+ .
+ This package will NEVER hit the testing distribution. It is used for
+ tracking gcc bugs submitted to the Debian BTS in recent development
+ versions of gcc.
+',`dnl gcc-X.Y
+
+dnl default base package dependencies
+define(`BASETARGET', `')
+define(`BASEDEP', `gcc`'PV-base (= ${gcc:Version})')
+define(`SOFTBASEDEP', `gcc`'PV-base (>= ${gcc:SoftVersion})')
+
+dnl base, when building libgcc out of the gcj source; needed if new symbols
+dnl in libgcc are used in libgcj.
+ifelse(index(SRCNAME, `gcj'), 0, `
+define(`BASEDEP', `gcj`'PV-base (= ${gcj:Version})')
+define(`SOFTBASEDEP', `gcj`'PV-base (>= ${gcj:SoftVersion})')
+')
+
+ifdef(`TARGET', `', `
+ifenabled(`gccbase',`
+
+Package: gcc`'PV-base
+Architecture: any
+ifdef(`MULTIARCH', `Multi-Arch: same
+')`'dnl
+Section: libs
+Priority: PRI(required)
+Depends: ${misc:Depends}
+Replaces: ${base:Replaces}
+Breaks: gcj-4.4-base (<< 4.4.6-9~), gnat-4.4-base (<< 4.4.6-3~)
+Description: GCC, the GNU Compiler Collection (base package)
+ This package contains files common to all languages and libraries
+ contained in the GNU Compiler Collection (GCC).
+ifdef(`BASE_ONLY', `dnl
+ .
+ This version of GCC is not yet available for this architecture.
+ Please use the compilers from the gcc-snapshot package for testing.
+')`'dnl
+')`'dnl
+')`'dnl native
+
+ifenabled(`gccxbase',`
+dnl override default base package dependencies to cross version
+dnl This creates a toolchain that doesnt depend on the system -base packages
+define(`BASETARGET', `PV`'TS')
+define(`BASEDEP', `gcc`'BASETARGET-base (= ${gcc:Version})')
+define(`SOFTBASEDEP', `gcc`'BASETARGET-base (>= ${gcc:SoftVersion})')
+
+Package: gcc`'BASETARGET-base
+Architecture: any
+Section: devel
+Priority: PRI(extra)
+Depends: ${misc:Depends}
+Description: GCC, the GNU Compiler Collection (base package)
+ This package contains files common to all languages and libraries
+ contained in the GNU Compiler Collection (GCC).
+')`'dnl
+
+ifenabled(`java',`
+Package: gcj`'PV-base
+Architecture: any
+Section: libs
+Priority: PRI(optional)
+Depends: ${misc:Depends}
+Description: GCC, the GNU Compiler Collection (gcj base package)
+ This package contains files common to all java related packages
+ built from the GNU Compiler Collection (GCC).
+')`'dnl java
+
+ifenabled(`ada',`
+Package: gnat`'PV-base
+Architecture: any
+Section: libs
+Priority: PRI(optional)
+Depends: ${misc:Depends}
+Breaks: gcc-4.4 (<< 4.4.6-9~)
+Description: GCC, the GNU Compiler Collection (gnat base package)
+ This package contains files common to all Ada related packages
+ built from the GNU Compiler Collection (GCC).
+')`'dnl ada
+
+ifenabled(`libgcc',`
+Package: libgcc1`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',required)
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libgcc1-TARGET-dcv1
+',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `')
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libgcc1-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libgcc1`'LS (= ${gcc:EpochVersion}), ${misc:Depends}
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `')
+ Debug symbols for the GCC support library.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libgcc2`'LS
+Architecture: ifdef(`TARGET',`all',`m68k')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',required)
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libgcc2-TARGET-dcv1
+',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `')
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libgcc2-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`m68k')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libgcc2`'LS (= ${gcc:Version}), ${misc:Depends}
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `')
+ Debug symbols for the GCC support library.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libgcc
+
+ifenabled(`lib4gcc',`
+Package: libgcc4`'LS
+Architecture: ifdef(`TARGET',`all',`hppa')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',required)
+Depends: ifdef(`STANDALONEJAVA',`gcj`'PV-base (>= ${gcj:Version})',`BASEDEP'), ${shlibs:Depends}, ${misc:Depends}
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `')
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libgcc4-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`hppa')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Section: debug
+Priority: extra
+Depends: BASEDEP, libgcc4`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `')
+ Debug symbols for the GCC support library.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl lib4gcc
+
+ifenabled(`lib64gcc',`
+Package: lib64gcc1`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${misc:Depends}
+ifdef(`TARGET',`Provides: lib64gcc1-TARGET-dcv1
+',`')`'dnl
+Conflicts: libgcc`'GCC_SO`'LS (<= 1:3.3-0pre9)
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') (64bit)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: lib64gcc1-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib64gcc1`'LS (= ${gcc:EpochVersion}), ${misc:Depends}
+Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `')
+ Debug symbols for the GCC support library.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl lib64gcc
+
+ifenabled(`lib32gcc',`
+Package: lib32gcc1`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+ifdef(`TARGET',`Provides: lib32gcc1-TARGET-dcv1
+',`')`'dnl
+Description: GCC support library (32 bit Version)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: lib32gcc1-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib32gcc1`'LS (= ${gcc:EpochVersion}), ${misc:Depends}
+Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `')
+ Debug symbols for the GCC support library.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl lib32gcc1
+
+ifenabled(`libneongcc',`
+Package: libgcc1-neon`'LS
+Architecture: NEON_ARCHS
+Section: libs
+Priority: extra
+Depends: BASEDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC support library [neon optimized]
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ .
+ This set of libraries is optimized to use a NEON coprocessor, and will
+ be selected instead when running under systems which have one.
+')`'dnl libneongcc1
+
+ifenabled(`libn32gcc',`
+Package: libn32gcc1`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libn32gcc1-TARGET-dcv1
+',`')`'dnl
+Conflicts: libgcc`'GCC_SO`'LS (<= 1:3.3-0pre9)
+Description: GCC support library`'ifdef(`TARGET)',` (TARGET)', `') (n32)
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libn32gcc1-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libn32gcc1`'LS (= ${gcc:EpochVersion}), ${misc:Depends}
+Description: GCC support library (debug symbols)`'ifdef(`TARGET)',` (TARGET)', `')
+ Debug symbols for the GCC support library.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libn32gcc
+
+ifdef(`TARGET', `', `
+ifenabled(`libgmath',`
+Package: libgccmath`'GCCMATH_SO`'LS
+Architecture: i386
+ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+')`'dnl
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC math support library
+ Support library for GCC.
+
+Package: lib32gccmath`'GCCMATH_SO`'LS
+Architecture: amd64
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC math support library (32bit)
+ Support library for GCC.
+
+Package: lib64gccmath`'GCCMATH_SO`'LS
+Architecture: i386
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC math support library (64bit)
+ Support library for GCC.
+')`'dnl
+')`'dnl native
+
+ifenabled(`cdev',`
+Package: gcc`'PV`'TS
+Architecture: any
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, cpp`'PV`'TS (= ${gcc:Version}), binutils`'TS (>= ${binutils:Version}), ${dep:libgcc}, ${dep:libssp}, ${dep:libgomp}, ${dep:libunwinddev}, ${shlibs:Depends}, ${misc:Depends}
+Recommends: ${dep:libcdev}
+Suggests: ${gcc:multilib}, libmudflap`'MF_SO`'PV-dev`'LS (>= ${gcc:Version}), gcc`'PV-doc (>= ${gcc:SoftVersion}), gcc`'PV-locales (>= ${gcc:SoftVersion}), libgcc`'GCC_SO-dbg`'LS, libgomp`'GOMP_SO-dbg`'LS, libmudflap`'MF_SO-dbg`'LS, ${dep:libcloog}, ${dep:gold}
+Provides: c-compiler`'TS
+Description: GNU C compiler`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+ifdef(`TARGET', `dnl
+ .
+ This package contains C cross-compiler for TARGET architecture.
+')`'dnl
+
+ifenabled(`multilib',`
+Package: gcc`'PV-multilib`'TS
+Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS)
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), ${dep:libcbiarchdev}, ${dep:libgccbiarch}, ${dep:libsspbiarch}, ${dep:libgompbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: ${dep:libmudflapbiarch}
+Description: GNU C compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+
+ifenabled(`plugindev',`
+Package: gcc`'PV-plugin-dev`'TS
+Architecture: any
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), GMP_BUILD_DEP ${shlibs:Depends}, ${misc:Depends}
+Description: Files for GNU GCC plugin development.
+ This package contains (header) files for GNU GCC plugin development. It
+ is only used for the development of GCC plugins, but not needed to run
+ plugins.
+')`'dnl plugindev
+')`'dnl cdev
+
+ifenabled(`cdev',`
+Package: gcc`'PV-hppa64
+Architecture: ifdef(`TARGET',`any',hppa)
+Section: devel
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: gcc-3.3-hppa64 (<= 1:3.3.4-5), gcc-3.4-hppa64 (<= 3.4.1-3)
+Description: GNU C compiler (cross compiler for hppa64)
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+
+ifdef(`TARGET', `', `
+Package: gcc`'PV-spu
+Architecture: powerpc ppc64
+Section: devel
+Priority: PRI(optional)
+Depends: BASEDEP, binutils-spu (>= 2.18.1~cvs20080103-3), newlib-spu, ${shlibs:Depends}, ${misc:Depends}
+Provides: spu-gcc
+Description: SPU cross-compiler (preprocessor and C compiler)
+ GNU Compiler Collection for the Cell Broadband Engine SPU (preprocessor
+ and C compiler).
+
+Package: g++`'PV-spu
+Architecture: powerpc ppc64
+Section: devel
+Priority: PRI(optional)
+Depends: BASEDEP, gcc`'PV-spu (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Provides: spu-g++
+Description: SPU cross-compiler (C++ compiler)
+ GNU Compiler Collection for the Cell Broadband Engine SPU (C++ compiler).
+
+Package: gfortran`'PV-spu
+Architecture: powerpc ppc64
+Section: devel
+Priority: PRI(optional)
+Depends: BASEDEP, gcc`'PV-spu (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Provides: spu-gfortran
+Description: SPU cross-compiler (Fortran compiler)
+ GNU Compiler Collection for the Cell Broadband Engine SPU (Fortran compiler).
+
+')`'dnl native
+')`'dnl cdev
+
+ifenabled(`cdev',`
+Package: cpp`'PV`'TS
+Architecture: any
+Section: ifdef(`TARGET',`devel',`interpreters')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Suggests: gcc`'PV-locales (>= ${gcc:SoftVersion})
+Description: GNU C preprocessor
+ A macro processor that is used automatically by the GNU C compiler
+ to transform programs before actual compilation.
+ .
+ This package has been separated from gcc for the benefit of those who
+ require the preprocessor but not the compiler.
+ifdef(`TARGET', `dnl
+ .
+ This package contains preprocessor configured for TARGET architecture.
+')`'dnl
+
+ifdef(`TARGET', `', `
+ifenabled(`gfdldoc',`
+Package: cpp`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends}
+Description: Documentation for the GNU C preprocessor (cpp)
+ Documentation for the GNU C preprocessor in info `format'.
+')`'dnl gfdldoc
+')`'dnl native
+
+ifdef(`TARGET', `', `
+Package: gcc`'PV-locales
+Architecture: all
+Section: devel
+Priority: PRI(optional)
+Depends: SOFTBASEDEP, cpp`'PV (>= ${gcc:SoftVersion}), ${misc:Depends}
+Recommends: gcc`'PV (>= ${gcc:SoftVersion})
+Description: GCC, the GNU compiler collection (native language support files)
+ Native language support for GCC. Lets GCC speak your language,
+ if translations are available.
+ .
+ Please do NOT submit bug reports in other languages than "C".
+ Always reset your language settings to use the "C" locales.
+')`'dnl native
+')`'dnl cdev
+
+ifenabled(`c++',`
+ifenabled(`c++dev',`
+Package: g++`'PV`'TS
+Architecture: any
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Provides: c++-compiler`'TS`'ifdef(`TARGET)',`',`, c++abi2-dev')
+Suggests: ${gxx:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}), libstdc++CXX_SO`'PV-dbg`'LS
+Description: GNU C++ compiler`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.
+ifdef(`TARGET', `dnl
+ .
+ This package contains C++ cross-compiler for TARGET architecture.
+')`'dnl
+
+ifenabled(`multilib',`
+Package: g++`'PV-multilib`'TS
+Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS)
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, g++`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libcxxbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: ${dep:libcxxbiarchdbg}
+Description: GNU C++ compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+')`'dnl c++dev
+')`'dnl c++
+
+ifenabled(`mudflap',`
+ifenabled(`libmudf',`
+Package: libmudflap`'MF_SO`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC mudflap shared support libraries
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: libmudflap`'MF_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Section: debug
+Priority: extra
+Depends: BASEDEP, libmudflap`'MF_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC mudflap shared support libraries (debug symbols)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib32mudflap`'MF_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libmudflap0 (<< 4.1)
+Conflicts: ${confl:lib32}
+Description: GCC mudflap shared support libraries (32bit)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib32mudflap`'MF_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib32mudflap`'MF_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC mudflap shared support libraries (32 bit debug symbols)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib64mudflap`'MF_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libmudflap0 (<< 4.1)
+Description: GCC mudflap shared support libraries (64bit)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: lib64mudflap`'MF_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib64mudflap`'MF_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC mudflap shared support libraries (64 bit debug symbols)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: libn32mudflap`'MF_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libmudflap0 (<< 4.1)
+Description: GCC mudflap shared support libraries (n32)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+
+Package: libn32mudflap`'MF_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libn32mudflap`'MF_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC mudflap shared support libraries (n32 debug symbols)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+')`'dnl libmudf
+
+Package: libmudflap`'MF_SO`'PV-dev`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libdevel')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, libmudflap`'MF_SO`'LS (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: ${sug:libmudflapdev}
+Conflicts: libmudflap0-dev
+Description: GCC mudflap support libraries (development files)
+ The libmudflap libraries are used by GCC for instrumenting pointer and array
+ dereferencing operations.
+ .
+ This package contains the headers and the static libraries.
+')`'dnl mudflap
+
+ifdef(`TARGET', `', `
+ifenabled(`ssp',`
+Package: libssp`'SSP_SO`'LS
+Architecture: any
+ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+')`'dnl
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC stack smashing protection library
+ GCC can now emit code for protecting applications from stack-smashing attacks.
+ The protection is realized by buffer overflow detection and reordering of
+ stack variables to avoid pointer corruption.
+
+Package: lib32ssp`'SSP_SO`'LS
+Architecture: biarch32_archs
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libssp0 (<< 4.1)
+Conflicts: ${confl:lib32}
+Description: GCC stack smashing protection library (32bit)
+ GCC can now emit code for protecting applications from stack-smashing attacks.
+ The protection is realized by buffer overflow detection and reordering of
+ stack variables to avoid pointer corruption.
+
+Package: lib64ssp`'SSP_SO`'LS
+Architecture: biarch64_archs
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libssp0 (<< 4.1)
+Description: GCC stack smashing protection library (64bit)
+ GCC can now emit code for protecting applications from stack-smashing attacks.
+ The protection is realized by buffer overflow detection and reordering of
+ stack variables to avoid pointer corruption.
+
+Package: libn32ssp`'SSP_SO`'LS
+Architecture: biarchn32_archs
+Section: libs
+Priority: PRI(optional)
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Replaces: libssp0 (<< 4.1)
+Description: GCC stack smashing protection library (n32)
+ GCC can now emit code for protecting applications from stack-smashing attacks.
+ The protection is realized by buffer overflow detection and reordering of
+ stack variables to avoid pointer corruption.
+')`'dnl
+')`'dnl native
+
+ifenabled(`libgomp',`
+Package: libgomp`'GOMP_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: libgomp`'GOMP_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libgomp`'GOMP_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Description: GCC OpenMP (GOMP) support library (debug symbols)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: lib32gomp`'GOMP_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: GCC OpenMP (GOMP) support library (32bit)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: lib32gomp`'GOMP_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib32gomp`'GOMP_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (32 bit debug symbols)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: lib64gomp`'GOMP_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (64bit)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: lib64gomp`'GOMP_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib64gomp`'GOMP_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (64bit debug symbols)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: libn32gomp`'GOMP_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (n32)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+
+Package: libn32gomp`'GOMP_SO-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libn32gomp`'GOMP_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library (n32 debug symbols)
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+
+ifenabled(`libneongomp',`
+Package: libgomp`'GOMP_SO-neon`'LS
+Architecture: NEON_ARCHS
+Section: libs
+Priority: extra
+Depends: BASEDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends}
+Description: GCC OpenMP (GOMP) support library [neon optimized]
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+ .
+ This set of libraries is optimized to use a NEON coprocessor, and will
+ be selected instead when running under systems which have one.
+')`'dnl libneongomp
+')`'dnl libgomp
+
+ifenabled(`proto',`
+Package: protoize
+Architecture: any
+Priority: PRI(optional)
+Depends: BASEDEP, gcc`'PV (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: Create/remove ANSI prototypes from C code
+ "protoize" can be used to add prototypes to a program, thus converting
+ the program to ANSI C in one respect.  The companion program "unprotoize"
+ does the reverse: it removes argument types from any prototypes
+ that are found.
+')`'dnl proto
+
+ifenabled(`objpp',`
+ifenabled(`objppdev',`
+Package: gobjc++`'PV`'TS
+Architecture: any
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gobjc`'PV`'TS (= ${gcc:Version}), g++`'PV`'TS (= ${gcc:Version}), ${shlibs:Depends}, libobjc`'OBJC_SO`'LS (>= ${gcc:Version}), ${misc:Depends}
+Suggests: ${gobjcxx:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion})
+Provides: objc++-compiler`'TS
+Description: GNU Objective-C++ compiler
+ This is the GNU Objective-C++ compiler, which compiles
+ Objective-C++ on platforms supported by the gcc compiler. It uses the
+ gcc backend to generate optimized code.
+')`'dnl obcppdev
+
+ifenabled(`multilib',`
+Package: gobjc++`'PV-multilib`'TS
+Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS)
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gobjc++`'PV`'TS (= ${gcc:Version}), g++`'PV-multilib`'TS (= ${gcc:Version}), gobjc`'PV-multilib`'TS (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: GNU Objective-C++ compiler (multilib files)
+ This is the GNU Objective-C++ compiler, which compiles Objective-C++ on
+ platforms supported by the gcc compiler.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+')`'dnl obcpp
+
+ifenabled(`objc',`
+ifenabled(`objcdev',`
+Package: gobjc`'PV`'TS
+Architecture: any
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, libobjc`'OBJC_SO`'LS (>= ${gcc:Version}), ${misc:Depends}
+Suggests: ${gobjc:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}), libobjc`'OBJC_SO-dbg`'LS
+Provides: objc-compiler`'TS
+ifdef(`__sparc__',`Conflicts: gcc`'PV-sparc64', `dnl')
+Description: GNU Objective-C compiler
+ This is the GNU Objective-C compiler, which compiles
+ Objective-C on platforms supported by the gcc compiler. It uses the
+ gcc backend to generate optimized code.
+
+ifenabled(`multilib',`
+Package: gobjc`'PV-multilib`'TS
+Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS)
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gobjc`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libobjcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GNU Objective-C compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU Objective-C compiler, which compiles Objective-C on platforms
+ supported by the gcc compiler.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+')`'dnl objcdev
+
+ifenabled(`libobjc',`
+Package: libobjc`'OBJC_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: libobjc`'OBJC_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Priority: extra
+Depends: BASEDEP, libobjc`'OBJC_SO`'LS (= ${gcc:Version}), libgcc`'GCC_SO-dbg`'LS, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (debug symbols)
+ Library needed for GNU ObjC applications linked against the shared library.
+')`'dnl libobjc
+
+ifenabled(`lib64objc',`
+Package: lib64objc`'OBJC_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (64bit)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: lib64objc`'OBJC_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Priority: extra
+Depends: BASEDEP, lib64objc`'OBJC_SO`'LS (= ${gcc:Version}), lib64gcc`'GCC_SO-dbg`'LS, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (64 bit debug symbols)
+ Library needed for GNU ObjC applications linked against the shared library.
+')`'dnl lib64objc
+
+ifenabled(`lib32objc',`
+Package: lib32objc`'OBJC_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: gcc`'PV-base (>= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: Runtime library for GNU Objective-C applications (32bit)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: lib32objc`'OBJC_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Priority: extra
+Depends: BASEDEP, lib32objc`'OBJC_SO`'LS (= ${gcc:Version}), lib32gcc`'GCC_SO-dbg`'LS, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (32 bit debug symbols)
+ Library needed for GNU ObjC applications linked against the shared library.
+')`'dnl lib32objc
+
+ifenabled(`libn32objc',`
+Package: libn32objc`'OBJC_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: gcc`'PV-base (>= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (n32)
+ Library needed for GNU ObjC applications linked against the shared library.
+
+Package: libn32objc`'OBJC_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Priority: extra
+Depends: BASEDEP, libn32objc`'OBJC_SO`'LS (= ${gcc:Version}), libn32gcc`'GCC_SO-dbg`'LS, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications (n32 debug symbols)
+ Library needed for GNU ObjC applications linked against the shared library.
+')`'dnl libn32objc
+
+ifenabled(`libneonobjc',`
+Package: libobjc`'OBJC_SO-neon`'LS
+Section: libs
+Architecture: NEON_ARCHS
+Priority: PRI(optional)
+Depends: BASEDEP, libc6-neon`'LS, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Objective-C applications  [NEON version]
+ Library needed for GNU ObjC applications linked against the shared library.
+ .
+ This set of libraries is optimized to use a NEON coprocessor, and will
+ be selected instead when running under systems which have one.
+')`'dnl libneonobjc
+')`'dnl objc
+
+ifenabled(`fortran',`
+ifenabled(`fdev',`
+Package: gfortran`'PV`'TS
+Architecture: any
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gcc`'PV`'TS (= ${gcc:Version}), libgfortran`'FORTRAN_SO`'LS (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends}
+Provides: fortran95-compiler
+Suggests: ${gfortran:multilib}, gfortran`'PV-doc, libgfortran`'FORTRAN_SO-dbg`'LS
+Replaces: libgfortran`'FORTRAN_SO-dev
+Description: GNU Fortran 95 compiler
+ This is the GNU Fortran compiler, which compiles
+ Fortran 95 on platforms supported by the gcc compiler. It uses the
+ gcc backend to generate optimized code.
+
+ifenabled(`multilib',`
+Package: gfortran`'PV-multilib`'TS
+Architecture: ifdef(`TARGET',`any',MULTILIB_ARCHS)
+Section: devel
+Priority: ifdef(`TARGET',`extra',`PRI(optional)')
+Depends: BASEDEP, gfortran`'PV`'TS (= ${gcc:Version}), gcc`'PV-multilib`'TS (= ${gcc:Version}), ${dep:libgfortranbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: GNU Fortran 95 compiler (multilib files)`'ifdef(`TARGET)',` (cross compiler for TARGET architecture)', `')
+ This is the GNU Fortran compiler, which compiles Fortran 95 on platforms
+ supported by the gcc compiler.
+ .
+ On architectures with multilib support, the package contains files
+ and dependencies for the non-default multilib architecture(s).
+')`'dnl multilib
+
+ifenabled(`gfdldoc',`
+Package: gfortran`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends}
+Description: Documentation for the GNU Fortran compiler (gfortran)
+ Documentation for the GNU Fortran 95 compiler in info `format'.
+')`'dnl gfdldoc
+')`'dnl fdev
+
+ifenabled(`libgfortran',`
+Package: libgfortran`'FORTRAN_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Fortran applications
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: libgfortran`'FORTRAN_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`any')
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+'))`'dnl
+Priority: extra
+Depends: BASEDEP, libgfortran`'FORTRAN_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (debug symbols)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+')`'dnl libgfortran
+
+ifenabled(`lib64gfortran',`
+Package: lib64gfortran`'FORTRAN_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (64bit)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: lib64gfortran`'FORTRAN_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Priority: extra
+Depends: BASEDEP, lib64gfortran`'FORTRAN_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (64bit debug symbols)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+')`'dnl lib64gfortran
+
+ifenabled(`lib32gfortran',`
+Package: lib32gfortran`'FORTRAN_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+Description: Runtime library for GNU Fortran applications (32bit)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: lib32gfortran`'FORTRAN_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Priority: extra
+Depends: BASEDEP, lib32gfortran`'FORTRAN_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (32 bit debug symbols)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+')`'dnl lib32gfortran
+
+ifenabled(`libn32gfortran',`
+Package: libn32gfortran`'FORTRAN_SO`'LS
+Section: ifdef(`TARGET',`devel',`libs')
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (n32)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+
+Package: libn32gfortran`'FORTRAN_SO-dbg`'LS
+Section: debug
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Priority: extra
+Depends: BASEDEP, libn32gfortran`'FORTRAN_SO`'LS (= ${gcc:Version}), ${misc:Depends}
+Description: Runtime library for GNU Fortran applications (n32 debug symbols)
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+')`'dnl libn32gfortran
+
+ifenabled(`libneongfortran',`
+Package: libgfortran`'FORTRAN_SO-neon`'LS
+Section: libs
+Architecture: NEON_ARCHS
+ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+')`'dnl
+Priority: extra
+Depends: BASEDEP, libgcc1-neon`'LS, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Fortran applications [NEON version]
+ Library needed for GNU Fortran applications linked against the
+ shared library.
+ .
+ This set of libraries is optimized to use a NEON coprocessor, and will
+ be selected instead when running under systems which have one.
+')`'dnl libneongfortran
+')`'dnl fortran
+
+ifenabled(`java',`
+ifenabled(`gcj',`
+Package: gcj`'PV-jdk
+Section: java
+Architecture: any
+Priority: PRI(optional)
+Depends: gcj`'PV-base (= ${gcj:Version}), ${dep:gcj}, ${dep:libcdev}, gcj`'PV-jre (= ${gcj:Version}), libgcj`'GCJ_SO-dev (= ${gcj:Version}), gcj`'PV-jre-lib (>= ${gcj:SoftVersion}), ${dep:ecj}, fastjar, libgcj-bc, java-common, libantlr-java, ${shlibs:Depends}, dpkg (>= 1.15.4) | install-info, ${misc:Depends}
+Recommends: libecj-java-gcj
+Suggests: gcj`'PV-source (>= ${gcj:SoftVersion}), libgcj`'GCJ_SO-dbg
+Provides: java-compiler, java-sdk, java2-sdk, java5-sdk
+Conflicts: gcj-4.4, cpp-4.1 (<< 4.1.1), gcc-4.1 (<< 4.1.1)
+Replaces: libgcj10 (<< 4.4.2-8)
+Description: gcj and classpath development tools for Java(TM)
+ GCJ is a front end to the GCC compiler which can natively compile both
+ Java(tm) source and bytecode files. The compiler can also generate class
+ files. Other java development tools from classpath are included in this
+ package.
+ .
+ The package contains as well a collection of wrapper scripts and symlinks.
+ It is meant to provide a Java-SDK-like interface to the GCJ tool set.
+')`'dnl gcj
+
+ifenabled(`libgcj',`
+ifenabled(`libgcjcommon',`
+Package: libgcj-common
+Section: java
+Architecture: all
+Priority: PRI(optional)
+Depends: gcj`'PV-base (>= ${gcj:SoftVersion}), ${misc:Depends}
+Conflicts: classpath (<= 0.04-4)
+Replaces: java-gcj-compat (<< 1.0.65-3), java-gcj-compat-dev (<< 1.0.65-3)
+Description: Java runtime library (common files)
+ This package contains files shared by classpath and libgcj libraries.
+')`'dnl libgcjcommon
+
+Package: gcj`'PV-jre-headless
+Priority: optional
+Section: java
+Architecture: any
+Depends: gcj`'PV-base (= ${gcj:Version}), libgcj`'LIBGCJ_EXT (= ${gcj:Version}), ${dep:prctl}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: fastjar, gcj`'PV-jdk (= ${gcj:Version}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version})
+Conflicts: gij-4.4, java-gcj-compat (<< 1.0.76-4)
+Provides: java5-runtime-headless, java2-runtime-headless, java1-runtime-headless, java-runtime-headless
+Description: Java runtime environment using GIJ/classpath (headless version)
+ GIJ is a Java bytecode interpreter, not limited to interpreting bytecode.
+ It includes a class loader which can dynamically load shared objects, so
+ it is possible to give it the name of a class which has been compiled and
+ put into a shared library on the class path.
+ .
+ The package contains as well a collection of wrapper scripts and symlinks.
+ It is meant to provide a Java-RTE-like interface to the GIJ/GCJ tool set,
+ limited to the headless tools and libraries.
+
+Package: gcj`'PV-jre
+Section: java
+Architecture: any
+Priority: PRI(optional)
+Depends: gcj`'PV-base (= ${gcj:Version}), gcj`'PV-jre-headless (= ${gcj:Version}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version}), ${shlibs:Depends}, ${misc:Depends}
+Provides: java5-runtime, java2-runtime, java1-runtime, java-runtime
+Description: Java runtime environment using GIJ/classpath
+ GIJ is a Java bytecode interpreter, not limited to interpreting bytecode.
+ It includes a class loader which can dynamically load shared objects, so
+ it is possible to give it the name of a class which has been compiled and
+ put into a shared library on the class path.
+ .
+ The package contains as well a collection of wrapper scripts and symlinks.
+ It is meant to provide a Java-RTE-like interface to the GIJ/GCJ tool set.
+
+Package: libgcj`'LIBGCJ_EXT
+Section: libs
+Architecture: any
+Priority: PRI(optional)
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gcj`'PV-base (>= ${gcj:Version}), libgcj-common (>= 1:4.1.1-21), ${shlibs:Depends}, ${misc:Depends}
+Recommends: gcj`'PV-jre-lib (>= ${gcj:SoftVersion})
+Suggests: libgcj`'GCJ_SO-dbg, libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version})
+Replaces: gij-4.4 (<< 4.4.0-1)
+Description: Java runtime library for use with gcj
+ This is the runtime that goes along with the gcj front end to
+ gcc. libgcj includes parts of the Java Class Libraries, plus glue to
+ connect the libraries to the compiler and the underlying OS.
+ .
+ To show file names and line numbers in stack traces, the packages
+ libgcj`'GCJ_SO-dbg and binutils are required.
+
+Package: gcj`'PV-jre-lib
+Section: java
+Architecture: all
+Priority: PRI(optional)
+Depends: gcj`'PV-base (>= ${gcj:SoftVersion}), libgcj`'LIBGCJ_EXT (>= ${gcj:SoftVersion}), ${misc:Depends}
+Description: Java runtime library for use with gcj (jar files)
+ This is the jar file that goes along with the gcj front end to gcc.
+
+ifenabled(`gcjbc',`
+Package: libgcj-bc
+Section: java
+Architecture: any
+Priority: PRI(optional)
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gcj`'PV-base (>= ${gcj:Version}), libgcj`'LIBGCJ_EXT (>= ${gcj:Version}), ${misc:Depends}
+Description: Link time only library for use with gcj
+ A fake library that is used at link time only.  It ensures that
+ binaries built with the BC-ABI link against a constant SONAME.
+ This way, BC-ABI binaries continue to work if the SONAME underlying
+ libgcj.so changes.
+')`'dnl gcjbc
+
+Package: libgcj`'LIBGCJ_EXT-awt
+Section: libs
+Architecture: any
+Priority: PRI(optional)
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gcj`'PV-base (>= ${gcj:Version}), libgcj`'LIBGCJ_EXT (= ${gcj:Version}), ${shlibs:Depends}, ${misc:Depends}
+Suggests: ${pkg:gcjqt}
+Description: AWT peer runtime libraries for use with gcj
+ These are runtime libraries holding the AWT peer implementations
+ for libgcj (currently the GTK+ based peer library is required, the
+ QT bases library is not built).
+
+ifenabled(`gtkpeer',`
+Package: libgcj`'GCJ_SO-awt-gtk
+Section: libs
+Architecture: any
+Priority: PRI(optional)
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gcj`'PV-base (= ${gcj:Version}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: AWT GTK+ peer runtime library for use with libgcj
+ This is the runtime library holding the GTK+ based AWT peer
+ implementation for libgcj.
+')`'dnl gtkpeer
+
+ifenabled(`qtpeer',`
+Package: libgcj`'GCJ_SO-awt-qt
+Section: libs
+Architecture: any
+Priority: PRI(optional)
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gcj`'PV-base (= ${gcj:Version}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: AWT QT peer runtime library for use with libgcj
+ This is the runtime library holding the QT based AWT peer
+ implementation for libgcj.
+')`'dnl qtpeer
+')`'dnl libgcj
+
+ifenabled(`libgcjdev',`
+Package: libgcj`'GCJ_SO-dev
+Section: libdevel
+Architecture: any
+Priority: PRI(optional)
+Depends: gcj`'PV-base (= ${gcj:Version}), gcj`'PV-jdk (= ${gcj:Version}), gcj`'PV-jre-lib (>= ${gcj:SoftVersion}), libgcj`'LIBGCJ_EXT-awt (= ${gcj:Version}), libgcj-bc, ${pkg:gcjgtk}, ${pkg:gcjqt}, zlib1g-dev, ${shlibs:Depends}, ${misc:Depends}
+Suggests: libgcj-doc
+Description: Java development headers for use with gcj
+ These are the development headers that go along with the gcj front end
+ to gcc. libgcj includes parts of the Java Class Libraries, plus glue
+ to connect the libraries to the compiler and the underlying OS.
+
+Package: libgcj`'GCJ_SO-dbg
+Section: debug
+Architecture: any
+Priority: extra
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gcj`'PV-base (= ${gcj:Version}), libgcj`'LIBGCJ_EXT (= ${gcj:Version}), ${misc:Depends}
+Recommends: binutils, libc6-dbg | libc-dbg
+Description: Debugging symbols for libraries provided in libgcj`'GCJ_SO-dev
+ The package provides debugging symbols for the libraries provided
+ in libgcj`'GCJ_SO-dev.
+ .
+ binutils is required to show file names and line numbers in stack traces.
+
+Package: gcj`'PV-source
+Section: java
+Architecture: all
+Priority: PRI(optional)
+Depends: gcj`'PV-base (>= ${gcj:SoftVersion}), gcj`'PV-jdk (>= ${gcj:SoftVersion}), ${misc:Depends}
+Description: GCJ java sources for use in IDEs like eclipse and netbeans
+ These are the java source files packaged as a zip file for use in development
+ environments like eclipse and netbeans.
+
+ifenabled(`gcjdoc',`
+Package: libgcj-doc
+Section: doc
+Architecture: all
+Priority: PRI(optional)
+Depends: gcj`'PV-base (>= ${gcj:SoftVersion}), ${misc:Depends}
+Enhances: libgcj`'GCJ_SO-dev
+Provides: classpath-doc
+Description: libgcj API documentation and example programs
+ Autogenerated documentation describing the API of the libgcj library.
+ Sources and precompiled example programs from the classpath library.
+')`'dnl gcjdoc
+')`'dnl libgcjdev
+')`'dnl java
+
+ifenabled(`c++',`
+ifenabled(`libcxx',`
+Package: libstdc++CXX_SO`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(required))
+Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libstdc++CXX_SO-TARGET-dcv1
+',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Conflicts: scim (<< 1.4.2-1)
+Description: GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libcxx
+
+ifenabled(`lib32cxx',`
+Package: lib32stdc++CXX_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, lib32gcc1`'LS, ${shlibs:Depends}, ${misc:Depends}
+Conflicts: ${confl:lib32}
+ifdef(`TARGET',`Provides: lib32stdc++CXX_SO-TARGET-dcv1
+',`')`'dnl
+Description: GNU Standard C++ Library v3 (32 bit Version)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl lib32cxx
+
+ifenabled(`lib64cxx',`
+Package: lib64stdc++CXX_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${shlibs:Depends}, lib64gcc1`'LS, ${misc:Depends}
+ifdef(`TARGET',`Provides: lib64stdc++CXX_SO-TARGET-dcv1
+',`')`'dnl
+Description: GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') (64bit)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl lib64cxx
+
+ifenabled(`libn32cxx',`
+Package: libn32stdc++CXX_SO`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: ifdef(`TARGET',`devel',`libs')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, ${shlibs:Depends}, libn32gcc1`'LS, ${misc:Depends}
+ifdef(`TARGET',`Provides: libn32stdc++CXX_SO-TARGET-dcv1
+',`')`'dnl
+Description: GNU Standard C++ Library v3`'ifdef(`TARGET)',` (TARGET)', `') (n32)
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+')`'dnl libn32cxx
+
+ifenabled(`libneoncxx',`
+Package: libstdc++CXX_SO-neon
+Architecture: NEON_ARCHS
+Section: libs
+Priority: extra
+Depends: BASEDEP, libc6-neon, libgcc1-neon, ${shlibs:Depends}, ${misc:Depends}
+Description: GNU Standard C++ Library v3 [NEON version]
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ This set of libraries is optimized to use a NEON coprocessor, and will
+ be selected instead when running under systems which have one.
+')`'dnl
+
+ifenabled(`c++dev',`
+Package: libstdc++CXX_SO`'PV-dev`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libdevel')
+Priority: ifdef(`TARGET',`extra',PRI(optional))
+Depends: BASEDEP, g++`'PV`'TS (= ${gcc:Version}), libstdc++CXX_SO`'LS (>= ${gcc:Version}), ${dep:libcdev}, ${misc:Depends}
+ifdef(`TARGET',`',`dnl native
+Conflicts: libg++27-dev, libg++272-dev (<< 2.7.2.8-1), libstdc++2.8-dev, libg++2.8-dev, libstdc++2.9-dev, libstdc++2.9-glibc2.1-dev, libstdc++2.10-dev (<< 1:2.95.3-2), libstdc++3.0-dev
+Suggests: libstdc++CXX_SO`'PV-doc
+')`'dnl native
+Provides: libstdc++-dev`'LS`'dnl
+ifdef(`TARGET',`, libstdc++-dev-TARGET-dcv1, libstdc++CXX_SO-dev-TARGET-dcv1
+',`
+')`'dnl
+Description: GNU Standard C++ Library v3 (development files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the headers and static library files necessary for
+ building C++ programs which use libstdc++.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libstdc++CXX_SO`'PV-pic`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: ifdef(`TARGET',`devel',`libdevel')
+Priority: extra
+Depends: BASEDEP, libstdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), ${misc:Depends}
+ifdef(`TARGET',`Provides: libstdc++CXX_SO-pic-TARGET-dcv1
+',`')`'dnl
+Description: GNU Standard C++ Library v3 (shared library subset kit)`'ifdef(`TARGET)',` (TARGET)', `')
+ This is used to develop subsets of the libstdc++ shared libraries for
+ use on custom installation floppies and in embedded systems.
+ .
+ Unless you are making one of those, you will not need this package.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libstdc++CXX_SO`'PV-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`any')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libstdc++CXX_SO`'LS (>= ${gcc:Version}), libgcc`'GCC_SO-dbg`'LS, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libstdc++CXX_SO-dbg-TARGET-dcv1
+',`')`'dnl
+Recommends: libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version})
+Conflicts: libstdc++5-dbg`'LS, libstdc++5-3.3-dbg`'LS, libstdc++6-dbg`'LS, libstdc++6-4.0-dbg`'LS, libstdc++6-4.1-dbg`'LS, libstdc++6-4.2-dbg`'LS, libstdc++6-4.3-dbg`'LS
+Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: lib32stdc++CXX_SO`'PV-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib32stdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), lib32gcc`'GCC_SO-dbg`'LS, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: lib32stdc++CXX_SO-dbg-TARGET-dcv1
+',`')`'dnl
+Conflicts: lib32stdc++6-dbg`'LS, lib32stdc++6-4.0-dbg`'LS, lib32stdc++6-4.1-dbg`'LS, lib32stdc++6-4.2-dbg`'LS, lib32stdc++6-4.3-dbg`'LS
+Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: lib64stdc++CXX_SO`'PV-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarch64_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, lib64stdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), lib64gcc`'GCC_SO-dbg`'LS, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: lib64stdc++CXX_SO-dbg-TARGET-dcv1
+',`')`'dnl
+Conflicts: lib64stdc++6-dbg`'LS, lib64stdc++6-4.0-dbg`'LS, lib64stdc++6-4.1-dbg`'LS, lib64stdc++6-4.2-dbg`'LS, lib64stdc++6-4.3-dbg`'LS
+Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+Package: libn32stdc++CXX_SO`'PV-dbg`'LS
+Architecture: ifdef(`TARGET',`all',`biarchn32_archs')
+Section: debug
+Priority: extra
+Depends: BASEDEP, libn32stdc++CXX_SO`'LS (>= ${gcc:Version}), libstdc++CXX_SO`'PV-dev`'LS (= ${gcc:Version}), libn32gcc`'GCC_SO-dbg`'LS, ${shlibs:Depends}, ${misc:Depends}
+ifdef(`TARGET',`Provides: libn32stdc++CXX_SO-dbg-TARGET-dcv1
+',`')`'dnl
+Conflicts: libn32stdc++6-dbg`'LS, libn32stdc++6-4.0-dbg`'LS, libn32stdc++6-4.1-dbg`'LS, libn32stdc++6-4.2-dbg`'LS, libn32stdc++6-4.3-dbg`'LS
+Description: GNU Standard C++ Library v3 (debugging files)`'ifdef(`TARGET)',` (TARGET)', `')
+ This package contains the shared library of libstdc++ compiled with
+ debugging symbols.
+ifdef(`TARGET', `dnl
+ .
+ This package contains files for TARGET architecture, for use in cross-compile
+ environment.
+')`'dnl
+
+ifdef(`TARGET', `', `
+Package: libstdc++CXX_SO`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), ${misc:Depends}
+Conflicts: libstdc++5-doc, libstdc++5-3.3-doc, libstdc++6-doc, libstdc++6-4.0-doc, libstdc++6-4.1-doc, libstdc++6-4.2-doc, libstdc++6-4.3-doc
+Description: GNU Standard C++ Library v3 (documentation files)
+ This package contains documentation files for the GNU stdc++ library.
+ .
+ One set is the distribution documentation, the other set is the
+ source documentation including a namespace list, class hierarchy,
+ alphabetical list, compound list, file list, namespace members,
+ compound members and file members.
+')`'dnl native
+')`'dnl c++dev
+')`'dnl c++
+
+ifenabled(`ada',`
+Package: gnat`'-GNAT_V
+Architecture: any
+Priority: PRI(optional)
+ifdef(`MULTIARCH', `Pre-Depends: multiarch-support
+')`'dnl
+Depends: gnat`'PV-base (= ${gnat:Version}), gcc`'PV (>= ${gcc:SoftVersion}), ${dep:libgnat}, ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends}
+Suggests: gnat`'PV-doc, ada-reference-manual, gprbuild, gnat-gps
+Provides: ada-compiler
+Conflicts: gnat (<< 4.1), gnat-3.1, gnat-3.2, gnat-3.3, gnat-3.4, gnat-4.0, gnat-4.1, gnat-4.2, gnat-4.3
+Replaces: gnat (<< 4.1), gnat-3.1, gnat-3.2, gnat-3.3, gnat-3.4, gnat-4.0, gnat-4.1, gnat-4.2, gnat-4.3
+Description: GNU Ada compiler
+ This is the GNU Ada compiler, which compiles Ada on platforms supported
+ by the gcc compiler. It uses the gcc backend to generate optimized code.
+
+ifenabled(`libgnat',`
+Package: libgnat`'-GNAT_V
+Section: libs
+Architecture: any
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: PRI(optional)
+Depends: gnat`'PV-base (= ${gnat:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Ada applications
+ Library needed for GNU Ada applications linked against the shared library.
+
+Package: libgnat`'-GNAT_V-dbg
+Section: debug
+Architecture: any
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Priority: extra
+Depends: gnat`'PV-base (= ${gnat:Version}), gnat`'-GNAT_V (= ${gnat:Version}), libgnat`'-GNAT_V (= ${gnat:Version}), ${misc:Depends}
+Description: Runtime library for GNU Ada applications
+ Debugging symbols for the library needed for GNU Ada applications linked
+ against the shared library.
+
+Package: libgnatvsn-dev
+Section: libdevel
+Architecture: all
+Priority: PRI(optional)
+Depends: libgnatvsn`'GNAT_V-dev (= ${gnat:Version}), gnat`'PV-base (= ${gnat:Version}), ${misc:Depends}
+Description: GNU Ada compiler version library - development files
+ This is a dummy transition package to ease upgrades from Debian 5.0
+ Lenny.  You can safely remove it.
+
+Package: libgnatvsn`'GNAT_V-dev
+Section: libdevel
+Architecture: any
+Priority: PRI(optional)
+Depends: gnat`'PV-base (= ${gnat:Version}), gnat`'PV (= ${gnat:Version}), libgnatvsn`'GNAT_V (= ${gnat:Version}), ${misc:Depends}
+Conflicts: libgnatvsn-dev (<< `'GNAT_V), libgnatvsn4.1-dev, libgnatvsn4.3-dev
+Replaces: libgnatvsn-dev (<< `'GNAT_V), libgnatvsn4.1-dev, libgnatvsn4.3-dev
+Suggests: libgnatvsn`'GNAT_V-dbg
+Description: GNU Ada compiler version library - development files
+ This library exports selected components of GNAT, the GNU Ada compiler, for use
+ in other packages, most notably ASIS and ASIS-based packages.  It is licensed
+ under the GNAT-Modified GPL, allowing to link proprietary programs with it.
+ .
+ This package contains the development files and static library.
+
+Package: libgnatvsn`'GNAT_V
+Architecture: any
+Priority: PRI(optional)
+Section: libs
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Depends: gnat`'PV-base (= ${gnat:Version}), libgnat`'-GNAT_V (= ${gnat:Version}), ${misc:Depends}
+Description: GNU Ada compiler version library
+ This library exports selected components of GNAT, the GNU Ada compiler, for use
+ in other packages, most notably ASIS and ASIS-based packages.  It is licensed
+ under the GNAT-Modified GPL, allowing to link proprietary programs with it.
+ .
+ This package contains the run-time shared library.
+
+Package: libgnatvsn`'GNAT_V-dbg
+Architecture: any
+Priority: extra
+Section: debug
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Depends: gnat`'PV-base (= ${gnat:Version}), libgnatvsn`'GNAT_V (= ${gnat:Version}), libgnatvsn`'GNAT_V-dev (= ${gnat:Version}), ${misc:Depends}
+Description: GNU Ada compiler version library
+ This library exports selected components of GNAT, the GNU Ada compiler, for use
+ in other packages, most notably ASIS and ASIS-based packages.  It is licensed
+ under the GNAT-Modified GPL, allowing to link proprietary programs with it.
+ .
+ This package contains the debugging symbols for the run-time shared library.
+
+Package: libgnatprj-dev
+Section: libdevel
+Architecture: all
+Priority: PRI(optional)
+Depends: libgnatprj`'GNAT_V-dev (= ${gnat:Version}), gnat`'PV-base (= ${gnat:Version}), ${misc:Depends}
+Description: GNU Ada compiler version library - development files
+ This is a dummy transition package to ease upgrades from Debian 5.0
+ Lenny.  You can safely remove it.
+
+Package: libgnatprj`'GNAT_V-dev
+Section: libdevel
+Architecture: any
+Priority: PRI(optional)
+Depends: gnat`'PV-base (= ${gnat:Version}), gnat`'PV (= ${gnat:Version}), libgnatprj`'GNAT_V (= ${gnat:Version}), libgnatvsn`'GNAT_V-dev (= ${gnat:Version}), ${misc:Depends}
+Conflicts: libgnatprj-dev (<< `'GNAT_V), libgnatprj4.1-dev, libgnatprj4.3-dev
+Replaces: libgnatprj-dev (<< `'GNAT_V), libgnatprj4.1-dev, libgnatprj4.3-dev
+Suggests: libgnatprj`'GNAT_V-dbg
+Description: GNU Ada Project Manager development files
+ GNAT, the GNU Ada compiler, uses project files to organise source and object
+ files in large-scale development efforts.  Several other tools, such as
+ ASIS tools (package asis-programs) and GNAT Programming Studio (package
+ gnat-gps) also use project files.  This library contains the necessary
+ support; it was built from GNAT itself.  It is licensed under the pure GPL;
+ all programs that use it must also be distributed under the GPL, or not
+ distributed at all.
+ .
+ This package contains development files: install it to develop applications
+ that understand GNAT project files.
+
+Package: libgnatprj`'GNAT_V
+Architecture: any
+Priority: PRI(optional)
+Section: libs
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Depends: gnat`'PV-base (= ${gnat:Version}), libgnat`'-GNAT_V (= ${gnat:Version}), libgnatvsn`'GNAT_V (= ${gnat:Version}), ${misc:Depends}
+Description: GNU Ada Project Manager
+ GNAT, the GNU Ada compiler, uses project files to organise source and object
+ files in large-scale development efforts.  Several other tools, such as
+ ASIS tools (package asis-programs) and GNAT Programming Studio (package
+ gnat-gps) also use project files.  This library contains the necessary
+ support; it was built from GNAT itself.  It is licensed under the pure GPL;
+ all programs that use it must also be distributed under the GPL, or not
+ distributed at all.
+ .
+ This package contains the run-time shared library.
+
+Package: libgnatprj`'GNAT_V-dbg
+Architecture: any
+Priority: extra
+Section: debug
+ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same
+Pre-Depends: multiarch-support
+'))`'dnl
+Depends: gnat`'PV-base (= ${gnat:Version}), libgnatprj`'GNAT_V (= ${gnat:Version}), libgnatprj`'GNAT_V-dev (= ${gnat:Version}), ${misc:Depends}
+Description: GNU Ada Project Manager
+ GNAT, the GNU Ada compiler, uses project files to organise source and object
+ files in large-scale development efforts.  Several other tools, such as
+ ASIS tools (package asis-programs) and GNAT Programming Studio (package
+ gnat-gps) also use project files.  This library contains the necessary
+ support; it was built from GNAT itself.  It is licensed under the pure GPL;
+ all programs that use it must also be distributed under the GPL, or not
+ distributed at all.
+ .
+ This package contains the debugging symbols for the run-time shared library.
+')`'dnl libgnat
+
+ifenabled(`lib64gnat',`
+Package: lib64gnat`'-GNAT_V
+Section: libs
+Architecture: biarch64_archs
+Priority: PRI(optional)
+Depends: gnat`'PV-base (= ${gnat:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
+Description: Runtime library for GNU Ada applications
+ Library needed for GNU Ada applications linked against the shared library.
+')`'dnl libgnat
+
+ifenabled(`gfdldoc',`
+Package: gnat`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: dpkg (>= 1.15.4) | install-info, ${misc:Depends}
+Suggests: gnat`'PV
+Conflicts: gnat-4.1-doc, gnat-4.2-doc, gnat-4.3-doc
+Description: Documentation for the GNU Ada compiler (gnat)
+ Documentation for the GNU Ada compiler in info `format'.
+')`'dnl gfdldoc
+')`'dnl ada
+
+ifenabled(`pascal',`
+Package: gpc`'PV
+Architecture: any
+Priority: PRI(optional)
+Depends: SOFTBASEDEP, gcc`'PV (>= ${gcc:SoftVersion}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends}
+Recommends: libgmp3-dev, libncurses5-dev
+Suggests: gpc`'PV-doc (>= ${gpc:Version})
+Provides: pascal-compiler
+Description: GNU Pascal compiler
+ This is the GNU Pascal compiler, which compiles Pascal on platforms supported
+ by the gcc compiler. It uses the gcc backend to generate optimized code.
+Homepage: http://www.gnu-pascal.de/gpc/h-index.html
+
+Package: gpc`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: SOFTBASEDEP, dpkg (>= 1.15.4) | install-info, ${misc:Depends}
+Replaces: gpc (<= 2.91.58-3)
+Suggests: gpc`'PV
+Description: Documentation for the GNU Pascal compiler (gpc)
+ Documentation for the GNU Pascal compiler in info `format'.
+Homepage: http://www.gnu-pascal.de/gpc/h-index.html
+')`'dnl pascal
+
+ifenabled(`d ',`
+Package: gdc`'PV
+Architecture: any
+Priority: PRI(optional)
+Depends: SOFTBASEDEP, g++`'PV (>= ${gcc:SoftVersion}), libphobos`'PHOBOS_V`'PV-dev (= ${gdc:Version}) [libphobos_no_archs], ${shlibs:Depends}, ${misc:Depends}
+Provides: d-compiler, d-v1-compiler
+Replaces: gdc (<< 4.4.6-5)
+Description: D compiler (version 1), based on the GCC backend
+ This is the D compiler, which compiles D on platforms supported by the gcc
+ compiler. It uses the GCC backend to generate optimised code.
+ .
+ This compiler supports D language version 1.
+Homepage: https://bitbucket.org/goshawk/gdc
+
+ifenabled(`libphobos',`
+Package: libphobos`'PHOBOS_V`'PV`'TS-dev
+Architecture: any
+Section: libdevel
+Priority: PRI(optional)
+Depends: gdc`'PV`'TS (= ${gdc:Version}), zlib1g-dev, ${shlibs:Depends}, ${misc:Depends}
+Provides: libphobos`'PHOBOS_V`'TS-dev
+Description: Phobos D standard library
+ This is the Phobos standard library that comes with the D compiler.
+ .
+ For more information check http://www.digitalmars.com/d/phobos/phobos.html
+')`'dnl libphobos
+')`'dnl d
+
+ifdef(`TARGET',`',`dnl
+ifenabled(`libs',`
+Package: gcc`'PV-soft-float
+Architecture: arm armel
+Priority: PRI(optional)
+Depends: BASEDEP, ifenabled(`cdev',`gcc`'PV (= ${gcc:Version}),') ${shlibs:Depends}, ${misc:Depends}
+Replaces: gcc-soft-float-ss
+Description: GCC soft-floating-point gcc libraries (arm)
+ These are versions of basic static libraries such as libgcc.a compiled
+ with the -msoft-float option, for CPUs without a floating-point unit.
+')`'dnl commonlibs
+')`'dnl
+
+ifenabled(`fixincl',`
+Package: fixincludes
+Architecture: any
+Priority: PRI(optional)
+Depends: BASEDEP, gcc`'PV (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: Fix non-ANSI header files
+ FixIncludes was created to fix non-ANSI system header files. Many
+ system manufacturers supply proprietary headers that are not ANSI compliant.
+ The GNU compilers cannot compile non-ANSI headers. Consequently, the
+ FixIncludes shell script was written to fix the header files.
+ .
+ Not all packages with header files are installed on the system, when the
+ package is built, so we make fixincludes available at build time of other
+ packages, such that checking tools like lintian can make use of it.
+')`'dnl fixincl
+
+ifenabled(`cdev',`
+ifdef(`TARGET', `', `
+ifenabled(`gfdldoc',`
+Package: gcc`'PV-doc
+Architecture: all
+Section: doc
+Priority: PRI(optional)
+Depends: gcc`'PV-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends}
+Conflicts: gcc-docs (<< 2.95.2)
+Replaces: gcc (<=2.7.2.3-4.3), gcc-docs (<< 2.95.2)
+Description: Documentation for the GNU compilers (gcc, gobjc, g++)
+ Documentation for the GNU compilers in info `format'.
+')`'dnl gfdldoc
+')`'dnl native
+')`'dnl cdev
+
+ifdef(`TARGET',`',`dnl
+ifenabled(`libnof',`
+Package: gcc`'PV-nof
+Architecture: powerpc
+Priority: PRI(optional)
+Depends: BASEDEP, ${shlibs:Depends}ifenabled(`cdev',`, gcc`'PV (= ${gcc:Version})'), ${misc:Depends}
+Conflicts: gcc-3.2-nof
+Description: GCC no-floating-point gcc libraries (powerpc)
+ These are versions of basic static libraries such as libgcc.a compiled
+ with the -msoft-float option, for CPUs without a floating-point unit.
+')`'dnl libnof
+')`'dnl
+
+ifenabled(`source',`
+Package: gcc`'PV-source
+Architecture: all
+Priority: PRI(optional)
+Depends: make (>= 3.81), autoconf2.59, automake1.9, quilt, patchutils, ${misc:Depends}
+Description: Source of the GNU Compiler Collection
+ This package contains the sources and patches which are needed to
+ build the GNU Compiler Collection (GCC).
+')`'dnl source
+dnl
+')`'dnl gcc-X.Y
+dnl last line in file
--- gdc-4.4-1.063-4.4.7.orig/debian/gcj-BV-jdk.doc-base
+++ gdc-4.4-1.063-4.4.7/debian/gcj-BV-jdk.doc-base
@@ -0,0 +1,15 @@
+Document: gcj-@BV@
+Title: The GNU Ahead-of-time Compiler for the Java Language
+Author: Various
+Abstract: This manual describes how to use gcj, the GNU compiler for
+ the Java programming language.  gcj can generate both .class files and
+ object files, and it can read both Java source code and .class files.
+Section: Programming/Java
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/java/gcj.html
+Files: /usr/share/doc/gcc-@BV@-base/java/gcj.html
+
+Format: info
+Index: /usr/share/info/gcj-@BV@.info.gz
+Files: /usr/share/info/gcj-@BV@*
--- gdc-4.4-1.063-4.4.7.orig/debian/README.cross
+++ gdc-4.4-1.063-4.4.7/debian/README.cross
@@ -0,0 +1,144 @@
+Building cross-compiler Debian packages
+---------------------------------------
+
+It is possible to build C and C++ cross compilers and support libraries
+from gcc-4.0 source package. This document describes how to do so.
+Cross-compiler build support is not perfect yet, please send fixes
+and improvements to debian-gcc@lists.debian.org and 
+debian-embedded@lists.debian.org
+
+Before you start, you should probably check available pre-built
+cross-toolchain debs. Available at http://www.emdebian.org
+
+Old patches could be reached at
+  http://zigzag.lvk.cs.msu.su/~nikita/debian/
+  
+If they are no longer there, you may check EmDebian web site at
+  http://www.emdebian.org/
+or ask debian-embedded@lists.debian.org for newer location.
+
+Please check http://bugs.debian.org/391445 if you are about building
+gcc-4.3 or above.
+
+Most of them has been merged with gcc debian sources.
+
+0. What's wrong with toolchain-source approach
+
+Package toolchain-source contains sources for binutils and gcc, as well as
+some support scripts to build cross-compiler packages. They seem to work.
+
+However, there is one fundamental problem with this approach.
+Gcc package is actively maintained and frequently updated. These updates
+do contain bug fixes and improvements, especially for non-x86 architectures.
+Cross-compilers built using toolchain-source will not get those fixes unless
+toolchain-source package is updated after each binutils and gcc update.
+The later is not hapenning in real life. For example, toolchain-source
+was upgraded from gcc-3.2 to gcc-3.3 half a year later than gcc-3.3 became
+Debian default compiler.
+
+Keeping toolchain-source package up-to-date requires lots of work, and seems
+to be a waste of time. It is much better to build cross-compilers directly
+from gcc source package.
+
+
+1. What is needed to build a cross-compiler from gcc-4.3 source
+
+1.1. dpkg-cross package
+
+Dpkg-cross package contains several tools to manage cross-compile environment.
+
+It can convert native debian library and lib-dev packages for the target
+architecture to binary-all packages that keep libraries and headers under
+/usr/$(TARGET)/.
+
+Also it contains helper tools for cross-compiling debian packages. Some of
+these tools are used while building libgcc1 and libstdc++ library packages.
+The resulting library packages follow the same convensions as library packages
+converted by dpkg-cross.
+
+Currently, at least version 1.18 of dpkg-cross is needed for cross-gcc
+package build. Version 1.32 of dpkg-cross is needed in order to build gcc-4.3.
+
+1.2. cross-binutils for the target
+
+You need cross-binutils for your target to build cross-compiler.
+Binutils-multiarch package will not work because it does not provide cross-
+assemblers.
+
+If you don't want to use pre-built cross-binutils packages, you may build
+your own from binutils debian source package, using patches posted to
+bug #231707. Please use the latest of patch versions available there.
+
+Alternatively, you may use toolchain-source package to build cross-binutils
+(but in this case you will probably also want to use toolchain-source
+to build cross-compiler itself). However, multilib'ed cross-compilers may
+not build or work with these binutils.
+
+1.3. libc for target
+
+You also need libc library and development packages for the target
+architecture installed.
+
+To get those, download linux-kernel-headers, libc6, and libc6-dev binary
+debs for your target, convert those using dpkg-cross -b, and install
+resulting -arch-cross debs. Consult dpkg-cross manual page for more
+information.
+
+Building with/for alternative libc's is not supported yet (but this is in
+TODO).
+
+Note that if you plan to use your cross-toolchain to develop kernel drivers
+or similar low-level things, you will probably also need kernel headers
+for the exact kernel version that your target hardware uses.
+
+
+2. Building cross-compiler packages
+
+Get gcc-4.3 source package.
+
+Unpack it using dpkg-source -x, and cd to the package directory.
+
+Set GCC_TARGET environment variable to the target architectire name. Note
+that currently you should use debian architecture name (i.e 'powerpc' or 'arm'),
+not GNU system type (i.e. 'powerpc-linux' or 'arm-linux'). Setting GCC_TARGET
+to GNU system type will cause cross-compiler build to fail.
+
+Instead of setting GCC_TARGET, target architecture name may be put into
+debian/target file. If both GCC_TARGET is defined and debian/target file
+exists, GCC_TARGET is used.
+
+Run debian/rules control. This will change debian/control file,
+adjusting build-depends.  By default, the packages will not depend on the
+system -base package. A variable DEB_CROSS_INDEPENDENT has been merged with DEB_CROSS variable.
+
+You can then build with either
+
+$ GCC_TARGET=[arch] dpkg-buildpackage -rfakeroot
+
+3. Using crosshurd
+
+Jeff Bailey <jbailey@raspberryginger.com> suggests alternate way to setup
+environment to build cross-compiler, using 'crosshurd' package. 
+Crosshurd is like debootstrap but cross-arch, and works on the Hurd,
+Linux and FreeBSD.  (The name is historical).
+
+If you setup your environment with crosshurd, you will need to fix symlinks
+in lib and usr/lib to be relative instead of absolute. For example:
+
+lrwxrwxrwx    1 root     root           20 2004-05-06 23:02 libcom_err.so -> /lib/libcom_err.so.2
+
+Needs to be changed to:
+
+lrwxrwxrwx    1 root     root           20 2004-05-06 23:02 libcom_err.so -> ../../lib/libcom_err.so.2
+
+Also, if you choose this method, set the environment variable 'with_sysroot'
+to point to the ABSOLUTE PATH where the crosshurd was done.
+
+Note however that build-depends of cross-gcc and dependencies in generated
+libgcc1 and libstdc++ packages assume that you use dpkg-cross to set up
+your environment, and may be wrong or incomplete if you use alternate methods.
+But probably you don't care.
+
+--
+Nikita V. Youshchenko <yoush@debian.org> - Jun 2004
+Hector Oron Martinez  <hector.oron@gmail.com> - Oct 2006
--- gdc-4.4-1.063-4.4.7.orig/debian/changelog-4.4
+++ gdc-4.4-1.063-4.4.7/debian/changelog-4.4
@@ -0,0 +1,36 @@
+  * Closing reports reported against gcc-4.1 and fixed in gcc-4.4:
+    - General
+      + 
+    - C
+      + 
+    - C++/libstdc++
+      + 
+    - Fortran
+    - Java
+    - Architecture specific:
+      - mips
+      - sparc
+  * Closing reports reported against gcc-4.2 and fixed in gcc-4.4:
+    - General
+      + 
+    - C
+      + 
+    - C++/libstdc++
+      + 
+    - Fortran
+    - Java
+    - Architecture specific:
+      - mips
+      - sparc
+  * Closing reports reported against gcc-4.3 and fixed in gcc-4.4:
+    - General
+      + 
+    - C
+      + 
+    - C++/libstdc++
+      + 
+    - Fortran
+    - Java
+    - Architecture specific:
+      - mips
+      - sparc
--- gdc-4.4-1.063-4.4.7.orig/debian/libobjc2.symbols.arm
+++ gdc-4.4-1.063-4.4.7/debian/libobjc2.symbols.arm
@@ -0,0 +1,4 @@
+libobjc.so.2 libobjc2 #MINVER#
+#include "libobjc2.symbols.common"
+ __gnu_objc_personality_sj0@Base 4.2.1
+ __objc_exception_class@Base 4.4.0
--- gdc-4.4-1.063-4.4.7.orig/debian/fixincludes.in
+++ gdc-4.4-1.063-4.4.7/debian/fixincludes.in
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+PATH="/@LIBEXECDIR@/install-tools:$PATH"
+
+TARGET_MACHINE=`dpkg-architecture -qDEB_HOST_GNU_TYPE`
+export TARGET_MACHINE
+
+exec fixinc.sh "$@"
--- gdc-4.4-1.063-4.4.7.orig/debian/cpp-BV-doc.doc-base.cppint
+++ gdc-4.4-1.063-4.4.7/debian/cpp-BV-doc.doc-base.cppint
@@ -0,0 +1,17 @@
+Document: cppinternals-@BV@
+Title: The GNU C preprocessor (internals)
+Author: Various
+Abstract: This brief manual documents the internals of cpplib, and
+ explains some of the tricky issues.  It is intended that, along with
+ the comments in the source code, a reasonably competent C programmer
+ should be able to figure out what the code is doing, and why things
+ have been implemented the way they have.
+Section: Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/cppinternals.html
+Files: /usr/share/doc/gcc-@BV@-base/cppinternals.html
+
+Format: info
+Index: /usr/share/info/cppinternals-@BV@.info.gz
+Files: /usr/share/info/cppinternals-@BV@*
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc1.symbols.mips
+++ gdc-4.4-1.063-4.4.7/debian/libgcc1.symbols.mips
@@ -0,0 +1,1219 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3.4@GCC_3.3.4 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addda3@GCC_4.3.0 1:4.3
+ __adddf3@GCC_3.0 1:4.1.1
+ __adddq3@GCC_4.3.0 1:4.3
+ __addha3@GCC_4.3.0 1:4.3
+ __addhq3@GCC_4.3.0 1:4.3
+ __addqq3@GCC_4.3.0 1:4.3
+ __addsa3@GCC_4.3.0 1:4.3
+ __addsf3@GCC_3.0 1:4.1.1
+ __addsq3@GCC_4.3.0 1:4.3
+ __adduda3@GCC_4.3.0 1:4.3
+ __addudq3@GCC_4.3.0 1:4.3
+ __adduha3@GCC_4.3.0 1:4.3
+ __adduhq3@GCC_4.3.0 1:4.3
+ __adduqq3@GCC_4.3.0 1:4.3
+ __addusa3@GCC_4.3.0 1:4.3
+ __addusq3@GCC_4.3.0 1:4.3
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashlda3@GCC_4.3.0 1:4.3
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashldq3@GCC_4.3.0 1:4.3
+ __ashlha3@GCC_4.3.0 1:4.3
+ __ashlhq3@GCC_4.3.0 1:4.3
+ __ashlqq3@GCC_4.3.0 1:4.3
+ __ashlsa3@GCC_4.3.0 1:4.3
+ __ashlsq3@GCC_4.3.0 1:4.3
+ __ashluda3@GCC_4.3.0 1:4.3
+ __ashludq3@GCC_4.3.0 1:4.3
+ __ashluha3@GCC_4.3.0 1:4.3
+ __ashluhq3@GCC_4.3.0 1:4.3
+ __ashluqq3@GCC_4.3.0 1:4.3
+ __ashlusa3@GCC_4.3.0 1:4.3
+ __ashlusq3@GCC_4.3.0 1:4.3
+ __ashrda3@GCC_4.3.0 1:4.3
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __ashrdq3@GCC_4.3.0 1:4.3
+ __ashrha3@GCC_4.3.0 1:4.3
+ __ashrhq3@GCC_4.3.0 1:4.3
+ __ashrqq3@GCC_4.3.0 1:4.3
+ __ashrsa3@GCC_4.3.0 1:4.3
+ __ashrsq3@GCC_4.3.0 1:4.3
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpda2@GCC_4.3.0 1:4.3
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __cmpdq2@GCC_4.3.0 1:4.3
+ __cmpha2@GCC_4.3.0 1:4.3
+ __cmphq2@GCC_4.3.0 1:4.3
+ __cmpqq2@GCC_4.3.0 1:4.3
+ __cmpsa2@GCC_4.3.0 1:4.3
+ __cmpsq2@GCC_4.3.0 1:4.3
+ __cmpuda2@GCC_4.3.0 1:4.3
+ __cmpudq2@GCC_4.3.0 1:4.3
+ __cmpuha2@GCC_4.3.0 1:4.3
+ __cmpuhq2@GCC_4.3.0 1:4.3
+ __cmpuqq2@GCC_4.3.0 1:4.3
+ __cmpusa2@GCC_4.3.0 1:4.3
+ __cmpusq2@GCC_4.3.0 1:4.3
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divda3@GCC_4.3.0 1:4.3
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdf3@GCC_3.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divdq3@GCC_4.3.0 1:4.3
+ __divha3@GCC_4.3.0 1:4.3
+ __divhq3@GCC_4.3.0 1:4.3
+ __divqq3@GCC_4.3.0 1:4.3
+ __divsa3@GCC_4.3.0 1:4.3
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divsf3@GCC_3.0 1:4.1.1
+ __divsq3@GCC_4.3.0 1:4.3
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqdf2@GCC_3.0 1:4.1.1
+ __eqsf2@GCC_3.0 1:4.1.1
+ __extendsfdf2@GCC_3.0 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixdfsi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixsfsi@GCC_3.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatsidf@GCC_3.0 1:4.1.1
+ __floatsisf@GCC_3.0 1:4.1.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunsidf@GCC_4.2.0 1:4.2.1
+ __floatunsisf@GCC_4.2.0 1:4.2.1
+ __fractdadf@GCC_4.3.0 1:4.3
+ __fractdadi@GCC_4.3.0 1:4.3
+ __fractdadq@GCC_4.3.0 1:4.3
+ __fractdaha2@GCC_4.3.0 1:4.3
+ __fractdahi@GCC_4.3.0 1:4.3
+ __fractdahq@GCC_4.3.0 1:4.3
+ __fractdaqi@GCC_4.3.0 1:4.3
+ __fractdaqq@GCC_4.3.0 1:4.3
+ __fractdasa2@GCC_4.3.0 1:4.3
+ __fractdasf@GCC_4.3.0 1:4.3
+ __fractdasi@GCC_4.3.0 1:4.3
+ __fractdasq@GCC_4.3.0 1:4.3
+ __fractdauda@GCC_4.3.0 1:4.3
+ __fractdaudq@GCC_4.3.0 1:4.3
+ __fractdauha@GCC_4.3.0 1:4.3
+ __fractdauhq@GCC_4.3.0 1:4.3
+ __fractdauqq@GCC_4.3.0 1:4.3
+ __fractdausa@GCC_4.3.0 1:4.3
+ __fractdausq@GCC_4.3.0 1:4.3
+ __fractdfda@GCC_4.3.0 1:4.3
+ __fractdfdq@GCC_4.3.0 1:4.3
+ __fractdfha@GCC_4.3.0 1:4.3
+ __fractdfhq@GCC_4.3.0 1:4.3
+ __fractdfqq@GCC_4.3.0 1:4.3
+ __fractdfsa@GCC_4.3.0 1:4.3
+ __fractdfsq@GCC_4.3.0 1:4.3
+ __fractdfuda@GCC_4.3.0 1:4.3
+ __fractdfudq@GCC_4.3.0 1:4.3
+ __fractdfuha@GCC_4.3.0 1:4.3
+ __fractdfuhq@GCC_4.3.0 1:4.3
+ __fractdfuqq@GCC_4.3.0 1:4.3
+ __fractdfusa@GCC_4.3.0 1:4.3
+ __fractdfusq@GCC_4.3.0 1:4.3
+ __fractdida@GCC_4.3.0 1:4.3
+ __fractdidq@GCC_4.3.0 1:4.3
+ __fractdiha@GCC_4.3.0 1:4.3
+ __fractdihq@GCC_4.3.0 1:4.3
+ __fractdiqq@GCC_4.3.0 1:4.3
+ __fractdisa@GCC_4.3.0 1:4.3
+ __fractdisq@GCC_4.3.0 1:4.3
+ __fractdiuda@GCC_4.3.0 1:4.3
+ __fractdiudq@GCC_4.3.0 1:4.3
+ __fractdiuha@GCC_4.3.0 1:4.3
+ __fractdiuhq@GCC_4.3.0 1:4.3
+ __fractdiuqq@GCC_4.3.0 1:4.3
+ __fractdiusa@GCC_4.3.0 1:4.3
+ __fractdiusq@GCC_4.3.0 1:4.3
+ __fractdqda@GCC_4.3.0 1:4.3
+ __fractdqdf@GCC_4.3.0 1:4.3
+ __fractdqdi@GCC_4.3.0 1:4.3
+ __fractdqha@GCC_4.3.0 1:4.3
+ __fractdqhi@GCC_4.3.0 1:4.3
+ __fractdqhq2@GCC_4.3.0 1:4.3
+ __fractdqqi@GCC_4.3.0 1:4.3
+ __fractdqqq2@GCC_4.3.0 1:4.3
+ __fractdqsa@GCC_4.3.0 1:4.3
+ __fractdqsf@GCC_4.3.0 1:4.3
+ __fractdqsi@GCC_4.3.0 1:4.3
+ __fractdqsq2@GCC_4.3.0 1:4.3
+ __fractdquda@GCC_4.3.0 1:4.3
+ __fractdqudq@GCC_4.3.0 1:4.3
+ __fractdquha@GCC_4.3.0 1:4.3
+ __fractdquhq@GCC_4.3.0 1:4.3
+ __fractdquqq@GCC_4.3.0 1:4.3
+ __fractdqusa@GCC_4.3.0 1:4.3
+ __fractdqusq@GCC_4.3.0 1:4.3
+ __fracthada2@GCC_4.3.0 1:4.3
+ __fracthadf@GCC_4.3.0 1:4.3
+ __fracthadi@GCC_4.3.0 1:4.3
+ __fracthadq@GCC_4.3.0 1:4.3
+ __fracthahi@GCC_4.3.0 1:4.3
+ __fracthahq@GCC_4.3.0 1:4.3
+ __fracthaqi@GCC_4.3.0 1:4.3
+ __fracthaqq@GCC_4.3.0 1:4.3
+ __fracthasa2@GCC_4.3.0 1:4.3
+ __fracthasf@GCC_4.3.0 1:4.3
+ __fracthasi@GCC_4.3.0 1:4.3
+ __fracthasq@GCC_4.3.0 1:4.3
+ __fracthauda@GCC_4.3.0 1:4.3
+ __fracthaudq@GCC_4.3.0 1:4.3
+ __fracthauha@GCC_4.3.0 1:4.3
+ __fracthauhq@GCC_4.3.0 1:4.3
+ __fracthauqq@GCC_4.3.0 1:4.3
+ __fracthausa@GCC_4.3.0 1:4.3
+ __fracthausq@GCC_4.3.0 1:4.3
+ __fracthida@GCC_4.3.0 1:4.3
+ __fracthidq@GCC_4.3.0 1:4.3
+ __fracthiha@GCC_4.3.0 1:4.3
+ __fracthihq@GCC_4.3.0 1:4.3
+ __fracthiqq@GCC_4.3.0 1:4.3
+ __fracthisa@GCC_4.3.0 1:4.3
+ __fracthisq@GCC_4.3.0 1:4.3
+ __fracthiuda@GCC_4.3.0 1:4.3
+ __fracthiudq@GCC_4.3.0 1:4.3
+ __fracthiuha@GCC_4.3.0 1:4.3
+ __fracthiuhq@GCC_4.3.0 1:4.3
+ __fracthiuqq@GCC_4.3.0 1:4.3
+ __fracthiusa@GCC_4.3.0 1:4.3
+ __fracthiusq@GCC_4.3.0 1:4.3
+ __fracthqda@GCC_4.3.0 1:4.3
+ __fracthqdf@GCC_4.3.0 1:4.3
+ __fracthqdi@GCC_4.3.0 1:4.3
+ __fracthqdq2@GCC_4.3.0 1:4.3
+ __fracthqha@GCC_4.3.0 1:4.3
+ __fracthqhi@GCC_4.3.0 1:4.3
+ __fracthqqi@GCC_4.3.0 1:4.3
+ __fracthqqq2@GCC_4.3.0 1:4.3
+ __fracthqsa@GCC_4.3.0 1:4.3
+ __fracthqsf@GCC_4.3.0 1:4.3
+ __fracthqsi@GCC_4.3.0 1:4.3
+ __fracthqsq2@GCC_4.3.0 1:4.3
+ __fracthquda@GCC_4.3.0 1:4.3
+ __fracthqudq@GCC_4.3.0 1:4.3
+ __fracthquha@GCC_4.3.0 1:4.3
+ __fracthquhq@GCC_4.3.0 1:4.3
+ __fracthquqq@GCC_4.3.0 1:4.3
+ __fracthqusa@GCC_4.3.0 1:4.3
+ __fracthqusq@GCC_4.3.0 1:4.3
+ __fractqida@GCC_4.3.0 1:4.3
+ __fractqidq@GCC_4.3.0 1:4.3
+ __fractqiha@GCC_4.3.0 1:4.3
+ __fractqihq@GCC_4.3.0 1:4.3
+ __fractqiqq@GCC_4.3.0 1:4.3
+ __fractqisa@GCC_4.3.0 1:4.3
+ __fractqisq@GCC_4.3.0 1:4.3
+ __fractqiuda@GCC_4.3.0 1:4.3
+ __fractqiudq@GCC_4.3.0 1:4.3
+ __fractqiuha@GCC_4.3.0 1:4.3
+ __fractqiuhq@GCC_4.3.0 1:4.3
+ __fractqiuqq@GCC_4.3.0 1:4.3
+ __fractqiusa@GCC_4.3.0 1:4.3
+ __fractqiusq@GCC_4.3.0 1:4.3
+ __fractqqda@GCC_4.3.0 1:4.3
+ __fractqqdf@GCC_4.3.0 1:4.3
+ __fractqqdi@GCC_4.3.0 1:4.3
+ __fractqqdq2@GCC_4.3.0 1:4.3
+ __fractqqha@GCC_4.3.0 1:4.3
+ __fractqqhi@GCC_4.3.0 1:4.3
+ __fractqqhq2@GCC_4.3.0 1:4.3
+ __fractqqqi@GCC_4.3.0 1:4.3
+ __fractqqsa@GCC_4.3.0 1:4.3
+ __fractqqsf@GCC_4.3.0 1:4.3
+ __fractqqsi@GCC_4.3.0 1:4.3
+ __fractqqsq2@GCC_4.3.0 1:4.3
+ __fractqquda@GCC_4.3.0 1:4.3
+ __fractqqudq@GCC_4.3.0 1:4.3
+ __fractqquha@GCC_4.3.0 1:4.3
+ __fractqquhq@GCC_4.3.0 1:4.3
+ __fractqquqq@GCC_4.3.0 1:4.3
+ __fractqqusa@GCC_4.3.0 1:4.3
+ __fractqqusq@GCC_4.3.0 1:4.3
+ __fractsada2@GCC_4.3.0 1:4.3
+ __fractsadf@GCC_4.3.0 1:4.3
+ __fractsadi@GCC_4.3.0 1:4.3
+ __fractsadq@GCC_4.3.0 1:4.3
+ __fractsaha2@GCC_4.3.0 1:4.3
+ __fractsahi@GCC_4.3.0 1:4.3
+ __fractsahq@GCC_4.3.0 1:4.3
+ __fractsaqi@GCC_4.3.0 1:4.3
+ __fractsaqq@GCC_4.3.0 1:4.3
+ __fractsasf@GCC_4.3.0 1:4.3
+ __fractsasi@GCC_4.3.0 1:4.3
+ __fractsasq@GCC_4.3.0 1:4.3
+ __fractsauda@GCC_4.3.0 1:4.3
+ __fractsaudq@GCC_4.3.0 1:4.3
+ __fractsauha@GCC_4.3.0 1:4.3
+ __fractsauhq@GCC_4.3.0 1:4.3
+ __fractsauqq@GCC_4.3.0 1:4.3
+ __fractsausa@GCC_4.3.0 1:4.3
+ __fractsausq@GCC_4.3.0 1:4.3
+ __fractsfda@GCC_4.3.0 1:4.3
+ __fractsfdq@GCC_4.3.0 1:4.3
+ __fractsfha@GCC_4.3.0 1:4.3
+ __fractsfhq@GCC_4.3.0 1:4.3
+ __fractsfqq@GCC_4.3.0 1:4.3
+ __fractsfsa@GCC_4.3.0 1:4.3
+ __fractsfsq@GCC_4.3.0 1:4.3
+ __fractsfuda@GCC_4.3.0 1:4.3
+ __fractsfudq@GCC_4.3.0 1:4.3
+ __fractsfuha@GCC_4.3.0 1:4.3
+ __fractsfuhq@GCC_4.3.0 1:4.3
+ __fractsfuqq@GCC_4.3.0 1:4.3
+ __fractsfusa@GCC_4.3.0 1:4.3
+ __fractsfusq@GCC_4.3.0 1:4.3
+ __fractsida@GCC_4.3.0 1:4.3
+ __fractsidq@GCC_4.3.0 1:4.3
+ __fractsiha@GCC_4.3.0 1:4.3
+ __fractsihq@GCC_4.3.0 1:4.3
+ __fractsiqq@GCC_4.3.0 1:4.3
+ __fractsisa@GCC_4.3.0 1:4.3
+ __fractsisq@GCC_4.3.0 1:4.3
+ __fractsiuda@GCC_4.3.0 1:4.3
+ __fractsiudq@GCC_4.3.0 1:4.3
+ __fractsiuha@GCC_4.3.0 1:4.3
+ __fractsiuhq@GCC_4.3.0 1:4.3
+ __fractsiuqq@GCC_4.3.0 1:4.3
+ __fractsiusa@GCC_4.3.0 1:4.3
+ __fractsiusq@GCC_4.3.0 1:4.3
+ __fractsqda@GCC_4.3.0 1:4.3
+ __fractsqdf@GCC_4.3.0 1:4.3
+ __fractsqdi@GCC_4.3.0 1:4.3
+ __fractsqdq2@GCC_4.3.0 1:4.3
+ __fractsqha@GCC_4.3.0 1:4.3
+ __fractsqhi@GCC_4.3.0 1:4.3
+ __fractsqhq2@GCC_4.3.0 1:4.3
+ __fractsqqi@GCC_4.3.0 1:4.3
+ __fractsqqq2@GCC_4.3.0 1:4.3
+ __fractsqsa@GCC_4.3.0 1:4.3
+ __fractsqsf@GCC_4.3.0 1:4.3
+ __fractsqsi@GCC_4.3.0 1:4.3
+ __fractsquda@GCC_4.3.0 1:4.3
+ __fractsqudq@GCC_4.3.0 1:4.3
+ __fractsquha@GCC_4.3.0 1:4.3
+ __fractsquhq@GCC_4.3.0 1:4.3
+ __fractsquqq@GCC_4.3.0 1:4.3
+ __fractsqusa@GCC_4.3.0 1:4.3
+ __fractsqusq@GCC_4.3.0 1:4.3
+ __fractudada@GCC_4.3.0 1:4.3
+ __fractudadf@GCC_4.3.0 1:4.3
+ __fractudadi@GCC_4.3.0 1:4.3
+ __fractudadq@GCC_4.3.0 1:4.3
+ __fractudaha@GCC_4.3.0 1:4.3
+ __fractudahi@GCC_4.3.0 1:4.3
+ __fractudahq@GCC_4.3.0 1:4.3
+ __fractudaqi@GCC_4.3.0 1:4.3
+ __fractudaqq@GCC_4.3.0 1:4.3
+ __fractudasa@GCC_4.3.0 1:4.3
+ __fractudasf@GCC_4.3.0 1:4.3
+ __fractudasi@GCC_4.3.0 1:4.3
+ __fractudasq@GCC_4.3.0 1:4.3
+ __fractudaudq@GCC_4.3.0 1:4.3
+ __fractudauha2@GCC_4.3.0 1:4.3
+ __fractudauhq@GCC_4.3.0 1:4.3
+ __fractudauqq@GCC_4.3.0 1:4.3
+ __fractudausa2@GCC_4.3.0 1:4.3
+ __fractudausq@GCC_4.3.0 1:4.3
+ __fractudqda@GCC_4.3.0 1:4.3
+ __fractudqdf@GCC_4.3.0 1:4.3
+ __fractudqdi@GCC_4.3.0 1:4.3
+ __fractudqdq@GCC_4.3.0 1:4.3
+ __fractudqha@GCC_4.3.0 1:4.3
+ __fractudqhi@GCC_4.3.0 1:4.3
+ __fractudqhq@GCC_4.3.0 1:4.3
+ __fractudqqi@GCC_4.3.0 1:4.3
+ __fractudqqq@GCC_4.3.0 1:4.3
+ __fractudqsa@GCC_4.3.0 1:4.3
+ __fractudqsf@GCC_4.3.0 1:4.3
+ __fractudqsi@GCC_4.3.0 1:4.3
+ __fractudqsq@GCC_4.3.0 1:4.3
+ __fractudquda@GCC_4.3.0 1:4.3
+ __fractudquha@GCC_4.3.0 1:4.3
+ __fractudquhq2@GCC_4.3.0 1:4.3
+ __fractudquqq2@GCC_4.3.0 1:4.3
+ __fractudqusa@GCC_4.3.0 1:4.3
+ __fractudqusq2@GCC_4.3.0 1:4.3
+ __fractuhada@GCC_4.3.0 1:4.3
+ __fractuhadf@GCC_4.3.0 1:4.3
+ __fractuhadi@GCC_4.3.0 1:4.3
+ __fractuhadq@GCC_4.3.0 1:4.3
+ __fractuhaha@GCC_4.3.0 1:4.3
+ __fractuhahi@GCC_4.3.0 1:4.3
+ __fractuhahq@GCC_4.3.0 1:4.3
+ __fractuhaqi@GCC_4.3.0 1:4.3
+ __fractuhaqq@GCC_4.3.0 1:4.3
+ __fractuhasa@GCC_4.3.0 1:4.3
+ __fractuhasf@GCC_4.3.0 1:4.3
+ __fractuhasi@GCC_4.3.0 1:4.3
+ __fractuhasq@GCC_4.3.0 1:4.3
+ __fractuhauda2@GCC_4.3.0 1:4.3
+ __fractuhaudq@GCC_4.3.0 1:4.3
+ __fractuhauhq@GCC_4.3.0 1:4.3
+ __fractuhauqq@GCC_4.3.0 1:4.3
+ __fractuhausa2@GCC_4.3.0 1:4.3
+ __fractuhausq@GCC_4.3.0 1:4.3
+ __fractuhqda@GCC_4.3.0 1:4.3
+ __fractuhqdf@GCC_4.3.0 1:4.3
+ __fractuhqdi@GCC_4.3.0 1:4.3
+ __fractuhqdq@GCC_4.3.0 1:4.3
+ __fractuhqha@GCC_4.3.0 1:4.3
+ __fractuhqhi@GCC_4.3.0 1:4.3
+ __fractuhqhq@GCC_4.3.0 1:4.3
+ __fractuhqqi@GCC_4.3.0 1:4.3
+ __fractuhqqq@GCC_4.3.0 1:4.3
+ __fractuhqsa@GCC_4.3.0 1:4.3
+ __fractuhqsf@GCC_4.3.0 1:4.3
+ __fractuhqsi@GCC_4.3.0 1:4.3
+ __fractuhqsq@GCC_4.3.0 1:4.3
+ __fractuhquda@GCC_4.3.0 1:4.3
+ __fractuhqudq2@GCC_4.3.0 1:4.3
+ __fractuhquha@GCC_4.3.0 1:4.3
+ __fractuhquqq2@GCC_4.3.0 1:4.3
+ __fractuhqusa@GCC_4.3.0 1:4.3
+ __fractuhqusq2@GCC_4.3.0 1:4.3
+ __fractunsdadi@GCC_4.3.0 1:4.3
+ __fractunsdahi@GCC_4.3.0 1:4.3
+ __fractunsdaqi@GCC_4.3.0 1:4.3
+ __fractunsdasi@GCC_4.3.0 1:4.3
+ __fractunsdida@GCC_4.3.0 1:4.3
+ __fractunsdidq@GCC_4.3.0 1:4.3
+ __fractunsdiha@GCC_4.3.0 1:4.3
+ __fractunsdihq@GCC_4.3.0 1:4.3
+ __fractunsdiqq@GCC_4.3.0 1:4.3
+ __fractunsdisa@GCC_4.3.0 1:4.3
+ __fractunsdisq@GCC_4.3.0 1:4.3
+ __fractunsdiuda@GCC_4.3.0 1:4.3
+ __fractunsdiudq@GCC_4.3.0 1:4.3
+ __fractunsdiuha@GCC_4.3.0 1:4.3
+ __fractunsdiuhq@GCC_4.3.0 1:4.3
+ __fractunsdiuqq@GCC_4.3.0 1:4.3
+ __fractunsdiusa@GCC_4.3.0 1:4.3
+ __fractunsdiusq@GCC_4.3.0 1:4.3
+ __fractunsdqdi@GCC_4.3.0 1:4.3
+ __fractunsdqhi@GCC_4.3.0 1:4.3
+ __fractunsdqqi@GCC_4.3.0 1:4.3
+ __fractunsdqsi@GCC_4.3.0 1:4.3
+ __fractunshadi@GCC_4.3.0 1:4.3
+ __fractunshahi@GCC_4.3.0 1:4.3
+ __fractunshaqi@GCC_4.3.0 1:4.3
+ __fractunshasi@GCC_4.3.0 1:4.3
+ __fractunshida@GCC_4.3.0 1:4.3
+ __fractunshidq@GCC_4.3.0 1:4.3
+ __fractunshiha@GCC_4.3.0 1:4.3
+ __fractunshihq@GCC_4.3.0 1:4.3
+ __fractunshiqq@GCC_4.3.0 1:4.3
+ __fractunshisa@GCC_4.3.0 1:4.3
+ __fractunshisq@GCC_4.3.0 1:4.3
+ __fractunshiuda@GCC_4.3.0 1:4.3
+ __fractunshiudq@GCC_4.3.0 1:4.3
+ __fractunshiuha@GCC_4.3.0 1:4.3
+ __fractunshiuhq@GCC_4.3.0 1:4.3
+ __fractunshiuqq@GCC_4.3.0 1:4.3
+ __fractunshiusa@GCC_4.3.0 1:4.3
+ __fractunshiusq@GCC_4.3.0 1:4.3
+ __fractunshqdi@GCC_4.3.0 1:4.3
+ __fractunshqhi@GCC_4.3.0 1:4.3
+ __fractunshqqi@GCC_4.3.0 1:4.3
+ __fractunshqsi@GCC_4.3.0 1:4.3
+ __fractunsqida@GCC_4.3.0 1:4.3
+ __fractunsqidq@GCC_4.3.0 1:4.3
+ __fractunsqiha@GCC_4.3.0 1:4.3
+ __fractunsqihq@GCC_4.3.0 1:4.3
+ __fractunsqiqq@GCC_4.3.0 1:4.3
+ __fractunsqisa@GCC_4.3.0 1:4.3
+ __fractunsqisq@GCC_4.3.0 1:4.3
+ __fractunsqiuda@GCC_4.3.0 1:4.3
+ __fractunsqiudq@GCC_4.3.0 1:4.3
+ __fractunsqiuha@GCC_4.3.0 1:4.3
+ __fractunsqiuhq@GCC_4.3.0 1:4.3
+ __fractunsqiuqq@GCC_4.3.0 1:4.3
+ __fractunsqiusa@GCC_4.3.0 1:4.3
+ __fractunsqiusq@GCC_4.3.0 1:4.3
+ __fractunsqqdi@GCC_4.3.0 1:4.3
+ __fractunsqqhi@GCC_4.3.0 1:4.3
+ __fractunsqqqi@GCC_4.3.0 1:4.3
+ __fractunsqqsi@GCC_4.3.0 1:4.3
+ __fractunssadi@GCC_4.3.0 1:4.3
+ __fractunssahi@GCC_4.3.0 1:4.3
+ __fractunssaqi@GCC_4.3.0 1:4.3
+ __fractunssasi@GCC_4.3.0 1:4.3
+ __fractunssida@GCC_4.3.0 1:4.3
+ __fractunssidq@GCC_4.3.0 1:4.3
+ __fractunssiha@GCC_4.3.0 1:4.3
+ __fractunssihq@GCC_4.3.0 1:4.3
+ __fractunssiqq@GCC_4.3.0 1:4.3
+ __fractunssisa@GCC_4.3.0 1:4.3
+ __fractunssisq@GCC_4.3.0 1:4.3
+ __fractunssiuda@GCC_4.3.0 1:4.3
+ __fractunssiudq@GCC_4.3.0 1:4.3
+ __fractunssiuha@GCC_4.3.0 1:4.3
+ __fractunssiuhq@GCC_4.3.0 1:4.3
+ __fractunssiuqq@GCC_4.3.0 1:4.3
+ __fractunssiusa@GCC_4.3.0 1:4.3
+ __fractunssiusq@GCC_4.3.0 1:4.3
+ __fractunssqdi@GCC_4.3.0 1:4.3
+ __fractunssqhi@GCC_4.3.0 1:4.3
+ __fractunssqqi@GCC_4.3.0 1:4.3
+ __fractunssqsi@GCC_4.3.0 1:4.3
+ __fractunsudadi@GCC_4.3.0 1:4.3
+ __fractunsudahi@GCC_4.3.0 1:4.3
+ __fractunsudaqi@GCC_4.3.0 1:4.3
+ __fractunsudasi@GCC_4.3.0 1:4.3
+ __fractunsudqdi@GCC_4.3.0 1:4.3
+ __fractunsudqhi@GCC_4.3.0 1:4.3
+ __fractunsudqqi@GCC_4.3.0 1:4.3
+ __fractunsudqsi@GCC_4.3.0 1:4.3
+ __fractunsuhadi@GCC_4.3.0 1:4.3
+ __fractunsuhahi@GCC_4.3.0 1:4.3
+ __fractunsuhaqi@GCC_4.3.0 1:4.3
+ __fractunsuhasi@GCC_4.3.0 1:4.3
+ __fractunsuhqdi@GCC_4.3.0 1:4.3
+ __fractunsuhqhi@GCC_4.3.0 1:4.3
+ __fractunsuhqqi@GCC_4.3.0 1:4.3
+ __fractunsuhqsi@GCC_4.3.0 1:4.3
+ __fractunsuqqdi@GCC_4.3.0 1:4.3
+ __fractunsuqqhi@GCC_4.3.0 1:4.3
+ __fractunsuqqqi@GCC_4.3.0 1:4.3
+ __fractunsuqqsi@GCC_4.3.0 1:4.3
+ __fractunsusadi@GCC_4.3.0 1:4.3
+ __fractunsusahi@GCC_4.3.0 1:4.3
+ __fractunsusaqi@GCC_4.3.0 1:4.3
+ __fractunsusasi@GCC_4.3.0 1:4.3
+ __fractunsusqdi@GCC_4.3.0 1:4.3
+ __fractunsusqhi@GCC_4.3.0 1:4.3
+ __fractunsusqqi@GCC_4.3.0 1:4.3
+ __fractunsusqsi@GCC_4.3.0 1:4.3
+ __fractuqqda@GCC_4.3.0 1:4.3
+ __fractuqqdf@GCC_4.3.0 1:4.3
+ __fractuqqdi@GCC_4.3.0 1:4.3
+ __fractuqqdq@GCC_4.3.0 1:4.3
+ __fractuqqha@GCC_4.3.0 1:4.3
+ __fractuqqhi@GCC_4.3.0 1:4.3
+ __fractuqqhq@GCC_4.3.0 1:4.3
+ __fractuqqqi@GCC_4.3.0 1:4.3
+ __fractuqqqq@GCC_4.3.0 1:4.3
+ __fractuqqsa@GCC_4.3.0 1:4.3
+ __fractuqqsf@GCC_4.3.0 1:4.3
+ __fractuqqsi@GCC_4.3.0 1:4.3
+ __fractuqqsq@GCC_4.3.0 1:4.3
+ __fractuqquda@GCC_4.3.0 1:4.3
+ __fractuqqudq2@GCC_4.3.0 1:4.3
+ __fractuqquha@GCC_4.3.0 1:4.3
+ __fractuqquhq2@GCC_4.3.0 1:4.3
+ __fractuqqusa@GCC_4.3.0 1:4.3
+ __fractuqqusq2@GCC_4.3.0 1:4.3
+ __fractusada@GCC_4.3.0 1:4.3
+ __fractusadf@GCC_4.3.0 1:4.3
+ __fractusadi@GCC_4.3.0 1:4.3
+ __fractusadq@GCC_4.3.0 1:4.3
+ __fractusaha@GCC_4.3.0 1:4.3
+ __fractusahi@GCC_4.3.0 1:4.3
+ __fractusahq@GCC_4.3.0 1:4.3
+ __fractusaqi@GCC_4.3.0 1:4.3
+ __fractusaqq@GCC_4.3.0 1:4.3
+ __fractusasa@GCC_4.3.0 1:4.3
+ __fractusasf@GCC_4.3.0 1:4.3
+ __fractusasi@GCC_4.3.0 1:4.3
+ __fractusasq@GCC_4.3.0 1:4.3
+ __fractusauda2@GCC_4.3.0 1:4.3
+ __fractusaudq@GCC_4.3.0 1:4.3
+ __fractusauha2@GCC_4.3.0 1:4.3
+ __fractusauhq@GCC_4.3.0 1:4.3
+ __fractusauqq@GCC_4.3.0 1:4.3
+ __fractusausq@GCC_4.3.0 1:4.3
+ __fractusqda@GCC_4.3.0 1:4.3
+ __fractusqdf@GCC_4.3.0 1:4.3
+ __fractusqdi@GCC_4.3.0 1:4.3
+ __fractusqdq@GCC_4.3.0 1:4.3
+ __fractusqha@GCC_4.3.0 1:4.3
+ __fractusqhi@GCC_4.3.0 1:4.3
+ __fractusqhq@GCC_4.3.0 1:4.3
+ __fractusqqi@GCC_4.3.0 1:4.3
+ __fractusqqq@GCC_4.3.0 1:4.3
+ __fractusqsa@GCC_4.3.0 1:4.3
+ __fractusqsf@GCC_4.3.0 1:4.3
+ __fractusqsi@GCC_4.3.0 1:4.3
+ __fractusqsq@GCC_4.3.0 1:4.3
+ __fractusquda@GCC_4.3.0 1:4.3
+ __fractusqudq2@GCC_4.3.0 1:4.3
+ __fractusquha@GCC_4.3.0 1:4.3
+ __fractusquhq2@GCC_4.3.0 1:4.3
+ __fractusquqq2@GCC_4.3.0 1:4.3
+ __fractusqusa@GCC_4.3.0 1:4.3
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __gedf2@GCC_3.0 1:4.1.1
+ __gesf2@GCC_3.0 1:4.1.1
+ __gtdf2@GCC_3.0 1:4.1.1
+ __gtsf2@GCC_3.0 1:4.1.1
+ __ledf2@GCC_3.0 1:4.1.1
+ __lesf2@GCC_3.0 1:4.1.1
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __lshruda3@GCC_4.3.0 1:4.3
+ __lshrudq3@GCC_4.3.0 1:4.3
+ __lshruha3@GCC_4.3.0 1:4.3
+ __lshruhq3@GCC_4.3.0 1:4.3
+ __lshruqq3@GCC_4.3.0 1:4.3
+ __lshrusa3@GCC_4.3.0 1:4.3
+ __lshrusq3@GCC_4.3.0 1:4.3
+ __ltdf2@GCC_3.0 1:4.1.1
+ __ltsf2@GCC_3.0 1:4.1.1
+ __mips16_adddf3@GCC_4.4.0 1:4.4.0
+ __mips16_addsf3@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_9@GCC_4.4.0 1:4.4.0
+ __mips16_divdf3@GCC_4.4.0 1:4.4.0
+ __mips16_divsf3@GCC_4.4.0 1:4.4.0
+ __mips16_eqdf2@GCC_4.4.0 1:4.4.0
+ __mips16_eqsf2@GCC_4.4.0 1:4.4.0
+ __mips16_extendsfdf2@GCC_4.4.0 1:4.4.0
+ __mips16_fix_truncdfsi@GCC_4.4.0 1:4.4.0
+ __mips16_fix_truncsfsi@GCC_4.4.0 1:4.4.0
+ __mips16_floatsidf@GCC_4.4.0 1:4.4.0
+ __mips16_floatsisf@GCC_4.4.0 1:4.4.0
+ __mips16_floatunsidf@GCC_4.4.0 1:4.4.0
+ __mips16_floatunsisf@GCC_4.4.0 1:4.4.0
+ __mips16_gedf2@GCC_4.4.0 1:4.4.0
+ __mips16_gesf2@GCC_4.4.0 1:4.4.0
+ __mips16_gtdf2@GCC_4.4.0 1:4.4.0
+ __mips16_gtsf2@GCC_4.4.0 1:4.4.0
+ __mips16_ledf2@GCC_4.4.0 1:4.4.0
+ __mips16_lesf2@GCC_4.4.0 1:4.4.0
+ __mips16_ltdf2@GCC_4.4.0 1:4.4.0
+ __mips16_ltsf2@GCC_4.4.0 1:4.4.0
+ __mips16_muldf3@GCC_4.4.0 1:4.4.0
+ __mips16_mulsf3@GCC_4.4.0 1:4.4.0
+ __mips16_nedf2@GCC_4.4.0 1:4.4.0
+ __mips16_nesf2@GCC_4.4.0 1:4.4.0
+ __mips16_ret_dc@GCC_4.4.0 1:4.4.0
+ __mips16_ret_df@GCC_4.4.0 1:4.4.0
+ __mips16_ret_sc@GCC_4.4.0 1:4.4.0
+ __mips16_ret_sf@GCC_4.4.0 1:4.4.0
+ __mips16_subdf3@GCC_4.4.0 1:4.4.0
+ __mips16_subsf3@GCC_4.4.0 1:4.4.0
+ __mips16_truncdfsf2@GCC_4.4.0 1:4.4.0
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __mulda3@GCC_4.3.0 1:4.3
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldf3@GCC_3.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __muldq3@GCC_4.3.0 1:4.3
+ __mulha3@GCC_4.3.0 1:4.3
+ __mulhq3@GCC_4.3.0 1:4.3
+ __mulqq3@GCC_4.3.0 1:4.3
+ __mulsa3@GCC_4.3.0 1:4.3
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __mulsf3@GCC_3.0 1:4.1.1
+ __mulsq3@GCC_4.3.0 1:4.3
+ __muluda3@GCC_4.3.0 1:4.3
+ __muludq3@GCC_4.3.0 1:4.3
+ __muluha3@GCC_4.3.0 1:4.3
+ __muluhq3@GCC_4.3.0 1:4.3
+ __muluqq3@GCC_4.3.0 1:4.3
+ __mulusa3@GCC_4.3.0 1:4.3
+ __mulusq3@GCC_4.3.0 1:4.3
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __nedf2@GCC_3.0 1:4.1.1
+ __negda2@GCC_4.3.0 1:4.3
+ __negdf2@GCC_3.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negdq2@GCC_4.3.0 1:4.3
+ __negha2@GCC_4.3.0 1:4.3
+ __neghq2@GCC_4.3.0 1:4.3
+ __negqq2@GCC_4.3.0 1:4.3
+ __negsa2@GCC_4.3.0 1:4.3
+ __negsf2@GCC_3.0 1:4.1.1
+ __negsq2@GCC_4.3.0 1:4.3
+ __neguda2@GCC_4.3.0 1:4.3
+ __negudq2@GCC_4.3.0 1:4.3
+ __neguha2@GCC_4.3.0 1:4.3
+ __neguhq2@GCC_4.3.0 1:4.3
+ __neguqq2@GCC_4.3.0 1:4.3
+ __negusa2@GCC_4.3.0 1:4.3
+ __negusq2@GCC_4.3.0 1:4.3
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __nesf2@GCC_3.0 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __satfractdadq@GCC_4.3.0 1:4.3
+ __satfractdaha2@GCC_4.3.0 1:4.3
+ __satfractdahq@GCC_4.3.0 1:4.3
+ __satfractdaqq@GCC_4.3.0 1:4.3
+ __satfractdasa2@GCC_4.3.0 1:4.3
+ __satfractdasq@GCC_4.3.0 1:4.3
+ __satfractdauda@GCC_4.3.0 1:4.3
+ __satfractdaudq@GCC_4.3.0 1:4.3
+ __satfractdauha@GCC_4.3.0 1:4.3
+ __satfractdauhq@GCC_4.3.0 1:4.3
+ __satfractdauqq@GCC_4.3.0 1:4.3
+ __satfractdausa@GCC_4.3.0 1:4.3
+ __satfractdausq@GCC_4.3.0 1:4.3
+ __satfractdfda@GCC_4.3.0 1:4.3
+ __satfractdfdq@GCC_4.3.0 1:4.3
+ __satfractdfha@GCC_4.3.0 1:4.3
+ __satfractdfhq@GCC_4.3.0 1:4.3
+ __satfractdfqq@GCC_4.3.0 1:4.3
+ __satfractdfsa@GCC_4.3.0 1:4.3
+ __satfractdfsq@GCC_4.3.0 1:4.3
+ __satfractdfuda@GCC_4.3.0 1:4.3
+ __satfractdfudq@GCC_4.3.0 1:4.3
+ __satfractdfuha@GCC_4.3.0 1:4.3
+ __satfractdfuhq@GCC_4.3.0 1:4.3
+ __satfractdfuqq@GCC_4.3.0 1:4.3
+ __satfractdfusa@GCC_4.3.0 1:4.3
+ __satfractdfusq@GCC_4.3.0 1:4.3
+ __satfractdida@GCC_4.3.0 1:4.3
+ __satfractdidq@GCC_4.3.0 1:4.3
+ __satfractdiha@GCC_4.3.0 1:4.3
+ __satfractdihq@GCC_4.3.0 1:4.3
+ __satfractdiqq@GCC_4.3.0 1:4.3
+ __satfractdisa@GCC_4.3.0 1:4.3
+ __satfractdisq@GCC_4.3.0 1:4.3
+ __satfractdiuda@GCC_4.3.0 1:4.3
+ __satfractdiudq@GCC_4.3.0 1:4.3
+ __satfractdiuha@GCC_4.3.0 1:4.3
+ __satfractdiuhq@GCC_4.3.0 1:4.3
+ __satfractdiuqq@GCC_4.3.0 1:4.3
+ __satfractdiusa@GCC_4.3.0 1:4.3
+ __satfractdiusq@GCC_4.3.0 1:4.3
+ __satfractdqda@GCC_4.3.0 1:4.3
+ __satfractdqha@GCC_4.3.0 1:4.3
+ __satfractdqhq2@GCC_4.3.0 1:4.3
+ __satfractdqqq2@GCC_4.3.0 1:4.3
+ __satfractdqsa@GCC_4.3.0 1:4.3
+ __satfractdqsq2@GCC_4.3.0 1:4.3
+ __satfractdquda@GCC_4.3.0 1:4.3
+ __satfractdqudq@GCC_4.3.0 1:4.3
+ __satfractdquha@GCC_4.3.0 1:4.3
+ __satfractdquhq@GCC_4.3.0 1:4.3
+ __satfractdquqq@GCC_4.3.0 1:4.3
+ __satfractdqusa@GCC_4.3.0 1:4.3
+ __satfractdqusq@GCC_4.3.0 1:4.3
+ __satfracthada2@GCC_4.3.0 1:4.3
+ __satfracthadq@GCC_4.3.0 1:4.3
+ __satfracthahq@GCC_4.3.0 1:4.3
+ __satfracthaqq@GCC_4.3.0 1:4.3
+ __satfracthasa2@GCC_4.3.0 1:4.3
+ __satfracthasq@GCC_4.3.0 1:4.3
+ __satfracthauda@GCC_4.3.0 1:4.3
+ __satfracthaudq@GCC_4.3.0 1:4.3
+ __satfracthauha@GCC_4.3.0 1:4.3
+ __satfracthauhq@GCC_4.3.0 1:4.3
+ __satfracthauqq@GCC_4.3.0 1:4.3
+ __satfracthausa@GCC_4.3.0 1:4.3
+ __satfracthausq@GCC_4.3.0 1:4.3
+ __satfracthida@GCC_4.3.0 1:4.3
+ __satfracthidq@GCC_4.3.0 1:4.3
+ __satfracthiha@GCC_4.3.0 1:4.3
+ __satfracthihq@GCC_4.3.0 1:4.3
+ __satfracthiqq@GCC_4.3.0 1:4.3
+ __satfracthisa@GCC_4.3.0 1:4.3
+ __satfracthisq@GCC_4.3.0 1:4.3
+ __satfracthiuda@GCC_4.3.0 1:4.3
+ __satfracthiudq@GCC_4.3.0 1:4.3
+ __satfracthiuha@GCC_4.3.0 1:4.3
+ __satfracthiuhq@GCC_4.3.0 1:4.3
+ __satfracthiuqq@GCC_4.3.0 1:4.3
+ __satfracthiusa@GCC_4.3.0 1:4.3
+ __satfracthiusq@GCC_4.3.0 1:4.3
+ __satfracthqda@GCC_4.3.0 1:4.3
+ __satfracthqdq2@GCC_4.3.0 1:4.3
+ __satfracthqha@GCC_4.3.0 1:4.3
+ __satfracthqqq2@GCC_4.3.0 1:4.3
+ __satfracthqsa@GCC_4.3.0 1:4.3
+ __satfracthqsq2@GCC_4.3.0 1:4.3
+ __satfracthquda@GCC_4.3.0 1:4.3
+ __satfracthqudq@GCC_4.3.0 1:4.3
+ __satfracthquha@GCC_4.3.0 1:4.3
+ __satfracthquhq@GCC_4.3.0 1:4.3
+ __satfracthquqq@GCC_4.3.0 1:4.3
+ __satfracthqusa@GCC_4.3.0 1:4.3
+ __satfracthqusq@GCC_4.3.0 1:4.3
+ __satfractqida@GCC_4.3.0 1:4.3
+ __satfractqidq@GCC_4.3.0 1:4.3
+ __satfractqiha@GCC_4.3.0 1:4.3
+ __satfractqihq@GCC_4.3.0 1:4.3
+ __satfractqiqq@GCC_4.3.0 1:4.3
+ __satfractqisa@GCC_4.3.0 1:4.3
+ __satfractqisq@GCC_4.3.0 1:4.3
+ __satfractqiuda@GCC_4.3.0 1:4.3
+ __satfractqiudq@GCC_4.3.0 1:4.3
+ __satfractqiuha@GCC_4.3.0 1:4.3
+ __satfractqiuhq@GCC_4.3.0 1:4.3
+ __satfractqiuqq@GCC_4.3.0 1:4.3
+ __satfractqiusa@GCC_4.3.0 1:4.3
+ __satfractqiusq@GCC_4.3.0 1:4.3
+ __satfractqqda@GCC_4.3.0 1:4.3
+ __satfractqqdq2@GCC_4.3.0 1:4.3
+ __satfractqqha@GCC_4.3.0 1:4.3
+ __satfractqqhq2@GCC_4.3.0 1:4.3
+ __satfractqqsa@GCC_4.3.0 1:4.3
+ __satfractqqsq2@GCC_4.3.0 1:4.3
+ __satfractqquda@GCC_4.3.0 1:4.3
+ __satfractqqudq@GCC_4.3.0 1:4.3
+ __satfractqquha@GCC_4.3.0 1:4.3
+ __satfractqquhq@GCC_4.3.0 1:4.3
+ __satfractqquqq@GCC_4.3.0 1:4.3
+ __satfractqqusa@GCC_4.3.0 1:4.3
+ __satfractqqusq@GCC_4.3.0 1:4.3
+ __satfractsada2@GCC_4.3.0 1:4.3
+ __satfractsadq@GCC_4.3.0 1:4.3
+ __satfractsaha2@GCC_4.3.0 1:4.3
+ __satfractsahq@GCC_4.3.0 1:4.3
+ __satfractsaqq@GCC_4.3.0 1:4.3
+ __satfractsasq@GCC_4.3.0 1:4.3
+ __satfractsauda@GCC_4.3.0 1:4.3
+ __satfractsaudq@GCC_4.3.0 1:4.3
+ __satfractsauha@GCC_4.3.0 1:4.3
+ __satfractsauhq@GCC_4.3.0 1:4.3
+ __satfractsauqq@GCC_4.3.0 1:4.3
+ __satfractsausa@GCC_4.3.0 1:4.3
+ __satfractsausq@GCC_4.3.0 1:4.3
+ __satfractsfda@GCC_4.3.0 1:4.3
+ __satfractsfdq@GCC_4.3.0 1:4.3
+ __satfractsfha@GCC_4.3.0 1:4.3
+ __satfractsfhq@GCC_4.3.0 1:4.3
+ __satfractsfqq@GCC_4.3.0 1:4.3
+ __satfractsfsa@GCC_4.3.0 1:4.3
+ __satfractsfsq@GCC_4.3.0 1:4.3
+ __satfractsfuda@GCC_4.3.0 1:4.3
+ __satfractsfudq@GCC_4.3.0 1:4.3
+ __satfractsfuha@GCC_4.3.0 1:4.3
+ __satfractsfuhq@GCC_4.3.0 1:4.3
+ __satfractsfuqq@GCC_4.3.0 1:4.3
+ __satfractsfusa@GCC_4.3.0 1:4.3
+ __satfractsfusq@GCC_4.3.0 1:4.3
+ __satfractsida@GCC_4.3.0 1:4.3
+ __satfractsidq@GCC_4.3.0 1:4.3
+ __satfractsiha@GCC_4.3.0 1:4.3
+ __satfractsihq@GCC_4.3.0 1:4.3
+ __satfractsiqq@GCC_4.3.0 1:4.3
+ __satfractsisa@GCC_4.3.0 1:4.3
+ __satfractsisq@GCC_4.3.0 1:4.3
+ __satfractsiuda@GCC_4.3.0 1:4.3
+ __satfractsiudq@GCC_4.3.0 1:4.3
+ __satfractsiuha@GCC_4.3.0 1:4.3
+ __satfractsiuhq@GCC_4.3.0 1:4.3
+ __satfractsiuqq@GCC_4.3.0 1:4.3
+ __satfractsiusa@GCC_4.3.0 1:4.3
+ __satfractsiusq@GCC_4.3.0 1:4.3
+ __satfractsqda@GCC_4.3.0 1:4.3
+ __satfractsqdq2@GCC_4.3.0 1:4.3
+ __satfractsqha@GCC_4.3.0 1:4.3
+ __satfractsqhq2@GCC_4.3.0 1:4.3
+ __satfractsqqq2@GCC_4.3.0 1:4.3
+ __satfractsqsa@GCC_4.3.0 1:4.3
+ __satfractsquda@GCC_4.3.0 1:4.3
+ __satfractsqudq@GCC_4.3.0 1:4.3
+ __satfractsquha@GCC_4.3.0 1:4.3
+ __satfractsquhq@GCC_4.3.0 1:4.3
+ __satfractsquqq@GCC_4.3.0 1:4.3
+ __satfractsqusa@GCC_4.3.0 1:4.3
+ __satfractsqusq@GCC_4.3.0 1:4.3
+ __satfractudada@GCC_4.3.0 1:4.3
+ __satfractudadq@GCC_4.3.0 1:4.3
+ __satfractudaha@GCC_4.3.0 1:4.3
+ __satfractudahq@GCC_4.3.0 1:4.3
+ __satfractudaqq@GCC_4.3.0 1:4.3
+ __satfractudasa@GCC_4.3.0 1:4.3
+ __satfractudasq@GCC_4.3.0 1:4.3
+ __satfractudaudq@GCC_4.3.0 1:4.3
+ __satfractudauha2@GCC_4.3.0 1:4.3
+ __satfractudauhq@GCC_4.3.0 1:4.3
+ __satfractudauqq@GCC_4.3.0 1:4.3
+ __satfractudausa2@GCC_4.3.0 1:4.3
+ __satfractudausq@GCC_4.3.0 1:4.3
+ __satfractudqda@GCC_4.3.0 1:4.3
+ __satfractudqdq@GCC_4.3.0 1:4.3
+ __satfractudqha@GCC_4.3.0 1:4.3
+ __satfractudqhq@GCC_4.3.0 1:4.3
+ __satfractudqqq@GCC_4.3.0 1:4.3
+ __satfractudqsa@GCC_4.3.0 1:4.3
+ __satfractudqsq@GCC_4.3.0 1:4.3
+ __satfractudquda@GCC_4.3.0 1:4.3
+ __satfractudquha@GCC_4.3.0 1:4.3
+ __satfractudquhq2@GCC_4.3.0 1:4.3
+ __satfractudquqq2@GCC_4.3.0 1:4.3
+ __satfractudqusa@GCC_4.3.0 1:4.3
+ __satfractudqusq2@GCC_4.3.0 1:4.3
+ __satfractuhada@GCC_4.3.0 1:4.3
+ __satfractuhadq@GCC_4.3.0 1:4.3
+ __satfractuhaha@GCC_4.3.0 1:4.3
+ __satfractuhahq@GCC_4.3.0 1:4.3
+ __satfractuhaqq@GCC_4.3.0 1:4.3
+ __satfractuhasa@GCC_4.3.0 1:4.3
+ __satfractuhasq@GCC_4.3.0 1:4.3
+ __satfractuhauda2@GCC_4.3.0 1:4.3
+ __satfractuhaudq@GCC_4.3.0 1:4.3
+ __satfractuhauhq@GCC_4.3.0 1:4.3
+ __satfractuhauqq@GCC_4.3.0 1:4.3
+ __satfractuhausa2@GCC_4.3.0 1:4.3
+ __satfractuhausq@GCC_4.3.0 1:4.3
+ __satfractuhqda@GCC_4.3.0 1:4.3
+ __satfractuhqdq@GCC_4.3.0 1:4.3
+ __satfractuhqha@GCC_4.3.0 1:4.3
+ __satfractuhqhq@GCC_4.3.0 1:4.3
+ __satfractuhqqq@GCC_4.3.0 1:4.3
+ __satfractuhqsa@GCC_4.3.0 1:4.3
+ __satfractuhqsq@GCC_4.3.0 1:4.3
+ __satfractuhquda@GCC_4.3.0 1:4.3
+ __satfractuhqudq2@GCC_4.3.0 1:4.3
+ __satfractuhquha@GCC_4.3.0 1:4.3
+ __satfractuhquqq2@GCC_4.3.0 1:4.3
+ __satfractuhqusa@GCC_4.3.0 1:4.3
+ __satfractuhqusq2@GCC_4.3.0 1:4.3
+ __satfractunsdida@GCC_4.3.0 1:4.3
+ __satfractunsdidq@GCC_4.3.0 1:4.3
+ __satfractunsdiha@GCC_4.3.0 1:4.3
+ __satfractunsdihq@GCC_4.3.0 1:4.3
+ __satfractunsdiqq@GCC_4.3.0 1:4.3
+ __satfractunsdisa@GCC_4.3.0 1:4.3
+ __satfractunsdisq@GCC_4.3.0 1:4.3
+ __satfractunsdiuda@GCC_4.3.0 1:4.3
+ __satfractunsdiudq@GCC_4.3.0 1:4.3
+ __satfractunsdiuha@GCC_4.3.0 1:4.3
+ __satfractunsdiuhq@GCC_4.3.0 1:4.3
+ __satfractunsdiuqq@GCC_4.3.0 1:4.3
+ __satfractunsdiusa@GCC_4.3.0 1:4.3
+ __satfractunsdiusq@GCC_4.3.0 1:4.3
+ __satfractunshida@GCC_4.3.0 1:4.3
+ __satfractunshidq@GCC_4.3.0 1:4.3
+ __satfractunshiha@GCC_4.3.0 1:4.3
+ __satfractunshihq@GCC_4.3.0 1:4.3
+ __satfractunshiqq@GCC_4.3.0 1:4.3
+ __satfractunshisa@GCC_4.3.0 1:4.3
+ __satfractunshisq@GCC_4.3.0 1:4.3
+ __satfractunshiuda@GCC_4.3.0 1:4.3
+ __satfractunshiudq@GCC_4.3.0 1:4.3
+ __satfractunshiuha@GCC_4.3.0 1:4.3
+ __satfractunshiuhq@GCC_4.3.0 1:4.3
+ __satfractunshiuqq@GCC_4.3.0 1:4.3
+ __satfractunshiusa@GCC_4.3.0 1:4.3
+ __satfractunshiusq@GCC_4.3.0 1:4.3
+ __satfractunsqida@GCC_4.3.0 1:4.3
+ __satfractunsqidq@GCC_4.3.0 1:4.3
+ __satfractunsqiha@GCC_4.3.0 1:4.3
+ __satfractunsqihq@GCC_4.3.0 1:4.3
+ __satfractunsqiqq@GCC_4.3.0 1:4.3
+ __satfractunsqisa@GCC_4.3.0 1:4.3
+ __satfractunsqisq@GCC_4.3.0 1:4.3
+ __satfractunsqiuda@GCC_4.3.0 1:4.3
+ __satfractunsqiudq@GCC_4.3.0 1:4.3
+ __satfractunsqiuha@GCC_4.3.0 1:4.3
+ __satfractunsqiuhq@GCC_4.3.0 1:4.3
+ __satfractunsqiuqq@GCC_4.3.0 1:4.3
+ __satfractunsqiusa@GCC_4.3.0 1:4.3
+ __satfractunsqiusq@GCC_4.3.0 1:4.3
+ __satfractunssida@GCC_4.3.0 1:4.3
+ __satfractunssidq@GCC_4.3.0 1:4.3
+ __satfractunssiha@GCC_4.3.0 1:4.3
+ __satfractunssihq@GCC_4.3.0 1:4.3
+ __satfractunssiqq@GCC_4.3.0 1:4.3
+ __satfractunssisa@GCC_4.3.0 1:4.3
+ __satfractunssisq@GCC_4.3.0 1:4.3
+ __satfractunssiuda@GCC_4.3.0 1:4.3
+ __satfractunssiudq@GCC_4.3.0 1:4.3
+ __satfractunssiuha@GCC_4.3.0 1:4.3
+ __satfractunssiuhq@GCC_4.3.0 1:4.3
+ __satfractunssiuqq@GCC_4.3.0 1:4.3
+ __satfractunssiusa@GCC_4.3.0 1:4.3
+ __satfractunssiusq@GCC_4.3.0 1:4.3
+ __satfractuqqda@GCC_4.3.0 1:4.3
+ __satfractuqqdq@GCC_4.3.0 1:4.3
+ __satfractuqqha@GCC_4.3.0 1:4.3
+ __satfractuqqhq@GCC_4.3.0 1:4.3
+ __satfractuqqqq@GCC_4.3.0 1:4.3
+ __satfractuqqsa@GCC_4.3.0 1:4.3
+ __satfractuqqsq@GCC_4.3.0 1:4.3
+ __satfractuqquda@GCC_4.3.0 1:4.3
+ __satfractuqqudq2@GCC_4.3.0 1:4.3
+ __satfractuqquha@GCC_4.3.0 1:4.3
+ __satfractuqquhq2@GCC_4.3.0 1:4.3
+ __satfractuqqusa@GCC_4.3.0 1:4.3
+ __satfractuqqusq2@GCC_4.3.0 1:4.3
+ __satfractusada@GCC_4.3.0 1:4.3
+ __satfractusadq@GCC_4.3.0 1:4.3
+ __satfractusaha@GCC_4.3.0 1:4.3
+ __satfractusahq@GCC_4.3.0 1:4.3
+ __satfractusaqq@GCC_4.3.0 1:4.3
+ __satfractusasa@GCC_4.3.0 1:4.3
+ __satfractusasq@GCC_4.3.0 1:4.3
+ __satfractusauda2@GCC_4.3.0 1:4.3
+ __satfractusaudq@GCC_4.3.0 1:4.3
+ __satfractusauha2@GCC_4.3.0 1:4.3
+ __satfractusauhq@GCC_4.3.0 1:4.3
+ __satfractusauqq@GCC_4.3.0 1:4.3
+ __satfractusausq@GCC_4.3.0 1:4.3
+ __satfractusqda@GCC_4.3.0 1:4.3
+ __satfractusqdq@GCC_4.3.0 1:4.3
+ __satfractusqha@GCC_4.3.0 1:4.3
+ __satfractusqhq@GCC_4.3.0 1:4.3
+ __satfractusqqq@GCC_4.3.0 1:4.3
+ __satfractusqsa@GCC_4.3.0 1:4.3
+ __satfractusqsq@GCC_4.3.0 1:4.3
+ __satfractusquda@GCC_4.3.0 1:4.3
+ __satfractusqudq2@GCC_4.3.0 1:4.3
+ __satfractusquha@GCC_4.3.0 1:4.3
+ __satfractusquhq2@GCC_4.3.0 1:4.3
+ __satfractusquqq2@GCC_4.3.0 1:4.3
+ __satfractusqusa@GCC_4.3.0 1:4.3
+ __ssaddda3@GCC_4.3.0 1:4.3
+ __ssadddq3@GCC_4.3.0 1:4.3
+ __ssaddha3@GCC_4.3.0 1:4.3
+ __ssaddhq3@GCC_4.3.0 1:4.3
+ __ssaddqq3@GCC_4.3.0 1:4.3
+ __ssaddsa3@GCC_4.3.0 1:4.3
+ __ssaddsq3@GCC_4.3.0 1:4.3
+ __ssashlda3@GCC_4.3.0 1:4.3
+ __ssashldq3@GCC_4.3.0 1:4.3
+ __ssashlha3@GCC_4.3.0 1:4.3
+ __ssashlhq3@GCC_4.3.0 1:4.3
+ __ssashlqq3@GCC_4.3.0 1:4.3
+ __ssashlsa3@GCC_4.3.0 1:4.3
+ __ssashlsq3@GCC_4.3.0 1:4.3
+ __ssdivda3@GCC_4.3.0 1:4.3
+ __ssdivdq3@GCC_4.3.0 1:4.3
+ __ssdivha3@GCC_4.3.0 1:4.3
+ __ssdivhq3@GCC_4.3.0 1:4.3
+ __ssdivqq3@GCC_4.3.0 1:4.3
+ __ssdivsa3@GCC_4.3.0 1:4.3
+ __ssdivsq3@GCC_4.3.0 1:4.3
+ __ssmulda3@GCC_4.3.0 1:4.3
+ __ssmuldq3@GCC_4.3.0 1:4.3
+ __ssmulha3@GCC_4.3.0 1:4.3
+ __ssmulhq3@GCC_4.3.0 1:4.3
+ __ssmulqq3@GCC_4.3.0 1:4.3
+ __ssmulsa3@GCC_4.3.0 1:4.3
+ __ssmulsq3@GCC_4.3.0 1:4.3
+ __ssnegda2@GCC_4.3.0 1:4.3
+ __ssnegdq2@GCC_4.3.0 1:4.3
+ __ssnegha2@GCC_4.3.0 1:4.3
+ __ssneghq2@GCC_4.3.0 1:4.3
+ __ssnegqq2@GCC_4.3.0 1:4.3
+ __ssnegsa2@GCC_4.3.0 1:4.3
+ __ssnegsq2@GCC_4.3.0 1:4.3
+ __sssubda3@GCC_4.3.0 1:4.3
+ __sssubdq3@GCC_4.3.0 1:4.3
+ __sssubha3@GCC_4.3.0 1:4.3
+ __sssubhq3@GCC_4.3.0 1:4.3
+ __sssubqq3@GCC_4.3.0 1:4.3
+ __sssubsa3@GCC_4.3.0 1:4.3
+ __sssubsq3@GCC_4.3.0 1:4.3
+ __subda3@GCC_4.3.0 1:4.3
+ __subdf3@GCC_3.0 1:4.1.1
+ __subdq3@GCC_4.3.0 1:4.3
+ __subha3@GCC_4.3.0 1:4.3
+ __subhq3@GCC_4.3.0 1:4.3
+ __subqq3@GCC_4.3.0 1:4.3
+ __subsa3@GCC_4.3.0 1:4.3
+ __subsf3@GCC_3.0 1:4.1.1
+ __subsq3@GCC_4.3.0 1:4.3
+ __subuda3@GCC_4.3.0 1:4.3
+ __subudq3@GCC_4.3.0 1:4.3
+ __subuha3@GCC_4.3.0 1:4.3
+ __subuhq3@GCC_4.3.0 1:4.3
+ __subuqq3@GCC_4.3.0 1:4.3
+ __subusa3@GCC_4.3.0 1:4.3
+ __subusq3@GCC_4.3.0 1:4.3
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __sync_add_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_add_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_add_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_and_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_and_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_and_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_bool_compare_and_swap_1@GCC_4.4.0 1:4.4.0
+ __sync_bool_compare_and_swap_2@GCC_4.4.0 1:4.4.0
+ __sync_bool_compare_and_swap_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_add_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_add_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_add_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_and_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_and_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_and_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_nand_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_nand_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_nand_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_or_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_or_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_or_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_sub_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_sub_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_sub_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_xor_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_xor_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_xor_4@GCC_4.4.0 1:4.4.0
+ __sync_lock_test_and_set_1@GCC_4.4.0 1:4.4.0
+ __sync_lock_test_and_set_2@GCC_4.4.0 1:4.4.0
+ __sync_lock_test_and_set_4@GCC_4.4.0 1:4.4.0
+ __sync_nand_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_nand_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_nand_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_or_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_or_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_or_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_sub_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_sub_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_sub_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_synchronize@GCC_4.4.0 1:4.4.0
+ __sync_val_compare_and_swap_1@GCC_4.4.0 1:4.4.0
+ __sync_val_compare_and_swap_2@GCC_4.4.0 1:4.4.0
+ __sync_val_compare_and_swap_4@GCC_4.4.0 1:4.4.0
+ __sync_xor_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_xor_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_xor_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __truncdfsf2@GCC_3.0 1:4.1.1
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __udivuda3@GCC_4.3.0 1:4.3
+ __udivudq3@GCC_4.3.0 1:4.3
+ __udivuha3@GCC_4.3.0 1:4.3
+ __udivuhq3@GCC_4.3.0 1:4.3
+ __udivuqq3@GCC_4.3.0 1:4.3
+ __udivusa3@GCC_4.3.0 1:4.3
+ __udivusq3@GCC_4.3.0 1:4.3
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unorddf2@GCC_3.3.4 1:4.1.1
+ __unordsf2@GCC_3.3.4 1:4.1.1
+ __usadduda3@GCC_4.3.0 1:4.3
+ __usaddudq3@GCC_4.3.0 1:4.3
+ __usadduha3@GCC_4.3.0 1:4.3
+ __usadduhq3@GCC_4.3.0 1:4.3
+ __usadduqq3@GCC_4.3.0 1:4.3
+ __usaddusa3@GCC_4.3.0 1:4.3
+ __usaddusq3@GCC_4.3.0 1:4.3
+ __usashluda3@GCC_4.3.0 1:4.3
+ __usashludq3@GCC_4.3.0 1:4.3
+ __usashluha3@GCC_4.3.0 1:4.3
+ __usashluhq3@GCC_4.3.0 1:4.3
+ __usashluqq3@GCC_4.3.0 1:4.3
+ __usashlusa3@GCC_4.3.0 1:4.3
+ __usashlusq3@GCC_4.3.0 1:4.3
+ __usdivuda3@GCC_4.3.0 1:4.3
+ __usdivudq3@GCC_4.3.0 1:4.3
+ __usdivuha3@GCC_4.3.0 1:4.3
+ __usdivuhq3@GCC_4.3.0 1:4.3
+ __usdivuqq3@GCC_4.3.0 1:4.3
+ __usdivusa3@GCC_4.3.0 1:4.3
+ __usdivusq3@GCC_4.3.0 1:4.3
+ __usmuluda3@GCC_4.3.0 1:4.3
+ __usmuludq3@GCC_4.3.0 1:4.3
+ __usmuluha3@GCC_4.3.0 1:4.3
+ __usmuluhq3@GCC_4.3.0 1:4.3
+ __usmuluqq3@GCC_4.3.0 1:4.3
+ __usmulusa3@GCC_4.3.0 1:4.3
+ __usmulusq3@GCC_4.3.0 1:4.3
+ __usneguda2@GCC_4.3.0 1:4.3
+ __usnegudq2@GCC_4.3.0 1:4.3
+ __usneguha2@GCC_4.3.0 1:4.3
+ __usneguhq2@GCC_4.3.0 1:4.3
+ __usneguqq2@GCC_4.3.0 1:4.3
+ __usnegusa2@GCC_4.3.0 1:4.3
+ __usnegusq2@GCC_4.3.0 1:4.3
+ __ussubuda3@GCC_4.3.0 1:4.3
+ __ussubudq3@GCC_4.3.0 1:4.3
+ __ussubuha3@GCC_4.3.0 1:4.3
+ __ussubuhq3@GCC_4.3.0 1:4.3
+ __ussubuqq3@GCC_4.3.0 1:4.3
+ __ussubusa3@GCC_4.3.0 1:4.3
+ __ussubusq3@GCC_4.3.0 1:4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcj-common.preinst
+++ gdc-4.4-1.063-4.4.7/debian/libgcj-common.preinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    upgrade|install)
+	if [ -n "$2" ] && [ -h /usr/share/doc/libgcj-common ] \
+	   && dpkg --compare-versions "$2" lt 1:4.0.2-10
+	then
+	    rm -f /usr/share/doc/libgcj-common
+	fi
+esac
+
+#DEBHELPER#
--- gdc-4.4-1.063-4.4.7.orig/debian/libgomp1.symbols
+++ gdc-4.4-1.063-4.4.7/debian/libgomp1.symbols
@@ -0,0 +1,4 @@
+libgomp.so.1 libgomp1 #MINVER#
+#include "libgomp1.symbols.common"
+ GOMP_atomic_end@GOMP_1.0 4.2.1
+ GOMP_atomic_start@GOMP_1.0 4.2.1
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.ldbl.32bit.s390
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.ldbl.32bit.s390
@@ -0,0 +1,283 @@
+ CXXABI_LDBL_1.3@CXXABI_LDBL_1.3 4.2.1
+ GLIBCXX_LDBL_3.4.10@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ GLIBCXX_LDBL_3.4.7@GLIBCXX_LDBL_3.4.7 4.2.1
+ GLIBCXX_LDBL_3.4@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt3tr14hashIgEclEg@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIgEclEg@GLIBCXX_LDBL_3.4.10 4.3.0~rc2
+ _ZGVNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZGVNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE16_M_extract_floatES4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8__do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16_M_extract_floatES4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRPv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRf@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRj@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRt@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8__do_getES4_S4_RSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcmcRSt8ios_basePcSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES4_S4_RSt8ios_basecT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcmcS7_PcS8_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES4_S4_RSt8ios_baseccT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIgEES4_S4_RSt8ios_baseccT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_RSt8ios_basecy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEciRSt8ios_basePcPKcRi@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_RSt8ios_basecy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE8__do_putES4_RSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcmwRSt8ios_basePwSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES4_S4_RSt8ios_basewT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcmwPKwPwSA_Ri@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES4_S4_RSt8ios_basewcT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIgEES4_S4_RSt8ios_basewcT_@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_RSt8ios_basewy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwiRSt8ios_basePwPKwRi@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewPKv@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewb@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewl@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewm@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewx@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_RSt8ios_basewy@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE8__do_putES4_RSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8__do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8__do_getES4_S4_bRSt8ios_baseRSt12_Ios_IostateRd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_bRSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE3putES4_bRSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_bRSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6do_putES4_bRSt8ios_basecg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE8__do_putES4_bRSt8ios_basecd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES4_S4_RSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES4_S4_RSt8ios_basecRKSs@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_bRSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE3putES4_bRSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_bRSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_bRSt8ios_basewg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE8__do_putES4_bRSt8ios_basewd@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSi10_M_extractIgEERSiRT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSirsERg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSo9_M_insertIgEERSoT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSolsEg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIgEERS2_RT_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIgEERS2_T_@GLIBCXX_LDBL_3.4.7 4.2.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEg@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10has_denormE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10is_boundedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE10is_integerE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE11round_styleE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12has_infinityE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12max_exponentE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE12min_exponentE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE13has_quiet_NaNE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14is_specializedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14max_exponent10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE14min_exponent10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE15has_denorm_lossE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE15tinyness_beforeE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE17has_signaling_NaNE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE5radixE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE5trapsE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE6digitsE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE8digits10E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE8is_exactE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_iec559E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_moduloE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt14numeric_limitsIgE9is_signedE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt14__convert_to_vIgEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9has_facetINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEEbRKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZSt9use_facetINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEEERKT_RKSt6locale@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStlsIgcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStlsIgwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStrsIgcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZStrsIgwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTIPKg@CXXABI_LDBL_1.3 4.2.1
+ _ZTIPg@CXXABI_LDBL_1.3 4.2.1
+ _ZTIg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTSPKg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSPg@CXXABI_LDBL_1.3 4.2.1
+ _ZTSg@CXXABI_LDBL_1.3 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@GLIBCXX_LDBL_3.4 4.2.1
+ _ZTVNSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@GLIBCXX_LDBL_3.4 4.2.1
--- gdc-4.4-1.063-4.4.7.orig/debian/libgccLC.postinst
+++ gdc-4.4-1.063-4.4.7/debian/libgccLC.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/libgcc@LC@
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	    rm -rf $docdir
+	    ln -s gcc-@BV@-base $docdir
+	fi
+esac
+
+#DEBHELPER#
--- gdc-4.4-1.063-4.4.7.orig/debian/rules2
+++ gdc-4.4-1.063-4.4.7/debian/rules2
@@ -0,0 +1,2177 @@
+#! /usr/bin/make -f
+# -*- makefile -*-
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+.SUFFIXES:
+
+include debian/rules.defs
+include debian/rules.parameters
+
+# some tools
+SHELL	= /bin/bash -e		# brace expansion in rules file
+IR	= install -m 644	# Install regular file
+IP	= install -m 755	# Install program
+IS	= install -m 755	# Install script
+
+#number of jobs to run for build
+ifeq ($(USE_NJOBS),no)
+  NJOBS :=
+  USE_CPUS := 1
+else
+  ifeq ($(with_java),yes)
+    MEM_PER_CPU = 192
+  else
+    MEM_PER_CPU = 128
+  endif
+  NUM_CPUS := $(shell if echo $(USE_NJOBS) | grep -q -E '^[0-9]+$$'; \
+			then echo $(USE_NJOBS); \
+			else getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1; fi)
+  USE_CPUS := $(shell mt=`awk '/^MemTotal/ { print $$2 }' /proc/meminfo`; \
+			awk -vn=$(NUM_CPUS) -vmt=$$mt -vm=$(MEM_PER_CPU) \
+				'END { mt/=1024; n2 = int(mt/m); print n==1 ? 1 : n2<n+1 ? n2 : n+1}' < /dev/null)
+  ifneq (,$(strip $(USE_CPUS)))
+    NJOBS := -j $(USE_CPUS)
+  endif
+endif
+
+# Support parallel=<n> in DEB_BUILD_OPTIONS (see #209008)
+ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
+  NJOBS := -j $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
+endif
+
+ifeq ($(with_pascal),yes)
+  NJOBS :=
+endif
+
+# kernel-specific ulimit hack
+ifeq ($(findstring linux,$(DEB_HOST_GNU_SYSTEM)),linux)
+  ULIMIT_M =  if [ -e /proc/meminfo ]; then \
+	    m=`awk '/^((Mem|Swap)Free|Cached)/{m+=$$2}END{print int(m*.9)}' \
+		/proc/meminfo`; \
+	  else \
+	    m=`vmstat --free --swap-free --kilobytes|awk '{m+=$$2}END{print int(m*.9)}'`; \
+	  fi; \
+	  ulimit -m $$m; \
+	  echo "Limited memory for test runs to `ulimit -m`kB"
+else
+  ULIMIT_M = true
+endif
+
+ifeq ($(locale_data),generate)
+  SET_LOCPATH = LOCPATH=$(PWD)/locales
+endif
+
+SET_PATH = PATH=$(PWD)/bin:/usr/$(libdir)/gcc/bin:$$PATH
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  ifneq (,$(findstring arm-linux-gnueabi,$(DEB_TARGET_GNU_TYPE)))
+    SET_PATH = PATH=/usr/lib/gcc-snapshot/bin:$(PWD)/bin:/usr/$(libdir)/gcc/bin:$$PATH
+  endif
+endif
+
+# the recipient for the test summaries. Send with: debian/rules mail-summary
+S_EMAIL = gcc@packages.debian.org gcc-testresults@gcc.gnu.org
+
+# build not yet prepared to take variables from the environment
+define unsetenv
+  unexport $(1)
+  $(1) =
+endef
+$(foreach v, CPPFLAGS CFLAGS CXXFLAGS FFLAGS LDFLAGS, $(if $(filter environment,$(origin $(v))),$(eval $(call unsetenv, $(v)))))
+
+ifeq ($(REVERSE_CROSS),yes)
+  CC	=
+else
+  CC	= $(if $(filter yes,$(with_ada)),gnatgcc,gcc)
+endif
+
+ifneq ($(distribution),Ubuntu)
+  ifneq (,$(filter $(DEB_TARGET_ARCH), arm armel armhf mips mipsel))
+    STAGE1_CFLAGS = -g -O2
+  endif
+endif
+
+ifeq ($(with_d),yes)
+  CFLAGS  += -std=gnu99
+  LDFLAGS += -lm
+endif
+
+ifeq ($(with_ssp_default),yes)
+  STAGE1_CFLAGS	= -g
+  BOOT_CFLAGS	= -g -O2
+  LIBCFLAGS		= -g -O2
+  LIBCXXFLAGS	= -g -O2 -fno-implicit-templates
+  # Only use -fno-stack-protector when known to the stage1 compiler.
+  cc-fno-stack-protector := $(shell if $(CC) $(CFLAGS) -fno-stack-protector \
+                             -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \
+							 then echo "-fno-stack-protector"; fi;)
+  $(foreach var,STAGE1_CFLAGS BOOT_CFLAGS LIBCFLAGS LIBCXXFLAGS,$(eval \
+    $(var) += $(cc-fno-stack-protector)))
+endif
+
+ifeq ($(DEB_CROSS),yes)
+  CFLAGS	= -g -O2
+endif
+
+ifneq (,$(findstring static,$(DEB_BUILD_OPTIONS)))
+  LDFLAGS	+= -static
+endif
+
+CFLAGS_TO_PASS = \
+	$(if $(CFLAGS),CFLAGS="$(CFLAGS)") \
+	$(if $(BOOT_CFLAGS),BOOT_CFLAGS="$(BOOT_CFLAGS)") \
+	$(if $(LIBCFLAGS),LIBCFLAGS="$(LIBCFLAGS)") \
+	$(if $(LIBCXXFLAGS),LIBCXXFLAGS="$(LIBCXXFLAGS)")
+LDFLAGS_TO_PASS = \
+	$(if $(LDFLAGS),LDFLAGS="$(LDFLAGS)")
+STAGE1_CFLAGS_TO_PASS = \
+	$(if $(STAGE1_CFLAGS),STAGE1_CFLAGS="$(STAGE1_CFLAGS)")
+
+docdir		= usr/share/doc
+
+CONFARGS = -v \
+	--with-pkgversion='$(distribution)$(if $(with_linaro_branch),/Linaro)___$(DEB_VERSION)' \
+	--with-bugurl='file:///usr/share/doc/$(PKGSOURCE)/README.Bugs'
+
+CONFARGS += \
+	--enable-languages=$(subst $(SPACE),$(COMMA),$(enabled_languages)) \
+	--prefix=/$(PF)
+
+ifeq ($(versioned_packages),yes)
+  CONFARGS += --program-suffix=-$(BASE_VERSION)
+endif
+
+ifdef DEB_STAGE
+  CONFARGS += \
+	--disable-libgomp  \
+	--disable-libmudflap  \
+	--disable-libssp \
+	--disable-multiarch \
+	--disable-multilib  \
+	--disable-threads \
+	--libexecdir=/$(libexecdir) \
+	--with-build-sysroot=$(with_build_sysroot) \
+	--with-sysroot=$(with_sysroot)
+
+  ifeq ($(DEB_STAGE),stage1)
+    CONFARGS += \
+	--disable-shared  \
+	--with-newlib  \
+	--without-headers
+  else
+    # stage2
+    CONFARGS += \
+	--enable-shared
+  endif
+else
+  CONFARGS += \
+	--enable-shared \
+	--enable-linker-build-id \
+	--with-system-zlib \
+
+ifneq ($(PKGSOURCE),gcc-snapshot)
+  CONFARGS += \
+        --libexecdir=/$(libexecdir) \
+        --without-included-gettext \
+        --enable-threads=posix \
+	--with-gxx-include-dir=/$(cxx_inc_dir) \
+	--libdir=/$(PF)/$(configured_libdir)
+endif
+
+ifneq ($(with_cpp),yes)
+  CONFARGS += --disable-cpp
+endif
+
+ifeq ($(with_nls),yes)
+  CONFARGS += --enable-nls
+else
+  CONFARGS += --disable-nls
+endif
+
+ifneq ($(with_bootstrap),)
+  CONFARGS += --enable-bootstrap=$(with_bootstrap)
+endif
+
+ifneq ($(with_sysroot),)
+  CONFARGS += --with-sysroot=$(with_sysroot)
+endif
+ifneq ($(with_build_sysroot),)
+  CONFARGS += --with-build-sysroot=$(with_build_sysroot)
+endif
+
+ifeq ($(force_gnu_locales),yes)
+  CONFARGS += --enable-clocale=gnu
+endif
+
+ifeq ($(with_cxx)-$(with_debug),yes-yes)
+  CONFARGS += --enable-libstdcxx-debug
+endif
+
+ifneq ($(with_ssp),yes)
+  CONFARGS += --disable-libssp
+endif
+
+ifneq ($(with_mudflap),yes)
+  CONFARGS += --disable-libmudflap
+endif
+
+ifneq ($(with_gomp),yes)
+  CONFARGS += --disable-libgomp
+endif
+
+ifeq ($(with_plugins),yes)
+  CONFARGS += --enable-plugin
+endif
+
+ifeq ($(with_gold),yes)
+  CONFARGS += --enable-gold
+endif
+
+jvm_name_short = java-1.5.0-gcj-$(BASE_VERSION)$(if $(findstring snap,$(PKGSOURCE)),-snap)
+jvm_name_long = $(jvm_name_short)-1.5.0.0
+
+ifeq ($(with_java),yes)
+  CONFARGS += --disable-browser-plugin
+  ifeq ($(with_java_maintainer_mode),yes)
+    CONFARGS += --enable-java-maintainer-mode
+  endif
+  ifeq ($(with_java_biarch_awt),yes)
+    CONFARGS += --enable-java-awt=$(subst $(SPACE),$(COMMA),$(foreach p,$(java_awt_peers),$(p)-default))
+  else
+    CONFARGS += --enable-java-awt=$(subst $(SPACE),$(COMMA),$(foreach p,$(java_awt_peers),$(p)))
+  endif
+  ifneq (,$(findstring gtk,$(java_awt_peers)))
+    CONFARGS += --enable-gtk-cairo
+  endif
+  jvm_dir = /usr/lib/jvm/$(jvm_name_short)
+  CONFARGS += --with-java-home=/$(jvm_dir)/jre
+  CONFARGS += --enable-java-home \
+	--with-jvm-root-dir=/$(jvm_dir) \
+	--with-jvm-jar-dir=/usr/lib/jvm-exports/$(jvm_name_short)
+  CONFARGS += --with-arch-directory=$(java_cpu)
+  CONFARGS += --with-ecj-jar=/usr/share/java/eclipse-ecj.jar
+endif
+
+ifeq ($(with_gcj),yes)
+  ifeq ($(DEB_HOST_GNU_CPU),m32r)
+    CONFARGS += --enable-libgcj
+  endif
+endif
+
+ifeq ($(with_objc)-$(with_objc_gc),yes-yes)
+  CONFARGS += --enable-objc-gc
+endif
+
+ifneq (,$(filter $(DEB_TARGET_GNU_TYPE), i486-linux-gnu i586-linux-gnu i686-linux-gnu))
+    ifeq ($(biarch64),yes)
+      CONFARGS += --enable-targets=all
+    endif
+endif
+
+ifneq (,$(filter $(DEB_TARGET_GNU_TYPE), x86_64-linux-gnu x86_64-kfreebsd-gnu s390x-linux-gnu))
+    ifneq ($(biarch32),yes)
+      CONFARGS += --disable-multilib
+    endif
+endif
+
+ifneq (,$(filter $(DEB_TARGET_GNU_TYPE), powerpc-linux-gnu powerpc-linux-gnuspe))
+    CONFARGS += --enable-secureplt
+    ifeq ($(biarch64),yes)
+      CONFARGS += --disable-softfloat \
+	--enable-targets=powerpc-linux,powerpc64-linux --with-cpu=default32
+    else
+      CONFARGS += --disable-multilib
+    endif
+endif
+
+ifeq ($(REVERSE_CROSS),yes)
+  # FIXME: requires ppl and cloog headers for the target
+  CONFARGS += --without-ppl
+  # FIXME: build currently fails build the precompiled headers
+  CONFARGS += --disable-libstdcxx-pch
+endif
+endif # !DEB_STAGE
+
+ifeq ($(findstring powerpcspe,$(DEB_TARGET_ARCH)),powerpcspe)
+  CONFARGS += --with-cpu=8548 --enable-e500_double --with-long-double-128
+endif
+
+ifneq (,$(findstring softfloat,$(DEB_TARGET_GNU_CPU)))
+  CONFARGS += --with-float=soft
+endif
+
+ifneq (,$(findstring arm-vfp,$(DEB_TARGET_GNU_CPU)))
+  CONFARGS += --with-fpu=vfp
+endif
+
+# FIXME: this should be again used when the triplet is again one
+# ifneq (,$(findstring arm-linux-gnueabi,$(DEB_TARGET_GNU_TYPE)))
+ifneq (,$(findstring $(DEB_TARGET_GNU_CPU),arm armel armhf))
+  CONFARGS += --disable-sjlj-exceptions
+  # FIXME: libjava is not ported for thumb, this hack only works for
+  # separate gcj builds
+  ifeq ($(distribution),Ubuntu)
+    ifneq (,$(findstring gcj,$(PKGSOURCE)))
+      CONFARGS += --with-arch=armv6
+    else
+      CONFARGS += --with-arch=armv7-a
+    endif
+    CONFARGS += --with-float=$(float_abi) --with-fpu=vfpv3-d16
+  endif
+  # This would be so much simpler if "or" were supported, we would just add
+  # "or ifeq ($(DEB_TARGET_ARCH),armhf)" to the above
+  # Now we have to duplicate the case.
+  ifeq ($(distribution),Debian)
+    ifeq ($(DEB_TARGET_ARCH),armhf)
+      ifneq (,$(findstring gcj,$(PKGSOURCE)))
+        CONFARGS += --with-arch=armv6
+      else
+        CONFARGS += --with-arch=armv7-a
+      endif
+      CONFARGS += --with-float=$(float_abi) --with-fpu=vfpv3-d16
+    else
+      # Debian armel
+      CONFARGS += --with-arch=armv4t --with-float=$(float_abi)
+    endif
+  endif
+  ifeq ($(with_arm_thumb),yes)
+    CONFARGS += --with-mode=thumb
+  endif
+endif
+
+ifeq ($(DEB_TARGET_GNU_CPU),$(findstring $(DEB_TARGET_GNU_CPU),m68k))
+  CONFARGS += --disable-werror
+endif
+# FIXME: correct fix-warnings.dpatch
+ifeq ($(distribution),Ubuntu)
+  CONFARGS += --disable-werror
+endif
+
+ifneq (,$(findstring sparc-linux,$(DEB_TARGET_GNU_TYPE)))
+  ifeq ($(biarch64),yes)
+    CONFARGS += --enable-targets=all
+  endif
+endif
+
+ifneq (,$(findstring sparc64-linux,$(DEB_TARGET_GNU_TYPE)))
+    ifneq ($(biarch32),yes)
+      CONFARGS += --disable-multilib
+    endif
+endif
+
+ifneq (,$(findstring ia64-linux,$(DEB_TARGET_GNU_TYPE)))
+  CONFARGS += --with-system-libunwind
+endif
+
+ifneq (,$(findstring sh4-linux,$(DEB_TARGET_GNU_TYPE)))
+  CONFARGS += --with-multilib-list=m4,m4-nofpu --with-cpu=sh4
+endif
+
+ifneq (,$(findstring m68k-linux,$(DEB_TARGET_GNU_TYPE)))
+  CONFARGS += --disable-multilib
+endif
+
+ifeq ($(DEB_TARGET_ARCH_OS),linux)
+  ifneq (,$(findstring $(DEB_TARGET_ARCH), alpha powerpc ppc64 s390 s390x sparc sparc64))
+    ifeq ($(DEB_TARGET_ARCH),alpha)
+      glibc_version := $(shell dpkg -s libc6.1 | awk '/^Version:/ {print $$2}')
+    else
+      glibc_version := $(shell dpkg -s libc6 | awk '/^Version:/ {print $$2}')
+    endif
+    with_ldbl128 := $(shell dpkg --compare-versions $(glibc_version) gt 2.3.99 && echo yes)
+    ifeq ($(with_ldbl128),yes)
+      CONFARGS += --with-long-double-128
+    endif
+  endif
+endif
+
+ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 i386 kfreebsd-i386 kfreebsd-amd64))
+  ifneq (,$(filter $(distrelease),etch lenny dapper hardy))
+    CONFARGS += --with-arch-32=i486
+  else ifneq (,$(filter $(distrelease),squeeze wheezy sid jaunty karmic lucid))
+    CONFARGS += --with-arch-32=i586
+  else
+    CONFARGS += --with-arch-32=i686
+  endif
+endif
+
+ifneq (,$(filter $(DEB_TARGET_ARCH), hurd-i386))
+  CONFARGS += --with-arch=i586
+endif
+
+ifeq ($(DEB_TARGET_ARCH),lpia)
+  CONFARGS += --with-arch=pentium-m --with-tune=i586
+endif
+
+ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 i386 hurd-i386 kfreebsd-i386 kfreebsd-amd64))
+  CONFARGS += --with-tune=generic
+endif
+
+ifneq (,$(findstring mips-linux,$(DEB_TARGET_GNU_TYPE)))
+  ifeq ($(biarchn32)-$(biarch64),yes-yes)
+    CONFARGS += --enable-targets=all
+  endif
+endif
+
+ifneq (,$(findstring mipsel-linux,$(DEB_TARGET_GNU_TYPE)))
+  ifeq ($(biarchn32)-$(biarch64),yes-yes)
+    CONFARGS += --enable-targets=all
+  endif
+endif
+
+ifneq (,$(findstring s390-linux,$(DEB_TARGET_GNU_TYPE)))
+  ifeq ($(biarch64),yes)
+    CONFARGS += --enable-targets=all
+  endif
+endif
+
+ifneq (,$(findstring hppa-linux,$(DEB_TARGET_GNU_TYPE)))
+  CONFARGS += --disable-libstdcxx-pch
+endif
+
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  ifeq ($(findstring --disable-werror, $(CONFARGS)),)
+    CONFARGS += --disable-werror
+  endif
+else
+  CONFARGS += --enable-checking=release
+endif
+
+ifneq ($(DEB_CROSS),yes)
+  CONFARGS += \
+	--build=$(DEB_BUILD_GNU_TYPE) \
+	--host=$(DEB_HOST_GNU_TYPE) \
+	--target=$(TARGET_ALIAS)
+else
+  CONFARGS += \
+	--program-prefix=$(TARGET_ALIAS)- \
+	--includedir=/$(PF)/$(DEB_TARGET_GNU_TYPE)/include \
+	--build=$(DEB_BUILD_GNU_TYPE) \
+	--host=$(DEB_HOST_GNU_TYPE) \
+	--target=$(TARGET_ALIAS)
+  ifndef DEB_STAGE
+  CONFARGS += \
+	--with-headers=/$(PF)/$(DEB_TARGET_GNU_TYPE)/include \
+	--with-libs=/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib
+  endif
+  SET_CROSS_LIB_PATH = LD_LIBRARY_PATH=/lib:/usr/lib:$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}/$(PF)/$(DEB_TARGET_GNU_TYPE)/lib$${DIRNAME}
+endif
+
+ifeq ($(with_bootstrap),)
+  # no profiledbootstrap on the following architectures
+  # - m68k: we're happy that it builds at all
+  no_profiled_bs_archs := arm armel armhf m68k
+  ifneq (,$(findstring $(DEB_TARGET_GNU_CPU),$(no_profiled_bs_archs)))
+    bootstrap_target = bootstrap-lean
+  else
+    bootstrap_target = profiledbootstrap
+  endif
+endif
+ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+  bootstrap_target = bootstrap-lean
+endif
+ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+  bootstrap_target = bootstrap-lean
+endif
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  bootstrap_target = bootstrap-lean
+endif
+
+# disable profiled bootstrap on slow archs, get to testing first ...
+ifeq ($(distribution),Debian)
+  ifneq (,$(filter $(DEB_TARGET_ARCH), arm armel armhf hppa mips mipsel sparc))
+    bootstrap_target = bootstrap-lean
+  endif
+endif
+ifeq ($(distribution),Ubuntu)
+  ifneq (,$(filter $(DEB_TARGET_ARCH), sparc))
+    bootstrap_target = bootstrap-lean
+  endif
+endif
+    bootstrap_target = bootstrap-lean
+
+DEJAGNU_TIMEOUT=300
+# Increase the timeout for one testrun on slow architectures
+ifeq ($(distribution),Debian)
+  ifneq (,$(findstring $(DEB_TARGET_ARCH),arm armel armhf hppa m68k sparc))
+    DEJAGNU_TIMEOUT=600
+  else ifneq (,$(findstring $(DEB_TARGET_GNU_CPU),amd64 i386 i486 i686 lpia))
+    DEJAGNU_TIMEOUT=180
+  endif
+  ifeq ($(DEB_TARGET_GNU_SYSTEM),gnu)
+    DEJAGNU_TIMEOUT=900
+  endif
+else ifeq ($(distribution),Ubuntu)
+  ifneq (,$(findstring $(DEB_TARGET_ARCH),armel hppa ia64 sparc))
+    DEJAGNU_TIMEOUT=600
+  else ifneq (,$(findstring $(DEB_TARGET_GNU_CPU),amd64 i386 i486 i686 lpia))
+    DEJAGNU_TIMEOUT=180
+  endif
+endif
+
+DEJAGNU_RUNS =
+ifneq ($(PKGSOURCE),gcc-snapshot)
+ifeq ($(with_ssp),yes)
+  ifneq ($(PKGSOURCE),gcc-snapshot)
+    DEJAGNU_RUNS += $(if $(filter yes,$(with_ssp_default)),-fno-stack-protector,-fstack-protector)
+  endif
+  # FIXME Ubuntu armel buildd hangs
+  ifneq (,$(findstring $(DEB_TARGET_GNU_CPU),armel armhf))
+    DEJAGNU_RUNS =
+  endif
+  ifeq ($(distribution),Ubuntu)
+    # the buildds are just slow ... don't check the non-default
+    ifneq (,$(findstring $(DEB_TARGET_GNU_CPU),ia64 powerpc sparc))
+      DEJAGNU_RUNS =
+    endif
+  endif
+endif
+endif
+ifeq ($(with_32bit_check),yes)
+  DEJAGNU_RUNS += -m32
+endif
+ifeq ($(with_64bit_check),yes)
+  ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),mips mipsel))
+    DEJAGNU_RUNS += -mabi=64
+  else
+    DEJAGNU_RUNS += -m64
+  endif
+endif
+ifeq ($(with_n32bit_check),yes)
+  DEJAGNU_RUNS += -mabi=n32
+endif
+
+# gdc is not multilib'd
+ifneq (,$(findstring gdc, $(PKGSOURCE)))
+  DEJAGNU_RUNS =
+endif
+
+# neither is gnat
+ifneq (,$(findstring gnat, $(PKGSOURCE)))
+  DEJAGNU_RUNS =
+endif
+
+ifneq (,$(DEJAGNU_RUNS))
+  RUNTESTFLAGS = RUNTESTFLAGS="--target_board=unix\{,$(subst $(SPACE),$(COMMA),$(strip $(DEJAGNU_RUNS)))\}"
+endif
+
+# PF is the installation prefix for the package without the leading slash.
+# It's "usr" for gcc releases.
+ifneq (,$(PF))
+  # use value set in the environment
+else ifeq ($(PKGSOURCE),gcc-snapshot)
+  PF		= usr/lib/gcc-snapshot
+else
+  PF		= usr
+endif
+
+# PFL is the installation prefix with DEB_TARGET_GNU_TYPE attached for cross builds
+ifeq ($(DEB_CROSS),yes)
+  PFL		= $(PF)/$(DEB_TARGET_GNU_TYPE)
+else
+  PFL		= $(PF)
+endif
+
+# RPF is the base prefix or installation prefix with DEB_TARGET_GNU_TYPE attached for cross builds
+ifeq ($(DEB_CROSS),yes)
+  RPF		= $(PF)/$(DEB_TARGET_GNU_TYPE)
+else
+  RPF		=
+endif
+
+ifeq ($(with_multiarch_lib),yes)
+  ifeq ($(DEB_CROSS),yes)
+    libdir	= lib
+  else
+    libdir	= lib/$(DEB_TARGET_MULTIARCH)
+  endif
+else
+  libdir	= lib
+endif
+configured_libdir = lib
+
+# /usr/libexec doesn't follow the FHS
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  libexecdir	= $(PF)/libexec
+  spulibexecdir	= $(PF)/libexec
+else
+  libexecdir	= $(PF)/$(configured_libdir)
+  spulibexecdir	= $(PF)/$(configured_libdir)
+endif
+buildlibdir	= $(builddir)/$(TARGET_ALIAS)
+
+ifeq ($(with_common_gcclibdir),yes)
+  gcc_lib_dir	= $(PF)/$(configured_libdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)
+  gcc_lexec_dir	= $(libexecdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)
+  gcc_spu_lib_dir	= $(PF)/spu/lib/gcc/spu/$(BASE_VERSION)
+  gcc_spu_lexec_dir	= $(spulibexecdir)/gcc/spu/$(BASE_VERSION)
+else
+  gcc_lib_dir	= $(PF)/$(configured_libdir)/gcc/$(TARGET_ALIAS)/$(GCC_VERSION)
+  gcc_lexec_dir	= $(libexecdir)/gcc/$(TARGET_ALIAS)/$(GCC_VERSION)
+  gcc_spu_lib_dir	= $(PF)/spu/lib/gcc/spu/$(GCC_VERSION)
+  gcc_spu_lexec_dir	= $(spulibexecdir)/gcc/spu/$(GCC_VERSION)
+endif
+
+lib32		= $(PF)/lib32
+lib64		= lib64
+libn32		= lib32
+
+p_l= $(1)$(cross_lib_arch)
+p_d= $(1)-dbg$(cross_lib_arch)
+d_l= debian/$(p_l)
+d_d= debian/$(p_d)
+
+usr_lib = $(PFL)/$(libdir)
+usr_lib32 = $(PFL)/lib32
+usr_libn32 = $(PFL)/lib32
+usr_lib64 = $(PFL)/lib64
+
+gcc_lib_dir32 = $(gcc_lib_dir)/$(biarch32subdir)
+gcc_lib_dirn32 = $(gcc_lib_dir)/$(biarchn32subdir)
+gcc_lib_dir64 = $(gcc_lib_dir)/$(biarch64subdir)
+
+libgcc_dir = $(RPF)/$(libdir)
+# yes, really; lib32gcc_s ends up in usr
+libgcc_dir32 = $(PFL)/lib32
+libgcc_dirn32 = $(RPF)/lib32
+libgcc_dir64 = $(RPF)/lib64
+
+# install_gcc_lib(lib,soname,flavour,package)
+define install_gcc_lib
+	mv $(d)/$(usr_lib$(3))/$(1)*.a debian/$(4)/$(gcc_lib_dir$(3))/
+	rm -f $(d)/$(usr_lib$(3))/$(1)*.{la,so}
+	dh_link -p$(4) \
+	  /$(usr_lib$(3))/$(1).so.$(2) /$(gcc_lib_dir$(3))/$(1).so
+
+endef
+
+checkdirs = $(builddir)
+ifeq ($(with_separate_libgcj),yes)
+  ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+    ifneq ($(with_standalone_gcj),yes)
+      checkdirs = $(buildlibdir)/libffi $(buildlibdir)/libjava
+    endif
+  endif
+endif
+ifeq ($(with_separate_gnat),yes)
+  ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+    checkdirs = $(builddir)/gcc
+  endif
+endif
+
+ifneq ($(DEB_CROSS),yes)
+  ifneq ($(PKGSOURCE),gcc-snapshot)
+    cxx_inc_dir	= $(PF)/include/c++/$(BASE_VERSION)
+  else
+    cxx_inc_dir	= $(PF)/include/c++/$(GCC_VERSION)
+  endif
+else
+  cxx_inc_dir	= $(PF)/$(TARGET_ALIAS)/include/c++/$(GCC_VERSION)
+endif
+
+default: build
+
+configure: $(configure_dependencies)
+
+$(configure_dummy_stamp):
+	touch $(configure_dummy_stamp)
+
+$(configure_stamp):
+	dh_testdir
+	: # give information about the build process
+	@echo "------------------------ Build process variables ------------------------"
+	@echo "Number of parallel processes used for the build: $(USE_CPUS)"
+	@echo "Package source: $(PKGSOURCE)"
+	@echo "GCC version: $(GCC_VERSION)"
+	@echo "Base Debian version: $(BASE_VERSION)"
+	@echo -e "Configured with: $(subst ___, ,$(foreach i,$(CONFARGS),$(i)\n\t))"
+ifeq ($(DEB_CROSS),yes)
+	@echo "Building cross compiler for $(DEB_TARGET_ARCH)"
+endif
+	@echo "Using shell $(SHELL)"
+	@echo "Architecture: $(DEB_TARGET_ARCH) (GNU: $(TARGET_ALIAS))"
+	@echo "CPPFLAGS: $(CPPFLAGS)"
+	@echo "CFLAGS: $(CFLAGS)"
+	@echo "LDFLAGS: $(LDFLAGS)"
+	@echo "BOOT_CFLAGS: $(BOOT_CFLAGS)"
+	@echo "DEBIAN_BUILDARCH: $(DEBIAN_BUILDARCH)"
+	@echo "Install prefix: /$(PF)"
+ifeq ($(biarchn32)-$(biarch64),yes-yes)
+	@echo "Will build the triarch compilers (o32/n32/64, defaulting to o32)"
+else
+  ifeq ($(biarch64),yes)
+	@echo "Will build the biarch compilers (32/64, defaulting to 32bit)"
+  else
+    ifeq ($(biarch32),yes)
+	@echo "Will build the biarch compilers (64/32, defaulting to 64bit)"
+    else
+	@echo "Will not build the biarch compilers"
+    endif
+  endif
+endif
+
+ifeq ($(with_cxx),yes)
+	@echo "Will build the C++ compiler"
+else
+	@echo "Will not build the C++ compiler: $(with_cxx)"
+endif
+ifeq ($(with_objc),yes)
+	@echo "Will build the ObjC compiler."
+    ifeq ($(with_objc_gc),yes)
+	@echo "Will build the extra ObjC runtime for garbage collection."
+    else
+	@echo "Will not build the extra ObjC runtime for garbage collection."
+    endif
+else
+	@echo "Will not build the ObjC compiler: $(with_objc)"
+endif
+ifeq ($(with_objcxx),yes)
+	@echo "Will build the Obj-C++ compiler"
+else
+	@echo "Will not build the Obj-C++ compiler: $(with_objcxx)"
+endif
+ifeq ($(with_fortran),yes)
+	@echo "Will build the Fortran 95 compiler."
+else
+	@echo "Will not build the Fortran 95 compiler: $(with_fortran)"
+endif
+ifeq ($(with_java),yes)
+	@echo "Will build the Java compiler."
+else
+	@echo "Will not build the Java compiler: $(with_java)"
+endif
+ifeq ($(with_pascal),yes)
+	@echo "Will build the Pascal compiler."
+else
+	@echo "Will not build the Pascal compiler: $(with_pascal)"
+endif
+ifeq ($(with_ada),yes)
+	@echo "Will build the Ada compiler."
+  ifeq ($(with_libgnat),yes)
+	@echo "Will build the shared Ada libraries."
+  else
+	@echo "Will not build the shared Ada libraries."
+  endif
+else
+	@echo "Will not build the Ada compiler: $(with_ada)"
+endif
+ifeq ($(with_d),yes)
+	@echo "Will build the D compiler"
+  ifeq ($(with_libphobos),yes)
+	@echo "Will build the phobos D runtime library."
+  else
+	@echo "Will not build the phobos D runtime library: $(with_libphobos)"
+  endif
+else
+	@echo "Will not build the D compiler: $(with_d)"
+endif
+ifeq ($(with_ssp),yes)
+	@echo "Will build with SSP support."
+else
+	@echo "Will build without SSP support: $(with_ssp)"
+endif
+ifeq ($(with_check),yes)
+	@echo "Will run the testsuite."
+  ifeq ($(biarch64),yes)
+    ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),mips mipsel))
+	@echo 'Will run the testsuite with -mabi=64: $(with_64bit_check)'
+    else
+	@echo 'Will run the testsuite with -m64: $(with_64bit_check)'
+    endif
+  endif
+  ifeq ($(biarch32),yes)
+	@echo 'Will run the testsuite with -m32: $(with_32bit_check)'
+  endif
+  ifeq ($(biarchn32),yes)
+	@echo 'Will run the testsuite with -mabi=n32: $(with_n32bit_check)'
+  endif
+else
+	@echo "Will not run the testsuite: $(with_check)"
+endif
+ifeq ($(with_nls),yes)
+	@echo "Will enable national language support."
+else
+	@echo "Will disable national language support: $(with_nls)"
+endif
+	@echo "-----------------------------------------------------------------------------"
+	@echo ""
+ifeq ($(with_check),yes)
+	@if echo "spawn true" | /usr/bin/expect -f - >/dev/null; then \
+	  : ; \
+	else \
+	  echo "expect is failing on your system with the above error, which means the GCC"; \
+	  echo "testsuite will fail.  Please resolve the above issues and retry the build."; \
+	  echo "-----------------------------------------------------------------------------"; \
+	  exit 1; \
+	fi
+endif
+	rm -f $(configure_stamp) $(build_stamp)
+	: # generate debian/README.Debian
+	cat debian/README $(patch_stamp) > debian/README.Debian
+
+	rm -rf $(builddir)
+	mkdir $(builddir)
+
+	: # configure
+	cd $(builddir) \
+	  && $(SET_PATH) \
+		CC="$(CC)" \
+		$(SET_SHELL) \
+	LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}$(builddir)/gcc/ada/rts \
+		../src/configure $(subst ___, ,$(CONFARGS))
+
+	touch $(configure_stamp)
+
+build: $(build_dependencies)
+
+$(build_dummy_stamp):
+	touch $(build_dummy_stamp)
+
+$(build_locale_stamp):
+ifeq ($(locale_data)-$(with_cxx),generate-yes)
+	: # build locales needed by libstdc++ testsuite
+	rm -rf locales
+	mkdir locales
+	- sh debian/locale-gen
+endif
+	touch $(build_locale_stamp)
+
+
+$(build_stamp): $(configure_stamp) $(build_locale_stamp)
+	dh_testdir
+	rm -f bootstrap-protocol
+# DEB_CROSS is never set if REVERSE_CROSS is set and vice-versa.
+# DEB_CROSS build
+ifeq ($(DEB_CROSS),yes)
+	: # build cross compiler for $(TARGET_ALIAS)
+	( \
+	  set +e; \
+	  $(SET_PATH) \
+	  $(SET_LOCPATH) \
+	    $(MAKE) -C $(builddir) $(NJOBS) \
+		CC="$(CC)" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS) \
+		; \
+	  echo $$? > status; \
+	) 2>&1 | tee bootstrap-protocol
+	s=`cat status`; rm -f status; test $$s -eq 0
+else
+  # REVERSE_CROSS build
+  ifeq ($(REVERSE_CROSS),yes)
+	: # build cross compiler for $(TARGET_ALIAS)
+	( \
+	  set +e; \
+	  $(SET_PATH) \
+	  $(SET_LOCPATH) \
+	    $(MAKE) -C $(builddir) $(NJOBS) \
+		CC="$(CC)" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS) \
+		; \
+	  echo $$? > status; \
+	) 2>&1 | tee bootstrap-protocol
+	s=`cat status`; rm -f status; test $$s -eq 0
+else
+  # Native build
+  ifeq ($(with_java),yes)
+	mkdir -p bin
+	ln -sf /usr/bin/fastjar bin/jar
+    ifeq ($(with_native_ecj),yes)
+	: # prepare the standalone ecj jar
+	cp /usr/share/java/ecj.jar $(srcdir)/ecj-standalone.jar
+	zip -d $(srcdir)/ecj-standalone.jar 'org/eclipse/jdt/core/JDTCompilerAdapter*'
+    endif
+    ifeq ($(with_java_maintainer_mode),yes)
+	( \
+	  echo '#!/bin/sh'; \
+	  echo 'exec gij-4.3 -cp /usr/share/java/ecj.jar org.eclipse.jdt.internal.compiler.batch.GCCMain "$$@"'; \
+	) > bin/ecj1
+	chmod +x bin/ecj1
+	: # If we don't have gjavah in PATH, try to build it with the old gij
+	mkdir -p bin
+	if [ -x /usr/bin/gjavah-4.3 ]; then \
+	  ln -sf /usr/bin/gjavah-4.3 bin/gjavah; \
+	elif [ -x bin/gjavah ]; then \
+	  : ; \
+	else \
+	  mkdir -p $(builddir)/java_hacks; \
+	  cd $(builddir)/java_hacks; \
+	  cp -a $(srcdir)/libjava/classpath/tools/external external; \
+	  mkdir -p gnu/classpath/tools; \
+	  cp -a $(srcdir)/libjava/classpath/tools/gnu/classpath/tools/{common,javah,getopt} \
+	    gnu/classpath/tools/; \
+	  cp -a $(srcdir)/libjava/classpath/resource/gnu/classpath/tools/common/Messages.properties \
+	    gnu/classpath/tools/common; \
+	  cd external/asm; \
+	  for i in `find . -name \*.java`; do gcj-4.3 --encoding ISO-8859-1 -C $$i -I.; done; \
+	  cd ../..; \
+	  for i in `find gnu -name \*.java`; do gcj-4.3 -C $$i -I. -Iexternal/asm/; done; \
+	  gcj-4.3 -findirect-dispatch -O2 -fmain=gnu.classpath.tools.javah.Main \
+	    -I. -Iexternal/asm/ `find . -name \*.class` -o $(PWD)/bin/gjavah.real; \
+	  ( \
+	    echo '#!/bin/sh'; \
+	    echo 'export CLASSPATH='`pwd`'$${CLASSPATH:+:$$CLASSPATH}'; \
+	    echo 'exec $(PWD)/bin/gjavah.real "$$@"'; \
+	  ) > $(PWD)/bin/gjavah; \
+	  chmod +x $(PWD)/bin/gjavah; \
+	fi
+    endif
+  endif
+	: # build native compiler
+	( \
+	  set +e; \
+	  $(SET_PATH) \
+	  $(SET_SHELL) \
+	  $(SET_LOCPATH) \
+	    $(MAKE) -C $(builddir) $(NJOBS) $(bootstrap_target) \
+		CC="$(CC)" \
+		$(CFLAGS_TO_PASS) \
+		$(STAGE1_CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS) \
+		; \
+	  echo $$? > status; \
+	) 2>&1 | tee bootstrap-protocol
+	s=`cat status`; rm -f status; test $$s -eq 0
+endif
+endif
+	-chmod 755 $(srcdir)/contrib/warn_summary
+	if [ -x $(srcdir)/contrib/warn_summary ]; then \
+	  rm -f bootstrap-summary; \
+	  $(srcdir)/contrib/warn_summary bootstrap-protocol \
+	    > bootstrap-summary; \
+	fi
+
+	touch $(build_stamp)
+
+ifeq ($(versioned_packages),yes)
+  hppa64_configure_flags += --program-suffix=-$(BASE_VERSION)
+endif
+
+ifeq ($(DEB_CROSS),yes)
+  CC_for_hppa64_cross = $(CC)
+else
+  CC_for_hppa64_cross = $(builddir)/gcc/xgcc -B$(builddir)/gcc/
+endif
+
+$(configure_hppa64_stamp): $(build_stamp)
+	dh_testdir
+	rm -f $(configure_hppa64_stamp) $(build_hppa64_stamp)
+	rm -rf $(builddir_hppa64)
+	mkdir $(builddir_hppa64)
+	: # configure
+	cd $(builddir_hppa64) && \
+	  $(SET_PATH) \
+	  $(SET_SHELL) \
+	  CC="$(CC_for_hppa64_cross)" \
+	     ../src/configure \
+		--enable-languages=c \
+		--prefix=/$(PF) \
+		--libexecdir=/$(libexecdir) \
+		--disable-shared \
+		--disable-nls \
+		--disable-threads \
+		--disable-libgomp \
+		--disable-libmudflap \
+		--disable-libssp \
+		--with-as=/usr/bin/hppa64-linux-gnu-as \
+		--with-ld=/usr/bin/hppa64-linux-gnu-ld \
+		--includedir=/usr/hppa64-linux-gnu/include \
+		--build=$(DEB_BUILD_GNU_TYPE) \
+		--host=$(DEB_HOST_GNU_TYPE) \
+		--target=hppa64-linux-gnu
+	touch $(configure_hppa64_stamp)
+
+$(build_hppa64_stamp): $(configure_hppa64_stamp)
+	  $(SET_PATH) \
+	  $(SET_SHELL) \
+	  $(SET_LOCPATH) \
+	    $(MAKE) -C $(builddir_hppa64) $(NJOBS) \
+		CC="$(CC_for_hppa64_cross)" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS)
+	touch $(build_hppa64_stamp)
+
+$(configure_neon_stamp): $(build_stamp)
+	dh_testdir
+	rm -f $(configure_neon_stamp) $(build_neon_stamp)
+	rm -rf $(builddir_neon)
+	mkdir $(builddir_neon)
+	: # configure
+	cd $(builddir_neon) && \
+	  $(SET_PATH) \
+	  $(SET_SHELL) \
+	  CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" \
+	     ../src/configure \
+		--disable-bootstrap \
+		--enable-languages=c,c++,objc,fortran \
+		--prefix=/$(PF) \
+		--libexecdir=/$(libexecdir) \
+		--program-suffix=-$(BASE_VERSION) \
+		--disable-nls \
+		--disable-libmudflap \
+		--with-arch=armv7-a --with-tune=cortex-a8 \
+		--with-float=$(float_abi) --with-fpu=neon \
+		--host=arm-linux-gnueabi \
+		--build=arm-linux-gnueabi \
+		--target=arm-linux-gnueabi
+	touch $(configure_neon_stamp)
+
+$(build_neon_stamp): $(configure_neon_stamp)
+	  $(SET_PATH) \
+	  $(SET_SHELL) \
+	  $(SET_LOCPATH) \
+	    $(MAKE) -C $(builddir_neon) $(NJOBS) \
+		CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS)
+	touch $(build_neon_stamp)
+
+$(configure_ia6432_stamp): $(build_stamp)
+	dh_testdir
+	rm -f $(configure_ia6432_stamp) $(build_ia6432_stamp)
+	rm -rf $(builddir_ia6432)
+	mkdir $(builddir_ia6432)
+	: # configure
+	cd $(builddir_ia6432) && \
+	  $(SET_PATH) \
+	  $(SET_SHELL) \
+	  CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" \
+	     ../src/configure \
+		--enable-languages=c \
+		--prefix=/$(PF) \
+		--libexecdir=/$(libexecdir) \
+		--disable-nls \
+		--disable-libmudflap \
+		--program-suffix=-$(BASE_VERSION) \
+		--host=ia64-linux-gnu \
+		--build=ia64-linux-gnu \
+		--target=i486-linux-gnu
+	touch $(configure_ia6432_stamp)
+
+$(build_ia6432_stamp): $(configure_ia6432_stamp)
+	  $(SET_PATH) \
+	  $(SET_SHELL) \
+	    $(MAKE) -C $(builddir_ia6432) $(NJOBS) \
+		CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS)
+	touch $(build_ia6432_stamp)
+
+spu_configure_args = \
+	--enable-languages=c,c++,fortran \
+	--prefix=/$(PF) \
+	--libexecdir=/$(spulibexecdir) \
+	--disable-shared \
+	--disable-nls \
+	--disable-threads \
+	--enable-checking=release \
+	--disable-libssp \
+	--with-system-zlib \
+	--with-newlib \
+	--program-prefix=spu- \
+	--with-as=/usr/bin/spu-as \
+	--with-ar=/usr/bin/spu-ar \
+	--with-ld=/usr/bin/spu-ld
+
+# FIXME: --with-sysroot=/usr/spu breaks libgfortran build
+#ifeq ($(PKGSOURCE),gcc-snapshot)
+#  spu_configure_args += \
+#	--with-sysroot=/usr/spu
+#else
+  spu_configure_args += \
+	--includedir=/usr/spu/include \
+	--libdir=/usr/spu/lib
+#endif
+
+spu_configure_args += \
+	--host=$(DEB_HOST_GNU_TYPE) \
+	--build=$(DEB_BUILD_GNU_TYPE) \
+	--target=spu
+
+$(configure_spu_stamp): $(src_spu_stamp) $(build_stamp)
+	dh_testdir
+	rm -f $(configure_spu_stamp) $(build_spu_stamp)
+	rm -rf $(builddir_spu)
+	mkdir $(builddir_spu)
+	: # configure
+	cd $(builddir_spu) && \
+	  $(SET_PATH) \
+	  $(SET_SHELL) \
+	  CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" \
+	     ../src-spu/configure $(spu_configure_args)
+	touch $(configure_spu_stamp)
+
+$(build_spu_stamp): $(configure_spu_stamp)
+	  $(SET_PATH) \
+	  $(SET_SHELL) \
+	  $(SET_LOCPATH) \
+	    $(MAKE) -C $(builddir_spu) $(NJOBS) \
+		CC="$(builddir)/gcc/xgcc -B$(builddir)/gcc/" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS)
+	touch $(build_spu_stamp)
+
+
+MANUALS = \
+	$(srcdir)/gcc/doc/cpp.texi \
+	$(srcdir)/gcc/doc/cppinternals.texi \
+	$(srcdir)/gcc/doc/gcc.texi \
+	$(srcdir)/gcc/doc/gccint.texi
+ifeq ($(with_fortran),yes)
+  MANUALS += $(srcdir)/gcc/fortran/gfortran.texi
+endif
+ifeq ($(with_java),yes)
+  MANUALS += $(srcdir)/gcc/java/gcj.texi
+endif
+ifeq ($(with_ada),yes)
+  MANUALS += \
+	$(builddir)/gcc/doc/gnat_ugn.texi \
+	$(srcdir)/gcc/ada/gnat_rm.texi \
+	$(srcdir)/gcc/ada/gnat-style.texi
+endif
+ifeq ($(with_pascal),yes)
+  MANUALS += \
+	$(srcdir)/gcc/p/doc/en/gpc.texi \
+	$(srcdir)/gcc/p/doc/en/gpcs.texi
+endif
+ifeq ($(with_gomp),yes)
+  MANUALS += $(srcdir)/libgomp/libgomp.texi
+endif
+
+html-docs: $(build_html_stamp)
+#$(build_html_stamp): html-texi2html
+#$(build_html_stamp): html-makeinfo
+$(build_html_stamp): html-makeinfo-nosplit
+
+html-texi2html:
+	rm -rf html $(builddir)/gcc/html
+	mkdir $(builddir)/gcc/html
+	ln -s $(builddir)/gcc/html html
+	cd $(builddir)/gcc; \
+	for manual in $(MANUALS); do \
+	  outname=`basename $${manual} .texi`; \
+	  echo "generating $$outname ..."; \
+	  texi2html -number -split chapter \
+		-I $(srcdir)/gcc/doc/include \
+		-I $(srcdir)/gcc/p/doc \
+		-I $(srcdir)/gcc/p/doc/generated \
+		-I `dirname $${manual}` \
+		-I $(builddir)/gcc \
+		-subdir html \
+		$${manual}; \
+	done
+
+html-makeinfo:
+	rm -rf html
+	mkdir html
+	cd $(builddir)/gcc; \
+	for manual in $(MANUALS); do \
+	  manual=`find $(srcdir) -name $${file}.texi`; \
+	  outname=`basename $${manual} .texi`; \
+	  echo "generating $$outname ..."; \
+	  if [ "$${manual}" ]; then \
+	    makeinfo --html --number-sections \
+		-I $(srcdir)/gcc/doc/include -I `dirname $${manual}` \
+		-I $(srcdir)/gcc/p/doc \
+		-I $(srcdir)/gcc/p/doc/generated \
+		-I $(builddir)/gcc \
+		-o $${outname} \
+		$${manual}; \
+	  fi; \
+	done
+
+html-makeinfo-nosplit:
+	rm -rf html
+	mkdir html
+	cd $(builddir)/gcc; \
+	for manual in $(MANUALS); do \
+	  outname=`basename $${manual} .texi`.html; \
+	  echo "generating $$outname ..."; \
+	  makeinfo --html --number-sections --no-split \
+		-I $(srcdir)/gcc/doc/include -I `dirname $${manual}` \
+		-I $(srcdir)/gcc/p/doc \
+		-I $(srcdir)/gcc/p/doc/generated \
+		-I $(builddir)/gcc \
+		-o $(PWD)/html/$${outname} \
+		$${manual}; \
+	done
+
+# start the script only on architectures known to have slow autobilders ...
+logwatch_archs := alpha arm armel m68k mips mipsel sparc
+ifeq ($(DEB_HOST_GNU_CPU), $(findstring $(DEB_HOST_GNU_CPU),$(logwatch_archs)))
+  start_logwatch = yes
+endif
+ifeq ($(DEB_HOST_GNU_SYSTEM),gnu)
+  start_logwatch = yes
+endif
+
+stamps/mauve-build: stamps/build
+	rm -rf mauve
+	mkdir -p mauve
+ifeq ($(with_mauve_check),yes)
+	tar xf $(wildcard /usr/src/mauve*.tar.*)
+	cd mauve \
+	    && aclocal \
+	    && automake \
+	    && autoconf2.59 \
+	    && PATH=$(CURDIR)/$(sdkimg)/bin:$$PATH ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE)
+	PATH=$(CURDIR)/$(sdkimg)/bin:$$PATH $(MAKE) -C mauve
+endif
+	touch $@
+
+stamps/mauve-check: stamps/build stamps/mauve-build
+ifeq ($(with_mauve_check),yes)
+	-cd mauve && \
+	    JAVA_HOME=$(CURDIR)/$(sdkimg) \
+	    PATH=$(CURDIR)/$(sdkimg)/bin:$$PATH \
+		xvfb-run -s "-extension GLX" java Harness \
+		    -vm $(CURDIR)/$(sdkimg)/bin/java \
+		    -file $(CURDIR)/debian/mauve_tests \
+		    -timeout 30000 2>&1 \
+		| tee mauve_output
+	@sleep 5
+else
+	echo "mauve testsuite not run for this build" > mauve/mauve_output
+endif
+	touch $@
+
+check: $(check_stamp) # $(if $(filter yes, $(with_java)),stamps/05-build-mauve-stamp) #$(check_inst_stamp)
+$(check_stamp): $(build_stamp) $(build_locale_stamp)
+	rm -f test-protocol
+
+	-chmod 755 $(srcdir)/contrib/test_summary
+ifeq (0,1)
+ifneq (,$(findstring gcc-4, $(PKGSOURCE)))
+ifneq ($(with_common_libs),yes)
+	: # libstdc++6 built from newer gcc-4.x source, run testsuite against the installed lib
+
+	sed 's/-L[^ ]*//g' $(buildlibdir)/libstdc++-v3/scripts/testsuite_flags \
+	  > $(buildlibdir)/libstdc++-v3/scripts/testsuite_flags.installed
+	-$(ULIMIT_M); \
+	    set +e; \
+	    for d in $(buildlibdir)/libstdc++-v3/testsuite; do \
+	      echo "Running testsuite in $$d ..."; \
+	      TEST_INSTALLED=1 \
+	      $(SET_SHELL) \
+	      $(SET_LOCPATH) \
+	      $(SET_PATH) \
+	      DEJAGNU_TIMEOUT=$(DEJAGNU_TIMEOUT) \
+		$(MAKE) -k -C $$d $(NJOBS) check $(RUNTESTFLAGS); \
+	    done 2>&1 | tee test-protocol2
+
+	BOOT_CFLAGS="$(BOOT_CFLAGS)" \
+	  $(srcdir)/contrib/test_summary -m "$(S_EMAIL)" > raw-test-summary
+	-( \
+	  sed -n '/^Mail/s/.*"\([^"][^"]*\)".*/\1/p' raw-test-summary; \
+	  awk '/^cat/, /^EOF/' raw-test-summary | grep -v EOF; \
+	) > libstdc++-test-summary
+	echo 'BEGIN installed libstdc++-v3 test-summary'
+	cat libstdc++-test-summary
+	echo 'END installed libstdc++-v3 test-summary'
+	find $(buildlibdir)/libstdc++-v3/testsuite -name '*.log' -o -name '*.sum' \
+	  | xargs -r rm -f
+endif
+endif
+endif
+
+ifeq ($(start_logwatch),yes)
+	: # start logwatch script for regular output during test runs
+	chmod +x debian/logwatch.sh
+	-debian/logwatch.sh -t 900 -p $(builddir)/logwatch.pid \
+		-m '\ntestsuite still running ...\n' \
+		test-protocol \
+		$(builddir)/gcc/testsuite/gcc/gcc.log \
+		$(builddir)/gcc/testsuite/g++/g++.log \
+		$(builddir)/gcc/testsuite/gfortran/gfortran.log \
+		$(builddir)/gcc/testsuite/objc/objc.log \
+		$(builddir)/gcc/testsuite/obj-c++/obj-c++.log \
+		$(builddir)/gcc/testsuite/gnat/gnat.log \
+		$(builddir)/gcc/testsuite/ada/acats/acats.log \
+		$(builddir)/gcc/testsuite/gfortran/gfortran.log \
+		$(builddir)/gcc/p/test/test_log \
+		$(buildlibdir)/libstdc++-v3/testsuite/libstdc++-v3.log \
+		$(buildlibdir)/libjava/testsuite/libjava.log \
+		$(buildlibdir)/libmudflap/testsuite/libmudflap.log \
+		$(buildlibdir)/libgomp/testsuite/libgomp.log \
+		$(buildlibdir)/libffi/testsuite/libffi.log \
+		&
+endif
+
+ifeq ($(with_ada),yes)
+	chmod +x debian/acats-killer.sh
+	-debian/acats-killer.sh -p $(builddir)/acats-killer.pid \
+		$(builddir)/gcc/testsuite/ada/acats/acats.log \
+		$(builddir)/gcc/testsuite/g++.log \
+		&
+endif
+
+	-$(ULIMIT_M); \
+	    set +e; \
+	    for d in $(checkdirs); do \
+	      echo "Running testsuite in $$d ..."; \
+	      $(SET_SHELL) \
+	      $(SET_LOCPATH) \
+	      $(SET_PATH) \
+	      EXTRA_TEST_PFLAGS=-g0 \
+	      DEJAGNU_TIMEOUT=$(DEJAGNU_TIMEOUT) \
+		$(MAKE) -k -C $$d $(NJOBS) check $(RUNTESTFLAGS); \
+	    done 2>&1 | tee test-protocol
+
+	-ps aux | fgrep logwatch | fgrep -v fgrep
+	-if [ -f $(builddir)/logwatch.pid ]; then \
+	  kill -1 `cat $(builddir)/logwatch.pid`; \
+	  sleep 1; \
+	  kill -9 `cat $(builddir)/logwatch.pid`; \
+	  rm -f $(builddir)/logwatch.pid; \
+	fi
+	-ps aux | fgrep logwatch | fgrep -v fgrep
+
+ifeq ($(with_ada),yes)
+	-if [ -f $(builddir)/acats-killer.pid ]; then \
+	  kill -1 `cat $(builddir)/acats-killer.pid`; \
+	  sleep 1; \
+	  kill -9 `cat $(builddir)/acats-killer.pid`; \
+	  rm -f $(builddir)/acats-killer.pid; \
+	fi
+endif
+
+	: # running the libjava testsuite alone is missing this information
+	$(builddir)/gcc/xgcc -B$(builddir)/gcc/ -v > $(builddir)/compiler_version.sum 2>&1
+
+	if [ -x $(srcdir)/contrib/test_summary ]; then \
+	  rm -f test-summary; \
+	  ( \
+	    cd $(builddir); \
+	    echo '' > ts-include; \
+	    echo '' >> ts-include; \
+	    if [ -f $(builddir)/gcc/.bad_compare ]; then \
+	      echo 'Bootstrap comparison failure:' >> ts-include; \
+	      cat $(builddir)/gcc/.bad_compare >> ts-include; \
+	      echo '' >> ts-include; \
+	      echo '' >> ts-include; \
+	    fi; \
+	    echo "Build Dependencies:" >> ts-include; \
+	    dpkg -l g++-* binutils* `echo '$(LIBC_DEP)' | awk '{print $$1}'` \
+		libgmp*-dev libmpfr-dev libppl*-dev libcloog-ppl-dev \
+	        | fgrep -v '<none>' >> ts-include; \
+	    echo '' >> ts-include; \
+	    cat ../$(patch_stamp) >> ts-include; \
+	    BOOT_CFLAGS="$(BOOT_CFLAGS)" \
+	      $(srcdir)/contrib/test_summary \
+		-i ts-include -m "$(S_EMAIL)" \
+	  ) > raw-test-summary; \
+	  if [ -n "$(testsuite_tarball)" ]; then \
+	    echo "Test suite used: $(testsuite_srcdir)" > test-summary; \
+	    echo "  Do not interpret the results on its own" >> test-summary; \
+	    echo "  but compare them with the results from" >> test-summary; \
+	    echo "  the gcc-snapshot package." >> test-summary; \
+	  fi; \
+	  sed -n '/^Mail/s/.*"\([^"][^"]*\)".*/\1/p' raw-test-summary \
+		>> test-summary; \
+	  awk '/^cat/, /^EOF/' raw-test-summary | grep -v EOF >> test-summary; \
+	  if [ -f bootstrap-summary -a "$(bootstrap_target)" != profiledbootstrap ]; then \
+	    echo '' >> test-summary; \
+	    cat bootstrap-summary >> test-summary; \
+	  fi; \
+	  echo 'BEGIN test-summary'; \
+	  cat test-summary; \
+	  echo 'END test-summary'; \
+	fi
+
+	touch $(check_stamp)
+
+$(check_inst_stamp): $(check_stamp)
+	rm -f test-inst-protocol
+
+ifeq ($(start_logwatch),yes)
+	: # start logwatch script for regular output during test runs
+	chmod +x debian/logwatch.sh
+	-debian/logwatch.sh -t 900 -p $(builddir)/logwatch-inst.pid \
+		-m '\ntestsuite (3.3) still running ...\n' \
+		test-inst-protocol \
+		check-inst/{gcc,g++,g77,objc}.log \
+		&
+endif
+
+	rm -rf check-inst
+	mkdir check-inst
+
+	echo "Running testsuite ..."
+	-$(ULIMIT_M) ; \
+	    $(SET_SHELL) \
+	    $(SET_LOCPATH) \
+	    EXTRA_TEST_PFLAGS=-g0 \
+	    DEJAGNU_TIMEOUT=$(DEJAGNU_TIMEOUT) \
+	  cd check-inst && $(srcdir)/contrib/test_installed \
+	    --with-gcc=gcc-3.3 --with-g++=g++-3.3 --with-g77=g77-3.3 \
+		2>&1 | tee test-inst-protocol
+
+	-ps aux | fgrep logwatch | fgrep -v fgrep
+	if [ -f $(builddir)/logwatch-inst.pid ]; then \
+	  kill -1 `cat $(builddir)/logwatch-inst.pid`; \
+	else \
+	  true; \
+	fi
+	-ps aux | fgrep logwatch | fgrep -v fgrep
+
+	-chmod 755 $(srcdir)/contrib/test_summary
+	if [ -x $(srcdir)/contrib/test_summary ]; then \
+	  rm -f test-inst-summary; \
+	  ( \
+	    cd check-inst; \
+	    echo '' > ts-include; \
+	    echo '' >> ts-include; \
+	    echo "Build Dependencies:" >> ts-include; \
+	    dpkg -l g++-* binutils* `echo '$(LIBC_DEP)' | awk '{print $$1}'` \
+		libgmp*-dev libmpfr-dev libmpc-dev libppl*-dev libcloog-ppl-dev \
+	        | fgrep -v '<none>' >> ts-include; \
+	    echo '' >> ts-include; \
+	    echo 'Results for the installed GCC-3.3 compilers' >> ts-include; \
+	    $(srcdir)/contrib/test_summary \
+		-i ts-include -m "$(S_EMAIL)" \
+	  ) > raw-test-inst-summary; \
+	  sed -n '/^Mail/s/.*"\([^"][^"]*\)".*/\1/p' raw-test-inst-summary \
+		>> test-inst-summary; \
+	  awk '/^cat/, /^EOF/' raw-test-inst-summary \
+		| grep -v EOF >> test-inst-summary; \
+	  echo 'BEGIN test-installed-summary'; \
+	  cat test-inst-summary; \
+	  echo 'END test-installed-summary'; \
+	fi
+
+	chmod 755 debian/reduce-test-diff.awk
+	if diff -u test-inst-summary test-summary \
+		| debian/reduce-test-diff.awk > diff-summary; \
+	then \
+	  mv -f diff-summary testsuite-comparision; \
+	else \
+	  ( \
+	    echo "WARNING: New failures in gcc-3.4 compared to gcc-3.3"; \
+	    echo ''; \
+	    cat diff-summary; \
+	  ) > testsuite-comparision; \
+	  rm -f diff-summary; \
+	fi
+	touch $(check_inst_stamp)
+
+clean: debian/control
+	dh_testdir
+	rm -f pxxx status
+	rm -f *-summary *-protocol testsuite-comparision summary-diff
+ifeq ($(with_pascal),yes)
+	-rm -f $(srcdir)/gcc/p/doc/*info
+	rm -f $(srcdir)/gcc/p/test/{fjf51,fjf141aa,fjf199aa,magic,?,knownbugs/a.out}
+endif
+	if [ -f $(srcdir)/gcc/p/config-lang.in.debian ]; then \
+	  mv -f $(srcdir)/gcc/p/config-lang.in.debian $(srcdir)/gcc/p/config-lang.in; \
+	else true; fi
+	rm -f $(srcdir)/gcc/po/*.gmo
+	rm -f debian/lib{gcc,gcj,objc,stdc++}{-v3,[0-9]}*.{{pre,post}{inst,rm},shlibs}
+	fs=`echo debian/*BV* debian/*GCJ* debian/*CXX* debian/*LC* debian/*MF* | sort -u`; \
+	for f in $$fs; do \
+	  [ -f $$f ] || continue; \
+	  f2=$$(echo $$f \
+		| sed 's/BV/$(BASE_VERSION)/;s/PV/$(GPC_BASE_VERSION)/;s/CXX/$(CXX_SONAME)/;s/LGCJ/$(PKG_LIBGCJ_EXT)/;s/GCJ/$(PKG_GCJ_EXT)/;s/LC/$(GCC_SONAME)/;s/MF/$(MUDFLAP_SONAME)/;s/-CRB/$(cross_bin_arch)/;s/\.in$$//'); \
+	  rm -f $$f2; \
+	done
+	rm -f debian/shlibs.local debian/substvars.local
+	rm -f debian/*.debhelper
+	-[ -d debian/bugs ] && $(MAKE) -C debian/bugs clean
+	rm -f debian/README.libstdc++-baseline debian/README.Bugs debian/README.Debian
+	rm -f debian/lib*gcj-bc.shlibs
+	rm -rf bin locales share
+	rm -rf check-inst
+	rm -rf .pc
+	dh_clean
+
+# -----------------------------------------------------------------------------
+# some abbrevations for the package names and directories;
+# p_XXX is the package name, d_XXX is the package directory
+# these macros are only used in the binary-* targets.
+
+ifeq ($(versioned_packages),yes)
+  pkg_ver := -$(BASE_VERSION)
+endif
+
+ifneq ($(DEB_CROSS),yes)
+  p_base = gcc$(pkg_ver)-base
+  p_gcc  = gcc$(pkg_ver)
+  p_cpp  = cpp$(pkg_ver)
+  p_cppd = cpp$(pkg_ver)-doc
+  p_cxx  = g++$(pkg_ver)
+  p_doc  = gcc$(pkg_ver)-doc
+  p_lgcc = libgcc$(GCC_SONAME)
+else
+  # only triggered if DEB_CROSS set
+  p_base = gcc$(pkg_ver)$(cross_bin_arch)-base
+  p_cpp  = cpp$(pkg_ver)$(cross_bin_arch)
+  p_gcc  = gcc$(pkg_ver)$(cross_bin_arch)
+  p_cxx  = g++$(pkg_ver)$(cross_bin_arch)
+endif
+p_hppa64 = gcc$(pkg_ver)-hppa64
+
+d	= debian/tmp
+d_base	= debian/$(p_base)
+d_gcc	= debian/$(p_gcc)
+d_cpp	= debian/$(p_cpp)
+d_cppd	= debian/$(p_cppd)
+d_cxx	= debian/$(p_cxx)
+d_doc	= debian/$(p_doc)
+d_lgcc	= debian/$(p_lgcc)
+d_hppa64= debian/$(p_hppa64)
+
+d_spu   = debian/tmp-spu
+d_neon   = debian/tmp-neon
+
+common_substvars = \
+	$(shell awk "{printf \"'-V%s' \", \$$0}" debian/substvars.local)
+
+ifeq ($(DEB_CROSS),yes)
+  lib_binaries := indep_binaries
+else
+  lib_binaries := arch_binaries
+endif
+
+# ---------------------------------------------------------------------------
+
+ifeq ($(PKGSOURCE),gcc-snapshot)
+  include debian/rules.d/binary-snapshot.mk
+else
+
+ifneq ($(DEB_CROSS),yes)
+ifeq ($(with_source),yes)
+  include debian/rules.d/binary-source.mk
+endif
+endif
+
+ifneq ($(BACKPORT),true)
+ifeq ($(with_gccxbase),yes)
+  include debian/rules.d/binary-base.mk
+endif
+
+ifeq ($(with_gccbase),yes)
+  include debian/rules.d/binary-base.mk
+endif
+
+ifneq ($(DEB_STAGE),stage1)
+  include debian/rules.d/binary-libgcc.mk
+endif
+
+ifeq ($(with_libgmath),yes)
+  include debian/rules.d/binary-libgccmath.mk
+endif
+
+ifeq ($(with_libgomp),yes)
+  include debian/rules.d/binary-libgomp.mk
+endif
+
+ifeq ($(with_cdev),yes)
+  include debian/rules.d/binary-cpp.mk
+endif
+
+ifeq ($(with_proto),yes)
+  include debian/rules.d/binary-proto.mk
+endif
+
+ifeq ($(with_fixincl),yes)
+  include debian/rules.d/binary-fixincl.mk
+endif
+
+ifeq ($(with_mudflap),yes)
+  include debian/rules.d/binary-libmudflap.mk
+endif
+
+ifeq ($(with_libssp),yes)
+  include debian/rules.d/binary-libssp.mk
+endif
+
+ifeq ($(with_objcxx),yes)
+  include debian/rules.d/binary-objcxx.mk
+endif
+
+ifeq ($(with_objc),yes)
+  include debian/rules.d/binary-objc.mk
+endif
+ifeq ($(with_libobjc),yes)
+  include debian/rules.d/binary-libobjc.mk
+endif
+
+# include before cxx
+ifeq ($(with_java),yes)
+  include debian/rules.d/binary-java.mk
+endif
+
+ifeq ($(with_cxxdev),yes)
+  include debian/rules.d/binary-cxx.mk
+endif
+ifeq ($(with_cxx),yes)
+  include debian/rules.d/binary-libstdcxx.mk
+endif
+
+ifeq ($(with_f77),yes)
+  include debian/rules.d/binary-f77.mk
+endif
+
+ifeq ($(with_fortran),yes)
+  include debian/rules.d/binary-fortran.mk
+endif
+
+ifeq ($(with_ada),yes)
+  include debian/rules.d/binary-ada.mk
+endif
+
+ifeq ($(with_pascal),yes)
+  include debian/rules.d/binary-pascal.mk
+endif
+
+ifeq ($(with_d),yes)
+  include debian/rules.d/binary-d.mk
+endif
+
+ifeq ($(with_libnof),yes)
+  ifeq ($(DEB_TARGET_GNU_CPU),powerpc)
+    include debian/rules.d/binary-nof.mk
+  endif
+endif
+
+# gcc must be moved/built after g77 and g++
+ifeq ($(with_cdev),yes)
+  include debian/rules.d/binary-gcc.mk
+endif
+
+ifeq ($(with_hppa64),yes)
+  include debian/rules.d/binary-hppa64.mk
+endif
+
+ifeq ($(with_neon),yes)
+  include debian/rules.d/binary-neon.mk
+endif
+
+ifeq ($(with_spu),yes)
+  include debian/rules.d/binary-spu.mk
+endif
+endif
+
+endif # ($(PKGSOURCE),gcc-snapshot)
+
+# ----------------------------------------------------------------------
+install: $(install_dependencies)
+
+$(install_dummy_stamp): $(build_dummy_stamp)
+	touch $(install_dummy_stamp)
+
+$(install_snap_stamp): $(build_dependencies)
+	dh_testdir
+	dh_testroot
+	dh_clean -k
+
+	: # Install directories
+	rm -rf $(d)
+	mkdir -p $(d)/$(PF)
+
+ifeq ($(with_hppa64),yes)
+	: # Install hppa64
+	$(SET_PATH) \
+	    $(MAKE) -C $(builddir_hppa64) \
+		CC="$(CC)" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS) \
+		DESTDIR=$(PWD)/$(d) \
+		    install
+
+	ls -l $(d)/$(PF)/bin
+	if [ ! -x $(d)/$(PF)/bin/hppa64-linux-gnu-gcc ]; then \
+	  mv $(d)/$(PF)/bin/hppa64-linux-gnu-gcc-4* $(d)/$(PF)/bin/hppa64-linux-gnu-gcc; \
+	else \
+	  rm -f $(d)/$(PF)/bin/hppa64-linux-gnu-gcc-4*; \
+	fi
+
+	: # remove files not needed from the hppa64 build
+	rm -rf $(d)/$(PF)/info
+	rm -rf $(d)/$(PF)/man
+	rm -f $(d)/$(PF)/$(libdir)/libiberty.a
+	rm -f $(d)/$(PF)/bin/*{protoize,gcov,gccbug,gcc}
+
+	rm -rf $(d)/$(PF)/hppa64-linux-gnu/include
+	rm -rf $(d)/$(PF)/hppa64-linux-gnu/lib
+	set -e; \
+	  cd $(d)/$(PF)/$(libdir)/gcc/hppa64-linux-gnu/$(GCC_VERSION)/include-fixed; \
+	  for i in *; do \
+	    case "$$i" in \
+	      README|features.h|syslimits.h|limits.h) ;; \
+	      linux|$(TARGET_ALIAS)) ;; \
+	      $(subst $(DEB_TARGET_GNU_CPU),$(biarch_cpu),$(TARGET_ALIAS))) ;; \
+	      *) echo "remove include-fixed/$$i"; rm -rf $$i; \
+	    esac; \
+	  done
+endif
+
+ifeq ($(with_spu),yes)
+	: # Install spu
+	$(SET_PATH) \
+	    $(MAKE) -C $(builddir_spu) \
+		CC="$(CC)" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS) \
+		DESTDIR=$(PWD)/$(d) \
+		    install
+
+	ls -l $(d)/$(PF)/bin
+	if [ ! -x $(d)/$(PF)/bin/spu-gcc ]; then \
+	  mv $(d)/$(PF)/bin/spu-gcc-4* $(d)/$(PF)/bin/spu-gcc; \
+	else \
+	  rm -f $(d)/$(PF)/bin/spu-gcc-4*; \
+	fi
+	if [ ! -x $(d)/$(PF)/bin/spu-g++ ]; then \
+	  mv $(d)/$(PF)/bin/spu-g++-4* $(d)/$(PF)/bin/spu-g++; \
+	else \
+	  rm -f $(d)/$(PF)/bin/spu-g++-4*; \
+	fi
+ifneq (,$(findstring fortran, $(spu_configure_args)))
+	if [ ! -x $(d)/$(PF)/bin/spu-gfortran ]; then \
+	  mv $(d)/$(PF)/bin/spu-gfortran-4* $(d)/$(PF)/bin/spu-gfortran; \
+	else \
+	  rm -f $(d)/$(PF)/bin/spu-gfortran-4*; \
+	fi
+endif
+	rm -f $(d)/$(PF)/bin/spu-c++*
+
+	: # remove files not needed from the spu build
+	rm -rf $(d)/$(PF)/info
+	rm -rf $(d)/$(PF)/man
+	rm -f $(d)/$(PF)/$(libdir)/libiberty.a
+	rm -f $(d)/$(PF)/bin/*{protoize,gcov,gccbug,gcc}
+
+	rm -rf $(d)/$(PF)/spu/include
+	rm -rf $(d)/$(PF)/spu/lib
+	set -e; \
+	  cd $(d)/$(PF)/$(libdir)/gcc/spu/$(GCC_VERSION)/include-fixed; \
+	  for i in *; do \
+	    case "$$i" in \
+	      README|features.h|syslimits.h|limits.h) ;; \
+	      linux|$(TARGET_ALIAS)) ;; \
+	      $(subst $(DEB_TARGET_GNU_CPU),$(biarch_cpu),$(TARGET_ALIAS))) ;; \
+	      *) echo "remove include-fixed/$$i"; rm -rf $$i; \
+	    esac; \
+	  done
+endif
+
+	: # Work around PR lto/41569
+	ln -sf gcc $(builddir)/prev-gcc
+
+	: # Install everything
+	$(SET_PATH) \
+	$(SET_SHELL) \
+	  $(MAKE) -C $(builddir) \
+	    $(CFLAGS_TO_PASS) \
+	    $(LDFLAGS_TO_PASS) \
+	    DESTDIR=$(PWD)/$(d) \
+	    infodir=/$(PF)/share/info \
+	    mandir=/$(PF)/share/man \
+		install
+
+	ls -l $(d)/$(PF)/bin
+	if [ ! -x $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc ]; then \
+	  mv $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc-4* $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc; \
+	else \
+	  rm -f $(d)/$(PF)/bin/$(TARGET_ALIAS)-gcc-4*; \
+	fi
+	set -e; \
+	  cd $(d)/$(gcc_lib_dir)/include-fixed; \
+	  for i in *; do \
+	    case "$$i" in \
+	      README|features.h|syslimits.h|limits.h) ;; \
+	      linux|$(TARGET_ALIAS)) ;; \
+	      $(subst $(DEB_TARGET_GNU_CPU),$(biarch_cpu),$(TARGET_ALIAS))) ;; \
+	      *) echo "remove include-fixed/$$i"; rm -rf $$i; \
+	    esac; \
+	  done
+
+ifneq ($(configured_libdir),$(libdir))
+	for i in debug pkgconfig '*.so' '*.so.*' '*.a' '*.la' '*.py' '*.spec'; do \
+	  mv $(d)/$(PF)/$(configured_libdir)/$$i \
+		$(d)/$(PF)/$(libdir)/. || true; \
+	done
+endif
+
+ifeq ($(biarch64)-$(with_cxx),yes-yes)
+  ifneq (,$(filter libstdc++-v3, $(biarch_multidir_names)))
+	: # fix biarch C++ header installation
+    ifeq ($(DEB_TARGET_ARCH),i386)
+	mv $(d)/$(cxx_inc_dir)/x86_64-linux-gnu/64 \
+	  $(d)/$(cxx_inc_dir)/$(DEB_TARGET_GNU_TYPE)/
+	rmdir $(d)/$(cxx_inc_dir)/x86_64-linux-gnu
+    endif
+    ifeq ($(DEB_TARGET_ARCH),powerpc)
+	mv $(d)/$(cxx_inc_dir)/powerpc64-linux-gnu/64 \
+	  $(d)/$(cxx_inc_dir)/powerpc-linux-gnu/
+	rmdir $(d)/$(cxx_inc_dir)/powerpc64-linux-gnu
+    endif
+    ifeq ($(DEB_TARGET_ARCH),s390)
+	mv $(d)/$(cxx_inc_dir)/s390x-linux-gnu/64 \
+	  $(d)/$(cxx_inc_dir)/s390-linux-gnu/
+	rmdir $(d)/$(cxx_inc_dir)/s390x-linux-gnu
+    endif
+  endif
+endif
+
+# FIXME: libjava/classpath not correctly patched
+ifeq ($(with_java),yes)
+	-if [ -d $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME) ]; then \
+	  ls -l $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME); \
+	  mv $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME)/* \
+	    $(d)/$(PF)/lib/gcj-$(BASE_VERSION)-$(GCJ_SONAME)/; \
+	  rmdir $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME); \
+	fi
+endif
+
+	-ls -l $(d)/usr
+	if [ -d $(d)/usr/man/man1 ]; then \
+	  mv $(d)/usr/man/man1/* $(d)/usr/share/man/man1/; \
+	fi
+
+	chmod 755 debian/dh_*
+	touch $(install_snap_stamp)
+
+$(install_stamp): $(build_stamp)
+	dh_testdir
+	dh_testroot
+	dh_clean -k -N$(p_hppa64)
+
+	if [ -f $(binary_stamp)-hppa64 ]; then \
+	  mv $(binary_stamp)-hppa64 saved-stamp-hppa64; \
+	fi
+	if [ -f $(binary_stamp)-spu ]; then \
+	  mv $(binary_stamp)-spu saved-stamp-spu; \
+	fi
+	rm -f $(binary_stamp)*
+	if [ -f saved-stamp-hppa64 ]; then \
+	  mv saved-stamp-hppa64 $(binary_stamp)-hppa64; \
+	fi
+	if [ -f saved-stamp-spu ]; then \
+	  mv saved-stamp-spu $(binary_stamp)-spu; \
+	fi
+
+	: # Install directories
+	rm -rf $(d)
+	mkdir -p $(d)/$(libdir) $(d)/$(PF) $(d)/$(PF)/$(libdir)/debug
+ifeq ($(biarch32),yes)
+	mkdir -p $(d)/$(PF)/lib32/debug
+endif
+ifeq ($(biarch64),yes)
+	mkdir -p $(d)/$(PF)/lib64/debug
+endif
+ifeq ($(biarchn32),yes)
+	mkdir -p $(d)/$(PF)/$(libn32)/debug
+endif
+
+ifneq (,$(filter $(DEB_TARGET_GNU_CPU),x86_64 sparc64 s390x))
+	: # link lib to lib64 and $(PF)/lib to $(PF)/lib64
+	: # (this works when CONFARGS contains '--disable-multilib')
+	ln -s $(configured_libdir) $(d)/lib64
+	mkdir -p $(d)/$(PF)/$(configured_libdir)
+	ln -s $(configured_libdir) $(d)/$(PF)/lib64
+endif
+
+	: # Install everything
+	$(SET_PATH) \
+	$(SET_SHELL) \
+	  $(MAKE) -C $(builddir) \
+	    $(CFLAGS_TO_PASS) \
+	    $(LDFLAGS_TO_PASS) \
+	    DESTDIR=$(PWD)/$(d) \
+	    infodir=/$(PF)/share/info \
+	    mandir=/$(PF)/share/man \
+		install
+
+ifneq ($(configured_libdir),$(libdir))
+	for i in debug pkgconfig '*.so' '*.so.*' '*.a' '*.la' '*.py' '*.spec'; do \
+	  mv $(d)/$(PF)/$(configured_libdir)/$$i \
+		$(d)/$(PF)/$(libdir)/. || true; \
+	done
+endif
+
+ifeq ($(with_common_gcclibdir),yes)
+	mv $(d)/$(subst /$(BASE_VERSION),/$(GCC_VERSION),$(gcc_lib_dir)) \
+		$(d)/$(gcc_lib_dir)
+  ifneq ($(gcc_lib_dir),$(gcc_lexec_dir))
+	mv $(d)/$(subst /$(BASE_VERSION),/$(GCC_VERSION),$(gcc_lexec_dir)) \
+		$(d)/$(gcc_lexec_dir)
+  endif
+  ifeq ($(with_d)-$(with_libphobos),yes-yes)
+	mv $(d)/$(PF)/include/d$(libphobos_version)/$(GCC_VERSION) \
+		$(d)/$(PF)/include/d$(libphobos_version)/$(BASE_VERSION)
+  endif
+endif
+
+ifeq ($(biarch64)-$(with_cxx),yes-yes)
+  ifneq (,$(filter libstdc++-v3, $(biarch_multidir_names)))
+    ifeq ($(DEB_TARGET_ARCH),i386)
+	: # fix biarch C++ header installation
+	mv $(d)/$(cxx_inc_dir)/x86_64-linux-gnu/64 \
+	  $(d)/$(cxx_inc_dir)/$(DEB_TARGET_GNU_TYPE)/
+	rmdir $(d)/$(cxx_inc_dir)/x86_64-linux-gnu
+    endif
+    ifeq ($(DEB_TARGET_ARCH),powerpc)
+	: # fix biarch C++ header installation
+	mv $(d)/$(cxx_inc_dir)/powerpc64-linux-gnu/64 \
+	  $(d)/$(cxx_inc_dir)/powerpc-linux-gnu/
+	rmdir $(d)/$(cxx_inc_dir)/powerpc64-linux-gnu
+    endif
+  endif
+endif
+
+# FIXME: libjava/classpath not correctly patched
+ifeq ($(with_java),yes)
+	-if [ -d $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME) ]; then \
+	  ls -l $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME); \
+	  mv $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME)/* \
+	    $(d)/$(PF)/lib/gcj-$(BASE_VERSION)-$(GCJ_SONAME)/; \
+	  rmdir $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME); \
+	fi
+endif
+
+	: # remove rpath settings from binaries and shared libs
+	for i in $$(chrpath -k $(d)/$(PF)/bin/* $(d)/$(PF)/lib*/lib*.so.* \
+			$(if $(filter $(with_multiarch_lib),yes), \
+			  $(d)/$(PF)/lib/$(DEB_HOST_MULTIARCH)/lib*.so.*) \
+			$(d)/$(PF)/lib*/gcj$(pkg_ver)*/lib*.so.* \
+			2>/dev/null | awk -F: '/RPATH=/ {print $$1}'); \
+	do \
+	  case "$$i" in ecj1|*gij-*|*libjawt*|*libjvm*) continue; esac; \
+	  [ -h $$i ] && continue; \
+	  chrpath --delete $$i; \
+	  echo "removed RPATH: $$i"; \
+	done
+
+	: # remove '*.la' and '*.lai' files, not shipped in any package.
+	find $(d) -name '*.la' -o -name '*.lai' | xargs -r rm -f
+
+ifneq ($(with_libgnat),yes)
+	rm -f $(d)/$(gcc_lib_dir)/adalib/lib*.so*
+endif
+
+ifeq ($(GFDL_INVARIANT_FREE),yes)
+	for i in gcc gcov; do \
+	  I=`echo $$i | tr a-z A-Z`; \
+	  sed -e "s/@NAME@/$$I$(pkg_ver)/g" -e "s/@name@/$$i$(pkg_ver)/g" \
+	    debian/dummy-man.1 > $(d)/$(PF)/share/man/man1/$$i.1; \
+	done
+
+  ifeq ($(with_fortran),yes)
+	for i in g77; do \
+	  I=`echo $$i | tr a-z A-Z`; \
+	  sed -e "s/@NAME@/$$I$(pkg_ver)/g" -e "s/@name@/$$i$(pkg_ver)/g" \
+	    debian/dummy-man.1 > $(d)/$(PF)/share/man/man1/$$i.1; \
+	done
+  endif
+  ifeq ($(with_java),yes)
+	for i in gcj gcjh gij jv-convert jv-scan jcf-dump grmic grmiregistry; \
+	do \
+	  I=`echo $$i | tr a-z A-Z`; \
+	  sed -e "s/@NAME@/$$I$(pkg_ver)/g" -e "s/@name@/$$i$(pkg_ver)/g" \
+	    debian/dummy-man.1 > $(d)/$(PF)/share/man/man1/$$i.1; \
+	done
+  endif
+endif
+
+ifeq ($(with_pascal),yes)
+	: # gpc is already versioned with the gcc version.
+	mv $(d)/$(PF)/bin/gpc$(pkg_ver) $(d)/$(PF)/bin/gpc
+	mv $(d)/$(PF)/share/man/man1/gpc$(pkg_ver).1 \
+		$(d)/$(PF)/share/man/man1/gpc.1
+endif
+ifeq ($(versioned_packages),yes)
+  ifeq ($(with_pascal),yes)
+    ifeq ($(GFDL_INVARIANT_FREE),yes)
+	for i in binobj gpc gpc-run gpidump; do \
+	  I=`echo $$i | tr a-z A-Z`; \
+	  sed -e "s/@NAME@/$$I$(pkg_ver)/g" \
+	      -e "s/@name@/$$i$(pkg_ver)/g" \
+	    debian/dummy-man.1 > $(d)/$(PF)/share/man/man1/$$i.1; \
+	done
+    endif
+    ifeq ($(with_gpidump),yes)
+	: # rename files (versioned gpc binaries)
+	for i in binobj gpc gpc-run gpidump; do \
+	  mv $(d)/$(PF)/bin/$$i $(d)/$(PF)/bin/$$i$(pkg_ver); \
+	done
+	: # rename files (versioned gpc man pages)
+	for i in binobj gpc gpc-run gpidump; do \
+	  mv $(d)/$(PF)/share/man/man1/$$i.1 \
+		$(d)/$(PF)/share/man/man1/$$i$(pkg_ver).1; \
+	done
+    else
+	: # rename files (versioned gpc binaries)
+	for i in binobj gpc gpc-run; do \
+	  mv $(d)/$(PF)/bin/$$i $(d)/$(PF)/bin/$$i$(pkg_ver); \
+	done
+	: # rename files (versioned gpc man pages)
+	for i in binobj gpc gpc-run; do \
+	  mv $(d)/$(PF)/share/man/man1/$$i.1 \
+		$(d)/$(PF)/share/man/man1/$$i$(pkg_ver).1; \
+	done
+    endif
+  endif
+endif
+
+#  ifeq ($(with_ada),yes)
+#	: # rename files (versioned ada binaries)
+#	for i in ; do \
+#	  mv $(d)/$(PF)/bin/$$i $(d)/$(PF)/bin/$$i-$(GNAT_VERSION); \
+#	  mv $(d)/$(PF)/share/man/man1/$$i.1 \
+#		$(d)/$(PF)/share/man/man1/$$i-$(GNAT_VERSION).1; \
+#	done
+#	for i in $(GNAT_TOOLS); do \
+#	  mv $(d)/$(PF)/bin/$$i $(d)/$(PF)/bin/$$i-$(GNAT_VERSION); \
+#	done
+#  endif
+
+ifeq ($(DEB_CROSS),yes)
+  ifeq ($(DEB_TARGET_ARCH)-$(biarch64),s390-yes)
+	: # s390 64bit stuff happens to be in s390x-linux-gnu/lib64/
+	mkdir -p $(d)/$(PF)/s390-linux-gnu/lib64
+	cp -a $(d)/$(PF)/s390x-linux-gnu/lib64/* $(d)/$(PF)/s390-linux-gnu/lib64/
+  endif
+  ifeq ($(DEB_TARGET_ARCH)-$(biarch64),powerpc-yes)
+	: # ppc 64bit build slaps libgcc and libstdc++ to powerpc64-linux-gnu
+	cp -a $(d)/$(PF)/powerpc64-linux-gnu/lib64/* $(d)/$(PF)/powerpc-linux-gnu/lib64/
+  endif
+endif
+
+	chmod 755 debian/dh_*
+
+#	tar cf tmp.tar debian/tmp
+
+	touch $(install_stamp)
+
+$(install_hppa64_stamp): $(build_hppa64_stamp)
+	dh_testdir
+	dh_testroot
+	rm -rf $(d_hppa64)
+	mkdir -p $(d_hppa64)/$(PF)
+
+	$(SET_PATH) \
+	    $(MAKE) -C $(builddir_hppa64) \
+		CC="$(CC)" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS) \
+		DESTDIR=$(PWD)/$(d_hppa64) \
+		    install
+
+ifeq ($(versioned_packages),yes)
+	mv $(d_hppa64)/$(PF)/bin/hppa64-linux-gnu-gcc-$(GCC_VERSION) \
+		$(d_hppa64)/$(PF)/bin/hppa64-linux-gnu-gcc$(pkg_ver)
+	mv $(d_hppa64)/$(PF)/bin/hppa64-linux-gnu-cpp \
+		$(d_hppa64)/$(PF)/bin/hppa64-linux-gnu-cpp$(pkg_ver)
+endif
+
+ifneq ($(PKGSOURCE),gcc-snapshot)
+	: # remove files not needed
+	rm -rf $(d_hppa64)/$(PF)/info
+	rm -rf $(d_hppa64)/$(PF)/man
+	rm -f $(d_hppa64)/$(PF)/$(libdir)/libiberty.a
+	rm -f $(d_hppa64)/$(PF)/bin/*{protoize,gcov,gccbug,gcc}
+
+	rm -rf $(d_hppa64)/$(PF)/hppa64-linux-gnu/include
+	rm -rf $(d_hppa64)/$(PF)/hppa64-linux-gnu/lib
+	rm -rf $(d_hppa64)/$(PF)/$(libdir)/gcc/hppa64-linux-gnu/$(GCC_VERSION)/install-tools
+endif
+
+	touch $(install_hppa64_stamp)
+
+$(install_neon_stamp): $(build_neon_stamp)
+	dh_testdir
+	dh_testroot
+	rm -rf $(d_neon)
+	mkdir -p $(d_neon)/$(PF)
+
+	$(SET_PATH) \
+	    $(MAKE) -C $(builddir_neon) \
+		CC="$(CC)" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS) \
+		DESTDIR=$(PWD)/$(d_neon) \
+		    install
+	touch $(install_neon_stamp)
+
+$(install_spu_stamp): $(build_spu_stamp)
+	dh_testdir
+	dh_testroot
+	rm -rf $(d_spu)
+	mkdir -p $(d_spu)/$(PF)
+
+	$(SET_PATH) \
+	    $(MAKE) -C $(builddir_spu) \
+		CC="$(CC)" \
+		$(CFLAGS_TO_PASS) \
+		$(LDFLAGS_TO_PASS) \
+		DESTDIR=$(PWD)/$(d_spu) \
+		    install
+
+ifeq ($(with_common_gcclibdir),yes)
+	mv $(d_spu)/$(subst /$(BASE_VERSION),/$(GCC_VERSION),$(gcc_spu_lib_dir)) \
+		$(d_spu)/$(gcc_spu_lib_dir)
+  ifneq ($(gcc_spu_lib_dir),$(gcc_spu_lexec_dir))
+	mv $(d_spu)/$(subst /$(BASE_VERSION),/$(GCC_VERSION),$(gcc_spu_lexec_dir)) \
+		$(d_spu)/$(gcc_spu_lexec_dir)
+  endif
+endif
+
+ifeq ($(versioned_packages),yes)
+	mv $(d_spu)/$(PF)/bin/spu-cpp \
+		$(d_spu)/$(PF)/bin/spu-cpp$(pkg_ver)
+	mv $(d_spu)/$(PF)/bin/spu-gcc-$(GCC_VERSION) \
+		$(d_spu)/$(PF)/bin/spu-gcc$(pkg_ver)
+	mv $(d_spu)/$(PF)/bin/spu-g++ \
+		$(d_spu)/$(PF)/bin/spu-g++$(pkg_ver)
+  ifneq (,$(findstring fortran, $(spu_configure_args)))
+	mv $(d_spu)/$(PF)/bin/spu-gfortran \
+		$(d_spu)/$(PF)/bin/spu-gfortran$(pkg_ver)
+  endif
+	rm -f $(d_spu)/$(PF)/bin/spu-c++*
+
+  ifneq ($(GFDL_INVARIANT_FREE),yes)
+	mkdir -p $(d_spu)/$(PF)/share
+	mv $(d_spu)/$(PF)/man $(d_spu)/$(PF)/share/
+	for i in spu-cpp spu-gcc spu-g++ spu-gcov spu-gfortran; do \
+	  mv $(d_spu)/$(PF)/share/man/man1/$$i.1 $(d_spu)/$(PF)/share/man/man1/$$i-$(BASE_VERSION).1; \
+	done
+  endif
+endif
+
+ifneq ($(PKGSOURCE),gcc-snapshot)
+	: # remove files not needed
+	rm -rf $(d_spu)/$(PF)/info
+#	rm -rf $(d_spu)/$(PF)/man
+	rm -f $(d_spu)/$(PF)/$(libdir)/libiberty.a
+	rm -f $(d_spu)/$(PF)/bin/*{protoize,gcov,gccbug,gcc}
+
+#	rm -rf $(d_spu)/$(PF)/spu/include
+#	rm -rf $(d_spu)/$(PF)/spu/lib
+endif
+
+	touch $(install_spu_stamp)
+
+# ----------------------------------------------------------------------
+# Build architecture-dependent files here.
+#binary-arch: build install $(foreach i,$(arch_binaries),$(binary_stamp)-$(i))
+binary-arch: $(foreach i,$(arch_binaries),$(binary_stamp)-$(i))
+ifeq ($(with_check),yes)
+	@echo Done
+#	: # Send Email about sucessfull build.
+#	# cat raw-test-summary | sh; echo "Sent mail to $(S_EMAIL)"
+endif
+
+# ----------------------------------------------------------------------
+# Build architecture-independent files here.
+#binary-indep: build install $(foreach i,$(indep_binaries),$(binary_stamp)-$(i))
+binary-indep: $(foreach i,$(indep_binaries),$(binary_stamp)-$(i))
+
+source diff:
+	@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary
--- gdc-4.4-1.063-4.4.7.orig/debian/copyright
+++ gdc-4.4-1.063-4.4.7/debian/copyright
@@ -0,0 +1,339 @@
+This is the Debian GNU/Linux prepackaged version of the GNU compiler
+collection, containing Ada, C, C++, Fortran 95, Java, Objective-C,
+Objective-C++, and Treelang compilers, documentation, and support
+libraries.  In addition, Debian provides the gdc compiler, either in
+the same source package, or built from a separate same source package.
+Packaging is done by the Debian GCC Maintainers
+<debian-gcc@lists.debian.org>, with sources obtained from:
+
+  ftp://gcc.gnu.org/pub/gcc/releases/  (for full releases)
+  svn://gcc.gnu.org/svn/gcc/           (for prereleases)
+  http://gnu-pascal.de/alpha/          (for GNU Pascal)
+  http://bitbucket.org/goshawk/gdc     (for D)
+
+The current gcc-4.4 source package is taken from the SVN gcc-4_4-branch.
+
+Changes: See changelog.Debian.gz
+
+Debian splits the GNU Compiler Collection into packages for each language,
+library, and documentation as follows:
+
+Language       Compiler package  Library package    Documentation
+---------------------------------------------------------------------------
+Ada            gnat-4.4          libgnat-4.4        gnat-4.4-doc
+C              gcc-4.4                              gcc-4.4-doc
+C++            g++-4.4           libstdc++6         libstdc++6-4.4-doc
+D              gdc-4.4
+Fortran 95     gfortran-4.4      libgfortran3       gfortran-4.4-doc
+Java           gcj-4.4           libgcj10           libgcj-doc
+Objective C    gobjc-4.4         libobjc2
+Objective C++  gobjc++-4.4
+
+For some language run-time libraries, Debian provides source files,
+development files, debugging symbols and libraries containing position-
+independent code in separate packages:
+
+Language  Sources      Development   Debugging            Position-Independent
+------------------------------------------------------------------------------
+C++                                  libstdc++6-4.4-dbg  libstdc++6-4.4-pic
+D         libphobos-4.4-dev
+Java      libgcj10-src libgcj10-dev  libgcj10-dbg
+
+Additional packages include:
+
+All languages:
+libgcc1, libgcc2, libgcc4       GCC intrinsics (platform-dependent)
+gcc-4.4-base                    Base files common to all compilers
+gcc-4.4-soft-float              Software floating point (ARM only)
+gcc-4.4-source                  The sources with patches
+
+Ada:
+libgnatvsn-dev, libgnatvsn4.4   GNAT version library
+libgnatprj-dev, libgnatprj4.4   GNAT Project Manager library
+
+C:
+cpp-4.4, cpp-4.4-doc            GNU C Preprocessor
+libmudflap0-dev, libmudflap0    Library for instrumenting pointers
+libssp0-dev, libssp0            GCC stack smashing protection library
+fixincludes                     Fix non-ANSI header files
+protoize                        Create/remove ANSI prototypes from C code
+
+Java:
+gij                             The Java bytecode interpreter and VM
+libgcj-common                   Common files for the Java run-time
+libgcj10-awt                    The Abstract Windowing Toolkit
+libgcj10-jar                    Java ARchive for the Java run-time
+
+C, C++ and Fortran 95:
+libgomp1-dev, libgomp1		GCC OpenMP (GOMP) support library
+
+Biarch support: On some 64-bit platforms which can also run 32-bit code,
+Debian provides additional packages containing 32-bit versions of some
+libraries.  These packages have names beginning with 'lib32' instead of
+'lib', for example lib32stdc++6.  Similarly, on some 32-bit platforms which
+can also run 64-bit code, Debian provides additional packages with names
+beginning with 'lib64' instead of 'lib'.  These packages contain 64-bit
+versions of the libraries.  (At this time, not all platforms and not all
+libraries support biarch.)  The license terms for these lib32 or lib64
+packages are identical to the ones for the lib packages.
+
+
+COPYRIGHT STATEMENTS AND LICENSING TERMS
+
+
+GCC is Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+2008 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+Files that have exception clauses are licensed under the terms of the
+GNU General Public License; either version 3, or (at your option) any
+later version.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License is in `/usr/share/common-licenses/GPL', version 3 of this
+license in `/usr/share/common-licenses/GPL-3'.
+
+The following runtime libraries are licensed under the terms of the
+GNU General Public License (v3 or later) with version 3.1 of the GCC
+Runtime Library Exception (included in this file):
+
+ - libgcc (libgcc/, gcc/libgcc2.[ch], gcc/unwind*, gcc/gthr*,
+   gcc/coretypes.h, gcc/crtstuff.c, gcc/defaults.h, gcc/dwarf2.h,
+   gcc/emults.c, gcc/gbl-ctors.h, gcc/gcov-io.h, gcc/libgcov.c,
+   gcc/tsystem.h, gcc/typeclass.h).
+ - libdecnumber
+ - libgomp
+ - libssp
+ - libstdc++-v3
+ - libobjc
+ - libmudflap
+ - libgfortran
+ - The libgnat-4.4 Ada support library and libgnatvsn library.
+ - Various config files in gcc/config/ used in runtime libraries.
+
+In contrast, libgnatprj is licensed under the terms of the pure GNU
+General Public License.
+
+The libgcj library is licensed under the terms of the GNU General
+Public License, with a special exception:
+
+    Linking this library statically or dynamically with other modules
+    is making a combined work based on this library.  Thus, the terms
+    and conditions of the GNU General Public License cover the whole
+    combination.
+
+    As a special exception, the copyright holders of this library give
+    you permission to link this library with independent modules to
+    produce an executable, regardless of the license terms of these
+    independent modules, and to copy and distribute the resulting
+    executable under terms of your choice, provided that you also
+    meet, for each linked independent module, the terms and conditions
+    of the license of that module.  An independent module is a module
+    which is not derived from or based on this library.  If you modify
+    this library, you may extend this exception to your version of the
+    library, but you are not obligated to do so.  If you do not wish
+    to do so, delete this exception statement from your version.
+
+The libffi library is licensed under the following terms:
+
+    libffi - Copyright (c) 1996-2003  Red Hat, Inc.
+
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    ``Software''), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+    the following conditions:
+
+    The above copyright notice and this permission notice shall be included
+    in all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
+    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+    IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+    OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+    ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
+
+
+The documentation is licensed under the GNU Free Documentation License (v1.2).
+On Debian GNU/Linux systems, the complete text of this license is in
+`/usr/share/common-licenses/GFDL-1.2'.
+
+
+GCC RUNTIME LIBRARY EXCEPTION
+
+Version 3.1, 31 March 2009
+
+Copyright (C) 2009 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+This GCC Runtime Library Exception ("Exception") is an additional
+permission under section 7 of the GNU General Public License, version
+3 ("GPLv3"). It applies to a given file (the "Runtime Library") that
+bears a notice placed by the copyright holder of the file stating that
+the file is governed by GPLv3 along with this Exception.
+
+When you use GCC to compile a program, GCC may combine portions of
+certain GCC header files and runtime libraries with the compiled
+program. The purpose of this Exception is to allow compilation of
+non-GPL (including proprietary) programs to use, in this way, the
+header files and runtime libraries covered by this Exception.
+
+0. Definitions.
+
+A file is an "Independent Module" if it either requires the Runtime
+Library for execution after a Compilation Process, or makes use of an
+interface provided by the Runtime Library, but is not otherwise based
+on the Runtime Library.
+
+"GCC" means a version of the GNU Compiler Collection, with or without
+modifications, governed by version 3 (or a specified later version) of
+the GNU General Public License (GPL) with the option of using any
+subsequent versions published by the FSF.
+
+"GPL-compatible Software" is software whose conditions of propagation,
+modification and use would permit combination with GCC in accord with
+the license of GCC.
+
+"Target Code" refers to output from any compiler for a real or virtual
+target processor architecture, in executable form or suitable for
+input to an assembler, loader, linker and/or execution
+phase. Notwithstanding that, Target Code does not include data in any
+format that is used as a compiler intermediate representation, or used
+for producing a compiler intermediate representation.
+
+The "Compilation Process" transforms code entirely represented in
+non-intermediate languages designed for human-written code, and/or in
+Java Virtual Machine byte code, into Target Code. Thus, for example,
+use of source code generators and preprocessors need not be considered
+part of the Compilation Process, since the Compilation Process can be
+understood as starting with the output of the generators or
+preprocessors.
+
+A Compilation Process is "Eligible" if it is done using GCC, alone or
+with other GPL-compatible software, or if it is done without using any
+work based on GCC. For example, using non-GPL-compatible Software to
+optimize any GCC intermediate representations would not qualify as an
+Eligible Compilation Process.
+
+1. Grant of Additional Permission.
+
+You have permission to propagate a work of Target Code formed by
+combining the Runtime Library with Independent Modules, even if such
+propagation would otherwise violate the terms of GPLv3, provided that
+all Target Code was generated by Eligible Compilation Processes. You
+may then convey such a combination under terms of your choice,
+consistent with the licensing of the Independent Modules.
+
+2. No Weakening of GCC Copyleft.
+
+The availability of this Exception does not imply any general
+presumption that third-party software is unaffected by the copyleft
+requirements of the license of GCC.
+
+
+D:
+gdc-4.4                         GNU D Compiler
+libphobos-4.4-dev               D standard runtime library
+
+The D source package is made up of the following components.
+
+The D front-end for GCC:
+ - d/*
+
+Copyright (C) 2004-2007 David Friedman
+Modified by Vincenzo Ampolo, Michael Parrot, Iain Buclaw, (C) 2009, 2010
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License is in `/usr/share/common-licenses/GPL', version 2 of this
+license in `/usr/share/common-licenses/GPL-2'.
+
+
+The DMD Compiler implementation of the D programming language:
+ - d/dmd/*
+
+Copyright (c) 1999-2010 by Digital Mars
+All Rights Reserved
+written by Walter Bright
+http://www.digitalmars.com
+License for redistribution is by either the Artistic License or
+the GNU General Public License (v1).
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License is in `/usr/share/common-licenses/GPL', the Artistic
+license in `/usr/share/common-licenses/Artistic'.
+
+
+The Zlib data compression library:
+ - d/phobos/etc/c/zlib/*
+
+ (C) 1995-2004 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+
+The Phobos standard runtime library:
+ - d/phobos/*
+
+Unless otherwise marked within the file, each file in the source
+is under the following licenses:
+
+Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com
+Written by Walter Bright
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, in both source and binary form, subject to the following
+restrictions:
+
+ o  The origin of this software must not be misrepresented; you must not
+    claim that you wrote the original software. If you use this software
+    in a product, an acknowledgment in the product documentation would be
+    appreciated but is not required.
+ o  Altered source versions must be plainly marked as such, and must not
+    be misrepresented as being the original software.
+ o  This notice may not be removed or altered from any source
+    distribution.
+
+By plainly marking modifications, something along the lines of adding to each
+file that has been changed a "Modified by Foo Bar" line
+underneath the "Written by" line would be adequate.
+
--- gdc-4.4-1.063-4.4.7.orig/debian/gfortran-BV-spu.overrides
+++ gdc-4.4-1.063-4.4.7/debian/gfortran-BV-spu.overrides
@@ -0,0 +1,2 @@
+gfortran-@BV@-spu: non-standard-dir-in-usr usr/spu/
+gfortran-@BV@-spu: file-in-unusual-dir
--- gdc-4.4-1.063-4.4.7.orig/debian/gcc-BV-CRB.preinst.in
+++ gdc-4.4-1.063-4.4.7/debian/gcc-BV-CRB.preinst.in
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+set -e
+
+if [ "$1" = "upgrade" ] || [ "$1" = "configure" ]; then
+    update-alternatives --quiet --remove @TARGET@-gcc /usr/bin/@TARGET@-gcc-@BV@
+    update-alternatives --quiet --remove @TARGET@-gcov /usr/bin/@TARGET@-gcov-@BV@
+fi
+
+#DEBHELPER#
+
+exit 0
--- gdc-4.4-1.063-4.4.7.orig/debian/gcjh-wrapper-BV
+++ gdc-4.4-1.063-4.4.7/debian/gcjh-wrapper-BV
@@ -0,0 +1,86 @@
+#!/usr/bin/perl -w
+#
+# Starts the GNU Java header generator.
+#
+# Command-line arguments should be in the style of Sun's javah command;
+# these will be converted to gcjh arguments before being passed to the
+# gcjh itself.
+#
+# Copyright (C) 2003 by Peter Hawkins <peterh@debian.org>
+# Haphazardly hacked up based on the gcj-wrapper perl script.
+# Copyright (C) 2002-2003 by Ben Burton <bab@debian.org>
+# Based on the original gcj-wrapper-3.2 shell script.
+
+use strict;
+
+# The real Java header generator:
+my $javaHeaderGen = '/usr/bin/gcjh-@BV@';
+
+# The command-line arguments to pass to the real Java compiler:
+my @commandLine;
+
+# Build the command-line from the arguments given.
+my $parsingOptions = 1;
+my $copyNextArg = 0;
+my $ignoreNextArg = 0;
+my $appendNextArg = '';
+foreach my $arg (@ARGV) {
+    # See if we already know what to do with this argument.
+    if ($ignoreNextArg) {
+        # Throw it away.
+        $ignoreNextArg = 0;
+        next;
+    } elsif ($copyNextArg or not $parsingOptions) {
+        # Copy it directly.
+        push @commandLine, $arg;
+        $copyNextArg = 0;
+        next;
+    } elsif ($appendNextArg) {
+        # Append it to $appendNextArg and then copy directly.
+        push @commandLine, ($appendNextArg . $arg);
+        $appendNextArg = '';
+        next;
+    }
+
+    # Try to interpret Sun-style options.
+    if ($arg eq '-version') {
+        push @commandLine, '--version';
+    } elsif ($arg eq '-h' or $arg eq '-help') {
+        push @commandLine, '--help';
+    } elsif ($arg eq '-verbose') {
+        push @commandLine, '--verbose';
+    } elsif ($arg eq '-classpath' or $arg eq '--classpath' or $arg eq '--cp') {
+        $appendNextArg = '--classpath=';
+    } elsif ($arg eq '-encoding' or $arg eq '-bootclasspath' or
+             $arg eq '-extdirs') {
+        $appendNextArg = "-".$arg . '=';
+    } elsif ($arg eq '-d') {
+        push @commandLine, '-d';
+        $copyNextArg = 1;
+    } elsif ($arg eq '-o') {
+        push @commandLine, '-o';
+        $copyNextArg = 1;
+    } elsif ($arg eq '-stubs') {
+        push @commandLine, '-stubs';
+    } elsif ($arg eq '-jni') {
+        push @commandLine, '-jni';
+    } elsif ($arg =~ /^-old/) {
+        # An extended Sun option (which we don't support).
+        push @commandLine, '--help' if ($arg eq '-old');
+    } elsif ($arg =~ /^-/) {
+        # An unsupported standalone option.
+    } else {
+        # Some non-option argument has been given.
+        # Stop parsing options at this point.
+        push @commandLine, $arg;
+        $parsingOptions = 0;
+    }
+}
+
+# Was there a partial argument that was never completed?
+push @commandLine, $appendNextArg if ($appendNextArg);
+
+# Call the real Java header generator.
+my @fullCommandLine = ( $javaHeaderGen );
+push @fullCommandLine, @commandLine;
+exec @fullCommandLine or exit(1);
--- gdc-4.4-1.063-4.4.7.orig/debian/gcc-BV-hppa64.prerm
+++ gdc-4.4-1.063-4.4.7/debian/gcc-BV-hppa64.prerm
@@ -0,0 +1,10 @@
+#! /bin/sh -e
+
+if [ "$1" != "upgrade" ]; then
+  update-alternatives --quiet \
+    --remove hppa64-linux-gcc /usr/bin/hppa64-linux-gnu-gcc-@BV@
+fi
+
+#DEBHELPER#
+
+exit 0
--- gdc-4.4-1.063-4.4.7.orig/debian/gcc-BV-hppa64.postinst
+++ gdc-4.4-1.063-4.4.7/debian/gcc-BV-hppa64.postinst
@@ -0,0 +1,13 @@
+#! /bin/sh -e
+
+prio=$(echo @BV@ | sed 's/\.//g')
+
+update-alternatives --quiet \
+	--install /usr/bin/hppa64-linux-gnu-gcc \
+		hppa64-linux-gnu-gcc \
+		/usr/bin/hppa64-linux-gnu-gcc-@BV@ \
+		$prio
+
+#DEBHELPER#
+
+exit 0
--- gdc-4.4-1.063-4.4.7.orig/debian/gcc-BV-doc.doc-base.gcc
+++ gdc-4.4-1.063-4.4.7/debian/gcc-BV-doc.doc-base.gcc
@@ -0,0 +1,14 @@
+Document: gcc-@BV@
+Title: The GNU C and C++ compiler
+Author: Various
+Abstract: This manual documents how to run, install and port the GNU compiler,
+ as well as its new features and incompatibilities, and how to report bugs.
+Section: Programming
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/gcc.html
+Files: /usr/share/doc/gcc-@BV@-base/gcc.html
+
+Format: info
+Index: /usr/share/info/gcc-@BV@.info.gz
+Files: /usr/share/info/gcc-@BV@*
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc1.symbols.mipsel
+++ gdc-4.4-1.063-4.4.7/debian/libgcc1.symbols.mipsel
@@ -0,0 +1,1219 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3.4@GCC_3.3.4 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __addda3@GCC_4.3.0 1:4.3
+ __adddf3@GCC_3.0 1:4.1.1
+ __adddq3@GCC_4.3.0 1:4.3
+ __addha3@GCC_4.3.0 1:4.3
+ __addhq3@GCC_4.3.0 1:4.3
+ __addqq3@GCC_4.3.0 1:4.3
+ __addsa3@GCC_4.3.0 1:4.3
+ __addsf3@GCC_3.0 1:4.1.1
+ __addsq3@GCC_4.3.0 1:4.3
+ __adduda3@GCC_4.3.0 1:4.3
+ __addudq3@GCC_4.3.0 1:4.3
+ __adduha3@GCC_4.3.0 1:4.3
+ __adduhq3@GCC_4.3.0 1:4.3
+ __adduqq3@GCC_4.3.0 1:4.3
+ __addusa3@GCC_4.3.0 1:4.3
+ __addusq3@GCC_4.3.0 1:4.3
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __ashlda3@GCC_4.3.0 1:4.3
+ __ashldi3@GCC_3.0 1:4.1.1
+ __ashldq3@GCC_4.3.0 1:4.3
+ __ashlha3@GCC_4.3.0 1:4.3
+ __ashlhq3@GCC_4.3.0 1:4.3
+ __ashlqq3@GCC_4.3.0 1:4.3
+ __ashlsa3@GCC_4.3.0 1:4.3
+ __ashlsq3@GCC_4.3.0 1:4.3
+ __ashluda3@GCC_4.3.0 1:4.3
+ __ashludq3@GCC_4.3.0 1:4.3
+ __ashluha3@GCC_4.3.0 1:4.3
+ __ashluhq3@GCC_4.3.0 1:4.3
+ __ashluqq3@GCC_4.3.0 1:4.3
+ __ashlusa3@GCC_4.3.0 1:4.3
+ __ashlusq3@GCC_4.3.0 1:4.3
+ __ashrda3@GCC_4.3.0 1:4.3
+ __ashrdi3@GCC_3.0 1:4.1.1
+ __ashrdq3@GCC_4.3.0 1:4.3
+ __ashrha3@GCC_4.3.0 1:4.3
+ __ashrhq3@GCC_4.3.0 1:4.3
+ __ashrqq3@GCC_4.3.0 1:4.3
+ __ashrsa3@GCC_4.3.0 1:4.3
+ __ashrsq3@GCC_4.3.0 1:4.3
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzsi2@GCC_3.4 1:4.1.1
+ __cmpda2@GCC_4.3.0 1:4.3
+ __cmpdi2@GCC_3.0 1:4.1.1
+ __cmpdq2@GCC_4.3.0 1:4.3
+ __cmpha2@GCC_4.3.0 1:4.3
+ __cmphq2@GCC_4.3.0 1:4.3
+ __cmpqq2@GCC_4.3.0 1:4.3
+ __cmpsa2@GCC_4.3.0 1:4.3
+ __cmpsq2@GCC_4.3.0 1:4.3
+ __cmpuda2@GCC_4.3.0 1:4.3
+ __cmpudq2@GCC_4.3.0 1:4.3
+ __cmpuha2@GCC_4.3.0 1:4.3
+ __cmpuhq2@GCC_4.3.0 1:4.3
+ __cmpuqq2@GCC_4.3.0 1:4.3
+ __cmpusa2@GCC_4.3.0 1:4.3
+ __cmpusq2@GCC_4.3.0 1:4.3
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzsi2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divda3@GCC_4.3.0 1:4.3
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdf3@GCC_3.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divdq3@GCC_4.3.0 1:4.3
+ __divha3@GCC_4.3.0 1:4.3
+ __divhq3@GCC_4.3.0 1:4.3
+ __divqq3@GCC_4.3.0 1:4.3
+ __divsa3@GCC_4.3.0 1:4.3
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divsf3@GCC_3.0 1:4.1.1
+ __divsq3@GCC_4.3.0 1:4.3
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqdf2@GCC_3.0 1:4.1.1
+ __eqsf2@GCC_3.0 1:4.1.1
+ __extendsfdf2@GCC_3.0 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffssi2@GCC_4.3.0 1:4.3
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixdfsi@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixsfsi@GCC_3.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatsidf@GCC_3.0 1:4.1.1
+ __floatsisf@GCC_3.0 1:4.1.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunsidf@GCC_4.2.0 1:4.2.1
+ __floatunsisf@GCC_4.2.0 1:4.2.1
+ __fractdadf@GCC_4.3.0 1:4.3
+ __fractdadi@GCC_4.3.0 1:4.3
+ __fractdadq@GCC_4.3.0 1:4.3
+ __fractdaha2@GCC_4.3.0 1:4.3
+ __fractdahi@GCC_4.3.0 1:4.3
+ __fractdahq@GCC_4.3.0 1:4.3
+ __fractdaqi@GCC_4.3.0 1:4.3
+ __fractdaqq@GCC_4.3.0 1:4.3
+ __fractdasa2@GCC_4.3.0 1:4.3
+ __fractdasf@GCC_4.3.0 1:4.3
+ __fractdasi@GCC_4.3.0 1:4.3
+ __fractdasq@GCC_4.3.0 1:4.3
+ __fractdauda@GCC_4.3.0 1:4.3
+ __fractdaudq@GCC_4.3.0 1:4.3
+ __fractdauha@GCC_4.3.0 1:4.3
+ __fractdauhq@GCC_4.3.0 1:4.3
+ __fractdauqq@GCC_4.3.0 1:4.3
+ __fractdausa@GCC_4.3.0 1:4.3
+ __fractdausq@GCC_4.3.0 1:4.3
+ __fractdfda@GCC_4.3.0 1:4.3
+ __fractdfdq@GCC_4.3.0 1:4.3
+ __fractdfha@GCC_4.3.0 1:4.3
+ __fractdfhq@GCC_4.3.0 1:4.3
+ __fractdfqq@GCC_4.3.0 1:4.3
+ __fractdfsa@GCC_4.3.0 1:4.3
+ __fractdfsq@GCC_4.3.0 1:4.3
+ __fractdfuda@GCC_4.3.0 1:4.3
+ __fractdfudq@GCC_4.3.0 1:4.3
+ __fractdfuha@GCC_4.3.0 1:4.3
+ __fractdfuhq@GCC_4.3.0 1:4.3
+ __fractdfuqq@GCC_4.3.0 1:4.3
+ __fractdfusa@GCC_4.3.0 1:4.3
+ __fractdfusq@GCC_4.3.0 1:4.3
+ __fractdida@GCC_4.3.0 1:4.3
+ __fractdidq@GCC_4.3.0 1:4.3
+ __fractdiha@GCC_4.3.0 1:4.3
+ __fractdihq@GCC_4.3.0 1:4.3
+ __fractdiqq@GCC_4.3.0 1:4.3
+ __fractdisa@GCC_4.3.0 1:4.3
+ __fractdisq@GCC_4.3.0 1:4.3
+ __fractdiuda@GCC_4.3.0 1:4.3
+ __fractdiudq@GCC_4.3.0 1:4.3
+ __fractdiuha@GCC_4.3.0 1:4.3
+ __fractdiuhq@GCC_4.3.0 1:4.3
+ __fractdiuqq@GCC_4.3.0 1:4.3
+ __fractdiusa@GCC_4.3.0 1:4.3
+ __fractdiusq@GCC_4.3.0 1:4.3
+ __fractdqda@GCC_4.3.0 1:4.3
+ __fractdqdf@GCC_4.3.0 1:4.3
+ __fractdqdi@GCC_4.3.0 1:4.3
+ __fractdqha@GCC_4.3.0 1:4.3
+ __fractdqhi@GCC_4.3.0 1:4.3
+ __fractdqhq2@GCC_4.3.0 1:4.3
+ __fractdqqi@GCC_4.3.0 1:4.3
+ __fractdqqq2@GCC_4.3.0 1:4.3
+ __fractdqsa@GCC_4.3.0 1:4.3
+ __fractdqsf@GCC_4.3.0 1:4.3
+ __fractdqsi@GCC_4.3.0 1:4.3
+ __fractdqsq2@GCC_4.3.0 1:4.3
+ __fractdquda@GCC_4.3.0 1:4.3
+ __fractdqudq@GCC_4.3.0 1:4.3
+ __fractdquha@GCC_4.3.0 1:4.3
+ __fractdquhq@GCC_4.3.0 1:4.3
+ __fractdquqq@GCC_4.3.0 1:4.3
+ __fractdqusa@GCC_4.3.0 1:4.3
+ __fractdqusq@GCC_4.3.0 1:4.3
+ __fracthada2@GCC_4.3.0 1:4.3
+ __fracthadf@GCC_4.3.0 1:4.3
+ __fracthadi@GCC_4.3.0 1:4.3
+ __fracthadq@GCC_4.3.0 1:4.3
+ __fracthahi@GCC_4.3.0 1:4.3
+ __fracthahq@GCC_4.3.0 1:4.3
+ __fracthaqi@GCC_4.3.0 1:4.3
+ __fracthaqq@GCC_4.3.0 1:4.3
+ __fracthasa2@GCC_4.3.0 1:4.3
+ __fracthasf@GCC_4.3.0 1:4.3
+ __fracthasi@GCC_4.3.0 1:4.3
+ __fracthasq@GCC_4.3.0 1:4.3
+ __fracthauda@GCC_4.3.0 1:4.3
+ __fracthaudq@GCC_4.3.0 1:4.3
+ __fracthauha@GCC_4.3.0 1:4.3
+ __fracthauhq@GCC_4.3.0 1:4.3
+ __fracthauqq@GCC_4.3.0 1:4.3
+ __fracthausa@GCC_4.3.0 1:4.3
+ __fracthausq@GCC_4.3.0 1:4.3
+ __fracthida@GCC_4.3.0 1:4.3
+ __fracthidq@GCC_4.3.0 1:4.3
+ __fracthiha@GCC_4.3.0 1:4.3
+ __fracthihq@GCC_4.3.0 1:4.3
+ __fracthiqq@GCC_4.3.0 1:4.3
+ __fracthisa@GCC_4.3.0 1:4.3
+ __fracthisq@GCC_4.3.0 1:4.3
+ __fracthiuda@GCC_4.3.0 1:4.3
+ __fracthiudq@GCC_4.3.0 1:4.3
+ __fracthiuha@GCC_4.3.0 1:4.3
+ __fracthiuhq@GCC_4.3.0 1:4.3
+ __fracthiuqq@GCC_4.3.0 1:4.3
+ __fracthiusa@GCC_4.3.0 1:4.3
+ __fracthiusq@GCC_4.3.0 1:4.3
+ __fracthqda@GCC_4.3.0 1:4.3
+ __fracthqdf@GCC_4.3.0 1:4.3
+ __fracthqdi@GCC_4.3.0 1:4.3
+ __fracthqdq2@GCC_4.3.0 1:4.3
+ __fracthqha@GCC_4.3.0 1:4.3
+ __fracthqhi@GCC_4.3.0 1:4.3
+ __fracthqqi@GCC_4.3.0 1:4.3
+ __fracthqqq2@GCC_4.3.0 1:4.3
+ __fracthqsa@GCC_4.3.0 1:4.3
+ __fracthqsf@GCC_4.3.0 1:4.3
+ __fracthqsi@GCC_4.3.0 1:4.3
+ __fracthqsq2@GCC_4.3.0 1:4.3
+ __fracthquda@GCC_4.3.0 1:4.3
+ __fracthqudq@GCC_4.3.0 1:4.3
+ __fracthquha@GCC_4.3.0 1:4.3
+ __fracthquhq@GCC_4.3.0 1:4.3
+ __fracthquqq@GCC_4.3.0 1:4.3
+ __fracthqusa@GCC_4.3.0 1:4.3
+ __fracthqusq@GCC_4.3.0 1:4.3
+ __fractqida@GCC_4.3.0 1:4.3
+ __fractqidq@GCC_4.3.0 1:4.3
+ __fractqiha@GCC_4.3.0 1:4.3
+ __fractqihq@GCC_4.3.0 1:4.3
+ __fractqiqq@GCC_4.3.0 1:4.3
+ __fractqisa@GCC_4.3.0 1:4.3
+ __fractqisq@GCC_4.3.0 1:4.3
+ __fractqiuda@GCC_4.3.0 1:4.3
+ __fractqiudq@GCC_4.3.0 1:4.3
+ __fractqiuha@GCC_4.3.0 1:4.3
+ __fractqiuhq@GCC_4.3.0 1:4.3
+ __fractqiuqq@GCC_4.3.0 1:4.3
+ __fractqiusa@GCC_4.3.0 1:4.3
+ __fractqiusq@GCC_4.3.0 1:4.3
+ __fractqqda@GCC_4.3.0 1:4.3
+ __fractqqdf@GCC_4.3.0 1:4.3
+ __fractqqdi@GCC_4.3.0 1:4.3
+ __fractqqdq2@GCC_4.3.0 1:4.3
+ __fractqqha@GCC_4.3.0 1:4.3
+ __fractqqhi@GCC_4.3.0 1:4.3
+ __fractqqhq2@GCC_4.3.0 1:4.3
+ __fractqqqi@GCC_4.3.0 1:4.3
+ __fractqqsa@GCC_4.3.0 1:4.3
+ __fractqqsf@GCC_4.3.0 1:4.3
+ __fractqqsi@GCC_4.3.0 1:4.3
+ __fractqqsq2@GCC_4.3.0 1:4.3
+ __fractqquda@GCC_4.3.0 1:4.3
+ __fractqqudq@GCC_4.3.0 1:4.3
+ __fractqquha@GCC_4.3.0 1:4.3
+ __fractqquhq@GCC_4.3.0 1:4.3
+ __fractqquqq@GCC_4.3.0 1:4.3
+ __fractqqusa@GCC_4.3.0 1:4.3
+ __fractqqusq@GCC_4.3.0 1:4.3
+ __fractsada2@GCC_4.3.0 1:4.3
+ __fractsadf@GCC_4.3.0 1:4.3
+ __fractsadi@GCC_4.3.0 1:4.3
+ __fractsadq@GCC_4.3.0 1:4.3
+ __fractsaha2@GCC_4.3.0 1:4.3
+ __fractsahi@GCC_4.3.0 1:4.3
+ __fractsahq@GCC_4.3.0 1:4.3
+ __fractsaqi@GCC_4.3.0 1:4.3
+ __fractsaqq@GCC_4.3.0 1:4.3
+ __fractsasf@GCC_4.3.0 1:4.3
+ __fractsasi@GCC_4.3.0 1:4.3
+ __fractsasq@GCC_4.3.0 1:4.3
+ __fractsauda@GCC_4.3.0 1:4.3
+ __fractsaudq@GCC_4.3.0 1:4.3
+ __fractsauha@GCC_4.3.0 1:4.3
+ __fractsauhq@GCC_4.3.0 1:4.3
+ __fractsauqq@GCC_4.3.0 1:4.3
+ __fractsausa@GCC_4.3.0 1:4.3
+ __fractsausq@GCC_4.3.0 1:4.3
+ __fractsfda@GCC_4.3.0 1:4.3
+ __fractsfdq@GCC_4.3.0 1:4.3
+ __fractsfha@GCC_4.3.0 1:4.3
+ __fractsfhq@GCC_4.3.0 1:4.3
+ __fractsfqq@GCC_4.3.0 1:4.3
+ __fractsfsa@GCC_4.3.0 1:4.3
+ __fractsfsq@GCC_4.3.0 1:4.3
+ __fractsfuda@GCC_4.3.0 1:4.3
+ __fractsfudq@GCC_4.3.0 1:4.3
+ __fractsfuha@GCC_4.3.0 1:4.3
+ __fractsfuhq@GCC_4.3.0 1:4.3
+ __fractsfuqq@GCC_4.3.0 1:4.3
+ __fractsfusa@GCC_4.3.0 1:4.3
+ __fractsfusq@GCC_4.3.0 1:4.3
+ __fractsida@GCC_4.3.0 1:4.3
+ __fractsidq@GCC_4.3.0 1:4.3
+ __fractsiha@GCC_4.3.0 1:4.3
+ __fractsihq@GCC_4.3.0 1:4.3
+ __fractsiqq@GCC_4.3.0 1:4.3
+ __fractsisa@GCC_4.3.0 1:4.3
+ __fractsisq@GCC_4.3.0 1:4.3
+ __fractsiuda@GCC_4.3.0 1:4.3
+ __fractsiudq@GCC_4.3.0 1:4.3
+ __fractsiuha@GCC_4.3.0 1:4.3
+ __fractsiuhq@GCC_4.3.0 1:4.3
+ __fractsiuqq@GCC_4.3.0 1:4.3
+ __fractsiusa@GCC_4.3.0 1:4.3
+ __fractsiusq@GCC_4.3.0 1:4.3
+ __fractsqda@GCC_4.3.0 1:4.3
+ __fractsqdf@GCC_4.3.0 1:4.3
+ __fractsqdi@GCC_4.3.0 1:4.3
+ __fractsqdq2@GCC_4.3.0 1:4.3
+ __fractsqha@GCC_4.3.0 1:4.3
+ __fractsqhi@GCC_4.3.0 1:4.3
+ __fractsqhq2@GCC_4.3.0 1:4.3
+ __fractsqqi@GCC_4.3.0 1:4.3
+ __fractsqqq2@GCC_4.3.0 1:4.3
+ __fractsqsa@GCC_4.3.0 1:4.3
+ __fractsqsf@GCC_4.3.0 1:4.3
+ __fractsqsi@GCC_4.3.0 1:4.3
+ __fractsquda@GCC_4.3.0 1:4.3
+ __fractsqudq@GCC_4.3.0 1:4.3
+ __fractsquha@GCC_4.3.0 1:4.3
+ __fractsquhq@GCC_4.3.0 1:4.3
+ __fractsquqq@GCC_4.3.0 1:4.3
+ __fractsqusa@GCC_4.3.0 1:4.3
+ __fractsqusq@GCC_4.3.0 1:4.3
+ __fractudada@GCC_4.3.0 1:4.3
+ __fractudadf@GCC_4.3.0 1:4.3
+ __fractudadi@GCC_4.3.0 1:4.3
+ __fractudadq@GCC_4.3.0 1:4.3
+ __fractudaha@GCC_4.3.0 1:4.3
+ __fractudahi@GCC_4.3.0 1:4.3
+ __fractudahq@GCC_4.3.0 1:4.3
+ __fractudaqi@GCC_4.3.0 1:4.3
+ __fractudaqq@GCC_4.3.0 1:4.3
+ __fractudasa@GCC_4.3.0 1:4.3
+ __fractudasf@GCC_4.3.0 1:4.3
+ __fractudasi@GCC_4.3.0 1:4.3
+ __fractudasq@GCC_4.3.0 1:4.3
+ __fractudaudq@GCC_4.3.0 1:4.3
+ __fractudauha2@GCC_4.3.0 1:4.3
+ __fractudauhq@GCC_4.3.0 1:4.3
+ __fractudauqq@GCC_4.3.0 1:4.3
+ __fractudausa2@GCC_4.3.0 1:4.3
+ __fractudausq@GCC_4.3.0 1:4.3
+ __fractudqda@GCC_4.3.0 1:4.3
+ __fractudqdf@GCC_4.3.0 1:4.3
+ __fractudqdi@GCC_4.3.0 1:4.3
+ __fractudqdq@GCC_4.3.0 1:4.3
+ __fractudqha@GCC_4.3.0 1:4.3
+ __fractudqhi@GCC_4.3.0 1:4.3
+ __fractudqhq@GCC_4.3.0 1:4.3
+ __fractudqqi@GCC_4.3.0 1:4.3
+ __fractudqqq@GCC_4.3.0 1:4.3
+ __fractudqsa@GCC_4.3.0 1:4.3
+ __fractudqsf@GCC_4.3.0 1:4.3
+ __fractudqsi@GCC_4.3.0 1:4.3
+ __fractudqsq@GCC_4.3.0 1:4.3
+ __fractudquda@GCC_4.3.0 1:4.3
+ __fractudquha@GCC_4.3.0 1:4.3
+ __fractudquhq2@GCC_4.3.0 1:4.3
+ __fractudquqq2@GCC_4.3.0 1:4.3
+ __fractudqusa@GCC_4.3.0 1:4.3
+ __fractudqusq2@GCC_4.3.0 1:4.3
+ __fractuhada@GCC_4.3.0 1:4.3
+ __fractuhadf@GCC_4.3.0 1:4.3
+ __fractuhadi@GCC_4.3.0 1:4.3
+ __fractuhadq@GCC_4.3.0 1:4.3
+ __fractuhaha@GCC_4.3.0 1:4.3
+ __fractuhahi@GCC_4.3.0 1:4.3
+ __fractuhahq@GCC_4.3.0 1:4.3
+ __fractuhaqi@GCC_4.3.0 1:4.3
+ __fractuhaqq@GCC_4.3.0 1:4.3
+ __fractuhasa@GCC_4.3.0 1:4.3
+ __fractuhasf@GCC_4.3.0 1:4.3
+ __fractuhasi@GCC_4.3.0 1:4.3
+ __fractuhasq@GCC_4.3.0 1:4.3
+ __fractuhauda2@GCC_4.3.0 1:4.3
+ __fractuhaudq@GCC_4.3.0 1:4.3
+ __fractuhauhq@GCC_4.3.0 1:4.3
+ __fractuhauqq@GCC_4.3.0 1:4.3
+ __fractuhausa2@GCC_4.3.0 1:4.3
+ __fractuhausq@GCC_4.3.0 1:4.3
+ __fractuhqda@GCC_4.3.0 1:4.3
+ __fractuhqdf@GCC_4.3.0 1:4.3
+ __fractuhqdi@GCC_4.3.0 1:4.3
+ __fractuhqdq@GCC_4.3.0 1:4.3
+ __fractuhqha@GCC_4.3.0 1:4.3
+ __fractuhqhi@GCC_4.3.0 1:4.3
+ __fractuhqhq@GCC_4.3.0 1:4.3
+ __fractuhqqi@GCC_4.3.0 1:4.3
+ __fractuhqqq@GCC_4.3.0 1:4.3
+ __fractuhqsa@GCC_4.3.0 1:4.3
+ __fractuhqsf@GCC_4.3.0 1:4.3
+ __fractuhqsi@GCC_4.3.0 1:4.3
+ __fractuhqsq@GCC_4.3.0 1:4.3
+ __fractuhquda@GCC_4.3.0 1:4.3
+ __fractuhqudq2@GCC_4.3.0 1:4.3
+ __fractuhquha@GCC_4.3.0 1:4.3
+ __fractuhquqq2@GCC_4.3.0 1:4.3
+ __fractuhqusa@GCC_4.3.0 1:4.3
+ __fractuhqusq2@GCC_4.3.0 1:4.3
+ __fractunsdadi@GCC_4.3.0 1:4.3
+ __fractunsdahi@GCC_4.3.0 1:4.3
+ __fractunsdaqi@GCC_4.3.0 1:4.3
+ __fractunsdasi@GCC_4.3.0 1:4.3
+ __fractunsdida@GCC_4.3.0 1:4.3
+ __fractunsdidq@GCC_4.3.0 1:4.3
+ __fractunsdiha@GCC_4.3.0 1:4.3
+ __fractunsdihq@GCC_4.3.0 1:4.3
+ __fractunsdiqq@GCC_4.3.0 1:4.3
+ __fractunsdisa@GCC_4.3.0 1:4.3
+ __fractunsdisq@GCC_4.3.0 1:4.3
+ __fractunsdiuda@GCC_4.3.0 1:4.3
+ __fractunsdiudq@GCC_4.3.0 1:4.3
+ __fractunsdiuha@GCC_4.3.0 1:4.3
+ __fractunsdiuhq@GCC_4.3.0 1:4.3
+ __fractunsdiuqq@GCC_4.3.0 1:4.3
+ __fractunsdiusa@GCC_4.3.0 1:4.3
+ __fractunsdiusq@GCC_4.3.0 1:4.3
+ __fractunsdqdi@GCC_4.3.0 1:4.3
+ __fractunsdqhi@GCC_4.3.0 1:4.3
+ __fractunsdqqi@GCC_4.3.0 1:4.3
+ __fractunsdqsi@GCC_4.3.0 1:4.3
+ __fractunshadi@GCC_4.3.0 1:4.3
+ __fractunshahi@GCC_4.3.0 1:4.3
+ __fractunshaqi@GCC_4.3.0 1:4.3
+ __fractunshasi@GCC_4.3.0 1:4.3
+ __fractunshida@GCC_4.3.0 1:4.3
+ __fractunshidq@GCC_4.3.0 1:4.3
+ __fractunshiha@GCC_4.3.0 1:4.3
+ __fractunshihq@GCC_4.3.0 1:4.3
+ __fractunshiqq@GCC_4.3.0 1:4.3
+ __fractunshisa@GCC_4.3.0 1:4.3
+ __fractunshisq@GCC_4.3.0 1:4.3
+ __fractunshiuda@GCC_4.3.0 1:4.3
+ __fractunshiudq@GCC_4.3.0 1:4.3
+ __fractunshiuha@GCC_4.3.0 1:4.3
+ __fractunshiuhq@GCC_4.3.0 1:4.3
+ __fractunshiuqq@GCC_4.3.0 1:4.3
+ __fractunshiusa@GCC_4.3.0 1:4.3
+ __fractunshiusq@GCC_4.3.0 1:4.3
+ __fractunshqdi@GCC_4.3.0 1:4.3
+ __fractunshqhi@GCC_4.3.0 1:4.3
+ __fractunshqqi@GCC_4.3.0 1:4.3
+ __fractunshqsi@GCC_4.3.0 1:4.3
+ __fractunsqida@GCC_4.3.0 1:4.3
+ __fractunsqidq@GCC_4.3.0 1:4.3
+ __fractunsqiha@GCC_4.3.0 1:4.3
+ __fractunsqihq@GCC_4.3.0 1:4.3
+ __fractunsqiqq@GCC_4.3.0 1:4.3
+ __fractunsqisa@GCC_4.3.0 1:4.3
+ __fractunsqisq@GCC_4.3.0 1:4.3
+ __fractunsqiuda@GCC_4.3.0 1:4.3
+ __fractunsqiudq@GCC_4.3.0 1:4.3
+ __fractunsqiuha@GCC_4.3.0 1:4.3
+ __fractunsqiuhq@GCC_4.3.0 1:4.3
+ __fractunsqiuqq@GCC_4.3.0 1:4.3
+ __fractunsqiusa@GCC_4.3.0 1:4.3
+ __fractunsqiusq@GCC_4.3.0 1:4.3
+ __fractunsqqdi@GCC_4.3.0 1:4.3
+ __fractunsqqhi@GCC_4.3.0 1:4.3
+ __fractunsqqqi@GCC_4.3.0 1:4.3
+ __fractunsqqsi@GCC_4.3.0 1:4.3
+ __fractunssadi@GCC_4.3.0 1:4.3
+ __fractunssahi@GCC_4.3.0 1:4.3
+ __fractunssaqi@GCC_4.3.0 1:4.3
+ __fractunssasi@GCC_4.3.0 1:4.3
+ __fractunssida@GCC_4.3.0 1:4.3
+ __fractunssidq@GCC_4.3.0 1:4.3
+ __fractunssiha@GCC_4.3.0 1:4.3
+ __fractunssihq@GCC_4.3.0 1:4.3
+ __fractunssiqq@GCC_4.3.0 1:4.3
+ __fractunssisa@GCC_4.3.0 1:4.3
+ __fractunssisq@GCC_4.3.0 1:4.3
+ __fractunssiuda@GCC_4.3.0 1:4.3
+ __fractunssiudq@GCC_4.3.0 1:4.3
+ __fractunssiuha@GCC_4.3.0 1:4.3
+ __fractunssiuhq@GCC_4.3.0 1:4.3
+ __fractunssiuqq@GCC_4.3.0 1:4.3
+ __fractunssiusa@GCC_4.3.0 1:4.3
+ __fractunssiusq@GCC_4.3.0 1:4.3
+ __fractunssqdi@GCC_4.3.0 1:4.3
+ __fractunssqhi@GCC_4.3.0 1:4.3
+ __fractunssqqi@GCC_4.3.0 1:4.3
+ __fractunssqsi@GCC_4.3.0 1:4.3
+ __fractunsudadi@GCC_4.3.0 1:4.3
+ __fractunsudahi@GCC_4.3.0 1:4.3
+ __fractunsudaqi@GCC_4.3.0 1:4.3
+ __fractunsudasi@GCC_4.3.0 1:4.3
+ __fractunsudqdi@GCC_4.3.0 1:4.3
+ __fractunsudqhi@GCC_4.3.0 1:4.3
+ __fractunsudqqi@GCC_4.3.0 1:4.3
+ __fractunsudqsi@GCC_4.3.0 1:4.3
+ __fractunsuhadi@GCC_4.3.0 1:4.3
+ __fractunsuhahi@GCC_4.3.0 1:4.3
+ __fractunsuhaqi@GCC_4.3.0 1:4.3
+ __fractunsuhasi@GCC_4.3.0 1:4.3
+ __fractunsuhqdi@GCC_4.3.0 1:4.3
+ __fractunsuhqhi@GCC_4.3.0 1:4.3
+ __fractunsuhqqi@GCC_4.3.0 1:4.3
+ __fractunsuhqsi@GCC_4.3.0 1:4.3
+ __fractunsuqqdi@GCC_4.3.0 1:4.3
+ __fractunsuqqhi@GCC_4.3.0 1:4.3
+ __fractunsuqqqi@GCC_4.3.0 1:4.3
+ __fractunsuqqsi@GCC_4.3.0 1:4.3
+ __fractunsusadi@GCC_4.3.0 1:4.3
+ __fractunsusahi@GCC_4.3.0 1:4.3
+ __fractunsusaqi@GCC_4.3.0 1:4.3
+ __fractunsusasi@GCC_4.3.0 1:4.3
+ __fractunsusqdi@GCC_4.3.0 1:4.3
+ __fractunsusqhi@GCC_4.3.0 1:4.3
+ __fractunsusqqi@GCC_4.3.0 1:4.3
+ __fractunsusqsi@GCC_4.3.0 1:4.3
+ __fractuqqda@GCC_4.3.0 1:4.3
+ __fractuqqdf@GCC_4.3.0 1:4.3
+ __fractuqqdi@GCC_4.3.0 1:4.3
+ __fractuqqdq@GCC_4.3.0 1:4.3
+ __fractuqqha@GCC_4.3.0 1:4.3
+ __fractuqqhi@GCC_4.3.0 1:4.3
+ __fractuqqhq@GCC_4.3.0 1:4.3
+ __fractuqqqi@GCC_4.3.0 1:4.3
+ __fractuqqqq@GCC_4.3.0 1:4.3
+ __fractuqqsa@GCC_4.3.0 1:4.3
+ __fractuqqsf@GCC_4.3.0 1:4.3
+ __fractuqqsi@GCC_4.3.0 1:4.3
+ __fractuqqsq@GCC_4.3.0 1:4.3
+ __fractuqquda@GCC_4.3.0 1:4.3
+ __fractuqqudq2@GCC_4.3.0 1:4.3
+ __fractuqquha@GCC_4.3.0 1:4.3
+ __fractuqquhq2@GCC_4.3.0 1:4.3
+ __fractuqqusa@GCC_4.3.0 1:4.3
+ __fractuqqusq2@GCC_4.3.0 1:4.3
+ __fractusada@GCC_4.3.0 1:4.3
+ __fractusadf@GCC_4.3.0 1:4.3
+ __fractusadi@GCC_4.3.0 1:4.3
+ __fractusadq@GCC_4.3.0 1:4.3
+ __fractusaha@GCC_4.3.0 1:4.3
+ __fractusahi@GCC_4.3.0 1:4.3
+ __fractusahq@GCC_4.3.0 1:4.3
+ __fractusaqi@GCC_4.3.0 1:4.3
+ __fractusaqq@GCC_4.3.0 1:4.3
+ __fractusasa@GCC_4.3.0 1:4.3
+ __fractusasf@GCC_4.3.0 1:4.3
+ __fractusasi@GCC_4.3.0 1:4.3
+ __fractusasq@GCC_4.3.0 1:4.3
+ __fractusauda2@GCC_4.3.0 1:4.3
+ __fractusaudq@GCC_4.3.0 1:4.3
+ __fractusauha2@GCC_4.3.0 1:4.3
+ __fractusauhq@GCC_4.3.0 1:4.3
+ __fractusauqq@GCC_4.3.0 1:4.3
+ __fractusausq@GCC_4.3.0 1:4.3
+ __fractusqda@GCC_4.3.0 1:4.3
+ __fractusqdf@GCC_4.3.0 1:4.3
+ __fractusqdi@GCC_4.3.0 1:4.3
+ __fractusqdq@GCC_4.3.0 1:4.3
+ __fractusqha@GCC_4.3.0 1:4.3
+ __fractusqhi@GCC_4.3.0 1:4.3
+ __fractusqhq@GCC_4.3.0 1:4.3
+ __fractusqqi@GCC_4.3.0 1:4.3
+ __fractusqqq@GCC_4.3.0 1:4.3
+ __fractusqsa@GCC_4.3.0 1:4.3
+ __fractusqsf@GCC_4.3.0 1:4.3
+ __fractusqsi@GCC_4.3.0 1:4.3
+ __fractusqsq@GCC_4.3.0 1:4.3
+ __fractusquda@GCC_4.3.0 1:4.3
+ __fractusqudq2@GCC_4.3.0 1:4.3
+ __fractusquha@GCC_4.3.0 1:4.3
+ __fractusquhq2@GCC_4.3.0 1:4.3
+ __fractusquqq2@GCC_4.3.0 1:4.3
+ __fractusqusa@GCC_4.3.0 1:4.3
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __gedf2@GCC_3.0 1:4.1.1
+ __gesf2@GCC_3.0 1:4.1.1
+ __gtdf2@GCC_3.0 1:4.1.1
+ __gtsf2@GCC_3.0 1:4.1.1
+ __ledf2@GCC_3.0 1:4.1.1
+ __lesf2@GCC_3.0 1:4.1.1
+ __lshrdi3@GCC_3.0 1:4.1.1
+ __lshruda3@GCC_4.3.0 1:4.3
+ __lshrudq3@GCC_4.3.0 1:4.3
+ __lshruha3@GCC_4.3.0 1:4.3
+ __lshruhq3@GCC_4.3.0 1:4.3
+ __lshruqq3@GCC_4.3.0 1:4.3
+ __lshrusa3@GCC_4.3.0 1:4.3
+ __lshrusq3@GCC_4.3.0 1:4.3
+ __ltdf2@GCC_3.0 1:4.1.1
+ __ltsf2@GCC_3.0 1:4.1.1
+ __mips16_adddf3@GCC_4.4.0 1:4.4.0
+ __mips16_addsf3@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_dc_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_df_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sc_9@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_0@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_10@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_1@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_2@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_5@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_6@GCC_4.4.0 1:4.4.0
+ __mips16_call_stub_sf_9@GCC_4.4.0 1:4.4.0
+ __mips16_divdf3@GCC_4.4.0 1:4.4.0
+ __mips16_divsf3@GCC_4.4.0 1:4.4.0
+ __mips16_eqdf2@GCC_4.4.0 1:4.4.0
+ __mips16_eqsf2@GCC_4.4.0 1:4.4.0
+ __mips16_extendsfdf2@GCC_4.4.0 1:4.4.0
+ __mips16_fix_truncdfsi@GCC_4.4.0 1:4.4.0
+ __mips16_fix_truncsfsi@GCC_4.4.0 1:4.4.0
+ __mips16_floatsidf@GCC_4.4.0 1:4.4.0
+ __mips16_floatsisf@GCC_4.4.0 1:4.4.0
+ __mips16_floatunsidf@GCC_4.4.0 1:4.4.0
+ __mips16_floatunsisf@GCC_4.4.0 1:4.4.0
+ __mips16_gedf2@GCC_4.4.0 1:4.4.0
+ __mips16_gesf2@GCC_4.4.0 1:4.4.0
+ __mips16_gtdf2@GCC_4.4.0 1:4.4.0
+ __mips16_gtsf2@GCC_4.4.0 1:4.4.0
+ __mips16_ledf2@GCC_4.4.0 1:4.4.0
+ __mips16_lesf2@GCC_4.4.0 1:4.4.0
+ __mips16_ltdf2@GCC_4.4.0 1:4.4.0
+ __mips16_ltsf2@GCC_4.4.0 1:4.4.0
+ __mips16_muldf3@GCC_4.4.0 1:4.4.0
+ __mips16_mulsf3@GCC_4.4.0 1:4.4.0
+ __mips16_nedf2@GCC_4.4.0 1:4.4.0
+ __mips16_nesf2@GCC_4.4.0 1:4.4.0
+ __mips16_ret_dc@GCC_4.4.0 1:4.4.0
+ __mips16_ret_df@GCC_4.4.0 1:4.4.0
+ __mips16_ret_sc@GCC_4.4.0 1:4.4.0
+ __mips16_ret_sf@GCC_4.4.0 1:4.4.0
+ __mips16_subdf3@GCC_4.4.0 1:4.4.0
+ __mips16_subsf3@GCC_4.4.0 1:4.4.0
+ __mips16_truncdfsf2@GCC_4.4.0 1:4.4.0
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __mulda3@GCC_4.3.0 1:4.3
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __muldf3@GCC_3.0 1:4.1.1
+ __muldi3@GCC_3.0 1:4.1.1
+ __muldq3@GCC_4.3.0 1:4.3
+ __mulha3@GCC_4.3.0 1:4.3
+ __mulhq3@GCC_4.3.0 1:4.3
+ __mulqq3@GCC_4.3.0 1:4.3
+ __mulsa3@GCC_4.3.0 1:4.3
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __mulsf3@GCC_3.0 1:4.1.1
+ __mulsq3@GCC_4.3.0 1:4.3
+ __muluda3@GCC_4.3.0 1:4.3
+ __muludq3@GCC_4.3.0 1:4.3
+ __muluha3@GCC_4.3.0 1:4.3
+ __muluhq3@GCC_4.3.0 1:4.3
+ __muluqq3@GCC_4.3.0 1:4.3
+ __mulusa3@GCC_4.3.0 1:4.3
+ __mulusq3@GCC_4.3.0 1:4.3
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __nedf2@GCC_3.0 1:4.1.1
+ __negda2@GCC_4.3.0 1:4.3
+ __negdf2@GCC_3.0 1:4.1.1
+ __negdi2@GCC_3.0 1:4.1.1
+ __negdq2@GCC_4.3.0 1:4.3
+ __negha2@GCC_4.3.0 1:4.3
+ __neghq2@GCC_4.3.0 1:4.3
+ __negqq2@GCC_4.3.0 1:4.3
+ __negsa2@GCC_4.3.0 1:4.3
+ __negsf2@GCC_3.0 1:4.1.1
+ __negsq2@GCC_4.3.0 1:4.3
+ __neguda2@GCC_4.3.0 1:4.3
+ __negudq2@GCC_4.3.0 1:4.3
+ __neguha2@GCC_4.3.0 1:4.3
+ __neguhq2@GCC_4.3.0 1:4.3
+ __neguqq2@GCC_4.3.0 1:4.3
+ __negusa2@GCC_4.3.0 1:4.3
+ __negusq2@GCC_4.3.0 1:4.3
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __nesf2@GCC_3.0 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __paritysi2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountsi2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __satfractdadq@GCC_4.3.0 1:4.3
+ __satfractdaha2@GCC_4.3.0 1:4.3
+ __satfractdahq@GCC_4.3.0 1:4.3
+ __satfractdaqq@GCC_4.3.0 1:4.3
+ __satfractdasa2@GCC_4.3.0 1:4.3
+ __satfractdasq@GCC_4.3.0 1:4.3
+ __satfractdauda@GCC_4.3.0 1:4.3
+ __satfractdaudq@GCC_4.3.0 1:4.3
+ __satfractdauha@GCC_4.3.0 1:4.3
+ __satfractdauhq@GCC_4.3.0 1:4.3
+ __satfractdauqq@GCC_4.3.0 1:4.3
+ __satfractdausa@GCC_4.3.0 1:4.3
+ __satfractdausq@GCC_4.3.0 1:4.3
+ __satfractdfda@GCC_4.3.0 1:4.3
+ __satfractdfdq@GCC_4.3.0 1:4.3
+ __satfractdfha@GCC_4.3.0 1:4.3
+ __satfractdfhq@GCC_4.3.0 1:4.3
+ __satfractdfqq@GCC_4.3.0 1:4.3
+ __satfractdfsa@GCC_4.3.0 1:4.3
+ __satfractdfsq@GCC_4.3.0 1:4.3
+ __satfractdfuda@GCC_4.3.0 1:4.3
+ __satfractdfudq@GCC_4.3.0 1:4.3
+ __satfractdfuha@GCC_4.3.0 1:4.3
+ __satfractdfuhq@GCC_4.3.0 1:4.3
+ __satfractdfuqq@GCC_4.3.0 1:4.3
+ __satfractdfusa@GCC_4.3.0 1:4.3
+ __satfractdfusq@GCC_4.3.0 1:4.3
+ __satfractdida@GCC_4.3.0 1:4.3
+ __satfractdidq@GCC_4.3.0 1:4.3
+ __satfractdiha@GCC_4.3.0 1:4.3
+ __satfractdihq@GCC_4.3.0 1:4.3
+ __satfractdiqq@GCC_4.3.0 1:4.3
+ __satfractdisa@GCC_4.3.0 1:4.3
+ __satfractdisq@GCC_4.3.0 1:4.3
+ __satfractdiuda@GCC_4.3.0 1:4.3
+ __satfractdiudq@GCC_4.3.0 1:4.3
+ __satfractdiuha@GCC_4.3.0 1:4.3
+ __satfractdiuhq@GCC_4.3.0 1:4.3
+ __satfractdiuqq@GCC_4.3.0 1:4.3
+ __satfractdiusa@GCC_4.3.0 1:4.3
+ __satfractdiusq@GCC_4.3.0 1:4.3
+ __satfractdqda@GCC_4.3.0 1:4.3
+ __satfractdqha@GCC_4.3.0 1:4.3
+ __satfractdqhq2@GCC_4.3.0 1:4.3
+ __satfractdqqq2@GCC_4.3.0 1:4.3
+ __satfractdqsa@GCC_4.3.0 1:4.3
+ __satfractdqsq2@GCC_4.3.0 1:4.3
+ __satfractdquda@GCC_4.3.0 1:4.3
+ __satfractdqudq@GCC_4.3.0 1:4.3
+ __satfractdquha@GCC_4.3.0 1:4.3
+ __satfractdquhq@GCC_4.3.0 1:4.3
+ __satfractdquqq@GCC_4.3.0 1:4.3
+ __satfractdqusa@GCC_4.3.0 1:4.3
+ __satfractdqusq@GCC_4.3.0 1:4.3
+ __satfracthada2@GCC_4.3.0 1:4.3
+ __satfracthadq@GCC_4.3.0 1:4.3
+ __satfracthahq@GCC_4.3.0 1:4.3
+ __satfracthaqq@GCC_4.3.0 1:4.3
+ __satfracthasa2@GCC_4.3.0 1:4.3
+ __satfracthasq@GCC_4.3.0 1:4.3
+ __satfracthauda@GCC_4.3.0 1:4.3
+ __satfracthaudq@GCC_4.3.0 1:4.3
+ __satfracthauha@GCC_4.3.0 1:4.3
+ __satfracthauhq@GCC_4.3.0 1:4.3
+ __satfracthauqq@GCC_4.3.0 1:4.3
+ __satfracthausa@GCC_4.3.0 1:4.3
+ __satfracthausq@GCC_4.3.0 1:4.3
+ __satfracthida@GCC_4.3.0 1:4.3
+ __satfracthidq@GCC_4.3.0 1:4.3
+ __satfracthiha@GCC_4.3.0 1:4.3
+ __satfracthihq@GCC_4.3.0 1:4.3
+ __satfracthiqq@GCC_4.3.0 1:4.3
+ __satfracthisa@GCC_4.3.0 1:4.3
+ __satfracthisq@GCC_4.3.0 1:4.3
+ __satfracthiuda@GCC_4.3.0 1:4.3
+ __satfracthiudq@GCC_4.3.0 1:4.3
+ __satfracthiuha@GCC_4.3.0 1:4.3
+ __satfracthiuhq@GCC_4.3.0 1:4.3
+ __satfracthiuqq@GCC_4.3.0 1:4.3
+ __satfracthiusa@GCC_4.3.0 1:4.3
+ __satfracthiusq@GCC_4.3.0 1:4.3
+ __satfracthqda@GCC_4.3.0 1:4.3
+ __satfracthqdq2@GCC_4.3.0 1:4.3
+ __satfracthqha@GCC_4.3.0 1:4.3
+ __satfracthqqq2@GCC_4.3.0 1:4.3
+ __satfracthqsa@GCC_4.3.0 1:4.3
+ __satfracthqsq2@GCC_4.3.0 1:4.3
+ __satfracthquda@GCC_4.3.0 1:4.3
+ __satfracthqudq@GCC_4.3.0 1:4.3
+ __satfracthquha@GCC_4.3.0 1:4.3
+ __satfracthquhq@GCC_4.3.0 1:4.3
+ __satfracthquqq@GCC_4.3.0 1:4.3
+ __satfracthqusa@GCC_4.3.0 1:4.3
+ __satfracthqusq@GCC_4.3.0 1:4.3
+ __satfractqida@GCC_4.3.0 1:4.3
+ __satfractqidq@GCC_4.3.0 1:4.3
+ __satfractqiha@GCC_4.3.0 1:4.3
+ __satfractqihq@GCC_4.3.0 1:4.3
+ __satfractqiqq@GCC_4.3.0 1:4.3
+ __satfractqisa@GCC_4.3.0 1:4.3
+ __satfractqisq@GCC_4.3.0 1:4.3
+ __satfractqiuda@GCC_4.3.0 1:4.3
+ __satfractqiudq@GCC_4.3.0 1:4.3
+ __satfractqiuha@GCC_4.3.0 1:4.3
+ __satfractqiuhq@GCC_4.3.0 1:4.3
+ __satfractqiuqq@GCC_4.3.0 1:4.3
+ __satfractqiusa@GCC_4.3.0 1:4.3
+ __satfractqiusq@GCC_4.3.0 1:4.3
+ __satfractqqda@GCC_4.3.0 1:4.3
+ __satfractqqdq2@GCC_4.3.0 1:4.3
+ __satfractqqha@GCC_4.3.0 1:4.3
+ __satfractqqhq2@GCC_4.3.0 1:4.3
+ __satfractqqsa@GCC_4.3.0 1:4.3
+ __satfractqqsq2@GCC_4.3.0 1:4.3
+ __satfractqquda@GCC_4.3.0 1:4.3
+ __satfractqqudq@GCC_4.3.0 1:4.3
+ __satfractqquha@GCC_4.3.0 1:4.3
+ __satfractqquhq@GCC_4.3.0 1:4.3
+ __satfractqquqq@GCC_4.3.0 1:4.3
+ __satfractqqusa@GCC_4.3.0 1:4.3
+ __satfractqqusq@GCC_4.3.0 1:4.3
+ __satfractsada2@GCC_4.3.0 1:4.3
+ __satfractsadq@GCC_4.3.0 1:4.3
+ __satfractsaha2@GCC_4.3.0 1:4.3
+ __satfractsahq@GCC_4.3.0 1:4.3
+ __satfractsaqq@GCC_4.3.0 1:4.3
+ __satfractsasq@GCC_4.3.0 1:4.3
+ __satfractsauda@GCC_4.3.0 1:4.3
+ __satfractsaudq@GCC_4.3.0 1:4.3
+ __satfractsauha@GCC_4.3.0 1:4.3
+ __satfractsauhq@GCC_4.3.0 1:4.3
+ __satfractsauqq@GCC_4.3.0 1:4.3
+ __satfractsausa@GCC_4.3.0 1:4.3
+ __satfractsausq@GCC_4.3.0 1:4.3
+ __satfractsfda@GCC_4.3.0 1:4.3
+ __satfractsfdq@GCC_4.3.0 1:4.3
+ __satfractsfha@GCC_4.3.0 1:4.3
+ __satfractsfhq@GCC_4.3.0 1:4.3
+ __satfractsfqq@GCC_4.3.0 1:4.3
+ __satfractsfsa@GCC_4.3.0 1:4.3
+ __satfractsfsq@GCC_4.3.0 1:4.3
+ __satfractsfuda@GCC_4.3.0 1:4.3
+ __satfractsfudq@GCC_4.3.0 1:4.3
+ __satfractsfuha@GCC_4.3.0 1:4.3
+ __satfractsfuhq@GCC_4.3.0 1:4.3
+ __satfractsfuqq@GCC_4.3.0 1:4.3
+ __satfractsfusa@GCC_4.3.0 1:4.3
+ __satfractsfusq@GCC_4.3.0 1:4.3
+ __satfractsida@GCC_4.3.0 1:4.3
+ __satfractsidq@GCC_4.3.0 1:4.3
+ __satfractsiha@GCC_4.3.0 1:4.3
+ __satfractsihq@GCC_4.3.0 1:4.3
+ __satfractsiqq@GCC_4.3.0 1:4.3
+ __satfractsisa@GCC_4.3.0 1:4.3
+ __satfractsisq@GCC_4.3.0 1:4.3
+ __satfractsiuda@GCC_4.3.0 1:4.3
+ __satfractsiudq@GCC_4.3.0 1:4.3
+ __satfractsiuha@GCC_4.3.0 1:4.3
+ __satfractsiuhq@GCC_4.3.0 1:4.3
+ __satfractsiuqq@GCC_4.3.0 1:4.3
+ __satfractsiusa@GCC_4.3.0 1:4.3
+ __satfractsiusq@GCC_4.3.0 1:4.3
+ __satfractsqda@GCC_4.3.0 1:4.3
+ __satfractsqdq2@GCC_4.3.0 1:4.3
+ __satfractsqha@GCC_4.3.0 1:4.3
+ __satfractsqhq2@GCC_4.3.0 1:4.3
+ __satfractsqqq2@GCC_4.3.0 1:4.3
+ __satfractsqsa@GCC_4.3.0 1:4.3
+ __satfractsquda@GCC_4.3.0 1:4.3
+ __satfractsqudq@GCC_4.3.0 1:4.3
+ __satfractsquha@GCC_4.3.0 1:4.3
+ __satfractsquhq@GCC_4.3.0 1:4.3
+ __satfractsquqq@GCC_4.3.0 1:4.3
+ __satfractsqusa@GCC_4.3.0 1:4.3
+ __satfractsqusq@GCC_4.3.0 1:4.3
+ __satfractudada@GCC_4.3.0 1:4.3
+ __satfractudadq@GCC_4.3.0 1:4.3
+ __satfractudaha@GCC_4.3.0 1:4.3
+ __satfractudahq@GCC_4.3.0 1:4.3
+ __satfractudaqq@GCC_4.3.0 1:4.3
+ __satfractudasa@GCC_4.3.0 1:4.3
+ __satfractudasq@GCC_4.3.0 1:4.3
+ __satfractudaudq@GCC_4.3.0 1:4.3
+ __satfractudauha2@GCC_4.3.0 1:4.3
+ __satfractudauhq@GCC_4.3.0 1:4.3
+ __satfractudauqq@GCC_4.3.0 1:4.3
+ __satfractudausa2@GCC_4.3.0 1:4.3
+ __satfractudausq@GCC_4.3.0 1:4.3
+ __satfractudqda@GCC_4.3.0 1:4.3
+ __satfractudqdq@GCC_4.3.0 1:4.3
+ __satfractudqha@GCC_4.3.0 1:4.3
+ __satfractudqhq@GCC_4.3.0 1:4.3
+ __satfractudqqq@GCC_4.3.0 1:4.3
+ __satfractudqsa@GCC_4.3.0 1:4.3
+ __satfractudqsq@GCC_4.3.0 1:4.3
+ __satfractudquda@GCC_4.3.0 1:4.3
+ __satfractudquha@GCC_4.3.0 1:4.3
+ __satfractudquhq2@GCC_4.3.0 1:4.3
+ __satfractudquqq2@GCC_4.3.0 1:4.3
+ __satfractudqusa@GCC_4.3.0 1:4.3
+ __satfractudqusq2@GCC_4.3.0 1:4.3
+ __satfractuhada@GCC_4.3.0 1:4.3
+ __satfractuhadq@GCC_4.3.0 1:4.3
+ __satfractuhaha@GCC_4.3.0 1:4.3
+ __satfractuhahq@GCC_4.3.0 1:4.3
+ __satfractuhaqq@GCC_4.3.0 1:4.3
+ __satfractuhasa@GCC_4.3.0 1:4.3
+ __satfractuhasq@GCC_4.3.0 1:4.3
+ __satfractuhauda2@GCC_4.3.0 1:4.3
+ __satfractuhaudq@GCC_4.3.0 1:4.3
+ __satfractuhauhq@GCC_4.3.0 1:4.3
+ __satfractuhauqq@GCC_4.3.0 1:4.3
+ __satfractuhausa2@GCC_4.3.0 1:4.3
+ __satfractuhausq@GCC_4.3.0 1:4.3
+ __satfractuhqda@GCC_4.3.0 1:4.3
+ __satfractuhqdq@GCC_4.3.0 1:4.3
+ __satfractuhqha@GCC_4.3.0 1:4.3
+ __satfractuhqhq@GCC_4.3.0 1:4.3
+ __satfractuhqqq@GCC_4.3.0 1:4.3
+ __satfractuhqsa@GCC_4.3.0 1:4.3
+ __satfractuhqsq@GCC_4.3.0 1:4.3
+ __satfractuhquda@GCC_4.3.0 1:4.3
+ __satfractuhqudq2@GCC_4.3.0 1:4.3
+ __satfractuhquha@GCC_4.3.0 1:4.3
+ __satfractuhquqq2@GCC_4.3.0 1:4.3
+ __satfractuhqusa@GCC_4.3.0 1:4.3
+ __satfractuhqusq2@GCC_4.3.0 1:4.3
+ __satfractunsdida@GCC_4.3.0 1:4.3
+ __satfractunsdidq@GCC_4.3.0 1:4.3
+ __satfractunsdiha@GCC_4.3.0 1:4.3
+ __satfractunsdihq@GCC_4.3.0 1:4.3
+ __satfractunsdiqq@GCC_4.3.0 1:4.3
+ __satfractunsdisa@GCC_4.3.0 1:4.3
+ __satfractunsdisq@GCC_4.3.0 1:4.3
+ __satfractunsdiuda@GCC_4.3.0 1:4.3
+ __satfractunsdiudq@GCC_4.3.0 1:4.3
+ __satfractunsdiuha@GCC_4.3.0 1:4.3
+ __satfractunsdiuhq@GCC_4.3.0 1:4.3
+ __satfractunsdiuqq@GCC_4.3.0 1:4.3
+ __satfractunsdiusa@GCC_4.3.0 1:4.3
+ __satfractunsdiusq@GCC_4.3.0 1:4.3
+ __satfractunshida@GCC_4.3.0 1:4.3
+ __satfractunshidq@GCC_4.3.0 1:4.3
+ __satfractunshiha@GCC_4.3.0 1:4.3
+ __satfractunshihq@GCC_4.3.0 1:4.3
+ __satfractunshiqq@GCC_4.3.0 1:4.3
+ __satfractunshisa@GCC_4.3.0 1:4.3
+ __satfractunshisq@GCC_4.3.0 1:4.3
+ __satfractunshiuda@GCC_4.3.0 1:4.3
+ __satfractunshiudq@GCC_4.3.0 1:4.3
+ __satfractunshiuha@GCC_4.3.0 1:4.3
+ __satfractunshiuhq@GCC_4.3.0 1:4.3
+ __satfractunshiuqq@GCC_4.3.0 1:4.3
+ __satfractunshiusa@GCC_4.3.0 1:4.3
+ __satfractunshiusq@GCC_4.3.0 1:4.3
+ __satfractunsqida@GCC_4.3.0 1:4.3
+ __satfractunsqidq@GCC_4.3.0 1:4.3
+ __satfractunsqiha@GCC_4.3.0 1:4.3
+ __satfractunsqihq@GCC_4.3.0 1:4.3
+ __satfractunsqiqq@GCC_4.3.0 1:4.3
+ __satfractunsqisa@GCC_4.3.0 1:4.3
+ __satfractunsqisq@GCC_4.3.0 1:4.3
+ __satfractunsqiuda@GCC_4.3.0 1:4.3
+ __satfractunsqiudq@GCC_4.3.0 1:4.3
+ __satfractunsqiuha@GCC_4.3.0 1:4.3
+ __satfractunsqiuhq@GCC_4.3.0 1:4.3
+ __satfractunsqiuqq@GCC_4.3.0 1:4.3
+ __satfractunsqiusa@GCC_4.3.0 1:4.3
+ __satfractunsqiusq@GCC_4.3.0 1:4.3
+ __satfractunssida@GCC_4.3.0 1:4.3
+ __satfractunssidq@GCC_4.3.0 1:4.3
+ __satfractunssiha@GCC_4.3.0 1:4.3
+ __satfractunssihq@GCC_4.3.0 1:4.3
+ __satfractunssiqq@GCC_4.3.0 1:4.3
+ __satfractunssisa@GCC_4.3.0 1:4.3
+ __satfractunssisq@GCC_4.3.0 1:4.3
+ __satfractunssiuda@GCC_4.3.0 1:4.3
+ __satfractunssiudq@GCC_4.3.0 1:4.3
+ __satfractunssiuha@GCC_4.3.0 1:4.3
+ __satfractunssiuhq@GCC_4.3.0 1:4.3
+ __satfractunssiuqq@GCC_4.3.0 1:4.3
+ __satfractunssiusa@GCC_4.3.0 1:4.3
+ __satfractunssiusq@GCC_4.3.0 1:4.3
+ __satfractuqqda@GCC_4.3.0 1:4.3
+ __satfractuqqdq@GCC_4.3.0 1:4.3
+ __satfractuqqha@GCC_4.3.0 1:4.3
+ __satfractuqqhq@GCC_4.3.0 1:4.3
+ __satfractuqqqq@GCC_4.3.0 1:4.3
+ __satfractuqqsa@GCC_4.3.0 1:4.3
+ __satfractuqqsq@GCC_4.3.0 1:4.3
+ __satfractuqquda@GCC_4.3.0 1:4.3
+ __satfractuqqudq2@GCC_4.3.0 1:4.3
+ __satfractuqquha@GCC_4.3.0 1:4.3
+ __satfractuqquhq2@GCC_4.3.0 1:4.3
+ __satfractuqqusa@GCC_4.3.0 1:4.3
+ __satfractuqqusq2@GCC_4.3.0 1:4.3
+ __satfractusada@GCC_4.3.0 1:4.3
+ __satfractusadq@GCC_4.3.0 1:4.3
+ __satfractusaha@GCC_4.3.0 1:4.3
+ __satfractusahq@GCC_4.3.0 1:4.3
+ __satfractusaqq@GCC_4.3.0 1:4.3
+ __satfractusasa@GCC_4.3.0 1:4.3
+ __satfractusasq@GCC_4.3.0 1:4.3
+ __satfractusauda2@GCC_4.3.0 1:4.3
+ __satfractusaudq@GCC_4.3.0 1:4.3
+ __satfractusauha2@GCC_4.3.0 1:4.3
+ __satfractusauhq@GCC_4.3.0 1:4.3
+ __satfractusauqq@GCC_4.3.0 1:4.3
+ __satfractusausq@GCC_4.3.0 1:4.3
+ __satfractusqda@GCC_4.3.0 1:4.3
+ __satfractusqdq@GCC_4.3.0 1:4.3
+ __satfractusqha@GCC_4.3.0 1:4.3
+ __satfractusqhq@GCC_4.3.0 1:4.3
+ __satfractusqqq@GCC_4.3.0 1:4.3
+ __satfractusqsa@GCC_4.3.0 1:4.3
+ __satfractusqsq@GCC_4.3.0 1:4.3
+ __satfractusquda@GCC_4.3.0 1:4.3
+ __satfractusqudq2@GCC_4.3.0 1:4.3
+ __satfractusquha@GCC_4.3.0 1:4.3
+ __satfractusquhq2@GCC_4.3.0 1:4.3
+ __satfractusquqq2@GCC_4.3.0 1:4.3
+ __satfractusqusa@GCC_4.3.0 1:4.3
+ __ssaddda3@GCC_4.3.0 1:4.3
+ __ssadddq3@GCC_4.3.0 1:4.3
+ __ssaddha3@GCC_4.3.0 1:4.3
+ __ssaddhq3@GCC_4.3.0 1:4.3
+ __ssaddqq3@GCC_4.3.0 1:4.3
+ __ssaddsa3@GCC_4.3.0 1:4.3
+ __ssaddsq3@GCC_4.3.0 1:4.3
+ __ssashlda3@GCC_4.3.0 1:4.3
+ __ssashldq3@GCC_4.3.0 1:4.3
+ __ssashlha3@GCC_4.3.0 1:4.3
+ __ssashlhq3@GCC_4.3.0 1:4.3
+ __ssashlqq3@GCC_4.3.0 1:4.3
+ __ssashlsa3@GCC_4.3.0 1:4.3
+ __ssashlsq3@GCC_4.3.0 1:4.3
+ __ssdivda3@GCC_4.3.0 1:4.3
+ __ssdivdq3@GCC_4.3.0 1:4.3
+ __ssdivha3@GCC_4.3.0 1:4.3
+ __ssdivhq3@GCC_4.3.0 1:4.3
+ __ssdivqq3@GCC_4.3.0 1:4.3
+ __ssdivsa3@GCC_4.3.0 1:4.3
+ __ssdivsq3@GCC_4.3.0 1:4.3
+ __ssmulda3@GCC_4.3.0 1:4.3
+ __ssmuldq3@GCC_4.3.0 1:4.3
+ __ssmulha3@GCC_4.3.0 1:4.3
+ __ssmulhq3@GCC_4.3.0 1:4.3
+ __ssmulqq3@GCC_4.3.0 1:4.3
+ __ssmulsa3@GCC_4.3.0 1:4.3
+ __ssmulsq3@GCC_4.3.0 1:4.3
+ __ssnegda2@GCC_4.3.0 1:4.3
+ __ssnegdq2@GCC_4.3.0 1:4.3
+ __ssnegha2@GCC_4.3.0 1:4.3
+ __ssneghq2@GCC_4.3.0 1:4.3
+ __ssnegqq2@GCC_4.3.0 1:4.3
+ __ssnegsa2@GCC_4.3.0 1:4.3
+ __ssnegsq2@GCC_4.3.0 1:4.3
+ __sssubda3@GCC_4.3.0 1:4.3
+ __sssubdq3@GCC_4.3.0 1:4.3
+ __sssubha3@GCC_4.3.0 1:4.3
+ __sssubhq3@GCC_4.3.0 1:4.3
+ __sssubqq3@GCC_4.3.0 1:4.3
+ __sssubsa3@GCC_4.3.0 1:4.3
+ __sssubsq3@GCC_4.3.0 1:4.3
+ __subda3@GCC_4.3.0 1:4.3
+ __subdf3@GCC_3.0 1:4.1.1
+ __subdq3@GCC_4.3.0 1:4.3
+ __subha3@GCC_4.3.0 1:4.3
+ __subhq3@GCC_4.3.0 1:4.3
+ __subqq3@GCC_4.3.0 1:4.3
+ __subsa3@GCC_4.3.0 1:4.3
+ __subsf3@GCC_3.0 1:4.1.1
+ __subsq3@GCC_4.3.0 1:4.3
+ __subuda3@GCC_4.3.0 1:4.3
+ __subudq3@GCC_4.3.0 1:4.3
+ __subuha3@GCC_4.3.0 1:4.3
+ __subuhq3@GCC_4.3.0 1:4.3
+ __subuqq3@GCC_4.3.0 1:4.3
+ __subusa3@GCC_4.3.0 1:4.3
+ __subusq3@GCC_4.3.0 1:4.3
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __sync_add_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_add_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_add_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_and_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_and_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_and_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_bool_compare_and_swap_1@GCC_4.4.0 1:4.4.0
+ __sync_bool_compare_and_swap_2@GCC_4.4.0 1:4.4.0
+ __sync_bool_compare_and_swap_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_add_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_add_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_add_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_and_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_and_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_and_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_nand_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_nand_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_nand_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_or_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_or_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_or_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_sub_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_sub_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_sub_4@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_xor_1@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_xor_2@GCC_4.4.0 1:4.4.0
+ __sync_fetch_and_xor_4@GCC_4.4.0 1:4.4.0
+ __sync_lock_test_and_set_1@GCC_4.4.0 1:4.4.0
+ __sync_lock_test_and_set_2@GCC_4.4.0 1:4.4.0
+ __sync_lock_test_and_set_4@GCC_4.4.0 1:4.4.0
+ __sync_nand_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_nand_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_nand_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_or_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_or_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_or_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_sub_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_sub_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_sub_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __sync_synchronize@GCC_4.4.0 1:4.4.0
+ __sync_val_compare_and_swap_1@GCC_4.4.0 1:4.4.0
+ __sync_val_compare_and_swap_2@GCC_4.4.0 1:4.4.0
+ __sync_val_compare_and_swap_4@GCC_4.4.0 1:4.4.0
+ __sync_xor_and_fetch_1@GCC_4.4.0 1:4.4.0
+ __sync_xor_and_fetch_2@GCC_4.4.0 1:4.4.0
+ __sync_xor_and_fetch_4@GCC_4.4.0 1:4.4.0
+ __truncdfsf2@GCC_3.0 1:4.1.1
+ __ucmpdi2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmoddi4@GCC_3.0 1:4.1.1
+ __udivuda3@GCC_4.3.0 1:4.3
+ __udivudq3@GCC_4.3.0 1:4.3
+ __udivuha3@GCC_4.3.0 1:4.3
+ __udivuhq3@GCC_4.3.0 1:4.3
+ __udivuqq3@GCC_4.3.0 1:4.3
+ __udivusa3@GCC_4.3.0 1:4.3
+ __udivusq3@GCC_4.3.0 1:4.3
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __unorddf2@GCC_3.3.4 1:4.1.1
+ __unordsf2@GCC_3.3.4 1:4.1.1
+ __usadduda3@GCC_4.3.0 1:4.3
+ __usaddudq3@GCC_4.3.0 1:4.3
+ __usadduha3@GCC_4.3.0 1:4.3
+ __usadduhq3@GCC_4.3.0 1:4.3
+ __usadduqq3@GCC_4.3.0 1:4.3
+ __usaddusa3@GCC_4.3.0 1:4.3
+ __usaddusq3@GCC_4.3.0 1:4.3
+ __usashluda3@GCC_4.3.0 1:4.3
+ __usashludq3@GCC_4.3.0 1:4.3
+ __usashluha3@GCC_4.3.0 1:4.3
+ __usashluhq3@GCC_4.3.0 1:4.3
+ __usashluqq3@GCC_4.3.0 1:4.3
+ __usashlusa3@GCC_4.3.0 1:4.3
+ __usashlusq3@GCC_4.3.0 1:4.3
+ __usdivuda3@GCC_4.3.0 1:4.3
+ __usdivudq3@GCC_4.3.0 1:4.3
+ __usdivuha3@GCC_4.3.0 1:4.3
+ __usdivuhq3@GCC_4.3.0 1:4.3
+ __usdivuqq3@GCC_4.3.0 1:4.3
+ __usdivusa3@GCC_4.3.0 1:4.3
+ __usdivusq3@GCC_4.3.0 1:4.3
+ __usmuluda3@GCC_4.3.0 1:4.3
+ __usmuludq3@GCC_4.3.0 1:4.3
+ __usmuluha3@GCC_4.3.0 1:4.3
+ __usmuluhq3@GCC_4.3.0 1:4.3
+ __usmuluqq3@GCC_4.3.0 1:4.3
+ __usmulusa3@GCC_4.3.0 1:4.3
+ __usmulusq3@GCC_4.3.0 1:4.3
+ __usneguda2@GCC_4.3.0 1:4.3
+ __usnegudq2@GCC_4.3.0 1:4.3
+ __usneguha2@GCC_4.3.0 1:4.3
+ __usneguhq2@GCC_4.3.0 1:4.3
+ __usneguqq2@GCC_4.3.0 1:4.3
+ __usnegusa2@GCC_4.3.0 1:4.3
+ __usnegusq2@GCC_4.3.0 1:4.3
+ __ussubuda3@GCC_4.3.0 1:4.3
+ __ussubudq3@GCC_4.3.0 1:4.3
+ __ussubuha3@GCC_4.3.0 1:4.3
+ __ussubuhq3@GCC_4.3.0 1:4.3
+ __ussubuqq3@GCC_4.3.0 1:4.3
+ __ussubusa3@GCC_4.3.0 1:4.3
+ __ussubusq3@GCC_4.3.0 1:4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/g++-BV-spu.overrides
+++ gdc-4.4-1.063-4.4.7/debian/g++-BV-spu.overrides
@@ -0,0 +1,2 @@
+g++-@BV@-spu: non-standard-dir-in-usr usr/spu/
+g++-@BV@-spu: file-in-unusual-dir
--- gdc-4.4-1.063-4.4.7.orig/debian/NEWS.gcc
+++ gdc-4.4-1.063-4.4.7/debian/NEWS.gcc
@@ -0,0 +1,659 @@
+GCC 4.4 Release Series -- Changes, New Features, and Fixes
+==========================================================
+
+
+Caveats
+=======
+  
+- __builtin_stdarg_start has been completely removed from GCC.
+  Support for <varargs.h> had been deprecated since GCC 4.0.  Use
+  __builtin_va_start as a replacement.
+
+- Some of the errors issued by the C++ front end that could be
+  downgraded to warnings in previous releases by using -fpermissive
+  are now warnings by default. They can be converted into errors by
+  using -pedantic-errors.
+
+- Use of the cpp assertion extension will now emit a warning when
+  -Wdeprecated or -pedantic is used.  This extension has been
+  deprecated for many years, but never warned about.
+
+- Packed bit-fields of type char were not properly bit-packed on many
+  targets prior to GCC 4.4.  On these targets, the fix in GCC 4.4
+  causes an ABI change.  For example there is no longer a 4-bit
+  padding between field a and b in this structure:
+    
+    struct foo
+    {
+      char a:4;
+      char b:8;
+    } __attribute__ ((packed));
+
+  There is a new warning to help identify fields that are affected:
+    
+    foo.c:5: note: Offset of packed bit-field 'b' has changed in GCC 4.4
+
+  The warning can be disabled with -Wno-packed-bitfield-compat.
+
+- On ARM EABI targets, the C++ mangling of the va_list type has been
+  changed to conform to the current revision of the EABI.  This does
+  not affect the libstdc++ library included with GCC.
+
+- The SCOUNT and POS bits of the MIPS DSP control register are now
+  treated as global. Previous versions of GCC treated these fields as
+  call-clobbered instead.
+
+- The MIPS port no longer recognizes the h asm constraint.  It was
+  necessary to remove this constraint in order to avoid generating
+  unpredictable code sequences.
+
+  One of the main uses of the h constraint was to extract the high
+  part of a multiplication on 64-bit targets.  For example:
+    
+    asm ("dmultu\t%1,%2" : "=h" (result) : "r" (x), "r" (y));
+
+  You can now achieve the same effect using 128-bit types:
+    
+    typedef unsigned int uint128_t __attribute__((mode(TI)));
+    result = ((uint128_t) x * y) >> 64;
+
+- The second sequence is better in many ways.  For example, if x and y
+  are constants, the compiler can perform the multiplication at
+  compile time.  If x and y are not constants, the compiler can
+  schedule the runtime multiplication better than it can schedule an
+  asm statement.
+    
+- Support for a number of older systems and recently unmaintained or
+  untested target ports of GCC has been declared obsolete in GCC 4.4.
+  Unless there is activity to revive them, the next release of GCC
+  will have their sources permanently removed.
+
+- The following ports for individual systems on particular
+  architectures have been obsoleted:
+    
+  - Generic a.out on IA32 and m68k (i[34567]86-*-aout*, m68k-*-aout*)
+  - Generic COFF on ARM, H8300, IA32, m68k and SH (arm-*-coff*,
+    armel-*-coff*, h8300-*-*, i[34567]86-*-coff*, m68k-*-coff*,
+    sh-*-*).  This does not affect other more specific targets using
+    the COFF object format on those architectures, or the more
+    specific H8300 and SH targets (h8300-*-rtems*, h8300-*-elf*,
+    sh-*-elf*, sh-*-symbianelf*, sh-*-linux*, sh-*-netbsdelf*,
+    sh-*-rtems*, sh-wrs-vxworks).
+  - 2BSD on PDP-11 (pdp11-*-bsd)
+  - AIX 4.1 and 4.2 on PowerPC (rs6000-ibm-aix4.[12]*,
+    powerpc-ibm-aix4.[12]*)
+  - Tuning support for Itanium1 (Merced) variants.  Note that code
+    tuned for Itanium2 should also run correctly on Itanium1.
+    
+- The protoize and unprotoize utilities have been obsoleted and will
+  be removed in GCC 4.5.  These utilities have not been installed by
+  default since GCC 3.0.
+
+- Support has been removed for all the configurations obsoleted in
+  GCC 4.3.
+
+- Unknown -Wno-* options are now silently ignored by GCC if no other
+  diagnostics are issued. If other diagnostics are issued, then GCC
+  warns about the unknown options.
+   
+- More information on porting to GCC 4.4 from previous versions of GCC
+  can be found in the porting guide for this release.
+ 
+
+General Optimizer Improvements
+==============================
+
+- A new command-line switch -findirect-inlining has been added.  When
+  turned on it allows the inliner to also inline indirect calls that
+  are discovered to have known targets at compile time thanks to
+  previous inlining.
+
+- A new command-line switch -ftree-switch-conversion has been added.
+  This new pass turns simple initializations of scalar variables in
+  switch statements into initializations from a static array, given
+  that all the values are known at compile time and the ratio between
+  the new array size and the original switch branches does not exceed
+  the parameter --param switch-conversion-max-branch-ratio (default is
+  eight).
+
+- A new command-line switch -ftree-builtin-call-dce has been added.
+  This optimization eliminates unnecessary calls to certain builtin
+  functions when the return value is not used, in cases where the
+  calls can not be eliminated entirely because the function may set
+  errno.  This optimization is on by default at -O2 and above.
+
+- A new command-line switch -fconserve-stack directs the compiler to
+  minimize stack usage even if it makes the generated code slower.
+  This affects inlining decisions.
+
+- When the assembler supports it, the compiler will now emit unwind
+  information using assembler .cfi directives.  This makes it possible
+  to use such directives in inline assembler code.  The new option
+  -fno-dwarf2-cfi-asm directs the compiler to not use .cfi directives.
+
+- The Graphite branch has been merged.  This merge has brought in a
+  new framework for loop optimizations based on a polyhedral
+  intermediate representation.  These optimizations apply to all the
+  languages supported by GCC.  The following new code transformations
+  are available in GCC 4.4:
+      
+  - -floop-interchange performs loop interchange transformations on
+    loops.  Interchanging two nested loops switches the inner and
+    outer loops.  For example, given a loop like:
+	  
+      DO J = 1, M
+        DO I = 1, N
+          A(J, I) = A(J, I) * C
+        ENDDO
+      ENDDO
+  
+    loop interchange will transform the loop as if the user had written:
+      
+      DO I = 1, N
+        DO J = 1, M
+          A(J, I) = A(J, I) * C
+        ENDDO
+      ENDDO
+	      
+    which can be beneficial when N is larger than the caches, because
+    in Fortran, the elements of an array are stored in memory
+    contiguously by column, and the original loop iterates over rows,
+    potentially creating at each access a cache miss.
+	
+  - -floop-strip-mine performs loop strip mining transformations on
+    loops.  Strip mining splits a loop into two nested loops.  The
+    outer loop has strides equal to the strip size and the inner loop
+    has strides of the original loop within a strip.  For example,
+    given a loop like:
+
+      DO I = 1, N
+        A(I) = A(I) + C
+      ENDDO
+
+    loop strip mining will transform the loop as if the user had written:
+	    
+      DO II = 1, N, 4
+        DO I = II, min (II + 3, N)
+          A(I) = A(I) + C
+        ENDDO
+      ENDDO
+
+  - -floop-block performs loop blocking transformations on loops.
+    Blocking strip mines each loop in the loop nest such that the
+    memory accesses of the element loops fit inside caches.  For
+    example, given a loop like:
+
+      DO I = 1, N
+        DO J = 1, M
+          A(J, I) = B(I) + C(J)
+        ENDDO
+      ENDDO
+	  
+    loop blocking will transform the loop as if the user had written:
+	  
+      DO II = 1, N, 64
+        DO JJ = 1, M, 64
+          DO I = II, min (II + 63, N)
+            DO J = JJ, min (JJ + 63, M)
+              A(J, I) = B(I) + C(J)
+            ENDDO
+          ENDDO
+        ENDDO
+      ENDDO
+	  
+    which can be beneficial when M is larger than the caches, because
+    the innermost loop will iterate over a smaller amount of data that
+    can be kept in the caches.
+
+- A new register allocator has replaced the old one.  It is called
+  integrated register allocator (IRA) because coalescing, register
+  live range splitting, and hard register preferencing are done
+  on-the-fly during coloring.  It also has better integration with the
+  reload pass.  IRA is a regional register allocator which uses modern
+  Chaitin-Briggs coloring instead of Chow's priority coloring used in
+  the old register allocator.  More info about IRA internals and
+  options can be found in the GCC manuals.
+    
+- A new instruction scheduler and software pipeliner, based on the
+  selective scheduling approach, has been added.  The new pass
+  performs instruction unification, register renaming, substitution
+  through register copies, and speculation during scheduling.  The
+  software pipeliner is able to pipeline non-countable loops.  The new
+  pass is targeted at scheduling-eager in-order platforms.  In GCC 4.4
+  it is available for the Intel Itanium platform working by default as
+  the second scheduling pass (after register allocation) at the -O3
+  optimization level.
+
+- When using -fprofile-generate with a multi-threaded program, the
+  profile counts may be slightly wrong due to race conditions.  The
+  new -fprofile-correction option directs the compiler to apply
+  heuristics to smooth out the inconsistencies.  By default the
+  compiler will give an error message when it finds an inconsistent
+  profile.
+
+- The new -fprofile-dir=PATH option permits setting the directory
+  where profile data files are stored when using -fprofile-generate
+  and friends, and the directory used when reading profile data files
+  using -fprofile-use and friends.
+
+
+New warning options
+===================
+
+- The new -Wframe-larger-than=NUMBER option directs GCC to emit a
+  warning if any stack frame is larger than NUMBER bytes.  This may be
+  used to help ensure that code fits within a limited amount of stack
+  space.
+
+- The new -Wno-mudflap option disables warnings about constructs which
+  can not be instrumented when using -fmudflap.
+
+
+New Languages and Language specific improvements
+================================================
+
+- Version 3.0 of the OpenMP specification is now supported for the C,
+  C++, and Fortran compilers.
+
+
+C family
+--------
+
+- A new optimize attribute was added to allow programmers to change
+  the optimization level and particular optimization options for an
+  individual function.  You can also change the optimization options
+  via the GCC optimize pragma for functions defined after the pragma.
+  The GCC push_options pragma and the GCC pop_options pragma allow you
+  temporarily save and restore the options used.  The GCC
+  reset_options pragma restores the options to what was specified on
+  the command line.
+
+- Uninitialized warnings do not require enabling optimization anymore,
+  that is, -Wuninitialized can be used together with -O0.
+  Nonetheless, the warnings given by -Wuninitialized will probably be
+  more accurate if optimization is enabled.
+
+- -Wparentheses now warns about expressions such as (!x | y) and (!x & y).
+  Using explicit parentheses, such as in ((!x) | y), silences this warning.
+
+- -Wsequence-points now warns within if, while,do while and for
+  conditions, and within for begin/end expressions.
+
+- A new option -dU is available to dump definitions of preprocessor
+  macros that are tested or expanded.
+
+
+C++
+---
+  
+- Improved experimental support for the upcoming ISO C++ standard,
+  C++0x. Including support for auto, inline namespaces, generalized
+  initializer lists, defaulted and deleted functions, new character
+  types, and scoped enums.
+
+- Those errors that may be downgraded to warnings to build legacy code
+  now mention -fpermissive when -fdiagnostics-show-option is enabled.
+
+- -Wconversion now warns if the result of a static_cast to enumeral
+  type is unspecified because the value is outside the range of the
+  enumeral type.
+
+- -Wuninitialized now warns if a non-static reference or non-static
+  const member appears in a class without constructors.
+
+- G++ now properly implements value-initialization, so objects with an
+  initializer of () and an implicitly defined default constructor will
+  be zero-initialized before the default constructor is called.
+
+
+Runtime Library (libstdc++)
+---------------------------
+
+- Improved experimental support for the upcoming ISO C++ standard,
+  C++0x, including:
+      
+  - Support for <chrono>, <condition_variable>, <cstdatomic>,
+    <forward_list>, <initializer_list>, <mutex>, <ratio>,
+    <system_error>, and <thread>.
+
+  - unique_ptr, <algorithm> additions, exception propagation, and
+    support for the new character types in <string> and <limits>.
+
+  - Existing facilities now exploit initializer lists, defaulted and
+    deleted functions, and the newly implemented core C++0x features.
+
+  - The standard containers are more efficient together with stateful
+    allocators.
+
+- Experimental support for non-standard pointer types in containers.
+  The long standing libstdc++/30928 has been fixed for targets running
+  glibc 2.10 or later.
+
+- As usual, many small and larger bug fixes, in particular quite a few
+  corner cases in <locale>.
+
+
+Fortran
+-------
+  
+- GNU Fortran now employs libcpp directly instead of using cc1 as an
+  external preprocessor. The -cpp option was added to allow manual
+  invocation of the preprocessor without relying on filename
+  extensions.
+
+- The -Warray-temporaries option warns about array temporaries
+  generated by the compiler, as an aid to optimization.
+
+- The -fcheck-array-temporaries option has been added, printing a
+  notification at run time, when an array temporary had to be created
+  for an function argument. Contrary to -Warray-temporaries the
+  warning is only printed if the array is noncontiguous.
+
+- Improved generation of DWARF debugging symbols
+
+- If using an intrinsic not part of the selected standard (via -std=
+  and -fall-intrinsics) gfortran will now treat it as if this
+  procedure were declared EXTERNAL and try to link to a user-supplied
+  procedure. -Wintrinsics-std will warn whenever this happens. The
+  now-useless option -Wnonstd-intrinsic was removed.
+
+- The flag -falign-commons has been added to control the alignment of
+  variables in COMMON blocks, which is enabled by default in line with
+  previous GCC version. Using -fno-align-commons one can force commons
+  to be contiguous in memory as required by the Fortran standard,
+  however, this slows down the memory access. The option
+  -Walign-commons, which is enabled by default, warns when padding
+  bytes were added for alignment. The proper solution is to sort the
+  common objects by decreasing storage size, which avoids the
+  alignment problems.
+
+- Fortran 2003 support has been extended:
+
+  - Wide characters (ISO 10646, UCS-4, kind=4) and UTF-8 I/O is now
+    supported (except internal reads from/writes to wide strings).
+    -fbackslash now supports also \unnnn and \Unnnnnnnn to enter
+    Unicode characters.
+
+  - Asynchronous I/O (implemented as synchronous I/O) and the
+    decimal=, size=, sign=, pad=, blank=, and delim= specifiers are
+    now supported in I/O statements.
+
+  - Support for Fortran 2003 structure constructors and for array
+    constructor with typespec has been added.
+
+  - Procedure Pointers (but not yet as component in derived types and
+    as function results) are now supported.
+
+  - Abstract types, type extension, and type-bound procedures (both
+    PROCEDURE and GENERIC but not as operators). Note: As
+    CLASS/polymorphyic types are not implemented, type-bound
+    procedures with PASS accept as non-standard extension TYPE
+    arguments.
+      
+- Fortran 2008 support has been added:
+      
+  - The -std=f2008 option and support for the file extensions .f2008
+    and .F2008 has been added.
+
+  - The g0 format descriptor is now supported.
+
+  - The Fortran 2008 mathematical intrinsics ASINH, ACOSH, ATANH, ERF,
+    ERFC, GAMMA, LOG_GAMMA, BESSEL_*, HYPOT, and ERFC_SCALED are now
+    available (some of them existed as GNU extension before). Note:
+    The hyperbolic functions are not yet supporting complex arguments
+    and the three- argument version of BESSEL_*N is not available.
+
+  - The bit intrinsics LEADZ and TRAILZ have been added.
+
+
+Java (GCJ)
+----------
+
+
+Ada
+---
+
+- The Ada runtime now supports multilibs on many platforms including
+  x86_64, SPARC and PowerPC. Their build is enabled by default.
+
+
+New Targets and Target Specific Improvements
+============================================
+
+ARM
+---
+  
+- GCC now supports optimizing for the Cortex-A9, Cortex-R4 and
+  Cortex-R4F processors and has many other improvements to
+  optimization for ARM processors.
+
+- GCC now supports the VFPv3 variant with 16 double-precision
+  registers with -mfpu=vfpv3-d16.  The option -mfpu=vfp3 has been
+  renamed to -mfpu=vfpv3.
+
+- GCC now supports the -mfix-cortex-m3-ldrd option to work around an
+  erratum on Cortex-M3 processors.
+
+- GCC now supports the __sync_* atomic operations for ARM EABI GNU/Linux.
+
+- The section anchors optimization is now enabled by default when
+  optimizing for ARM.
+
+- GCC now uses a new EABI-compatible profiling interface for EABI
+  targets.  This requires a function __gnu_mcount_nc, which is
+  provided by GNU libc versions 2.8 and later.
+  
+
+AVR
+---
+  
+- The -mno-tablejump option has been deprecated because it has the
+  same effect as the -fno-jump-tables option.
+
+- Added support for these new AVR devices:
+      
+  - ATA6289
+  - ATtiny13A
+  - ATtiny87
+  - ATtiny167
+  - ATtiny327
+  - ATmega8C1
+  - ATmega16C1
+  - ATmega32C1
+  - ATmega8M1
+  - ATmega16M1
+  - ATmega32M1
+  - ATmega32U4
+  - ATmega16HVB
+  - ATmega4HVD
+  - ATmega8HVD
+  - ATmega64C1
+  - ATmega64M1
+  - ATmega16U4
+  - ATmega32U6
+  - ATmega128RFA1
+  - AT90PWM81
+  - AT90SCR100
+  - M3000F
+  - M3000S
+  - M3001B
+  
+
+IA-32/x86-64
+------------
+  
+- Support for Intel AES built-in functions and code generation is
+  available via -maes.
+
+- Support for Intel PCLMUL built-in function and code generation is
+  available via -mpclmul.
+
+- Support for Intel AVX built-in functions and code generation is
+  available via -mavx.
+
+- Automatically align the stack for local variables with alignment
+  requirement.
+
+- GCC can now utilize the SVML library for vectorizing calls to a set
+  of C99 functions if -mveclibabi=svml is specified and you link to an
+  SVML ABI compatible library.
+
+- A new target attribute was added to allow programmers to change the
+  target options like -msse2 or -march=k8 for an individual function.
+  You can also change the target options via the GCC target pragma for
+  functions defined after the pragma.
+
+- GCC can now be configured with options --with-arch-32,
+  --with-arch-64, --with-cpu-32, --with-cpu-64, --with-tune-32 and
+  --with-tune-64 to control the default optimization separately for
+  32-bit and 64-bit modes.
+  
+
+IA-32/IA64
+----------
+  
+- Support for __float128 (TFmode) IEEE quad type and corresponding
+  TCmode IEEE complex quad type is available via the soft-fp library
+  on IA-32/IA64 targets. This includes basic arithmetic operations
+  (addition, subtraction, negation, multiplication and division) on
+  __float128 real and TCmode complex values, the full set of IEEE
+  comparisons between __float128 values, conversions to and from
+  float, double and long double floating point types, as well as
+  conversions to and from signed or unsigned integer, signed or
+  unsigned long integer and signed or unsigned quad (TImode, IA64
+  only) integer types.  Additionally, all operations generate the full
+  set of IEEE exceptions and support the full set of IEEE rounding
+  modes.
+  
+
+M68K/ColdFire
+-------------
+  
+- GCC now supports instruction scheduling for ColdFire V1, V3 and V4
+  processors.  (Scheduling support for ColdFire V2 processors was
+  added in GCC 4.3.)  GCC now supports the -mxgot option to support
+  programs requiring many GOT entries on ColdFire.  The
+  m68k-*-linux-gnu target now builds multilibs by default.
+  
+
+MIPS
+----
+
+- MIPS Technologies have extended the original MIPS SVR4 ABI to
+  include support for procedure linkage tables (PLTs) and copy
+  relocations.  These extensions allow GNU/Linux executables to use a
+  significantly more efficient code model than the one defined by the
+  original ABI.
+
+  GCC support for this code model is available via a new command-line
+  option, -mplt.  There is also a new configure-time option,
+  --with-mips-plt, to make -mplt the default.
+
+  The new code model requires support from the assembler, the linker,
+  and the runtime C library.  This support is available in binutils
+  2.19 and GLIBC 2.9.
+
+- GCC can now generate MIPS16 code for 32-bit GNU/Linux executables
+  and 32-bit GNU/Linux shared libraries.  This feature requires GNU
+  binutils 2.19 or above.
+
+- Support for RMI's XLR processor is now available through the
+  -march=xlr and -mtune=xlr options.
+
+- 64-bit targets can now perform 128-bit multiplications inline,
+  instead of relying on a libgcc function.
+
+- Native GNU/Linux toolchains now support -march=native and
+  -mtune=native, which select the host processor.
+
+- GCC now supports the R10K, R12K, R14K and R16K processors.  The
+  canonical -march= and -mtune= names for these processors are r10000,
+  r12000, r14000 and r16000 respectively.
+
+- GCC can now work around the side effects of speculative execution on
+  R10K processors.  Please see the documentation of the
+  -mr10k-cache-barrier option for details.
+
+- Support for the MIPS64 Release 2 instruction set has been added.
+  The option -march=mips64r2 enables generation of these instructions.
+
+- GCC now supports Cavium Networks' Octeon processor.  This support is
+  available through the -march=octeon and -mtune=octeon options.
+
+- GCC now supports STMicroelectronics' Loongson 2E/2F processors.  The
+  canonical -march= and -mtune= names for these processors are
+  loongson2e and loongson2f.
+  
+
+picochip
+--------
+
+Picochip is a 16-bit processor.  A typical picoChip contains over 250
+small cores, each with small amounts of memory. There are three
+processor variants (STAN, MEM and CTRL) with different instruction
+sets and memory configurations and they can be chosen using the -mae
+option.
+  
+This port is intended to be a "C" only port.
+
+
+Power Architecture and PowerPC
+------------------------------
+  
+- GCC now supports the e300c2, e300c3 and e500mc processors.
+
+- GCC now supports Xilinx processors with a single-precision FPU.
+
+- Decimal floating point is now supported for e500 processors.
+  
+
+S/390, zSeries and System z9/z10
+--------------------------------
+  
+- Support for the IBM System z10 EC/BC processor has been added.  When
+  using the -march=z10 option, the compiler will generate code making
+  use of instructions provided by the General-Instruction-Extension
+  Facility and the Execute-Extension Facility.
+  
+
+VxWorks
+-------
+  
+- GCC now supports the thread-local storage mechanism used on VxWorks.
+  
+
+Xtensa
+------
+  
+- GCC now supports thread-local storage (TLS) for Xtensa processor
+  configurations that include the Thread Pointer option.  TLS also
+  requires support from the assembler and linker; this support is
+  provided in the GNU binutils beginning with version 2.19.
+  
+
+Documentation improvements
+==========================
+
+Other significant improvements
+==============================
+
+
+------------------------------------------------------------------------------
+Please send FSF & GNU inquiries & questions to gnu@gnu.org. There are
+also other ways to contact the FSF.
+
+These pages are maintained by the GCC team.
+
+For questions related to the use of GCC, please consult these web
+pages and the GCC manuals. If that fails, the gcc-help@gcc.gnu.org
+mailing list might help.  Please send comments on these web pages and
+the development of GCC to our developer mailing list at gcc@gnu.org or
+gcc@gcc.gnu.org.  All of our lists have public archives.
+
+Copyright (C) Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110, USA.
+
+Verbatim copying and distribution of this entire article is
+permitted in any medium, provided this notice is preserved.
+
+Last modified 2009-04-21
--- gdc-4.4-1.063-4.4.7.orig/debian/gcj-BV-jre-headless.overrides
+++ gdc-4.4-1.063-4.4.7/debian/gcj-BV-jre-headless.overrides
@@ -0,0 +1,2 @@
+# pick up the exact version, in case another gcj version is installed
+gcj-@BV@-jre-headless binary: binary-or-shlib-defines-rpath
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64gfortran3.symbols.mipsel
+++ gdc-4.4-1.063-4.4.7/debian/lib64gfortran3.symbols.mipsel
@@ -0,0 +1,5 @@
+libgfortran.so.3 lib64gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.16.powerpc"
+#include "libgfortran3.symbols.16.powerpc64"
+#include "libgfortran3.symbols.64"
--- gdc-4.4-1.063-4.4.7.orig/debian/gij-wrapper-BV
+++ gdc-4.4-1.063-4.4.7/debian/gij-wrapper-BV
@@ -0,0 +1,98 @@
+#!/usr/bin/perl -w
+#
+# Starts the GNU Java interpreter.
+#
+# Command-line arguments should be in the style of Sun's Java runtime;
+# these will be converted to gij arguments before being passed to the
+# gij itself.
+#
+# The Debian JNI module directory and any other specified JNI
+# directories will be included on the JNI search path.
+#
+# Copyright (C) 2002-2003 by Ben Burton <bab@debian.org>
+# Based on the original gij-wrapper-3.2 shell script.
+
+use strict;
+
+# The real Java runtime:
+my $javaRuntime = '/usr/bin/gij-@BV@';
+
+# The debian JNI module directory:
+my $debianJNIDir = '/usr/lib/jni';
+
+# The command-line arguments to pass to the real Java runtime:
+my @commandLine;
+
+# The full JNI search path to use:
+my $JNIPath = '';
+
+# Build the command-line from the arguments given.
+my $parsingOptions = 1;
+
+# Flag used to copy argument to -classpath or -cp.
+my $copyNext = 0;
+foreach my $arg (@ARGV) {
+  if (not $parsingOptions) {
+    # We're done parsing options; just copy all remaining arguments directly.
+    push @commandLine, $arg;
+    next;
+  }
+  if ($copyNext) {
+    push @commandLine, $arg;
+    $copyNext = 0;
+    next;
+  }
+
+  # Try to interpret Sun-style options.
+  if ($arg eq '-version') {
+    push @commandLine, '--version';
+  } elsif ($arg eq '-h' or $arg eq '-help') {
+    push @commandLine, '--help';
+  } elsif ($arg eq '-cp' or $arg eq '--cp') {
+    push @commandLine, '-cp';
+    $copyNext = 1;
+  } elsif ($arg eq '-classpath' or $arg eq '--classpath') {
+    push @commandLine, '-classpath';
+    $copyNext = 1;
+  } elsif ($arg =~ /^-Djava.library.path=(.+)$/) {
+    # A component of the JNI search path has been given.
+    if ($JNIPath) {
+      $JNIPath = $JNIPath . ':' . $1;
+    } else {
+      $JNIPath = $1;
+    }
+  } elsif ($arg eq '-jar' or $arg =~ /^-D/) {
+    # Copy the argument directly.
+    push @commandLine, $arg;
+  } elsif ($arg =~ /^-/) {
+    # An unrecognised option has been passed - just drop it.
+  } else {
+    # Some non-option argument has been given.
+    # Stop parsing options at this point.
+    push @commandLine, $arg;
+    $parsingOptions = 0;
+  }
+}
+
+# Add the debian JNI module directory to the JNI search path if it's not
+# already there.
+if ($JNIPath !~ /(^|:)$debianJNIDir($|:)/) {
+  if ($JNIPath) {
+    $JNIPath = $JNIPath . ':' . $debianJNIDir;
+  } else {
+    $JNIPath = $debianJNIDir;
+  }
+}
+
+# Use environment variable $LTDL_LIBRARY_PATH to store the JNI path,
+# since gij uses libltdl to dlopen JNI modules.
+if ($ENV{LTDL_LIBRARY_PATH}) {
+    $ENV{LTDL_LIBRARY_PATH} = $ENV{LTDL_LIBRARY_PATH} . ':' . $JNIPath;
+} else {
+    $ENV{LTDL_LIBRARY_PATH} = $JNIPath;
+}
+
+# Call the real Java runtime.
+my @fullCommandLine = ( $javaRuntime );
+push @fullCommandLine, @commandLine;
+exec @fullCommandLine or exit(1);
--- gdc-4.4-1.063-4.4.7.orig/debian/libgomp1.symbols.common
+++ gdc-4.4-1.063-4.4.7/debian/libgomp1.symbols.common
@@ -0,0 +1,154 @@
+ GOMP_1.0@GOMP_1.0 4.2.1
+ GOMP_2.0@GOMP_2.0 4.4
+ GOMP_atomic_end@GOMP_1.0 4.2.1
+ GOMP_atomic_start@GOMP_1.0 4.2.1
+ GOMP_barrier@GOMP_1.0 4.2.1
+ GOMP_critical_end@GOMP_1.0 4.2.1
+ GOMP_critical_name_end@GOMP_1.0 4.2.1
+ GOMP_critical_name_start@GOMP_1.0 4.2.1
+ GOMP_critical_start@GOMP_1.0 4.2.1
+ GOMP_loop_dynamic_next@GOMP_1.0 4.2.1
+ GOMP_loop_dynamic_start@GOMP_1.0 4.2.1
+ GOMP_loop_end@GOMP_1.0 4.2.1
+ GOMP_loop_end_nowait@GOMP_1.0 4.2.1
+ GOMP_loop_guided_next@GOMP_1.0 4.2.1
+ GOMP_loop_guided_start@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_dynamic_next@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_dynamic_start@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_guided_next@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_guided_start@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_runtime_next@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_runtime_start@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_static_next@GOMP_1.0 4.2.1
+ GOMP_loop_ordered_static_start@GOMP_1.0 4.2.1
+ GOMP_loop_runtime_next@GOMP_1.0 4.2.1
+ GOMP_loop_runtime_start@GOMP_1.0 4.2.1
+ GOMP_loop_static_next@GOMP_1.0 4.2.1
+ GOMP_loop_static_start@GOMP_1.0 4.2.1
+ GOMP_loop_ull_dynamic_next@GOMP_2.0 4.4
+ GOMP_loop_ull_dynamic_start@GOMP_2.0 4.4
+ GOMP_loop_ull_guided_next@GOMP_2.0 4.4
+ GOMP_loop_ull_guided_start@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_dynamic_next@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_dynamic_start@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_guided_next@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_guided_start@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_runtime_next@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_runtime_start@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_static_next@GOMP_2.0 4.4
+ GOMP_loop_ull_ordered_static_start@GOMP_2.0 4.4
+ GOMP_loop_ull_runtime_next@GOMP_2.0 4.4
+ GOMP_loop_ull_runtime_start@GOMP_2.0 4.4
+ GOMP_loop_ull_static_next@GOMP_2.0 4.4
+ GOMP_loop_ull_static_start@GOMP_2.0 4.4
+ GOMP_ordered_end@GOMP_1.0 4.2.1
+ GOMP_ordered_start@GOMP_1.0 4.2.1
+ GOMP_parallel_end@GOMP_1.0 4.2.1
+ GOMP_parallel_loop_dynamic_start@GOMP_1.0 4.2.1
+ GOMP_parallel_loop_guided_start@GOMP_1.0 4.2.1
+ GOMP_parallel_loop_runtime_start@GOMP_1.0 4.2.1
+ GOMP_parallel_loop_static_start@GOMP_1.0 4.2.1
+ GOMP_parallel_sections_start@GOMP_1.0 4.2.1
+ GOMP_parallel_start@GOMP_1.0 4.2.1
+ GOMP_sections_end@GOMP_1.0 4.2.1
+ GOMP_sections_end_nowait@GOMP_1.0 4.2.1
+ GOMP_sections_next@GOMP_1.0 4.2.1
+ GOMP_sections_start@GOMP_1.0 4.2.1
+ GOMP_single_copy_end@GOMP_1.0 4.2.1
+ GOMP_single_copy_start@GOMP_1.0 4.2.1
+ GOMP_single_start@GOMP_1.0 4.2.1
+ GOMP_task@GOMP_2.0 4.4
+ GOMP_taskwait@GOMP_2.0 4.4
+ OMP_1.0@OMP_1.0 4.2.1
+ OMP_2.0@OMP_2.0 4.2.1
+ OMP_3.0@OMP_3.0 4.4
+ omp_destroy_lock@OMP_1.0 4.2.1
+ omp_destroy_lock@OMP_3.0 4.4
+ omp_destroy_lock_@OMP_1.0 4.2.1
+ omp_destroy_lock_@OMP_3.0 4.4
+ omp_destroy_nest_lock@OMP_1.0 4.2.1
+ omp_destroy_nest_lock@OMP_3.0 4.4
+ omp_destroy_nest_lock_@OMP_1.0 4.2.1
+ omp_destroy_nest_lock_@OMP_3.0 4.4
+ omp_get_active_level@OMP_3.0 4.4
+ omp_get_active_level_@OMP_3.0 4.4
+ omp_get_ancestor_thread_num@OMP_3.0 4.4
+ omp_get_ancestor_thread_num_8_@OMP_3.0 4.4
+ omp_get_ancestor_thread_num_@OMP_3.0 4.4
+ omp_get_dynamic@OMP_1.0 4.2.1
+ omp_get_dynamic_@OMP_1.0 4.2.1
+ omp_get_level@OMP_3.0 4.4
+ omp_get_level_@OMP_3.0 4.4
+ omp_get_max_active_levels@OMP_3.0 4.4
+ omp_get_max_active_levels_@OMP_3.0 4.4
+ omp_get_max_threads@OMP_1.0 4.2.1
+ omp_get_max_threads_@OMP_1.0 4.2.1
+ omp_get_nested@OMP_1.0 4.2.1
+ omp_get_nested_@OMP_1.0 4.2.1
+ omp_get_num_procs@OMP_1.0 4.2.1
+ omp_get_num_procs_@OMP_1.0 4.2.1
+ omp_get_num_threads@OMP_1.0 4.2.1
+ omp_get_num_threads_@OMP_1.0 4.2.1
+ omp_get_schedule@OMP_3.0 4.4
+ omp_get_schedule_8_@OMP_3.0 4.4
+ omp_get_schedule_@OMP_3.0 4.4
+ omp_get_team_size@OMP_3.0 4.4
+ omp_get_team_size_8_@OMP_3.0 4.4
+ omp_get_team_size_@OMP_3.0 4.4
+ omp_get_thread_limit@OMP_3.0 4.4
+ omp_get_thread_limit_@OMP_3.0 4.4
+ omp_get_thread_num@OMP_1.0 4.2.1
+ omp_get_thread_num_@OMP_1.0 4.2.1
+ omp_get_wtick@OMP_2.0 4.2.1
+ omp_get_wtick_@OMP_2.0 4.2.1
+ omp_get_wtime@OMP_2.0 4.2.1
+ omp_get_wtime_@OMP_2.0 4.2.1
+ omp_in_parallel@OMP_1.0 4.2.1
+ omp_in_parallel_@OMP_1.0 4.2.1
+ omp_init_lock@OMP_1.0 4.2.1
+ omp_init_lock@OMP_3.0 4.4
+ omp_init_lock_@OMP_1.0 4.2.1
+ omp_init_lock_@OMP_3.0 4.4
+ omp_init_nest_lock@OMP_1.0 4.2.1
+ omp_init_nest_lock@OMP_3.0 4.4
+ omp_init_nest_lock_@OMP_1.0 4.2.1
+ omp_init_nest_lock_@OMP_3.0 4.4
+ omp_set_dynamic@OMP_1.0 4.2.1
+ omp_set_dynamic_8_@OMP_1.0 4.2.1
+ omp_set_dynamic_@OMP_1.0 4.2.1
+ omp_set_lock@OMP_1.0 4.2.1
+ omp_set_lock@OMP_3.0 4.4
+ omp_set_lock_@OMP_1.0 4.2.1
+ omp_set_lock_@OMP_3.0 4.4
+ omp_set_max_active_levels@OMP_3.0 4.4
+ omp_set_max_active_levels_8_@OMP_3.0 4.4
+ omp_set_max_active_levels_@OMP_3.0 4.4
+ omp_set_nest_lock@OMP_1.0 4.2.1
+ omp_set_nest_lock@OMP_3.0 4.4
+ omp_set_nest_lock_@OMP_1.0 4.2.1
+ omp_set_nest_lock_@OMP_3.0 4.4
+ omp_set_nested@OMP_1.0 4.2.1
+ omp_set_nested_8_@OMP_1.0 4.2.1
+ omp_set_nested_@OMP_1.0 4.2.1
+ omp_set_num_threads@OMP_1.0 4.2.1
+ omp_set_num_threads_8_@OMP_1.0 4.2.1
+ omp_set_num_threads_@OMP_1.0 4.2.1
+ omp_set_schedule@OMP_3.0 4.4
+ omp_set_schedule_8_@OMP_3.0 4.4
+ omp_set_schedule_@OMP_3.0 4.4
+ omp_test_lock@OMP_1.0 4.2.1
+ omp_test_lock@OMP_3.0 4.4
+ omp_test_lock_@OMP_1.0 4.2.1
+ omp_test_lock_@OMP_3.0 4.4
+ omp_test_nest_lock@OMP_1.0 4.2.1
+ omp_test_nest_lock@OMP_3.0 4.4
+ omp_test_nest_lock_@OMP_1.0 4.2.1
+ omp_test_nest_lock_@OMP_3.0 4.4
+ omp_unset_lock@OMP_1.0 4.2.1
+ omp_unset_lock@OMP_3.0 4.4
+ omp_unset_lock_@OMP_1.0 4.2.1
+ omp_unset_lock_@OMP_3.0 4.4
+ omp_unset_nest_lock@OMP_1.0 4.2.1
+ omp_unset_nest_lock@OMP_3.0 4.4
+ omp_unset_nest_lock_@OMP_1.0 4.2.1
+ omp_unset_nest_lock_@OMP_3.0 4.4
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++CXX-BV-doc.doc-base
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++CXX-BV-doc.doc-base
@@ -0,0 +1,13 @@
+Document: libstdc++@CXX@-@BV@-doc
+Title: The GNU Standard C++ Library v3 (gcc-@BV@)
+Author: Various
+Abstract: This package contains documentation files for the GNU stdc++ library.
+ One set is the distribution documentation, the other set is the
+ source documentation including a namespace list, class hierarchy,
+ alphabetical list, compound list, file list, namespace members,
+ compound members and file members.
+Section: Programming/C++
+
+Format: html
+Index: /usr/share/doc/libstdc++@CXX@-@BV@-doc/libstdc++/html/index.html
+Files: /usr/share/doc/libstdc++@CXX@-@BV@-doc/libstdc++/html*/*
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc1.symbols.armel
+++ gdc-4.4-1.063-4.4.7/debian/libgcc1.symbols.armel
@@ -0,0 +1,119 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3.4@GCC_3.3.4 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_3.5@GCC_3.5 1:4.3.0
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_4.3.0 1:4.3.0
+ _Unwind_Complete@GCC_3.5 1:4.3.0
+ _Unwind_DeleteException@GCC_3.0 1:4.3.0
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.3.0
+ _Unwind_GetCFA@GCC_3.3 1:4.3.0
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.3.0
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.3.0
+ _Unwind_GetRegionStart@GCC_3.0 1:4.3.0
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.3.0
+ _Unwind_RaiseException@GCC_3.0 1:4.3.0
+ _Unwind_Resume@GCC_3.0 1:4.3.0
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.3.0
+ _Unwind_VRS_Get@GCC_3.5 1:4.3.0
+ _Unwind_VRS_Pop@GCC_3.5 1:4.3.0
+ _Unwind_VRS_Set@GCC_3.5 1:4.3.0
+ __absvdi2@GCC_3.0 1:4.3.0
+ __absvsi2@GCC_3.0 1:4.3.0
+ __adddf3@GCC_3.0 1:4.3.0
+ __addsf3@GCC_3.0 1:4.3.0
+ __addvdi3@GCC_3.0 1:4.3.0
+ __addvsi3@GCC_3.0 1:4.3.0
+ __ashldi3@GCC_3.0 1:4.3.0
+ __ashrdi3@GCC_3.0 1:4.3.0
+ __bswapdi2@GCC_4.3.0 1:4.3.0
+ __bswapsi2@GCC_4.3.0 1:4.3.0
+ __clear_cache@GCC_3.0 1:4.3.0
+ __clzdi2@GCC_3.4 1:4.3.0
+ __clzsi2@GCC_3.4 1:4.3.0
+ __cmpdi2@GCC_3.0 1:4.3.0
+ __ctzdi2@GCC_3.4 1:4.3.0
+ __ctzsi2@GCC_3.4 1:4.3.0
+ __divdc3@GCC_4.0.0 1:4.3.0
+ __divdf3@GCC_3.0 1:4.3.0
+ __divdi3@GLIBC_2.0 1:4.3.0
+ __divsc3@GCC_4.0.0 1:4.3.0
+ __divsf3@GCC_3.0 1:4.3.0
+ __divsi3@GCC_3.0 1:4.3.0
+ __emutls_get_address@GCC_4.3.0 1:4.3.0
+ __emutls_register_common@GCC_4.3.0 1:4.3.0
+ __enable_execute_stack@GCC_3.4.2 1:4.3.0
+ __eqdf2@GCC_3.0 1:4.3.0
+ __eqsf2@GCC_3.0 1:4.3.0
+ __extendsfdf2@GCC_3.0 1:4.3.0
+ __ffsdi2@GCC_3.0 1:4.3.0
+ __ffssi2@GCC_4.3.0 1:4.3.0
+ __fixdfdi@GCC_3.0 1:4.3.0
+ __fixdfsi@GCC_3.0 1:4.3.0
+ __fixsfdi@GCC_3.0 1:4.3.0
+ __fixsfsi@GCC_3.0 1:4.3.0
+ __fixunsdfdi@GCC_3.0 1:4.3.0
+ __fixunsdfsi@GCC_3.0 1:4.3.0
+ __fixunssfdi@GCC_3.0 1:4.3.0
+ __fixunssfsi@GCC_3.0 1:4.3.0
+ __floatdidf@GCC_3.0 1:4.3.0
+ __floatdisf@GCC_3.0 1:4.3.0
+ __floatsidf@GCC_3.0 1:4.3.0
+ __floatsisf@GCC_3.0 1:4.3.0
+ __floatundidf@GCC_4.2.0 1:4.3.0
+ __floatundisf@GCC_4.2.0 1:4.3.0
+ __floatunsidf@GCC_4.2.0 1:4.3.0
+ __floatunsisf@GCC_4.2.0 1:4.3.0
+ __gcc_personality_v0@GCC_3.3.1 1:4.3.0
+ __gedf2@GCC_3.0 1:4.3.0
+ __gesf2@GCC_3.0 1:4.3.0
+ __gnu_unwind_frame@GCC_3.5 1:4.3.0
+ __gtdf2@GCC_3.0 1:4.3.0
+ __gtsf2@GCC_3.0 1:4.3.0
+ __ledf2@GCC_3.0 1:4.3.0
+ __lesf2@GCC_3.0 1:4.3.0
+ __lshrdi3@GCC_3.0 1:4.3.0
+ __ltdf2@GCC_3.0 1:4.3.0
+ __ltsf2@GCC_3.0 1:4.3.0
+ __moddi3@GLIBC_2.0 1:4.3.0
+ __modsi3@GCC_3.0 1:4.3.0
+ __muldc3@GCC_4.0.0 1:4.3.0
+ __muldf3@GCC_3.0 1:4.3.0
+ __muldi3@GCC_3.0 1:4.3.0
+ __mulsc3@GCC_4.0.0 1:4.3.0
+ __mulsf3@GCC_3.0 1:4.3.0
+ __mulvdi3@GCC_3.0 1:4.3.0
+ __mulvsi3@GCC_3.0 1:4.3.0
+ __nedf2@GCC_3.0 1:4.3.0
+ __negdf2@GCC_3.0 1:4.3.0
+ __negdi2@GCC_3.0 1:4.3.0
+ __negsf2@GCC_3.0 1:4.3.0
+ __negvdi2@GCC_3.0 1:4.3.0
+ __negvsi2@GCC_3.0 1:4.3.0
+ __nesf2@GCC_3.0 1:4.3.0
+ __paritydi2@GCC_3.4 1:4.3.0
+ __paritysi2@GCC_3.4 1:4.3.0
+ __popcountdi2@GCC_3.4 1:4.3.0
+ __popcountsi2@GCC_3.4 1:4.3.0
+ __powidf2@GCC_4.0.0 1:4.3.0
+ __powisf2@GCC_4.0.0 1:4.3.0
+ __subdf3@GCC_3.0 1:4.3.0
+ __subsf3@GCC_3.0 1:4.3.0
+ __subvdi3@GCC_3.0 1:4.3.0
+ __subvsi3@GCC_3.0 1:4.3.0
+ __truncdfsf2@GCC_3.0 1:4.3.0
+ __ucmpdi2@GCC_3.0 1:4.3.0
+ __udivdi3@GLIBC_2.0 1:4.3.0
+ __udivmoddi4@GCC_3.0 1:4.3.0
+ __udivsi3@GCC_3.0 1:4.3.0
+ __umoddi3@GLIBC_2.0 1:4.3.0
+ __umodsi3@GCC_3.0 1:4.3.0
+ __unorddf2@GCC_3.3.4 1:4.3.0
+ __unordsf2@GCC_3.3.4 1:4.3.0
--- gdc-4.4-1.063-4.4.7.orig/debian/lib64gcc1.symbols.powerpc
+++ gdc-4.4-1.063-4.4.7/debian/lib64gcc1.symbols.powerpc
@@ -0,0 +1,126 @@
+libgcc_s.so.1 lib64gcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_Find_FDE@GCC_3.0 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetDataRelBase@GCC_3.0 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_GetTextRelBase@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __deregister_frame@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info@GLIBC_2.0 1:4.1.1
+ __deregister_frame_info_bases@GCC_3.0 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divtc3@GCC_4.0.0 1:4.1.1
+ __divti3@GCC_3.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfdi@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfdi@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_3.0 1:4.1.1
+ __fixtfti@GCC_3.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfsi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfsi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_3.0 1:4.1.1
+ __fixunstfti@GCC_3.0 1:4.1.1
+ __floatdidf@GCC_3.0 1:4.1.1
+ __floatdisf@GCC_3.0 1:4.1.1
+ __floatditf@GCC_3.0 1:4.1.1
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_3.0 1:4.1.1
+ __floatundidf@GCC_4.2.0 1:4.2.1
+ __floatundisf@GCC_4.2.0 1:4.2.1
+ __floatunditf@GCC_4.2.0 1:4.2.1
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntitf@GCC_4.2.0 1:4.2.1
+ __frame_state_for@GLIBC_2.0 1:4.1.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __gcc_qadd@GCC_3.4.4 1:4.1.1
+ __gcc_qdiv@GCC_3.4.4 1:4.1.1
+ __gcc_qmul@GCC_3.4.4 1:4.1.1
+ __gcc_qsub@GCC_3.4.4 1:4.1.1
+ __lshrti3@GCC_3.0 1:4.1.1
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.0.0 1:4.1.1
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.0.0 1:4.1.1
+ __register_frame@GLIBC_2.0 1:4.1.1
+ __register_frame_info@GLIBC_2.0 1:4.1.1
+ __register_frame_info_bases@GCC_3.0 1:4.1.1
+ __register_frame_info_table@GLIBC_2.0 1:4.1.1
+ __register_frame_info_table_bases@GCC_3.0 1:4.1.1
+ __register_frame_table@GLIBC_2.0 1:4.1.1
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
+ _xlqadd@GCC_3.4 1:4.1.1
+ _xlqdiv@GCC_3.4 1:4.1.1
+ _xlqmul@GCC_3.4 1:4.1.1
+ _xlqsub@GCC_3.4 1:4.1.1
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.s390
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.s390
@@ -0,0 +1,543 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.common"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base16_M_get_free_listEm@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base9_M_refillEm@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reclaim_blockEPcm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reserve_blockEmm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reclaim_blockEPcm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reserve_blockEmm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx9free_list6_M_getEm@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNK10__cxxabiv117__class_type_info12__do_dyncastEiNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcEiPKvPKS0_S2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEmmPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE2atEm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_m@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE6substrEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEEixEm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEmmPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSs16find_last_not_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs2atEm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4copyEPcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindERKSsm@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs6substrEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEmmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_checkEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_limitEmm@GLIBCXX_3.4 4.1.1
+ _ZNKSsixEm@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE6_M_putEPcmPKcPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE6_M_putEPwmPKwPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt7codecvtIcc11__mbstate_tE9do_lengthERS0_PKcS4_m@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE9do_lengthERS0_PKcS4_m@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE12_M_transformEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE12_M_transformEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcmcRSt8ios_basePcS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcmcS6_PcS7_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEciRSt8ios_basePcPKcRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcmwRSt8ios_basePwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcmwPKwPwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwiRSt8ios_basePwPKwRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_numES3_S3_RiiimRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES3_S3_RiPPKcmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_numES3_S3_RiiimRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES3_S3_RiPPKwmRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8valarrayImE4sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEmmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE2atEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_m@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEmmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5eraseEmm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwm@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_mw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmPKwm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EPKwmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EPKwmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mm@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mmRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EmwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEixEm@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPcic@GLIBCXX_3.4 4.1.1
+ _ZNSi4readEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi5seekgExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEi@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEi@GLIBCXX_3.4.5 4.1.1
+ _ZNSi6ignoreEii@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPcic@GLIBCXX_3.4 4.1.1
+ _ZNSi8readsomeEPci@GLIBCXX_3.4 4.1.1
+ _ZNSo5seekpExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSo5writeEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSo8_M_writeEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSs12_S_constructEmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs14_M_replace_auxEmmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs15_M_replace_safeEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs2atEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs4_Rep8_M_cloneERKSaIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep9_S_createEmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs5eraseEmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEm@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEmc@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7_M_moveEPcPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_moveEPcPKcm@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_mc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmRKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEmmmc@GLIBCXX_3.4 4.1.1
+ _ZNSs7reserveEm@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcmc@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcmc@GLIBCXX_3.4.5 4.1.1
+ _ZNSs9_M_mutateEmmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EPKcmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EPKcmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsmm@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsmmRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EmcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsixEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPci@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EPSt18__moneypunct_cacheIcLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EPSt18__moneypunct_cacheIcLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EPSt18__moneypunct_cacheIcLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EPSt18__moneypunct_cacheIcLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EPSt18__moneypunct_cacheIwLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EPSt18__moneypunct_cacheIwLb0EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EPSt18__moneypunct_cacheIwLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EPSt18__moneypunct_cacheIwLb1EEm@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EPSt17__timepunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EPSt17__timepunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EPSt17__timepunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EPSt17__timepunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE7seekoffExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE8xsputn_2EPKciS2_i@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_allocEm@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_setupEPcS0_i@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPFPvmEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKai@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKhi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPaiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPciS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPhiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1Ei@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPFPvmEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKai@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKhi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPaiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPciS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPhiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2Ei@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE13_M_set_bufferEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE22_M_convert_to_externalEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE13_M_set_bufferEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE22_M_convert_to_externalEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwiw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE4readEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5seekgExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4.5 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEij@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwiw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE8readsomeEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_writeEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9pubsetbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9pubsetbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EP15__locale_structPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EP15__locale_structPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EPKtbm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC1EmRKSt8valarrayImES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC2EmRKSt8valarrayImES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl16_M_install_cacheEPKNS_5facetEm@GLIBCXX_3.4.7 4.1.1
+ _ZNSt6locale5_ImplC1EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1ERKS0_m@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2EPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2ERKS0_m@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2EP15__locale_structPKcm@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EPSt16__numpunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EPSt16__numpunct_cacheIcEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EPSt16__numpunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EP15__locale_structm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EPSt16__numpunct_cacheIwEm@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC1ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC2ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayImEixEm@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Em@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@GLIBCXX_3.4 4.1.1
+ _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i@GLIBCXX_3.4.9 4.2.1
+ _ZSt16__ostream_insertIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKS3_i@GLIBCXX_3.4.9 4.2.1
+ _ZSt17__copy_streambufsIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.6 4.1.1
+ _ZSt17__copy_streambufsIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.6 4.1.1
+ _ZSt17__verify_groupingPKcmRKSs@GLIBCXX_3.4.10 4.3
+ _ZSt21__copy_streambufs_eofIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZSt21__copy_streambufs_eofIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZThn8_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSiD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSiD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSoD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSoD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10istrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10istrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10ostrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10ostrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _Znam@GLIBCXX_3.4 4.1.1
+ _ZnamRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _Znwm@GLIBCXX_3.4 4.1.1
+ _ZnwmRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.32bit.s390"
+ _ZNSt12__basic_fileIcEC1EP15pthread_mutex_t@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcEC2EP15pthread_mutex_t@GLIBCXX_3.4 4.1.1
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc2.symbols.m68k
+++ gdc-4.4-1.063-4.4.7/debian/libgcc2.symbols.m68k
@@ -0,0 +1,157 @@
+libgcc_s.so.2 libgcc2 #MINVER#
+ GCC_3.0@GCC_3.0 4.2.1
+ GCC_3.3.1@GCC_3.3.1 4.2.1
+ GCC_3.3.4@GCC_3.3.4 4.4.5
+ GCC_3.3@GCC_3.3 4.2.1
+ GCC_3.4.2@GCC_3.4.2 4.2.1
+ GCC_3.4@GCC_3.4 4.2.1
+ GCC_4.0.0@GCC_4.0.0 4.2.1
+ GCC_4.2.0@GCC_4.2.0 4.2.1
+ GCC_4.3.0@GCC_4.3.0 4.3.0
+ GLIBC_2.0@GLIBC_2.0 4.2.1
+ _Unwind_Backtrace@GCC_3.3 4.2.1
+ _Unwind_DeleteException@GCC_3.0 4.2.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 4.2.1
+ _Unwind_Find_FDE@GCC_3.0 4.2.1
+ _Unwind_ForcedUnwind@GCC_3.0 4.2.1
+ _Unwind_GetCFA@GCC_3.3 4.2.1
+ _Unwind_GetDataRelBase@GCC_3.0 4.2.1
+ _Unwind_GetGR@GCC_3.0 4.2.1
+ _Unwind_GetIP@GCC_3.0 4.2.1
+ _Unwind_GetIPInfo@GCC_4.2.0 4.2.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 4.2.1
+ _Unwind_GetRegionStart@GCC_3.0 4.2.1
+ _Unwind_GetTextRelBase@GCC_3.0 4.2.1
+ _Unwind_RaiseException@GCC_3.0 4.2.1
+ _Unwind_Resume@GCC_3.0 4.2.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 4.2.1
+ _Unwind_SetGR@GCC_3.0 4.2.1
+ _Unwind_SetIP@GCC_3.0 4.2.1
+ __absvdi2@GCC_3.0 4.2.1
+ __absvsi2@GCC_3.0 4.2.1
+ __adddf3@GCC_3.0 4.4.5
+ __addsf3@GCC_3.0 4.4.5
+ __addvdi3@GCC_3.0 4.2.1
+ __addvsi3@GCC_3.0 4.2.1
+ __addxf3@GCC_3.0 4.4.5
+ __ashldi3@GCC_3.0 4.2.1
+ __ashrdi3@GCC_3.0 4.2.1
+ __bswapdi2@GCC_4.3.0 4.3.0
+ __bswapsi2@GCC_4.3.0 4.3.0
+ __clear_cache@GCC_3.0 4.2.1
+ __clzdi2@GCC_3.4 4.2.1
+ __clzsi2@GCC_3.4 4.2.1
+ __cmpdi2@GCC_3.0 4.2.1
+ __ctzdi2@GCC_3.4 4.2.1
+ __ctzsi2@GCC_3.4 4.2.1
+ __deregister_frame@GLIBC_2.0 4.2.1
+ __deregister_frame_info@GLIBC_2.0 4.2.1
+ __deregister_frame_info_bases@GCC_3.0 4.2.1
+ __divdc3@GCC_4.0.0 4.2.1
+ __divdf3@GCC_3.0 4.4.5
+ __divdi3@GLIBC_2.0 4.2.1
+ __divsc3@GCC_4.0.0 4.2.1
+ __divsf3@GCC_3.0 4.4.5
+ __divsi3@GCC_3.0 4.4.5
+ __divxc3@GCC_4.0.0 4.2.1
+ __divxf3@GCC_3.0 4.4.5
+ __emutls_get_address@GCC_4.3.0 4.3.0
+ __emutls_register_common@GCC_4.3.0 4.3.0
+ __enable_execute_stack@GCC_3.4.2 4.2.1
+ __eqdf2@GCC_3.0 4.4.5
+ __eqsf2@GCC_3.0 4.4.5
+ __eqxf2@GCC_3.0 4.4.5
+ __extenddfxf2@GCC_3.0 4.4.5
+ __extendsfdf2@GCC_3.0 4.4.5
+ __extendsfxf2@GCC_3.0 4.4.5
+ __ffsdi2@GCC_3.0 4.2.1
+ __ffssi2@GCC_4.3.0 4.3.0
+ __fixdfdi@GCC_3.0 4.2.1
+ __fixdfsi@GCC_3.0 4.4.5
+ __fixsfdi@GCC_3.0 4.2.1
+ __fixsfsi@GCC_3.0 4.4.5
+ __fixunsdfdi@GCC_3.0 4.2.1
+ __fixunsdfsi@GCC_3.0 4.2.1
+ __fixunssfdi@GCC_3.0 4.2.1
+ __fixunssfsi@GCC_3.0 4.2.1
+ __fixunsxfdi@GCC_3.0 4.2.1
+ __fixunsxfsi@GCC_3.0 4.2.1
+ __fixxfdi@GCC_3.0 4.2.1
+ __fixxfsi@GCC_3.0 4.4.5
+ __floatdidf@GCC_3.0 4.2.1
+ __floatdisf@GCC_3.0 4.2.1
+ __floatdixf@GCC_3.0 4.2.1
+ __floatsidf@GCC_3.0 4.4.5
+ __floatsisf@GCC_3.0 4.4.5
+ __floatsixf@GCC_3.0 4.4.5
+ __floatundidf@GCC_4.2.0 4.2.1
+ __floatundisf@GCC_4.2.0 4.2.1
+ __floatundixf@GCC_4.2.0 4.2.1
+ __floatunsidf@GCC_4.2.0 4.4.5
+ __floatunsisf@GCC_4.2.0 4.4.5
+ __floatunsixf@GCC_4.2.0 4.4.5
+ __frame_state_for@GLIBC_2.0 4.2.1
+ __gcc_personality_v0@GCC_3.3.1 4.2.1
+ __gedf2@GCC_3.0 4.4.5
+ __gesf2@GCC_3.0 4.4.5
+ __gexf2@GCC_3.0 4.4.5
+ __gtdf2@GCC_3.0 4.4.5
+ __gtsf2@GCC_3.0 4.4.5
+ __gtxf2@GCC_3.0 4.4.5
+ __ledf2@GCC_3.0 4.4.5
+ __lesf2@GCC_3.0 4.4.5
+ __lexf2@GCC_3.0 4.4.5
+ __lshrdi3@GCC_3.0 4.2.1
+ __ltdf2@GCC_3.0 4.4.5
+ __ltsf2@GCC_3.0 4.4.5
+ __ltxf2@GCC_3.0 4.4.5
+ __moddi3@GLIBC_2.0 4.2.1
+ __modsi3@GCC_3.0 4.4.5
+ __muldc3@GCC_4.0.0 4.2.1
+ __muldf3@GCC_3.0 4.4.5
+ __muldi3@GCC_3.0 4.2.1
+ __mulsc3@GCC_4.0.0 4.2.1
+ __mulsf3@GCC_3.0 4.4.5
+ __mulsi3@GCC_3.0 4.4.5
+ __mulvdi3@GCC_3.0 4.2.1
+ __mulvsi3@GCC_3.0 4.2.1
+ __mulxc3@GCC_4.0.0 4.2.1
+ __mulxf3@GCC_3.0 4.4.5
+ __nedf2@GCC_3.0 4.4.5
+ __negdf2@GCC_3.0 4.4.5
+ __negdi2@GCC_3.0 4.2.1
+ __negsf2@GCC_3.0 4.4.5
+ __negvdi2@GCC_3.0 4.2.1
+ __negvsi2@GCC_3.0 4.2.1
+ __negxf2@GCC_3.0 4.4.5
+ __nesf2@GCC_3.0 4.4.5
+ __nexf2@GCC_3.0 4.4.5
+ __paritydi2@GCC_3.4 4.2.1
+ __paritysi2@GCC_3.4 4.2.1
+ __popcountdi2@GCC_3.4 4.2.1
+ __popcountsi2@GCC_3.4 4.2.1
+ __powidf2@GCC_4.0.0 4.2.1
+ __powisf2@GCC_4.0.0 4.2.1
+ __powixf2@GCC_4.0.0 4.2.1
+ __register_frame@GLIBC_2.0 4.2.1
+ __register_frame_info@GLIBC_2.0 4.2.1
+ __register_frame_info_bases@GCC_3.0 4.2.1
+ __register_frame_info_table@GLIBC_2.0 4.2.1
+ __register_frame_info_table_bases@GCC_3.0 4.2.1
+ __register_frame_table@GLIBC_2.0 4.2.1
+ __subdf3@GCC_3.0 4.4.5
+ __subsf3@GCC_3.0 4.4.5
+ __subvdi3@GCC_3.0 4.2.1
+ __subvsi3@GCC_3.0 4.2.1
+ __subxf3@GCC_3.0 4.4.5
+ __truncdfsf2@GCC_3.0 4.4.5
+ __truncxfdf2@GCC_3.0 4.4.5
+ __truncxfsf2@GCC_3.0 4.4.5
+ __ucmpdi2@GCC_3.0 4.2.1
+ __udivdi3@GLIBC_2.0 4.2.1
+ __udivmoddi4@GCC_3.0 4.2.1
+ __udivsi3@GCC_3.0 4.4.5
+ __umoddi3@GLIBC_2.0 4.2.1
+ __umodsi3@GCC_3.0 4.4.5
+ __unorddf2@GCC_3.3.4 4.4.5
+ __unordsf2@GCC_3.3.4 4.4.5
--- gdc-4.4-1.063-4.4.7.orig/debian/libmudflapMF.postinst
+++ gdc-4.4-1.063-4.4.7/debian/libmudflapMF.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+set -e
+
+case "$1" in configure)
+    if [ -d /usr/share/doc/libmudflap@MF@ ] && [ ! -h /usr/share/doc/libmudflap@MF@ ]; then
+	rm -rf /usr/share/doc/libmudflap@MF@
+	ln -s gcc-@BV@-base /usr/share/doc/libmudflap@MF@
+    fi
+esac
+
+#DEBHELPER#
--- gdc-4.4-1.063-4.4.7.orig/debian/libobjc2.symbols.common
+++ gdc-4.4-1.063-4.4.7/debian/libobjc2.symbols.common
@@ -0,0 +1,206 @@
+ __objc_add_class_to_hash@Base 4.2.1
+ __objc_class_links_resolved@Base 4.2.1
+ __objc_class_name_NXConstantString@Base 4.2.1
+ __objc_class_name_Object@Base 4.2.1
+ __objc_class_name_Protocol@Base 4.2.1
+ __objc_close_thread_system@Base 4.2.1
+ __objc_condition_allocate@Base 4.2.1
+ __objc_condition_broadcast@Base 4.2.1
+ __objc_condition_deallocate@Base 4.2.1
+ __objc_condition_signal@Base 4.2.1
+ __objc_condition_wait@Base 4.2.1
+ __objc_dangling_categories@Base 4.2.1
+ __objc_exec_class@Base 4.2.1
+ __objc_force_linking@Base 4.2.1
+ __objc_generate_gc_type_description@Base 4.2.1
+ __objc_get_forward_imp@Base 4.2.1
+ __objc_init_class_tables@Base 4.2.1
+ __objc_init_dispatch_tables@Base 4.2.1
+ __objc_init_selector_tables@Base 4.2.1
+ __objc_init_thread_system@Base 4.2.1
+ __objc_install_premature_dtable@Base 4.2.1
+ __objc_is_multi_threaded@Base 4.2.1
+ __objc_linking@Base 4.2.1
+ __objc_msg_forward@Base 4.2.1
+ __objc_msg_forward2@Base 4.3
+ __objc_mutex_allocate@Base 4.2.1
+ __objc_mutex_deallocate@Base 4.2.1
+ __objc_mutex_lock@Base 4.2.1
+ __objc_mutex_trylock@Base 4.2.1
+ __objc_mutex_unlock@Base 4.2.1
+ __objc_object_alloc@Base 4.2.1
+ __objc_object_copy@Base 4.2.1
+ __objc_object_dispose@Base 4.2.1
+ __objc_print_dtable_stats@Base 4.2.1
+ __objc_read_nbyte_uint@Base 4.2.1
+ __objc_read_nbyte_ulong@Base 4.2.1
+ __objc_register_instance_methods_to_class@Base 4.2.1
+ __objc_register_selectors_from_class@Base 4.2.1
+ __objc_register_selectors_from_list@Base 4.2.1
+ __objc_resolve_class_links@Base 4.2.1
+ __objc_responds_to@Base 4.2.1
+ __objc_runtime_mutex@Base 4.2.1
+ __objc_runtime_threads_alive@Base 4.2.1
+ __objc_selector_max_index@Base 4.2.1
+ __objc_sparse2_id@Base 4.2.1
+ __objc_thread_detach@Base 4.2.1
+ __objc_thread_exit@Base 4.2.1
+ __objc_thread_exit_status@Base 4.2.1
+ __objc_thread_get_data@Base 4.2.1
+ __objc_thread_get_priority@Base 4.2.1
+ __objc_thread_id@Base 4.2.1
+ __objc_thread_set_data@Base 4.2.1
+ __objc_thread_set_priority@Base 4.2.1
+ __objc_thread_yield@Base 4.2.1
+ __objc_uninstalled_dtable@Base 4.2.1
+ __objc_update_dispatch_table_for_class@Base 4.2.1
+ __objc_write_class@Base 4.2.1
+ __objc_write_object@Base 4.2.1
+ __objc_write_selector@Base 4.2.1
+ __sel_register_typed_name@Base 4.2.1
+ _objc_atomic_malloc@Base 4.2.1
+ _objc_became_multi_threaded@Base 4.2.1
+ _objc_calloc@Base 4.2.1
+ _objc_free@Base 4.2.1
+ _objc_load_callback@Base 4.2.1
+ _objc_lookup_class@Base 4.2.1
+ _objc_malloc@Base 4.2.1
+ _objc_object_alloc@Base 4.2.1
+ _objc_object_copy@Base 4.2.1
+ _objc_object_dispose@Base 4.2.1
+ _objc_realloc@Base 4.2.1
+ _objc_unexpected_exception@Base 4.4.0
+ _objc_valloc@Base 4.2.1
+ class_add_method_list@Base 4.2.1
+ class_create_instance@Base 4.2.1
+ class_get_class_method@Base 4.2.1
+ class_get_instance_method@Base 4.2.1
+ class_ivar_set_gcinvisible@Base 4.2.1
+ class_pose_as@Base 4.2.1
+ get_imp@Base 4.2.1
+ idxsize@Base 4.2.1
+ method_get_first_argument@Base 4.2.1
+ method_get_next_argument@Base 4.2.1
+ method_get_nth_argument@Base 4.2.1
+ method_get_number_of_arguments@Base 4.2.1
+ method_get_sizeof_arguments@Base 4.2.1
+ narrays@Base 4.2.1
+ nbuckets@Base 4.2.1
+ nil_method@Base 4.2.1
+ nindices@Base 4.2.1
+ objc_aligned_size@Base 4.2.1
+ objc_alignof_type@Base 4.2.1
+ objc_atomic_malloc@Base 4.2.1
+ objc_calloc@Base 4.2.1
+ objc_close_typed_stream@Base 4.2.1
+ objc_condition_allocate@Base 4.2.1
+ objc_condition_broadcast@Base 4.2.1
+ objc_condition_deallocate@Base 4.2.1
+ objc_condition_signal@Base 4.2.1
+ objc_condition_wait@Base 4.2.1
+ objc_end_of_typed_stream@Base 4.2.1
+ objc_error@Base 4.2.1
+ objc_exception_throw@Base 4.2.1
+ objc_flush_typed_stream@Base 4.2.1
+ objc_free@Base 4.2.1
+ objc_get_class@Base 4.2.1
+ objc_get_meta_class@Base 4.2.1
+ objc_get_stream_class_version@Base 4.2.1
+ objc_get_type_qualifiers@Base 4.2.1
+ objc_get_uninstalled_dtable@Base 4.2.1
+ objc_hash_add@Base 4.2.1
+ objc_hash_delete@Base 4.2.1
+ objc_hash_is_key_in_hash@Base 4.2.1
+ objc_hash_new@Base 4.2.1
+ objc_hash_next@Base 4.2.1
+ objc_hash_remove@Base 4.2.1
+ objc_hash_value_for_key@Base 4.2.1
+ objc_layout_finish_structure@Base 4.2.1
+ objc_layout_structure@Base 4.2.1
+ objc_layout_structure_get_info@Base 4.2.1
+ objc_layout_structure_next_member@Base 4.2.1
+ objc_lookup_class@Base 4.2.1
+ objc_malloc@Base 4.2.1
+ objc_msg_lookup@Base 4.2.1
+ objc_msg_lookup_super@Base 4.2.1
+ objc_msg_sendv@Base 4.2.1
+ objc_mutex_allocate@Base 4.2.1
+ objc_mutex_deallocate@Base 4.2.1
+ objc_mutex_lock@Base 4.2.1
+ objc_mutex_trylock@Base 4.2.1
+ objc_mutex_unlock@Base 4.2.1
+ objc_next_class@Base 4.2.1
+ objc_open_typed_stream@Base 4.2.1
+ objc_open_typed_stream_for_file@Base 4.2.1
+ objc_promoted_size@Base 4.2.1
+ objc_read_array@Base 4.2.1
+ objc_read_char@Base 4.2.1
+ objc_read_int@Base 4.2.1
+ objc_read_long@Base 4.2.1
+ objc_read_object@Base 4.2.1
+ objc_read_selector@Base 4.2.1
+ objc_read_short@Base 4.2.1
+ objc_read_string@Base 4.2.1
+ objc_read_type@Base 4.2.1
+ objc_read_types@Base 4.2.1
+ objc_read_unsigned_char@Base 4.2.1
+ objc_read_unsigned_int@Base 4.2.1
+ objc_read_unsigned_long@Base 4.2.1
+ objc_read_unsigned_short@Base 4.2.1
+ objc_realloc@Base 4.2.1
+ objc_set_error_handler@Base 4.2.1
+ objc_set_thread_callback@Base 4.2.1
+ objc_sizeof_type@Base 4.2.1
+ objc_skip_argspec@Base 4.2.1
+ objc_skip_offset@Base 4.2.1
+ objc_skip_type_qualifiers@Base 4.2.1
+ objc_skip_typespec@Base 4.2.1
+ objc_thread_add@Base 4.2.1
+ objc_thread_detach@Base 4.2.1
+ objc_thread_exit@Base 4.2.1
+ objc_thread_get_data@Base 4.2.1
+ objc_thread_get_priority@Base 4.2.1
+ objc_thread_id@Base 4.2.1
+ objc_thread_remove@Base 4.2.1
+ objc_thread_set_data@Base 4.2.1
+ objc_thread_set_priority@Base 4.2.1
+ objc_thread_yield@Base 4.2.1
+ objc_valloc@Base 4.2.1
+ objc_verror@Base 4.2.1
+ objc_write_array@Base 4.2.1
+ objc_write_char@Base 4.2.1
+ objc_write_int@Base 4.2.1
+ objc_write_long@Base 4.2.1
+ objc_write_object@Base 4.2.1
+ objc_write_object_reference@Base 4.2.1
+ objc_write_root_object@Base 4.2.1
+ objc_write_selector@Base 4.2.1
+ objc_write_short@Base 4.2.1
+ objc_write_string@Base 4.2.1
+ objc_write_string_atomic@Base 4.2.1
+ objc_write_type@Base 4.2.1
+ objc_write_types@Base 4.2.1
+ objc_write_unsigned_char@Base 4.2.1
+ objc_write_unsigned_int@Base 4.2.1
+ objc_write_unsigned_long@Base 4.2.1
+ objc_write_unsigned_short@Base 4.2.1
+ object_copy@Base 4.2.1
+ object_dispose@Base 4.2.1
+ sarray_at_put@Base 4.2.1
+ sarray_at_put_safe@Base 4.2.1
+ sarray_free@Base 4.2.1
+ sarray_lazy_copy@Base 4.2.1
+ sarray_new@Base 4.2.1
+ sarray_realloc@Base 4.2.1
+ sarray_remove_garbage@Base 4.2.1
+ search_for_method_in_list@Base 4.2.1
+ sel_get_any_typed_uid@Base 4.2.1
+ sel_get_any_uid@Base 4.2.1
+ sel_get_name@Base 4.2.1
+ sel_get_type@Base 4.2.1
+ sel_get_typed_uid@Base 4.2.1
+ sel_get_uid@Base 4.2.1
+ sel_is_mapped@Base 4.2.1
+ sel_register_name@Base 4.2.1
+ sel_register_typed_name@Base 4.2.1
+ sel_types_match@Base 4.2.1
--- gdc-4.4-1.063-4.4.7.orig/debian/runcheck.sh
+++ gdc-4.4-1.063-4.4.7/debian/runcheck.sh
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+mkdir -p build
+
+cat >build/runcheck.c <<EOF
+#include <stdio.h>
+int main()
+{
+	return printf("yes\n") != 4;
+}
+EOF
+
+if m=$(${CC:-gcc} -o build/runcheck build/runcheck.c 2>&1); then
+    m=$(build/runcheck 2>&1)
+    echo ${m#* } > build/runcheck.out
+    echo ${m#* }
+else
+    echo ${m##*:} > build/runcheck.out
+    echo ${m##*:}
+fi
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcj-common.postinst
+++ gdc-4.4-1.063-4.4.7/debian/libgcj-common.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/libgcj-common
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	    rm -rf $docdir
+	    ln -s gcj-@BV@-base $docdir
+	fi
+esac
+
+#DEBHELPER#
--- gdc-4.4-1.063-4.4.7.orig/debian/libgnatprjBV.overrides
+++ gdc-4.4-1.063-4.4.7/debian/libgnatprjBV.overrides
@@ -0,0 +1 @@
+libgnatprj@BV@: missing-dependency-on-libc
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.sparc
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.sparc
@@ -0,0 +1,7 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.32bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
--- gdc-4.4-1.063-4.4.7.orig/debian/gpc-BV-doc.doc-base.gpc
+++ gdc-4.4-1.063-4.4.7/debian/gpc-BV-doc.doc-base.gpc
@@ -0,0 +1,15 @@
+Document: gpc-@BV@-doc
+Title: The GNU Pascal Compiler
+Author: Various
+Abstract: This manual documents how to run, install and maintain the
+ GNU Pascal compiler (GPC), as well as its new features and
+ incompatibilities, and how to report bugs.
+Section: Programming/Pascal
+
+Format: html
+Index: /usr/share/doc/gcc-@BV@-base/pascal/gpc.html
+Files: /usr/share/doc/gcc-@BV@-base/pascal/gpc.html
+
+Format: info
+Index: /usr/share/info/gpc-@BV@.info.gz
+Files: /usr/share/info/gpc-@BV@*
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.ia64
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.ia64
@@ -0,0 +1,7 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.64bit"
+#include "libstdc++6.symbols.excprop"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.hppa
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.hppa
@@ -0,0 +1,8 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.excprop"
+# removed, see PR libstdc++/39491 __signbitl@GLIBCXX_3.4 4.2.1
+#include "libstdc++6.symbols.glibcxxmath"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/relink
+++ gdc-4.4-1.063-4.4.7/debian/relink
@@ -0,0 +1,74 @@
+#! /bin/sh
+#
+# Relink GNAT utilities using the shared library
+#
+
+set -e
+
+pwd=`pwd`
+
+# why?
+chmod a-w build/gcc/ada/rts/*.ali
+
+rm -rf tmp
+ln -s $pwd/build/gcc/ada/rts/libgnat.so.1 tmp/libgnat.so
+
+LD_LIBRARY_PATH=$pwd/tmp
+export LD_LIBRARY_PATH
+
+PATH=$pwd/debian:$pwd/tmp:$PATH
+export PATH
+
+echo "#! /bin/sh" > tmp/dgcc
+echo "$pwd/build/gcc/xgcc -B$pwd/build/gcc/ "'"$@"' >> tmp/dgcc
+chmod 755 tmp/dgcc
+
+echo "#! /bin/sh" > tmp/dgnatlink
+echo "$pwd/build/gcc/gnatlink --GCC=dgcc "'"$@"' >> tmp/dgnatlink
+chmod 755 tmp/dgnatlink
+
+GMCMD="$pwd/build/gcc/gnatmake -I- -Irts -I. -a -m --GNATBIND=$pwd/build/gcc/gnatbind --GNATLINK=dgnatlink --GCC=dgcc"
+
+#cd $pwd/build/gcc/ada
+#make CFLAGS="-O2" CC="../xgcc -B../" STAGE_PREFIX=../ a-link.o a-gmem.o
+#cd $pwd
+
+[ -f build/gcc/gnatmake.old ] || cp -p build/gcc/gnatmake build/gcc/gnatmake.old
+[ -f build/gcc/gnatlink.old ] || cp -p build/gcc/gnatlink build/gcc/gnatlink.old
+
+make -C build/gcc/ada \
+	CFLAGS='-gnatp -gnata -O2 ' \
+	ADA_INCLUDES="-I." \
+	CC="../xgcc -B../" \
+	STAGE_PREFIX=../ \
+    ../gnatmake ../gnatlink
+
+mv gnatmake bgnatmake
+mv gnatlink bgnatlink
+exit 0
+
+cd build/gcc/ada
+for i in ../gnatchop ../gnatcmd \
+    ../gnatkr ../gnatlbr \
+    ../gnatls ../gnatmake \
+    ../gnatprep ../gnatpsys \
+    ../gnatxref ../gnatfind
+do
+  rm -f $i
+  $GMCMD -O2 -gnatp -o $i `basename $i`.adb -largs -L..
+done
+
+rm -f ../gnatmem
+$GMCMD -O2 -gnatp -o ../gnatmem gnatmem.adb -largs -L.. a-gmem.o
+$GMCMD -O2 -gnatp -o ../gnatlink gnatlink -largs -L.. a-link.o
+rm -f ../gnatpsta
+
+make CFLAGS="-O2" CC="../xgcc -B../" a-gettty.o a-deftar.o
+$GMCMD -O2 -gnatp -o ../gnatpsta gnatpsta -largs -L.. a-gettty.o a-deftar.o
+rm -f ../gnatbl
+
+make CFLAGS="-O2" CC="../xgcc -B../" gnatbl.o
+../xgcc -B../ -o ../gnatbl gnatbl.o -L.. -lgnat
+rm -f ../bgnatmake ../bgnatlink ../debian/dgcc ../debian/dgnatlink
+
+chmod +w rts/*.ali
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.mipsel
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.mipsel
@@ -0,0 +1,7 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.excprop"
+#include "libstdc++6.symbols.glibcxxmath"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0
--- gdc-4.4-1.063-4.4.7.orig/debian/porting.html
+++ gdc-4.4-1.063-4.4.7/debian/porting.html
@@ -0,0 +1,30 @@
+<html lang="en">
+<head>
+<title>Porting libstdc++-v3</title>
+<meta http-equiv="Content-Type" content="text/html">
+<meta name="description" content="Porting libstdc++-v3">
+<meta name="generator" content="makeinfo 4.6">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+--></style>
+</head>
+<body>
+<h1 class="settitle">Porting libstdc++-v3</h1>
+<div class="node">
+<p><hr>
+Node:&nbsp;<a name="Top">Top</a>,
+Next:&nbsp;<a rel="next" accesskey="n" href="#Operating%20system">Operating system</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
+<br>
+</div>
+
+The documentation in this file was removed, because it is licencensed
+under a non DFSG conforming licencse.
+
+</body></html>
--- gdc-4.4-1.063-4.4.7.orig/debian/gcc-dummy.texi
+++ gdc-4.4-1.063-4.4.7/debian/gcc-dummy.texi
@@ -0,0 +1,41 @@
+\input texinfo  @c -*-texinfo-*-
+@c %**start of header
+
+@settitle The GNU Compiler Collection (GCC)
+
+@c Create a separate index for command line options.
+@defcodeindex op
+@c Merge the standard indexes into a single one.
+@syncodeindex fn cp
+@syncodeindex vr cp
+@syncodeindex ky cp
+@syncodeindex pg cp
+@syncodeindex tp cp
+
+@paragraphindent 1
+
+@c %**end of header
+
+@copying
+The current documentation is licensed under the same terms as the Debian packaging.
+@end copying
+@ifnottex
+@dircategory Programming
+@direntry
+* @name@: (@name@).                  The GNU Compiler Collection (@name@).
+@end direntry
+@sp 1
+@end ifnottex
+
+@summarycontents
+@contents
+@page
+
+@node Top
+@top Introduction
+@cindex introduction
+The official GNU compilers' documentation is released under the terms
+of the GNU Free Documentation License with cover texts. This has been
+considered non free by the Debian Project. Thus you will find it in the
+non-free section of the Debian archive.
+@bye
--- gdc-4.4-1.063-4.4.7.orig/debian/libgcc1.symbols.ia64
+++ gdc-4.4-1.063-4.4.7/debian/libgcc1.symbols.ia64
@@ -0,0 +1,145 @@
+libgcc_s.so.1 libgcc1 #MINVER#
+ GCC_3.0@GCC_3.0 1:4.1.1
+ GCC_3.3.1@GCC_3.3.1 1:4.1.1
+ GCC_3.3.2@GCC_3.3.2 1:4.1.1
+ GCC_3.3@GCC_3.3 1:4.1.1
+ GCC_3.4.2@GCC_3.4.2 1:4.1.1
+ GCC_3.4.4@GCC_3.4.4 1:4.1.1
+ GCC_3.4@GCC_3.4 1:4.1.1
+ GCC_4.0.0@GCC_4.0.0 1:4.1.1
+ GCC_4.2.0@GCC_4.2.0 1:4.1.1
+ GCC_4.3.0@GCC_4.3.0 1:4.3
+ GCC_4.4.0@GCC_4.4.0 1:4.4.0
+ GLIBC_2.0@GLIBC_2.0 1:4.1.1
+ _Unwind_Backtrace@GCC_3.3 1:4.1.1
+ _Unwind_DeleteException@GCC_3.0 1:4.1.1
+ _Unwind_FindEnclosingFunction@GCC_3.3 1:4.1.1
+ _Unwind_ForcedUnwind@GCC_3.0 1:4.1.1
+ _Unwind_GetBSP@GCC_3.3.2 1:4.1.1
+ _Unwind_GetCFA@GCC_3.3 1:4.1.1
+ _Unwind_GetGR@GCC_3.0 1:4.1.1
+ _Unwind_GetIP@GCC_3.0 1:4.1.1
+ _Unwind_GetIPInfo@GCC_4.2.0 1:4.1.1
+ _Unwind_GetLanguageSpecificData@GCC_3.0 1:4.1.1
+ _Unwind_GetRegionStart@GCC_3.0 1:4.1.1
+ _Unwind_RaiseException@GCC_3.0 1:4.1.1
+ _Unwind_Resume@GCC_3.0 1:4.1.1
+ _Unwind_Resume_or_Rethrow@GCC_3.3 1:4.1.1
+ _Unwind_SetGR@GCC_3.0 1:4.1.1
+ _Unwind_SetIP@GCC_3.0 1:4.1.1
+ __absvdi2@GCC_3.0 1:4.1.1
+ __absvsi2@GCC_3.0 1:4.1.1
+ __absvti2@GCC_3.4.4 1:4.1.1
+ __addtf3@GCC_4.4.0 1:4.4.0
+ __addvdi3@GCC_3.0 1:4.1.1
+ __addvsi3@GCC_3.0 1:4.1.1
+ __addvti3@GCC_3.4.4 1:4.1.1
+ __ashlti3@GCC_3.0 1:4.1.1
+ __ashrti3@GCC_3.0 1:4.1.1
+ __bswapdi2@GCC_4.3.0 1:4.3
+ __bswapsi2@GCC_4.3.0 1:4.3
+ __clear_cache@GCC_3.0 1:4.1.1
+ __clzdi2@GCC_3.4 1:4.1.1
+ __clzti2@GCC_3.4 1:4.1.1
+ __cmpti2@GCC_3.0 1:4.1.1
+ __copysigntf3@GCC_4.4.0 1:4.4.0
+ __ctzdi2@GCC_3.4 1:4.1.1
+ __ctzti2@GCC_3.4 1:4.1.1
+ __divdc3@GCC_4.0.0 1:4.1.1
+ __divdf3@GCC_3.0 1:4.1.1
+ __divdi3@GLIBC_2.0 1:4.1.1
+ __divsc3@GCC_4.0.0 1:4.1.1
+ __divsf3@GCC_3.0 1:4.1.1
+ __divsi3@GCC_3.0 1:4.1.1
+ __divtc3@GCC_4.4.0 1:4.4.0
+ __divtf3@GCC_3.0 1:4.1.1
+ __divti3@GCC_3.0 1:4.1.1
+ __divxc3@GCC_4.0.0 1:4.1.1
+ __divxf3@GCC_3.0 1:4.1.1
+ __emutls_get_address@GCC_4.3.0 1:4.3
+ __emutls_register_common@GCC_4.3.0 1:4.3
+ __enable_execute_stack@GCC_3.4.2 1:4.1.1
+ __eqtf2@GCC_4.4.0 1:4.4.0
+ __extenddftf2@GCC_4.4.0 1:4.4.0
+ __extendsftf2@GCC_4.4.0 1:4.4.0
+ __fabstf2@GCC_4.4.0 1:4.4.0
+ __ffsdi2@GCC_3.0 1:4.1.1
+ __ffsti2@GCC_3.0 1:4.1.1
+ __fixdfti@GCC_3.0 1:4.1.1
+ __fixsfti@GCC_3.0 1:4.1.1
+ __fixtfdi@GCC_4.4.0 1:4.4.0
+ __fixtfsi@GCC_4.4.0 1:4.4.0
+ __fixtfti@GCC_3.0 1:4.1.1
+ __fixunsdfdi@GCC_3.0 1:4.1.1
+ __fixunsdfti@GCC_3.0 1:4.1.1
+ __fixunssfdi@GCC_3.0 1:4.1.1
+ __fixunssfti@GCC_3.0 1:4.1.1
+ __fixunstfdi@GCC_4.4.0 1:4.4.0
+ __fixunstfsi@GCC_4.4.0 1:4.4.0
+ __fixunstfti@GCC_3.0 1:4.1.1
+ __fixunsxfdi@GCC_3.0 1:4.1.1
+ __fixunsxfti@GCC_3.0 1:4.1.1
+ __fixxfti@GCC_3.0 1:4.1.1
+ __floatditf@GCC_4.4.0 1:4.4.0
+ __floatsitf@GCC_4.4.0 1:4.4.0
+ __floattidf@GCC_3.0 1:4.1.1
+ __floattisf@GCC_3.0 1:4.1.1
+ __floattitf@GCC_3.0 1:4.1.1
+ __floattixf@GCC_3.0 1:4.1.1
+ __floatunditf@GCC_4.4.0 1:4.4.0
+ __floatunsitf@GCC_4.4.0 1:4.4.0
+ __floatuntidf@GCC_4.2.0 1:4.2.1
+ __floatuntisf@GCC_4.2.0 1:4.2.1
+ __floatuntixf@GCC_4.2.0 1:4.2.1
+ __gcc_personality_v0@GCC_3.3.1 1:4.1.1
+ __getf2@GCC_4.4.0 1:4.4.0
+ __gttf2@GCC_4.4.0 1:4.4.0
+ __ia64_nonlocal_goto@GCC_3.0 1:4.1.1
+ __ia64_restore_stack_nonlocal@GCC_3.0 1:4.1.1
+ __ia64_save_stack_nonlocal@GCC_3.0 1:4.1.1
+ __ia64_trampoline@GCC_3.0 1:4.1.1
+ __letf2@GCC_4.4.0 1:4.4.0
+ __lshrti3@GCC_3.0 1:4.1.1
+ __lttf2@GCC_4.4.0 1:4.4.0
+ __moddi3@GLIBC_2.0 1:4.1.1
+ __modsi3@GCC_3.0 1:4.1.1
+ __modti3@GCC_3.0 1:4.1.1
+ __muldc3@GCC_4.0.0 1:4.1.1
+ __mulsc3@GCC_4.0.0 1:4.1.1
+ __multc3@GCC_4.4.0 1:4.4.0
+ __multf3@GCC_4.4.0 1:4.4.0
+ __multi3@GCC_3.0 1:4.1.1
+ __mulvdi3@GCC_3.0 1:4.1.1
+ __mulvsi3@GCC_3.0 1:4.1.1
+ __mulvti3@GCC_3.4.4 1:4.1.1
+ __mulxc3@GCC_4.0.0 1:4.1.1
+ __negtf2@GCC_4.4.0 1:4.4.0
+ __negti2@GCC_3.0 1:4.1.1
+ __negvdi2@GCC_3.0 1:4.1.1
+ __negvsi2@GCC_3.0 1:4.1.1
+ __negvti2@GCC_3.4.4 1:4.1.1
+ __netf2@GCC_4.4.0 1:4.4.0
+ __paritydi2@GCC_3.4 1:4.1.1
+ __parityti2@GCC_3.4 1:4.1.1
+ __popcountdi2@GCC_3.4 1:4.1.1
+ __popcountti2@GCC_3.4 1:4.1.1
+ __powidf2@GCC_4.0.0 1:4.1.1
+ __powisf2@GCC_4.0.0 1:4.1.1
+ __powitf2@GCC_4.4.0 1:4.4.0
+ __powixf2@GCC_4.0.0 1:4.1.1
+ __subtf3@GCC_4.4.0 1:4.4.0
+ __subvdi3@GCC_3.0 1:4.1.1
+ __subvsi3@GCC_3.0 1:4.1.1
+ __subvti3@GCC_3.4.4 1:4.1.1
+ __trunctfdf2@GCC_4.4.0 1:4.4.0
+ __trunctfsf2@GCC_4.4.0 1:4.4.0
+ __trunctfxf2@GCC_4.4.0 1:4.4.0
+ __ucmpti2@GCC_3.0 1:4.1.1
+ __udivdi3@GLIBC_2.0 1:4.1.1
+ __udivmodti4@GCC_3.0 1:4.1.1
+ __udivsi3@GCC_3.0 1:4.1.1
+ __udivti3@GCC_3.0 1:4.1.1
+ __umoddi3@GLIBC_2.0 1:4.1.1
+ __umodsi3@GCC_3.0 1:4.1.1
+ __umodti3@GCC_3.0 1:4.1.1
+ __unordtf2@GCC_4.4.0 1:4.4.0
--- gdc-4.4-1.063-4.4.7.orig/debian/lib32gomp1.symbols
+++ gdc-4.4-1.063-4.4.7/debian/lib32gomp1.symbols
@@ -0,0 +1,4 @@
+libgomp.so.1 lib32gomp1 #MINVER#
+#include "libgomp1.symbols.common"
+ GOMP_atomic_end@GOMP_1.0 4.2.1
+ GOMP_atomic_start@GOMP_1.0 4.2.1
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.32bit.hurd
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.32bit.hurd
@@ -0,0 +1,536 @@
+#include "libstdc++6.symbols.common"
+ _ZN9__gnu_cxx12__atomic_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base16_M_get_free_listEj@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx17__pool_alloc_base9_M_refillEj@GLIBCXX_3.4.2 4.1.1
+ _ZN9__gnu_cxx18__exchange_and_addEPVii@GLIBCXX_3.4 4.1.1
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reclaim_blockEPcj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb0EE16_M_reserve_blockEjj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reclaim_blockEPcj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx6__poolILb1EE16_M_reserve_blockEjj@GLIBCXX_3.4.4 4.1.1
+ _ZN9__gnu_cxx9free_list6_M_getEj@GLIBCXX_3.4.4 4.1.1
+ _ZNK10__cxxabiv117__class_type_info12__do_dyncastEiNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcEiPKvPKS0_S2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastEiNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE@CXXABI_1.3 4.1.1
+ _ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_@CXXABI_1.3 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE2atEj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE4findEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_j@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE6substrEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKw@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE7compareEjjRKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSbIwSt11char_traitsIwESaIwEEixEj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs12find_last_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs13find_first_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs15_M_check_lengthEjjPKc@GLIBCXX_3.4.5 4.1.1
+ _ZNKSs16find_last_not_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs16find_last_not_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs17find_first_not_ofEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs2atEj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4copyEPcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs4findEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEPKcjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindERKSsj@GLIBCXX_3.4 4.1.1
+ _ZNKSs5rfindEcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs6substrEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjRKSs@GLIBCXX_3.4 4.1.1
+ _ZNKSs7compareEjjRKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_checkEjPKc@GLIBCXX_3.4 4.1.1
+ _ZNKSs8_M_limitEjj@GLIBCXX_3.4 4.1.1
+ _ZNKSsixEj@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIcE6_M_putEPcjPKcPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt11__timepunctIwE6_M_putEPwjPKwPK2tm@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIcc11__mbstate_tE9do_lengthERS0_PKcS4_j@GLIBCXX_3.4 4.1.1
+ _ZNKSt7codecvtIwc11__mbstate_tE9do_lengthERS0_PKcS4_j@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIcE12_M_transformEPcPKcj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7collateIwE12_M_transformEPwPKwj@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE12_M_group_intEPKcjcRSt8ios_basePcS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE14_M_group_floatEPKcjcS6_PcS7_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE6_M_padEciRSt8ios_basePcPKcRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE12_M_group_intEPKcjwRSt8ios_basePwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE14_M_group_floatEPKcjwPKwPwS9_Ri@GLIBCXX_3.4 4.1.1
+ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6_M_padEwiRSt8ios_basePwPKwRi@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_numES3_S3_RiiijRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE15_M_extract_nameES3_S3_RiPPKcjRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_numES3_S3_RiiijRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE15_M_extract_nameES3_S3_RiPPKwjRSt8ios_baseRSt12_Ios_Iostate@GLIBCXX_3.4 4.1.1
+ _ZNKSt8valarrayIjE4sizeEv@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEjwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEjjjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEjjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE2atEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_j@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEjjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE5eraseEjj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjRKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEjjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE6resizeEjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_jw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjPKwj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4.5 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EPKwjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC1EjwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EPKwjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jj@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jjRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEC2EjwRKS1_@GLIBCXX_3.4 4.1.1
+ _ZNSbIwSt11char_traitsIwESaIwEEixEj@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi3getEPcic@GLIBCXX_3.4 4.1.1
+ _ZNSi4readEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi5seekgExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEi@GLIBCXX_3.4 4.1.1
+ _ZNSi6ignoreEi@GLIBCXX_3.4.5 4.1.1
+ _ZNSi6ignoreEii@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPci@GLIBCXX_3.4 4.1.1
+ _ZNSi7getlineEPcic@GLIBCXX_3.4 4.1.1
+ _ZNSi8readsomeEPci@GLIBCXX_3.4 4.1.1
+ _ZNSo5seekpExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSo5writeEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSo8_M_writeEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSs12_S_constructEjcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs14_M_replace_auxEjjjc@GLIBCXX_3.4 4.1.1
+ _ZNSs15_M_replace_safeEjjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs2atEj@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep26_M_set_length_and_sharableEj@GLIBCXX_3.4.5 4.1.1
+ _ZNSs4_Rep8_M_cloneERKSaIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSs4_Rep9_S_createEjjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSs5eraseEjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6appendEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6assignEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjRKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs6insertEjjc@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEj@GLIBCXX_3.4 4.1.1
+ _ZNSs6resizeEjc@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_copyEPcPKcj@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7_M_moveEPcPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7_M_moveEPcPKcj@GLIBCXX_3.4.5 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_jc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjPKc@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjRKSs@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjRKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSs7replaceEjjjc@GLIBCXX_3.4 4.1.1
+ _ZNSs7reserveEj@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcjc@GLIBCXX_3.4 4.1.1
+ _ZNSs9_M_assignEPcjc@GLIBCXX_3.4.5 4.1.1
+ _ZNSs9_M_mutateEjjj@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EPKcjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSsC1ERKSsjjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC1EjcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EPKcjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsjj@GLIBCXX_3.4 4.1.1
+ _ZNSsC2ERKSsjjRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsC2EjcRKSaIcE@GLIBCXX_3.4 4.1.1
+ _ZNSsixEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC1EPci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt10istrstreamC2EPci@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1EPSt18__moneypunct_cacheIcLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2EPSt18__moneypunct_cacheIcLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1EPSt18__moneypunct_cacheIcLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2EPSt18__moneypunct_cacheIcLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIcLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1EPSt18__moneypunct_cacheIwLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2EPSt18__moneypunct_cacheIwLb0EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1EPSt18__moneypunct_cacheIwLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2EPSt18__moneypunct_cacheIwLb1EEj@GLIBCXX_3.4 4.1.1
+ _ZNSt10moneypunctIwLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1EPSt17__timepunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2EPSt17__timepunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1EPSt17__timepunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2EPSt17__timepunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt11__timepunctIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE7seekoffExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcE8xsputn_2EPKciS2_i@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12ctype_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_allocEj@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambuf8_M_setupEPcS0_i@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPFPvjEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKai@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPKhi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPaiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPciS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1EPhiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC1Ei@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPFPvjEPFvS0_E@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKai@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPKhi@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPaiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPciS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2EPhiS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt12strstreambufC2Ei@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE13_M_set_bufferEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE22_M_convert_to_externalEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE13_M_set_bufferEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE22_M_convert_to_externalEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7_M_seekExSt12_Ios_Seekdir11__mbstate_t@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_filebufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE3getEPwiw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE4readEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE5seekgExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi@GLIBCXX_3.4.5 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEij@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE7getlineEPwiw@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE8readsomeEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpExSt12_Ios_Seekdir@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_writeEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIcc11__mbstate_tEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14codecvt_bynameIwc11__mbstate_tEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt14collate_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE5sputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsgetnEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE6xsputnEPKci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIcSt11char_traitsIcEE9pubsetbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE5sputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsgetnEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE6xsputnEPKwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_streambufIwSt11char_traitsIwEE9pubsetbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@GLIBCXX_3.4 4.1.1
+ _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15messages_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIcEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15numpunct_bynameIwEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt16__numpunct_cacheIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17__timepunct_cacheIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb0EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIcLb1EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb0EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt17moneypunct_bynameIwLb1EEC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIcLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb0EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt18__moneypunct_cacheIwLb1EEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EP15__locale_structPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC1EPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EP15__locale_structPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIcEC2EPKtbj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt5ctypeIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC1EjRKSt8valarrayIjES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6gslice8_IndexerC2EjRKSt8valarrayIjES4_@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_Impl16_M_install_cacheEPKNS_5facetEj@GLIBCXX_3.4.7 4.1.1
+ _ZNSt6locale5_ImplC1EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1ERKS0_j@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2EPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2ERKS0_j@GLIBCXX_3.4 4.1.1
+ _ZNSt6locale5_ImplC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIcc11__mbstate_tEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7codecvtIwc11__mbstate_tEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt7collateIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2EP15__locale_structPKcj@GLIBCXX_3.4 4.1.1
+ _ZNSt8messagesIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1EPSt16__numpunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2EPSt16__numpunct_cacheIcEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIcEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1EPSt16__numpunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EP15__locale_structj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2EPSt16__numpunct_cacheIwEj@GLIBCXX_3.4 4.1.1
+ _ZNSt8numpunctIwEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC1ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC2ERKS0_@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjED1Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjED2Ev@GLIBCXX_3.4 4.1.1
+ _ZNSt8valarrayIjEixEj@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC1Ej@GLIBCXX_3.4 4.1.1
+ _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@GLIBCXX_3.4 4.1.1
+ _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i@GLIBCXX_3.4.9 4.2.1
+ _ZSt16__ostream_insertIwSt11char_traitsIwEERSt13basic_ostreamIT_T0_ES6_PKS3_i@GLIBCXX_3.4.9 4.2.1
+ _ZSt17__copy_streambufsIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.6 4.1.1
+ _ZSt17__copy_streambufsIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_@GLIBCXX_3.4.6 4.1.1
+ _ZSt17__verify_groupingPKcjRKSs@GLIBCXX_3.4.10 4.3
+ _ZSt21__copy_streambufs_eofIcSt11char_traitsIcEEiPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZSt21__copy_streambufs_eofIwSt11char_traitsIwEEiPSt15basic_streambufIT_T0_ES6_Rb@GLIBCXX_3.4.9 4.2.1
+ _ZThn8_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZThn8_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSdD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSdD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSiD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSiD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSoD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSoD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10istrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10istrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10ostrstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt10ostrstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_istreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt13basic_ostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ifstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_iostreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt14basic_ofstreamIwSt11char_traitsIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt9strstreamD0Ev@GLIBCXX_3.4 4.1.1
+ _ZTv0_n12_NSt9strstreamD1Ev@GLIBCXX_3.4 4.1.1
+ _Znaj@GLIBCXX_3.4 4.1.1
+ _ZnajRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _Znwj@GLIBCXX_3.4 4.1.1
+ _ZnwjRKSt9nothrow_t@GLIBCXX_3.4 4.1.1
+ _ZNSt12__basic_fileIcEC1EP15__pthread_mutex@GLIBCXX_3.4 4.3.0
+ _ZNSt12__basic_fileIcEC2EP15__pthread_mutex@GLIBCXX_3.4 4.3.0
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.powerpc
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.powerpc
@@ -0,0 +1,8 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+#include "libstdc++6.symbols.glibcxxmath"
+#include "libstdc++6.symbols.ldbl.32bit"
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3.0~rc2
--- gdc-4.4-1.063-4.4.7.orig/debian/gcj-BV-jre-headless.postrm
+++ gdc-4.4-1.063-4.4.7/debian/gcj-BV-jre-headless.postrm
@@ -0,0 +1,10 @@
+#! /bin/sh -e
+
+case "$1" in
+    purge)
+	rm -f /var/lib/gcj-@BV@/classmap.db
+esac
+
+#DEBHELPER#
+
+exit 0
--- gdc-4.4-1.063-4.4.7.orig/debian/acats-killer.sh
+++ gdc-4.4-1.063-4.4.7/debian/acats-killer.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+
+# on ia64 systems, the acats hangs in unaligned memory accesses.
+# kill these testcases.
+
+pidfile=acats-killer.pid
+
+usage()
+{
+    echo >&2 "usage: `basename $0` [-p <pidfile>] <ada logfile> <next logfile>"
+    exit 1
+}
+
+while [ $# -gt 0 ]; do
+    case $1 in
+    -p)
+	pidfile=$2
+	shift
+	shift
+	;;
+    -*)
+	usage
+	;;
+    *)
+	break
+    esac
+done
+
+[ $# -eq 2 ] || usage
+
+logfile=$1
+stopfile=$2
+interval=30
+
+echo $$ > $pidfile
+
+while true; do
+    if [ -f "$stopfile" ]; then
+	echo "`basename $0`: finished."
+	rm -f $pidfile
+	exit 0
+    fi
+    sleep $interval
+    if [ ! -f "$logfile" ]; then
+	continue
+    fi
+    pids=$(ps aux | awk '/testsuite\/ada\/acats\/tests/ { print $2 }')
+    if [ -n "$pids" ]; then
+	sleep $interval
+        pids2=$(ps aux | awk '/testsuite\/ada\/acats\/tests/ { print $2 }')
+	if [ "$pids" = "$pids2" ]; then
+	    #echo kill: $pids
+	    kill $pids
+	    sleep 1
+            pids2=$(ps aux | awk '/testsuite\/ada\/acats\/tests/ { print $2 }')
+	    if [ "$pids" = "$pids2" ]; then
+	        #echo kill -9: $pids
+	        kill -9 $pids
+	    fi
+	fi
+    fi
+done
--- gdc-4.4-1.063-4.4.7.orig/debian/libgfortran3.symbols.ia64
+++ gdc-4.4-1.063-4.4.7/debian/libgfortran3.symbols.ia64
@@ -0,0 +1,5 @@
+libgfortran.so.3 libgfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
+#include "libgfortran3.symbols.10"
+#include "libgfortran3.symbols.16"
+#include "libgfortran3.symbols.64"
--- gdc-4.4-1.063-4.4.7.orig/debian/libstdc++6.symbols.i386
+++ gdc-4.4-1.063-4.4.7/debian/libstdc++6.symbols.i386
@@ -0,0 +1,6 @@
+libstdc++.so.6 libstdc++6 #MINVER#
+#include "libstdc++6.symbols.32bit"
+#include "libstdc++6.symbols.excprop"
+ __gxx_personality_v0@CXXABI_1.3 4.1.1
+ _ZNKSt3tr14hashIeEclEe@GLIBCXX_3.4.10 4.3
+ _ZNKSt4hashIeEclEe@GLIBCXX_3.4.10 4.3
--- gdc-4.4-1.063-4.4.7.orig/debian/cpp-BV-CRB.preinst.in
+++ gdc-4.4-1.063-4.4.7/debian/cpp-BV-CRB.preinst.in
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+set -e
+
+if [ "$1" = "upgrade" ] || [ "$1" = "configure" ]; then
+    update-alternatives --quiet --remove @TARGET@-cpp /usr/bin/@TARGET@-cpp-@BV@
+fi
+
+#DEBHELPER#
+
+exit 0
--- gdc-4.4-1.063-4.4.7.orig/debian/lib32gccLC.postinst
+++ gdc-4.4-1.063-4.4.7/debian/lib32gccLC.postinst
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+case "$1" in
+    configure)
+	docdir=/usr/share/doc/lib32gcc@LC@
+	if [ -d $docdir ] && [ ! -h $docdir ]; then
+	    rm -rf $docdir
+	    ln -s gcc-@BV@-base $docdir
+	fi
+esac
+
+#DEBHELPER#
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.unpack
+++ gdc-4.4-1.063-4.4.7/debian/rules.unpack
@@ -0,0 +1,277 @@
+# -*- makefile -*-
+# rules to unpack the source tarballs in $(srcdir); if the source dir already
+# exists, the rule exits with an error to prevent deletion of modified
+# source files. It has to be deleted manually.
+
+tarballs = $(gcc_tarball) # $(gcj_tarball)
+ifeq ($(with_pascal),yes)
+  tarballs += $(gpc_tarball)
+endif
+ifeq ($(with_d),yes)
+  tarballs += $(gdc_tarball)
+endif
+
+unpack_stamps = $(foreach i,$(tarballs),$(unpack_stamp)-$(i))
+
+unpack: stamp-dir $(unpack_stamp) debian-chmod
+$(unpack_stamp): $(unpack_stamps)
+$(unpack_stamp): $(foreach p,$(debian_tarballs),unpacked-$(p))
+	echo -e "\nBuilt from Debian source package $(PKGSOURCE)-$(SOURCE_VERSION)" \
+		> pxxx
+	echo -e "Integrated upstream packages in this version:\n" >> pxxx
+	for i in $(tarballs); do echo "  $$i" >> pxxx; done
+	mv -f pxxx $@
+
+debian-chmod:
+	@chmod 755 debian/dh_*
+
+# ---------------------------------------------------------------------------
+
+gfdl_texinfo_files = \
+	gcc/doc/arm-neon-intrinsics.texi \
+	gcc/doc/bugreport.texi \
+	gcc/doc/c-tree.texi \
+	gcc/doc/cfg.texi \
+	gcc/doc/collect2.texi \
+	gcc/doc/compat.texi \
+	gcc/doc/configfiles.texi \
+	gcc/doc/configterms.texi \
+	gcc/doc/contrib.texi \
+	gcc/doc/contribute.texi \
+	gcc/doc/cpp.texi \
+	gcc/doc/cppenv.texi \
+	gcc/doc/cppinternals.texi \
+	gcc/doc/cppopts.texi \
+	gcc/doc/extend.texi \
+	gcc/doc/fragments.texi \
+	gcc/doc/frontends.texi \
+	gcc/doc/gccint.texi \
+	gcc/doc/gcov.texi \
+	gcc/doc/generic.texi \
+	gcc/doc/gimple.texi \
+	gcc/doc/gnu.texi \
+	gcc/doc/gty.texi \
+	gcc/doc/headerdirs.texi \
+	gcc/doc/hostconfig.texi \
+	gcc/doc/implement-c.texi \
+	gcc/doc/install-old.texi \
+	gcc/doc/install.texi \
+	gcc/doc/interface.texi \
+	gcc/doc/invoke.texi \
+	gcc/doc/languages.texi \
+	gcc/doc/libgcc.texi \
+	gcc/doc/loop.texi \
+	gcc/doc/makefile.texi \
+	gcc/doc/md.texi \
+	gcc/doc/objc.texi \
+	gcc/doc/options.texi \
+	gcc/doc/passes.texi \
+	gcc/doc/plugins.texi \
+	gcc/doc/portability.texi \
+	gcc/doc/rtl.texi \
+	gcc/doc/service.texi \
+	gcc/doc/sourcebuild.texi \
+	gcc/doc/standards.texi \
+	gcc/doc/tm.texi \
+	gcc/doc/tree-ssa.texi \
+	gcc/doc/trouble.texi \
+	gcc/doc/include/gcc-common.texi \
+	gcc/doc/include/funding.texi \
+	gcc/fortran/gfc-internals.texi \
+	gcc/fortran/invoke.texi \
+	gcc/fortran/intrinsic.texi \
+
+
+gfdl_toplevel_texinfo_files = \
+	gcc/doc/gcc.texi \
+	gcc/java/gcj.texi \
+	gcc/ada/gnat-style.texi \
+	gcc/ada/gnat_rm.texi \
+	gcc/ada/gnat_ugn.texi \
+	gcc/fortran/gfortran.texi \
+	libgomp/libgomp.texi \
+
+gfdl_manpages = \
+	gcc/doc/cpp.1 \
+	gcc/doc/g++.1 \
+	gcc/doc/gc-analyze.1 \
+	gcc/doc/gcc.1 \
+	gcc/doc/gcj.1 \
+	gcc/doc/gcj-dbtool.1 \
+	gcc/doc/gcjh.1 \
+	gcc/doc/gcov.1 \
+	gcc/doc/gfortran.1 \
+	gcc/doc/gij.1 \
+	gcc/doc/grmic.1 \
+	gcc/doc/grmiregistry.1 \
+	gcc/doc/jcf-dump.1 \
+	gcc/doc/jv-convert.1 \
+	gcc/doc/fsf-funding.7 \
+
+# ---------------------------------------------------------------------------
+$(unpack_stamp)-$(gcc_tarball): $(gcc_tarpath)
+	: # unpack gcc tarball
+	-mkdir $(stampdir)
+	if [ -d $(srcdir) ]; then \
+	  echo >&2 "Source directory $(srcdir) exists. Delete by hand"; \
+	  false; \
+	fi
+	rm -rf $(gcc_srcdir)
+	case $(gcc_tarball) in \
+	  *.bz2)  tar -x --bzip2 -f $(gcc_tarpath);; \
+	  *.gz)   tar -x --gzip  -f $(gcc_tarpath);; \
+	  *.lzma) lzcat $(gcc_tarpath) | tar -x -f -;; \
+	  *.xz) xzcat $(gcc_tarpath) | tar -x -f -;; \
+	  *)     false; \
+	esac
+	mv $(gcc_srcdir) $(srcdir)
+ifneq (,$(wildcard java-class-files.tar.xz.uue))
+# work around #533356
+#	uudecode -o - java-class-files.tar.xz.uue | tar -C src -xvz
+	uudecode java-class-files.tar.xz.uue
+	xzcat java-class-files.tar.xz | tar -C src -xv -f -
+	rm -f java-class-files.tar.xz
+endif
+#ifeq ($(with_java),yes)
+#	tar -x -C $(srcdir)/libjava/testsuite/libmauve.exp \
+#		$(wildcard /usr/src/mauve*.tar.*)
+#endif
+ifeq (0,1)
+	cd $(srcdir) && tar cfj ../gcc-4.1.1-doc.tar.bz2 \
+		$(gfdl_texinfo_files) \
+		$(gfdl_toplevel_texinfo_files) \
+		$(gfdl_manpages)
+endif
+ifeq ($(GFDL_INVARIANT_FREE),yes)
+  ifneq ($(PKGSOURCE),gcc-snapshot)
+	rm -f $(srcdir)/gcc/doc/*.1
+	rm -f $(srcdir)/gcc/doc/fsf-funding.7
+	rm -f $(srcdir)/gcc/doc/*.info
+	rm -f $(srcdir)/gcc/fortran/*.info
+	rm -f $(srcdir)/libgomp/*.info
+	rm -f $(srcdir)/gcc/java/*.1
+	rm -f $(srcdir)/gcc/java/*.info
+	touch $(srcdir)/gcc/doc/plugins.texi
+	for i in $(gfdl_texinfo_files); do \
+	  if [ -f $(srcdir)/$$i ]; then \
+	    cp $(SOURCE_DIR)debian/dummy.texi $(srcdir)/$$i; \
+	  else \
+	    echo >&2 "$$i does not exist, fix debian/rules.unpack"; \
+	  fi; \
+	done
+	for i in $(gfdl_toplevel_texinfo_files); do \
+	  n=$$(basename $$i .texi); \
+	  if [ -f $(srcdir)/$$i ]; then \
+	    sed "s/@name@/$$n/g" $(SOURCE_DIR)debian/gcc-dummy.texi \
+	      > $(srcdir)/$$i; \
+	  else \
+	    echo >&2 "$$i does not exist, fix debian/rules.unpack"; \
+	  fi; \
+	done
+	for i in $(gfdl_manpages); do \
+	  touch $(srcdir)/$$i; \
+	done
+	rm -f $(srcdir)/INSTALL/*.html
+  endif
+endif
+	echo "$(gcc_tarball) unpacked." > $@
+
+# ---------------------------------------------------------------------------
+ifneq (,$(gcj_tarball))
+$(unpack_stamp)-$(gcj_tarball): $(gcj_tarpath) $(unpack_stamp)-$(gcc_tarball)
+	: # unpack gcj tarball
+	rm -rf $(srcdir)/gcc/java $(srcdir)/libjava
+	tar -x -C $(srcdir) -f $(gcj_tarpath)
+ifeq ($(GFDL_INVARIANT_FREE),yes)
+  ifneq ($(PKGSOURCE),gcc-snapshot)
+	rm -f $(srcdir)/gcc/java/*.1
+	rm -f $(srcdir)/gcc/java/*.info
+	for i in $(gfdl_texinfo_files); do \
+	  if [ -f $(srcdir)/$$i ]; then \
+	    cp $(SOURCE_DIR)debian/dummy.texi $(srcdir)/$$i; \
+	  else \
+	    echo >&2 "$$i does not exist, fix debian/rules.unpack"; \
+	  fi; \
+	done
+	for i in $(gfdl_toplevel_texinfo_files); do \
+	  n=$$(basename $$i .texi); \
+	  if [ -f $(srcdir)/$$i ]; then \
+	    sed "s/@name@/$$n/g" $(SOURCE_DIR)debian/gcc-dummy.texi \
+	      > $(srcdir)/$$i; \
+	  else \
+	    echo >&2 "$$i does not exist, fix debian/rules.unpack"; \
+	  fi; \
+	done
+  endif
+endif
+	echo "$(gcj_tarball) unpacked." > $@
+endif
+
+# ---------------------------------------------------------------------------
+ifneq (,$(gpc_tarball))
+$(unpack_stamp)-$(gpc_tarball): $(gpc_tarpath)
+	: # unpack gpc tarball
+	-mkdir $(stampdir)
+	if [ -d $(srcdir)/gcc/p ]; then \
+	  echo >&2 "Source directory $(srcdir)/gcc/p exists. Delete by hand";\
+	  false; \
+	fi
+	#rm -rf $(gpc_srcdir)
+	rm -rf p
+	case $(gpc_tarball) in \
+	  *.bz2)  tar -x --bzip2 -f $(gpc_tarpath);; \
+	  *.gz)   tar -x --gzip  -f $(gpc_tarpath);; \
+	  *.lzma) lzcat $(gpc_tarpath) | tar -x -f -;; \
+	  *.xz) xzcat $(gpc_tarpath) | tar -x -f -;; \
+	  *)     false; \
+	esac
+	if [ -d p ]; then \
+	  mv p $(srcdir)/gcc/. ; \
+	else \
+	  mv $(gpc_srcdir)/p $(srcdir)/gcc/. ; \
+	  rm -rf $(gpc_srcdir)/CVS; \
+	  rmdir $(gpc_srcdir); \
+	fi
+	echo "$(gpc_tarball) unpacked." > $@
+endif
+
+# ---------------------------------------------------------------------------
+ifneq (,$(gdc_tarball))
+$(unpack_stamp)-$(gdc_tarball): $(gdc_tarpath)
+	: # unpack gdc tarball
+	-mkdir $(stampdir)
+	if [ -d $(srcdir)/gcc/d ]; then \
+	  echo >&2 "Source directory $(srcdir)/gcc/d exists. Delete by hand";\
+	  false; \
+	fi
+	#rm -rf $(gdc_srcdir)
+	rm -rf d
+	case $(gdc_tarball) in \
+	  *.bz2)  tar -x --bzip2 -f $(gdc_tarpath);; \
+	  *.gz)   tar -x --gzip  -f $(gdc_tarpath);; \
+	  *.lzma) lzcat $(gdc_tarpath) | tar -x -f -;; \
+	  *.xz) xzcat $(gdc_tarpath) | tar -x -f -;; \
+	 *)     false; \
+	esac
+	if [ -d d ]; then \
+	  mv d $(srcdir)/gcc/. ; \
+	else \
+	  mv $(gdc_srcdir)/d $(srcdir)/gcc/. ; \
+	  rm -rf $(gdc_srcdir)/CVS; \
+	  rmdir $(gdc_srcdir); \
+	fi
+	[ -d $(srcdir)/libphobos ] && rm -rf $(srcdir)/libphobos || true
+ifeq ($(with_libphobos),yes)
+	mkdir $(srcdir)/libphobos && \
+	  cd $(srcdir)/libphobos && \
+	    ../symlink-tree ../gcc/d/phobos$(libphobos_version) 2>&1 && \
+	cd $(srcdir)
+endif
+	[ -e $(srcdir)/gcc/d/d-make-include ] && rm -f $(srcdir)/gcc/d/d-make-include || true
+ifeq ($(libphobos_version),2)
+	echo "D_LANGUAGE_VERSION=2" > $(srcdir)/gcc/d/d-make-include
+else
+	echo "D_LANGUAGE_VERSION=1" > $(srcdir)/gcc/d/d-make-include
+endif
+	echo "$(gdc_tarball) unpacked." > $@
+endif
--- gdc-4.4-1.063-4.4.7.orig/debian/source/format
+++ gdc-4.4-1.063-4.4.7/debian/source/format
@@ -0,0 +1 @@
+1.0
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gnat-snapshot-build-fix.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gnat-snapshot-build-fix.diff
@@ -0,0 +1,19 @@
+# DP: Let gnat-4.4 build with gnat snapshots from the trunk (20100803)
+
+2010-06-22  Ed Schonberg  <schonberg@adacore.com>
+
+	* uintp.adb: Fix scope error in operator call.
+
+Index: gcc/ada/uintp.adb
+===================================================================
+--- a/src/gcc/ada/uintp.adb	(revision 161146)
++++ b/src/gcc/ada/uintp.adb	(revision 161147)
+@@ -239,7 +239,7 @@
+ 
+    function Hash_Num (F : Int) return Hnum is
+    begin
+-      return Standard."mod" (F, Hnum'Range_Length);
++      return Types."mod" (F, Hnum'Range_Length);
+    end Hash_Num;
+ 
+    ---------------
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/testsuite-hardening-printf-types.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/testsuite-hardening-printf-types.diff
@@ -0,0 +1,662 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: Description: adjust/standardize printf types to avoid -Wformat warnings.
+# DP: Author: Kees Cook <kees@ubuntu.com>
+# DP: Ubuntu: https://bugs.launchpad.net/bugs/344502
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -uNrp a/src/gcc/testsuite/g++.dg/ext/align1.C b/src/gcc/testsuite/g++.dg/ext/align1.C
+--- a/src/gcc/testsuite/g++.dg/ext/align1.C	2002-02-06 08:18:33.000000000 -0800
++++ b/src/gcc/testsuite/g++.dg/ext/align1.C	2009-03-17 13:40:03.000000000 -0700
+@@ -16,6 +16,7 @@ float f1 __attribute__ ((aligned));
+ int
+ main (void)
+ {
+-  printf ("%d %d\n", __alignof (a1), __alignof (f1));
++  // "%td" is not allowed by ISO C++, so use %p with a void * cast
++  printf ("%p %p\n", (void*)__alignof (a1), (void*)__alignof (f1));
+   return (__alignof (a1) < __alignof (f1));
+ }
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.law/operators28.C b/src/gcc/testsuite/g++.old-deja/g++.law/operators28.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.law/operators28.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.law/operators28.C	2009-03-17 13:40:03.000000000 -0700
+@@ -14,7 +14,8 @@ void* new_test::operator new(size_t sz, 
+ {
+   void *p;
+ 
+-  printf("%d %d %d\n", sz, count, type);
++  // ISO C++ does not support format size modifier "z", so use a cast
++  printf("%u %d %d\n", (unsigned int)sz, count, type);
+ 
+   p = new char[sz * count];
+   ((new_test *)p)->type = type;
+diff -uNrp a/src/gcc/testsuite/gcc.dg/matrix/matrix-2.c b/src/gcc/testsuite/gcc.dg/matrix/matrix-2.c
+--- a/src/gcc/testsuite/gcc.dg/matrix/matrix-2.c	2007-05-28 04:27:34.000000000 -0700
++++ b/src/gcc/testsuite/gcc.dg/matrix/matrix-2.c	2009-03-17 17:10:34.000000000 -0700
+@@ -42,7 +42,7 @@ main (int argc, char **argv)
+     }
+   for (i = 0; i < ARCHnodes; i++)
+     for (j = 0; j < 3; j++)
+-      printf ("%x\n",vel[i][j]);
++      printf ("%p\n",vel[i][j]);
+       /*if (i!=1 || j!=1)*/
+       /*if (i==1 && j==1)
+         continue;
+@@ -83,14 +83,14 @@ mem_init (void)
+       for (j = 0; j < 3; j++)
+ 	{
+ 	  vel[i][j] = (int *) malloc (ARCHnodes1 * sizeof (int));
+-          printf ("%x %d %d\n",vel[i][j], ARCHnodes1, sizeof (int));
++          printf ("%p %d %d\n",vel[i][j], ARCHnodes1, (int)sizeof (int));
+ 	}
+     }
+    for (i = 0; i < ARCHnodes; i++)
+     {
+       for (j = 0; j < 3; j++)
+         {
+-          printf ("%x\n",vel[i][j]);
++          printf ("%p\n",vel[i][j]);
+         }
+     }
+ 
+@@ -99,7 +99,7 @@ mem_init (void)
+     {
+       for (j = 0; j < 3; j++)
+ 	{
+-	  printf ("%x\n",vel[i][j]);
++	  printf ("%p\n",vel[i][j]);
+           /*for (k = 0; k < ARCHnodes1; k++)
+ 	    {
+ 	      vel[i][j][k] = d;
+diff -uNrp a/src/gcc/testsuite/gcc.dg/packed-vla.c b/src/gcc/testsuite/gcc.dg/packed-vla.c
+--- a/src/gcc/testsuite/gcc.dg/packed-vla.c	2007-09-11 08:08:57.000000000 -0700
++++ b/src/gcc/testsuite/gcc.dg/packed-vla.c	2009-03-17 17:00:46.000000000 -0700
+@@ -17,8 +17,8 @@ int func(int levels) 
+     int			b[4];
+   } __attribute__ ((__packed__)) foo;
+ 
+-  printf("foo %d\n", sizeof(foo));
+-  printf("bar %d\n", sizeof(bar));
++  printf("foo %d\n", (int)sizeof(foo));
++  printf("bar %d\n", (int)sizeof(bar));
+ 
+   if (sizeof (foo) != sizeof (bar))
+     abort ();
+diff -uNrp a/src/gcc/testsuite/g++.dg/opt/alias2.C b/src/gcc/testsuite/g++.dg/opt/alias2.C
+--- a/src/gcc/testsuite/g++.dg/opt/alias2.C	2005-04-25 11:28:55.000000000 -0700
++++ b/src/gcc/testsuite/g++.dg/opt/alias2.C	2009-03-17 13:40:03.000000000 -0700
+@@ -30,14 +30,14 @@ public:
+ 
+ 
+ _Deque_base::~_Deque_base() {
+-  printf ("bb %x %x\n", this, *_M_start._M_node);
++  printf ("bb %p %x\n", this, *_M_start._M_node);
+ }
+ 
+ void
+ _Deque_base::_M_initialize_map()
+ {
+   yy = 0x123;
+-  printf ("aa %x %x\n", this, yy);
++  printf ("aa %p %x\n", this, yy);
+ 
+   _M_start._M_node = &yy;
+   _M_start._M_cur = yy;
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.abi/vbase1.C b/src/gcc/testsuite/g++.old-deja/g++.abi/vbase1.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.abi/vbase1.C	2003-07-01 05:01:44.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.abi/vbase1.C	2009-03-17 13:40:03.000000000 -0700
+@@ -33,7 +33,7 @@ struct VBase
+   void Offset () const
+   {
+     printf ("VBase\n");
+-    printf ("  VBase::member %d\n", &this->VBase::member - (int *)this);
++    printf ("  VBase::member %d\n", (int)(&this->VBase::member - (int *)this));
+   }
+ };
+ 
+@@ -55,8 +55,8 @@ struct VDerived : virtual VBase
+   void Offset () const
+   {
+     printf ("VDerived\n");
+-    printf ("  VBase::member %d\n", &this->VBase::member - (int *)this);
+-    printf ("  VDerived::member %d\n", &this->VDerived::member - (int *)this);
++    printf ("  VBase::member %d\n", (int)(&this->VBase::member - (int *)this));
++    printf ("  VDerived::member %d\n", (int)(&this->VDerived::member - (int *)this));
+   }
+ };
+ struct B : virtual VBase
+@@ -65,8 +65,8 @@ struct B : virtual VBase
+   void Offset () const
+   {
+     printf ("B\n");
+-    printf ("  VBase::member %d\n", &this->VBase::member - (int *)this);
+-    printf ("  B::member %d\n", &this->B::member - (int *)this);
++    printf ("  VBase::member %d\n", (int)(&this->VBase::member - (int *)this));
++    printf ("  B::member %d\n", (int)(&this->B::member - (int *)this));
+   }
+ };
+ struct MostDerived : B, virtual VDerived
+@@ -75,10 +75,10 @@ struct MostDerived : B, virtual VDerived
+   void Offset () const
+   {
+     printf ("MostDerived\n");
+-    printf ("  VBase::member %d\n", &this->VBase::member - (int *)this);
+-    printf ("  B::member %d\n", &this->B::member - (int *)this);
+-    printf ("  VDerived::member %d\n", &this->VDerived::member - (int *)this);
+-    printf ("  MostDerived::member %d\n", &this->MostDerived::member - (int *)this);
++    printf ("  VBase::member %d\n", (int)(&this->VBase::member - (int *)this));
++    printf ("  B::member %d\n", (int)(&this->B::member - (int *)this));
++    printf ("  VDerived::member %d\n", (int)(&this->VDerived::member - (int *)this));
++    printf ("  MostDerived::member %d\n", (int)(&this->MostDerived::member - (int *)this));
+   }
+ };
+ 
+@@ -95,10 +95,10 @@ int main ()
+     if (ctorVDerived != &dum.VDerived::member)
+       return 24;
+     
+-    printf ("  VBase::member %d\n", &dum.VBase::member - this_);
+-    printf ("  B::member %d\n", &dum.B::member - this_);
+-    printf ("  VDerived::member %d\n", &dum.VDerived::member - this_);
+-    printf ("  MostDerived::member %d\n", &dum.MostDerived::member - this_);
++    printf ("  VBase::member %d\n", (int)(&dum.VBase::member - this_));
++    printf ("  B::member %d\n", (int)(&dum.B::member - this_));
++    printf ("  VDerived::member %d\n", (int)(&dum.VDerived::member - this_));
++    printf ("  MostDerived::member %d\n", (int)(&dum.MostDerived::member - this_));
+     dum.MostDerived::Offset ();
+     dum.B::Offset ();
+     dum.VDerived::Offset ();
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.brendan/template8.C b/src/gcc/testsuite/g++.old-deja/g++.brendan/template8.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.brendan/template8.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.brendan/template8.C	2009-03-17 13:40:03.000000000 -0700
+@@ -15,6 +15,6 @@ int main(){
+ 	
+ 	Double_alignt<20000> heap;
+ 
+-	printf(" &heap.array[0] = %d, &heap.for_alignt = %d\n", &heap.array[0], &heap.for_alignt);
++	printf(" &heap.array[0] = %p, &heap.for_alignt = %p\n", (void*)&heap.array[0], (void*)&heap.for_alignt);
+ 
+ }
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.eh/ptr1.C b/src/gcc/testsuite/g++.old-deja/g++.eh/ptr1.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.eh/ptr1.C	2007-03-22 12:44:09.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.eh/ptr1.C	2009-03-17 16:08:59.000000000 -0700
+@@ -16,7 +16,7 @@ int main()
+   }
+ 
+   catch (E *&e) {
+-    printf ("address of e is 0x%lx\n", (__SIZE_TYPE__)e);
++    printf ("address of e is %p\n", (void *)e);
+     return !((__SIZE_TYPE__)e != 5 && e->x == 5);
+   }
+   return 2;
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.jason/access23.C b/src/gcc/testsuite/g++.old-deja/g++.jason/access23.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.jason/access23.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.jason/access23.C	2009-03-17 13:40:03.000000000 -0700
+@@ -42,19 +42,19 @@ public:
+   void DoSomething() {
+     PUB_A = 0;
+     Foo::A = 0;
+-    printf("%x\n",pX);  
++    printf("%p\n",pX);  
+     Foo::PUB.A = 0;
+-    printf("%x\n",PUB.pX);  
++    printf("%p\n",PUB.pX);  
+     B = 0;			
+-    printf("%x\n",Foo::pY);  
++    printf("%p\n",Foo::pY);  
+     PRT_A = 0;
+     PRT.B = 0;		
+-    printf("%x\n",Foo::PRT.pY);	
++    printf("%p\n",Foo::PRT.pY);	
+     PRV_A = 0;			// { dg-error "" } 
+     Foo::C = 0;			// { dg-error "" } 
+-    printf("%x\n",pZ);  	// { dg-error "" } 
++    printf("%p\n",pZ);  	// { dg-error "" } 
+     Foo::PRV.C = 0;		// { dg-error "" } 
+-    printf("%x\n",PRV.pZ); 	// { dg-error "" } 
++    printf("%p\n",PRV.pZ); 	// { dg-error "" } 
+   }
+ };
+ 
+@@ -64,17 +64,17 @@ int main()
+ 
+   a.PUB_A = 0;
+   a.A = 0;
+-  printf("%x\n",a.pX);  
++  printf("%p\n",a.pX);  
+   a.PRT_A = 0;			// { dg-error "" } 
+   a.B = 0;			// { dg-error "" } 
+-  printf("%x\n",a.pY);  	// { dg-error "" } 
++  printf("%p\n",a.pY);  	// { dg-error "" } 
+   a.PRV_A = 0;			// { dg-error "" } 
+   a.C = 0;			// { dg-error "" } 
+-  printf("%x\n",a.pZ);  	// { dg-error "" } 
++  printf("%p\n",a.pZ);  	// { dg-error "" } 
+   a.PUB.A = 0;
+-  printf("%x\n",a.PUB.pX);  
++  printf("%p\n",a.PUB.pX);  
+   a.PRT.B = 0;			// { dg-error "" } 
+-  printf("%x\n",a.PRT.pY);  	// { dg-error "" } 
++  printf("%p\n",a.PRT.pY);  	// { dg-error "" } 
+   a.PRV.C = 0;			// { dg-error "" } 
+-  printf("%x\n",a.PRV.pZ);  	// { dg-error "" } 
++  printf("%p\n",a.PRV.pZ);  	// { dg-error "" } 
+ }
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.law/cvt8.C b/src/gcc/testsuite/g++.old-deja/g++.law/cvt8.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.law/cvt8.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.law/cvt8.C	2009-03-17 13:40:03.000000000 -0700
+@@ -20,12 +20,12 @@ struct B {
+ B::operator const A&() const {
+         static A a;
+         a.i = i;
+-        printf("convert B to A at %x\n", &a);
++        printf("convert B to A at %p\n", (void*)&a);
+         return a;
+ }
+ 
+ void f(A &a) { // { dg-error "" } in passing argument
+-        printf("A at %x is %d\n", &a, a.i);
++        printf("A at %p is %d\n", (void*)&a, a.i);
+ }
+ 
+ int main() {
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.mike/net35.C b/src/gcc/testsuite/g++.old-deja/g++.mike/net35.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/net35.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/net35.C	2009-03-17 13:40:03.000000000 -0700
+@@ -17,10 +17,10 @@ public:
+ 
+ int main() {
+   C c;
+-  printf("&c.x = %x\n", &c.x);
+-  printf("&c.B1::x = %x\n", &c.B1::x);
+-  printf("&c.B2::x = %x\n", &c.B2::x);
+-  printf("&c.A::x = %x\n", &c.A::x);
++  printf("&c.x = %p\n", (void*)&c.x);
++  printf("&c.B1::x = %p\n", (void*)&c.B1::x);
++  printf("&c.B2::x = %p\n", (void*)&c.B2::x);
++  printf("&c.A::x = %p\n", (void*)&c.A::x);
+   if (&c.x != &c.B1::x
+       || &c.x != &c.B2::x
+       || &c.x != &c.A::x)
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.mike/offset1.C b/src/gcc/testsuite/g++.old-deja/g++.mike/offset1.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/offset1.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/offset1.C	2009-03-17 13:40:03.000000000 -0700
+@@ -6,7 +6,7 @@ int fail = 0;
+ class Foo {
+ public:
+    virtual void setName() {
+-     printf("Foo at %x\n", this);
++     printf("Foo at %p\n", (void*)this);
+      if (vp != (void*)this)
+        fail = 1;
+    }
+@@ -15,7 +15,7 @@ public:
+ class Bar : public Foo {
+ public:
+   virtual void init(int argc, char **argv) {
+-    printf("Bar's Foo at %x\n", (Foo*)this);
++    printf("Bar's Foo at %p\n", (void*)(Foo*)this);
+     vp = (void*)(Foo*)this;
+     setName();
+   }
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.mike/p12306.C b/src/gcc/testsuite/g++.old-deja/g++.mike/p12306.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p12306.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p12306.C	2009-03-17 13:40:03.000000000 -0700
+@@ -18,7 +18,7 @@ public:
+     if (ptr2 != &(*this).slist)
+       fail = 6;
+ 
+-    if (0) printf("at %x %x\n", (RWSlistIterator*)this, &(*this).slist);
++    if (0) printf("at %p %p\n", (void*)(RWSlistIterator*)this, (void*)&(*this).slist);
+   }
+ };
+ 
+@@ -54,14 +54,14 @@ Sim_Event_Manager::Sim_Event_Manager ()
+ void Sim_Event_Manager::post_event () {
+   ptr1 = (RWSlistIterator*)&last_posted_event_position_;
+   ptr2 = &((RWSlistIterator*)&last_posted_event_position_)->slist;
+-  if (0) printf("at %x %x\n", (RWSlistIterator*)&last_posted_event_position_,
+-		&((RWSlistIterator*)&last_posted_event_position_)->slist);
++  if (0) printf("at %p %p\n", (void*)(RWSlistIterator*)&last_posted_event_position_,
++		(void*)&((RWSlistIterator*)&last_posted_event_position_)->slist);
+   if (ptr1 != (RWSlistIterator*)&last_posted_event_position_)
+     fail = 1;
+   if (ptr2 != &((RWSlistIterator&)last_posted_event_position_).slist)
+     fail = 2;
+-  if (0) printf("at %x ?%x\n", (RWSlistIterator*)&last_posted_event_position_,
+-		&((RWSlistIterator&)last_posted_event_position_).slist);
++  if (0) printf("at %p ?%p\n", (void*)(RWSlistIterator*)&last_posted_event_position_,
++		(void*)&((RWSlistIterator&)last_posted_event_position_).slist);
+   if (ptr1 != (RWSlistIterator*)&last_posted_event_position_)
+     fail = 3;
+   if (ptr2 != &((RWSlistIterator&)last_posted_event_position_).slist)
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.mike/p3579.C b/src/gcc/testsuite/g++.old-deja/g++.mike/p3579.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p3579.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p3579.C	2009-03-17 13:40:03.000000000 -0700
+@@ -7,26 +7,26 @@ int num_x;
+ 
+ class Y {
+ public:
+-  Y () { printf("Y()            this: %x\n", this); }
+-  ~Y () { printf("~Y()           this: %x\n", this); }
++  Y () { printf("Y()            this: %p\n", (void*)this); }
++  ~Y () { printf("~Y()           this: %p\n", (void*)this); }
+ };
+ 
+ class X {
+ public:
+   X () {
+     ++num_x;
+-    printf("X()            this: %x\n", this);
++    printf("X()            this: %p\n", (void*)this);
+     Y y;
+     *this = (X) y;
+   }
+ 
+-  X (const Y & yy) { printf("X(const Y&)    this: %x\n", this); ++num_x; }
++  X (const Y & yy) { printf("X(const Y&)    this: %p\n", (void*)this); ++num_x; }
+   X & operator = (const X & xx) {
+-    printf("X.op=(X&)      this: %x\n", this);
++    printf("X.op=(X&)      this: %p\n", (void*)this);
+     return *this;
+   }
+ 
+-  ~X () { printf("~X()           this: %x\n", this); --num_x; }
++  ~X () { printf("~X()           this: %p\n", (void*)this); --num_x; }
+ };
+ 
+ int main (int, char **) {
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.mike/p3708a.C b/src/gcc/testsuite/g++.old-deja/g++.mike/p3708a.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p3708a.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p3708a.C	2009-03-17 13:40:03.000000000 -0700
+@@ -38,7 +38,7 @@ public:
+   virtual void xx(int doit) {
+     --num;
+     if (ptr != this)
+-      printf("FAIL\n%x != %x\n", ptr, this);
++      printf("FAIL\n%p != %p\n", ptr, (void*)this);
+     printf ("C is destructed.\n");
+     B::xx (0);
+     if (doit) A::xx (1);
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.mike/p3708b.C b/src/gcc/testsuite/g++.old-deja/g++.mike/p3708b.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p3708b.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p3708b.C	2009-03-17 13:40:03.000000000 -0700
+@@ -48,7 +48,7 @@ public:
+   virtual void xx(int doit) {
+     --num;
+     if (ptr != this) {
+-      printf("FAIL\n%x != %x\n", ptr, this);
++      printf("FAIL\n%p != %p\n", ptr, (void*)this);
+       exit(1);
+     }
+     printf ("D is destructed.\n");
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.mike/p3708.C b/src/gcc/testsuite/g++.old-deja/g++.mike/p3708.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p3708.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p3708.C	2009-03-17 13:40:03.000000000 -0700
+@@ -38,7 +38,7 @@ public:
+   virtual void xx(int doit) {
+     --num;
+     if (ptr != this)
+-      printf("FAIL\n%x != %x\n", ptr, this);
++      printf("FAIL\n%p != %p\n", ptr, (void*)this);
+     printf ("C is destructed.\n");
+     B::xx (0);
+     if (doit) A::xx (1);
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.mike/p646.C b/src/gcc/testsuite/g++.old-deja/g++.mike/p646.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p646.C	2006-02-05 01:21:29.000000000 -0800
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p646.C	2009-03-17 13:40:03.000000000 -0700
+@@ -35,20 +35,20 @@ int foo::si = 0;
+ foo::foo ()
+ {
+   si++;
+-  printf ("new foo @ 0x%x; now %d foos\n", this, si);
++  printf ("new foo @ %p; now %d foos\n", (void*)this, si);
+ }
+ 
+ foo::foo (const foo &other)
+ {
+   si++;
+-  printf ("another foo @ 0x%x; now %d foos\n", this, si);
++  printf ("another foo @ %p; now %d foos\n", (void*)this, si);
+   *this = other;
+ }
+ 
+ foo::~foo ()
+ {
+   si--;
+-  printf ("deleted foo @ 0x%x; now %d foos\n", this, si);
++  printf ("deleted foo @ %p; now %d foos\n", (void*)this, si);
+ }
+ 
+ int
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.mike/p710.C b/src/gcc/testsuite/g++.old-deja/g++.mike/p710.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p710.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p710.C	2009-03-17 13:40:03.000000000 -0700
+@@ -30,7 +30,7 @@ class B
+    virtual ~B() {}
+    void operator delete(void*,size_t s)
+   {
+-      printf("B::delete() %d\n",s);
++      printf("B::delete() %u\n",(unsigned int)s);
+    }
+    void operator delete(void*){}
+ };
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.mike/p789a.C b/src/gcc/testsuite/g++.old-deja/g++.mike/p789a.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/p789a.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/p789a.C	2009-03-17 13:40:03.000000000 -0700
+@@ -13,10 +13,10 @@ struct foo
+   int x;
+   foo () {
+     x = count++;
+-    printf("this %d = %x\n", x, (void *)this);
++    printf("this %d = %p\n", x, (void *)this);
+   }
+   virtual ~foo () {
+-    printf("this %d = %x\n", x, (void *)this);
++    printf("this %d = %p\n", x, (void *)this);
+     --count;
+   }
+ };
+@@ -31,7 +31,7 @@ int main ()
+       {
+ 	for (int j = 0; j < 3; j++)
+ 	  {
+-	    printf("&a[%d][%d] = %x\n", i, j, (void *)&array[i][j]);
++	    printf("&a[%d][%d] = %p\n", i, j, (void *)&array[i][j]);
+ 	  }
+       }
+       // The count should be nine, if not, fail the test.
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C b/src/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C	2009-03-17 13:40:03.000000000 -0700
+@@ -42,7 +42,7 @@ B_table b;
+ bar jar;
+ 
+ int main() {
+-  printf("ptr to B_table=%x, ptr to A_table=%x\n",&b,(A_table*)&b);
++  printf("ptr to B_table=%p, ptr to A_table=%p\n",(void*)&b,(void*)(A_table*)&b);
+   B_table::B_ti_fn z = &B_table::func1;
+   int j = 1;
+   jar.call_fn_fn1(j,(void *)&z);
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.mike/temp.C b/src/gcc/testsuite/g++.old-deja/g++.mike/temp.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.mike/temp.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.mike/temp.C	2009-03-17 13:40:03.000000000 -0700
+@@ -7,11 +7,11 @@ class T {
+ public:
+   T() {
+     i = 1;
+-    printf("T() at %x\n", this);
++    printf("T() at %p\n", (void*)this);
+   }
+   T(const T& o) {
+     i = o.i;
+-    printf("T(const T&) at %x <-- %x\n", this, &o);
++    printf("T(const T&) at %p <-- %p\n", (void*)this, (void*)&o);
+   }
+   T operator +(const T& o) {
+     T r;
+@@ -21,7 +21,7 @@ public:
+   operator int () {
+     return i;
+   }
+-  ~T() { printf("~T() at %x\n", this); }
++  ~T() { printf("~T() at %p\n", (void*)this); }
+ } s, b;
+ 
+ int foo() { return getenv("TEST") == 0; }
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.other/temporary1.C b/src/gcc/testsuite/g++.old-deja/g++.other/temporary1.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.other/temporary1.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.other/temporary1.C	2009-03-17 16:09:42.000000000 -0700
+@@ -5,16 +5,16 @@ int c, d;
+ class Foo 
+ {
+ public:
+-   Foo() { printf("Foo() 0x%08lx\n", (__SIZE_TYPE__)this); ++c; }
+-   Foo(Foo const &) { printf("Foo(Foo const &) 0x%08lx\n", (__SIZE_TYPE__)this); }
+-   ~Foo() { printf("~Foo() 0x%08lx\n", (__SIZE_TYPE__)this); ++d; }
++   Foo() { printf("Foo() %p\n", (void*)this); ++c; }
++   Foo(Foo const &) { printf("Foo(Foo const &) %p\n", (void*)this); }
++   ~Foo() { printf("~Foo() %p\n", (void*)this); ++d; }
+ };
+ 
+ // Bar creates constructs a temporary Foo() as a default
+ class Bar 
+ {
+ public:
+-   Bar(Foo const & = Foo()) { printf("Bar(Foo const &) 0x%08lx\n", (__SIZE_TYPE__)this); }
++   Bar(Foo const & = Foo()) { printf("Bar(Foo const &) %p\n", (void*)this); }
+ };
+ 
+ void fakeRef(Bar *)
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.other/virtual8.C b/src/gcc/testsuite/g++.old-deja/g++.other/virtual8.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.other/virtual8.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.other/virtual8.C	2009-03-17 13:40:03.000000000 -0700
+@@ -4,7 +4,7 @@ extern "C" int printf (const char*, ...)
+ struct A
+ {
+   virtual void f () {
+-    printf ("%x\n", this);
++    printf ("%p\n", (void*)this);
+   }
+ };
+ 
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp23.C b/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp23.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp23.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp23.C	2009-03-17 13:40:03.000000000 -0700
+@@ -13,7 +13,7 @@ struct S
+ 
+   template <class U>
+   void f(U u)
+-  { printf ("In S::f(U)\nsizeof(U) == %d\n", sizeof(u)); }
++  { printf ("In S::f(U)\nsizeof(U) == %d\n", (int)sizeof(u)); }
+ 
+   int c[16];
+ };
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp24.C b/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp24.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp24.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp24.C	2009-03-17 13:40:03.000000000 -0700
+@@ -13,7 +13,7 @@ struct S
+ 
+   template <class U>
+   void f(U u)
+-  { printf ("In S::f(U)\nsizeof(U) == %d\n", sizeof(u)); }
++  { printf ("In S::f(U)\nsizeof(U) == %d\n", (int)sizeof(u)); }
+ 
+   int c[16];
+ };
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp25.C b/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp25.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp25.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp25.C	2009-03-17 13:40:03.000000000 -0700
+@@ -6,7 +6,7 @@ template <class X>
+ struct S
+ {
+   template <class U>
+-  void f(U u) { printf ("%d\n", sizeof (U)); }
++  void f(U u) { printf ("%d\n", (int)sizeof (U)); }
+ 
+   int i[4];
+ };
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp26.C b/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp26.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp26.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.pt/memtemp26.C	2009-03-17 13:40:03.000000000 -0700
+@@ -16,7 +16,7 @@ template <class X>
+ template <class U>
+ void S<X>::f(U u)
+ {
+-  printf ("%d\n", sizeof (U));
++  printf ("%d\n", (int)sizeof (U));
+ }
+ 
+ 
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.pt/t39.C b/src/gcc/testsuite/g++.old-deja/g++.pt/t39.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.pt/t39.C	2006-02-05 01:21:29.000000000 -0800
++++ b/src/gcc/testsuite/g++.old-deja/g++.pt/t39.C	2009-03-17 13:40:03.000000000 -0700
+@@ -10,9 +10,9 @@ struct frob {
+ 
+ template <class T>
+ void frob<T>::print () {
+-  printf ("this = %08x\n", this);
+-  printf (" ptr = %08x\n", ptr);
+-  printf (" values = %x %x %x ...\n", ptr[0], ptr[1], ptr[2]);
++  printf ("this = %p\n", (void*)this);
++  printf (" ptr = %p\n", (void*)ptr);
++  printf (" values = %x %x %x ...\n", (int)ptr[0], (int)ptr[1], (int)ptr[2]);
+ }
+ 
+   static int x[10];
+diff -uNrp a/src/gcc/testsuite/g++.old-deja/g++.robertl/eb17.C b/src/gcc/testsuite/g++.old-deja/g++.robertl/eb17.C
+--- a/src/gcc/testsuite/g++.old-deja/g++.robertl/eb17.C	2003-04-30 19:02:59.000000000 -0700
++++ b/src/gcc/testsuite/g++.old-deja/g++.robertl/eb17.C	2009-03-17 13:40:03.000000000 -0700
+@@ -44,15 +44,15 @@ int main()
+     A * a = new B;
+     B * b = dynamic_cast<B *>(a);
+ 
+-    printf("%p\n",b);                // (*2*)
++    printf("%p\n",(void*)b);                // (*2*)
+     b->print();
+ 
+     a = b;
+-    printf("%p\n",a);
++    printf("%p\n",(void*)a);
+     a->print();
+ 
+     a = a->clone();
+-    printf("%p\n",a);
++    printf("%p\n",(void*)a);
+     a->print();                      // (*1*)
+ 
+     return 0;
+diff -uNrp a/src/gcc/testsuite/gcc.dg/pch/inline-4.c b/src/gcc/testsuite/gcc.dg/pch/inline-4.c
+--- a/src/gcc/testsuite/gcc.dg/pch/inline-4.c	2009-03-20 09:08:02.000000000 -0700
++++ b/src/gcc/testsuite/gcc.dg/pch/inline-4.c	2009-03-20 13:43:53.000000000 -0700
+@@ -1,6 +1,6 @@
+ #include "inline-4.h"
+ extern int printf (const char *, ...);
+ int main(void) {
+-  printf (getstring());
++  printf ("%s", getstring());
+   return 0;
+ }
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-symbolic-tracebacks.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-symbolic-tracebacks.diff
@@ -0,0 +1,326 @@
+# DP: - Enable support for symbolic tracebacks in exceptions (delete the dummy
+# DP:   convert_addresses from adaint.c, and provide a real one separately.)
+
+Ported Jürgen Pfeifer's patch to enable symbolic tracebacks on Debian
+GNU/Linux.
+
+The binary distribution of GNAT 3.15p comes with an old version of
+binutils that includes a library, libaddr2line.a.  This library does
+not exist in recent versions of binutils.  The patch works around this
+by calling /usr/bin/addr2line (still part of binutils) and parsing the
+output.  See debian/convert_addresses.c for the gory details.
+
+I have modified convert_addresses.c to not use a shell script anymore;
+Debian controls the version of binutils which is installed.  Also, I
+use execve instead of execle.
+
+-- 
+Ludovic Brenta.
+
+# ' make emacs highlighting happy
+
+Index: b/src/gcc/ada/gcc-interface/Makefile.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -236,8 +236,8 @@
+ # Both . and srcdir are used, in that order,
+ # so that tm.h and config.h will be found in the compilation
+ # subdirectory rather than in the source directory.
+-INCLUDES = -I- -I. -I.. -I$(srcdir)/ada -I$(srcdir) -I$(srcdir)/config \
+-	-I$(srcdir)/../include
++INCLUDES = -iquote . -iquote .. -iquote $(srcdir)/ada -iquote $(srcdir) \
++	-iquote $(srcdir)/config -iquote $(srcdir)/../include
+ 
+ ADA_INCLUDES = -I- -I. -I$(srcdir)/ada
+ 
+@@ -1828,7 +1828,7 @@
+   a-nucoar.o a-nurear.o i-forbla.o i-forlap.o s-gearop.o
+ 
+ GNATRTL_OBJS = $(GNATRTL_NONTASKING_OBJS) $(GNATRTL_TASKING_OBJS) \
+-  $(GNATRTL_LINEARALGEBRA_OBJS) g-trasym.o memtrack.o
++  $(GNATRTL_LINEARALGEBRA_OBJS) g-trasym.o memtrack.o convert_addresses.o
+ 
+ # Default run time files
+ 
+@@ -1951,7 +1951,6 @@
+ 	for file in $(RTSDIR)/*.ali; do \
+ 	    $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
+ 	done
+-	-$(INSTALL_DATA) $(RTSDIR)/g-trasym$(objext) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
+ 	-cd $(RTSDIR); for file in *$(arext);do \
+ 	    $(INSTALL_DATA) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
+ 	    $(RANLIB_FOR_TARGET) $(DESTDIR)$(ADA_RTL_OBJ_DIR)/$$file; \
+@@ -2051,7 +2050,7 @@
+ 	        $(GNATRTL_OBJS)
+ 	$(RM) $(RTSDIR)/libgnat$(arext) $(RTSDIR)/libgnarl$(arext)
+ 	$(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgnat$(arext) \
+-	   $(addprefix $(RTSDIR)/,$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS))
++	   $(addprefix $(RTSDIR)/,$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) g-trasym.o convert_addresses.o)
+         ifneq ($(PREFIX_OBJS),)
+ 		$(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgccprefix$(arext) \
+ 		  $(PREFIX_OBJS);
+@@ -2086,6 +2085,7 @@
+ 		$(TARGET_LIBGCC2_CFLAGS) \
+ 		-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+ 		$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
++		g-trasym.o convert_addresses.o \
+ 		$(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+ 		$(MISCLIB) -lm
+ 	cd $(RTSDIR); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
+@@ -2347,6 +2347,7 @@
+ sysdep.o  : sysdep.c
+ raise-gcc.o : raise-gcc.c raise.h
+ raise.o   : raise.c raise.h
++convert_addresses.o : convert_addresses.c
+ vx_stack_info.o : vx_stack_info.c
+ 
+ cio.o     : cio.c
+Index: b/src/gcc/ada/adaint.c
+===================================================================
+--- a/src/gcc/ada/adaint.c
++++ b/src/gcc/ada/adaint.c
+@@ -3122,36 +3122,6 @@
+ }
+ #endif
+ 
+-#if defined (CROSS_DIRECTORY_STRUCTURE)  \
+-  || (! ((defined (sparc) || defined (i386)) && defined (sun) \
+-      && defined (__SVR4)) \
+-      && ! (defined (linux) && (defined (i386) || defined (__x86_64__))) \
+-      && ! (defined (linux) && defined (__ia64__)) \
+-      && ! (defined (linux) && defined (powerpc)) \
+-      && ! defined (__FreeBSD__) \
+-      && ! defined (__hpux__) \
+-      && ! defined (__APPLE__) \
+-      && ! defined (_AIX) \
+-      && ! (defined (__alpha__)  && defined (__osf__)) \
+-      && ! defined (VMS) \
+-      && ! defined (__MINGW32__) \
+-      && ! (defined (__mips) && defined (__sgi)))
+-
+-/* Dummy function to satisfy g-trasym.o. See the preprocessor conditional
+-   just above for a list of native platforms that provide a non-dummy
+-   version of this procedure in libaddr2line.a.  */
+-
+-void
+-convert_addresses (const char *file_name ATTRIBUTE_UNUSED,
+-		   void *addrs ATTRIBUTE_UNUSED,
+-		   int n_addr ATTRIBUTE_UNUSED,
+-		   void *buf ATTRIBUTE_UNUSED,
+-		   int *len ATTRIBUTE_UNUSED)
+-{
+-  *len = 0;
+-}
+-#endif
+-
+ #if defined (_WIN32)
+ int __gnat_argument_needs_quote = 1;
+ #else
+Index: b/src/gcc/ada/convert_addresses.c
+===================================================================
+--- /dev/null
++++ b/src/gcc/ada/convert_addresses.c
+@@ -0,0 +1,154 @@
++/*
++  Copyright (C) 1999 by Juergen Pfeifer <juergen.pfeifer@gmx.net>
++  Ada for Linux Team (ALT)
++
++  Permission is hereby granted, free of charge, to any person obtaining a
++  copy of this software and associated documentation files (the
++  "Software"), to deal in the Software without restriction, including
++  without limitation the rights to use, copy, modify, merge, publish,
++  distribute, distribute with modifications, sublicense, and/or sell
++  copies of the Software, and to permit persons to whom the Software is
++  furnished to do so, subject to the following conditions:
++
++  The above copyright notice and this permission notice shall be included
++  in all copies or substantial portions of the Software.
++
++  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++  IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
++  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
++  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
++  THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++
++  Except as contained in this notice, the name(s) of the above copyright
++  holders shall not be used in advertising or otherwise to promote the
++  sale, use or other dealings in this Software without prior written
++  authorization.
++*/
++#include <sys/types.h>
++#include <stdlib.h>
++#include <stdio.h>
++#include <unistd.h>
++#include <string.h>
++#include <signal.h>
++
++#define STDIN_FILENO  0
++#define STDOUT_FILENO 1
++#define MAX_LINE      1024
++
++#define CLOSE1  close(fd1[0]); close(fd1[1])
++#define CLOSE2  close(fd2[0]); close(fd2[1])
++#define RESTSIG sigaction(SIGPIPE,&oact,NULL)
++
++void convert_addresses
++(const char *file_name,
++  void* addrs[],
++  int   n_addr,
++  char* buf,
++  int*  len)
++{
++  int max_len = *len;
++  pid_t pid = getpid();
++  pid_t child;
++
++  struct sigaction act, oact;
++
++  int fd1[2], fd2[2];
++
++  *buf = 0; *len = 0;
++  act.sa_handler = SIG_IGN;
++  sigemptyset(&act.sa_mask);
++  act.sa_flags = 0;
++  if (sigaction(SIGPIPE,&act,&oact) < 0)
++    return;
++
++  if (pipe(fd1) >= 0) {
++    if (pipe(fd2)>=0) {
++      if ((child = fork()) < 0) {
++      CLOSE1; CLOSE2; RESTSIG;
++      return;
++      }
++      else {
++      if (0==child) {
++        close(fd1[1]);
++        close(fd2[0]);
++        if (fd1[0] != STDIN_FILENO) {
++          if (dup2(fd1[0],STDIN_FILENO) != STDIN_FILENO) {
++            CLOSE1; CLOSE2;
++          }
++          close(fd1[0]);
++        }
++        if (fd2[1] != STDOUT_FILENO) {
++          if (dup2(fd2[1],STDOUT_FILENO) != STDOUT_FILENO) {
++            CLOSE1; CLOSE2;
++          }
++          close(fd2[1]);
++        }
++        {
++          /* As pointed out by Florian Weimer to me, it is a
++             security threat to call the script with a user defined
++             environment and using the path. That would be Trojans
++             pleasure.  Therefore we use the absolute path to
++             addr2line and an empty environment. That should be
++             safe.
++          */
++          char *const argv[] = { "addr2line",
++                                 "-e",
++                                 file_name,
++                                 "--demangle=gnat",
++                                 "--functions",
++                                 "--basenames",
++                                 NULL };
++          char *const envp[] = { NULL };
++          if (execve("/usr/bin/addr2line", argv, envp) < 0) {
++            CLOSE1; CLOSE2;
++          }
++        }
++      }
++      else {
++        int i, n;
++        char hex[16];
++        char line[MAX_LINE + 1];
++        char *p;
++        char *s = buf;
++
++        /* Parent context */
++        close(fd1[0]);
++        close(fd2[1]);
++
++        for(i=0; i < n_addr; i++) {
++          snprintf(hex,sizeof(hex),"%p\n",addrs[i]);
++          write(fd1[1],hex,strlen(hex));
++          n = read(fd2[0],line,MAX_LINE);
++          if (n<=0)
++            break;
++          line[n]=0;
++          /* We have approx. 16 additional chars for "%p in " clause.
++             We use this info to prevent a buffer overrun.
++          */
++          if (n + 16 + (*len) > max_len)
++            break;
++          p = strchr(line,'\n');
++          if (p) {
++            if (*(p+1)) {
++              *p = 0;
++              *len += snprintf(s, (max_len - (*len)), "%p in %s at %s",addrs[i], line, p+1);
++            }
++            else {
++              *len += snprintf(s, (max_len - (*len)), "%p at %s",addrs[i], line);
++            }
++            s = buf + (*len);
++          }
++        }
++        close(fd1[1]);
++        close(fd2[0]);
++      }
++      }
++    }
++    else {
++      CLOSE1;
++    }
++  }
++  RESTSIG;
++}
+Index: b/src/gcc/ada/g-trasym.adb
+===================================================================
+--- a/src/gcc/ada/g-trasym.adb
++++ b/src/gcc/ada/g-trasym.adb
+@@ -32,16 +32,16 @@
+ ------------------------------------------------------------------------------
+ 
+ --  Run-time symbolic traceback support
++--  This file has been modified by Juergen Pfeifer (31-Dec-1999) for
++--  the purpose to support the Ada for Linux Team implementation of
++--  convert_addresses. This implementation has the advantage to run
++--  on the binutils as they are deployed on Linux.
+ 
+ with System.Soft_Links;
+ with Ada.Exceptions.Traceback; use Ada.Exceptions.Traceback;
+ 
+ package body GNAT.Traceback.Symbolic is
+ 
+-   pragma Linker_Options ("-laddr2line");
+-   pragma Linker_Options ("-lbfd");
+-   pragma Linker_Options ("-liberty");
+-
+    package TSL renames System.Soft_Links;
+ 
+    --  To perform the raw addresses to symbolic form translation we rely on a
+@@ -79,10 +79,6 @@
+       --  raw addresses provided in ADDRS, looked up in debug information from
+       --  FILENAME.  LEN is filled with the result length.
+       --
+-      --  This procedure is provided by libaddr2line on targets that support
+-      --  it. A dummy version is in adaint.c for other targets so that build
+-      --  of shared libraries doesn't generate unresolved symbols.
+-      --
+       --  Note that this procedure is *not* thread-safe.
+ 
+       type Argv_Array is array (0 .. 0) of System.Address;
+@@ -93,8 +89,9 @@
+         (c_exename : System.Address) return System.Address;
+       pragma Import (C, locate_exec_on_path, "__gnat_locate_exec_on_path");
+ 
+-      Res : String (1 .. 256 * Traceback'Length);
+-      Len : Integer;
++      B_Size : constant Integer := 256 * Traceback'Length;
++      Len    : Integer := B_Size;
++      Res    : String (1 .. B_Size);
+ 
+       use type System.Address;
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-cloog-dl.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-cloog-dl.diff
@@ -0,0 +1,176 @@
+# DP: Link against -ldl instead of -lcloog -lppl. Exit with an error when using
+# DP: the Graphite loop transformation infrastructure without having the
+# DP: libcloog-ppl0 package installed. Packages using these optimizations
+# DP: should build-depend on libcloog-ppl0.
+
+2009-01-27  Jakub Jelinek  <jakub@redhat.com>
+
+	* Makefile.in (BACKENDLIBS): Link against -ldl instead of -lcloog -lppl.
+	(graphite.o): Force -O, remove -fkeep-inline-functions.
+	* graphite.c: Include <dlfcn.h>.  Reference libcloog and libppl symbols
+	through pointers in cloog_pointers variable.
+	(init_cloog_pointers): New function.
+	(gcc_type_for_iv_of_clast_loop): Rename stmt_for argument to stmt_fora.
+	(graphite_transform_loops): Call init_cloog_pointers.
+
+--- a/src/gcc/Makefile.in.jj	2009-01-26 20:50:38.000000000 +0100
++++ b/src/gcc/Makefile.in	2009-01-27 14:18:10.000000000 +0100
+@@ -915,7 +915,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY)
+ # How to link with both our special library facilities
+ # and the system's installed libraries.
+ LIBS = @LIBS@ $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBIBERTY) $(LIBDECNUMBER)
+-BACKENDLIBS = $(CLOOGLIBS) $(PPLLIBS) $(GMPLIBS)
++BACKENDLIBS = $(GMPLIBS) $(if $(CLOOGLIBS),-ldl)
+ # Any system libraries needed just for GNAT.
+ SYSLIBS = @GNAT_LIBEXC@
+ 
+@@ -3076,6 +3076,9 @@ $(out_object_file): $(out_file) $(CONFIG
+ 	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) \
+ 		$(out_file) $(OUTPUT_OPTION)
+ 
++graphite.o : \
++  ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS))
++
+ # Build auxiliary files that support ecoff format.
+ mips-tfile: mips-tfile.o version.o $(LIBDEPS)
+ 	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ mips-tfile.o version.o $(LIBS)
+--- a/src/gcc/graphite.c.jj	2009-01-24 19:59:02.000000000 +0100
++++ b/src/gcc/graphite.c	2009-01-27 14:52:08.000000000 +0100
+@@ -59,6 +59,110 @@ along with GCC; see the file COPYING3.  
+ #include "cloog/cloog.h"
+ #include "graphite.h"
+ 
++#include <dlfcn.h>
++#define DYNSYMS \
++  DYNSYM (cloog_block_alloc); \
++  DYNSYM (cloog_block_list_free); \
++  DYNSYM (cloog_block_list_malloc); \
++  DYNSYM (cloog_clast_create); \
++  DYNSYM (cloog_clast_free); \
++  DYNSYM (cloog_domain_free); \
++  DYNSYM (cloog_domain_matrix2domain); \
++  DYNSYM (cloog_initialize); \
++  DYNSYM (cloog_loop_malloc); \
++  DYNSYM (cloog_matrix_alloc); \
++  DYNSYM (cloog_matrix_copy); \
++  DYNSYM (cloog_matrix_free); \
++  DYNSYM (cloog_matrix_print); \
++  DYNSYM (cloog_names_malloc); \
++  DYNSYM (cloog_names_scalarize); \
++  DYNSYM (cloog_options_free); \
++  DYNSYM (cloog_options_malloc); \
++  DYNSYM (cloog_program_dump_cloog); \
++  DYNSYM (cloog_program_extract_scalars); \
++  DYNSYM (cloog_program_free); \
++  DYNSYM (cloog_program_generate); \
++  DYNSYM (cloog_program_malloc); \
++  DYNSYM (cloog_program_print); \
++  DYNSYM (cloog_program_scatter); \
++  DYNSYM (cloog_statement_alloc); \
++  DYNSYM (ppl_finalize); \
++  DYNSYM (pprint); \
++  DYNSYM (stmt_block); \
++  DYNSYM (stmt_for); \
++  DYNSYM (stmt_guard); \
++  DYNSYM (stmt_root); \
++  DYNSYM (stmt_user);
++static struct
++{
++  bool inited;
++  void *h;
++#define DYNSYM(x) __typeof (x) *p_##x
++  DYNSYMS
++#undef DYNSYM
++} cloog_pointers;
++
++#define cloog_block_alloc (*cloog_pointers.p_cloog_block_alloc)
++#define cloog_block_list_free (*cloog_pointers.p_cloog_block_list_free)
++#define cloog_block_list_malloc (*cloog_pointers.p_cloog_block_list_malloc)
++#define cloog_clast_create (*cloog_pointers.p_cloog_clast_create)
++#define cloog_clast_free (*cloog_pointers.p_cloog_clast_free)
++#define cloog_domain_free (*cloog_pointers.p_cloog_domain_free)
++#define cloog_domain_matrix2domain (*cloog_pointers.p_cloog_domain_matrix2domain)
++#define cloog_initialize (*cloog_pointers.p_cloog_initialize)
++#define cloog_loop_malloc (*cloog_pointers.p_cloog_loop_malloc)
++#define cloog_matrix_alloc (*cloog_pointers.p_cloog_matrix_alloc)
++#define cloog_matrix_copy (*cloog_pointers.p_cloog_matrix_copy)
++#define cloog_matrix_free (*cloog_pointers.p_cloog_matrix_free)
++#define cloog_matrix_print (*cloog_pointers.p_cloog_matrix_print)
++#define cloog_names_malloc (*cloog_pointers.p_cloog_names_malloc)
++#define cloog_names_scalarize (*cloog_pointers.p_cloog_names_scalarize)
++#define cloog_options_free (*cloog_pointers.p_cloog_options_free)
++#define cloog_options_malloc (*cloog_pointers.p_cloog_options_malloc)
++#define cloog_program_dump_cloog (*cloog_pointers.p_cloog_program_dump_cloog)
++#define cloog_program_extract_scalars (*cloog_pointers.p_cloog_program_extract_scalars)
++#define cloog_program_free (*cloog_pointers.p_cloog_program_free)
++#define cloog_program_generate (*cloog_pointers.p_cloog_program_generate)
++#define cloog_program_malloc (*cloog_pointers.p_cloog_program_malloc)
++#define cloog_program_print (*cloog_pointers.p_cloog_program_print)
++#define cloog_program_scatter (*cloog_pointers.p_cloog_program_scatter)
++#define cloog_statement_alloc (*cloog_pointers.p_cloog_statement_alloc)
++#define ppl_finalize (*cloog_pointers.p_ppl_finalize)
++#define pprint (*cloog_pointers.p_pprint)
++#define stmt_block (*cloog_pointers.p_stmt_block)
++#define stmt_for (*cloog_pointers.p_stmt_for)
++#define stmt_guard (*cloog_pointers.p_stmt_guard)
++#define stmt_root (*cloog_pointers.p_stmt_root)
++#define stmt_user (*cloog_pointers.p_stmt_user)
++
++#define cloog_finalize (*cloog_pointers.p_ppl_finalize)
++
++static bool
++init_cloog_pointers (void)
++{
++  void *h;
++
++  if (cloog_pointers.inited)
++    return cloog_pointers.h != NULL;
++  h = dlopen ("libcloog-debian.so.0", RTLD_LAZY);
++  cloog_pointers.h = h;
++  if (h == NULL)
++    return false;
++#define DYNSYM(x) \
++  do \
++    { \
++      union { __typeof (cloog_pointers.p_##x) p; void *q; } u; \
++      u.q = dlsym (h, #x); \
++      if (u.q == NULL) \
++	return false; \
++      cloog_pointers.p_##x = u.p; \
++    } \
++  while (0)
++  DYNSYMS
++#undef DYNSYM
++  return true;
++}
++
+ static VEC (scop_p, heap) *current_scops;
+ 
+ /* Converts a GMP constant V to a tree and returns it.  */
+@@ -4019,10 +4151,10 @@ clast_get_body_of_loop (struct clast_stm
+    STMT.  */
+ 
+ static tree
+-gcc_type_for_iv_of_clast_loop (struct clast_for *stmt_for)
++gcc_type_for_iv_of_clast_loop (struct clast_for *stmt_fora)
+ {
+-  struct clast_user_stmt *stmt = clast_get_body_of_loop ((struct clast_stmt *) stmt_for);
+-  const char *cloog_iv = stmt_for->iterator;
++  struct clast_user_stmt *stmt = clast_get_body_of_loop ((struct clast_stmt *) stmt_fora);
++  const char *cloog_iv = stmt_fora->iterator;
+   CloogStatement *cs = stmt->statement;
+   graphite_bb_p gbb = (graphite_bb_p) cloog_statement_usr (cs);
+ 
+@@ -6061,6 +6193,12 @@ graphite_transform_loops (void)
+   if (number_of_loops () <= 1)
+     return;
+ 
++  if (!init_cloog_pointers ())
++    {
++      sorry ("Graphite loop optimizations can only be used if the libcloog-ppl0 package is installed");
++      return;
++    }
++
+   current_scops = VEC_alloc (scop_p, heap, 3);
+   recompute_all_dominators ();
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libstdc++-man-3cxx.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libstdc++-man-3cxx.diff
@@ -0,0 +1,82 @@
+# DP: Install libstdc++ man pages with suffix .3cxx instead of .3
+
+--- a/src/libstdc++-v3/doc/doxygen/user.cfg.in~	2009-02-21 01:45:21.000000000 +0100
++++ b/src/libstdc++-v3/doc/doxygen/user.cfg.in	2009-04-23 15:35:53.000000000 +0200
+@@ -1276,7 +1276,7 @@
+ # The MAN_EXTENSION tag determines the extension that is added to 
+ # the generated man pages (default is the subroutine's section .3)
+ 
+-MAN_EXTENSION          = .3
++MAN_EXTENSION          = .3cxx
+ 
+ # If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+ # then it will generate one additional man file for each entity 
+--- a/src/libstdc++-v3/scripts/run_doxygen.orig	2009-05-02 13:11:50.000000000 +0000
++++ b/src/libstdc++-v3/scripts/run_doxygen	2009-05-02 15:52:41.000000000 +0000
+@@ -210,6 +210,7 @@
+ if $do_man; then
+ echo ::
+ echo :: Fixing up the man pages...
++mv $outdir/man/man3cxx/* $outdir/man/man3/
+ cd $outdir/man/man3
+ 
+ # here's the other end of the "stupid doxygen bug" mentioned above
+@@ -219,15 +220,15 @@
+ find . -name "* *" -print0 | xargs -0r rm        # requires GNU tools
+ 
+ # Cleanups before tr1* files get killed.
+-mv tr1_random_distributions.3 random_distributions.3
+-mv tr1_random_distributions_continuous.3 random_distributions_continuous.3
+-mv tr1_random_distributions_discrete.3 random_distributions_discrete.3
+-mv tr1_random_generators.3 random_generators.3
++mv tr1_random_distributions.3cxx random_distributions.3cxx
++mv tr1_random_distributions_continuous.3cxx random_distributions_continuous.3cxx
++mv tr1_random_distributions_discrete.3cxx random_distributions_discrete.3cxx
++mv tr1_random_generators.3cxx random_generators.3cxx
+ 
+ # man pages are for functions/types/other entities, not source files
+ # directly.  who the heck would type "man foo.h" anyhow?
+ find . -name "[a-z]*" -a ! -name "std_*" -print | xargs rm
+-rm -f *.h.3 *.hpp.3 *config* *.cc.3 *.tcc.3 *_t.3
++rm -f *.h.3cxx *.hpp.3cxx *config* *.cc.3cxx *.tcc.3cxx *_t.3cxx
+ #rm ext_*.3 tr1_*.3 debug_*.3
+ 
+ # this is used to examine what we would have deleted, for debugging
+@@ -240,7 +241,7 @@
+ # and I'm off getting coffee then anyhow, so I didn't care enough to make
+ # this super-fast.
+ g++ ${srcdir}/doc/doxygen/stdheader.cc -o ./stdheader
+-problematic=`egrep -l '#include <.*_.*>' [a-z]*.3`
++problematic=`egrep -l '#include <.*_.*>' [a-z]*.3 [a-z]*.3cxx`
+ for f in $problematic; do
+     # this is also slow, but safe and easy to debug
+     oldh=`sed -n '/fC#include </s/.*<\(.*\)>.*/\1/p' $f`
+@@ -253,7 +254,7 @@
+ # Some of the pages for generated modules have text that confuses certain
+ # implementations of man(1), e.g., Linux's.  We need to have another top-level
+ # *roff tag to /stop/ the .SH NAME entry.
+-problematic=`egrep --files-without-match '^\.SH SYNOPSIS' [A-Z]*.3`
++problematic=`egrep --files-without-match '^\.SH SYNOPSIS' [A-Z]*.3 [A-Z]*.3cxx`
+ #problematic='Containers.3 Sequences.3 Assoc_containers.3 Iterator_types.3'
+ 
+ for f in $problematic; do
+@@ -267,7 +268,7 @@
+ done
+ 
+ # Also, break this (generated) line up.  It's ugly as sin.
+-problematic=`grep -l '[^^]Definition at line' *.3`
++problematic=`grep -l '[^^]Definition at line' *.3 *.3cxx`
+ for f in $problematic; do
+     sed 's/Definition at line/\
+ .PP\
+@@ -340,8 +341,8 @@
+          istringstream ostringstream stringstream filebuf ifstream \
+          ofstream fstream string;
+ do
+-    echo ".so man3/std::basic_${f}.3" > std::${f}.3
+-    echo ".so man3/std::basic_${f}.3" > std::w${f}.3
++    echo ".so man3/std::basic_${f}.3cxx" > std::${f}.3cxx
++    echo ".so man3/std::basic_${f}.3cxx" > std::w${f}.3cxx
+ done
+ 
+ echo ::
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr42748.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr42748.diff
@@ -0,0 +1,54 @@
+# DP: Fix PR c++/42748, do not warn about changes to mangling of va_list
+# DP: in system headers.
+
+gcc/
+
+2010-01-24  Mark Mitchell  <mark@codesourcery.com>
+
+	PR c++/42748
+	* config/arm/arm.c (arm_mangle_type): Do not warn about changes to
+	mangling of va_list in system headers.
+
+ 
+gcc/testsuite/
+
+2010-01-24  Mark Mitchell  <mark@codesourcery.com>
+
+	PR c++/42748
+	* g++.dg/abi/arm_va_list2.C: New test.
+	* g++.dg/abi/arm_va_list2.h: Companion header file.
+
+Index: gcc/testsuite/g++.dg/abi/arm_va_list2.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/abi/arm_va_list2.C	(revision 0)
++++ b/src/gcc/testsuite/g++.dg/abi/arm_va_list2.C	(revision 156202)
+@@ -0,0 +1,7 @@
++// { dg-do compile }
++// { dg-options "-Wpsabi" }
++// { dg-require-effective-target arm_eabi }
++
++#include <stdarg.h>
++#include "arm_va_list2.h"
++
+Index: gcc/testsuite/g++.dg/abi/arm_va_list2.h
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/abi/arm_va_list2.h	(revision 0)
++++ b/src/gcc/testsuite/g++.dg/abi/arm_va_list2.h	(revision 156202)
+@@ -0,0 +1,4 @@
++// The mangling of va_list changed in GCC 4.4.  We want to warn about
++// that -- but not in a system header.
++#pragma GCC system_header
++void f(va_list) {}
+Index: gcc/config/arm/arm.c
+===================================================================
+--- a/src/gcc/config/arm/arm.c	(revision 156201)
++++ b/src/gcc/config/arm/arm.c	(revision 156202)
+@@ -21372,7 +21372,7 @@
+       && lang_hooks.types_compatible_p (CONST_CAST_TREE (type), va_list_type))
+     {
+       static bool warned;
+-      if (!warned && warn_psabi)
++      if (!warned && warn_psabi && !in_system_header)
+ 	{
+ 	  warned = true;
+ 	  inform (input_location,
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/testsuite-hardening-format.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/testsuite-hardening-format.diff
@@ -0,0 +1,95 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: Description: use -Wno-format on tests that cannot be adjusted other ways.
+# DP: Author: Kees Cook <kees@ubuntu.com>
+# DP: Ubuntu: https://bugs.launchpad.net/bugs/344502
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+diff -uNrp a/src/gcc/testsuite/gcc.c-torture/execute/vfprintf-chk-1.x b/src/gcc/testsuite/gcc.c-torture/execute/vfprintf-chk-1.x
+--- a/src/gcc/testsuite/gcc.c-torture/execute/vfprintf-chk-1.x	1969-12-31 16:00:00.000000000 -0800
++++ b/src/gcc/testsuite/gcc.c-torture/execute/vfprintf-chk-1.x	2009-03-17 16:57:17.000000000 -0700
+@@ -0,0 +1,5 @@
++# Implement "/* { dg-options "-U_FORITFY_SOURCE" } */", due to
++# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20567
++
++set additional_flags "-U_FORTIFY_SOURCE"
++return 0
+diff -uNrp a/src/gcc/testsuite/gcc.c-torture/execute/vprintf-chk-1.x b/src/gcc/testsuite/gcc.c-torture/execute/vprintf-chk-1.x
+--- a/src/gcc/testsuite/gcc.c-torture/execute/vprintf-chk-1.x	1969-12-31 16:00:00.000000000 -0800
++++ b/src/gcc/testsuite/gcc.c-torture/execute/vprintf-chk-1.x	2009-03-20 00:25:19.000000000 -0700
+@@ -0,0 +1,5 @@
++# Implement "/* { dg-options "-U_FORITFY_SOURCE" } */", due to
++# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20567
++
++set additional_flags "-U_FORTIFY_SOURCE"
++return 0
+diff -uNrp a/src/gcc/testsuite/gcc.dg/charset/builtin2.c b/src/gcc/testsuite/gcc.dg/charset/builtin2.c
+--- a/src/gcc/testsuite/gcc.dg/charset/builtin2.c	2005-11-28 21:17:20.000000000 -0800
++++ b/src/gcc/testsuite/gcc.dg/charset/builtin2.c	2009-03-17 16:59:25.000000000 -0700
+@@ -3,7 +3,7 @@
+ 
+ /* { dg-do compile } */
+ /* { dg-require-iconv "IBM1047" } */
+-/* { dg-options "-O2 -fexec-charset=IBM1047" } */
++/* { dg-options "-O2 -fexec-charset=IBM1047 -Wno-format" } */
+ /* { dg-final { scan-assembler-not "printf" } } */
+ /* { dg-final { scan-assembler-not "fprintf" } } */
+ /* { dg-final { scan-assembler-not "sprintf" } } */
+diff -uNrp a/src/gcc/testsuite/gcc.dg/format/format.exp b/src/gcc/testsuite/gcc.dg/format/format.exp
+--- a/src/gcc/testsuite/gcc.dg/format/format.exp	2008-12-05 12:35:34.000000000 -0800
++++ b/src/gcc/testsuite/gcc.dg/format/format.exp	2009-03-17 17:08:18.000000000 -0700
+@@ -26,7 +26,7 @@ load_lib gcc-dg.exp
+ load_lib torture-options.exp
+ 
+ torture-init
+-set-torture-options [list { } { -DWIDE } ]
++set-torture-options [list { -Wformat=0 } { -DWIDE -Wformat=0 } ]
+ 
+ dg-init
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] ""
+diff -uNrp a/src/gcc/testsuite/gcc.dg/pr30473.c b/src/gcc/testsuite/gcc.dg/pr30473.c
+--- a/src/gcc/testsuite/gcc.dg/pr30473.c	2007-02-02 04:21:13.000000000 -0800
++++ b/src/gcc/testsuite/gcc.dg/pr30473.c	2009-03-17 17:01:13.000000000 -0700
+@@ -1,7 +1,7 @@
+ /* PR middle-end/30473 */
+ /* Make sure this doesn't ICE.  */
+ /* { dg-do compile } */
+-/* { dg-options "-O2" } */
++/* { dg-options "-O2 -Wno-format" } */
+ 
+ extern int sprintf (char *, const char *, ...);
+ 
+diff -uNrp a/src/gcc/testsuite/gcc.dg/pr38902.c b/src/gcc/testsuite/gcc.dg/pr38902.c
+--- a/src/gcc/testsuite/gcc.dg/pr38902.c	2009-03-16 18:23:01.000000000 -0700
++++ b/src/gcc/testsuite/gcc.dg/pr38902.c	2009-03-17 17:02:06.000000000 -0700
+@@ -1,6 +1,6 @@
+ /* PR target/38902 */
+ /* { dg-do run } */
+-/* { dg-options "-O2 -fstack-protector" } */
++/* { dg-options "-O2 -fstack-protector -Wno-format" } */
+ /* { dg-require-effective-target fstack_protector } */
+ 
+ #ifdef DEBUG
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/config-ml.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/config-ml.diff
@@ -0,0 +1,79 @@
+# DP: disable some biarch libraries for biarch builds
+
+---
+ config-ml.in |   45 ++++++++++++++++++++++++++++++++++++++++++++-
+ 1 files changed, 44 insertions(+), 1 deletions(-)
+
+--- a/src/config-ml.in
++++ b/src/config-ml.in
+@@ -306,6 +306,11 @@ arm-*-*)
+ 	  done
+ 	fi
+ 	;;
++i[34567]86-*-*)
++	case " $multidirs " in
++	  *" 64 "*) ac_configure_args="${ac_configure_args} --host=x86_64-linux-gnu"
++	esac
++	;;
+ m68*-*-*)
+ 	if [ x$enable_softfloat = xno ]
+ 	then
+@@ -477,9 +482,36 @@ powerpc*-*-* | rs6000*-*-*)
+ 	    esac
+ 	  done
+ 	fi
++	case " $multidirs " in
++	  *" 64 "*) ac_configure_args="${ac_configure_args} --host=powerpc64-linux-gnu"
++	esac
++	;;
++s390-*-*)
++	case " $multidirs " in
++	  *" 64 "*) ac_configure_args="${ac_configure_args} --host=s390x-linux-gnu"
++	esac
+ 	;;
+ esac
+ 
++if [ -z "$biarch_multidir_names" ]; then
++  biarch_multidir_names="libiberty libstdc++-v3 libgfortran libmudflap libssp libffi libobjc libgomp"
++  echo "WARNING: biarch_multidir_names is unset. Use default value:"
++  echo "  $biarch_multidir_names"
++fi
++ml_srcbase=`basename $ml_realsrcdir`
++old_multidirs="${multidirs}"
++multidirs=""
++for x in ${old_multidirs}; do
++    case " $x " in
++	" 32 "|" n32 "|" 64 " )
++	case "$biarch_multidir_names" in
++	    *"$ml_srcbase"*) multidirs="${multidirs} ${x}" ;;
++	esac
++	;;
++	*) multidirs="${multidirs} ${x}" ;;
++    esac
++done
++
+ # Remove extraneous blanks from multidirs.
+ # Tests like `if [ -n "$multidirs" ]' require it.
+ multidirs=`echo "$multidirs" | sed -e 's/^[ ][ ]*//' -e 's/[ ][ ]*$//' -e 's/[ ][ ]*/ /g'`
+@@ -857,9 +889,20 @@ if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then
+ 	fi
+     fi
+ 
++    ml_configure_args=
++    for arg in ${ac_configure_args}
++    do
++      case $arg in
++      *CC=*)  ml_configure_args=${ml_config_env} ;;
++      *CXX=*) ml_configure_args=${ml_config_env} ;;
++      *GCJ=*) ml_configure_args=${ml_config_env} ;;
++      *) ;;
++      esac
++    done
++
+     if eval ${ml_config_env} ${ml_config_shell} ${ml_recprog} \
+ 	--with-multisubdir=${ml_dir} --with-multisrctop=${multisrctop} \
+-	${ac_configure_args} ${ml_config_env} ${ml_srcdiroption} ; then
++	${ac_configure_args} ${ml_configure_args} ${ml_srcdiroption} ; then
+       true
+     else
+       exit 1
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-ice-valist.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-ice-valist.diff
@@ -0,0 +1,70 @@
+# DP: Correctly handle va_list types on 64bit systems in gdc
+
+--- a/src/gcc/d/d-builtins2.cc	2010-08-24 21:59:38.307687102 +0000
++++ b/src/gcc/d/d-builtins2.cc	2010-08-25 14:25:00.954899222 +0000
+@@ -49,15 +49,6 @@
+     }
+     // generate ctype if it doesn't already exist
+     d_gcc_builtin_va_list_d_type->toCtype();
+-
+-#if D_GCC_VER >= 44
+-    /* GCC-4.4 checks that this field actually points at the same tree
+-       as va_list_type_node. the ctype may well have equivalent values
+-       but that does not work with gcc/builtins.c
+-     */
+-    tree type = d_gcc_builtin_va_list_d_type->toCtype();
+-    TYPE_MAIN_VARIANT(type) = TYPE_MAIN_VARIANT(va_list_type_node);
+-#endif
+ }
+ 
+ /*
+@@ -80,7 +71,11 @@
+ 	// for built-in functions, so this is all that needs to be done for
+ 	// chars/string.
+ 	if (TYPE_MAIN_VARIANT(TREE_TYPE(t)) == char_type_node)
+-	    return Type::tchar->pointerTo();
++	{
++	    d = Type::tchar;
++	    d->ctype = TREE_TYPE(t);
++	    return d->pointerTo();
++	}
+ 	d = gcc_type_to_d_type(TREE_TYPE(t));
+ 	if (d)
+ 	{
+--- a/src/gcc/d/d-codegen.h	2010-08-19 11:30:20.000000000 +0000
++++ b/src/gcc/d/d-codegen.h	2010-08-25 15:38:18.364898368 +0000
+@@ -294,6 +294,11 @@
+ 	    t = nop(TREE_OPERAND(exp, 0), build_pointer_type(TREE_TYPE(exp)));
+ 	else
+ #endif
++	/* Just convert arrays (struct[]) to pointers (struct *), rather than
++	   creating a new pointer to the array (struct[] *)  */
++	if (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE)
++	    t = build1(ADDR_EXPR, build_pointer_type(TREE_TYPE(TREE_TYPE(exp))), exp);
++	else
+ 	    t = build1(ADDR_EXPR, build_pointer_type(TREE_TYPE(exp)), exp);
+ #if D_NO_TRAMPOLINES
+ 	if (TREE_CODE( exp ) == FUNCTION_DECL)
+--- a/src/gcc/d/d-lang.cc	2010-08-24 11:44:21.000000000 +0000
++++ b/src/gcc/d/d-lang.cc	2010-08-25 14:25:00.964901334 +0000
+@@ -1917,16 +1917,11 @@
+     /* Is compatible if aggregates are same type or share the same
+        attributes. The frontend should have already ensured that types
+        aren't wildly different anyway... */
+-    if (AGGREGATE_TYPE_P (t1) && AGGREGATE_TYPE_P (t2) &&
+-	TREE_CODE (t1) == TREE_CODE (t2))
++    if (AGGREGATE_TYPE_P (t1) && AGGREGATE_TYPE_P (t2)
++	&& TREE_CODE (t1) == TREE_CODE (t2))
+     {
+-	tree type1 = TREE_TYPE (t1);
+-	tree type2 = TREE_TYPE (t2);
+-
+-	if (TREE_CODE (t1) == ARRAY_TYPE
+-	    || TREE_CODE (t2) == ARRAY_TYPE) {
+-	    return (TREE_CODE (type1) == TREE_CODE (type2));
+-	}
++	if (TREE_CODE (t1) == ARRAY_TYPE)
++	    return (TREE_TYPE (t1) == TREE_TYPE (t2));
+ 	
+ 	return (TYPE_ATTRIBUTES (t1) == TYPE_ATTRIBUTES (t2));
+     }
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-ice-hack.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-ice-hack.diff
@@ -0,0 +1,315 @@
+# DP: Retry the build on an ice, save the calling options and preprocessed
+# DP: source when the ice is reproducible.
+
+2004-01-23  Jakub Jelinek  <jakub@redhat.com>
+
+	* system.h (ICE_EXIT_CODE): Define.
+	* gcc.c (execute): Don't free first string early, but at the end
+	of the function.  Call retry_ice if compiler exited with
+	ICE_EXIT_CODE.
+	(retry_ice): New function.
+	* diagnostic.c (diagnostic_count_diagnostic,
+	diagnostic_action_after_output, error_recursion): Exit with
+	ICE_EXIT_CODE instead of FATAL_EXIT_CODE.
+
+---
+ gcc/Makefile.in  |    2 +
+ gcc/diagnostic.c |    2 +-
+ gcc/gcc.c        |  236 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 3 files changed, 238 insertions(+), 2 deletions(-)
+
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -181,6 +181,8 @@ SYSCALLS.c.X-warn = -Wno-strict-prototypes -Wno-error
+ dfp.o-warn = -Wno-error
+ # mips-tfile.c contains -Wcast-qual warnings.
+ mips-tfile.o-warn = -Wno-error
++# gcc-ice-hack
++gcc.o-warn = -Wno-error
+ 
+ # All warnings have to be shut off in stage1 if the compiler used then
+ # isn't gcc; configure determines that.  WARN_CFLAGS will be either
+--- a/src/gcc/diagnostic.c
++++ b/src/gcc/diagnostic.c
+@@ -195,7 +195,7 @@ diagnostic_action_after_output (diagnostic_context *context,
+       fnotice (stderr, "Please submit a full bug report,\n"
+ 	       "with preprocessed source if appropriate.\n"
+ 	       "See %s for instructions.\n", bug_report_url);
+-      exit (ICE_EXIT_CODE);
++      exit (FATAL_EXIT_CODE);
+ 
+     case DK_FATAL:
+       if (context->abort_on_error)
+--- a/src/gcc/gcc.c
++++ b/src/gcc/gcc.c
+@@ -365,6 +365,9 @@ static void init_gcc_specs (struct obstack *, const char *, const char *,
+ #if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
+ static const char *convert_filename (const char *, int, int);
+ #endif
++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
++static void retry_ice (const char *prog, const char **argv);
++#endif
+ 
+ static const char *getenv_spec_function (int, const char **);
+ static const char *if_exists_spec_function (int, const char **);
+@@ -3015,7 +3018,7 @@ execute (void)
+ 	    }
+ 	}
+ 
+-      if (string != commands[i].prog)
++      if (i && string != commands[i].prog)
+ 	free (CONST_CAST (char *, string));
+     }
+ 
+@@ -3072,6 +3075,16 @@ See %s for instructions.",
+ 	else if (WIFEXITED (status)
+ 		 && WEXITSTATUS (status) >= MIN_FATAL_STATUS)
+ 	  {
++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
++	    /* For ICEs in cc1, cc1obj, cc1plus see if it is
++	       reproducible or not.  */
++	    char *p;
++	    if (WEXITSTATUS (status) == ICE_EXIT_CODE
++		&& i == 0
++		&& (p = strrchr (commands[0].argv[0], DIR_SEPARATOR))
++		&& ! strncmp (p + 1, "cc1", 3))
++	      retry_ice (commands[0].prog, commands[0].argv);
++#endif
+ 	    if (WEXITSTATUS (status) > greatest_status)
+ 	      greatest_status = WEXITSTATUS (status);
+ 	    ret_code = -1;
+@@ -3092,6 +3105,9 @@ See %s for instructions.",
+ 	  }
+       }
+ 
++    if (commands[0].argv[0] != commands[0].prog)
++      free ((PTR) commands[0].argv[0]);
++
+     return ret_code;
+   }
+ }
+@@ -6108,6 +6124,224 @@ give_switch (int switchnum, int omit_first_word)
+   switches[switchnum].validated = 1;
+ }
+ 
++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
++#define RETRY_ICE_ATTEMPTS 2
++
++static void
++retry_ice (const char *prog, const char **argv)
++{
++  int nargs, out_arg = -1, quiet = 0, attempt;
++  int pid, retries, sleep_interval;
++  const char **new_argv;
++  char *temp_filenames[RETRY_ICE_ATTEMPTS * 2 + 2];
++
++  if (input_filename == NULL || ! strcmp (input_filename, "-"))
++    return;
++
++  for (nargs = 0; argv[nargs] != NULL; ++nargs)
++    /* Only retry compiler ICEs, not preprocessor ones.  */
++    if (! strcmp (argv[nargs], "-E"))
++      return;
++    else if (argv[nargs][0] == '-' && argv[nargs][1] == 'o')
++      {
++	if (out_arg == -1)
++	  out_arg = nargs;
++	else
++	  return;
++      }
++    /* If the compiler is going to output any time information,
++       it might vary between invocations.  */
++    else if (! strcmp (argv[nargs], "-quiet"))
++      quiet = 1;
++    else if (! strcmp (argv[nargs], "-ftime-report"))
++      return;
++
++  if (out_arg == -1 || !quiet)
++    return;
++
++  memset (temp_filenames, '\0', sizeof (temp_filenames));
++  new_argv = alloca ((nargs + 3) * sizeof (const char *));
++  memcpy (new_argv, argv, (nargs + 1) * sizeof (const char *));
++  new_argv[nargs++] = "-frandom-seed=0";
++  new_argv[nargs] = NULL;
++  if (new_argv[out_arg][2] == '\0')
++    new_argv[out_arg + 1] = "-";
++  else
++    new_argv[out_arg] = "-o-";
++
++  for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS + 1; ++attempt)
++    {
++      int fd = -1;
++      int status;
++
++      temp_filenames[attempt * 2] = make_temp_file (".out");
++      temp_filenames[attempt * 2 + 1] = make_temp_file (".err");
++
++      if (attempt == RETRY_ICE_ATTEMPTS)
++        {
++	  int i;
++	  int fd1, fd2;
++	  struct stat st1, st2;
++	  size_t n, len;
++	  char *buf;
++
++	  buf = xmalloc (8192);
++
++	  for (i = 0; i < 2; ++i)
++	    {
++	      fd1 = open (temp_filenames[i], O_RDONLY);
++	      fd2 = open (temp_filenames[2 + i], O_RDONLY);
++
++	      if (fd1 < 0 || fd2 < 0)
++		{
++		  i = -1;
++		  close (fd1);
++		  close (fd2);
++		  break;
++		}
++
++	      if (fstat (fd1, &st1) < 0 || fstat (fd2, &st2) < 0)
++		{
++		  i = -1;
++		  close (fd1);
++		  close (fd2);
++		  break;
++		}
++
++	      if (st1.st_size != st2.st_size)
++		{
++		  close (fd1);
++		  close (fd2);
++		  break;
++		}
++
++	      len = 0;
++	      for (n = st1.st_size; n; n -= len)
++		{
++		  len = n;
++		  if (len > 4096)
++		    len = 4096;
++
++		  if (read (fd1, buf, len) != (int) len
++		      || read (fd2, buf + 4096, len) != (int) len)
++		    {
++		      i = -1;
++		      break;
++		    }
++
++		  if (memcmp (buf, buf + 4096, len) != 0)
++		    break;
++		}
++
++	      close (fd1);
++	      close (fd2);
++
++	      if (n)
++		break;
++	    }
++
++	  free (buf);
++	  if (i == -1)
++	    break;
++
++	  if (i != 2)
++	    {
++	      notice ("The bug is not reproducible, so it is likely a hardware or OS problem.\n");
++	      break;
++	    }
++
++          fd = open (temp_filenames[attempt * 2], O_RDWR);
++	  if (fd < 0)
++	    break;
++	  write (fd, "//", 2);
++	  for (i = 0; i < nargs; i++)
++	    {
++	      write (fd, " ", 1);
++	      write (fd, new_argv[i], strlen (new_argv[i]));
++	    }
++	  write (fd, "\n", 1);
++	  new_argv[nargs] = "-E";
++	  new_argv[nargs + 1] = NULL;
++        }
++
++      /* Fork a subprocess; wait and retry if it fails.  */
++      sleep_interval = 1;
++      pid = -1;
++      for (retries = 0; retries < 4; retries++)
++	{
++	  pid = fork ();
++	  if (pid >= 0)
++	    break;
++	  sleep (sleep_interval);
++	  sleep_interval *= 2;
++	}
++
++      if (pid < 0)
++	break;
++      else if (pid == 0)
++	{
++	  if (attempt != RETRY_ICE_ATTEMPTS)
++	    fd = open (temp_filenames[attempt * 2], O_RDWR);
++	  if (fd < 0)
++	    exit (-1);
++	  if (fd != 1)
++	    {
++	      close (1);
++	      dup (fd);
++	      close (fd);
++	    }
++
++	  fd = open (temp_filenames[attempt * 2 + 1], O_RDWR);
++	  if (fd < 0)
++	    exit (-1);
++	  if (fd != 2)
++	    {
++	      close (2);
++	      dup (fd);
++	      close (fd);
++	    }
++
++	  if (prog == new_argv[0])
++	    execvp (prog, (char *const *) new_argv);
++	  else
++	    execv (new_argv[0], (char *const *) new_argv);
++	  exit (-1);
++	}
++
++      if (waitpid (pid, &status, 0) < 0)
++	break;
++
++      if (attempt < RETRY_ICE_ATTEMPTS
++	  && (! WIFEXITED (status) || WEXITSTATUS (status) != ICE_EXIT_CODE))
++	{
++	  notice ("The bug is not reproducible, so it is likely a hardware or OS problem.\n");
++	  break;
++	}
++      else if (attempt == RETRY_ICE_ATTEMPTS)
++	{
++	  close (fd);
++	  if (WIFEXITED (status)
++	      && WEXITSTATUS (status) == SUCCESS_EXIT_CODE)
++	    {
++	      notice ("Preprocessed source stored into %s file, please attach this to your bugreport.\n",
++		      temp_filenames[attempt * 2]);
++	      /* Make sure it is not deleted.  */
++	      free (temp_filenames[attempt * 2]);
++	      temp_filenames[attempt * 2] = NULL;
++	      break;
++	    }
++	}
++    }
++
++  for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS * 2 + 2; attempt++)
++    if (temp_filenames[attempt])
++      {
++	unlink (temp_filenames[attempt]);
++	free (temp_filenames[attempt]);
++      }
++}
++#endif
++
+ /* Search for a file named NAME trying various prefixes including the
+    user's -B prefix and some standard ones.
+    Return the absolute file name found.  If nothing is found, return NAME.  */
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-driver-extra-langs.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-driver-extra-langs.diff
@@ -0,0 +1,20 @@
+# DP: Add options and specs for languages that are not built from a source
+# DP: (but built from separate sources).
+
+---
+ gcc/Makefile.in |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -443,8 +443,8 @@ check_gcc_parallelize=execute.exp=execute/2* \
+ 		      execute.exp=execute/\[013-9a-zA-Z\]* \
+ 		      compile.exp dg.exp \
+ 		      struct-layout-1.exp,unsorted.exp,stackalign.exp,i386.exp
+-lang_opt_files=@lang_opt_files@ $(srcdir)/c.opt $(srcdir)/common.opt
+-lang_specs_files=@lang_specs_files@
++lang_opt_files=$(sort @lang_opt_files@ $(foreach lang,$(subst ada,ada/gcc-interface,$(debian_extra_langs)),$(srcdir)/$(lang)/lang.opt)) $(srcdir)/c.opt $(srcdir)/common.opt
++lang_specs_files=$(sort @lang_specs_files@ $(foreach lang,$(subst ada,ada/gcc-interface,$(debian_extra_langs)),$(srcdir)/$(lang)/lang-specs.h))
+ lang_tree_files=@lang_tree_files@
+ target_cpu_default=@target_cpu_default@
+ GCC_THREAD_FILE=@thread_file@
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr40133.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr40133.diff
@@ -0,0 +1,231 @@
+# DP: Do link tests to check for the atomic builtins
+
+libstdc++-v3/
+2009-12-09  Paolo Carlini  <paolo.carlini@oracle.com>
+	    Matthias Klose  <doko@ubuntu.com>
+
+	PR libstdc++/40133
+	* acinclude.m4 ([GLIBCXX_ENABLE_ATOMIC_BUILTINS]): On *-*-linux*,
+	*-*-kfreebsd*-gnu | *-*-gnu* targets do link tests when possible.
+	* configure: Regenerate.
+
+Index: libstdc++-v3/acinclude.m4
+===================================================================
+--- a/src/libstdc++-v3/acinclude.m4	(revision 155104)
++++ b/src/libstdc++-v3/acinclude.m4	(working copy)
+@@ -2438,8 +2438,7 @@
+ dnl that are used should be checked.
+ dnl
+ dnl Note:
+-dnl libgomp and libgfortran do this with a link test, instead of an asm test.
+-dnl see: CHECK_SYNC_FETCH_AND_ADD
++dnl libgomp and libgfortran use a link test, see CHECK_SYNC_FETCH_AND_ADD.
+ dnl
+ dnl Defines:
+ dnl  _GLIBCXX_ATOMIC_BUILTINS_1 
+@@ -2451,12 +2450,120 @@
+   AC_LANG_SAVE
+   AC_LANG_CPLUSPLUS
+   old_CXXFLAGS="$CXXFLAGS"
+-  
++
++  # Do link tests if possible, instead asm tests, limited to some platforms
++  atomic_builtins_link_tests=no
++  if test x$gcc_no_link != xyes; then
++    # Can do link tests. Limit to some tested platforms
++    case "$host" in
++      *-*-linux* | *-*-kfreebsd*-gnu | *-*-gnu*)
++	atomic_builtins_link_tests=yes
++        ;;
++    esac
++  fi
++
++  if test x$atomic_builtins_link_tests = xyes; then
++
++  # Do link tests.
++
++  CXXFLAGS="$CXXFLAGS -fno-exceptions"
++
++  AC_MSG_CHECKING([for atomic builtins for bool])
++  AC_CACHE_VAL(glibcxx_cv_atomic_bool, [
++    AC_TRY_LINK(
++      [ ],
++      [typedef bool atomic_type;
++       atomic_type c1;
++       atomic_type c2;
++       const atomic_type c3(0);
++       __sync_fetch_and_add(&c1, c2);
++       __sync_val_compare_and_swap(&c1, c3, c2);
++       __sync_lock_test_and_set(&c1, c3);
++       __sync_lock_release(&c1);
++       __sync_synchronize();],
++      [glibcxx_cv_atomic_bool=yes],
++      [glibcxx_cv_atomic_bool=no])
++  ])    
++  if test $glibcxx_cv_atomic_bool = yes; then
++    AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_1, 1,
++      [Define if builtin atomic operations for bool are supported on this host.])
++  fi
++  AC_MSG_RESULT($glibcxx_cv_atomic_bool)
++
++  AC_MSG_CHECKING([for atomic builtins for short])
++  AC_CACHE_VAL(glibcxx_cv_atomic_short, [
++    AC_TRY_LINK(
++      [ ],
++      [typedef short atomic_type;
++       atomic_type c1;
++       atomic_type c2;
++       const atomic_type c3(0);
++       __sync_fetch_and_add(&c1, c2);
++       __sync_val_compare_and_swap(&c1, c3, c2);
++       __sync_lock_test_and_set(&c1, c3);
++       __sync_lock_release(&c1);
++       __sync_synchronize();],
++      [glibcxx_cv_atomic_short=yes],
++      [glibcxx_cv_atomic_short=no])
++  ])    
++  if test $glibcxx_cv_atomic_short = yes; then
++    AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_2, 1,
++      [Define if builtin atomic operations for short are supported on this host.])
++  fi
++  AC_MSG_RESULT($glibcxx_cv_atomic_short)
++
++  AC_MSG_CHECKING([for atomic builtins for int])
++  AC_CACHE_VAL(glibcxx_cv_atomic_int, [
++    AC_TRY_LINK(
++      [ ],
++      [typedef int atomic_type;
++       atomic_type c1;
++       atomic_type c2;
++       const atomic_type c3(0);
++       __sync_fetch_and_add(&c1, c2);
++       __sync_val_compare_and_swap(&c1, c3, c2);
++       __sync_lock_test_and_set(&c1, c3);
++       __sync_lock_release(&c1);
++       __sync_synchronize();],
++      [glibcxx_cv_atomic_int=yes],
++      [glibcxx_cv_atomic_int=no])
++  ])    
++  if test $glibcxx_cv_atomic_int = yes; then
++    AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_4, 1,
++      [Define if builtin atomic operations for int are supported on this host.])
++  fi
++  AC_MSG_RESULT($glibcxx_cv_atomic_int)
++
++  AC_MSG_CHECKING([for atomic builtins for long long])
++  AC_CACHE_VAL(glibcxx_cv_atomic_long_long, [
++    AC_TRY_LINK(
++      [ ],
++      [typedef long long atomic_type;
++       atomic_type c1;
++       atomic_type c2;
++       const atomic_type c3(0);
++       __sync_fetch_and_add(&c1, c2);
++       __sync_val_compare_and_swap(&c1, c3, c2);
++       __sync_lock_test_and_set(&c1, c3);
++       __sync_lock_release(&c1);
++       __sync_synchronize();],
++      [glibcxx_cv_atomic_long_long=yes],
++      [glibcxx_cv_atomic_long_long=no])
++  ])    
++  if test $glibcxx_cv_atomic_long_long = yes; then
++    AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_8, 1,
++      [Define if builtin atomic operations for long long are supported on this host.])
++  fi
++  AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
++
++  else
++
++  # Do asm tests.
++
+   # Compile unoptimized.
+   CXXFLAGS='-O0 -S'
+ 
+-  # Fake what AC_TRY_COMPILE does, without linking as this is
+-  # unnecessary for a builtins test.
++  # Fake what AC_TRY_COMPILE does.
+ 
+     cat > conftest.$ac_ext << EOF
+ [#]line __oline__ "configure"
+@@ -2478,14 +2585,14 @@
+     AC_MSG_CHECKING([for atomic builtins for bool])
+     if AC_TRY_EVAL(ac_compile); then
+       if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+-        enable_atomic_builtinsb=no
++        glibcxx_cv_atomic_bool=no
+       else
+       AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_1, 1,
+       [Define if builtin atomic operations for bool are supported on this host.])
+-        enable_atomic_builtinsb=yes
++        glibcxx_cv_atomic_bool=yes
+       fi
+     fi
+-    AC_MSG_RESULT($enable_atomic_builtinsb)
++    AC_MSG_RESULT($glibcxx_cv_atomic_bool)
+     rm -f conftest*
+ 
+     cat > conftest.$ac_ext << EOF
+@@ -2508,14 +2615,14 @@
+     AC_MSG_CHECKING([for atomic builtins for short])
+     if AC_TRY_EVAL(ac_compile); then
+       if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+-        enable_atomic_builtinss=no
++        glibcxx_cv_atomic_short=no
+       else
+       AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_2, 1,
+       [Define if builtin atomic operations for short are supported on this host.])
+-        enable_atomic_builtinss=yes
++        glibcxx_cv_atomic_short=yes
+       fi
+     fi
+-    AC_MSG_RESULT($enable_atomic_builtinss)
++    AC_MSG_RESULT($glibcxx_cv_atomic_short)
+     rm -f conftest*
+ 
+     cat > conftest.$ac_ext << EOF
+@@ -2539,14 +2646,14 @@
+     AC_MSG_CHECKING([for atomic builtins for int])
+     if AC_TRY_EVAL(ac_compile); then
+       if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+-        enable_atomic_builtinsi=no
++        glibcxx_cv_atomic_int=no
+       else
+       AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_4, 1,
+         [Define if builtin atomic operations for int are supported on this host.])
+-        enable_atomic_builtinsi=yes
++        glibcxx_cv_atomic_int=yes
+       fi
+     fi
+-    AC_MSG_RESULT($enable_atomic_builtinsi)
++    AC_MSG_RESULT($glibcxx_cv_atomic_int)
+     rm -f conftest*
+ 
+     cat > conftest.$ac_ext << EOF
+@@ -2569,22 +2676,23 @@
+     AC_MSG_CHECKING([for atomic builtins for long long])
+     if AC_TRY_EVAL(ac_compile); then
+       if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+-        enable_atomic_builtinsll=no
++        glibcxx_cv_atomic_long_long=no
+       else
+       AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_8, 1,
+       [Define if builtin atomic operations for long long are supported on this host.])
+-        enable_atomic_builtinsll=yes
++        glibcxx_cv_atomic_long_long=yes
+       fi
+     fi
+-    AC_MSG_RESULT($enable_atomic_builtinsll)
++    AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
+     rm -f conftest*
+ 
++  fi
+ 
+   CXXFLAGS="$old_CXXFLAGS"
+   AC_LANG_RESTORE
+ 
+   # Set atomicity_dir to builtins if either of above tests pass.
+-  if test $enable_atomic_builtinsi = yes || test $enable_atomic_builtinsb = yes ; then
++  if test $glibcxx_cv_atomic_int = yes || test $glibcxx_cv_atomic_bool = yes ; then
+     atomicity_dir=cpu/generic/atomicity_builtins
+   fi
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/hurd-changes.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/hurd-changes.diff
@@ -0,0 +1,77 @@
+# DP: Traditional GNU systems don't have a /usr directory.  However, Debian
+# DP: systems do, and we support both having a /usr -> . symlink, and having a
+# DP: /usr directory like the other ports.  So this patch should NOT go
+# DP: upstream.
+# DP: 
+# DP: Define MAXPATHLEN and PATH_MAX.
+
+---
+ boehm-gc/dyn_load.c |    2 +-
+ gcc/config/gnu.h    |    3 ++-
+ gcc/config/t-gnu    |    2 +-
+ gcc/tlink.c         |    4 ++++
+ 4 files changed, 8 insertions(+), 3 deletions(-)
+
+--- a/src/boehm-gc/dyn_load.c
++++ b/src/boehm-gc/dyn_load.c
+@@ -26,7 +26,7 @@
+  * None of this is safe with dlclose and incremental collection.
+  * But then not much of anything is safe in the presence of dlclose.
+  */
+-#if (defined(__linux__) || defined(__GLIBC__)) && !defined(_GNU_SOURCE)
++#if (defined(__linux__) || defined(__GLIBC__) || defined(__GNU__)) && !defined(_GNU_SOURCE)
+     /* Can't test LINUX, since this must be define before other includes */
+ #   define _GNU_SOURCE
+ #endif
+--- a/src/gcc/config.gcc	2009-04-26 21:36:36.000000000 +0200
++++ b/src/gcc/config.gcc	2009-04-26 21:36:53.000000000 +0200
+@@ -3057,7 +3057,7 @@
+ 	i[34567]86-*-darwin* | x86_64-*-darwin*)
+ 		tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp"
+ 		;;
+-	i[34567]86-*-linux* | x86_64-*-linux* | i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu)
++	i[34567]86-*-linux* | x86_64-*-linux* | i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu | i[34567]86-*-gnu*)
+ 		tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp i386/t-linux"
+ 		;;
+ 	ia64*-*-linux*)
+--- a/src/libgcc/config.host	2009-04-27 02:04:10.000000000 +0200
++++ b/src/libgcc/config.host	2009-04-27 02:04:23.000000000 +0200
+@@ -591,6 +591,7 @@
+ case ${host} in
+ i[34567]86-*-darwin* | x86_64-*-darwin* | \
+   i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu | \
++  i[34567]86-*-gnu* | \
+   i[34567]86-*-linux* | x86_64-*-linux*)
+ 	if test "${host_address}" = 32; then
+ 		tmake_file="${tmake_file} t-softfp i386/${host_address}/t-fprules-softfp"
+--- a/src/gcc/config/gnu.h
++++ b/src/gcc/config/gnu.h
+@@ -30,7 +30,8 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
+ 
+ /* Standard include directory.  In GNU, "/usr" is a four-letter word.  */
+ #undef STANDARD_INCLUDE_DIR
+-#define STANDARD_INCLUDE_DIR "/include"
++/* Overriden for Debian GNU/Hurd.  */
++#define STANDARD_INCLUDE_DIR "/usr/include"
+ 
+ #undef LINUX_TARGET_OS_CPP_BUILTINS
+ #define LINUX_TARGET_OS_CPP_BUILTINS()		\
+--- a/src/gcc/config/t-gnu
++++ b/src/gcc/config/t-gnu
+@@ -1,2 +1,2 @@
+ # In GNU, "/usr" is a four-letter word.
+-NATIVE_SYSTEM_HEADER_DIR = /include
++NATIVE_SYSTEM_HEADER_DIR = /usr/include
+--- a/src/gcc/tlink.c
++++ b/src/gcc/tlink.c
+@@ -34,6 +34,10 @@ along with GCC; see the file COPYING3.  If not see
+ 
+ #define MAX_ITERATIONS 17
+ 
++#ifndef MAXPATHLEN
++#define MAXPATHLEN 4096
++#endif
++
+ /* Defined in the automatically-generated underscore.c.  */
+ extern int prepends_underscore;
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libjava-stacktrace.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libjava-stacktrace.diff
@@ -0,0 +1,50 @@
+# DP: libgcj: Lookup source file name and line number in separated
+# DP: debug files found in /usr/lib/debug
+
+---
+ libjava/stacktrace.cc |   27 +++++++++++++++++++++++++++
+ 1 files changed, 27 insertions(+), 0 deletions(-)
+
+--- a/src/libjava/stacktrace.cc
++++ b/src/libjava/stacktrace.cc
+@@ -17,6 +17,11 @@ details.  */
+ #include <java-stack.h>
+ 
+ #include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#ifdef HAVE_UNISTD_H
++#include <unistd.h>
++#endif
+ 
+ #include <java/lang/Boolean.h>
+ #include <java/lang/Class.h>
+@@ -260,6 +265,28 @@ _Jv_StackTrace::getLineNumberForFrame(_Jv_StackFrame *frame, NameFinder *finder,
+       finder->lookup (binaryName, (jlong) offset);
+       *sourceFileName = finder->getSourceFile();
+       *lineNum = finder->getLineNum();
++      if (*lineNum == -1 && info.file_name[0] == '/')
++	{
++	  const char *debugPrefix = "/usr/lib/debug";
++	  char *debugPath = (char *) malloc (strlen(debugPrefix)
++					     + strlen(info.file_name)
++					     + 2);
++
++	  if (debugPath)
++	    {
++	      strcpy (debugPath, debugPrefix);
++	      strcat (debugPath, info.file_name);
++	      //printf ("%s: 0x%x\n", debugPath, offset);
++	      if (!access (debugPath, R_OK))
++		{
++		  binaryName = JvNewStringUTF (debugPath);
++		  finder->lookup (binaryName, (jlong) offset);
++		  *sourceFileName = finder->getSourceFile();
++		  *lineNum = finder->getLineNum();
++		}
++	      free (debugPath);
++	    }
++	}
+       if (*lineNum == -1 && NameFinder::showRaw())
+         {
+           gnu::gcj::runtime::StringBuffer *t =
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-default-ssp.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-default-ssp.diff
@@ -0,0 +1,192 @@
+# DP: Turn on -fstack-protector by default for C, C++, ObjC, ObjC++.
+# DP: Build libgcc using -fno-stack-protector.
+
+--- a/src/gcc/doc/invoke.texi.orig	2009-11-15 17:45:15.000000000 +0100
++++ b/src/gcc/doc/invoke.texi	2009-11-15 17:50:09.000000000 +0100
+@@ -7172,6 +7172,10 @@
+ when a function is entered and then checked when the function exits.
+ If a guard check fails, an error message is printed and the program exits.
+ 
++NOTE: In Ubuntu 6.10 and later versions this option is enabled by default
++for C, C++, ObjC, ObjC++, if neither @option{-fno-stack-protector}
++nor @option{-nostdlib} are found.
++
+ @item -fstack-protector-all
+ @opindex fstack-protector-all
+ Like @option{-fstack-protector} except that all functions are protected.
+--- a/src/gcc/objc/lang-specs.h.orig	2009-11-15 17:45:02.000000000 +0100
++++ b/src/gcc/objc/lang-specs.h	2009-11-15 17:54:47.000000000 +0100
+@@ -31,13 +31,13 @@
+ 	%{traditional|ftraditional|traditional-cpp:\
+ %eGNU Objective C no longer supports traditional compilation}\
+ 	%{save-temps|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps:%b.mi} %{!save-temps:%g.mi} \n\
+-           cc1obj -fpreprocessed -fno-section-anchors %{save-temps:%b.mi} %{!save-temps:%g.mi} %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}\
++	   cc1obj -fpreprocessed -fno-section-anchors %{save-temps:%b.mi} %{!save-temps:%g.mi} %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}\
+ 	%{!save-temps:%{!no-integrated-cpp:\
+-	    cc1obj %(cpp_unique_options) -fno-section-anchors %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}}\
++	    cc1obj %(cpp_unique_options) -fno-section-anchors%(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}}\
+         %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+   {".mi", "@objc-cpp-output", 0, 0, 0},
+   {"@objc-cpp-output",
+-     "%{!M:%{!MM:%{!E:cc1obj -fno-section-anchors -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++     "%{!M:%{!MM:%{!E:cc1obj -fno-section-anchors -fpreprocessed %i %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
+ 			     %{!fsyntax-only:%(invoke_as)}}}}   \
+     %{fsection-anchors: %eGNU Objective C can't use -fsection-anchors} ", 0, 0, 0},
+   {"@objective-c-header",
+@@ -48,11 +48,11 @@
+ 	%{traditional|ftraditional|traditional-cpp:\
+ %eGNU Objective C no longer supports traditional compilation}\
+ 	%{save-temps|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps:%b.mi} %{!save-temps:%g.mi} \n\
+-	    cc1obj -fpreprocessed %b.mi %(cc1_options) -fno-section-anchors %{print-objc-runtime-info} %{gen-decls}\
++	    cc1obj -fpreprocessed %b.mi %(cc1_options) -fno-section-anchors %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
+                         -o %g.s %{!o*:--output-pch=%i.gch}\
+                         %W{o*:--output-pch=%*}%V}\
+         %{fsection-anchors: %eGNU Objective C can't use -fsection-anchors} \
+ 	%{!save-temps:%{!no-integrated-cpp:\
+-	    cc1obj %(cpp_unique_options) -fno-section-anchors %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++	    cc1obj %(cpp_unique_options) -fno-section-anchors %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
+                         -o %g.s %{!o*:--output-pch=%i.gch}\
+                         %W{o*:--output-pch=%*}%V}}}}}", 0, 0, 0},
+--- a/src/gcc/objcp/lang-specs.h.orig	2007-08-02 12:38:44.000000000 +0200
++++ b/src/gcc/objcp/lang-specs.h	2009-11-15 17:50:13.000000000 +0100
+@@ -36,7 +36,7 @@
+ 		%(cpp_options) %2 -o %{save-temps:%b.mii} %{!save-temps:%g.mii} \n}\
+       cc1objplus %{save-temps|no-integrated-cpp:-fpreprocessed %{save-temps:%b.mii} %{!save-temps:%g.mii}}\
+ 	      %{!save-temps:%{!no-integrated-cpp:%(cpp_unique_options)}}\
+-	%(cc1_options) %2 %{+e1*}\
++	%(cc1_options) %(ssp_default) %2 %{+e1*}\
+         -o %g.s %{!o*:--output-pch=%i.gch} %W{o*:--output-pch=%*}%V}}}",
+      CPLUSPLUS_CPP_SPEC, 0, 0},
+   {"@objective-c++",
+@@ -46,15 +46,15 @@
+ 		%(cpp_options) %2 -o %{save-temps:%b.mii} %{!save-temps:%g.mii} \n}\
+       cc1objplus %{save-temps|no-integrated-cpp:-fpreprocessed %{save-temps:%b.mii} %{!save-temps:%g.mii}}\
+ 	      %{!save-temps:%{!no-integrated-cpp:%(cpp_unique_options)}}\
+-	%(cc1_options) %2 %{+e1*}\
++	%(cc1_options) %(ssp_default) %2 %{+e1*}\
+        %{!fsyntax-only:%(invoke_as)}}}}",
+      CPLUSPLUS_CPP_SPEC, 0, 0},
+   {".mii", "@objective-c++-cpp-output", 0, 0, 0},
+   {"@objective-c++-cpp-output",
+    "%{!M:%{!MM:%{!E:\
+-    cc1objplus -fpreprocessed %i %(cc1_options) %2 %{+e*}\
++    cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2 %{+e*}\
+     %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+   {"@objc++-cpp-output",
+    "%{!M:%{!MM:%{!E:\
+-    cc1objplus -fpreprocessed %i %(cc1_options) %2 %{+e*}\
++    cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2 %{+e*}\
+     %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+--- a/src/gcc/gcc.c.orig	2009-11-15 17:45:15.000000000 +0100
++++ b/src/gcc/gcc.c	2009-11-15 17:50:10.000000000 +0100
+@@ -708,6 +708,14 @@
+ #define LINK_GCC_C_SEQUENCE_SPEC "%G %L %G"
+ #endif
+ 
++#ifndef SSP_DEFAULT_SPEC
++#ifdef TARGET_LIBC_PROVIDES_SSP
++#define SSP_DEFAULT_SPEC "%{!fno-stack-protector:%{!fstack-protector-all:%{!nostdlib:%{!ffreestanding:-fstack-protector}}}}"
++#else
++#define SSP_DEFAULT_SPEC ""
++#endif
++#endif
++
+ #ifndef LINK_SSP_SPEC
+ #ifdef TARGET_LIBC_PROVIDES_SSP
+ #define LINK_SSP_SPEC "%{fstack-protector:}"
+@@ -777,6 +785,7 @@
+ static const char *cc1plus_spec = CC1PLUS_SPEC;
+ static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC;
+ static const char *link_ssp_spec = LINK_SSP_SPEC;
++static const char *ssp_default_spec = SSP_DEFAULT_SPEC;
+ static const char *asm_spec = ASM_SPEC;
+ static const char *asm_final_spec = ASM_FINAL_SPEC;
+ static const char *link_spec = LINK_SPEC;
+@@ -833,7 +842,7 @@
+ static const char *cpp_options =
+ "%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\
+  %{f*} %{g*:%{!g0:%{g*} %{!fno-working-directory:-fworking-directory}}} %{O*}\
+- %{undef} %{save-temps:-fpch-preprocess}";
++ %{undef} %{save-temps:-fpch-preprocess} %(ssp_default)";
+ 
+ /* This contains cpp options which are not passed when the preprocessor
+    output will be used by another program.  */
+@@ -1015,15 +1024,15 @@
+ 	  %{save-temps|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \
+ 		%(cpp_options) -o %{save-temps:%b.i} %{!save-temps:%g.i} \n\
+ 		    cc1 -fpreprocessed %{save-temps:%b.i} %{!save-temps:%g.i} \
+-			%(cc1_options)}\
++			%(cc1_options) %(ssp_default)}\
+ 	  %{!save-temps:%{!traditional-cpp:%{!no-integrated-cpp:\
+-		cc1 %(cpp_unique_options) %(cc1_options)}}}\
++		cc1 %(cpp_unique_options) %(cc1_options) %(ssp_default)}}}\
+           %{!fsyntax-only:%(invoke_as)}} \
+       %{combine:\
+ 	  %{save-temps|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \
+ 		%(cpp_options) -o %{save-temps:%b.i} %{!save-temps:%g.i}}\
+ 	  %{!save-temps:%{!traditional-cpp:%{!no-integrated-cpp:\
+-		cc1 %(cpp_unique_options) %(cc1_options)}}\
++		cc1 %(cpp_unique_options) %(cc1_options) %(ssp_default)}}\
+                 %{!fsyntax-only:%(invoke_as)}}}}}}", 0, 1, 1},
+   {"-",
+    "%{!E:%e-E or -x required when input is from standard input}\
+@@ -1046,7 +1055,7 @@
+                     %W{o*:--output-pch=%*}%V}}}}}}", 0, 0, 0},
+   {".i", "@cpp-output", 0, 1, 0},
+   {"@cpp-output",
+-   "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 1, 0},
++   "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %(ssp_default) %{!fsyntax-only:%(invoke_as)}}}}", 0, 1, 0},
+   {".s", "@assembler", 0, 1, 0},
+   {"@assembler",
+    "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 1, 0},
+@@ -1607,6 +1616,7 @@
+   INIT_STATIC_SPEC ("cc1plus",			&cc1plus_spec),
+   INIT_STATIC_SPEC ("link_gcc_c_sequence",	&link_gcc_c_sequence_spec),
+   INIT_STATIC_SPEC ("link_ssp",			&link_ssp_spec),
++  INIT_STATIC_SPEC ("ssp_default",		&ssp_default_spec),
+   INIT_STATIC_SPEC ("endfile",			&endfile_spec),
+   INIT_STATIC_SPEC ("link",			&link_spec),
+   INIT_STATIC_SPEC ("lib",			&lib_spec),
+--- a/src/gcc/cp/lang-specs.h.orig	2007-08-06 13:10:19.000000000 +0200
++++ b/src/gcc/cp/lang-specs.h	2009-11-15 17:50:09.000000000 +0100
+@@ -47,7 +47,7 @@
+ 		%(cpp_options) %2 -o %{save-temps:%b.ii} %{!save-temps:%g.ii} \n}\
+       cc1plus %{save-temps|no-integrated-cpp:-fpreprocessed %{save-temps:%b.ii} %{!save-temps:%g.ii}}\
+ 	      %{!save-temps:%{!no-integrated-cpp:%(cpp_unique_options)}}\
+-	%(cc1_options) %2 %{+e1*}\
++	%(cc1_options) %(ssp_default) %2 %{+e1*}\
+ 	%{!fsyntax-only:-o %g.s %{!o*:--output-pch=%i.gch} %W{o*:--output-pch=%*}%V}}}}",
+      CPLUSPLUS_CPP_SPEC, 0, 0},
+   {"@c++",
+@@ -57,11 +57,11 @@
+ 		%(cpp_options) %2 -o %{save-temps:%b.ii} %{!save-temps:%g.ii} \n}\
+       cc1plus %{save-temps|no-integrated-cpp:-fpreprocessed %{save-temps:%b.ii} %{!save-temps:%g.ii}}\
+ 	      %{!save-temps:%{!no-integrated-cpp:%(cpp_unique_options)}}\
+-	%(cc1_options) %2 %{+e1*}\
++	%(cc1_options) %(ssp_default) %2 %{+e1*}\
+        %{!fsyntax-only:%(invoke_as)}}}}",
+      CPLUSPLUS_CPP_SPEC, 0, 0},
+   {".ii", "@c++-cpp-output", 0, 0, 0},
+   {"@c++-cpp-output",
+    "%{!M:%{!MM:%{!E:\
+-    cc1plus -fpreprocessed %i %(cc1_options) %2 %{+e*}\
++    cc1plus -fpreprocessed %i %(cc1_options) %(ssp_default) %2 %{+e*}\
+     %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+--- a/src/gcc/Makefile.in.orig	2009-11-15 17:45:13.000000000 +0100
++++ b/src/gcc/Makefile.in	2009-11-15 17:50:09.000000000 +0100
+@@ -588,6 +588,7 @@
+ LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) \
+ 		 $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) \
+ 		 -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED \
++		 -fno-stack-protector \
+ 		 $(INHIBIT_LIBC_CFLAGS)
+ 
+ # Additional options to use when compiling libgcc2.a.
+@@ -601,6 +602,7 @@
+ CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
+   -finhibit-size-directive -fno-inline-functions -fno-exceptions \
+   -fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \
++  -fno-stack-protector \
+   $(INHIBIT_LIBC_CFLAGS)
+ 
+ # Additional sources to handle exceptions; overridden by targets as needed.
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr42321.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr42321.diff
@@ -0,0 +1,53 @@
+# DP: PR target/42321, backport from the trunk
+
+2010-03-21  Richard Earnshaw  <rearnsha@arm.com>
+
+	PR target/42321
+	* arm.c (arm_output_epilogue): Correctly match VFP pop instructions
+	with their corresponding prologue pushes.
+
+Index: gcc/config/arm/arm.c
+===================================================================
+--- a/src/gcc/config/arm/arm.c	(revision 157608)
++++ b/src/gcc/config/arm/arm.c	(revision 157609)
+@@ -13731,24 +13731,29 @@
+ 
+       if (TARGET_HARD_FLOAT && TARGET_VFP)
+ 	{
+-	  start_reg = FIRST_VFP_REGNUM;
+-	  for (reg = FIRST_VFP_REGNUM; reg < LAST_VFP_REGNUM; reg += 2)
++	  int end_reg = LAST_VFP_REGNUM + 1;
++
++	  /* Scan the registers in reverse order.  We need to match
++	     any groupings made in the prologue and generate matching
++	     pop operations.  */
++	  for (reg = LAST_VFP_REGNUM - 1; reg >= FIRST_VFP_REGNUM; reg -= 2)
+ 	    {
+ 	      if ((!df_regs_ever_live_p (reg) || call_used_regs[reg])
+-		  && (!df_regs_ever_live_p (reg + 1) || call_used_regs[reg + 1]))
++		  && (!df_regs_ever_live_p (reg + 1)
++		      || call_used_regs[reg + 1]))
+ 		{
+-		  if (start_reg != reg)
++		  if (end_reg > reg + 2)
+ 		    vfp_output_fldmd (f, SP_REGNUM,
+-				      (start_reg - FIRST_VFP_REGNUM) / 2,
+-				      (reg - start_reg) / 2);
+-		  start_reg = reg + 2;
++				      (reg + 2 - FIRST_VFP_REGNUM) / 2,
++				      (end_reg - (reg + 2)) / 2);
++		  end_reg = reg;
+ 		}
+ 	    }
+-	  if (start_reg != reg)
+-	    vfp_output_fldmd (f, SP_REGNUM,
+-			      (start_reg - FIRST_VFP_REGNUM) / 2,
+-			      (reg - start_reg) / 2);
++	  if (end_reg > reg + 2)
++	    vfp_output_fldmd (f, SP_REGNUM, 0,
++			      (end_reg - (reg + 2)) / 2);
+ 	}
++
+       if (TARGET_IWMMXT)
+ 	for (reg = FIRST_IWMMXT_REGNUM; reg <= LAST_IWMMXT_REGNUM; reg++)
+ 	  if (df_regs_ever_live_p (reg) && !call_used_regs[reg])
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/no_fpr_in_libgcc.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/no_fpr_in_libgcc.diff
@@ -0,0 +1,55 @@
+# DP: It does not really harm by including them since nobody should use them
+# DP: but gas does not wont to assmebly hard float since they are not
+# DP: available on this cpu. Upstream did not respond.
+
+Index: gcc-4.4.5/src/gcc/config/rs6000/crtresfpr.asm
+===================================================================
+--- gcc-4.4.5.orig/src/gcc/config/rs6000/crtresfpr.asm	2011-02-13 17:25:36.000000000 +0100
++++ gcc-4.4.5/src/gcc/config/rs6000/crtresfpr.asm	2011-02-13 17:26:14.000000000 +0100
+@@ -33,6 +33,7 @@
+ 
+ /* On PowerPC64 Linux, these functions are provided by the linker.  */
+ #ifndef __powerpc64__
++#ifndef __NO_FPRS__
+ 
+ /* Routines for restoring floating point registers, called by the compiler.  */
+ /* Called with r11 pointing to the stack header word of the caller of the */
+@@ -77,3 +78,4 @@
+ FUNC_END(_restfpr_14)
+ 
+ #endif
++#endif
+Index: gcc-4.4.5/src/gcc/config/rs6000/crtresxfpr.asm
+===================================================================
+--- gcc-4.4.5.orig/src/gcc/config/rs6000/crtresxfpr.asm	2011-02-13 17:25:36.000000000 +0100
++++ gcc-4.4.5/src/gcc/config/rs6000/crtresxfpr.asm	2011-02-13 17:26:29.000000000 +0100
+@@ -33,6 +33,7 @@
+ 
+ /* On PowerPC64 Linux, these functions are provided by the linker.  */
+ #ifndef __powerpc64__
++#ifndef __NO_FPRS__
+ 
+ /* Routines for restoring floating point registers, called by the compiler.  */
+ /* Called with r11 pointing to the stack header word of the caller of the */
+@@ -82,3 +83,4 @@
+ FUNC_END(_restfpr_14_x)
+ 
+ #endif
++#endif
+Index: gcc-4.4.5/src/gcc/config/rs6000/crtsavfpr.asm
+===================================================================
+--- gcc-4.4.5.orig/src/gcc/config/rs6000/crtsavfpr.asm	2011-02-13 17:25:36.000000000 +0100
++++ gcc-4.4.5/src/gcc/config/rs6000/crtsavfpr.asm	2011-02-13 17:26:42.000000000 +0100
+@@ -33,6 +33,7 @@
+ 
+ /* On PowerPC64 Linux, these functions are provided by the linker.  */
+ #ifndef __powerpc64__
++#ifndef __NO_FPRS__
+ 
+ /* Routines for saving floating point registers, called by the compiler.  */
+ /* Called with r11 pointing to the stack header word of the caller of the */
+@@ -77,3 +78,4 @@
+ FUNC_END(_savefpr_14)
+ 
+ #endif
++#endif
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-arm-thumb2-sched.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-arm-thumb2-sched.diff
@@ -0,0 +1,292 @@
+# DP: [arm] enable scheduling for Thumb-2, fix PR target/42031.
+
+2009-11-10  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* config/arm/arm.c (arm_override_options): Enable scheduling for
+	Thumb-2.
+
+2009-11-14  Richard Earnshaw  <rearnsha@arm.com>
+
+	PR target/42031
+	* arm.md (adddi_sesidi_di): Place tied contraint first.
+	(adddi_zesidi_di, subdi_di_zesidi, subdi_di_sesidi): Likewise
+	(subdi_zesidi_di, subdi_sesidi_di): Likewise.
+	(mulsi3_compare0, mulsi_compare0_scratch): Likewise.
+	(mulsi3addsi, mulsi3addsi_compare0): Likewise.
+	(mulsi3addsi_compare0_scratch, smulsi3_highpart_nov6): Likewise.
+	(umulsi3_highpart_nov6, anddi_zesidi_di, anddi_sesdi_di): Likewise.
+	(anddi_notdi_di, iordi_sesidi_di, xordi_sesidi_di): Likewise.
+	(andsi_iorsi3_notsi, arm_ashldi3_1bit, arm_ashrdi3_1_bit): Likewise.
+	(arm_lshrdi3_1bit, one_cmpldi2): Likewise.
+
+2009-11-27  Julian Brown <julian@codesourcery.com>
+
+	* config/arm/arm.h (PREFERRED_RELOAD_CLASS): Don't restrict Thumb-2
+	reloads to LO_REGS.
+
+Index: gcc/config/arm/arm.c
+===================================================================
+--- a/src/gcc/config/arm/arm.c	(revision 154188)
++++ b/src/gcc/config/arm/arm.c	(working copy)
+@@ -1616,8 +1616,7 @@
+ 	fix_cm3_ldrd = 0;
+     }
+ 
+-  /* ??? We might want scheduling for thumb2.  */
+-  if (TARGET_THUMB && flag_schedule_insns)
++  if (TARGET_THUMB1 && flag_schedule_insns)
+     {
+       /* Don't warn since it's on by default in -O2.  */
+       flag_schedule_insns = 0;
+Index: gcc/config/arm/arm.md
+===================================================================
+--- a/src/gcc/config/arm/arm.md	(revision 154188)
++++ b/src/gcc/config/arm/arm.md	(working copy)
+@@ -521,7 +521,7 @@
+   [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
+ 	(plus:DI (sign_extend:DI
+ 		  (match_operand:SI 2 "s_register_operand" "r,r"))
+-		 (match_operand:DI 1 "s_register_operand" "r,0")))
++		 (match_operand:DI 1 "s_register_operand" "0,r")))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_32BIT && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)"
+   "#"
+@@ -550,7 +550,7 @@
+   [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
+ 	(plus:DI (zero_extend:DI
+ 		  (match_operand:SI 2 "s_register_operand" "r,r"))
+-		 (match_operand:DI 1 "s_register_operand" "r,0")))
++		 (match_operand:DI 1 "s_register_operand" "0,r")))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_32BIT && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)"
+   "#"
+@@ -995,7 +995,7 @@
+ 
+ (define_insn "*subdi_di_zesidi"
+   [(set (match_operand:DI           0 "s_register_operand" "=&r,&r")
+-	(minus:DI (match_operand:DI 1 "s_register_operand"  "?r,0")
++	(minus:DI (match_operand:DI 1 "s_register_operand"  "0,r")
+ 		  (zero_extend:DI
+ 		   (match_operand:SI 2 "s_register_operand"  "r,r"))))
+    (clobber (reg:CC CC_REGNUM))]
+@@ -1007,7 +1007,7 @@
+ 
+ (define_insn "*subdi_di_sesidi"
+   [(set (match_operand:DI            0 "s_register_operand" "=&r,&r")
+-	(minus:DI (match_operand:DI  1 "s_register_operand"  "r,0")
++	(minus:DI (match_operand:DI  1 "s_register_operand"  "0,r")
+ 		  (sign_extend:DI
+ 		   (match_operand:SI 2 "s_register_operand"  "r,r"))))
+    (clobber (reg:CC CC_REGNUM))]
+@@ -1021,7 +1021,7 @@
+   [(set (match_operand:DI            0 "s_register_operand" "=&r,&r")
+ 	(minus:DI (zero_extend:DI
+ 		   (match_operand:SI 2 "s_register_operand"  "r,r"))
+-		  (match_operand:DI  1 "s_register_operand" "?r,0")))
++		  (match_operand:DI  1 "s_register_operand" "0,r")))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_ARM"
+   "rsbs\\t%Q0, %Q1, %2\;rsc\\t%R0, %R1, #0"
+@@ -1033,7 +1033,7 @@
+   [(set (match_operand:DI            0 "s_register_operand" "=&r,&r")
+ 	(minus:DI (sign_extend:DI
+ 		   (match_operand:SI 2 "s_register_operand"   "r,r"))
+-		  (match_operand:DI  1 "s_register_operand"  "?r,0")))
++		  (match_operand:DI  1 "s_register_operand"  "0,r")))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_ARM"
+   "rsbs\\t%Q0, %Q1, %2\;rsc\\t%R0, %R1, %2, asr #31"
+@@ -1202,7 +1202,7 @@
+ (define_insn "*arm_mulsi3"
+   [(set (match_operand:SI          0 "s_register_operand" "=&r,&r")
+ 	(mult:SI (match_operand:SI 2 "s_register_operand" "r,r")
+-		 (match_operand:SI 1 "s_register_operand" "%?r,0")))]
++		 (match_operand:SI 1 "s_register_operand" "%0,r")))]
+   "TARGET_32BIT && !arm_arch6"
+   "mul%?\\t%0, %2, %1"
+   [(set_attr "insn" "mul")
+@@ -1256,7 +1256,7 @@
+   [(set (reg:CC_NOOV CC_REGNUM)
+ 	(compare:CC_NOOV (mult:SI
+ 			  (match_operand:SI 2 "s_register_operand" "r,r")
+-			  (match_operand:SI 1 "s_register_operand" "%?r,0"))
++			  (match_operand:SI 1 "s_register_operand" "%0,r"))
+ 			 (const_int 0)))
+    (set (match_operand:SI 0 "s_register_operand" "=&r,&r")
+ 	(mult:SI (match_dup 2) (match_dup 1)))]
+@@ -1284,7 +1284,7 @@
+   [(set (reg:CC_NOOV CC_REGNUM)
+ 	(compare:CC_NOOV (mult:SI
+ 			  (match_operand:SI 2 "s_register_operand" "r,r")
+-			  (match_operand:SI 1 "s_register_operand" "%?r,0"))
++			  (match_operand:SI 1 "s_register_operand" "%0,r"))
+ 			 (const_int 0)))
+    (clobber (match_scratch:SI 0 "=&r,&r"))]
+   "TARGET_ARM && !arm_arch6"
+@@ -1312,8 +1312,8 @@
+   [(set (match_operand:SI 0 "s_register_operand" "=&r,&r,&r,&r")
+ 	(plus:SI
+ 	  (mult:SI (match_operand:SI 2 "s_register_operand" "r,r,r,r")
+-		   (match_operand:SI 1 "s_register_operand" "%r,0,r,0"))
+-	  (match_operand:SI 3 "s_register_operand" "?r,r,0,0")))]
++		   (match_operand:SI 1 "s_register_operand" "%0,r,0,r"))
++	  (match_operand:SI 3 "s_register_operand" "r,r,0,0")))]
+   "TARGET_32BIT && !arm_arch6"
+   "mla%?\\t%0, %2, %1, %3"
+   [(set_attr "insn" "mla")
+@@ -1337,8 +1337,8 @@
+ 	(compare:CC_NOOV
+ 	 (plus:SI (mult:SI
+ 		   (match_operand:SI 2 "s_register_operand" "r,r,r,r")
+-		   (match_operand:SI 1 "s_register_operand" "%r,0,r,0"))
+-		  (match_operand:SI 3 "s_register_operand" "?r,r,0,0"))
++		   (match_operand:SI 1 "s_register_operand" "%0,r,0,r"))
++		  (match_operand:SI 3 "s_register_operand" "r,r,0,0"))
+ 	 (const_int 0)))
+    (set (match_operand:SI 0 "s_register_operand" "=&r,&r,&r,&r")
+ 	(plus:SI (mult:SI (match_dup 2) (match_dup 1))
+@@ -1371,7 +1371,7 @@
+ 	(compare:CC_NOOV
+ 	 (plus:SI (mult:SI
+ 		   (match_operand:SI 2 "s_register_operand" "r,r,r,r")
+-		   (match_operand:SI 1 "s_register_operand" "%r,0,r,0"))
++		   (match_operand:SI 1 "s_register_operand" "%0,r,0,r"))
+ 		  (match_operand:SI 3 "s_register_operand" "?r,r,0,0"))
+ 	 (const_int 0)))
+    (clobber (match_scratch:SI 0 "=&r,&r,&r,&r"))]
+@@ -1551,7 +1551,7 @@
+ 	(truncate:SI
+ 	 (lshiftrt:DI
+ 	  (mult:DI
+-	   (sign_extend:DI (match_operand:SI 1 "s_register_operand" "%r,0"))
++	   (sign_extend:DI (match_operand:SI 1 "s_register_operand" "%0,r"))
+ 	   (sign_extend:DI (match_operand:SI 2 "s_register_operand" "r,r")))
+ 	  (const_int 32))))
+    (clobber (match_scratch:SI 3 "=&r,&r"))]
+@@ -1595,7 +1595,7 @@
+ 	(truncate:SI
+ 	 (lshiftrt:DI
+ 	  (mult:DI
+-	   (zero_extend:DI (match_operand:SI 1 "s_register_operand" "%r,0"))
++	   (zero_extend:DI (match_operand:SI 1 "s_register_operand" "%0,r"))
+ 	   (zero_extend:DI (match_operand:SI 2 "s_register_operand" "r,r")))
+ 	  (const_int 32))))
+    (clobber (match_scratch:SI 3 "=&r,&r"))]
+@@ -1850,7 +1850,7 @@
+   [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
+ 	(and:DI (zero_extend:DI
+ 		 (match_operand:SI 2 "s_register_operand" "r,r"))
+-		(match_operand:DI 1 "s_register_operand" "?r,0")))]
++		(match_operand:DI 1 "s_register_operand" "0,r")))]
+   "TARGET_32BIT"
+   "#"
+   "TARGET_32BIT && reload_completed"
+@@ -1871,7 +1871,7 @@
+   [(set (match_operand:DI          0 "s_register_operand" "=&r,&r")
+ 	(and:DI (sign_extend:DI
+ 		 (match_operand:SI 2 "s_register_operand" "r,r"))
+-		(match_operand:DI  1 "s_register_operand" "?r,0")))]
++		(match_operand:DI  1 "s_register_operand" "0,r")))]
+   "TARGET_32BIT"
+   "#"
+   [(set_attr "length" "8")]
+@@ -2428,8 +2428,8 @@
+ ; constants for op 2 will never be given to these patterns.
+ (define_insn_and_split "*anddi_notdi_di"
+   [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
+-	(and:DI (not:DI (match_operand:DI 1 "s_register_operand" "r,0"))
+-		(match_operand:DI 2 "s_register_operand" "0,r")))]
++	(and:DI (not:DI (match_operand:DI 1 "s_register_operand" "0,r"))
++		(match_operand:DI 2 "s_register_operand" "r,0")))]
+   "TARGET_32BIT"
+   "#"
+   "TARGET_32BIT && reload_completed && ! IS_IWMMXT_REGNUM (REGNO (operands[0]))"
+@@ -2583,7 +2583,7 @@
+   [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
+ 	(ior:DI (sign_extend:DI
+ 		 (match_operand:SI 2 "s_register_operand" "r,r"))
+-		(match_operand:DI 1 "s_register_operand" "?r,0")))]
++		(match_operand:DI 1 "s_register_operand" "0,r")))]
+   "TARGET_32BIT"
+   "#"
+   [(set_attr "length" "8")
+@@ -2704,7 +2704,7 @@
+   [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
+ 	(xor:DI (sign_extend:DI
+ 		 (match_operand:SI 2 "s_register_operand" "r,r"))
+-		(match_operand:DI 1 "s_register_operand" "?r,0")))]
++		(match_operand:DI 1 "s_register_operand" "0,r")))]
+   "TARGET_32BIT"
+   "#"
+   [(set_attr "length" "8")
+@@ -2781,7 +2781,7 @@
+ 
+ (define_insn "*andsi_iorsi3_notsi"
+   [(set (match_operand:SI 0 "s_register_operand" "=&r,&r,&r")
+-	(and:SI (ior:SI (match_operand:SI 1 "s_register_operand" "r,r,0")
++	(and:SI (ior:SI (match_operand:SI 1 "s_register_operand" "%0,r,r")
+ 			(match_operand:SI 2 "arm_rhs_operand" "rI,0,rI"))
+ 		(not:SI (match_operand:SI 3 "arm_rhs_operand" "rI,rI,rI"))))]
+   "TARGET_32BIT"
+@@ -3135,7 +3135,7 @@
+ 
+ (define_insn "arm_ashldi3_1bit"
+   [(set (match_operand:DI            0 "s_register_operand" "=&r,r")
+-        (ashift:DI (match_operand:DI 1 "s_register_operand" "?r,0")
++        (ashift:DI (match_operand:DI 1 "s_register_operand" "0,r")
+                    (const_int 1)))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_32BIT"
+@@ -3194,7 +3194,7 @@
+ 
+ (define_insn "arm_ashrdi3_1bit"
+   [(set (match_operand:DI              0 "s_register_operand" "=&r,r")
+-        (ashiftrt:DI (match_operand:DI 1 "s_register_operand" "?r,0")
++        (ashiftrt:DI (match_operand:DI 1 "s_register_operand" "0,r")
+                      (const_int 1)))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_32BIT"
+@@ -3250,7 +3250,7 @@
+ 
+ (define_insn "arm_lshrdi3_1bit"
+   [(set (match_operand:DI              0 "s_register_operand" "=&r,r")
+-        (lshiftrt:DI (match_operand:DI 1 "s_register_operand" "?r,0")
++        (lshiftrt:DI (match_operand:DI 1 "s_register_operand" "0,r")
+                      (const_int 1)))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_32BIT"
+@@ -3497,10 +3497,10 @@
+ )
+ 
+ ;; The constraints here are to prevent a *partial* overlap (where %Q0 == %R1).
+-;; The second alternative is to allow the common case of a *full* overlap.
++;; The first alternative allows the common case of a *full* overlap.
+ (define_insn "*arm_negdi2"
+   [(set (match_operand:DI         0 "s_register_operand" "=&r,r")
+-	(neg:DI (match_operand:DI 1 "s_register_operand"  "?r,0")))
++	(neg:DI (match_operand:DI 1 "s_register_operand"  "0,r")))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_ARM"
+   "rsbs\\t%Q0, %Q1, #0\;rsc\\t%R0, %R1, #0"
+@@ -3653,7 +3653,7 @@
+ 
+ (define_insn_and_split "one_cmpldi2"
+   [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
+-	(not:DI (match_operand:DI 1 "s_register_operand" "?r,0")))]
++	(not:DI (match_operand:DI 1 "s_register_operand" "0,r")))]
+   "TARGET_32BIT"
+   "#"
+   "TARGET_32BIT && reload_completed"
+Index: gcc/config/arm/arm.h
+===================================================================
+--- a/src/gcc/config/arm/arm.h	(revision 154725)
++++ b/src/gcc/config/arm/arm.h	(working copy)
+@@ -1263,7 +1263,7 @@
+    In general this is just CLASS, but for the Thumb core registers and
+    immediate constants we prefer a LO_REGS class or a subset.  */
+ #define PREFERRED_RELOAD_CLASS(X, CLASS)		\
+-  (TARGET_ARM ? (CLASS) :				\
++  (TARGET_32BIT ? (CLASS) :				\
+    ((CLASS) == GENERAL_REGS || (CLASS) == HI_REGS	\
+     || (CLASS) == NO_REGS || (CLASS) == STACK_REG	\
+    ? LO_REGS : (CLASS)))
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-default-format-security.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-default-format-security.diff
@@ -0,0 +1,54 @@
+# DP: Turn on -Wformat -Wformat-security by  default for C, C++, ObjC, ObjC++.
+
+---
+ gcc/c-common.c      |    2 +-
+ gcc/c.opt           |    2 +-
+ gcc/doc/invoke.texi |    8 ++++++++
+ 3 files changed, 10 insertions(+), 2 deletions(-)
+
+--- a/src/gcc/c-common.c
++++ b/src/gcc/c-common.c
+@@ -300,7 +300,7 @@ int warn_unknown_pragmas; /* Tri state variable.  */
+ /* Warn about format/argument anomalies in calls to formatted I/O functions
+    (*printf, *scanf, strftime, strfmon, etc.).  */
+ 
+-int warn_format;
++int warn_format = 1;
+ 
+ /* Warn about using __null (as NULL in C++) as sentinel.  For code compiled
+    with GCC this doesn't matter as __null is guaranteed to have the right
+--- a/src/gcc/c.opt
++++ b/src/gcc/c.opt
+@@ -236,7 +236,7 @@ C ObjC C++ ObjC++ Var(warn_format_contains_nul) Warning
+ Warn about format strings that contain NUL bytes
+ 
+ Wformat-security
+-C ObjC C++ ObjC++ Var(warn_format_security) Warning
++C ObjC C++ ObjC++ Var(warn_format_security) Init(1) Warning
+ Warn about possible security problems with format functions
+ 
+ Wformat-y2k
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -2864,6 +2864,9 @@ aspects of format checking, the options @option{-Wformat-y2k},
+ @option{-Wformat-nonliteral}, @option{-Wformat-security}, and
+ @option{-Wformat=2} are available, but are not included in @option{-Wall}.
+ 
++NOTE: In Ubuntu 8.10 and later versions this option is enabled by default
++for C, C++, ObjC, ObjC++.  To disable, use @option{-Wformat=0}.
++
+ @item -Wformat-y2k
+ @opindex Wformat-y2k
+ @opindex Wno-format-y2k
+@@ -2917,6 +2920,11 @@ currently a subset of what @option{-Wformat-nonliteral} warns about, but
+ in future warnings may be added to @option{-Wformat-security} that are not
+ included in @option{-Wformat-nonliteral}.)
+ 
++NOTE: In Ubuntu 8.10 and later versions this option is enabled by default
++for C, C++, ObjC, ObjC++.  To disable, use @option{-Wno-format-security},
++or disable all format warnings with @option{-Wformat=0}.  To make format
++security warnings fatal, specify @option{-Werror=format-security}.
++
+ @item -Wformat=2
+ @opindex Wformat=2
+ @opindex Wno-format=2
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/cross-include.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/cross-include.diff
@@ -0,0 +1,18 @@
+# DP: Set cross include path to .../include, not .../sys-include
+# DP: This should be a fix for famous limits.h issue
+
+---
+ gcc/configure.ac |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+--- a/src/gcc/configure.ac
++++ b/src/gcc/configure.ac
+@@ -764,7 +764,7 @@ AC_ARG_WITH(sysroot,
+ ], [
+  TARGET_SYSTEM_ROOT=
+  TARGET_SYSTEM_ROOT_DEFINE=
+- CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
++ CROSS_SYSTEM_HEADER_DIR='$(prefix)/$(target_noncanonical)/include'
+ ])
+ AC_SUBST(TARGET_SYSTEM_ROOT)
+ AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/mips-fix-loongson2f-nop-linaro.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/mips-fix-loongson2f-nop-linaro.diff
@@ -0,0 +1,13 @@
+# DP: On mips, pass -mfix-loongson2f-nop to as, if -mno-fix-loongson2f-nop
+# DP: is not passed.
+
+--- a/src/gcc/config/mips/mips.h~	2010-06-12 14:03:03.000000000 +0200
++++ b/src/gcc/config/mips/mips.h	2010-06-12 14:11:42.892328066 +0200
+@@ -1178,6 +1178,7 @@
+ %{msym32} %{mno-sym32} \
+ %{mtune=*} %{v} \
+ %{mocteon-useun} %{mno-octeon-useun} \
++%{!mno-fix-loongson2f-nop:-mfix-loongson2f-nop} \
+ %(subtarget_asm_spec)"
+ 
+ /* Extra switches sometimes passed to the linker.  */
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libjava-disable-static.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libjava-disable-static.diff
@@ -0,0 +1,26 @@
+# DP: Disable building the static libjava.
+
+---
+ Makefile.in |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -49463,7 +49463,7 @@ configure-target-libjava:
+ 	rm -f no-such-file || : ; \
+ 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+-	  --target=${target_alias} $${srcdiroption}  \
++	  --target=${target_alias} --disable-static $${srcdiroption}  \
+ 	  || exit 1
+ @endif target-libjava
+ 
+@@ -50347,7 +50347,7 @@ configure-target-boehm-gc:
+ 	rm -f no-such-file || : ; \
+ 	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+-	  --target=${target_alias} $${srcdiroption}  \
++	  --target=${target_alias} --disable-static $${srcdiroption}  \
+ 	  || exit 1
+ @endif target-boehm-gc
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-mips.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-mips.diff
@@ -0,0 +1,18 @@
+# DP: Improve support for mips.
+
+Index: b/src/gcc/ada/gcc-interface/Makefile.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -1432,6 +1432,11 @@
+   s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
+   system.ads<system-linux-mips.ads
+ 
++  TOOLS_TARGET_PAIRS =  \
++    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++    indepsw.adb<indepsw-gnu.adb
++
++  EXTRA_GNATRTL_TASKING_OBJS=s-linux.o
+   EH_MECHANISM=-gcc
+   THREADSLIB = -lpthread
+   GNATLIB_SHARED = gnatlib-shared-dual
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-default-project-path.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-default-project-path.diff
@@ -0,0 +1,122 @@
+# DP: - Change the default search path for project files to the one specified
+# DP:   by the Debian Policy for Ada: /usr/share/ada/adainclude.
+
+Index: src/gcc/ada/gcc-interface/Make-lang.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Make-lang.in.orig
++++ b/src/gcc/ada/gcc-interface/Make-lang.in
+@@ -998,7 +998,7 @@
+ 	$(ECHO) "   S1 : constant String := \"$(ADA_INCLUDE_DIR)/\";" >>tmp-sdefault.adb
+ 	$(ECHO) "   S2 : constant String := \"$(ADA_RTL_OBJ_DIR)/\";" >>tmp-sdefault.adb
+ 	$(ECHO) "   S3 : constant String := \"$(target)/\";" >>tmp-sdefault.adb
+-	$(ECHO) "   S4 : constant String := \"$(libsubdir)/\";" >>tmp-sdefault.adb
++	$(ECHO) "   S4 : constant String := \"/usr/share/ada/adainclude/\";" >>tmp-sdefault.adb
+ 	$(ECHO) "   function Include_Dir_Default_Name return String_Ptr is" >>tmp-sdefault.adb
+ 	$(ECHO) "   begin" >>tmp-sdefault.adb
+ 	$(ECHO) "      return Relocate_Path (S0, S1);" >>tmp-sdefault.adb
+Index: src/gcc/ada/prj-ext.adb
+===================================================================
+--- a/src/gcc/ada/prj-ext.adb.orig
++++ b/src/gcc/ada/prj-ext.adb
+@@ -24,7 +24,6 @@
+ ------------------------------------------------------------------------------
+ 
+ with Hostparm;
+-with Makeutl;  use Makeutl;
+ with Output;   use Output;
+ with Osint;    use Osint;
+ with Sdefault;
+@@ -252,36 +251,10 @@
+ 
+       --  Set the initial value of Current_Project_Path
+ 
+-      if Add_Default_Dir then
+-         declare
+-            Prefix : String_Ptr := Sdefault.Search_Dir_Prefix;
+-         begin
+-            if Prefix = null then
+-               Prefix := new String'(Executable_Prefix_Path);
+-
+-               if Prefix.all /= "" then
+-                  if Get_Mode = Multi_Language then
+-                     Add_Str_To_Name_Buffer
+-                       (Path_Separator & Prefix.all &
+-                        Directory_Separator & "share" &
+-                        Directory_Separator & "gpr");
+-                  end if;
+-
+-                  Add_Str_To_Name_Buffer
+-                    (Path_Separator & Prefix.all &
+-                     Directory_Separator & "lib" &
+-                     Directory_Separator & "gnat");
+-               end if;
+-
+-            else
+-               Current_Project_Path :=
+-                 new String'(Name_Buffer (1 .. Name_Len) & Path_Separator &
+-                             Prefix.all &
+-                             ".." &  Directory_Separator &
+-                             ".." & Directory_Separator &
+-                             ".." & Directory_Separator & "gnat");
+-            end if;
+-         end;
++      if Add_Default_Dir and Sdefault.Search_Dir_Prefix /= null then
++         Current_Project_Path :=
++           new String'(Name_Buffer (1 .. Name_Len) & Path_Separator &
++                         Sdefault.Search_Dir_Prefix.all);
+       end if;
+ 
+       if Current_Project_Path = null then
+Index: src/gcc/ada/gnatls.adb
+===================================================================
+--- a/src/gcc/ada/gnatls.adb.orig
++++ b/src/gcc/ada/gnatls.adb
+@@ -1624,9 +1624,6 @@
+       declare
+          Project_Path : String_Access := Getenv (Gpr_Project_Path);
+ 
+-         Lib : constant String :=
+-                 Directory_Separator & "lib" & Directory_Separator;
+-
+          First : Natural;
+          Last  : Natural;
+ 
+@@ -1686,36 +1683,8 @@
+          if Add_Default_Dir then
+             Name_Len := 0;
+             Add_Str_To_Name_Buffer (Sdefault.Search_Dir_Prefix.all);
+-
+-            --  On Windows, make sure that all directory separators are '\'
+-
+-            if Directory_Separator /= '/' then
+-               for J in 1 .. Name_Len loop
+-                  if Name_Buffer (J) = '/' then
+-                     Name_Buffer (J) := Directory_Separator;
+-                  end if;
+-               end loop;
+-            end if;
+-
+-            --  Find the sequence "/lib/"
+-
+-            while Name_Len >= Lib'Length
+-              and then Name_Buffer (Name_Len - 4 .. Name_Len) /= Lib
+-            loop
+-               Name_Len := Name_Len - 1;
+-            end loop;
+-
+-            --  If the sequence "/lib"/ was found, display the default
+-            --  directory <prefix>/lib/gnat/.
+-
+-            if Name_Len >= 5 then
+-               Name_Buffer (Name_Len + 1 .. Name_Len + 4) := "gnat";
+-               Name_Buffer (Name_Len + 5) := Directory_Separator;
+-               Name_Len := Name_Len + 5;
+-               Write_Str ("   ");
+-               Write_Line
+-                 (To_Host_Dir_Spec (Name_Buffer (1 .. Name_Len), True).all);
+-            end if;
++            Write_Str ("   ");
++            Write_Line (Name_Buffer (1 .. Name_Len));
+          end if;
+       end;
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/sparc-force-cpu.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/sparc-force-cpu.diff
@@ -0,0 +1,18 @@
+# DP: On sparc default to v9a (ultrasparc) in 32bit mode
+
+--- a/src/gcc/config.gcc~	2009-10-18 03:09:56.000000000 +0200
++++ b/src/gcc/config.gcc	2009-10-21 14:44:57.000000000 +0200
+@@ -3156,6 +3156,13 @@
+ 			;;
+ 		esac
+ 
++		# setting this directly fails to build a biarch defaulting to 32bit
++		case "$target" in sparc*-*-linux*)
++			if test "$option" = cpu; then
++				val=ultrasparc
++			fi
++		esac
++
+ 		if test "x$t" = x
+ 		then
+ 			t="{ \"$option\", \"$val\" }"
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/sh4_atomic_update.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/sh4_atomic_update.diff
@@ -0,0 +1,122 @@
+# DP: Update atomic builtins for sh4
+
+--- a/src/gcc/config/sh/linux-atomic.asm	2009-04-10 08:23:07.000000000 +0900
++++ b/src/gcc/config/sh/linux-atomic.asm	2009-12-18 11:58:50.000000000 +0900
+@@ -54,10 +54,10 @@
+ ATOMIC_TEST_AND_SET (4,l,mov)
+ 
+ #define ATOMIC_COMPARE_AND_SWAP(N,T,EXTS,EXT) \
+-	.global	__sync_compare_and_swap_##N; \
+-	HIDDEN_FUNC(__sync_compare_and_swap_##N); \
++	.global	__sync_val_compare_and_swap_##N; \
++	HIDDEN_FUNC(__sync_val_compare_and_swap_##N); \
+ 	.align	2; \
+-__sync_compare_and_swap_##N:; \
++__sync_val_compare_and_swap_##N:; \
+ 	mova	1f, r0; \
+ 	EXTS	r5, r5; \
+ 	mov	r15, r1; \
+@@ -69,12 +69,34 @@
+ 1:	mov	r1, r15; \
+ 	rts; \
+ 	 EXT	r2, r0; \
+-	ENDFUNC(__sync_compare_and_swap_##N)
++	ENDFUNC(__sync_val_compare_and_swap_##N)
+ 
+ ATOMIC_COMPARE_AND_SWAP (1,b,exts.b,extu.b)
+ ATOMIC_COMPARE_AND_SWAP (2,w,exts.w,extu.w)
+ ATOMIC_COMPARE_AND_SWAP (4,l,mov,mov)
+ 
++#define ATOMIC_BOOL_COMPARE_AND_SWAP(N,T,EXTS) \
++	.global	__sync_bool_compare_and_swap_##N; \
++	HIDDEN_FUNC(__sync_bool_compare_and_swap_##N); \
++	.align	2; \
++__sync_bool_compare_and_swap_##N:; \
++	mova	1f, r0; \
++	EXTS	r5, r5; \
++	mov	r15, r1; \
++	mov	#(0f-1f), r15; \
++0:	mov.##T	@r4, r2; \
++	cmp/eq	r2, r5; \
++	bf	1f; \
++	mov.##T	r6, @r4; \
++1:	mov	r1, r15; \
++	rts; \
++	 movt	r0; \
++	ENDFUNC(__sync_bool_compare_and_swap_##N)
++
++ATOMIC_BOOL_COMPARE_AND_SWAP (1,b,exts.b)
++ATOMIC_BOOL_COMPARE_AND_SWAP (2,w,exts.w)
++ATOMIC_BOOL_COMPARE_AND_SWAP (4,l,mov)
++
+ #define ATOMIC_FETCH_AND_OP(OP,N,T,EXT) \
+ 	.global	__sync_fetch_and_##OP##_##N; \
+ 	HIDDEN_FUNC(__sync_fetch_and_##OP##_##N); \
+@@ -135,4 +157,67 @@
+ ATOMIC_FETCH_AND_COMBOP(nand,and,not,2,w,extu.w)
+ ATOMIC_FETCH_AND_COMBOP(nand,and,not,4,l,mov)
+ 
++#define ATOMIC_OP_AND_FETCH(OP,N,T,EXT) \
++	.global	__sync_##OP##_and_fetch_##N; \
++	HIDDEN_FUNC(__sync_##OP##_and_fetch_##N); \
++	.align	2; \
++__sync_##OP##_and_fetch_##N:; \
++	mova	1f, r0; \
++	nop; \
++	mov	r15, r1; \
++	mov	#(0f-1f), r15; \
++0:	mov.##T	@r4, r2; \
++	mov	r5, r3; \
++	OP	r2, r3; \
++	mov.##T	r3, @r4; \
++1:	mov	r1, r15; \
++	rts; \
++	 EXT	r3, r0; \
++	ENDFUNC(__sync_##OP##_and_fetch_##N)
++
++ATOMIC_OP_AND_FETCH(add,1,b,extu.b)
++ATOMIC_OP_AND_FETCH(add,2,w,extu.w)
++ATOMIC_OP_AND_FETCH(add,4,l,mov)
++
++ATOMIC_OP_AND_FETCH(or,1,b,extu.b)
++ATOMIC_OP_AND_FETCH(or,2,w,extu.w)
++ATOMIC_OP_AND_FETCH(or,4,l,mov)
++
++ATOMIC_OP_AND_FETCH(and,1,b,extu.b)
++ATOMIC_OP_AND_FETCH(and,2,w,extu.w)
++ATOMIC_OP_AND_FETCH(and,4,l,mov)
++
++ATOMIC_OP_AND_FETCH(xor,1,b,extu.b)
++ATOMIC_OP_AND_FETCH(xor,2,w,extu.w)
++ATOMIC_OP_AND_FETCH(xor,4,l,mov)
++
++#define ATOMIC_COMBOP_AND_FETCH(OP,OP0,OP1,N,T,EXT) \
++	.global	__sync_##OP##_and_fetch_##N; \
++	HIDDEN_FUNC(__sync_##OP##_and_fetch_##N); \
++	.align	2; \
++__sync_##OP##_and_fetch_##N:; \
++	mova	1f, r0; \
++	mov	r15, r1; \
++	mov	#(0f-1f), r15; \
++0:	mov.##T	@r4, r2; \
++	mov	r5, r3; \
++	OP0	r2, r3; \
++	OP1	r3, r3; \
++	mov.##T	r3, @r4; \
++1:	mov	r1, r15; \
++	rts; \
++	 EXT	r3, r0; \
++	ENDFUNC(__sync_##OP##_and_fetch_##N)
++
++ATOMIC_COMBOP_AND_FETCH(sub,sub,neg,1,b,extu.b)
++ATOMIC_COMBOP_AND_FETCH(sub,sub,neg,2,w,extu.w)
++ATOMIC_COMBOP_AND_FETCH(sub,sub,neg,4,l,mov)
++
++ATOMIC_COMBOP_AND_FETCH(nand,and,not,1,b,extu.b)
++ATOMIC_COMBOP_AND_FETCH(nand,and,not,2,w,extu.w)
++ATOMIC_COMBOP_AND_FETCH(nand,and,not,4,l,mov)
++
++.section .note.GNU-stack,"",%progbits
++.previous
++
+ #endif /* ! __SH5__ */
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libstdc++-arm-wno-abi.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libstdc++-arm-wno-abi.diff
@@ -0,0 +1,18 @@
+# DP: Temporary work around:
+# DP: On arm-linux-gnueabi run the libstdc++v3 testsuite with -Wno-abi
+
+Index: libstdc++-v3/testsuite/lib/libstdc++.exp
+===================================================================
+--- a/src/libstdc++-v3/testsuite/lib/libstdc++.exp	(revision 155960)
++++ b/src/libstdc++-v3/testsuite/lib/libstdc++.exp	(working copy)
+@@ -265,6 +265,10 @@
+     }
+     append cxxflags " "
+     append cxxflags [getenv CXXFLAGS]
++    # ARM C++ emits an ABI warning for varargs.
++    if [istarget "arm*"] {
++        append cxxflags " -Wno-abi"
++    }
+     v3track cxxflags 2
+ 
+     # Always use MO files built by this test harness.
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/alpha-no-ev4-directive.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/alpha-no-ev4-directive.diff
@@ -0,0 +1,30 @@
+# DP: never emit .ev4 directive.
+
+---
+ gcc/config/alpha/alpha.c |    7 +++----
+ 1 files changed, 3 insertions(+), 4 deletions(-)
+
+--- a/src/gcc/config/alpha/alpha.c
++++ b/src/gcc/config/alpha/alpha.c
+@@ -9421,7 +9421,7 @@ alpha_file_start (void)
+     fputs ("\t.set nomacro\n", asm_out_file);
+   if (TARGET_SUPPORT_ARCH | TARGET_BWX | TARGET_MAX | TARGET_FIX | TARGET_CIX)
+     {
+-      const char *arch;
++      const char *arch = NULL;
+ 
+       if (alpha_cpu == PROCESSOR_EV6 || TARGET_FIX || TARGET_CIX)
+ 	arch = "ev6";
+@@ -9431,10 +9431,9 @@ alpha_file_start (void)
+ 	arch = "ev56";
+       else if (alpha_cpu == PROCESSOR_EV5)
+ 	arch = "ev5";
+-      else
+-	arch = "ev4";
+ 
+-      fprintf (asm_out_file, "\t.arch %s\n", arch);
++      if (arch)
++        fprintf (asm_out_file, "\t.arch %s\n", arch);
+     }
+ }
+ #endif
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr41064.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr41064.diff
@@ -0,0 +1,35 @@
+# DP: Work around PR middle-end/41064 by backporting a trunk commit
+# DP: Combine with pr37053.diff to avoid regressions!
+
+gcc/
+
+2009-08-14  Hans-Peter Nilsson  <hp@axis.com>
+
+	PR rtl-optimization/41064
+	* reload1.c (reload_as_needed): Don't call extract_insn
+	for known invalid replacements after calling
+	validate_replace_rtx_group and verify_changes.
+
+Index: gcc/reload1.c
+===================================================================
+--- a/src/gcc/reload1.c	(revision 150750)
++++ b/src/gcc/reload1.c	(revision 150751)
+@@ -4312,10 +4312,15 @@
+ 			      n = verify_changes (0);
+ 
+ 			      /* We must also verify that the constraints
+-				 are met after the replacement.  */
+-			      extract_insn (p);
++				 are met after the replacement.  Make sure
++				 extract_insn is only called for an insn
++				 where the replacements were found to be
++				 valid so far. */
+ 			      if (n)
+-				n = constrain_operands (1);
++				{
++				  extract_insn (p);
++				  n = constrain_operands (1);
++				}
+ 
+ 			      /* If the constraints were not met, then
+ 				 undo the replacement, else confirm it.  */
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr38333.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr38333.diff
@@ -0,0 +1,65 @@
+# DP: Backported patch for PR ada/38333
+
+B.1(22) says that an Import pragma must be the completion of a
+declaration, and 6.1(20) says that a completion is not allowed for an
+abstract subprogram declaration.
+
+With the following patch, the attached example gives
+
+  5.    pragma Import (Ada, p1);
+                            |
+     >>> cannot import abstract subprogram "p1" declared at line 4
+
+whereas without it the no error is reported and the compilation is
+succesful.
+
+Bootstrapped and regtested on x86_64-linux. Ok for trunk?
+
+    gcc/ada/
+	PR ada/38333
+	* sem_prag.adb (Process_Import_Or_Interface): Forbid an abstract
+	subprogram to be completed with a "pragma Import".
+
+    gcc/testsuite/
+	PR ada/38333
+	* gnat.dg/specs/import_abstract.ads: New.
+---
+ gcc/ada/sem_prag.adb                            |    9 +++++++++
+ gcc/testsuite/gnat.dg/specs/import_abstract.ads |    6 ++++++
+ 2 files changed, 15 insertions(+), 0 deletions(-)
+ create mode 100644 gcc/testsuite/gnat.dg/specs/import_abstract.ads
+
+diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
+index 065cb97..4e43b66 100644
+--- a/src/gcc/ada/sem_prag.adb
++++ b/src/gcc/ada/sem_prag.adb
+@@ -3455,6 +3455,15 @@ package body Sem_Prag is
+                else
+                   Set_Imported (Def_Id);
+ 
++                  if Is_Subprogram (Def_Id)
++                    and then Is_Abstract_Subprogram (Def_Id)
++                  then
++                     Error_Msg_Sloc := Sloc (Def_Id);
++                     Error_Msg_NE
++                       ("cannot import abstract subprogram& declared#",
++                        Arg2, Def_Id);
++                  end if;
++
+                   --  Special processing for Convention_Intrinsic
+ 
+                   if C = Convention_Intrinsic then
+diff --git a/gcc/testsuite/gnat.dg/specs/import_abstract.ads b/gcc/testsuite/gnat.dg/specs/import_abstract.ads
+new file mode 100644
+index 0000000..9d05f0c
+--- /dev/null
++++ b/src/gcc/testsuite/gnat.dg/specs/import_abstract.ads
+@@ -0,0 +1,6 @@
++-- { dg-do compile }
++package Import_Abstract is
++   type T1 is abstract tagged null record;
++   procedure p1(X : T1) is abstract;
++   pragma Import (Ada, p1);    -- { dg-error "cannot import abstract subprogram" }
++end Import_Abstract;
+-- 
+1.6.0.4.880.g80093
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-powerpc-nof.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-powerpc-nof.diff
@@ -0,0 +1,20 @@
+# DP: Don't build nof multlib on powerpc.
+
+--- a/src/gcc/config/rs6000/t-linux64~	2010-04-05 21:47:52.681086416 +0000
++++ b/src/gcc/config/rs6000/t-linux64	2010-04-05 21:51:34.531670412 +0000
+@@ -31,12 +31,10 @@
+ # it doesn't tell anything about the 32bit libraries on those systems.  Set
+ # MULTILIB_OSDIRNAMES according to what is found on the target.
+ 
+-MULTILIB_OPTIONS        = m64/m32 msoft-float
+-MULTILIB_DIRNAMES       = 64 32 nof
++MULTILIB_OPTIONS        = m64/m32
++MULTILIB_DIRNAMES       = 64 32
+ MULTILIB_EXTRA_OPTS     = fPIC mstrict-align
+-MULTILIB_EXCEPTIONS     = m64/msoft-float
+-MULTILIB_EXCLUSIONS     = m64/!m32/msoft-float
+-MULTILIB_OSDIRNAMES	= ../lib64:powerpc64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):powerpc-linux-gnu nof
++MULTILIB_OSDIRNAMES	= ../lib64:powerpc64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):powerpc-linux-gnu
+ MULTILIB_MATCHES        = $(MULTILIB_MATCHES_FLOAT)
+ 
+ softfp_wrap_start := '\#ifndef __powerpc64__'
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-driver-check.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-driver-check.diff
@@ -0,0 +1,26 @@
+# DP: Simplify Ada driver check (we always build using the required
+# DP: Ada version. Needed for warnings on alpha.
+
+--- a/src/config/acx.m4~	2007-09-02 19:24:08.865326043 +0200
++++ b/src/config/acx.m4	2007-09-02 19:28:53.719623005 +0200
+@@ -380,7 +380,7 @@
+ # Other compilers, like HP Tru64 UNIX cc, exit successfully when
+ # given a .adb file, but produce no object file.  So we must check
+ # if an object file was really produced to guard against this.
+-errors=`(${CC} $1[]m4_ifval([$1], [ ])-c conftest.adb) 2>&1 || echo failure`
++errors=`(${CC} $1[]m4_ifval([$1], [ ])-c conftest.adb) 2>/dev/null || echo failure`
+ if test x"$errors" = x && test -f conftest.$ac_objext; then
+   acx_cv_cc_gcc_supports_ada=yes
+ fi
+
+--- a/src/configure~	2007-09-02 16:50:31.206279000 +0200
++++ b/src/configure	2007-09-02 19:28:58.259691491 +0200
+@@ -4448,7 +4448,7 @@
+ # Other compilers, like HP Tru64 UNIX cc, exit successfully when
+ # given a .adb file, but produce no object file.  So we must check
+ # if an object file was really produced to guard against this.
+-errors=`(${CC} -c conftest.adb) 2>&1 || echo failure`
++errors=`(${CC} -c conftest.adb) 2>/dev/null || echo failure`
+ if test x"$errors" = x && test -f conftest.$ac_objext; then
+   acx_cv_cc_gcc_supports_ada=yes
+ fi
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libjava-atomic-builtins-eabi.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libjava-atomic-builtins-eabi.diff
@@ -0,0 +1,139 @@
+# DP: libjava: Use atomic builtins For Linux ARM/EABI.
+
+libjava/
+
+2009-08-12  Andrew Haley  <aph@redhat.com>
+
+	* sysdep/arm/locks.h: Use atomic builtins For Linux EABI.
+	* configure.ac: Add ATOMICSPEC.
+	* libgcj.spec.in: Likewise.
+	* configure.host (arm*-linux*): Add -Wno-abi to cxxflags.
+	(testsuite/libjava.jvmti/jvmti-interp.exp): Likewise.
+	(testsuite/libjava.jvmti/jvmti.exp): Likewise.
+	(testsuite/libjava.jni/jni.exp): Likewise.
+	Set ATOMICSPEC.
+
+ 
+Index: libjava/configure.host
+===================================================================
+--- a/src/libjava/configure.host	(revision 150701)
++++ b/src/libjava/configure.host	(revision 150702)
+@@ -69,6 +69,7 @@
+ EXCEPTIONSPEC=-fnon-call-exceptions
+ CHECKREFSPEC=
+ BACKTRACESPEC=
++ATOMICSPEC=
+ 
+ # This case statement supports per-CPU defaults.
+ case "${host}" in
+@@ -87,6 +88,7 @@
+ 	sysdeps_dir=arm
+ 	fallback_backtrace_h=sysdep/arm/backtrace.h
+ 	libgcj_cxxflags=-Wno-abi
++	ATOMICSPEC=-fuse-atomic-builtins
+ 	;;
+   mips-tx39-*|mipstx39-unknown-*)
+ 	libgcj_flags="${libgcj_flags} -G 0"
+Index: libjava/configure.ac
+===================================================================
+--- a/src/libjava/configure.ac	(revision 150701)
++++ b/src/libjava/configure.ac	(revision 150702)
+@@ -1447,6 +1447,7 @@
+ AC_SUBST(EXCEPTIONSPEC)
+ AC_SUBST(BACKTRACESPEC)
+ AC_SUBST(IEEESPEC)
++AC_SUBST(ATOMICSPEC)
+ 
+ AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes)
+ AM_CONDITIONAL(ENABLE_SHARED, test "$enable_shared" = yes)
+Index: libjava/sysdep/arm/locks.h
+===================================================================
+--- a/src/libjava/sysdep/arm/locks.h	(revision 150701)
++++ b/src/libjava/sysdep/arm/locks.h	(revision 150702)
+@@ -13,7 +13,60 @@
+ 
+ typedef size_t obj_addr_t;	/* Integer type big enough for object	*/
+ 				/* address.				*/
++#if (__ARM_EABI__ && __linux)
+ 
++// Atomically replace *addr by new_val if it was initially equal to old.
++// Return true if the comparison succeeded.
++// Assumed to have acquire semantics, i.e. later memory operations
++// cannot execute before the compare_and_swap finishes.
++inline static bool
++compare_and_swap(volatile obj_addr_t *addr,
++                 obj_addr_t old,
++                 obj_addr_t new_val)
++{
++  return __sync_bool_compare_and_swap(addr, old, new_val);
++}
++
++// Set *addr to new_val with release semantics, i.e. making sure
++// that prior loads and stores complete before this
++// assignment.
++inline static void
++release_set(volatile obj_addr_t *addr, obj_addr_t new_val)
++{
++  __sync_synchronize();
++  *(addr) = new_val;
++}
++
++// Compare_and_swap with release semantics instead of acquire semantics.
++// On many architecture, the operation makes both guarantees, so the
++// implementation can be the same.
++inline static bool
++compare_and_swap_release(volatile obj_addr_t *addr,
++			 obj_addr_t old,
++			 obj_addr_t new_val)
++{
++  return __sync_bool_compare_and_swap(addr, old, new_val);
++}
++
++// Ensure that subsequent instructions do not execute on stale
++// data that was loaded from memory before the barrier.
++// On X86, the hardware ensures that reads are properly ordered.
++inline static void
++read_barrier()
++{
++  __sync_synchronize();
++}
++
++// Ensure that prior stores to memory are completed with respect to other
++// processors.
++inline static void
++write_barrier()
++{
++  __sync_synchronize();
++}
++
++#else
++
+ /* Atomic compare and exchange.  These sequences are not actually
+    atomic; there is a race if *ADDR != OLD_VAL and we are preempted
+    between the two swaps.  However, they are very close to atomic, and
+@@ -54,8 +107,8 @@
+ 
+ inline static bool
+ compare_and_swap_release(volatile obj_addr_t *addr,
+-		  				     obj_addr_t old,
+-						     obj_addr_t new_val)
++			 obj_addr_t old,
++			 obj_addr_t new_val)
+ {
+   return compare_and_swap(addr, old, new_val);
+ }
+@@ -77,3 +130,4 @@
+ }
+ 
+ #endif
++#endif
+Index: libjava/libgcj.spec.in
+===================================================================
+--- a/src/libjava/libgcj.spec.in	(revision 150701)
++++ b/src/libjava/libgcj.spec.in	(revision 150702)
+@@ -9,4 +9,4 @@
+ %rename lib liborig
+ *lib: @LD_START_STATIC_SPEC@ @LIBGCJ_SPEC@ @LD_FINISH_STATIC_SPEC@ -lm @LIBICONV@ @GCSPEC@ @THREADSPEC@ @ZLIBSPEC@ @SYSTEMSPEC@ %(libgcc) @LIBSTDCXXSPEC@ %(liborig)
+ 
+-*jc1: @HASH_SYNC_SPEC@ @DIVIDESPEC@ @CHECKREFSPEC@ @JC1GCSPEC@ @EXCEPTIONSPEC@ @BACKTRACESPEC@ @IEEESPEC@ -fkeep-inline-functions
++*jc1: @HASH_SYNC_SPEC@ @DIVIDESPEC@ @CHECKREFSPEC@ @JC1GCSPEC@ @EXCEPTIONSPEC@ @BACKTRACESPEC@ @IEEESPEC@ @ATOMICSPEC@ -fkeep-inline-functions
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr44626.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr44626.diff
@@ -0,0 +1,126 @@
+# DP: Proposed backport to fix PR target/44626
+
+gcc/
+
+2010-06-22  Mikael Pettersson  <mikpe@it.uu.se>
+
+	PR target/44626
+
+	Backport from mainline:
+	2009-06-22  Nathan Sidwell  <nathan@codesourcery.com>
+
+	* config/arm/arm.c (arm_print_operand): Deal with HIGH.
+	* config/arm/constraints.md (j): New constraint for movw operands.
+	(N): Remove thumb2 meaning.
+	* config/arm/arm.md (*arm_movw): Delete.
+	(*arm_movsi_insn): Use j constraint for movw instead of N constraint.
+	* config/arm/vfp.md (*arm_movsi_vfp, *thumb2_movsi_vfp): Likewise.
+	* config/arm/thumb2.md (*thumb2_movsi_insn): Likewise.
+
+--- a/src/gcc/config/arm/arm.c.~1~	2010-02-18 14:13:03.000000000 +0100
++++ b/src/gcc/config/arm/arm.c	2010-06-22 19:56:24.000000000 +0200
+@@ -13863,6 +13863,12 @@ arm_print_operand (FILE *stream, rtx x, 
+ 	default:
+ 	  gcc_assert (GET_CODE (x) != NEG);
+ 	  fputc ('#', stream);
++	  if (GET_CODE (x) == HIGH)
++	    {
++	      fputs (":lower16:", stream);
++	      x = XEXP (x, 0);
++	    }
++	    
+ 	  output_addr_const (stream, x);
+ 	  break;
+ 	}
+--- a/src/gcc/config/arm/arm.md.~1~	2010-02-18 14:13:03.000000000 +0100
++++ b/src/gcc/config/arm/arm.md	2010-06-22 19:56:24.000000000 +0200
+@@ -4984,18 +4984,9 @@
+    (set_attr "length" "4")]
+ )
+ 
+-(define_insn "*arm_movw"
+-  [(set (match_operand:SI 0 "nonimmediate_operand" "=r")
+-	(high:SI (match_operand:SI 1 "general_operand"      "i")))]
+-  "TARGET_32BIT"
+-  "movw%?\t%0, #:lower16:%c1"
+-  [(set_attr "predicable" "yes")
+-   (set_attr "length" "4")]
+-)
+-
+ (define_insn "*arm_movsi_insn"
+   [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m")
+-	(match_operand:SI 1 "general_operand"      "rk, I,K,N,mi,rk"))]
++	(match_operand:SI 1 "general_operand"      "rk, I,K,j,mi,rk"))]
+   "TARGET_ARM && ! TARGET_IWMMXT
+    && !(TARGET_HARD_FLOAT && TARGET_VFP)
+    && (   register_operand (operands[0], SImode)
+--- a/src/gcc/config/arm/constraints.md.~1~	2010-02-17 17:16:16.000000000 +0100
++++ b/src/gcc/config/arm/constraints.md	2010-06-22 19:56:24.000000000 +0200
+@@ -25,7 +25,7 @@
+ ;; In ARM state, 'l' is an alias for 'r'
+ 
+ ;; The following normal constraints have been used:
+-;; in ARM/Thumb-2 state: G, H, I, J, K, L, M
++;; in ARM/Thumb-2 state: G, H, I, j, J, K, L, M
+ ;; in Thumb-1 state: I, J, K, L, M, N, O
+ 
+ ;; The following multi-letter normal constraints have been used:
+@@ -66,6 +66,13 @@
+ (define_register_constraint "h" "TARGET_THUMB ? HI_REGS : NO_REGS"
+  "In Thumb state the core registers @code{r8}-@code{r15}.")
+ 
++(define_constraint "j"
++ "A constant suitable for a MOVW instruction. (ARM/Thumb-2)"
++ (and (match_test "TARGET_32BIT && arm_arch_thumb2")
++      (ior (match_code "high")
++	   (and (match_code "const_int")
++                (match_test "(ival & 0xffff0000) == 0")))))
++
+ (define_register_constraint "k" "STACK_REG"
+  "@internal The stack register.")
+ 
+@@ -117,11 +124,9 @@
+ 		   : ((ival >= 0 && ival <= 1020) && ((ival & 3) == 0))")))
+ 
+ (define_constraint "N"
+- "In ARM/Thumb-2 state a constant suitable for a MOVW instruction.
+-  In Thumb-1 state a constant in the range 0-31."
++ "Thumb-1 state a constant in the range 0-31."
+  (and (match_code "const_int")
+-      (match_test "TARGET_32BIT ? arm_arch_thumb2 && ((ival & 0xffff0000) == 0)
+-				: (ival >= 0 && ival <= 31)")))
++      (match_test "!TARGET_32BIT && (ival >= 0 && ival <= 31)")))
+ 
+ (define_constraint "O"
+  "In Thumb-1 state a constant that is a multiple of 4 in the range
+--- a/src/gcc/config/arm/thumb2.md.~1~	2010-02-24 15:50:43.000000000 +0100
++++ b/src/gcc/config/arm/thumb2.md	2010-06-22 19:56:24.000000000 +0200
+@@ -225,7 +225,7 @@
+ 
+ (define_insn "*thumb2_movsi_insn"
+   [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m")
+-	(match_operand:SI 1 "general_operand"	   "rk ,I,K,N,mi,rk"))]
++	(match_operand:SI 1 "general_operand"	   "rk ,I,K,j,mi,rk"))]
+   "TARGET_THUMB2 && ! TARGET_IWMMXT
+    && !(TARGET_HARD_FLOAT && TARGET_VFP)
+    && (   register_operand (operands[0], SImode)
+--- a/src/gcc/config/arm/vfp.md.~1~	2008-09-01 15:40:49.000000000 +0200
++++ b/src/gcc/config/arm/vfp.md	2010-06-22 19:56:24.000000000 +0200
+@@ -51,7 +51,7 @@
+ ;; problems because small constants get converted into adds.
+ (define_insn "*arm_movsi_vfp"
+   [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m ,*t,r,*t,*t, *Uv")
+-      (match_operand:SI 1 "general_operand"	   "rk, I,K,N,mi,rk,r,*t,*t,*Uvi,*t"))]
++      (match_operand:SI 1 "general_operand"	   "rk, I,K,j,mi,rk,r,*t,*t,*Uvi,*t"))]
+   "TARGET_ARM && TARGET_VFP && TARGET_HARD_FLOAT
+    && (   s_register_operand (operands[0], SImode)
+        || s_register_operand (operands[1], SImode))"
+@@ -88,7 +88,7 @@
+ 
+ (define_insn "*thumb2_movsi_vfp"
+   [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m,*t,r, *t,*t, *Uv")
+-      (match_operand:SI 1 "general_operand"	   "rk, I,K,N,mi,rk,r,*t,*t,*Uvi,*t"))]
++      (match_operand:SI 1 "general_operand"	   "rk, I,K,j,mi,rk,r,*t,*t,*Uvi,*t"))]
+   "TARGET_THUMB2 && TARGET_VFP && TARGET_HARD_FLOAT
+    && (   s_register_operand (operands[0], SImode)
+        || s_register_operand (operands[1], SImode))"
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr39531.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr39531.diff
@@ -0,0 +1,58 @@
+# DP: Fix for PR39531, added by request of Finn Thain
+
+From: schwab <schwab@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Mon, 18 May 2009 15:36:18 +0000 (+0000)
+Subject: PR target/39531
+X-Git-Url: http://gcc.gnu.org/git/?p=gcc.git;a=commitdiff_plain;h=f422081b5615ce3dc436377be3ce7da04b8fbc52
+
+PR target/39531
+* config/m68k/m68k.c (output_andsi3): Mask off sign bit copies
+before calling exact_log2.
+(output_iorsi3): Likewise.
+(output_xorsi3): Likewise.
+
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147664 138bc75d-0d04-0410-961f-82ee72b054a4
+---
+
+gcc/
+
+2009-05-18  Andreas Schwab  <schwab@linux-m68k.org>
+
+	PR target/39531
+	* config/m68k/m68k.c (output_andsi3): Mask off sign bit copies
+	before calling exact_log2.
+	(output_iorsi3): Likewise.
+	(output_xorsi3): Likewise.
+
+diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c
+index de20fdb..ec371e5 100644
+--- a/src/gcc/config/m68k/m68k.c
++++ b/src/gcc/config/m68k/m68k.c
+@@ -4829,7 +4829,7 @@ output_andsi3 (rtx *operands)
+       return "and%.w %2,%0";
+     }
+   if (GET_CODE (operands[2]) == CONST_INT
+-      && (logval = exact_log2 (~ INTVAL (operands[2]))) >= 0
++      && (logval = exact_log2 (~ INTVAL (operands[2]) & 0xffffffff)) >= 0
+       && (DATA_REG_P (operands[0])
+           || offsettable_memref_p (operands[0])))
+     {
+@@ -4866,7 +4866,7 @@ output_iorsi3 (rtx *operands)
+       return "or%.w %2,%0";
+     }
+   if (GET_CODE (operands[2]) == CONST_INT
+-      && (logval = exact_log2 (INTVAL (operands[2]))) >= 0
++      && (logval = exact_log2 (INTVAL (operands[2]) & 0xffffffff)) >= 0
+       && (DATA_REG_P (operands[0])
+ 	  || offsettable_memref_p (operands[0])))
+     {
+@@ -4901,7 +4901,7 @@ output_xorsi3 (rtx *operands)
+       return "eor%.w %2,%0";
+     }
+   if (GET_CODE (operands[2]) == CONST_INT
+-      && (logval = exact_log2 (INTVAL (operands[2]))) >= 0
++      && (logval = exact_log2 (INTVAL (operands[2]) & 0xffffffff)) >= 0
+       && (DATA_REG_P (operands[0])
+ 	  || offsettable_memref_p (operands[0])))
+     {
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-multilib64dir.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-multilib64dir.diff
@@ -0,0 +1,47 @@
+# DP: Use lib instead of lib64 as multilibdir on amd64, sparc64, ppc64 and s390x.
+
+---
+ gcc/config/i386/t-linux64   |    2 +-
+ gcc/config/rs6000/t-linux64 |   12 ++++++------
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+--- a/src/gcc/config/i386/t-linux64
++++ b/src/gcc/config/i386/t-linux64
+@@ -7,7 +7,7 @@
+ 
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32 
+-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
++MULTILIB_OSDIRNAMES = ../lib $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
+ 
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+--- a/src/gcc/config/rs6000/t-linux64
++++ b/src/gcc/config/rs6000/t-linux64
+@@ -19,7 +19,7 @@
+ MULTILIB_EXTRA_OPTS     = fPIC mstrict-align
+ MULTILIB_EXCEPTIONS     =
+ MULTILIB_EXCLUSIONS     =
+-MULTILIB_OSDIRNAMES	= ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
++MULTILIB_OSDIRNAMES	= ../lib $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
+ MULTILIB_MATCHES        =
+ 
+ softfp_wrap_start := '\#ifndef __powerpc64__'
+--- a/src/gcc/config/sparc/t-linux64
++++ b/src/gcc/config/sparc/t-linux64
+@@ -1,6 +1,6 @@
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64 ../lib
++MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
+ 
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+--- a/src/gcc/config/s390/t-linux64
++++ b/src/gcc/config/s390/t-linux64
+@@ -7,4 +7,4 @@
+
+ MULTILIB_OPTIONS = m64/m31
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
++MULTILIB_OSDIRNAMES = ../lib $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr43323.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr43323.diff
@@ -0,0 +1,285 @@
+# DP: Fix PR middle-end/43323 wrong-code for bitfields
+
+This patch fixes PR middle-end/43323, wrong-code for bitfields
+and type casts.  This is a 4.4 regression, 4.3 and 4.5 work.
+
+For 4.5 the bug was fixed by r148631, Adam Nemet's STRIP_NOPS
+conversion patch.  This patch backports that patch to 4.4, and
+adds the new PR43323 test case.
+
+Bootstrapped and regression tested with all default languages
+on {i686,x86_64,sparc64,powerpc64}-unknown-linux and
+armv5tel-unknown-linux-gnueabi.  Both Adam's original test case
+and the new PR43323 one pass with this patch but fail without it.
+
+Ok for 4.4? (I don't have svn write access.)
+
+gcc/
+
+2010-03-13  Mikael Pettersson  <mikpe@it.uu.se>
+
+	PR middle-end/43323
+
+	Backport from mainline:
+	2009-06-17  Adam Nemet  <anemet@caviumnetworks.com>
+
+	* tree.h (STRIP_NOPS, STRIP_SIGN_NOPS,
+	STRIP_USELESS_TYPE_CONVERSION): Use tree_strip_nop_conversions,
+	tree_strip_sign_nop_conversions and
+	tree_ssa_strip_useless_type_conversions rather than stripping
+	the operations here.
+	(tree_strip_nop_conversions, tree_strip_sign_nop_conversions):
+	Declare them.
+	* gimple.h (tree_ssa_strip_useless_type_conversions): Declare it.
+	* tree-ssa.c (tree_ssa_strip_useless_type_conversions): New function.
+	* tree.c (tree_nop_conversion, tree_sign_nop_conversion,
+	tree_strip_nop_conversions, tree_strip_sign_nop_conversions): New
+	functions.
+
+gcc/testsuite/
+
+2010-03-13  Mikael Pettersson  <mikpe@it.uu.se>
+
+	PR middle-end/43323
+
+	* gcc.c-torture/execute/pr43323.c: New test.
+
+	Backport from mainline:
+	2009-06-17  Adam Nemet  <anemet@caviumnetworks.com>
+
+	* gcc.c-torture/execute/bitfld-5.c: New test.
+
+diff -rupN a/src/gcc/gimple.h b/src/gcc/gimple.h
+--- a/src/gcc/gimple.h	2009-05-18 12:13:43.000000000 +0200
++++ b/src/gcc/gimple.h	2010-03-13 10:59:57.000000000 +0100
+@@ -1020,6 +1020,7 @@ extern void gimple_add_to_addresses_take
+ 
+ /* In tree-ssa.c  */
+ extern bool tree_ssa_useless_type_conversion (tree);
++extern tree tree_ssa_strip_useless_type_conversions (tree);
+ extern bool useless_type_conversion_p (tree, tree);
+ extern bool types_compatible_p (tree, tree);
+ 
+diff -rupN a/src/gcc/testsuite/gcc.c-torture/execute/bitfld-5.c b/src/gcc/testsuite/gcc.c-torture/execute/bitfld-5.c
+--- a/src/gcc/testsuite/gcc.c-torture/execute/bitfld-5.c	1970-01-01 01:00:00.000000000 +0100
++++ b/src/gcc/testsuite/gcc.c-torture/execute/bitfld-5.c	2010-03-13 10:59:57.000000000 +0100
+@@ -0,0 +1,35 @@
++/* See http://gcc.gnu.org/ml/gcc/2009-06/msg00072.html.  */
++
++extern void abort (void);
++
++struct s
++{
++  unsigned long long a:2;
++  unsigned long long b:40;
++  unsigned long long c:22;
++};
++
++__attribute__ ((noinline)) void
++g (unsigned long long a, unsigned long long b)
++{
++  asm ("");
++  if (a != b)
++    abort ();
++}
++
++__attribute__ ((noinline)) void
++f (struct s s, unsigned long long b)
++{
++  asm ("");
++  g (((unsigned long long) (s.b-8)) + 8, b);
++}
++
++int
++main ()
++{
++  struct s s = {1, 10, 3};
++  struct s t = {1, 2, 3};
++  f (s, 10);
++  f (t, 0x10000000002);
++  return 0;
++}
+diff -rupN a/src/gcc/testsuite/gcc.c-torture/execute/pr43323.c b/src/gcc/testsuite/gcc.c-torture/execute/pr43323.c
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr43323.c	1970-01-01 01:00:00.000000000 +0100
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr43323.c	2010-03-13 10:59:57.000000000 +0100
+@@ -0,0 +1,14 @@
++/* PR middle-end/43323 */
++
++extern void abort (void);
++
++int main()
++{
++  struct { unsigned bar:1; } foo;
++  foo.bar = 0x1;
++  if ((unsigned char)(foo.bar * 0xfe) != 0xfeu)
++    abort ();
++  if ((unsigned char)(foo.bar * 0xff) != 0xffu)
++    abort ();
++  return 0;
++}
+diff -rupN a/src/gcc/tree-ssa.c b/src/gcc/tree-ssa.c
+--- a/src/gcc/tree-ssa.c	2009-08-03 21:27:32.000000000 +0200
++++ b/src/gcc/tree-ssa.c	2010-03-13 10:59:57.000000000 +0100
+@@ -1271,6 +1271,18 @@ tree_ssa_useless_type_conversion (tree e
+   return false;
+ }
+ 
++/* Strip conversions from EXP according to
++   tree_ssa_useless_type_conversion and return the resulting
++   expression.  */
++
++tree
++tree_ssa_strip_useless_type_conversions (tree exp)
++{
++  while (tree_ssa_useless_type_conversion (exp))
++    exp = TREE_OPERAND (exp, 0);
++  return exp;
++}
++
+ 
+ /* Internal helper for walk_use_def_chains.  VAR, FN and DATA are as
+    described in walk_use_def_chains.
+diff -rupN a/src/gcc/tree.c b/src/gcc/tree.c
+--- a/src/gcc/tree.c	2009-07-20 16:39:32.000000000 +0200
++++ b/src/gcc/tree.c	2010-03-13 10:59:57.000000000 +0100
+@@ -9094,6 +9094,79 @@ tree_nonartificial_location (tree exp)
+     return EXPR_LOCATION (exp);
+ }
+ 
++/* Return true iff conversion in EXP generates no instruction.  Mark
++   it inline so that we fully inline into the stripping functions even
++   though we have two uses of this function.  */
++
++static inline bool
++tree_nop_conversion (const_tree exp)
++{
++  tree outer_type, inner_type;
++
++  if (!CONVERT_EXPR_P (exp)
++      && TREE_CODE (exp) != NON_LVALUE_EXPR)
++    return false;
++  if (TREE_OPERAND (exp, 0) == error_mark_node)
++    return false;
++
++  outer_type = TREE_TYPE (exp);
++  inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
++
++  /* Use precision rather then machine mode when we can, which gives
++     the correct answer even for submode (bit-field) types.  */
++  if ((INTEGRAL_TYPE_P (outer_type)
++       || POINTER_TYPE_P (outer_type)
++       || TREE_CODE (outer_type) == OFFSET_TYPE)
++      && (INTEGRAL_TYPE_P (inner_type)
++	  || POINTER_TYPE_P (inner_type)
++	  || TREE_CODE (inner_type) == OFFSET_TYPE))
++    return TYPE_PRECISION (outer_type) == TYPE_PRECISION (inner_type);
++
++  /* Otherwise fall back on comparing machine modes (e.g. for
++     aggregate types, floats).  */
++  return TYPE_MODE (outer_type) == TYPE_MODE (inner_type);
++}
++
++/* Return true iff conversion in EXP generates no instruction.  Don't
++   consider conversions changing the signedness.  */
++
++static bool
++tree_sign_nop_conversion (const_tree exp)
++{
++  tree outer_type, inner_type;
++
++  if (!tree_nop_conversion (exp))
++    return false;
++
++  outer_type = TREE_TYPE (exp);
++  inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
++
++  return (TYPE_UNSIGNED (outer_type) == TYPE_UNSIGNED (inner_type)
++	  && POINTER_TYPE_P (outer_type) == POINTER_TYPE_P (inner_type));
++}
++
++/* Strip conversions from EXP according to tree_nop_conversion and
++   return the resulting expression.  */
++
++tree
++tree_strip_nop_conversions (tree exp)
++{
++  while (tree_nop_conversion (exp))
++    exp = TREE_OPERAND (exp, 0);
++  return exp;
++}
++
++/* Strip conversions from EXP according to tree_sign_nop_conversion
++   and return the resulting expression.  */
++
++tree
++tree_strip_sign_nop_conversions (tree exp)
++{
++  while (tree_sign_nop_conversion (exp))
++    exp = TREE_OPERAND (exp, 0);
++  return exp;
++}
++
+ 
+ /* These are the hash table functions for the hash table of OPTIMIZATION_NODEq
+    nodes.  */
+diff -rupN a/src/gcc/tree.h b/src/gcc/tree.h
+--- a/src/gcc/tree.h	2009-06-02 09:18:16.000000000 +0200
++++ b/src/gcc/tree.h	2010-03-13 10:59:57.000000000 +0100
+@@ -974,30 +974,17 @@ extern void omp_clause_range_check_faile
+   case NOP_EXPR:						\
+   case CONVERT_EXPR
+ 
+-/* Given an expression as a tree, strip any NON_LVALUE_EXPRs and NOP_EXPRs
+-   that don't change the machine mode.  */
++/* Given an expression as a tree, strip any conversion that generates
++   no instruction.  Accepts both tree and const_tree arguments since
++   we are not modifying the tree itself.  */
+ 
+-#define STRIP_NOPS(EXP)						\
+-  while ((CONVERT_EXPR_P (EXP)					\
+-	  || TREE_CODE (EXP) == NON_LVALUE_EXPR)		\
+-	 && TREE_OPERAND (EXP, 0) != error_mark_node		\
+-	 && (TYPE_MODE (TREE_TYPE (EXP))			\
+-	     == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
+-    (EXP) = TREE_OPERAND (EXP, 0)
++#define STRIP_NOPS(EXP) \
++  (EXP) = tree_strip_nop_conversions (CONST_CAST_TREE (EXP))
+ 
+ /* Like STRIP_NOPS, but don't let the signedness change either.  */
+ 
+ #define STRIP_SIGN_NOPS(EXP) \
+-  while ((CONVERT_EXPR_P (EXP)					\
+-	  || TREE_CODE (EXP) == NON_LVALUE_EXPR)		\
+-	 && TREE_OPERAND (EXP, 0) != error_mark_node		\
+-	 && (TYPE_MODE (TREE_TYPE (EXP))			\
+-	     == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))	\
+-	 && (TYPE_UNSIGNED (TREE_TYPE (EXP))			\
+-	     == TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (EXP, 0)))) \
+-	 && (POINTER_TYPE_P (TREE_TYPE (EXP))			\
+-	     == POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
+-    (EXP) = TREE_OPERAND (EXP, 0)
++  (EXP) = tree_strip_sign_nop_conversions (CONST_CAST_TREE (EXP))
+ 
+ /* Like STRIP_NOPS, but don't alter the TREE_TYPE either.  */
+ 
+@@ -1012,9 +999,8 @@ extern void omp_clause_range_check_faile
+ /* Remove unnecessary type conversions according to
+    tree_ssa_useless_type_conversion.  */
+ 
+-#define STRIP_USELESS_TYPE_CONVERSION(EXP)				\
+-      while (tree_ssa_useless_type_conversion (EXP))			\
+-	EXP = TREE_OPERAND (EXP, 0)
++#define STRIP_USELESS_TYPE_CONVERSION(EXP) \
++  (EXP) = tree_ssa_strip_useless_type_conversions (EXP)
+ 
+ /* Nonzero if TYPE represents an integral type.  Note that we do not
+    include COMPLEX types here.  Keep these checks in ascending code
+@@ -4702,6 +4688,8 @@ extern bool stdarg_p (tree);
+ extern bool prototype_p (tree);
+ extern int function_args_count (tree);
+ extern bool auto_var_in_fn_p (const_tree, const_tree);
++extern tree tree_strip_nop_conversions (tree);
++extern tree tree_strip_sign_nop_conversions (tree);
+ 
+ /* In gimplify.c */
+ extern tree unshare_expr (tree);
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-driver-zlib.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-driver-zlib.diff
@@ -0,0 +1,58 @@
+# DP: Update the gdc driver to use the up-to-date system zlib.
+
+--- a/src/gcc/d/d-spec.c	2010-08-19 12:30:20.000000000 +0100
++++ b/src/gcc/d/d-spec.c	2010-08-23 10:54:52.673819751 +0100
+@@ -93,7 +93,7 @@
+     /* The number of arguments being added to what's in argv, other than
+        libraries.  We use this to track the number of times we've inserted
+        -xc++/-xnone.  */
+-    int added = 0;
++    int added = 1; /* -lz */
+ 
+     /* Used to track options that take arguments, so we don't go wrapping
+        those with -xc++/-xnone.  */
+@@ -414,6 +414,9 @@
+ 	    arglist[j++] = saw_profile_flag ? LIBPHOBOS_PROFILE : LIBPHOBOS;
+ 	    added_libraries++;
+ 	    need_pthreads = 1;
++	    /* Use the up-to-date system zlib with libphobos */
++	    arglist[j++] = "-lz";
++	    added_libraries++;
+ 	}
+     else if (saw_debug_flag && debuglib)
+ 	{
+--- a/src/gcc/d/phobos/etc/c/zlib.d	2010-08-19 13:59:09.000000000 +0100
++++ b/src/gcc/d/phobos/etc/c/zlib.d	2010-08-23 10:55:23.717806839 +0100
+@@ -42,8 +42,8 @@
+ 
+ extern (C):
+ 
+-char[] ZLIB_VERSION = "1.2.3";
+-const ZLIB_VERNUM = 0x1230;
++char[] ZLIB_VERSION = "1.2.3.4";
++const ZLIB_VERNUM = 0x1234;
+ 
+ /*
+      The 'zlib' compression library provides in-memory compression and
+--- a/src/gcc/d/phobos/Makefile.am	2010-08-01 14:45:55.000000000 +0100
++++ b/src/gcc/d/phobos/Makefile.am	2010-08-23 10:56:04.798797585 +0100
+@@ -179,7 +179,7 @@
+ std/stream.t.o: std/stream.d $(D_PREREQ_SRCS)
+ 	$(GDC) -o $@ $(ALL_DFLAGS) -fdeprecated -I $(srcdir) -I $(srcdir)/internal/gc -I ./$(host_alias) -c $<
+ 
+-ALL_PHOBOS_OBJS = $(D_EXTRA_OBJS) $(GCC_OBJS) $(MAIN_OBJS) $(ZLIB_OBJS) $(GC_OBJS) $(WEAK_OBJS)
++ALL_PHOBOS_OBJS = $(D_EXTRA_OBJS) $(GCC_OBJS) $(MAIN_OBJS) $(GC_OBJS) $(WEAK_OBJS)
+ 
+ libgphobos.a : $(ALL_PHOBOS_OBJS) $(CMAIN_OBJS)
+ 	$(AR) -r $@ $(ALL_PHOBOS_OBJS) $(CMAIN_OBJS)
+--- a/src/gcc/d/phobos/Makefile.in	2010-08-01 14:45:55.000000000 +0100
++++ b/src/gcc/d/phobos/Makefile.in	2010-08-23 10:56:11.565788770 +0100
+@@ -281,7 +281,7 @@
+ 	std/windows/iunknown.o std/windows/registry.o std/windows/syserror.o \
+ 	std/windows/charset.o std/thread_helper.o
+ 
+-ALL_PHOBOS_OBJS = $(D_EXTRA_OBJS) $(GCC_OBJS) $(MAIN_OBJS) $(ZLIB_OBJS) $(GC_OBJS) $(WEAK_OBJS)
++ALL_PHOBOS_OBJS = $(D_EXTRA_OBJS) $(GCC_OBJS) $(MAIN_OBJS) $(GC_OBJS) $(WEAK_OBJS)
+ 
+ # Work around what appears to be a GNU make bug handling MAKEFLAGS
+ # values defined in terms of make variables, as is the case for CC and
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/rev146451.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/rev146451.diff
@@ -0,0 +1,23 @@
+# DP: Fix a typo in the arm back-end.
+
+2009-07-20  Mikael Pettersson  <mikpe@it.uu.se>
+
+gcc/
+	Backport from mainline:
+	2009-04-20  Ian Lance Taylor  <ian@gcc.gnu.org>
+	Fix enum conversions which are invalid in C++.
+
+	* config/arm/arm.c (arm_rtx_costs_1) <case ABS>: Fix
+	typo in call to GET_MODE_CLASS.
+
+--- a/src/gcc/config/arm/arm.c	2009-06-02 09:18:16.000000000 +0200
++++ b/src/gcc/config/arm/arm.c	2009-07-18 21:26:09.000000000 +0200
+@@ -5458,7 +5458,7 @@ arm_rtx_costs_1 (rtx x, enum rtx_code ou
+       return true;
+ 
+     case ABS:
+-      if (GET_MODE_CLASS (mode == MODE_FLOAT))
++      if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+ 	{
+ 	  if (TARGET_HARD_FLOAT && (mode == SFmode || mode == DFmode))
+ 	    {
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr46179.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr46179.diff
@@ -0,0 +1,28 @@
+# DP: Possibly fix PR target/46179 with Attachment #22191 from Finn Thain
+
+--- a/src/gcc/config/m68k/m68k.c	2010-06-15 06:01:39.000000000 +1000
++++ b/src/gcc/config/m68k/m68k.c	2010-10-29 02:04:44.000000000 +1100
+@@ -3478,6 +3478,7 @@ handle_move_double (rtx operands[2],
+ 
+   /* Normal case: do the two words, low-numbered first.  */
+ 
++  m68k_final_prescan_insn (NULL, operands, 2);
+   handle_movsi (operands);
+ 
+   /* Do the middle one of the three words for long double */
+@@ -3488,6 +3489,7 @@ handle_move_double (rtx operands[2],
+       if (addreg1)
+ 	handle_reg_adjust (addreg1, 4);
+ 
++      m68k_final_prescan_insn (NULL, middlehalf, 2);
+       handle_movsi (middlehalf);
+     }
+ 
+@@ -3498,6 +3500,7 @@ handle_move_double (rtx operands[2],
+     handle_reg_adjust (addreg1, 4);
+ 
+   /* Do that word.  */
++  m68k_final_prescan_insn (NULL, latehalf, 2);
+   handle_movsi (latehalf);
+ 
+   /* Undo the adds we just did.  */
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-multiarch.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-multiarch.diff
@@ -0,0 +1,556 @@
+# DP: Add multiarch support to GCC.
+# DP:
+# DP: Convert the multilib option to a target triplet,
+# DP: add multiarch include directories and libraries path:
+# DP:	/usr/local/include/<arch>-linux-gnu
+# DP:	/usr/include/<arch>-linux-gnu
+# DP:	/usr/lib/<arch>-linux-gnu
+# DP: to the system paths.
+
+2011-08-18  Matthias Klose  <doko@ubuntu.com>
+
+	* doc/invoke.texi: Document -print-multiarch.
+	* Makefile.in (s-mlib): Pass MULTIARCH_DIRNAME to genmultilib.
+	* genmultilib: Add new option for the multiarch name.
+	* gcc.c (multiarch_dir): Define.
+	(for_each_path): Search for multiarch suffixes.
+	(driver_handle_option): Handle multiarch option.
+	(do_spec_1): Pass -imultiarch if defined.
+	(main): Print multiarch.
+	(set_multilib_dir): Separate multilib and multiarch names
+	from multilib_select.
+	(print_multilib_info): Ignore multiarch names in multilib_select.
+	* incpath.c (add_standard_paths): Search the multiarch include dirs.
+	* cppdeault.h (default_include): Document multiarch in multilib
+	member.
+	* cppdefault.c: [LOCAL_INCLUDE_DIR, STANDARD_INCLUDE_DIR] Add an
+        include directory for multiarch directories.
+	* common.opt: New options --print-multiarch and -imultilib.
+	* config/s390/t-linux64: Add multiarch names in MULTILIB_OSDIRNAMES.
+	* config/sparc/t-linux64: Likewise.
+	* config/powerpc/t-linux64: Likewise.
+	* config/i386/t-linux64: Likewise.
+	* config/mips/t-linux64: Likewise.
+	* config/alpha/t-linux: Define MULTIARCH_DIRNAME.
+	* config/arm/t-linux: Likewise.
+	* config/i386/t-linux: Likewise.
+	* config/pa/t-linux: Likewise.
+	* config/sparc/t-linux: Likewise.
+	* config/ia64/t-glibc: Define MULTIARCH_DIRNAME for linux target.
+
+
+Index: b/src/gcc/common.opt
+===================================================================
+--- a/src/gcc/common.opt
++++ b/src/gcc/common.opt
+@@ -1405,6 +1405,10 @@
+ Common JoinedOrMissing Negative(gcoff)
+ Generate debug information in extended XCOFF format
+ 
++imultiarch
++Common Joined Separate RejectDriver Var(imultiarch) Init(0)
++-imultiarch <dir>	Set <dir> to be the multiarch include subdirectory
++
+ o
+ Common Joined Separate
+ -o <file>	Place output into <file>
+Index: b/src/gcc/cppdefault.h
+===================================================================
+--- a/src/gcc/cppdefault.h
++++ b/src/gcc/cppdefault.h
+@@ -43,9 +43,11 @@
+ 				   C++.  */
+   const char add_sysroot;	/* FNAME should be prefixed by
+ 				   cpp_SYSROOT.  */
+-  const char multilib;		/* FNAME should have the multilib path
+-				   specified with -imultilib
+-				   appended.  */
++  const char multilib;		/* FNAME should have appended
++				   - the multilib path specified with -imultilib
++				     when 1 is passed,
++				   - the multiarch path specified with
++				     -imultiarch, when 2 is passed.  */
+ };
+ 
+ extern const struct default_include cpp_include_defaults[];
+Index: b/src/gcc/gcc.c
+===================================================================
+--- a/src/gcc/gcc.c
++++ b/src/gcc/gcc.c
+@@ -159,6 +159,11 @@
+ 
+ static int print_multi_os_directory;
+ 
++/* Flag saying to print the relative path we'd use to
++   find multiarch libraries given the current compiler flags.  */
++
++static int print_multiarch;
++
+ /* Flag saying to print the list of subdirectories and
+    compiler flags used to select them in a standard form.  */
+ 
+@@ -1174,6 +1179,7 @@
+    {"--print-multi-lib", "-print-multi-lib", 0},
+    {"--print-multi-directory", "-print-multi-directory", 0},
+    {"--print-multi-os-directory", "-print-multi-os-directory", 0},
++   {"--print-multiarch", "-print-multiarch", 0},
+    {"--print-prog-name", "-print-prog-name=", "aj"},
+    {"--print-sysroot", "-print-sysroot", 0},
+    {"--print-sysroot-headers-suffix", "-print-sysroot-headers-suffix", 0},
+@@ -1564,6 +1570,11 @@
+    set_multilib_dir based on the compilation options.  */
+ 
+ static const char *multilib_os_dir;
++
++/* Subdirectory to use for locating libraries in multiarch conventions.  Set by
++   set_multilib_dir based on the compilation options.  */
++
++static const char *multiarch_dir;
+ 
+ /* Structure to keep track of the specs that have been defined so far.
+    These are accessed using %(specname) or %[specname] in a compiler
+@@ -2465,6 +2476,7 @@
+   struct prefix_list *pl;
+   const char *multi_dir = NULL;
+   const char *multi_os_dir = NULL;
++  const char *multiarch_suffix = NULL;
+   const char *multi_suffix;
+   const char *just_multi_suffix;
+   char *path = NULL;
+@@ -2482,11 +2494,14 @@
+     }
+   if (do_multi && multilib_os_dir && strcmp (multilib_os_dir, ".") != 0)
+     multi_os_dir = concat (multilib_os_dir, dir_separator_str, NULL);
++  if (multiarch_dir)
++    multiarch_suffix = concat (multiarch_dir, dir_separator_str, NULL);
+ 
+   while (1)
+     {
+       size_t multi_dir_len = 0;
+       size_t multi_os_dir_len = 0;
++      size_t multiarch_len = 0;
+       size_t suffix_len;
+       size_t just_suffix_len;
+       size_t len;
+@@ -2495,16 +2510,15 @@
+ 	multi_dir_len = strlen (multi_dir);
+       if (multi_os_dir)
+ 	multi_os_dir_len = strlen (multi_os_dir);
++      if (multiarch_suffix)
++	multiarch_len = strlen (multiarch_suffix);
+       suffix_len = strlen (multi_suffix);
+       just_suffix_len = strlen (just_multi_suffix);
+ 
+       if (path == NULL)
+ 	{
+ 	  len = paths->max_len + extra_space + 1;
+-	  if (suffix_len > multi_os_dir_len)
+-	    len += suffix_len;
+-	  else
+-	    len += multi_os_dir_len;
++	  len += MAX (MAX (suffix_len, multi_os_dir_len), multiarch_len);
+ 	  path = XNEWVEC (char, len);
+ 	}
+ 
+@@ -2533,6 +2547,16 @@
+ 		break;
+ 	    }
+ 
++	  /* Now try the multiarch path.  */
++	  if (!skip_multi_dir
++	      && !pl->require_machine_suffix && multiarch_dir)
++	    {
++	      memcpy (path + len, multiarch_suffix, multiarch_len + 1);
++	      ret = callback (path, callback_info);
++	      if (ret)
++		break;
++	    }
++
+ 	  /* Now try the base path.  */
+ 	  if (!pl->require_machine_suffix
+ 	      && !(pl->os_multilib ? skip_multi_os_dir : skip_multi_dir))
+@@ -3743,6 +3767,8 @@
+ 	print_sysroot = 1;
+       else if (! strcmp (argv[i], "-print-multi-os-directory"))
+ 	print_multi_os_directory = 1;
++      else if (! strcmp (argv[i], "-print-multiarch"))
++	print_multiarch = 1;
+       else if (! strcmp (argv[i], "-print-sysroot-headers-suffix"))
+ 	print_sysroot_headers_suffix = 1;
+       else if (! strncmp (argv[i], "-Wa,", 4))
+@@ -4185,6 +4211,8 @@
+ 	;
+       else if (! strcmp (argv[i], "-print-multi-os-directory"))
+ 	;
++      else if (! strcmp (argv[i], "-print-multiarch"))
++	;
+       else if (! strcmp (argv[i], "-print-sysroot-headers-suffix"))
+ 	;
+       else if (! strncmp (argv[i], "--sysroot=", strlen ("--sysroot=")))
+@@ -5094,6 +5122,15 @@
+ 		  do_spec_1 (" ", 0, NULL);
+ 		}
+ 
++	      if (multiarch_dir)
++		{
++		  do_spec_1 ("-imultiarch", 1, NULL);
++		  /* Make this a separate argument.  */
++		  do_spec_1 (" ", 0, NULL);
++		  do_spec_1 (multiarch_dir, 1, NULL);
++		  do_spec_1 (" ", 0, NULL);
++		}
++
+ 	      if (gcc_exec_prefix)
+ 		{
+ 		  do_spec_1 ("-iprefix", 1, NULL);
+@@ -6877,6 +6914,15 @@
+       return (0);
+     }
+ 
++  if (print_multiarch)
++    {
++      if (multiarch_dir == NULL)
++	printf ("\n");
++      else
++	printf ("%s\n", multiarch_dir);
++      return (0);
++    }
++
+   if (print_sysroot)
+     {
+       if (target_system_root)
+@@ -7880,10 +7926,26 @@
+ 	    q++;
+ 	  if (q < end)
+ 	    {
+-	      char *new_multilib_os_dir = XNEWVEC (char, end - q);
++	      const char *q2 = q + 1;
++	      char *new_multilib_os_dir;
++
++	      while (q2 < end && *q2 != ':')
++		q2++;
++	      if (*q2 == ':')
++		end = q2;
++	      new_multilib_os_dir = XNEWVEC (char, end - q);
+ 	      memcpy (new_multilib_os_dir, q + 1, end - q - 1);
+ 	      new_multilib_os_dir[end - q - 1] = '\0';
+ 	      multilib_os_dir = new_multilib_os_dir;
++
++	      end = this_path + this_path_len;
++	      if (q2 < end && *q2 == ':')
++		{
++		  char *new_multiarch_dir = XNEWVEC (char, end - q2);
++		  memcpy (new_multiarch_dir, q2 + 1, end - q2 - 1);
++		  new_multiarch_dir[end - q2 - 1] = '\0';
++		  multiarch_dir = new_multiarch_dir;
++		}
+ 	      break;
+ 	    }
+ 	}
+@@ -7945,7 +8007,7 @@
+       /* When --disable-multilib was used but target defines
+ 	 MULTILIB_OSDIRNAMES, entries starting with .: are there just
+ 	 to find multilib_os_dir, so skip them from output.  */
+-      if (this_path[0] == '.' && this_path[1] == ':')
++      if (this_path[0] == '.' && this_path[1] == ':' && this_path[2] != '.' && this_path[3] != ':')
+ 	skip = 1;
+ 
+       /* Check for matches with the multilib_exclusions. We don't bother
+Index: b/src/gcc/cppdefault.c
+===================================================================
+--- a/src/gcc/cppdefault.c
++++ b/src/gcc/cppdefault.c
+@@ -60,6 +60,7 @@
+ #endif
+ #ifdef LOCAL_INCLUDE_DIR
+     /* /usr/local/include comes before the fixincluded header files.  */
++    { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 },
+     { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },
+ #endif
+ #ifdef PREFIX_INCLUDE_DIR
+@@ -95,6 +96,7 @@
+ #endif
+ #ifdef STANDARD_INCLUDE_DIR
+     /* /usr/include comes dead last.  */
++    { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1, 2 },
+     { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1, 0 },
+ #endif
+     { 0, 0, 0, 0, 0, 0 }
+Index: b/src/gcc/config/s390/t-linux64
+===================================================================
+--- a/src/gcc/config/s390/t-linux64
++++ b/src/gcc/config/s390/t-linux64
+@@ -1,6 +1,7 @@
+ MULTILIB_OPTIONS = m64/m31
+ MULTILIB_DIRNAMES = 64 32
+ MULTILIB_OSDIRNAMES = ../lib64 ../lib
++MULTILIB_OSDIRNAMES = ../lib64:s390x-linux-gnu ../lib:s390-linux-gnu
+ 
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+Index: b/src/gcc/config/pa/t-linux
+===================================================================
+--- a/src/gcc/config/pa/t-linux
++++ b/src/gcc/config/pa/t-linux
+@@ -17,3 +17,5 @@
+ 
+ # Compile crtbeginS.o and crtendS.o as PIC.
+ CRTSTUFF_T_CFLAGS_S = -fPIC
++
++MULTIARCH_DIRNAME = hppa-linux-gnu
+Index: b/src/gcc/config/rs6000/t-linux64
+===================================================================
+--- a/src/gcc/config/rs6000/t-linux64
++++ b/src/gcc/config/rs6000/t-linux64
+@@ -19,7 +19,7 @@
+ MULTILIB_EXTRA_OPTS     = fPIC mstrict-align
+ MULTILIB_EXCEPTIONS     = m64/msoft-float
+ MULTILIB_EXCLUSIONS     = m64/!m32/msoft-float
+-MULTILIB_OSDIRNAMES	= ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib) nof
++MULTILIB_OSDIRNAMES	= ../lib64:powerpc64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):powerpc-linux-gnu nof
+ MULTILIB_MATCHES        = $(MULTILIB_MATCHES_FLOAT)
+ 
+ softfp_wrap_start := '\#ifndef __powerpc64__'
+Index: b/src/gcc/config/mips/t-linux64
+===================================================================
+--- a/src/gcc/config/mips/t-linux64
++++ b/src/gcc/config/mips/t-linux64
+@@ -1,6 +1,10 @@
+ MULTILIB_OPTIONS = mabi=n32/mabi=32/mabi=64
+ MULTILIB_DIRNAMES = n32 32 64
+-MULTILIB_OSDIRNAMES = ../lib32 ../lib ../lib64
++MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el)
++MULTILIB_OSDIRNAMES = \
++	../lib32:mips64$(MIPS_EL)-linux-gnuabin32 \
++	../lib:mips$(MIPS_EL)-linux-gnu \
++	../lib64:mips64$(MIPS_EL)-linux-gnuabi64
+ 
+ EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
+ 
+Index: b/src/gcc/config/sparc/t-linux64
+===================================================================
+--- a/src/gcc/config/sparc/t-linux64
++++ b/src/gcc/config/sparc/t-linux64
+@@ -1,6 +1,6 @@
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64 ../lib
++MULTILIB_OSDIRNAMES = ../lib64:sparc64-linux-gnu ../lib:sparc-linux-gnu
+ 
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+Index: b/src/gcc/config/sparc/t-linux
+===================================================================
+--- a/src/gcc/config/sparc/t-linux
++++ b/src/gcc/config/sparc/t-linux
+@@ -3,3 +3,5 @@
+ # Avoid the t-linux version file.
+ SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \
+ 		 $(srcdir)/config/sparc/libgcc-sparc-glibc.ver
++
++MULTIARCH_DIRNAME = sparc-linux-gnu
+Index: b/src/gcc/config/ia64/t-glibc
+===================================================================
+--- a/src/gcc/config/ia64/t-glibc
++++ b/src/gcc/config/ia64/t-glibc
+@@ -3,3 +3,7 @@
+   $(srcdir)/unwind-compat.c
+ 
+ SHLIB_MAPFILES += $(srcdir)/config/ia64/libgcc-glibc.ver
++
++ifneq (,$(findstring linux, $(target)))
++MULTIARCH_DIRNAME = ia64-linux-gnu
++endif
+Index: b/src/gcc/config/m68k/t-linux
+===================================================================
+--- a/src/gcc/config/m68k/t-linux
++++ b/src/gcc/config/m68k/t-linux
+@@ -3,6 +3,8 @@
+ # Only include multilibs for CPUs with an MMU.
+ M68K_MLIB_CPU += && match(FLAGS, "FL_MMU")
+ 
++MULTIARCH_DIRNAME = m68k-linux-gnu
++
+ # This rule uses MULTILIB_MATCHES to generate a definition of
+ # SYSROOT_SUFFIX_SPEC.
+ sysroot-suffix.h: $(srcdir)/config/m68k/print-sysroot-suffix.sh
+Index: b/src/gcc/config/alpha/t-linux
+===================================================================
+--- a/src/gcc/config/alpha/t-linux
++++ b/src/gcc/config/alpha/t-linux
+@@ -1 +1,3 @@
+ SHLIB_MAPFILES += $(srcdir)/config/alpha/libgcc-alpha-ldbl.ver
++
++MULTIARCH_DIRNAME = alpha-linux-gnu
+Index: b/src/gcc/config/i386/t-linux64
+===================================================================
+--- a/src/gcc/config/i386/t-linux64
++++ b/src/gcc/config/i386/t-linux64
+@@ -7,7 +7,11 @@
+ 
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32 
+-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
++MULTILIB_OSDIRNAMES = ../lib64:x86_64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):i386-linux-gnu
++
++ifneq (,$(findstring kfreebsd, $(target)))
++  MULTILIB_OSDIRNAMES := $(subst linux,kfreebsd,$(MULTILIB_OSDIRNAMES))
++endif
+ 
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+Index: b/src/gcc/config/i386/t-linux
+===================================================================
+--- a/src/gcc/config/i386/t-linux
++++ b/src/gcc/config/i386/t-linux
+@@ -3,3 +3,5 @@
+ # t-slibgcc-elf-ver and t-linux
+ SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \
+ 		 $(srcdir)/config/i386/libgcc-glibc.ver
++
++MULTIARCH_DIRNAME = i386-linux-gnu
+Index: b/src/gcc/Makefile.in
+===================================================================
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -289,6 +289,8 @@
+ CLOOGLIBS = @CLOOGLIBS@
+ CLOOGINC = @CLOOGINC@
+ 
++with_float = @with_float@
++
+ CPPLIB = ../libcpp/libcpp.a
+ CPPINC = -I$(srcdir)/../libcpp/include
+ 
+Index: b/src/gcc/incpath.c
+===================================================================
+--- a/src/gcc/incpath.c
++++ b/src/gcc/incpath.c
+@@ -150,8 +150,14 @@
+ 	      if (!strncmp (p->fname, cpp_GCC_INCLUDE_DIR, len))
+ 		{
+ 		  char *str = concat (iprefix, p->fname + len, NULL);
+-		  if (p->multilib && imultilib)
++		  if (p->multilib == 1 && imultilib)
+ 		    str = concat (str, dir_separator_str, imultilib, NULL);
++		  else if (p->multilib == 2)
++		    {
++		      if (!imultiarch)
++			continue;
++		      str = concat (str, dir_separator_str, imultiarch, NULL);
++		    }
+ 		  add_path (str, SYSTEM, p->cxx_aware, false);
+ 		}
+ 	    }
+@@ -195,8 +201,14 @@
+ 	  else
+ 	    str = update_path (p->fname, p->component);
+ 
+-	  if (p->multilib && imultilib)
++	  if (p->multilib == 1 && imultilib)
+ 	    str = concat (str, dir_separator_str, imultilib, NULL);
++	  else if (p->multilib == 2)
++	    {
++	      if (!imultiarch)
++		continue;
++	      str = concat (str, dir_separator_str, imultiarch, NULL);
++	    }
+ 
+ 	  add_path (str, SYSTEM, p->cxx_aware, false);
+ 	}
+Index: b/src/gcc/config/arm/t-linux-eabi
+===================================================================
+--- a/src/gcc/config/arm/t-linux-eabi
++++ b/src/gcc/config/arm/t-linux-eabi
+@@ -1,6 +1,8 @@
+ # These functions are included in shared libraries.
+ TARGET_LIBGCC2_CFLAGS = -fPIC
+ 
++MULTIARCH_DIRNAME = arm-linux-gnueabi$(if $(filter hard,$(with_float)),hf)
++
+ # We do not build a Thumb multilib for Linux because the definition of
+ # CLEAR_INSN_CACHE in linux-gas.h does not work in Thumb mode.
+ MULTILIB_OPTIONS	=
+Index: b/src/gcc/config/i386/t-gnu
+===================================================================
+--- /dev/null
++++ b/src/gcc/config/i386/t-gnu
+@@ -0,0 +1 @@
++MULTIARCH_DIRNAME = i386-gnu
+Index: b/src/gcc/config/i386/t-kfreebsd
+===================================================================
+--- /dev/null
++++ b/src/gcc/config/i386/t-kfreebsd
+@@ -0,0 +1 @@
++MULTIARCH_DIRNAME = i386-kfreebsd-gnu
+Index: b/src/gcc/configure.ac
+===================================================================
+--- a/src/gcc/configure.ac
++++ b/src/gcc/configure.ac
+@@ -587,6 +587,9 @@
+ [], [enable_multilib=yes])
+ AC_SUBST(enable_multilib)
+ 
++# needed for ARM multiarch name
++AC_SUBST(with_float)
++
+ # Enable __cxa_atexit for C++.
+ AC_ARG_ENABLE(__cxa_atexit,
+ [  --enable-__cxa_atexit   enable __cxa_atexit for C++],
+Index: b/src/gcc/config/rs6000/t-spe
+===================================================================
+--- a/src/gcc/config/rs6000/t-spe
++++ b/src/gcc/config/rs6000/t-spe
+@@ -84,3 +84,5 @@
+ 			  mabi=altivec/mlittle \
+ 			  maltivec/mlittle \
+ 			  maltivec/mabi=altivec/mlittle
++
++MULTILIB_OSDIRNAMES = powerpc-linux-gnuspe:powerpc-linux-gnuspe
+Index: b/src/gcc/config/sh/t-linux
+===================================================================
+--- a/src/gcc/config/sh/t-linux
++++ b/src/gcc/config/sh/t-linux
+@@ -6,3 +6,5 @@
+ MULTILIB_MATCHES = 
+ 
+ EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
++
++MULTILIB_OSDIRNAMES = sh4-linux-gnu:sh4-linux-gnu sh4_nofpu-linux-gnu:sh4-linux-gnu
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -1871,6 +1871,7 @@
+ 		;;
+ 	    *)
+ 		tm_file="${tm_file} rs6000/linux.h"
++		tmake_file="$tmake_file rs6000/t-linux"
+ 		;;
+ 	esac
+ 	tmake_file="${tmake_file} t-slibgcc-libgcc rs6000/t-fprules-softfp soft-fp/t-softfp"
+@@ -3095,6 +3096,14 @@
+ 		;;
+ 	i[34567]86-*-linux* | x86_64-*-linux* | i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu)
+ 		tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp i386/t-linux"
++		case ${target} in
++			i[34567]86-*-linux*-gnu)
++				;;
++			i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu)
++				tmake_file="${tmake_file} i386/t-kfreebsd";;
++			i[34567]86-*-gnu*)
++				tmake_file="${tmake_file} i386/t-gnu";;
++		esac
+ 		;;
+ 	ia64*-*-linux*)
+ 		tmake_file="${tmake_file} ia64/t-fprules-softfp soft-fp/t-softfp"
+--- a/src/gcc/config/rs6000/t-linux
++++ b/src/gcc/config/rs6000/t-linux
+@@ -0,0 +1 @@
++MULTIARCH_DIRNAME = powerpc-linux-gnu
+--- a/src/gcc/config/s390/t-linux
++++ b/src/gcc/config/s390/t-linux
+@@ -1,3 +1,5 @@
+ # Override t-slibgcc-elf-ver to export some libgcc symbols with
+ # the symbol versions that glibc used.
+ SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver $(srcdir)/config/s390/libgcc-glibc.ver
++
++MULTIARCH_DIRNAME = s390-linux-gnu
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libstdc++-test-installed.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libstdc++-test-installed.diff
@@ -0,0 +1,76 @@
+# DP: Add support to run the libstdc++-v3 testsuite using the
+# DP: installed shared libraries.
+
+--- a/src/libstdc++-v3/testsuite/lib/libstdc++.exp~	2010-05-27 15:43:11.332323079 +0200
++++ b/src/libstdc++-v3/testsuite/lib/libstdc++.exp	2010-05-27 16:03:58.662323814 +0200
+@@ -38,6 +38,12 @@
+ # the last thing before testing begins.  This can be defined in, e.g.,
+ # ~/.dejagnurc or $DEJAGNU.
+ 
++set test_installed 0
++if [info exists env(TEST_INSTALLED)] {
++    verbose -log "test installed libstdc++-v3"
++    set test_installed 1
++}
++
+ proc load_gcc_lib { filename } {
+     global srcdir
+     load_file $srcdir/../../gcc/testsuite/lib/$filename
+@@ -91,6 +99,7 @@
+     global target_triplet
+     global flags_file
+     global tool_timeout
++    global test_installed
+ 
+     # We set LC_ALL and LANG to C so that we get the same error
+     # messages as expected.
+@@ -99,6 +108,9 @@
+ 
+     set blddir [lookfor_file [get_multilibs] libstdc++-v3]
+     set flags_file "${blddir}/scripts/testsuite_flags"
++    if {$test_installed} {
++      set flags_file "${blddir}/scripts/testsuite_flags.installed"
++    }
+     v3track flags_file 2
+ 
+     # If a test doesn't have special options, use DEFAULT_CXXFLAGS.
+@@ -129,7 +141,11 @@
+ 
+     # Locate libgcc.a so we don't need to account for different values of
+     # SHLIB_EXT on different platforms
+-    set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
++    if {$test_installed} {
++	set gccdir ""
++    } else {
++	set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
++    }
+     if {$gccdir != ""} {
+         set gccdir [file dirname $gccdir]
+ 	append ld_library_path_tmp ":${gccdir}"
+@@ -138,7 +154,11 @@
+ 
+     # Locate libgomp. This is only required for parallel mode.
+     set v3-libgomp 0
+-    set libgompdir [lookfor_file $blddir/../libgomp .libs/libgomp.so]
++    if {$test_installed} {
++	set libgompdir ""
++    } else {
++	set libgompdir [lookfor_file $blddir/../libgomp .libs/libgomp.so]
++    }
+     if {$libgompdir != ""} {
+ 	set v3-libgomp 1
+         set libgompdir [file dirname $libgompdir]
+@@ -149,7 +169,12 @@
+ 
+     # Locate libstdc++ shared library. (ie libstdc++.so.)
+     set v3-sharedlib 0
+-    set sharedlibdir [lookfor_file $blddir src/.libs/libstdc++.so]
++    if {$test_installed} {
++	set sharedlibdir ""
++	set v3-sharedlib 1
++    } else {
++	set sharedlibdir [lookfor_file $blddir src/.libs/libstdc++.so]
++    }
+     if {$sharedlibdir != ""} {
+ 	if { [string match "*-*-linux*" $target_triplet] && [isnative] } {
+ 	    set v3-sharedlib 1
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gold-and-ld.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gold-and-ld.diff
@@ -0,0 +1,478 @@
+# DP: Enable both gold and ld in a single toolchain.
+# DP: New option -fuse-ld=ld.bfd, -fuse-ld=gold.
+
+Index: gcc/gcc.c
+===================================================================
+--- a/src/gcc/gcc.c	(revision
++++ b/src/gcc/gcc.c	(working
+@@ -726,7 +726,11 @@
+ #ifndef LINK_COMMAND_SPEC
+ #define LINK_COMMAND_SPEC "\
+ %{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
+-    %(linker) %l " LINK_PIE_SPEC "%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
++    %(linker) %l " LINK_PIE_SPEC \
++   "%{fuse-ld=gold:%{fuse-ld=bfd:%e-fuse-ld=gold and -fuse-ld=bfd may not be used together}} \
++    %{fuse-ld=gold:-use-gold} \
++    %{fuse-ld=bfd:-use-ld}" \
++    "%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
+     %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
+     %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
+     %{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)} %(mflib)\
+Index: gcc/opts.c
+===================================================================
+--- a/src/gcc/opts.c	(revision
++++ b/src/gcc/opts.c	(working
+@@ -2062,6 +2062,10 @@
+       /* These are no-ops, preserved for backward compatibility.  */
+       break;
+ 
++    case OPT_fuse_ld_:
++      /* No-op. Used by the driver and passed to us because it starts with f.  */
++      break;
++
+     default:
+       /* If the flag was handled in a standard way, assume the lack of
+ 	 processing here is intentional.  */
+Index: gcc/configure.ac
+===================================================================
+--- a/src/gcc/configure.ac	(revision
++++ b/src/gcc/configure.ac	(working
+@@ -1911,6 +1911,17 @@
+         AC_PATH_PROG(gcc_cv_ld, $LD_FOR_TARGET)
+ fi])
+ 
++gcc_cv_ld_gold_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gold
++
++AS_VAR_SET_IF(gcc_cv_gold,, [
++if test -f $gcc_cv_ld_gold_srcdir/configure.ac \
++     && test -f ../gold/Makefile \
++     && test x$build = x$host; then
++	gcc_cv_gold=../gold/ld-new$build_exeext
++else
++        gcc_cv_gold=''
++fi])
++
+ ORIGINAL_LD_FOR_TARGET=$gcc_cv_ld
+ AC_SUBST(ORIGINAL_LD_FOR_TARGET)
+ case "$ORIGINAL_LD_FOR_TARGET" in
+@@ -1918,6 +1929,9 @@
+   *) AC_CONFIG_FILES(collect-ld:exec-tool.in, [chmod +x collect-ld]) ;;
+ esac 
+ 
++ORIGINAL_GOLD_FOR_TARGET=$gcc_cv_gold
++AC_SUBST(ORIGINAL_GOLD_FOR_TARGET)
++
+ AC_MSG_CHECKING(what linker to use)
+ if test "$gcc_cv_ld" = ../ld/ld-new$build_exeext; then
+ 	# Single tree build which includes ld.  We want to prefer it
+Index: gcc/exec-tool.in
+===================================================================
+--- a/src/gcc/exec-tool.in	(revision
++++ b/src/gcc/exec-tool.in	(working
+@@ -1,6 +1,6 @@
+ #! /bin/sh
+ 
+-# Copyright (C) 2007, 2008 Free Software Foundation, Inc.
++# Copyright (C) 2007, 2008, 2010 Free Software Foundation, Inc.
+ # This file is part of GCC.
+ 
+ # GCC is free software; you can redistribute it and/or modify
+@@ -21,10 +21,12 @@
+ 
+ ORIGINAL_AS_FOR_TARGET="@ORIGINAL_AS_FOR_TARGET@"
+ ORIGINAL_LD_FOR_TARGET="@ORIGINAL_LD_FOR_TARGET@"
++ORIGINAL_GOLD_FOR_TARGET="@ORIGINAL_GOLD_FOR_TARGET@"
+ ORIGINAL_NM_FOR_TARGET="@ORIGINAL_NM_FOR_TARGET@"
+ exeext=@host_exeext@
+ fast_install=@enable_fast_install@
+ objdir=@objdir@
++version="1.1"
+ 
+ invoked=`basename "$0"`
+ case "$invoked" in
+@@ -33,48 +35,111 @@
+     prog=as-new$exeext
+     dir=gas
+     ;;
+-  collect-ld)
+-    original=$ORIGINAL_LD_FOR_TARGET
+-    prog=ld-new$exeext
+-    dir=ld
+-    ;;
+   nm)
+     original=$ORIGINAL_NM_FOR_TARGET
+     prog=nm-new$exeext
+     dir=binutils
+     ;;
++  collect-ld)
++    prog=ld-new$exeext
++    # Look for the a command line option
++    # specifying the linker to be used.
++    case " $* " in
++      *\ -use-gold\ *)
++        original=$ORIGINAL_GOLD_FOR_TARGET
++	dir=gold
++        ;;
++      *\ -use-ld\ * | *\ -use-ld.bfd\ *)
++        original=$ORIGINAL_LD_FOR_TARGET
++        dir=ld
++        ;;
++#      *\ -plugin\ *)
++#        original=$ORIGINAL_PLUGIN_LD_FOR_TARGET
++#        dir=ld
++#	;;
++      *)
++        original=$ORIGINAL_LD_FOR_TARGET
++        dir=ld
++	;;
++    esac
++
++    # If the selected linker has not been configured then
++    # try using the others, in the order PLUGIN-LD, LD, GOLD.
++    if test x"$original" = x; then
++#      if test x"$ORIGINAL_PLUGIN_LD_FOR_TARGET" != x; then
++#        original=$ORIGINAL_PLUGIN_LD_FOR_TARGET
++#        dir=ld
++#      elif test x"$ORIGINAL_LD_FOR_TARGET" != x; then
++      if test x"$ORIGINAL_LD_FOR_TARGET" != x; then
++        original=$ORIGINAL_LD_FOR_TARGET
++        dir=ld
++      elif test x"$ORIGINAL_GOLD_FOR_TARGET" != x; then
++        original=$ORIGINAL_GOLD_FOR_TARGET
++        dir=gold
++      # Otherwise do nothing - the case statement below
++      # will issue an error message for us.
++      fi
++    fi
++    ;;
+ esac
+ 
+ case "$original" in
+   ../*)
+-    # compute absolute path of the location of this script
++    # Compute absolute path of the location of this script
+     tdir=`dirname "$0"`
+     scriptdir=`cd "$tdir" && pwd`
+ 
+     if test -x $scriptdir/../$dir/$prog; then
+-      test "$fast_install" = yes || exec $scriptdir/../$dir/$prog ${1+"$@"}
++      if test "$fast_install" = yes; then
++        # If libtool did everything it needs to do, there's a fast path.
++        lt_prog=$scriptdir/../$dir/$objdir/lt-$prog 
+ 
+-      # if libtool did everything it needs to do, there's a fast path
+-      lt_prog=$scriptdir/../$dir/$objdir/lt-$prog 
+-      test -x $lt_prog && exec $lt_prog ${1+"$@"}
+-
+-      # libtool has not relinked ld-new yet, but we cannot just use the
+-      # previous stage (because then the relinking would just never happen!).
+-      # So we take extra care to use prev-ld/ld-new *on recursive calls*.
+-      test x"$LT_RCU" = x"1" && exec $scriptdir/../prev-$dir/$prog ${1+"$@"}
+-
+-      LT_RCU=1; export LT_RCU
+-      $scriptdir/../$dir/$prog ${1+"$@"}
+-      result=$?
+-      exit $result
+-
++	if test -x $lt_prog; then
++	  original=$lt_prog
++        else
++          # Libtool has not relinked ld-new yet, but we cannot just use the
++          # previous stage (because then the relinking would just never happen!).
++          # So we take extra care to use prev-ld/ld-new *on recursive calls*.
++          if test x"$LT_RCU" = x"1"; then
++	    original=$scriptdir/../prev-$dir/$prog
++          else
++            LT_RCU=1; export LT_RCU
++            case " $* " in
++              *\ -v\ *)
++               echo "$invoked $version"
++               echo $scriptdir/../$dir/$prog $*
++               ;;
++            esac
++            $scriptdir/../$dir/$prog ${1+"$@"}
++            result=$?
++            exit $result
++          fi
++        fi
++      else
++	original=$scriptdir/../$dir/$prog
++      fi
+     else
+-      exec $scriptdir/../prev-$dir/$prog ${1+"$@"}
++      original=$scriptdir/../prev-$dir/$prog
+     fi
+     ;;
+-  *)
+-    exec "$original" ${1+"$@"}
++  "")
++    echo "$invoked: executable not configured"
++    exit 1
+     ;;
+ esac
+ 
++# If -v has been used then display our version number
++# and then echo the command we are about to invoke.
++case " $* " in
++  *\ -v\ *)
++    echo "$invoked $version"
++    echo $original $*
++    ;;
++esac
+ 
++if test -x $original; then
++  exec "$original" ${1+"$@"}
++else
++  echo "$invoked: unable to locate executable: $original"
++  exit 1
++fi
+Index: gcc/common.opt
+===================================================================
+--- a/src/gcc/common.opt	(revision
++++ b/src/gcc/common.opt	(working
+@@ -1299,6 +1299,9 @@
+ Common Report Var(flag_unwind_tables) Optimization
+ Just generate unwind tables for exception handling
+ 
++fuse-ld=
++Common Joined Undocumented
++
+ fvar-tracking
+ Common Report Var(flag_var_tracking) VarExists Optimization
+ Perform variable tracking
+Index: gcc/collect2.c
+===================================================================
+--- a/src/gcc/collect2.c	(revision
++++ b/src/gcc/collect2.c	(working
+@@ -766,6 +766,8 @@
+ main (int argc, char **argv)
+ {
+   static const char *const ld_suffix	= "ld";
++  static const char *const gold_suffix       = "gold";
++  static const char *const bfd_ld_suffix     = "ld.bfd";
+   static const char *const real_ld_suffix = "real-ld";
+   static const char *const collect_ld_suffix = "collect-ld";
+   static const char *const nm_suffix	= "nm";
+@@ -784,6 +786,10 @@
+ 
+   const char *const full_ld_suffix =
+     concat(target_machine, "-", ld_suffix, NULL);
++  const char *const full_gold_suffix =
++    concat (target_machine, "-", gold_suffix, NULL);
++  const char *const full_bfd_ld_suffix =
++    concat (target_machine, "-", bfd_ld_suffix, NULL);
+   const char *const full_nm_suffix =
+     concat (target_machine, "-", nm_suffix, NULL);
+   const char *const full_gnm_suffix =
+@@ -798,6 +804,8 @@
+     concat (target_machine, "-", gstrip_suffix, NULL);
+ #else
+   const char *const full_ld_suffix	= ld_suffix;
++  const char *const full_gold_suffix	  = gold_suffix;
++  const char *const full_bfd_ld_suffix	  = bfd_ld_suffix;
+   const char *const full_nm_suffix	= nm_suffix;
+   const char *const full_gnm_suffix	= gnm_suffix;
+ #ifdef LDD_SUFFIX
+@@ -818,6 +826,12 @@
+   const char **c_ptr;
+   char **ld1_argv;
+   const char **ld1;
++  enum linker_select
++  {
++    DFLT_LINKER,
++    GOLD_LINKER,
++    BFD_LINKER
++  } selected_linker = DFLT_LINKER;
+   char **ld2_argv;
+   const char **ld2;
+   char **object_lst;
+@@ -875,6 +890,10 @@
+       {
+ 	if (! strcmp (argv[i], "-debug"))
+ 	  debug = 1;
++	else if (! strcmp (argv[i], "-use-gold"))
++	  selected_linker = GOLD_LINKER;
++	else if (! strcmp (argv[i], "-use-ld"))
++	  selected_linker = BFD_LINKER;
+       }
+     vflag = debug;
+   }
+@@ -954,13 +973,81 @@
+     ld_file_name = find_a_file (&cpath, collect_ld_suffix);
+   /* Search the compiler directories for `ld'.  We have protection against
+      recursive calls in find_a_file.  */
+-  if (ld_file_name == 0)
+-    ld_file_name = find_a_file (&cpath, ld_suffix);
++  if (ld_file_name == NULL)
++    switch (selected_linker)
++      {
++      default:
++      case DFLT_LINKER:
++	ld_file_name = find_a_file (&cpath, ld_suffix);
++	break;
++      case GOLD_LINKER:
++	ld_file_name = find_a_file (&cpath, gold_suffix);
++	break;
++      case BFD_LINKER:
++	ld_file_name = find_a_file (&cpath, bfd_ld_suffix);
++	break;
++      }
+   /* Search the ordinary system bin directories
+      for `ld' (if native linking) or `TARGET-ld' (if cross).  */
+-  if (ld_file_name == 0)
+-    ld_file_name = find_a_file (&path, full_ld_suffix);
++  if (ld_file_name == NULL)
++    switch (selected_linker)
++      {
++      default:
++      case DFLT_LINKER:
++	ld_file_name = find_a_file (&path, full_ld_suffix);
++	break;
++      case GOLD_LINKER:
++	ld_file_name = find_a_file (&path, full_gold_suffix);
++	break;
++      case BFD_LINKER:
++	ld_file_name = find_a_file (&path, full_bfd_ld_suffix);
++	break;
++      }
+ 
++  if ((vflag || debug) && ld_file_name == NULL)
++    {
++      struct prefix_list * p;
++      const char * s;
++
++      notice ("collect2: warning: unable to find linker.\n");
++
++#ifdef DEFAULT_LINKER
++      notice (" Searched for this absolute executable:\n");
++      notice (" %s\n", DEFAULT_LINKER);
++#endif
++
++      notice (" Searched in these paths:\n");
++      for (p = cpath.plist; p != NULL; p = p->next)
++	notice ("  %s\n", p->prefix);
++      notice (" For these executables:\n");
++      notice ("  %s\n", real_ld_suffix);
++      notice ("  %s\n", collect_ld_suffix);
++      switch (selected_linker)
++      {
++      default:
++      case DFLT_LINKER: s = ld_suffix; break;
++      case GOLD_LINKER:    s = gold_suffix; break;
++      case BFD_LINKER:     s = bfd_ld_suffix; break;
++      }
++      notice ("  %s\n", s);
++
++      notice (" And searched in these paths:\n");
++      for (p = path.plist; p != NULL; p = p->next)
++	notice ("  %s\n", p->prefix);
++      notice (" For these executables:\n");
++#ifdef REAL_LD_FILE_NAME
++      notice (" %s\n", REAL_LD_FILE_NAME);
++#endif
++      switch (selected_linker)
++      {
++      default:
++      case DFLT_LINKER: s = full_ld_suffix; break;
++      case GOLD_LINKER:    s = full_gold_suffix; break;
++      case BFD_LINKER:     s = full_bfd_ld_suffix; break;
++      }
++      notice ("  %s\n", s);
++    }
++
+ #ifdef REAL_NM_FILE_NAME
+   nm_file_name = find_a_file (&path, REAL_NM_FILE_NAME);
+   if (nm_file_name == 0)
+Index: configure.ac
+===================================================================
+--- a/src/configure.ac	(revision
++++ b/src/configure.ac	(working
+@@ -165,7 +165,7 @@
+ # know that we are building the simulator.
+ # binutils, gas and ld appear in that order because it makes sense to run
+ # "make check" in that particular order.
+-# If --enable-gold is used, "gold" will replace "ld".
++# If --enable-gold is used, "gold" may replace "ld".
+ host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc sid sim gdb make patch prms send-pr gprof etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool diff rcs fileutils shellutils time textutils wdiff find uudecode hello tar gzip indent recode release sed utils guile perl gawk findutils gettext zip fastjar gnattools"
+ 
+ # libgcj represents the runtime libraries only used by gcj.
+@@ -294,37 +294,57 @@
+ esac
+ 
+ # Handle --enable-gold.
++#   --enable-gold		Build only gold
++#   --disable-gold [default]	Build only ld
++#   --enable-gold=both		Build both gold and ld, ld is default
++#   --enable-gold=both/ld	Same
++#   --enable-gold=both/gold	Build both gold and ld, gold is default, ld is renamed ld.bfd
+ 
+ AC_ARG_ENABLE(gold,
+-[  --enable-gold           use gold instead of ld],
++[  --enable-gold[[=ARG]]     build gold [[ARG={both}[[/{gold,ld}]]]]],
+ ENABLE_GOLD=$enableval,
+ ENABLE_GOLD=no)
+-if test "${ENABLE_GOLD}" = "yes"; then
+-  # Check for ELF target.
+-  is_elf=no
+-  case "${target}" in
+-    *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \
+-    | *-*-linux* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \
+-    | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-solaris2*)
++  case "${ENABLE_GOLD}" in
++  yes|both|both/gold|both/ld)
++    # Check for ELF target.
++    is_elf=no
++    case "${target}" in
++      *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \
++      | *-*-linux* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \
++      | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-solaris2* | *-*-nto*)
++        case "${target}" in
++          *-*-linux*aout* | *-*-linux*oldld*)
++            ;;
++          *)
++            is_elf=yes
++            ;;
++        esac
++    esac
++
++    if test "$is_elf" = "yes"; then
++      # Check for target supported by gold.
+       case "${target}" in
+-        *-*-linux*aout* | *-*-linux*oldld*)
++        i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-*)
++	  case "${ENABLE_GOLD}" in 
++	  both*)
++            configdirs="$configdirs gold"
++	    ;;
++	  *)
++            configdirs=`echo " ${configdirs} " | sed -e 's/ ld / gold /'`
++	    ;;
++	  esac
++	  ENABLE_GOLD=yes
+           ;;
+-        *)
+-          is_elf=yes
+-          ;;
+       esac
++    fi
++    ;;
++  no)
++    ;;
++  *)
++    AC_MSG_ERROR([invalid --enable-gold argument])
++    ;;
+   esac
+ 
+-  if test "$is_elf" = "yes"; then
+-    # Check for target supported by gold.
+-    case "${target}" in
+-      i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-*)
+-        configdirs=`echo " ${configdirs} " | sed -e 's/ ld / gold /'`
+-        ;;
+-    esac
+-  fi
+-fi
+-
+ # Configure extra directories which are host specific
+ 
+ case "${host}" in
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/fix-warnings.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/fix-warnings.diff
@@ -0,0 +1,1341 @@
+# DP: Fix warnings with -D_FORTIFY_SOURCE and -Wformat-security.
+
+libcpp/
+
+	* macro.c (create_iso_definition): Avoid warnings with
+	-Wformat-security.
+	* lex.c (cpp_output_token): Avoid warnings with -D_FORTIFY_SOURCE.
+
+gcc/
+
+	* toplev.c (print_to_asm_out_file, print_to_stderr): Avoid warnings with
+	-Wformat-security, (pch_option_mismatch) avoid warnings with
+	-D_FORTIFY_SOURCE.
+
+	* c-convert.c (convert): Avoid warnings with -Wformat-security.
+	* c-typeck.c (convert_arguments, build_unary_op, build_binary_op): Likewise.
+	* c-common.c (c_parse_error): Likewise.
+	* cfg.c (dump_cfg_bb_info): Likewise.
+	* fold-const.c (fold_overflow_warning): Likewise.
+	* ira-conflicts.c (print_hard_reg_set): Likewise.
+	* opts.c (print_filtered_help): Likewise.
+	* tree-switch-conversion.c (do_switchconv): Likewise.
+	* collect2.c (collect_execute, scan_prog_file): Likewise.
+
+	* c-ppoutput.c (print_lines_directives_only,scan_translation_unit_trad):
+	Avoid warnings with -D_FORTIFY_SOURCE.
+	* dbxout.c (dbxout_finish_complex_stabs): Likewise.
+	* diagnostic.c (build_message_string): Likewise.
+	* final.c (output_operand_lossage): Likewise.
+	* tree-data-ref.c (dot_rdg): Likewise.
+	* tree-ssa-structalias.c (create_function_info_for,
+	create_variable_info_for): Likewise.
+
+gcc/cp/
+
+	* pt.c (tsubst_copy_and_build): Avoid warnings with -Wformat-security.
+	* parser.c (cp_parser_check_type_definition,
+	cp_parser_non_integral_constant_expression): Likewise.
+	* typeck.c (cp_build_binary_op, cp_build_unary_op): Likewise.
+	* cvt.c (ocp_convert): Likewise.
+
+gcc/fortran/
+
+	* cpp.c (scan_translation_unit_trad): Avoid warnings with -D_FORTIFY_SOURCE.
+	* trans.c (gfc_trans_runtime_error_vararg): Likewise.
+	* trans-array.c (gfc_trans_array_bound_check, gfc_conv_array_ref,
+	gfc_conv_ss_startstride, gfc_trans_dummy_array_bias,
+	gfc_conv_array_parameter): Likewise.
+	* trans-io.c (gfc_trans_io_runtime_check, set_string): Likewise.
+	* trans-expr.c (gfc_conv_substring): Likewise.
+
+	* decl.c (gfc_match_kind_spec, match_char_kind): Avoid warnings with
+	-Wformat-security.
+	* intrinsic.c (add_sym, find_sym, make_alias): Likewise.
+	* match.c (gfc_match_small_int, gfc_match_small_int_expr): Likewise.
+	* matchexp.c (match_primary, match_level_2, match_level_3,
+	match_level_4, match_or_operand, match_equiv_operand, match_level_5,
+	gfc_match_expr): Likewise.
+	* module.c (find_true_name, mio_pool_string, mio_symtree_ref, mio_expr,
+	load_generic_interfaces, load_needed, read_module, write_symbol0,
+	write_generic, import_iso_c_binding_module, create_int_parameter,
+	use_iso_fortran_env_module, gfc_use_module): Likewise.
+	* openmp.c (gfc_match_omp_clauses): Likewise.
+	* primary.c (match_hollerith_constant, match_string_constant,
+	match_keyword_arg): Likewise.
+	* symbol.c (gfc_add_component, gfc_new_symtree, gfc_delete_symtree,
+	gfc_get_uop, gfc_new_symbol, gfc_get_gsymbol, gen_special_c_interop_ptr,
+	gen_cptr_param, gen_fptr_param, gen_shape_param,
+	generate_isocbinding_symbol, get_iso_c_sym): Likewise.
+	* trans-decl.c (gfc_find_module): Likewise.
+
+gcc/objc/
+
+	* objc-act.c (objc_lookup_protocol): Avoid warnings with
+	-Wformat-security.
+
+---
+ gcc/c-common.c               |    4 +-
+ gcc/c-convert.c              |    2 +-
+ gcc/c-ppoutput.c             |    6 ++-
+ gcc/c-typeck.c               |    6 +-
+ gcc/cfg.c                    |    2 +-
+ gcc/collect2.c               |    8 ++--
+ gcc/cp/cvt.c                 |    2 +-
+ gcc/cp/parser.c              |    4 +-
+ gcc/cp/pt.c                  |    2 +-
+ gcc/cp/typeck.c              |    4 +-
+ gcc/dbxout.c                 |    5 +-
+ gcc/diagnostic.c             |    3 +-
+ gcc/final.c                  |    5 +-
+ gcc/fold-const.c             |    2 +-
+ gcc/fortran/cpp.c            |    3 +-
+ gcc/fortran/decl.c           |    4 +-
+ gcc/fortran/intrinsic.c      |    8 ++--
+ gcc/fortran/match.c          |    4 +-
+ gcc/fortran/matchexp.c       |   18 ++++----
+ gcc/fortran/module.c         |   30 +++++++-------
+ gcc/fortran/openmp.c         |    2 +-
+ gcc/fortran/primary.c        |    6 +-
+ gcc/fortran/symbol.c         |   24 +++++-----
+ gcc/fortran/trans-array.c    |   94 +++++++++++++++++++++++++----------------
+ gcc/fortran/trans-decl.c     |    2 +-
+ gcc/fortran/trans-expr.c     |   22 ++++++----
+ gcc/fortran/trans-io.c       |    9 +++-
+ gcc/fortran/trans.c          |   11 +++--
+ gcc/ira-conflicts.c          |    2 +-
+ gcc/objc/objc-act.c          |    2 +-
+ gcc/opts.c                   |    2 +-
+ gcc/toplev.c                 |    9 +++-
+ gcc/tree-data-ref.c          |    3 +-
+ gcc/tree-ssa-structalias.c   |   13 ++++--
+ gcc/tree-switch-conversion.c |    2 +-
+ libcpp/lex.c                 |    6 ++-
+ libcpp/macro.c               |    4 +-
+ 37 files changed, 190 insertions(+), 145 deletions(-)
+
+--- a/src/gcc/c-common.c
++++ b/src/gcc/c-common.c
+@@ -7493,11 +7493,11 @@ c_parse_error (const char *gmsgid, enum cpp_ttype token, tree value)
+       message = NULL;
+     }
+   else
+-    error (gmsgid);
++    error ("%s", gmsgid);
+ 
+   if (message)
+     {
+-      error (message);
++      error ("%s", message);
+       free (message);
+     }
+ #undef catenate_messages
+--- a/src/gcc/c-convert.c
++++ b/src/gcc/c-convert.c
+@@ -79,7 +79,7 @@ convert (tree type, tree expr)
+   if ((invalid_conv_diag
+        = targetm.invalid_conversion (TREE_TYPE (expr), type)))
+     {
+-      error (invalid_conv_diag);
++      error ("%s", invalid_conv_diag);
+       return error_mark_node;
+     }
+ 
+--- a/src/gcc/c-ppoutput.c
++++ b/src/gcc/c-ppoutput.c
+@@ -223,8 +223,9 @@ scan_translation_unit (cpp_reader *pfile)
+ static void
+ print_lines_directives_only (int lines, const void *buf, size_t size)
+ {
++  size_t rv_neverused ATTRIBUTE_UNUSED;
+   print.src_line += lines;
+-  fwrite (buf, 1, size, print.outf);
++  rv_neverused = fwrite (buf, 1, size, print.outf);
+ }
+ 
+ /* Writes out the preprocessed file, handling spacing and paste
+@@ -256,8 +257,9 @@ scan_translation_unit_trad (cpp_reader *pfile)
+   while (_cpp_read_logical_line_trad (pfile))
+     {
+       size_t len = pfile->out.cur - pfile->out.base;
++      size_t rv_neverused ATTRIBUTE_UNUSED;
+       maybe_print_line (pfile->out.first_line);
+-      fwrite (pfile->out.base, 1, len, print.outf);
++      rv_neverused = fwrite (pfile->out.base, 1, len, print.outf);
+       print.printed = 1;
+       if (!CPP_OPTION (pfile, discard_comments))
+ 	account_for_newlines (pfile->out.base, len);
+--- a/src/gcc/c-typeck.c
++++ b/src/gcc/c-typeck.c
+@@ -2730,7 +2730,7 @@ convert_arguments (int nargs, tree *argarray,
+       else if ((invalid_func_diag =
+ 		targetm.calls.invalid_arg_for_unprototyped_fn (typelist, fundecl, val)))
+ 	{
+-	  error (invalid_func_diag);
++	  error ("%s", invalid_func_diag);
+ 	  return -1;
+ 	}
+       else
+@@ -2947,7 +2947,7 @@ build_unary_op (location_t location,
+   if ((invalid_op_diag
+        = targetm.invalid_unary_op (code, TREE_TYPE (xarg))))
+     {
+-      error_at (location, invalid_op_diag);
++      error_at (location, "%s", invalid_op_diag);
+       return error_mark_node;
+     }
+ 
+@@ -8095,7 +8095,7 @@ build_binary_op (location_t location, enum tree_code code,
+   if ((invalid_op_diag
+        = targetm.invalid_binary_op (code, type0, type1)))
+     {
+-      error_at (location, invalid_op_diag);
++      error_at (location, "%s", invalid_op_diag);
+       return error_mark_node;
+     }
+ 
+--- a/src/gcc/cfg.c
++++ b/src/gcc/cfg.c
+@@ -908,7 +908,7 @@ dump_cfg_bb_info (FILE *file, basic_block bb)
+ 	else
+ 	  fprintf (file, ", ");
+ 	first = false;
+-	fprintf (file, bb_bitnames[i]);
++	fprintf (file, "%s", bb_bitnames[i]);
+       }
+   if (!first)
+     fprintf (file, ")");
+--- a/src/gcc/collect2.c
++++ b/src/gcc/collect2.c
+@@ -1647,10 +1647,10 @@ collect_execute (const char *prog, char **argv, const char *outname,
+       if (err != 0)
+ 	{
+ 	  errno = err;
+-	  fatal_perror (errmsg);
++	  fatal_perror ("%s", errmsg);
+ 	}
+       else
+-	fatal (errmsg);
++	fatal ("%s", errmsg);
+     }
+ 
+   if (response_arg)
+@@ -2137,10 +2137,10 @@ scan_prog_file (const char *prog_name, enum pass which_pass)
+       if (err != 0)
+ 	{
+ 	  errno = err;
+-	  fatal_perror (errmsg);
++	  fatal_perror ("%s", errmsg);
+ 	}
+       else
+-	fatal (errmsg);
++	fatal ("%s", errmsg);
+     }
+ 
+   int_handler  = (void (*) (int)) signal (SIGINT,  SIG_IGN);
+--- a/src/gcc/cp/cvt.c
++++ b/src/gcc/cp/cvt.c
+@@ -591,7 +591,7 @@ ocp_convert (tree type, tree expr, int convtype, int flags)
+   if ((invalid_conv_diag
+        = targetm.invalid_conversion (TREE_TYPE (expr), type)))
+     {
+-      error (invalid_conv_diag);
++      error ("%s", invalid_conv_diag);
+       return error_mark_node;
+     }
+ 
+--- a/src/gcc/cp/parser.c
++++ b/src/gcc/cp/parser.c
+@@ -2204,7 +2204,7 @@ cp_parser_check_type_definition (cp_parser* parser)
+     {
+       /* Don't use `%s' to print the string, because quotations (`%<', `%>')
+ 	 in the message need to be interpreted.  */
+-      error (parser->type_definition_forbidden_message);
++      error ("%s", parser->type_definition_forbidden_message);
+       return false;
+     }
+   return true;
+@@ -2291,7 +2291,7 @@ cp_parser_non_integral_constant_expression (cp_parser  *parser,
+ 	  char *message = concat (thing,
+ 				  " cannot appear in a constant-expression",
+ 				  NULL);
+-	  error (message);
++	  error ("%s", message);
+ 	  free (message);
+ 	  return true;
+ 	}
+--- a/src/gcc/cp/pt.c
++++ b/src/gcc/cp/pt.c
+@@ -11060,7 +11060,7 @@ tsubst_copy_and_build (tree t,
+ 				     &error_msg,
+ 				     input_location);
+ 	if (error_msg)
+-	  error (error_msg);
++	  error ("%s", error_msg);
+ 	if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
+ 	  decl = unqualified_name_lookup_error (decl);
+ 	return decl;
+--- a/src/gcc/cp/typeck.c
++++ b/src/gcc/cp/typeck.c
+@@ -3373,7 +3373,7 @@ cp_build_binary_op (location_t location,
+   if ((invalid_op_diag
+        = targetm.invalid_binary_op (code, type0, type1)))
+     {
+-      error (invalid_op_diag);
++      error ("%s", invalid_op_diag);
+       return error_mark_node;
+     }
+ 
+@@ -4254,7 +4254,7 @@ cp_build_unary_op (enum tree_code code, tree xarg, int noconvert,
+ 				    : code),
+ 				   TREE_TYPE (xarg))))
+     {
+-      error (invalid_op_diag);
++      error ("%s", invalid_op_diag);
+       return error_mark_node;
+     }
+ 
+--- a/src/gcc/dbxout.c
++++ b/src/gcc/dbxout.c
+@@ -847,6 +847,7 @@ dbxout_finish_complex_stabs (tree sym, STAB_CODE_TYPE code,
+   int line ATTRIBUTE_UNUSED;
+   char *str;
+   size_t len;
++  size_t rv_neverused ATTRIBUTE_UNUSED;
+ 
+   line = sym ? DECL_SOURCE_LINE (sym) : 0;
+   if (DBX_CONTIN_LENGTH > 0)
+@@ -867,7 +868,7 @@ dbxout_finish_complex_stabs (tree sym, STAB_CODE_TYPE code,
+       for (;;)
+ 	{
+ 	  chunklen = strlen (chunk);
+-	  fwrite (chunk, 1, chunklen, asm_out_file);
++	  rv_neverused = fwrite (chunk, 1, chunklen, asm_out_file);
+ 	  fputs ("\",", asm_out_file);
+ 
+ 	  /* Must add an extra byte to account for the NUL separator.  */
+@@ -894,7 +895,7 @@ dbxout_finish_complex_stabs (tree sym, STAB_CODE_TYPE code,
+       len = obstack_object_size (&stabstr_ob);
+       str = XOBFINISH (&stabstr_ob, char *);
+       
+-      fwrite (str, 1, len, asm_out_file);
++      rv_neverused = fwrite (str, 1, len, asm_out_file);
+       DBX_FINISH_STABS (sym, code, line, addr, label, number);
+     }
+   obstack_free (&stabstr_ob, str);
+--- a/src/gcc/diagnostic.c
++++ b/src/gcc/diagnostic.c
+@@ -70,9 +70,10 @@ build_message_string (const char *msg, ...)
+ {
+   char *str;
+   va_list ap;
++  size_t rv_neverused ATTRIBUTE_UNUSED;
+ 
+   va_start (ap, msg);
+-  vasprintf (&str, msg, ap);
++  rv_neverused = vasprintf (&str, msg, ap);
+   va_end (ap);
+ 
+   return str;
+--- a/src/gcc/final.c
++++ b/src/gcc/final.c
+@@ -2989,12 +2989,13 @@ output_operand_lossage (const char *cmsgid, ...)
+   char *new_message;
+   const char *pfx_str;
+   va_list ap;
++  int rv_neverused ATTRIBUTE_UNUSED;
+ 
+   va_start (ap, cmsgid);
+ 
+   pfx_str = this_is_asm_operands ? _("invalid 'asm': ") : "output_operand: ";
+-  asprintf (&fmt_string, "%s%s", pfx_str, _(cmsgid));
+-  vasprintf (&new_message, fmt_string, ap);
++  rv_neverused = asprintf (&fmt_string, "%s%s", pfx_str, _(cmsgid));
++  rv_neverused = vasprintf (&new_message, fmt_string, ap);
+ 
+   if (this_is_asm_operands)
+     error_for_asm (this_is_asm_operands, "%s", new_message);
+--- a/src/gcc/fold-const.c
++++ b/src/gcc/fold-const.c
+@@ -1025,7 +1025,7 @@ fold_overflow_warning (const char* gmsgid, enum warn_strict_overflow_code wc)
+ 	}
+     }
+   else if (issue_strict_overflow_warning (wc))
+-    warning (OPT_Wstrict_overflow, gmsgid);
++    warning (OPT_Wstrict_overflow, "%s", gmsgid);
+ }
+ 
+ /* Return true if the built-in mathematical function specified by CODE
+--- a/src/gcc/fortran/cpp.c
++++ b/src/gcc/fortran/cpp.c
+@@ -729,8 +729,9 @@ scan_translation_unit_trad (cpp_reader *pfile)
+   while (_cpp_read_logical_line_trad (pfile))
+     {
+       size_t len = pfile->out.cur - pfile->out.base;
++      size_t rv_neverused ATTRIBUTE_UNUSED;
+       maybe_print_line (pfile->out.first_line);
+-      fwrite (pfile->out.base, 1, len, print.outf);
++      rv_neverused = fwrite (pfile->out.base, 1, len, print.outf);
+       print.printed = 1;
+       if (!CPP_OPTION (pfile, discard_comments))
+ 	account_for_newlines (pfile->out.base, len);
+--- a/src/gcc/fortran/decl.c
++++ b/src/gcc/fortran/decl.c
+@@ -1954,7 +1954,7 @@ kind_expr:
+ 
+   if (msg != NULL)
+     {
+-      gfc_error (msg);
++      gfc_error ("%s", msg);
+       m = MATCH_ERROR;
+       goto no_match;
+     }
+@@ -2060,7 +2060,7 @@ match_char_kind (int * kind, int * is_iso_c)
+   *is_iso_c = e->ts.is_iso_c;
+   if (msg != NULL)
+     {
+-      gfc_error (msg);
++      gfc_error ("%s", msg);
+       m = MATCH_ERROR;
+       goto no_match;
+     }
+--- a/src/gcc/fortran/intrinsic.c
++++ b/src/gcc/fortran/intrinsic.c
+@@ -262,11 +262,11 @@ add_sym (const char *name, gfc_isym_id id, enum klass cl, int actual_ok, bt type
+       break;
+ 
+     case SZ_NOTHING:
+-      next_sym->name = gfc_get_string (name);
++      next_sym->name = gfc_get_string ("%s", name);
+ 
+       strcpy (buf, "_gfortran_");
+       strcat (buf, name);
+-      next_sym->lib_name = gfc_get_string (buf);
++      next_sym->lib_name = gfc_get_string ("%s", buf);
+ 
+       next_sym->elemental = (cl == CLASS_ELEMENTAL);
+       next_sym->inquiry = (cl == CLASS_INQUIRY);
+@@ -722,7 +722,7 @@ find_sym (gfc_intrinsic_sym *start, int n, const char *name)
+   /* name may be a user-supplied string, so we must first make sure
+      that we're comparing against a pointer into the global string
+      table.  */
+-  const char *p = gfc_get_string (name);
++  const char *p = gfc_get_string ("%s", name);
+ 
+   while (n > 0)
+     {
+@@ -918,7 +918,7 @@ make_alias (const char *name, int standard)
+ 
+     case SZ_NOTHING:
+       next_sym[0] = next_sym[-1];
+-      next_sym->name = gfc_get_string (name);
++      next_sym->name = gfc_get_string ("%s", name);
+       next_sym->standard = standard;
+       next_sym++;
+       break;
+--- a/src/gcc/fortran/match.c
++++ b/src/gcc/fortran/match.c
+@@ -391,7 +391,7 @@ gfc_match_small_int (int *value)
+ 
+   if (p != NULL)
+     {
+-      gfc_error (p);
++      gfc_error ("%s", p);
+       m = MATCH_ERROR;
+     }
+ 
+@@ -423,7 +423,7 @@ gfc_match_small_int_expr (int *value, gfc_expr **expr)
+ 
+   if (p != NULL)
+     {
+-      gfc_error (p);
++      gfc_error ("%s", p);
+       m = MATCH_ERROR;
+     }
+ 
+--- a/src/gcc/fortran/matchexp.c
++++ b/src/gcc/fortran/matchexp.c
+@@ -193,7 +193,7 @@ match_primary (gfc_expr **result)
+   return MATCH_YES;
+ 
+ syntax:
+-  gfc_error (expression_syntax);
++  gfc_error ("%s", expression_syntax);
+   return MATCH_ERROR;
+ }
+ 
+@@ -496,7 +496,7 @@ match_level_2 (gfc_expr **result)
+       m = match_ext_add_operand (&e);
+       if (m == MATCH_NO)
+ 	{
+-	  gfc_error (expression_syntax);
++	  gfc_error ("%s", expression_syntax);
+ 	  m = MATCH_ERROR;
+ 	}
+     }
+@@ -535,7 +535,7 @@ match_level_2 (gfc_expr **result)
+ 
+       m = match_ext_add_operand (&e);
+       if (m == MATCH_NO)
+-	gfc_error (expression_syntax);
++	gfc_error ("%s", expression_syntax);
+       if (m != MATCH_YES)
+ 	{
+ 	  gfc_free_expr (all);
+@@ -586,7 +586,7 @@ match_level_3 (gfc_expr **result)
+       m = match_level_2 (&e);
+       if (m == MATCH_NO)
+ 	{
+-	  gfc_error (expression_syntax);
++	  gfc_error ("%s", expression_syntax);
+ 	  gfc_free_expr (all);
+ 	}
+       if (m != MATCH_YES)
+@@ -646,7 +646,7 @@ match_level_4 (gfc_expr **result)
+ 
+   m = match_level_3 (&right);
+   if (m == MATCH_NO)
+-    gfc_error (expression_syntax);
++    gfc_error ("%s", expression_syntax);
+   if (m != MATCH_YES)
+     {
+       gfc_free_expr (left);
+@@ -755,7 +755,7 @@ match_or_operand (gfc_expr **result)
+ 
+       m = match_and_operand (&e);
+       if (m == MATCH_NO)
+-	gfc_error (expression_syntax);
++	gfc_error ("%s", expression_syntax);
+       if (m != MATCH_YES)
+ 	{
+ 	  gfc_free_expr (all);
+@@ -798,7 +798,7 @@ match_equiv_operand (gfc_expr **result)
+ 
+       m = match_or_operand (&e);
+       if (m == MATCH_NO)
+-	gfc_error (expression_syntax);
++	gfc_error ("%s", expression_syntax);
+       if (m != MATCH_YES)
+ 	{
+ 	  gfc_free_expr (all);
+@@ -852,7 +852,7 @@ match_level_5 (gfc_expr **result)
+ 
+       m = match_equiv_operand (&e);
+       if (m == MATCH_NO)
+-	gfc_error (expression_syntax);
++	gfc_error ("%s", expression_syntax);
+       if (m != MATCH_YES)
+ 	{
+ 	  gfc_free_expr (all);
+@@ -911,7 +911,7 @@ gfc_match_expr (gfc_expr **result)
+ 
+       m = match_level_5 (&e);
+       if (m == MATCH_NO)
+-	gfc_error (expression_syntax);
++	gfc_error ("%s", expression_syntax);
+       if (m != MATCH_YES)
+ 	{
+ 	  gfc_free_expr (all);
+--- a/src/gcc/fortran/module.c
++++ b/src/gcc/fortran/module.c
+@@ -805,9 +805,9 @@ find_true_name (const char *name, const char *module)
+   gfc_symbol sym;
+   int c;
+ 
+-  sym.name = gfc_get_string (name);
++  sym.name = gfc_get_string ("%s", name);
+   if (module != NULL)
+-    sym.module = gfc_get_string (module);
++    sym.module = gfc_get_string ("%s", module);
+   else
+     sym.module = NULL;
+   t.sym = &sym;
+@@ -1612,7 +1612,7 @@ mio_pool_string (const char **stringp)
+   else
+     {
+       require_atom (ATOM_STRING);
+-      *stringp = atom_string[0] == '\0' ? NULL : gfc_get_string (atom_string);
++      *stringp = atom_string[0] == '\0' ? NULL : gfc_get_string ("%s", atom_string);
+       gfc_free (atom_string);
+     }
+ }
+@@ -2460,7 +2460,7 @@ mio_symtree_ref (gfc_symtree **stp)
+ 	    {
+ 	      p->u.rsym.sym = gfc_new_symbol (p->u.rsym.true_name,
+ 					      gfc_current_ns);
+-	      p->u.rsym.sym->module = gfc_get_string (p->u.rsym.module);
++	      p->u.rsym.sym->module = gfc_get_string ("%s", p->u.rsym.module);
+ 	    }
+ 
+ 	  p->u.rsym.symtree->n.sym = p->u.rsym.sym;
+@@ -2967,7 +2967,7 @@ mio_expr (gfc_expr **ep)
+       else
+ 	{
+ 	  require_atom (ATOM_STRING);
+-	  e->value.function.name = gfc_get_string (atom_string);
++	  e->value.function.name = gfc_get_string ("%s", atom_string);
+ 	  gfc_free (atom_string);
+ 
+ 	  mio_integer (&flag);
+@@ -3695,8 +3695,8 @@ load_generic_interfaces (void)
+ 	      if (!sym)
+ 		{
+ 		  gfc_get_symbol (p, NULL, &sym);
+-		  sym->name = gfc_get_string (name);
+-		  sym->module = gfc_get_string (module_name);
++		  sym->name = gfc_get_string ("%s", name);
++		  sym->module = gfc_get_string ("%s", module_name);
+ 		  sym->attr.flavor = FL_PROCEDURE;
+ 		  sym->attr.generic = 1;
+ 		  sym->attr.use_assoc = 1;
+@@ -3901,7 +3901,7 @@ load_needed (pointer_info *p)
+ 				 1, &ns->proc_name);
+ 
+       sym = gfc_new_symbol (p->u.rsym.true_name, ns);
+-      sym->module = gfc_get_string (p->u.rsym.module);
++      sym->module = gfc_get_string ("%s", p->u.rsym.module);
+       strcpy (sym->binding_label, p->u.rsym.binding_label);
+ 
+       associate_integer_pointer (p, sym);
+@@ -4162,7 +4162,7 @@ read_module (void)
+ 		  info->u.rsym.sym = gfc_new_symbol (info->u.rsym.true_name,
+ 						     gfc_current_ns);
+ 		  sym = info->u.rsym.sym;
+-		  sym->module = gfc_get_string (info->u.rsym.module);
++		  sym->module = gfc_get_string ("%s", info->u.rsym.module);
+ 
+ 		  /* TODO: hmm, can we test this?  Do we know it will be
+ 		     initialized to zeros?  */
+@@ -4521,7 +4521,7 @@ write_symbol0 (gfc_symtree *st)
+ 
+   sym = st->n.sym;
+   if (sym->module == NULL)
+-    sym->module = gfc_get_string (module_name);
++    sym->module = gfc_get_string ("%s", module_name);
+ 
+   if (sym->attr.flavor == FL_PROCEDURE && sym->attr.generic
+       && !sym->attr.subroutine && !sym->attr.function)
+@@ -4614,7 +4614,7 @@ write_generic (gfc_symtree *st)
+     return;
+ 
+   if (sym->module == NULL)
+-    sym->module = gfc_get_string (module_name);
++    sym->module = gfc_get_string ("%s", module_name);
+ 
+   mio_symbol_interface (&st->name, &sym->module, &sym->generic);
+ }
+@@ -4962,7 +4962,7 @@ import_iso_c_binding_module (void)
+ 
+       mod_sym->attr.flavor = FL_MODULE;
+       mod_sym->attr.intrinsic = 1;
+-      mod_sym->module = gfc_get_string (iso_c_module_name);
++      mod_sym->module = gfc_get_string ("%s", iso_c_module_name);
+       mod_sym->from_intmod = INTMOD_ISO_C_BINDING;
+     }
+ 
+@@ -5039,7 +5039,7 @@ create_int_parameter (const char *name, int value, const char *modname,
+   gfc_get_sym_tree (name, gfc_current_ns, &tmp_symtree);
+   sym = tmp_symtree->n.sym;
+ 
+-  sym->module = gfc_get_string (modname);
++  sym->module = gfc_get_string ("%s", modname);
+   sym->attr.flavor = FL_PARAMETER;
+   sym->ts.type = BT_INTEGER;
+   sym->ts.kind = gfc_default_integer_kind;
+@@ -5083,7 +5083,7 @@ use_iso_fortran_env_module (void)
+ 
+       mod_sym->attr.flavor = FL_MODULE;
+       mod_sym->attr.intrinsic = 1;
+-      mod_sym->module = gfc_get_string (mod);
++      mod_sym->module = gfc_get_string ("%s", mod);
+       mod_sym->from_intmod = INTMOD_ISO_FORTRAN_ENV;
+     }
+   else
+@@ -5279,7 +5279,7 @@ gfc_use_module (void)
+   fclose (module_fp);
+ 
+   use_stmt = gfc_get_use_list ();
+-  use_stmt->module_name = gfc_get_string (module_name);
++  use_stmt->module_name = gfc_get_string ("%s", module_name);
+   use_stmt->only_flag = only_flag;
+   use_stmt->rename = gfc_rename_list;
+   use_stmt->where = use_locus;
+--- a/src/gcc/fortran/openmp.c
++++ b/src/gcc/fortran/openmp.c
+@@ -396,7 +396,7 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, int mask)
+ 	      const char *p = gfc_extract_int (cexpr, &collapse);
+ 	      if (p)
+ 		{
+-		  gfc_error (p);
++		  gfc_error ("%s", p);
+ 		  collapse = 1;
+ 		}
+ 	      else if (collapse <= 0)
+--- a/src/gcc/fortran/primary.c
++++ b/src/gcc/fortran/primary.c
+@@ -255,7 +255,7 @@ match_hollerith_constant (gfc_expr **result)
+       msg = gfc_extract_int (e, &num);
+       if (msg != NULL)
+ 	{
+-	  gfc_error (msg);
++	  gfc_error ("%s", msg);
+ 	  goto cleanup;
+ 	}
+       if (num == 0)
+@@ -924,7 +924,7 @@ match_string_constant (gfc_expr **result)
+       q = gfc_extract_int (sym->value, &kind);
+       if (q != NULL)
+ 	{
+-	  gfc_error (q);
++	  gfc_error ("%s", q);
+ 	  return MATCH_ERROR;
+ 	}
+       gfc_set_sym_referenced (sym);
+@@ -1479,7 +1479,7 @@ match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base)
+ 	  }
+     }
+ 
+-  actual->name = gfc_get_string (name);
++  actual->name = gfc_get_string ("%s", name);
+   return MATCH_YES;
+ 
+ cleanup:
+--- a/src/gcc/fortran/symbol.c
++++ b/src/gcc/fortran/symbol.c
+@@ -1759,7 +1759,7 @@ gfc_add_component (gfc_symbol *sym, const char *name,
+   else
+     tail->next = p;
+ 
+-  p->name = gfc_get_string (name);
++  p->name = gfc_get_string ("%s", name);
+   p->loc = gfc_current_locus;
+ 
+   *component = p;
+@@ -2251,7 +2251,7 @@ gfc_new_symtree (gfc_symtree **root, const char *name)
+   gfc_symtree *st;
+ 
+   st = XCNEW (gfc_symtree);
+-  st->name = gfc_get_string (name);
++  st->name = gfc_get_string ("%s", name);
+   st->typebound = NULL;
+ 
+   gfc_insert_bbt (root, st, compare_symtree);
+@@ -2268,7 +2268,7 @@ gfc_delete_symtree (gfc_symtree **root, const char *name)
+ 
+   st0 = gfc_find_symtree (*root, name);
+ 
+-  st.name = gfc_get_string (name);
++  st.name = gfc_get_string ("%s", name);
+   gfc_delete_bbt (root, &st, compare_symtree);
+ 
+   gfc_free (st0);
+@@ -2327,7 +2327,7 @@ gfc_get_uop (const char *name)
+   st = gfc_new_symtree (&gfc_current_ns->uop_root, name);
+ 
+   uop = st->n.uop = XCNEW (gfc_user_op);
+-  uop->name = gfc_get_string (name);
++  uop->name = gfc_get_string ("%s", name);
+   uop->access = ACCESS_UNKNOWN;
+   uop->ns = gfc_current_ns;
+ 
+@@ -2399,7 +2399,7 @@ gfc_new_symbol (const char *name, gfc_namespace *ns)
+   if (strlen (name) > GFC_MAX_SYMBOL_LEN)
+     gfc_internal_error ("new_symbol(): Symbol name too long");
+ 
+-  p->name = gfc_get_string (name);
++  p->name = gfc_get_string ("%s", name);
+ 
+   /* Make sure flags for symbol being C bound are clear initially.  */
+   p->attr.is_bind_c = 0;
+@@ -3280,7 +3280,7 @@ gfc_get_gsymbol (const char *name)
+ 
+   s = XCNEW (gfc_gsymbol);
+   s->type = GSYM_UNKNOWN;
+-  s->name = gfc_get_string (name);
++  s->name = gfc_get_string ("%s", name);
+ 
+   gfc_insert_bbt (&gfc_gsym_root, s, gsym_compare);
+ 
+@@ -3517,7 +3517,7 @@ gen_special_c_interop_ptr (int ptr_id, const char *ptr_name,
+     }
+ 
+   /* Module name is some mangled version of iso_c_binding.  */
+-  tmp_sym->module = gfc_get_string (module_name);
++  tmp_sym->module = gfc_get_string ("%s", module_name);
+   
+   /* Say it's from the iso_c_binding module.  */
+   tmp_sym->attr.is_iso_c = 1;
+@@ -3637,7 +3637,7 @@ gen_cptr_param (gfc_formal_arglist **head,
+     }
+ 
+   param_sym->ts.derived = c_ptr_sym;
+-  param_sym->module = gfc_get_string (module_name);
++  param_sym->module = gfc_get_string ("%s", module_name);
+ 
+   /* Make new formal arg.  */
+   formal_arg = gfc_get_formal_arglist ();
+@@ -3682,7 +3682,7 @@ gen_fptr_param (gfc_formal_arglist **head,
+ 
+   /* ISO C Binding type to allow any pointer type as actual param.  */
+   param_sym->ts.type = BT_VOID;
+-  param_sym->module = gfc_get_string (module_name);
++  param_sym->module = gfc_get_string ("%s", module_name);
+    
+   /* Make the arg.  */
+   formal_arg = gfc_get_formal_arglist ();
+@@ -3753,7 +3753,7 @@ gen_shape_param (gfc_formal_arglist **head,
+   param_sym->attr.optional = 1;
+   param_sym->attr.intent = INTENT_IN;
+   param_sym->attr.dimension = 1;
+-  param_sym->module = gfc_get_string (module_name);
++  param_sym->module = gfc_get_string ("%s", module_name);
+    
+   /* Make the arg.  */
+   formal_arg = gfc_get_formal_arglist ();
+@@ -3957,7 +3957,7 @@ generate_isocbinding_symbol (const char *mod_name, iso_c_binding_symbol s,
+ 			"create symbol");
+ 
+   /* Say what module this symbol belongs to.  */
+-  tmp_sym->module = gfc_get_string (mod_name);
++  tmp_sym->module = gfc_get_string ("%s", mod_name);
+   tmp_sym->from_intmod = INTMOD_ISO_C_BINDING;
+   tmp_sym->intmod_sym_id = s;
+ 
+@@ -4234,7 +4234,7 @@ get_iso_c_sym (gfc_symbol *old_sym, char *new_name,
+   strcpy (new_symtree->n.sym->binding_label, new_binding_label);
+   new_symtree->n.sym->attr = old_sym->attr;
+   new_symtree->n.sym->ts = old_sym->ts;
+-  new_symtree->n.sym->module = gfc_get_string (old_sym->module);
++  new_symtree->n.sym->module = gfc_get_string ("%s", old_sym->module);
+   new_symtree->n.sym->from_intmod = old_sym->from_intmod;
+   new_symtree->n.sym->intmod_sym_id = old_sym->intmod_sym_id;
+   /* Build the formal arg list.  */
+--- a/src/gcc/fortran/trans-array.c
++++ b/src/gcc/fortran/trans-array.c
+@@ -2232,6 +2232,7 @@ gfc_trans_array_bound_check (gfc_se * se, tree descriptor, tree index, int n,
+   tree tmp;
+   char *msg;
+   const char * name = NULL;
++  int rv_neverused ATTRIBUTE_UNUSED;
+ 
+   if (!flag_bounds_check)
+     return index;
+@@ -2270,11 +2271,13 @@ gfc_trans_array_bound_check (gfc_se * se, tree descriptor, tree index, int n,
+   tmp = gfc_conv_array_lbound (descriptor, n);
+   fault = fold_build2 (LT_EXPR, boolean_type_node, index, tmp);
+   if (name)
+-    asprintf (&msg, "%s for array '%s', lower bound of dimension %d exceeded"
+-	      "(%%ld < %%ld)", gfc_msg_fault, name, n+1);
++    rv_neverused =
++      asprintf (&msg, "%s for array '%s', lower bound of dimension %d exceeded"
++		"(%%ld < %%ld)", gfc_msg_fault, name, n+1);
+   else
+-    asprintf (&msg, "%s, lower bound of dimension %d exceeded (%%ld < %%ld)",
+-	      gfc_msg_fault, n+1);
++    rv_neverused =
++      asprintf (&msg, "%s, lower bound of dimension %d exceeded (%%ld < %%ld)",
++		gfc_msg_fault, n+1);
+   gfc_trans_runtime_check (true, false, fault, &se->pre, where, msg,
+ 			   fold_convert (long_integer_type_node, index),
+ 			   fold_convert (long_integer_type_node, tmp));
+@@ -2286,11 +2289,14 @@ gfc_trans_array_bound_check (gfc_se * se, tree descriptor, tree index, int n,
+       tmp = gfc_conv_array_ubound (descriptor, n);
+       fault = fold_build2 (GT_EXPR, boolean_type_node, index, tmp);
+       if (name)
+-	asprintf (&msg, "%s for array '%s', upper bound of dimension %d "
+-			" exceeded (%%ld > %%ld)", gfc_msg_fault, name, n+1);
++	rv_neverused =
++	  asprintf (&msg, "%s for array '%s', upper bound of dimension %d "
++		    " exceeded (%%ld > %%ld)", gfc_msg_fault, name, n+1);
+       else
+-	asprintf (&msg, "%s, upper bound of dimension %d exceeded (%%ld > %%ld)",
+-		  gfc_msg_fault, n+1);
++	rv_neverused =
++	  asprintf (&msg,
++		    "%s, upper bound of dimension %d exceeded (%%ld > %%ld)",
++		    gfc_msg_fault, n+1);
+       gfc_trans_runtime_check (true, false, fault, &se->pre, where, msg,
+ 			       fold_convert (long_integer_type_node, index),
+ 			       fold_convert (long_integer_type_node, tmp));
+@@ -2474,6 +2480,7 @@ gfc_conv_array_ref (gfc_se * se, gfc_array_ref * ar, gfc_symbol * sym,
+ 	  /* Check array bounds.  */
+ 	  tree cond;
+ 	  char *msg;
++	  int rv_neverused ATTRIBUTE_UNUSED;
+ 
+ 	  /* Evaluate the indexse.expr only once.  */
+ 	  indexse.expr = save_expr (indexse.expr);
+@@ -2482,9 +2489,10 @@ gfc_conv_array_ref (gfc_se * se, gfc_array_ref * ar, gfc_symbol * sym,
+ 	  tmp = gfc_conv_array_lbound (se->expr, n);
+ 	  cond = fold_build2 (LT_EXPR, boolean_type_node, 
+ 			      indexse.expr, tmp);
+-	  asprintf (&msg, "%s for array '%s', "
+-	            "lower bound of dimension %d exceeded (%%ld < %%ld)",
+-		    gfc_msg_fault, sym->name, n+1);
++	  rv_neverused =
++	    asprintf (&msg, "%s for array '%s', "
++		      "lower bound of dimension %d exceeded (%%ld < %%ld)",
++		      gfc_msg_fault, sym->name, n+1);
+ 	  gfc_trans_runtime_check (true, false, cond, &se->pre, where, msg,
+ 				   fold_convert (long_integer_type_node,
+ 						 indexse.expr),
+@@ -2499,9 +2507,10 @@ gfc_conv_array_ref (gfc_se * se, gfc_array_ref * ar, gfc_symbol * sym,
+ 	      tmp = gfc_conv_array_ubound (se->expr, n);
+ 	      cond = fold_build2 (GT_EXPR, boolean_type_node, 
+ 				  indexse.expr, tmp);
+-	      asprintf (&msg, "%s for array '%s', "
+-			"upper bound of dimension %d exceeded (%%ld > %%ld)",
+-			gfc_msg_fault, sym->name, n+1);
++	      rv_neverused =
++		asprintf (&msg, "%s for array '%s', "
++			  "upper bound of dimension %d exceeded (%%ld > %%ld)",
++			  gfc_msg_fault, sym->name, n+1);
+ 	      gfc_trans_runtime_check (true, false, cond, &se->pre, where, msg,
+ 				   fold_convert (long_integer_type_node,
+ 						 indexse.expr),
+@@ -3048,6 +3057,7 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
+ 	  for (n = 0; n < loop->dimen; n++)
+ 	    {
+ 	      bool check_upper;
++	      int rv_neverused ATTRIBUTE_UNUSED;
+ 
+ 	      dim = info->dim[n];
+ 	      if (info->ref->u.ar.dimen_type[dim] != DIMEN_RANGE)
+@@ -3063,9 +3073,10 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
+ 	      /* Zero stride is not allowed.  */
+ 	      tmp = fold_build2 (EQ_EXPR, boolean_type_node, info->stride[n],
+ 				 gfc_index_zero_node);
+-	      asprintf (&msg, "Zero stride is not allowed, for dimension %d "
+-			"of array '%s'", info->dim[n]+1,
+-			ss->expr->symtree->name);
++	      rv_neverused = 
++		asprintf (&msg, "Zero stride is not allowed, for dimension %d "
++			  "of array '%s'", info->dim[n]+1,
++			  ss->expr->symtree->name);
+ 	      gfc_trans_runtime_check (true, false, tmp, &inner,
+ 				       &ss->expr->where, msg);
+ 	      gfc_free (msg);
+@@ -3106,9 +3117,10 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
+ 				 lbound);
+ 	      tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
+ 				 non_zerosized, tmp);
+-	      asprintf (&msg, "%s, lower bound of dimension %d of array '%s'"
+-			" exceeded (%%ld < %%ld)", gfc_msg_fault,
+-			info->dim[n]+1, ss->expr->symtree->name);
++	      rv_neverused =
++		asprintf (&msg, "%s, lower bound of dimension %d of array '%s'"
++			  " exceeded (%%ld < %%ld)", gfc_msg_fault,
++			  info->dim[n]+1, ss->expr->symtree->name);
+ 	      gfc_trans_runtime_check (true, false, tmp, &inner,
+ 				       &ss->expr->where, msg,
+ 				       fold_convert (long_integer_type_node,
+@@ -3123,9 +3135,10 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
+ 				     info->start[n], ubound);
+ 		  tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
+ 				     non_zerosized, tmp);
+-	          asprintf (&msg, "%s, upper bound of dimension %d of array "
+-			    "'%s' exceeded (%%ld > %%ld)", gfc_msg_fault,
+-			    info->dim[n]+1, ss->expr->symtree->name);
++	          rv_neverused =
++		    asprintf (&msg, "%s, upper bound of dimension %d of array "
++			      "'%s' exceeded (%%ld > %%ld)", gfc_msg_fault,
++			      info->dim[n]+1, ss->expr->symtree->name);
+ 		  gfc_trans_runtime_check (true, false, tmp, &inner,
+ 			&ss->expr->where, msg,
+ 			fold_convert (long_integer_type_node, info->start[n]),
+@@ -3146,9 +3159,10 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
+ 	      tmp = fold_build2 (LT_EXPR, boolean_type_node, tmp2, lbound);
+ 	      tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
+ 				 non_zerosized, tmp);
+-	      asprintf (&msg, "%s, lower bound of dimension %d of array '%s'"
+-			" exceeded (%%ld < %%ld)", gfc_msg_fault,
+-			info->dim[n]+1, ss->expr->symtree->name);
++	      rv_neverused =
++		asprintf (&msg, "%s, lower bound of dimension %d of array '%s'"
++			  " exceeded (%%ld < %%ld)", gfc_msg_fault,
++			  info->dim[n]+1, ss->expr->symtree->name);
+ 	      gfc_trans_runtime_check (true, false, tmp, &inner,
+ 				       &ss->expr->where, msg,
+ 				       fold_convert (long_integer_type_node,
+@@ -3162,9 +3176,10 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
+ 		  tmp = fold_build2 (GT_EXPR, boolean_type_node, tmp2, ubound);
+ 		  tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
+ 				     non_zerosized, tmp);
+-		  asprintf (&msg, "%s, upper bound of dimension %d of array "
+-			    "'%s' exceeded (%%ld > %%ld)", gfc_msg_fault,
+-			    info->dim[n]+1, ss->expr->symtree->name);
++		  rv_neverused =
++		    asprintf (&msg, "%s, upper bound of dimension %d of array "
++			      "'%s' exceeded (%%ld > %%ld)", gfc_msg_fault,
++			      info->dim[n]+1, ss->expr->symtree->name);
+ 		  gfc_trans_runtime_check (true, false, tmp, &inner,
+ 			&ss->expr->where, msg,
+ 			fold_convert (long_integer_type_node, tmp2),
+@@ -3186,9 +3201,10 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
+ 		  tree tmp3;
+ 
+ 		  tmp3 = fold_build2 (NE_EXPR, boolean_type_node, tmp, size[n]);
+-		  asprintf (&msg, "%s, size mismatch for dimension %d "
+-			    "of array '%s' (%%ld/%%ld)", gfc_msg_bounds,
+-			    info->dim[n]+1, ss->expr->symtree->name);
++		  rv_neverused =
++		    asprintf (&msg, "%s, size mismatch for dimension %d "
++			      "of array '%s' (%%ld/%%ld)", gfc_msg_bounds,
++			      info->dim[n]+1, ss->expr->symtree->name);
+ 		  gfc_trans_runtime_check (true, false, tmp3, &inner,
+ 					   &ss->expr->where, msg,
+ 			fold_convert (long_integer_type_node, tmp),
+@@ -4449,14 +4465,16 @@ gfc_trans_dummy_array_bias (gfc_symbol * sym, tree tmpdesc, tree body)
+ 	    {
+ 	      /* Check (ubound(a) - lbound(a) == ubound(b) - lbound(b)).  */
+ 	      char * msg;
++	      int rv_neverused ATTRIBUTE_UNUSED;
+ 
+ 	      tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type,
+ 				 ubound, lbound);
+               stride2 = fold_build2 (MINUS_EXPR, gfc_array_index_type,
+ 				     dubound, dlbound);
+               tmp = fold_build2 (NE_EXPR, gfc_array_index_type, tmp, stride2);
+-	      asprintf (&msg, "%s for dimension %d of array '%s'",
+-			gfc_msg_bounds, n+1, sym->name);
++	      rv_neverused =
++		asprintf (&msg, "%s for dimension %d of array '%s'",
++			  gfc_msg_bounds, n+1, sym->name);
+ 	      gfc_trans_runtime_check (true, false, tmp, &block, &loc, msg);
+ 	      gfc_free (msg);
+ 	    }
+@@ -5332,12 +5350,14 @@ gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, gfc_ss * ss, int g77,
+       if (gfc_option.flag_check_array_temporaries)
+ 	{
+ 	  char * msg;
++	  int rv_neverused ATTRIBUTE_UNUSED;
+ 
+ 	  if (fsym && proc_name)
+-	    asprintf (&msg, "An array temporary was created for argument "
+-		      "'%s' of procedure '%s'", fsym->name, proc_name);
++	    rv_neverused =
++	      asprintf (&msg, "An array temporary was created for argument "
++			"'%s' of procedure '%s'", fsym->name, proc_name);
+ 	  else
+-	    asprintf (&msg, "An array temporary was created");
++	    rv_neverused = asprintf (&msg, "An array temporary was created");
+ 
+ 	  tmp = build_fold_indirect_ref (desc);
+ 	  tmp = gfc_conv_array_data (tmp);
+--- a/src/gcc/fortran/trans-decl.c
++++ b/src/gcc/fortran/trans-decl.c
+@@ -3071,7 +3071,7 @@ gfc_find_module (const char *name)
+     {
+       struct module_htab_entry *entry = GGC_CNEW (struct module_htab_entry);
+ 
+-      entry->name = gfc_get_string (name);
++      entry->name = gfc_get_string ("%s", name);
+       entry->decls = htab_create_ggc (10, module_htab_decls_hash,
+ 				      module_htab_decls_eq, NULL);
+       *slot = (void *) entry;
+--- a/src/gcc/fortran/trans-expr.c
++++ b/src/gcc/fortran/trans-expr.c
+@@ -400,6 +400,8 @@ gfc_conv_substring (gfc_se * se, gfc_ref * ref, int kind,
+ 
+   if (flag_bounds_check)
+     {
++      int rv_neverused ATTRIBUTE_UNUSED;
++
+       tree nonempty = fold_build2 (LE_EXPR, boolean_type_node,
+ 				   start.expr, end.expr);
+ 
+@@ -409,11 +411,13 @@ gfc_conv_substring (gfc_se * se, gfc_ref * ref, int kind,
+       fault = fold_build2 (TRUTH_ANDIF_EXPR, boolean_type_node,
+ 			   nonempty, fault);
+       if (name)
+-	asprintf (&msg, "Substring out of bounds: lower bound (%%ld) of '%s' "
+-		  "is less than one", name);
++	rv_neverused =
++	  asprintf (&msg, "Substring out of bounds: lower bound (%%ld) of '%s' "
++		    "is less than one", name);
+       else
+-	asprintf (&msg, "Substring out of bounds: lower bound (%%ld)"
+-		  "is less than one");
++	rv_neverused =
++	  asprintf (&msg, "Substring out of bounds: lower bound (%%ld)"
++		    "is less than one");
+       gfc_trans_runtime_check (true, false, fault, &se->pre, where, msg,
+ 			       fold_convert (long_integer_type_node,
+ 					     start.expr));
+@@ -425,11 +429,13 @@ gfc_conv_substring (gfc_se * se, gfc_ref * ref, int kind,
+       fault = fold_build2 (TRUTH_ANDIF_EXPR, boolean_type_node,
+ 			   nonempty, fault);
+       if (name)
+-	asprintf (&msg, "Substring out of bounds: upper bound (%%ld) of '%s' "
+-		  "exceeds string length (%%ld)", name);
++	rv_neverused =
++	  asprintf (&msg, "Substring out of bounds: upper bound (%%ld) of '%s' "
++		    "exceeds string length (%%ld)", name);
+       else
+-	asprintf (&msg, "Substring out of bounds: upper bound (%%ld) "
+-		  "exceeds string length (%%ld)");
++	rv_neverused =
++	  asprintf (&msg, "Substring out of bounds: upper bound (%%ld) "
++		    "exceeds string length (%%ld)");
+       gfc_trans_runtime_check (true, false, fault, &se->pre, where, msg,
+ 			       fold_convert (long_integer_type_node, end.expr),
+ 			       fold_convert (long_integer_type_node,
+--- a/src/gcc/fortran/trans-io.c
++++ b/src/gcc/fortran/trans-io.c
+@@ -232,6 +232,7 @@ gfc_trans_io_runtime_check (tree cond, tree var, int error_code,
+   tree tmp;
+   tree arg1, arg2, arg3;
+   char *message;
++  int rv_neverused ATTRIBUTE_UNUSED;
+ 
+   if (integer_zerop (cond))
+     return;
+@@ -243,7 +244,7 @@ gfc_trans_io_runtime_check (tree cond, tree var, int error_code,
+   
+   arg2 = build_int_cst (integer_type_node, error_code),
+   
+-  asprintf (&message, "%s", _(msgid));
++  rv_neverused = asprintf (&message, "%s", _(msgid));
+   arg3 = gfc_build_addr_expr (pchar_type_node,
+ 			      gfc_build_localized_cstring_const (message));
+   gfc_free(message);
+@@ -660,14 +661,16 @@ set_string (stmtblock_t * block, stmtblock_t * postblock, tree var,
+     {
+       char * msg;
+       tree cond;
++      int rv_neverused ATTRIBUTE_UNUSED;
+ 
+       gfc_conv_label_variable (&se, e);
+       tmp = GFC_DECL_STRING_LEN (se.expr);
+       cond = fold_build2 (LT_EXPR, boolean_type_node,
+ 			  tmp, build_int_cst (TREE_TYPE (tmp), 0));
+ 
+-      asprintf(&msg, "Label assigned to variable '%s' (%%ld) is not a format "
+-	       "label", e->symtree->name);
++      rv_neverused =
++	asprintf(&msg, "Label assigned to variable '%s' (%%ld) is not a format "
++		 "label", e->symtree->name);
+       gfc_trans_runtime_check (true, false, cond, &se.pre, &e->where, msg,
+ 			       fold_convert (long_integer_type_node, tmp));
+       gfc_free (msg);
+--- a/src/gcc/fortran/trans.c
++++ b/src/gcc/fortran/trans.c
+@@ -371,6 +371,7 @@ gfc_trans_runtime_error_vararg (bool error, locus* where, const char* msgid,
+   char *message;
+   const char *p;
+   int line, nargs, i;
++  int rv_neverused ATTRIBUTE_UNUSED;
+ 
+   /* Compute the number of extra arguments from the format string.  */
+   for (p = msgid, nargs = 0; *p; p++)
+@@ -387,18 +388,18 @@ gfc_trans_runtime_error_vararg (bool error, locus* where, const char* msgid,
+   if (where)
+     {
+       line = LOCATION_LINE (where->lb->location);
+-      asprintf (&message, "At line %d of file %s",  line,
+-		where->lb->file->filename);
++      rv_neverused = asprintf (&message, "At line %d of file %s",  line,
++			       where->lb->file->filename);
+     }
+   else
+-    asprintf (&message, "In file '%s', around line %d",
+-	      gfc_source_file, input_line + 1);
++    rv_neverused = asprintf (&message, "In file '%s', around line %d",
++			     gfc_source_file, input_line + 1);
+ 
+   arg = gfc_build_addr_expr (pchar_type_node,
+ 			     gfc_build_localized_cstring_const (message));
+   gfc_free(message);
+   
+-  asprintf (&message, "%s", _(msgid));
++  rv_neverused = asprintf (&message, "%s", _(msgid));
+   arg2 = gfc_build_addr_expr (pchar_type_node,
+ 			      gfc_build_localized_cstring_const (message));
+   gfc_free(message);
+--- a/src/gcc/ira-conflicts.c
++++ b/src/gcc/ira-conflicts.c
+@@ -664,7 +664,7 @@ print_hard_reg_set (FILE *file, const char *title, HARD_REG_SET set)
+ {
+   int i, start;
+ 
+-  fprintf (file, title);
++  fputs (title, file);
+   for (start = -1, i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+     {
+       if (TEST_HARD_REG_BIT (set, i))
+--- a/src/gcc/objc/objc-act.c
++++ b/src/gcc/objc/objc-act.c
+@@ -988,7 +988,7 @@ objc_lookup_protocol (tree proto, tree cls, tree typ, bool warn)
+       strcat (errbuf, " the \'");
+       strcat (errbuf, IDENTIFIER_POINTER (PROTOCOL_NAME (proto)));
+       strcat (errbuf, "\' protocol");
+-      warning (0, errbuf);
++      warning (0, "%s", errbuf);
+     }
+ 
+   return false;
+--- a/src/gcc/opts.c
++++ b/src/gcc/opts.c
+@@ -1287,7 +1287,7 @@ print_filtered_help (unsigned int include_flags,
+ 		      if (* (const char **) option->flag_var != NULL)
+ 			snprintf (new_help + strlen (new_help),
+ 				  sizeof (new_help) - strlen (new_help),
+-				  * (const char **) option->flag_var);
++				  "%s", * (const char **) option->flag_var);
+ 		    }
+ 		  else
+ 		    sprintf (new_help + strlen (new_help),
+--- a/src/gcc/toplev.c
++++ b/src/gcc/toplev.c
+@@ -1182,7 +1182,7 @@ print_to_asm_out_file (print_switch_type type, const char * text)
+     case SWITCH_TYPE_ENABLED:
+       if (prepend_sep)
+ 	fputc (' ', asm_out_file);
+-      fprintf (asm_out_file, text);
++      fputs (text, asm_out_file);
+       /* No need to return the length here as
+ 	 print_single_switch has already done it.  */
+       return 0;
+@@ -1211,7 +1211,7 @@ print_to_stderr (print_switch_type type, const char * text)
+       /* Drop through.  */
+ 
+     case SWITCH_TYPE_DESCRIPTIVE:
+-      fprintf (stderr, text);
++      fputs (text, stderr);
+       /* No need to return the length here as
+ 	 print_single_switch has already done it.  */
+       return 0;
+@@ -1437,8 +1437,11 @@ static const char *
+ pch_option_mismatch (const char *option)
+ {
+   char *r;
++  int rv_neverused ATTRIBUTE_UNUSED;
+ 
+-  asprintf (&r, _("created and used with differing settings of '%s'"), option);
++  rv_neverused = asprintf (&r,
++			   _("created and used with differing settings of '%s'"),
++			   option);
+   if (r == NULL)
+     return _("out of memory");
+   return r;
+--- a/src/gcc/tree-data-ref.c
++++ b/src/gcc/tree-data-ref.c
+@@ -4607,13 +4607,14 @@ dot_rdg_1 (FILE *file, struct graph *rdg)
+ void
+ dot_rdg (struct graph *rdg)
+ {
++  int rv_neverused ATTRIBUTE_UNUSED;
+   FILE *file = fopen ("/tmp/rdg.dot", "w");
+   gcc_assert (file != NULL);
+ 
+   dot_rdg_1 (file, rdg);
+   fclose (file);
+ 
+-  system ("dotty /tmp/rdg.dot");
++  rv_neverused = system ("dotty /tmp/rdg.dot");
+ }
+ 
+ 
+--- a/src/gcc/tree-ssa-structalias.c
++++ b/src/gcc/tree-ssa-structalias.c
+@@ -4240,6 +4240,7 @@ create_function_info_for (tree decl, const char *name)
+   tree arg;
+   unsigned int i;
+   bool is_varargs = false;
++  int rv_neverused ATTRIBUTE_UNUSED;
+ 
+   /* Create the variable info.  */
+ 
+@@ -4279,7 +4280,7 @@ create_function_info_for (tree decl, const char *name)
+ 	argdecl = arg;
+ 
+       newindex = VEC_length (varinfo_t, varmap);
+-      asprintf (&tempname, "%s.arg%d", name, i-1);
++      rv_neverused = asprintf (&tempname, "%s.arg%d", name, i-1);
+       newname = ggc_strdup (tempname);
+       free (tempname);
+ 
+@@ -4315,7 +4316,7 @@ create_function_info_for (tree decl, const char *name)
+ 	resultdecl = DECL_RESULT (decl);
+ 
+       newindex = VEC_length (varinfo_t, varmap);
+-      asprintf (&tempname, "%s.result", name);
++      rv_neverused = asprintf (&tempname, "%s.result", name);
+       newname = ggc_strdup (tempname);
+       free (tempname);
+ 
+@@ -4474,9 +4475,11 @@ create_variable_info_for (tree decl, const char *name)
+ 	  newindex = VEC_length (varinfo_t, varmap);
+ 	  if (dump_file)
+ 	    {
+-	      asprintf (&tempname, "%s." HOST_WIDE_INT_PRINT_DEC
+-			"+" HOST_WIDE_INT_PRINT_DEC,
+-			vi->name, fo->offset, fo->size);
++	      int rv_neverused ATTRIBUTE_UNUSED;
++
++	      rv_neverused = asprintf (&tempname, "%s." HOST_WIDE_INT_PRINT_DEC
++				       "+" HOST_WIDE_INT_PRINT_DEC,
++				       vi->name, fo->offset, fo->size);
+ 	      newname = ggc_strdup (tempname);
+ 	      free (tempname);
+ 	    }
+--- a/src/gcc/tree-switch-conversion.c
++++ b/src/gcc/tree-switch-conversion.c
+@@ -858,7 +858,7 @@ do_switchconv (void)
+ 	      {
+ 		gcc_assert (info.reason);
+ 		fprintf (dump_file, "Bailing out - ");
+-		fprintf (dump_file, info.reason);
++		fprintf (dump_file, "%s", info.reason);
+ 		fprintf (dump_file, "--------------------------------\n");
+ 	      }
+ 	  }
+--- a/src/libcpp/lex.c
++++ b/src/libcpp/lex.c
+@@ -1512,6 +1512,8 @@ cpp_type2name (enum cpp_ttype type)
+ void
+ cpp_output_token (const cpp_token *token, FILE *fp)
+ {
++  size_t rv_neverused ATTRIBUTE_UNUSED;
++
+   switch (TOKEN_SPELL (token))
+     {
+     case SPELL_OPERATOR:
+@@ -1545,7 +1547,7 @@ cpp_output_token (const cpp_token *token, FILE *fp)
+ 	    {
+ 	      unsigned char buffer[10];
+ 	      i += utf8_to_ucn (buffer, name + i) - 1;
+-	      fwrite (buffer, 1, 10, fp);
++	      rv_neverused = fwrite (buffer, 1, 10, fp);
+ 	    }
+ 	  else
+ 	    fputc (NODE_NAME (token->val.node)[i], fp);
+@@ -1553,7 +1555,7 @@ cpp_output_token (const cpp_token *token, FILE *fp)
+       break;
+ 
+     case SPELL_LITERAL:
+-      fwrite (token->val.str.text, 1, token->val.str.len, fp);
++      rv_neverused = fwrite (token->val.str.text, 1, token->val.str.len, fp);
+       break;
+ 
+     case SPELL_NONE:
+--- a/src/libcpp/macro.c
++++ b/src/libcpp/macro.c
+@@ -1701,7 +1701,7 @@ create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
+ 	     function-like macros, but not at the end.  */
+ 	  if (following_paste_op)
+ 	    {
+-	      cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
++	      cpp_error (pfile, CPP_DL_ERROR, "%s", paste_op_error_msg);
+ 	      return false;
+ 	    }
+ 	  break;
+@@ -1714,7 +1714,7 @@ create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
+ 	     function-like macros, but not at the beginning.  */
+ 	  if (macro->count == 1)
+ 	    {
+-	      cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
++	      cpp_error (pfile, CPP_DL_ERROR, "%s", paste_op_error_msg);
+ 	      return false;
+ 	    }
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-driver-nophobos.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-driver-nophobos.diff
@@ -0,0 +1,49 @@
+# DP: Modify gdc driver to have no libphobos by default.
+
+--- a/src/gcc/d/d-lang.cc	2010-08-22 22:21:10.000000000 +0100
++++ b/src/gcc/d/d-lang.cc	2010-08-23 11:45:29.213787124 +0100
+@@ -185,7 +185,7 @@
+     global.params.fileImppath = new Array();
+ 
+     // GCC options
+-    flag_exceptions = 1;
++    flag_exceptions = 0;
+ 
+     // extra D-specific options
+     gen.splitDynArrayVarArgs = true;
+--- a/src/gcc/d/dmain.d	1970-01-01 01:00:00.000000000 +0100
++++ b/src/gcc/d/dmain.d	2010-08-23 11:46:32.289790644 +0100
+@@ -0,0 +1,22 @@
++extern (C) size_t strlen(const char* s);
++extern (C) void* malloc(size_t s);
++
++int main(char[][] args); // U _Dmain
++
++extern (C) int main(int argc, char** argv) {
++    char[][] args;
++    char[] *am;
++    int i;
++
++    am = cast(char[] *) malloc(argc * (char[]).sizeof);
++
++    for(i = 0; i < argc; i++) {
++	am[i] = argv[i][0 .. strlen(argv[i])];
++    }
++
++    args = am[0 .. argc];
++
++    return main(args);
++}
++
++
+--- a/src/gcc/d/d-spec.c	2010-08-19 12:30:20.000000000 +0100
++++ b/src/gcc/d/d-spec.c	2010-08-23 11:47:15.237799676 +0100
+@@ -88,7 +88,7 @@
+ 
+     /* If nonzero, use the standard D runtime library when linking with
+        standard libraries. */
+-    int phobos = 1;
++    int phobos = 0;
+ 
+     /* The number of arguments being added to what's in argv, other than
+        libraries.  We use this to track the number of times we've inserted
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/testsuite-hardening-fortify.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/testsuite-hardening-fortify.diff
@@ -0,0 +1,365 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: Description: check more functions to avoid -D_FORTIFY_SOURCE=2 warnings.
+# DP: Author: Kees Cook <kees@ubuntu.com>
+# DP: Ubuntu: https://bugs.launchpad.net/bugs/344502
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p1 < $0
+        #cd ${dir}gcc && autoconf
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
+        #rm ${dir}gcc/configure
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+2010-06-25  Kees Cook  <kees.cook@canonical.com>
+
+	* testsuite/27_io/ios_base/sync_with_stdio/1.cc: verify freopen.
+	* testsuite/27_io/objects/wchar_t/9520.cc: Likewise.
+	* testsuite/27_io/objects/wchar_t/9661-1.cc: Likewise.
+	* testsuite/27_io/objects/wchar_t/12048-2.cc: Likewise.
+	* testsuite/27_io/objects/wchar_t/12048-4.cc: Likewise.
+	* testsuite/27_io/objects/wchar_t/11.cc: Likewise.
+	* testsuite/27_io/objects/wchar_t/12048-1.cc: Likewise.
+	* testsuite/27_io/objects/wchar_t/12048-3.cc: Likewise.
+	* testsuite/27_io/objects/wchar_t/10.cc: Likewise.
+	* testsuite/27_io/objects/wchar_t/12048-5.cc: Likewise.
+	* testsuite/27_io/objects/char/9661-1.cc: Likewise.
+	* testsuite/27_io/objects/char/12048-2.cc: Likewise.
+	* testsuite/27_io/objects/char/12048-4.cc: Likewise.
+	* testsuite/27_io/objects/char/9.cc: Likewise.
+	* testsuite/27_io/objects/char/12048-1.cc: Likewise.
+	* testsuite/27_io/objects/char/12048-3.cc: Likewise.
+	* testsuite/27_io/objects/char/12048-5.cc: Likewise.
+	* testsuite/ext/stdio_sync_filebuf/wchar_t/12077.cc: Likewise.
+	* testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc: verify fgets.
+	* testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc: verify
+	fwrite.
+	* testsuite/ext/stdio_sync_filebuf/wchar_t/1.cc: Likewise.
+	* testsuite/ext/stdio_sync_filebuf/char/1.cc: Likewise.
+
+Index: libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc	(working
+@@ -41,7 +41,7 @@ void
+ test01()
+ {
+   std::ios_base::sync_with_stdio();
+-  std::freopen("ios_base_members_static-1.txt", "w", stderr);
++  VERIFY( std::freopen("ios_base_members_static-1.txt", "w", stderr) );
+  
+   for (int i = 0; i < 2; i++)
+     {
+Index: libstdc++-v3/testsuite/27_io/objects/wchar_t/9520.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/9520.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/9520.cc	(working
+@@ -38,7 +38,7 @@ void test01()
+   locale loc (locale("de_DE.ISO-8859-15@euro"));
+   locale::global(loc); // Set locale for stdin
+ 
+-  freopen(name, "r", stdin);
++  VERIFY( freopen(name, "r", stdin) );
+ 
+   wcin.imbue(loc);
+ 
+Index: libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc	(working
+@@ -67,7 +67,7 @@ bool test01()
+       exit(0);
+     }
+ 
+-  freopen(name, "r", stdin);
++  VERIFY( freopen(name, "r", stdin) );
+   s1.wait();
+ 
+   wint_t c1 = fgetwc(stdin);
+Index: libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-2.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-2.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-2.cc	(working
+@@ -23,7 +23,7 @@
+ void
+ test01()
+ {
+-  std::freopen("cin_unget-1.txt", "r", stdin);
++  VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
+ 
+   wchar_t c1;
+   std::wint_t c2;
+Index: libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-4.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-4.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-4.cc	(working
+@@ -23,7 +23,7 @@
+ void
+ test01()
+ {
+-  std::freopen("cin_unget-1.txt", "r", stdin);
++  VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
+ 
+   wchar_t buf[2];
+   VERIFY( std::wcin.rdbuf()->sgetn(buf, 2) == 2 );
+Index: libstdc++-v3/testsuite/27_io/objects/wchar_t/11.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/11.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/11.cc	(working
+@@ -90,7 +90,7 @@ void test11()
+   };
+   size_t i_size = wcslen(i_lit);
+ 
+-  freopen(name, "w", stdout);
++  VERIFY( freopen(name, "w", stdout) );
+   
+   wcout.write(i_lit, i_size);
+   wcout.flush();
+Index: libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-1.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-1.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-1.cc	(working
+@@ -26,7 +26,7 @@
+ void
+ test01()
+ {
+-  std::freopen("cin_unget-1.txt", "r", stdin);
++  VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
+ 
+   wchar_t c1;
+   wchar_t c2;
+Index: libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-3.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-3.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-3.cc	(working
+@@ -27,7 +27,7 @@
+ void
+ test01()
+ {
+-  std::freopen("cin_unget-1.txt", "r", stdin);
++  VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
+ 
+   wchar_t buf[2];
+   VERIFY( std::wcin.rdbuf()->sgetn(buf, 2) == 2 );
+Index: libstdc++-v3/testsuite/27_io/objects/wchar_t/10.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/10.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/10.cc	(working
+@@ -95,7 +95,7 @@ void test10()
+   VERIFY( n == e_size );
+   fclose(file);
+ 
+-  freopen(name, "r", stdin);
++  VERIFY( freopen(name, "r", stdin) );
+   
+   wchar_t* wbuf = new wchar_t[i_size + 10];
+   wcin.read(wbuf, i_size + 10);
+Index: libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-5.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-5.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-5.cc	(working
+@@ -29,7 +29,7 @@
+ void
+ test01()
+ {
+-  std::freopen("cin_unget-1.txt", "r", stdin);
++  VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
+ 
+   wchar_t c1;
+   std::wint_t c2;
+Index: libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc	(working
+@@ -68,7 +68,7 @@ bool test01()
+       exit(0);
+     }
+ 
+-  freopen(name, "r", stdin);
++  VERIFY( freopen(name, "r", stdin) );
+   s1.wait();
+ 
+   int c1 = fgetc(stdin);
+Index: libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc	(working
+@@ -24,7 +24,7 @@
+ void
+ test01()
+ {
+-  std::freopen("cin_unget-1.txt", "r", stdin);
++  VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
+ 
+   char c1;
+   int c2;
+Index: libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc	(working
+@@ -24,7 +24,7 @@
+ void
+ test01()
+ {
+-  std::freopen("cin_unget-1.txt", "r", stdin);
++  VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
+ 
+   char buf[2];
+   VERIFY( std::cin.rdbuf()->sgetn(buf, 2) == 2 );
+Index: libstdc++-v3/testsuite/27_io/objects/char/9.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/char/9.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/char/9.cc	(working
+@@ -34,7 +34,7 @@ void test09()
+   fputs("abc\n", fout);
+   fclose(fout);
+ 
+-  freopen(name, "r", stdin);
++  VERIFY( freopen(name, "r", stdin) );
+  
+   // basic_streambuf::showmanyc returns 0.
+   VERIFY( 0 == std::cin.rdbuf()->in_avail() );
+Index: libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc	(working
+@@ -28,7 +28,7 @@
+ void
+ test01()
+ {
+-  std::freopen("cin_unget-1.txt", "r", stdin);
++  VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
+ 
+   char c1;
+   char c2;
+Index: libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc	(working
+@@ -25,7 +25,7 @@
+ void
+ test01()
+ {
+-  std::freopen("cin_unget-1.txt", "r", stdin);
++  VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
+ 
+   char buf[2];
+   VERIFY( std::cin.rdbuf()->sgetn(buf, 2) == 2 );
+Index: libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc	(working
+@@ -33,7 +33,7 @@
+ void
+ test01()
+ {
+-  std::freopen("cin_unget-1.txt", "r", stdin);
++  VERIFY( std::freopen("cin_unget-1.txt", "r", stdin) );
+ 
+   char c1;
+   int c2;
+Index: libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc	(working
+@@ -44,7 +44,7 @@ void test02()
+   
+   FILE* in = fopen(name, "r");
+   char str[256];
+-  fgets(str, 256, in);
++  VERIFY( fgets(str, 256, in) );
+   VERIFY( !strcmp(str, "Hello, world") );
+   fclose(in);
+ }
+Index: libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc	(revision
++++ b/src/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc	(working
+@@ -161,7 +161,7 @@ void test02()
+   const char* name = "tmp_11544-2";
+   
+   FILE* f = fopen(name, "w");
+-  fwrite("aaaab", 1, 5, f);
++  VERIFY( fwrite("aaaab", 1, 5, f) == 5 );
+   fclose(f);
+   
+   wifstream in;
+Index: libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/1.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/1.cc	(revision
++++ b/src/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/1.cc	(working
+@@ -33,7 +33,7 @@ void test01()
+   const char* name = "stdiobuf-1.txt";
+ 
+   FILE* fout = fopen(name, "w");
+-  fwrite(c_lit, 1, size, fout);
++  VERIFY( fwrite(c_lit, 1, size, fout) == size );
+   fclose(fout);
+ 
+   FILE* fin = fopen(name, "r");
+Index: libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12077.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12077.cc	(revision
++++ b/src/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12077.cc	(working
+@@ -64,7 +64,7 @@ void test01()
+   fputs(str, file);
+   fclose(file);
+   
+-  freopen(name, "r", stdin);
++  VERIFY( freopen(name, "r", stdin) );
+   
+   streamsize n = wcin.rdbuf()->in_avail();
+   while (n--)
+Index: libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc	(revision
++++ b/src/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc	(working
+@@ -33,7 +33,7 @@ void test01()
+   const char* name = "stdiobuf-1.txt";
+ 
+   FILE* fout = fopen(name, "w");
+-  fwrite(c_lit, 1, size, fout);
++  VERIFY( fwrite(c_lit, 1, size, fout) == size );
+   fclose(fout);
+ 
+   FILE* fin = fopen(name, "r");
+Index: libstdc++-v3/testsuite/util/testsuite_hooks.h
+===================================================================
+--- a/src/libstdc++-v3/testsuite/util/testsuite_hooks.h	(revision
++++ b/src/libstdc++-v3/testsuite/util/testsuite_hooks.h	(working
+@@ -1,7 +1,8 @@
+ // -*- C++ -*-
+ // Utility subroutines for the C++ library testsuite. 
+ //
+-// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
++// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
++// 2009, 2010
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+@@ -59,7 +60,7 @@
+ # include <cassert>
+ # define VERIFY(fn) assert(fn)
+ #else
+-# define VERIFY(fn) test &= (fn)
++# define VERIFY(fn) test &= bool(fn)
+ #endif
+ 
+ #ifdef _GLIBCXX_HAVE_UNISTD_H
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-libphobos-math.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-libphobos-math.diff
@@ -0,0 +1,28 @@
+# DP: Define fpclassify and signbit for systems that need it.
+
+--- a/src/gcc/d/phobos/gcc/cbridge_math.c	2010-04-21 13:08:40.000000000 +0100
++++ b/src/gcc/d/phobos/gcc/cbridge_math.c	2010-08-23 11:01:05.022792451 +0100
+@@ -21,6 +21,23 @@
+ #include <math.h>
+ #include "config.h"
+ 
++/* If undefined, define fpclassify and signbit here */
++#ifndef fpclassify
++# define fpclassify(x) \
++    (sizeof (x) == sizeof (float) \
++     ? __fpclassifyf (x) \
++     : sizeof (x) == sizeof (double) \
++     ? __fpclassify (x) : __fpclassifyl (x))
++#endif
++
++#ifndef signbit
++# define signbit(x) \
++    (sizeof (x) == sizeof (float) \
++     ? __signbitf (x) \
++     : sizeof (x) == sizeof (double) \
++     ? __signbit (x) : __signbitl (x))
++#endif
++
+ /*
+ #if HAVE_DISTINCT_LONG_DOUBLE
+ typedef long double my_long_double;
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libjava-disable-plugin.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libjava-disable-plugin.diff
@@ -0,0 +1,13 @@
+# DP: Don't build the gcjwebplugin, even when configured with --enable-plugin
+
+--- a/src/libjava/configure.ac~	2009-10-01 15:27:21.000000000 +0200
++++ b/src/libjava/configure.ac	2009-10-19 00:10:43.000000000 +0200
+@@ -65,6 +65,8 @@
+      esac],
+     [plugin_enabled=no]
+ )
++# FIXME: don't build the plugin, this option collides with GCC plugin support
++plugin_enabled=no
+ 
+ AC_ARG_ENABLE(gconf-peer,
+   AS_HELP_STRING([--enable-gconf-peer],
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/cell-branch.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/cell-branch.diff
@@ -0,0 +1,9472 @@
+# DP: Updates from the cell-4_4-branch up to 20100518
+
+svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_4-branch@xxxx svn://gcc.gnu.org/svn/gcc/branches/cell-4_4-branch
+
+Index: gcc/regrename.c
+===================================================================
+--- a/src/gcc/regrename.c	(.../gcc-4_4-branch)
++++ b/src/gcc/regrename.c	(.../cell-4_4-branch)
+@@ -1207,7 +1207,7 @@
+     {
+       x = XEXP (x, 0);
+       kill_value (x, vd);
+-      set_value_regno (REGNO (x), Pmode, vd);
++      set_value_regno (REGNO (x), GET_MODE (x), vd);
+       return -1;
+     }
+ 
+Index: gcc/fwprop.c
+===================================================================
+--- a/src/gcc/fwprop.c	(.../gcc-4_4-branch)
++++ b/src/gcc/fwprop.c	(.../cell-4_4-branch)
+@@ -185,11 +185,12 @@
+ 
+ static bool
+ should_replace_address (rtx old_rtx, rtx new_rtx, enum machine_mode mode,
+-			bool speed)
++			addr_space_t as, bool speed)
+ {
+   int gain;
+ 
+-  if (rtx_equal_p (old_rtx, new_rtx) || !memory_address_p (mode, new_rtx))
++  if (rtx_equal_p (old_rtx, new_rtx)
++      || !memory_address_addr_space_p (mode, new_rtx, as))
+     return false;
+ 
+   /* Copy propagation is always ok.  */
+@@ -197,7 +198,8 @@
+     return true;
+ 
+   /* Prefer the new address if it is less expensive.  */
+-  gain = address_cost (old_rtx, mode, speed) - address_cost (new_rtx, mode, speed);
++  gain = (address_cost (old_rtx, mode, as, speed)
++	  - address_cost (new_rtx, mode, as, speed));
+ 
+   /* If the addresses have equivalent cost, prefer the new address
+      if it has the highest `rtx_cost'.  That has the potential of
+@@ -365,6 +367,7 @@
+ 	  /* Copy propagations are always ok.  Otherwise check the costs.  */
+ 	  if (!(REG_P (old_rtx) && REG_P (new_rtx))
+ 	      && !should_replace_address (op0, new_op0, GET_MODE (x),
++					  MEM_ADDR_SPACE (x),
+ 	      			 	  flags & PR_OPTIMIZE_FOR_SPEED))
+ 	    return true;
+ 
+Index: gcc/targhooks.c
+===================================================================
+--- a/src/gcc/targhooks.c	(.../gcc-4_4-branch)
++++ b/src/gcc/targhooks.c	(.../cell-4_4-branch)
+@@ -712,7 +712,107 @@
+   return true;
+ }
+ 
++/* Determine whether or not a pointer mode is valid. Assume defaults
++   of ptr_mode or Pmode - can be overridden.  */
+ bool
++default_valid_pointer_mode (enum machine_mode mode)
++{
++  return (mode == ptr_mode || mode == Pmode);
++}
++
++/* Return the mode for a pointer to a given ADDRSPACE, defaulting to ptr_mode
++   for the generic address space only.  */
++
++enum machine_mode
++default_addr_space_pointer_mode (addr_space_t addrspace ATTRIBUTE_UNUSED)
++{
++  gcc_assert (ADDR_SPACE_GENERIC_P (addrspace));
++  return ptr_mode;
++}
++
++/* Return the mode for an address in a given ADDRSPACE, defaulting to Pmode
++   for the generic address space only.  */
++
++enum machine_mode
++default_addr_space_address_mode (addr_space_t addrspace ATTRIBUTE_UNUSED)
++{
++  gcc_assert (ADDR_SPACE_GENERIC_P (addrspace));
++  return Pmode;
++}
++
++/* Named address space version of valid_pointer_mode.  */
++
++bool
++default_addr_space_valid_pointer_mode (enum machine_mode mode, addr_space_t as)
++{
++  if (!ADDR_SPACE_GENERIC_P (as))
++    return (mode == targetm.addr_space.pointer_mode (as)
++	    || mode == targetm.addr_space.address_mode (as));
++
++  return targetm.valid_pointer_mode (mode);
++}
++
++/* Some places still assume that all pointer or address modes are the
++   standard Pmode and ptr_mode.  These optimizations become invalid if
++   the target actually supports multiple different modes.  For now,
++   we disable such optimizations on such targets, using this function.  */
++
++bool
++target_default_pointer_address_modes_p (void)
++{
++  if (targetm.addr_space.address_mode != default_addr_space_address_mode)
++    return false;
++  if (targetm.addr_space.pointer_mode != default_addr_space_pointer_mode)
++    return false;
++
++  return true;
++}
++
++/* Named address space version of legitimate_address_p.  */
++
++bool
++default_addr_space_legitimate_address_p (enum machine_mode mode, rtx mem,
++					 bool strict, addr_space_t as)
++{
++  gcc_unreachable ();
++}
++
++/* Named address space version of LEGITIMIZE_ADDRESS.  */
++
++rtx
++default_addr_space_legitimize_address (rtx x, rtx oldx,
++				       enum machine_mode mode, addr_space_t as)
++{
++  if (!ADDR_SPACE_GENERIC_P (as))
++    return x;
++
++  LEGITIMIZE_ADDRESS (x, oldx, mode, done);
++done:
++  return x;
++}
++
++/* The default hook for determining if one named address space is a subset of
++   another and to return which address space to use as the common address
++   space.  */
++
++bool
++default_addr_space_subset_p (addr_space_t subset, addr_space_t superset)
++{
++  return (subset == superset);
++}
++
++/* The default hook for TARGET_ADDR_SPACE_CONVERT. This hook should never be
++   called for targets with only a generic address space.  */
++
++rtx
++default_addr_space_convert (rtx op ATTRIBUTE_UNUSED,
++			    tree from_type ATTRIBUTE_UNUSED,
++			    tree to_type ATTRIBUTE_UNUSED)
++{
++  gcc_unreachable ();
++}
++
++bool
+ default_hard_regno_scratch_ok (unsigned int regno ATTRIBUTE_UNUSED)
+ {
+   return true;
+Index: gcc/targhooks.h
+===================================================================
+--- a/src/gcc/targhooks.h	(.../gcc-4_4-branch)
++++ b/src/gcc/targhooks.h	(.../cell-4_4-branch)
+@@ -104,3 +104,15 @@
+ extern bool default_target_option_valid_attribute_p (tree, tree, tree, int);
+ extern bool default_target_option_pragma_parse (tree, tree);
+ extern bool default_target_option_can_inline_p (tree, tree);
++extern bool default_valid_pointer_mode (enum machine_mode);
++extern enum machine_mode default_addr_space_pointer_mode (addr_space_t);
++extern enum machine_mode default_addr_space_address_mode (addr_space_t);
++extern bool default_addr_space_valid_pointer_mode (enum machine_mode,
++						   addr_space_t);
++extern bool default_addr_space_legitimate_address_p (enum machine_mode, rtx,
++						     bool, addr_space_t);
++extern rtx default_addr_space_legitimize_address (rtx, rtx, enum machine_mode,
++						  addr_space_t);
++extern bool default_addr_space_subset_p (addr_space_t, addr_space_t);
++extern rtx default_addr_space_convert (rtx, tree, tree);
++
+Index: gcc/rtlhooks.c
+===================================================================
+--- a/src/gcc/rtlhooks.c	(.../gcc-4_4-branch)
++++ b/src/gcc/rtlhooks.c	(.../cell-4_4-branch)
+@@ -153,7 +153,8 @@
+ 		   - MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x))));
+ 
+       new_rtx = adjust_address_nv (x, mode, offset);
+-      if (! memory_address_p (mode, XEXP (new_rtx, 0)))
++      if (! memory_address_addr_space_p (mode, XEXP (new_rtx, 0),
++					 MEM_ADDR_SPACE (x)))
+ 	return 0;
+ 
+       return new_rtx;
+Index: gcc/tree-pretty-print.c
+===================================================================
+--- a/src/gcc/tree-pretty-print.c	(.../gcc-4_4-branch)
++++ b/src/gcc/tree-pretty-print.c	(.../cell-4_4-branch)
+@@ -527,6 +527,13 @@
+ 	else if (quals & TYPE_QUAL_RESTRICT)
+ 	  pp_string (buffer, "restrict ");
+ 
++	if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
++	  {
++	    pp_string (buffer, "<address-space-");
++	    pp_decimal_int (buffer, TYPE_ADDR_SPACE (node));
++	    pp_string (buffer, "> ");
++	  }
++
+ 	tclass = TREE_CODE_CLASS (TREE_CODE (node));
+ 
+ 	if (tclass == tcc_declaration)
+@@ -603,6 +610,13 @@
+ 	  if (quals & TYPE_QUAL_RESTRICT)
+ 	    pp_string (buffer, " restrict");
+ 
++	  if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
++	    {
++	      pp_string (buffer, " <address-space-");
++	      pp_decimal_int (buffer, TYPE_ADDR_SPACE (node));
++	      pp_string (buffer, ">");
++	    }
++
+ 	  if (TYPE_REF_CAN_ALIAS_ALL (node))
+ 	    pp_string (buffer, " {ref-all}");
+ 	}
+@@ -1383,6 +1397,7 @@
+       NIY;
+       break;
+ 
++    case ADDR_SPACE_CONVERT_EXPR:
+     case FIXED_CONVERT_EXPR:
+     case FIX_TRUNC_EXPR:
+     case FLOAT_EXPR:
+Index: gcc/c-lex.c
+===================================================================
+--- a/src/gcc/c-lex.c	(.../gcc-4_4-branch)
++++ b/src/gcc/c-lex.c	(.../cell-4_4-branch)
+@@ -390,7 +390,7 @@
+     case CPP_HASH:
+     case CPP_PASTE:
+       {
+-	unsigned char name[4];
++	unsigned char name[8];
+ 
+ 	*cpp_spell_token (parse_in, tok, name, true) = 0;
+ 
+Index: gcc/tree.c
+===================================================================
+--- a/src/gcc/tree.c	(.../gcc-4_4-branch)
++++ b/src/gcc/tree.c	(.../cell-4_4-branch)
+@@ -1478,8 +1478,7 @@
+   if (TREE_CODE (expr) != INTEGER_CST)
+     return 0;
+ 
+-  prec = (POINTER_TYPE_P (TREE_TYPE (expr))
+-	  ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
++  prec = TYPE_PRECISION (TREE_TYPE (expr));
+   high = TREE_INT_CST_HIGH (expr);
+   low = TREE_INT_CST_LOW (expr);
+ 
+@@ -1543,9 +1542,7 @@
+   if (TREE_CODE (expr) == COMPLEX_CST)
+     return tree_log2 (TREE_REALPART (expr));
+ 
+-  prec = (POINTER_TYPE_P (TREE_TYPE (expr))
+-	  ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
+-
++  prec = TYPE_PRECISION (TREE_TYPE (expr));
+   high = TREE_INT_CST_HIGH (expr);
+   low = TREE_INT_CST_LOW (expr);
+ 
+@@ -1581,9 +1578,7 @@
+   if (TREE_CODE (expr) == COMPLEX_CST)
+     return tree_log2 (TREE_REALPART (expr));
+ 
+-  prec = (POINTER_TYPE_P (TREE_TYPE (expr))
+-	  ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
+-
++  prec = TYPE_PRECISION (TREE_TYPE (expr));
+   high = TREE_INT_CST_HIGH (expr);
+   low = TREE_INT_CST_LOW (expr);
+ 
+@@ -4198,6 +4193,7 @@
+   TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
+   TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
+   TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
++  TYPE_ADDR_SPACE (type) = DECODE_QUAL_ADDR_SPACE (type_quals);
+ }
+ 
+ /* Returns true iff CAND is equivalent to BASE with TYPE_QUALS.  */
+@@ -5559,7 +5555,10 @@
+ tree
+ build_pointer_type (tree to_type)
+ {
+-  return build_pointer_type_for_mode (to_type, ptr_mode, false);
++  addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
++					      : TYPE_ADDR_SPACE (to_type);
++  enum machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
++  return build_pointer_type_for_mode (to_type, pointer_mode, false);
+ }
+ 
+ /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE.  */
+@@ -5623,7 +5622,10 @@
+ tree
+ build_reference_type (tree to_type)
+ {
+-  return build_reference_type_for_mode (to_type, ptr_mode, false);
++  addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
++					      : TYPE_ADDR_SPACE (to_type);
++  enum machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
++  return build_reference_type_for_mode (to_type, pointer_mode, false);
+ }
+ 
+ /* Build a type that is compatible with t but has no cv quals anywhere
+@@ -5766,6 +5768,7 @@
+   t = make_node (ARRAY_TYPE);
+   TREE_TYPE (t) = elt_type;
+   TYPE_DOMAIN (t) = index_type;
++  TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (elt_type);
+   
+   if (index_type == 0)
+     {
+@@ -8329,7 +8332,15 @@
+ {
+   tree t = type;
+   if (POINTER_TYPE_P (type))
+-    t = size_type_node;
++    {
++      /* If the pointer points to the normal address space, use the
++	 size_type_node.  Otherwise use an appropriate size for the pointer
++	 based on the named address space it points to.  */
++      if (!TYPE_ADDR_SPACE (TREE_TYPE (t)))
++	t = size_type_node;
++      else
++	return lang_hooks.types.type_for_size (TYPE_PRECISION (t), unsignedp);
++    }
+ 
+   if (!INTEGRAL_TYPE_P (t) || TYPE_UNSIGNED (t) == unsignedp)
+     return t;
+Index: gcc/tree.h
+===================================================================
+--- a/src/gcc/tree.h	(.../gcc-4_4-branch)
++++ b/src/gcc/tree.h	(.../cell-4_4-branch)
+@@ -382,8 +382,13 @@
+   unsigned lang_flag_6 : 1;
+   unsigned visited : 1;
+ 
+-  unsigned spare : 23;
++  unsigned spare : 15;
+ 
++  /* This field is only used with type nodes; the only reason it is present
++     in tree_base instead of tree_type is to save space.  The size of the
++     field must be large enough to hold addr_space_t values.  */
++  unsigned address_space : 8;
++
+   union tree_ann_d *ann;
+ };
+ 
+@@ -2180,6 +2185,9 @@
+    the term.  */
+ #define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type.restrict_flag)
+ 
++/* The address space the type is in.  */
++#define TYPE_ADDR_SPACE(NODE) (TYPE_CHECK (NODE)->base.address_space)
++
+ /* There is a TYPE_QUAL value for each type qualifier.  They can be
+    combined by bitwise-or to form the complete set of qualifiers for a
+    type.  */
+@@ -2189,10 +2197,29 @@
+ #define TYPE_QUAL_VOLATILE 0x2
+ #define TYPE_QUAL_RESTRICT 0x4
+ 
++/* Encode/decode the named memory support as part of the qualifier.  If more
++   than 8 qualifiers are added, these macros need to be adjusted.  */
++#define ENCODE_QUAL_ADDR_SPACE(NUM) ((NUM & 0xFF) << 8)
++#define DECODE_QUAL_ADDR_SPACE(X) (((X) >> 8) & 0xFF)
++
++/* Return all qualifiers except for the address space qualifiers.  */
++#define CLEAR_QUAL_ADDR_SPACE(X) ((X) & ~0xFF00)
++
++/* Only keep the address space out of the qualifiers and discard the other
++   qualifiers.  */
++#define KEEP_QUAL_ADDR_SPACE(X) ((X) & 0xFF00)
++
+ /* The set of type qualifiers for this type.  */
+ #define TYPE_QUALS(NODE)					\
+   ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST)			\
+    | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE)		\
++   | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT)		\
++   | (ENCODE_QUAL_ADDR_SPACE (TYPE_ADDR_SPACE (NODE))))
++
++/* The same as TYPE_QUALS without the address space qualifications.  */
++#define TYPE_QUALS_NO_ADDR_SPACE(NODE)				\
++  ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST)			\
++   | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE)		\
+    | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT))
+ 
+ /* These flags are available for each language front end to use internally.  */
+Index: gcc/reload.c
+===================================================================
+--- a/src/gcc/reload.c	(.../gcc-4_4-branch)
++++ b/src/gcc/reload.c	(.../cell-4_4-branch)
+@@ -267,7 +267,8 @@
+ static rtx find_reloads_toplev (rtx, int, enum reload_type, int, int, rtx,
+ 				int *);
+ static rtx make_memloc (rtx, int);
+-static int maybe_memory_address_p (enum machine_mode, rtx, rtx *);
++static int maybe_memory_address_addr_space_p (enum machine_mode, rtx,
++					      addr_space_t, rtx *);
+ static int find_reloads_address (enum machine_mode, rtx *, rtx, rtx *,
+ 				 int, enum reload_type, int, rtx);
+ static rtx subst_reg_equivs (rtx, rtx);
+@@ -611,7 +612,8 @@
+      didn't give us a new MEM, make a new one if it isn't valid.  */
+ 
+   loc = eliminate_regs (secondary_memlocs[(int) mode], VOIDmode, NULL_RTX);
+-  mem_valid = strict_memory_address_p (mode, XEXP (loc, 0));
++  mem_valid = strict_memory_address_addr_space_p (mode, XEXP (loc, 0),
++						  MEM_ADDR_SPACE (loc));
+ 
+   if (! mem_valid && loc == secondary_memlocs[(int) mode])
+     loc = copy_rtx (loc);
+@@ -2127,13 +2129,17 @@
+   return 0;
+ }
+ 
+-/* Return 1 if ADDR is a valid memory address for mode MODE,
+-   and check that each pseudo reg has the proper kind of
+-   hard reg.  */
++/* Return 1 if ADDR is a valid memory address for mode MODE
++   in address space AS, and check that each pseudo reg has the
++   proper kind of hard reg.  */
+ 
+ int
+-strict_memory_address_p (enum machine_mode mode ATTRIBUTE_UNUSED, rtx addr)
++strict_memory_address_addr_space_p (enum machine_mode mode ATTRIBUTE_UNUSED,
++				    rtx addr, addr_space_t as)
+ {
++  if (!ADDR_SPACE_GENERIC_P (as))
++    return targetm.addr_space.legitimate_address_p (mode, addr, 1, as);
++
+   GO_IF_LEGITIMATE_ADDRESS (mode, addr, win);
+   return 0;
+ 
+@@ -2241,6 +2247,10 @@
+   if (GET_MODE (x) != GET_MODE (y))
+     return 0;
+ 
++  /* MEMs refering to different address space are not equivalent.  */
++  if (code == MEM && MEM_ADDR_SPACE (x) != MEM_ADDR_SPACE (y))
++    return 0;
++
+   switch (code)
+     {
+     case CONST_INT:
+@@ -3947,12 +3957,15 @@
+ 		 && MEM_P (recog_data.operand[i]))
+ 	  {
+ 	    /* If the address to be reloaded is a VOIDmode constant,
+-	       use Pmode as mode of the reload register, as would have
+-	       been done by find_reloads_address.  */
++	       use the default address mode as mode of the reload register,
++	       as would have been done by find_reloads_address.  */
+ 	    enum machine_mode address_mode;
+ 	    address_mode = GET_MODE (XEXP (recog_data.operand[i], 0));
+ 	    if (address_mode == VOIDmode)
+-	      address_mode = Pmode;
++	      {
++		addr_space_t as = MEM_ADDR_SPACE (recog_data.operand[i]);
++		address_mode = targetm.addr_space.address_mode (as);
++	      }
+ 
+ 	    operand_reloadnum[i]
+ 	      = push_reload (XEXP (recog_data.operand[i], 0), NULL_RTX,
+@@ -4727,8 +4740,9 @@
+ #endif
+ 	       && (reg_equiv_address[regno] != 0
+ 		   || (reg_equiv_mem[regno] != 0
+-		       && (! strict_memory_address_p (GET_MODE (x),
+-						      XEXP (reg_equiv_mem[regno], 0))
++		       && (! strict_memory_address_addr_space_p
++			       (GET_MODE (x), XEXP (reg_equiv_mem[regno], 0),
++				MEM_ADDR_SPACE (reg_equiv_mem[regno]))
+ 			   || ! offsettable_memref_p (reg_equiv_mem[regno])
+ 			   || num_not_at_initial_offset))))
+ 	x = find_reloads_subreg_address (x, 1, opnum, type, ind_levels,
+@@ -4785,18 +4799,19 @@
+ }
+ 
+ /* Returns true if AD could be turned into a valid memory reference
+-   to mode MODE by reloading the part pointed to by PART into a
+-   register.  */
++   to mode MODE in address space AS by reloading the part pointed to
++   by PART into a register.  */
+ 
+ static int
+-maybe_memory_address_p (enum machine_mode mode, rtx ad, rtx *part)
++maybe_memory_address_addr_space_p (enum machine_mode mode, rtx ad,
++				   addr_space_t as, rtx *part)
+ {
+   int retv;
+   rtx tem = *part;
+   rtx reg = gen_rtx_REG (GET_MODE (tem), max_reg_num ());
+ 
+   *part = reg;
+-  retv = memory_address_p (mode, ad);
++  retv = memory_address_addr_space_p (mode, ad, as);
+   *part = tem;
+ 
+   return retv;
+@@ -4832,6 +4847,8 @@
+ 		      rtx *loc, int opnum, enum reload_type type,
+ 		      int ind_levels, rtx insn)
+ {
++  addr_space_t as = memrefloc? MEM_ADDR_SPACE (*memrefloc)
++			     : ADDR_SPACE_GENERIC;
+   int regno;
+   int removed_and = 0;
+   int op_index;
+@@ -4859,7 +4876,9 @@
+ 	  if (reg_equiv_address[regno] != 0 || num_not_at_initial_offset)
+ 	    {
+ 	      tem = make_memloc (ad, regno);
+-	      if (! strict_memory_address_p (GET_MODE (tem), XEXP (tem, 0)))
++	      if (! strict_memory_address_addr_space_p (GET_MODE (tem),
++							XEXP (tem, 0),
++							MEM_ADDR_SPACE (tem)))
+ 		{
+ 		  rtx orig = tem;
+ 
+@@ -4875,7 +4894,7 @@
+ 		 address: only reg or reg+constant.  */
+ 
+ 	      if (ind_levels > 0
+-		  && strict_memory_address_p (mode, tem)
++		  && strict_memory_address_addr_space_p (mode, tem, as)
+ 		  && (REG_P (XEXP (tem, 0))
+ 		      || (GET_CODE (XEXP (tem, 0)) == PLUS
+ 			  && REG_P (XEXP (XEXP (tem, 0), 0))
+@@ -4919,7 +4938,7 @@
+       return 1;
+     }
+ 
+-  if (strict_memory_address_p (mode, ad))
++  if (strict_memory_address_addr_space_p (mode, ad, as))
+     {
+       /* The address appears valid, so reloads are not needed.
+ 	 But the address may contain an eliminable register.
+@@ -4942,14 +4961,14 @@
+ 	return 0;
+ 
+       /* Check result for validity after substitution.  */
+-      if (strict_memory_address_p (mode, ad))
++      if (strict_memory_address_addr_space_p (mode, ad, as))
+ 	return 0;
+     }
+ 
+ #ifdef LEGITIMIZE_RELOAD_ADDRESS
+   do
+     {
+-      if (memrefloc)
++      if (memrefloc && ADDR_SPACE_GENERIC_P (as))
+ 	{
+ 	  LEGITIMIZE_RELOAD_ADDRESS (ad, GET_MODE (*memrefloc), opnum, type,
+ 				     ind_levels, win);
+@@ -5065,7 +5084,7 @@
+ 	     That will at least work.  */
+ 	  find_reloads_address_part (ad, loc,
+ 				     base_reg_class (mode, MEM, SCRATCH),
+-				     Pmode, opnum, type, ind_levels);
++				     GET_MODE (ad), opnum, type, ind_levels);
+ 	}
+       return ! removed_and;
+     }
+@@ -5126,8 +5145,8 @@
+ 	   || operand == arg_pointer_rtx
+ #endif
+ 	   || operand == stack_pointer_rtx)
+-	  && ! maybe_memory_address_p (mode, ad, 
+-				       &XEXP (XEXP (ad, 0), 1 - op_index)))
++	  && ! maybe_memory_address_addr_space_p
++		(mode, ad, as, &XEXP (XEXP (ad, 0), 1 - op_index)))
+ 	{
+ 	  rtx offset_reg;
+ 	  enum reg_class cls;
+@@ -5165,7 +5184,7 @@
+   tem = ad;
+   if (GET_CODE (ad) == PLUS)
+     tem = subst_indexed_address (ad);
+-  if (tem != ad && strict_memory_address_p (mode, tem))
++  if (tem != ad && strict_memory_address_addr_space_p (mode, tem, as))
+     {
+       /* Ok, we win that way.  Replace any additional eliminable
+ 	 registers.  */
+@@ -5175,7 +5194,8 @@
+ 
+       /* Make sure that didn't make the address invalid again.  */
+ 
+-      if (! subst_reg_equivs_changed || strict_memory_address_p (mode, tem))
++      if (! subst_reg_equivs_changed
++	  || strict_memory_address_addr_space_p (mode, tem, as))
+ 	{
+ 	  *loc = tem;
+ 	  return 0;
+@@ -5184,8 +5204,12 @@
+ 
+   /* If constants aren't valid addresses, reload the constant address
+      into a register.  */
+-  if (CONSTANT_P (ad) && ! strict_memory_address_p (mode, ad))
++  if (CONSTANT_P (ad) && ! strict_memory_address_addr_space_p (mode, ad, as))
+     {
++      enum machine_mode address_mode = GET_MODE (ad);
++      if (address_mode == VOIDmode)
++	address_mode = targetm.addr_space.address_mode (as);
++
+       /* If AD is an address in the constant pool, the MEM rtx may be shared.
+ 	 Unshare it so we can safely alter it.  */
+       if (memrefloc && GET_CODE (ad) == SYMBOL_REF
+@@ -5198,7 +5222,7 @@
+ 	}
+ 
+       find_reloads_address_part (ad, loc, base_reg_class (mode, MEM, SCRATCH),
+-				 Pmode, opnum, type, ind_levels);
++				 address_mode, opnum, type, ind_levels);
+       return ! removed_and;
+     }
+ 
+@@ -5285,17 +5309,13 @@
+    This routine assumes both inputs are already in canonical form.  */
+ 
+ rtx
+-form_sum (rtx x, rtx y)
++form_sum (enum machine_mode mode, rtx x, rtx y)
+ {
+   rtx tem;
+-  enum machine_mode mode = GET_MODE (x);
+ 
+-  if (mode == VOIDmode)
+-    mode = GET_MODE (y);
++  gcc_assert (GET_MODE (x) == mode || GET_MODE (x) == VOIDmode);
++  gcc_assert (GET_MODE (y) == mode || GET_MODE (y) == VOIDmode);
+ 
+-  if (mode == VOIDmode)
+-    mode = Pmode;
+-
+   if (GET_CODE (x) == CONST_INT)
+     return plus_constant (y, INTVAL (x));
+   else if (GET_CODE (y) == CONST_INT)
+@@ -5304,12 +5324,12 @@
+     tem = x, x = y, y = tem;
+ 
+   if (GET_CODE (x) == PLUS && CONSTANT_P (XEXP (x, 1)))
+-    return form_sum (XEXP (x, 0), form_sum (XEXP (x, 1), y));
++    return form_sum (mode, XEXP (x, 0), form_sum (mode, XEXP (x, 1), y));
+ 
+   /* Note that if the operands of Y are specified in the opposite
+      order in the recursive calls below, infinite recursion will occur.  */
+   if (GET_CODE (y) == PLUS && CONSTANT_P (XEXP (y, 1)))
+-    return form_sum (form_sum (x, XEXP (y, 0)), XEXP (y, 1));
++    return form_sum (mode, form_sum (mode, x, XEXP (y, 0)), XEXP (y, 1));
+ 
+   /* If both constant, encapsulate sum.  Otherwise, just form sum.  A
+      constant will have been placed second.  */
+@@ -5376,9 +5396,9 @@
+ 
+       /* Compute the sum.  */
+       if (op2 != 0)
+-	op1 = form_sum (op1, op2);
++	op1 = form_sum (GET_MODE (addr), op1, op2);
+       if (op1 != 0)
+-	op0 = form_sum (op0, op1);
++	op0 = form_sum (GET_MODE (addr), op0, op1);
+ 
+       return op0;
+     }
+@@ -5778,7 +5798,8 @@
+ 	      rtx equiv = (MEM_P (XEXP (x, 0))
+ 			   ? XEXP (x, 0)
+ 			   : reg_equiv_mem[regno]);
+-	      int icode = (int) optab_handler (add_optab, Pmode)->insn_code;
++	      int icode
++		= (int) optab_handler (add_optab, GET_MODE (x))->insn_code;
+ 	      if (insn && NONJUMP_INSN_P (insn) && equiv
+ 		  && memory_operand (equiv, GET_MODE (equiv))
+ #ifdef HAVE_cc0
+@@ -5786,9 +5807,9 @@
+ #endif
+ 		  && ! (icode != CODE_FOR_nothing
+ 			&& ((*insn_data[icode].operand[0].predicate)
+-			    (equiv, Pmode))
++			    (equiv, GET_MODE (x)))
+ 			&& ((*insn_data[icode].operand[1].predicate)
+-			    (equiv, Pmode))))
++			    (equiv, GET_MODE (x)))))
+ 		{
+ 		  /* We use the original pseudo for loc, so that
+ 		     emit_reload_insns() knows which pseudo this
+@@ -6141,8 +6162,8 @@
+ 		 valid address into an invalid one.  Check for that
+ 		 here.  */
+ 	      if (reloaded == 0
+-		  && !strict_memory_address_p (GET_MODE (tem),
+-					       XEXP (tem, 0)))
++		  && !strict_memory_address_addr_space_p
++			(GET_MODE (tem), XEXP (tem, 0), MEM_ADDR_SPACE (tem)))
+ 		push_reload (XEXP (tem, 0), NULL_RTX, &XEXP (tem, 0), (rtx*) 0,
+ 			     base_reg_class (GET_MODE (tem), MEM, SCRATCH),
+ 			     GET_MODE (XEXP (tem, 0)), VOIDmode, 0, 0,
+Index: gcc/reload.h
+===================================================================
+--- a/src/gcc/reload.h	(.../gcc-4_4-branch)
++++ b/src/gcc/reload.h	(.../cell-4_4-branch)
+@@ -289,7 +289,7 @@
+    address, namely: sum constant integers, surround the sum of two
+    constants with a CONST, put the constant as the second operand, and
+    group the constant on the outermost sum.  */
+-extern rtx form_sum (rtx, rtx);
++extern rtx form_sum (enum machine_mode, rtx, rtx);
+ 
+ /* Substitute into the current INSN the registers into which we have reloaded
+    the things that need reloading.  */
+Index: gcc/target.h
+===================================================================
+--- a/src/gcc/target.h	(.../gcc-4_4-branch)
++++ b/src/gcc/target.h	(.../cell-4_4-branch)
+@@ -68,6 +68,12 @@
+ /* An example implementation for ELF targets.  Defined in varasm.c  */
+ extern int elf_record_gcc_switches (print_switch_type type, const char *);
+ 
++/* Some places still assume that all pointer or address modes are the
++   standard Pmode and ptr_mode.  These optimizations become invalid if
++   the target actually supports multiple different modes.  For now,
++   we disable such optimizations on such targets, using this function.  */
++extern bool target_default_pointer_address_modes_p (void);
++
+ struct stdarg_info;
+ struct spec_info_def;
+ 
+@@ -662,6 +668,36 @@
+   /* True if MODE is valid for a pointer in __attribute__((mode("MODE"))).  */
+   bool (* valid_pointer_mode) (enum machine_mode mode);
+ 
++  /* Support for named address spaces.  */
++  struct addr_space {
++    /* MODE to use for a pointer into another address space.  */
++    enum machine_mode (* pointer_mode) (addr_space_t);
++
++    /* MODE to use for an address in another address space.  */
++    enum machine_mode (* address_mode) (addr_space_t);
++
++    /* True if MODE is valid for a pointer in __attribute__((mode("MODE")))
++       in another address space.  */
++    bool (* valid_pointer_mode) (enum machine_mode, addr_space_t);
++
++    /* True if an address is a valid memory address to a given named address
++       space for a given mode.  */
++    bool (* legitimate_address_p) (enum machine_mode, rtx, bool, addr_space_t);
++
++    /* Return an updated address to convert an invalid pointer to a named
++       address space to a valid one.  If NULL_RTX is returned use machine
++       independent methods to make the address valid.  */
++    rtx (* legitimize_address) (rtx, rtx, enum machine_mode, addr_space_t);
++
++    /* True if one named address space is a subset of another named address. */
++    bool (* subset_p) (addr_space_t, addr_space_t);
++
++    /* Function to convert an rtl expression from one address space to
++       another.  */
++    rtx (* convert) (rtx, tree, tree);
++
++  } addr_space;
++
+   /* True if MODE is valid for the target.  By "valid", we mean able to
+      be manipulated in non-trivial ways.  In particular, this means all
+      the arithmetic is supported.  */
+Index: gcc/rtlanal.c
+===================================================================
+--- a/src/gcc/rtlanal.c	(.../gcc-4_4-branch)
++++ b/src/gcc/rtlanal.c	(.../cell-4_4-branch)
+@@ -3610,13 +3610,13 @@
+    be returned.  */
+ 
+ int
+-address_cost (rtx x, enum machine_mode mode, bool speed)
++address_cost (rtx x, enum machine_mode mode, addr_space_t as, bool speed)
+ {
+   /* We may be asked for cost of various unusual addresses, such as operands
+      of push instruction.  It is not worthwhile to complicate writing
+      of the target hook by such cases.  */
+ 
+-  if (!memory_address_p (mode, x))
++  if (!memory_address_addr_space_p (mode, x, as))
+     return 1000;
+ 
+   return targetm.address_cost (x, speed);
+@@ -3755,7 +3755,11 @@
+ #if defined(POINTERS_EXTEND_UNSIGNED) && !defined(HAVE_ptr_extend)
+       /* If pointers extend unsigned and this is a pointer in Pmode, say that
+ 	 all the bits above ptr_mode are known to be zero.  */
+-      if (POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode
++      /* As we do not know which address space the pointer is refering to,
++	 we can do this only if the target does not support different pointer
++	 or address modes depending on the address space.  */
++      if (target_default_pointer_address_modes_p ()
++	  && POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode
+ 	  && REG_POINTER (x))
+ 	nonzero &= GET_MODE_MASK (ptr_mode);
+ #endif
+@@ -3992,7 +3996,11 @@
+ 	/* If pointers extend unsigned and this is an addition or subtraction
+ 	   to a pointer in Pmode, all the bits above ptr_mode are known to be
+ 	   zero.  */
+-	if (POINTERS_EXTEND_UNSIGNED > 0 && GET_MODE (x) == Pmode
++	/* As we do not know which address space the pointer is refering to,
++	   we can do this only if the target does not support different pointer
++	   or address modes depending on the address space.  */
++	if (target_default_pointer_address_modes_p ()
++	    && POINTERS_EXTEND_UNSIGNED > 0 && GET_MODE (x) == Pmode
+ 	    && (code == PLUS || code == MINUS)
+ 	    && REG_P (XEXP (x, 0)) && REG_POINTER (XEXP (x, 0)))
+ 	  nonzero &= GET_MODE_MASK (ptr_mode);
+@@ -4266,8 +4274,12 @@
+ #if defined(POINTERS_EXTEND_UNSIGNED) && !defined(HAVE_ptr_extend)
+       /* If pointers extend signed and this is a pointer in Pmode, say that
+ 	 all the bits above ptr_mode are known to be sign bit copies.  */
+-      if (! POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode && mode == Pmode
+-	  && REG_POINTER (x))
++      /* As we do not know which address space the pointer is refering to,
++	 we can do this only if the target does not support different pointer
++	 or address modes depending on the address space.  */
++      if (target_default_pointer_address_modes_p ()
++	  && ! POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode
++	  && mode == Pmode && REG_POINTER (x))
+ 	return GET_MODE_BITSIZE (Pmode) - GET_MODE_BITSIZE (ptr_mode) + 1;
+ #endif
+ 
+@@ -4463,7 +4475,11 @@
+       /* If pointers extend signed and this is an addition or subtraction
+ 	 to a pointer in Pmode, all the bits above ptr_mode are known to be
+ 	 sign bit copies.  */
+-      if (! POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode
++      /* As we do not know which address space the pointer is refering to,
++	 we can do this only if the target does not support different pointer
++	 or address modes depending on the address space.  */
++      if (target_default_pointer_address_modes_p ()
++	  && ! POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode
+ 	  && (code == PLUS || code == MINUS)
+ 	  && REG_P (XEXP (x, 0)) && REG_POINTER (XEXP (x, 0)))
+ 	result = MAX ((int) (GET_MODE_BITSIZE (Pmode)
+Index: gcc/fold-const.c
+===================================================================
+--- a/src/gcc/fold-const.c	(.../gcc-4_4-branch)
++++ b/src/gcc/fold-const.c	(.../cell-4_4-branch)
+@@ -202,15 +202,9 @@
+ {
+   unsigned HOST_WIDE_INT low0 = l1;
+   HOST_WIDE_INT high0 = h1;
+-  unsigned int prec;
++  unsigned int prec = TYPE_PRECISION (type);
+   int sign_extended_type;
+ 
+-  if (POINTER_TYPE_P (type)
+-      || TREE_CODE (type) == OFFSET_TYPE)
+-    prec = POINTER_SIZE;
+-  else
+-    prec = TYPE_PRECISION (type);
+-
+   /* Size types *are* sign extended.  */
+   sign_extended_type = (!TYPE_UNSIGNED (type)
+ 			|| (TREE_CODE (type) == INTEGER_TYPE
+@@ -2513,8 +2507,16 @@
+ 
+   switch (TREE_CODE (type))
+     {
++    case POINTER_TYPE:
++    case REFERENCE_TYPE:
++      /* Handle conversions between pointers to different address spaces.  */
++      if (POINTER_TYPE_P (orig)
++	  && (TYPE_ADDR_SPACE (TREE_TYPE (type))
++	      != TYPE_ADDR_SPACE (TREE_TYPE (orig))))
++	return fold_build1 (ADDR_SPACE_CONVERT_EXPR, type, arg);
++      /* fall through */
++
+     case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
+-    case POINTER_TYPE: case REFERENCE_TYPE:
+     case OFFSET_TYPE:
+       if (TREE_CODE (arg) == INTEGER_CST)
+ 	{
+@@ -3036,6 +3038,12 @@
+       || POINTER_TYPE_P (TREE_TYPE (arg0)) != POINTER_TYPE_P (TREE_TYPE (arg1)))
+     return 0;
+ 
++  /* We cannot consider pointers to different address space equal.  */
++  if (POINTER_TYPE_P (TREE_TYPE (arg0)) && POINTER_TYPE_P (TREE_TYPE (arg1))
++      && (TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (arg0)))
++	  != TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (arg1)))))
++    return 0;
++
+   /* If both types don't have the same precision, then it is not safe
+      to strip NOPs.  */
+   if (TYPE_PRECISION (TREE_TYPE (arg0)) != TYPE_PRECISION (TREE_TYPE (arg1)))
+@@ -8388,6 +8396,11 @@
+       tem = fold_convert_const (code, type, op0);
+       return tem ? tem : NULL_TREE;
+ 
++    case ADDR_SPACE_CONVERT_EXPR:
++      if (integer_zerop (arg0))
++	return fold_convert_const (code, type, arg0);
++      return NULL_TREE;
++
+     case FIXED_CONVERT_EXPR:
+       tem = fold_convert_const (code, type, arg0);
+       return tem ? tem : NULL_TREE;
+Index: gcc/auto-inc-dec.c
+===================================================================
+--- a/src/gcc/auto-inc-dec.c	(.../gcc-4_4-branch)
++++ b/src/gcc/auto-inc-dec.c	(.../cell-4_4-branch)
+@@ -40,6 +40,7 @@
+ #include "tree-pass.h"
+ #include "df.h"
+ #include "dbgcnt.h"
++#include "target.h"
+ 
+ /* This pass was originally removed from flow.c. However there is
+    almost nothing that remains of that code.
+@@ -651,6 +652,7 @@
+   /* The width of the mem being accessed.  */
+   int size = GET_MODE_SIZE (GET_MODE (mem));
+   rtx last_insn = NULL;
++  enum machine_mode reg_mode = GET_MODE (inc_reg);
+ 
+   switch (inc_insn.form)
+     {
+@@ -705,33 +707,33 @@
+     case SIMPLE_PRE_INC:     /* ++size  */
+       if (dump_file)
+ 	fprintf (dump_file, "trying SIMPLE_PRE_INC\n");
+-      return attempt_change (gen_rtx_PRE_INC (Pmode, inc_reg), inc_reg);
++      return attempt_change (gen_rtx_PRE_INC (reg_mode, inc_reg), inc_reg);
+       break;
+       
+     case SIMPLE_POST_INC:    /* size++  */
+       if (dump_file)
+ 	fprintf (dump_file, "trying SIMPLE_POST_INC\n");
+-      return attempt_change (gen_rtx_POST_INC (Pmode, inc_reg), inc_reg);
++      return attempt_change (gen_rtx_POST_INC (reg_mode, inc_reg), inc_reg);
+       break;
+       
+     case SIMPLE_PRE_DEC:     /* --size  */
+       if (dump_file)
+ 	fprintf (dump_file, "trying SIMPLE_PRE_DEC\n");
+-      return attempt_change (gen_rtx_PRE_DEC (Pmode, inc_reg), inc_reg);
++      return attempt_change (gen_rtx_PRE_DEC (reg_mode, inc_reg), inc_reg);
+       break;
+       
+     case SIMPLE_POST_DEC:    /* size--  */
+       if (dump_file)
+ 	fprintf (dump_file, "trying SIMPLE_POST_DEC\n");
+-      return attempt_change (gen_rtx_POST_DEC (Pmode, inc_reg), inc_reg);
++      return attempt_change (gen_rtx_POST_DEC (reg_mode, inc_reg), inc_reg);
+       break;
+       
+     case DISP_PRE:           /* ++con   */
+       if (dump_file)
+ 	fprintf (dump_file, "trying DISP_PRE\n");
+-      return attempt_change (gen_rtx_PRE_MODIFY (Pmode, 
++      return attempt_change (gen_rtx_PRE_MODIFY (reg_mode,
+ 						 inc_reg,
+-						 gen_rtx_PLUS (Pmode,
++						 gen_rtx_PLUS (reg_mode,
+ 							       inc_reg,
+ 							       inc_insn.reg1)),
+ 			     inc_reg);
+@@ -740,9 +742,9 @@
+     case DISP_POST:          /* con++   */
+       if (dump_file)
+ 	fprintf (dump_file, "trying POST_DISP\n");
+-      return attempt_change (gen_rtx_POST_MODIFY (Pmode,
++      return attempt_change (gen_rtx_POST_MODIFY (reg_mode,
+ 						  inc_reg,
+-						  gen_rtx_PLUS (Pmode,
++						  gen_rtx_PLUS (reg_mode,
+ 								inc_reg,
+ 								inc_insn.reg1)),
+ 			     inc_reg);
+@@ -751,9 +753,9 @@
+     case REG_PRE:            /* ++reg   */
+       if (dump_file)
+ 	fprintf (dump_file, "trying PRE_REG\n");
+-      return attempt_change (gen_rtx_PRE_MODIFY (Pmode, 
++      return attempt_change (gen_rtx_PRE_MODIFY (reg_mode,
+ 						 inc_reg,
+-						 gen_rtx_PLUS (Pmode,
++						 gen_rtx_PLUS (reg_mode,
+ 							       inc_reg,
+ 							       inc_insn.reg1)),
+ 			     inc_reg);
+@@ -762,9 +764,9 @@
+     case REG_POST:            /* reg++   */
+       if (dump_file)
+ 	fprintf (dump_file, "trying POST_REG\n");
+-      return attempt_change (gen_rtx_POST_MODIFY (Pmode, 
++      return attempt_change (gen_rtx_POST_MODIFY (reg_mode,
+ 						  inc_reg,
+-						  gen_rtx_PLUS (Pmode,
++						  gen_rtx_PLUS (reg_mode,
+ 								inc_reg,
+ 								inc_insn.reg1)),
+ 			     inc_reg);
+@@ -1127,7 +1129,9 @@
+ 		     we are going to increment the result of the add insn.
+ 		     For this trick to be correct, the result reg of
+ 		     the inc must be a valid addressing reg.  */
+-		  if (GET_MODE (inc_insn.reg_res) != Pmode)
++		  addr_space_t as = MEM_ADDR_SPACE (*mem_insn.mem_loc);
++		  if (GET_MODE (inc_insn.reg_res)
++		      != targetm.addr_space.address_mode (as))
+ 		    {
+ 		      if (dump_file)
+ 			fprintf (dump_file, "base reg mode failure.\n");
+@@ -1176,7 +1180,9 @@
+ 	{
+ 	  /* For this trick to be correct, the result reg of the inc
+ 	     must be a valid addressing reg.  */
+-	  if (GET_MODE (inc_insn.reg_res) != Pmode)
++	  addr_space_t as = MEM_ADDR_SPACE (*mem_insn.mem_loc);
++	  if (GET_MODE (inc_insn.reg_res)
++	      != targetm.addr_space.address_mode (as))
+ 	    {
+ 	      if (dump_file)
+ 		fprintf (dump_file, "base reg mode failure.\n");
+Index: gcc/testsuite/gcc.target/s390/pr42224.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/s390/pr42224.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/s390/pr42224.c	(.../cell-4_4-branch)
+@@ -0,0 +1,36 @@
++
++/* { dg-do compile } */
++/* { dg-options "-O0" } */
++
++typedef char* __char_ptr32 __attribute__ (( mode (SI) ));
++typedef __char_ptr32 *__char_ptr_char_ptr32 __attribute__ ((mode (SI)));
++
++void to_ptr32 (int x)
++{
++  __char_ptr32 ptr = (__char_ptr32) x;
++}
++
++void to_int (__char_ptr32 ptr)
++{
++  int x = (int) ptr;
++}
++
++__char_ptr_char_ptr32
++to_ptr32_ptr32 (char **ptr64)
++{
++  int argc;
++  __char_ptr_char_ptr32 short_argv;
++
++  for (argc=0; ptr64[argc]; argc++);
++
++  short_argv = (__char_ptr_char_ptr32) malloc32
++    (sizeof (__char_ptr32) * (argc + 1));
++
++  for (argc=0; ptr64[argc]; argc++)
++    short_argv[argc] = (__char_ptr32) strdup32 (ptr64[argc]);
++
++  short_argv[argc] = (__char_ptr32) 0;
++  return short_argv;
++
++}
++
+Index: gcc/testsuite/gcc.target/spu/ea/errors2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/errors2.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/errors2.c	(.../cell-4_4-branch)
+@@ -0,0 +1,107 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* Invalid __ea declarations.  */
++
++/* { dg-do compile } */
++
++__ea char ea_str[] = "abc";
++char lm_str[] = "abc";
++
++__ea char *lm_ea_ptr1 = "abc";				/* { dg-error "initializer element is not computable at load time" } */
++__ea char *lm_ea_ptr2 = (__ea char *)"abc";		/* { dg-error "initializer element is not constant" } */
++__ea char *lm_ea_ptr3 = ea_str;
++__ea char *lm_ea_ptr4 = (__ea char *)ea_str;
++__ea char *lm_ea_ptr5 = lm_str;				/* { dg-error "initializer element is not computable at load time" } */
++__ea char *lm_ea_ptr6 = (__ea char *)lm_str;		/* { dg-error "initializer element is not constant" } */
++
++__ea char * __ea ea_ea_ptr1 = ea_str;
++__ea char * __ea ea_ea_ptr2 = (__ea char *)ea_str;
++
++char * __ea ea_lm_ptr1 = lm_str;
++char * __ea ea_lm_ptr2 = (char *)lm_str;
++
++struct foo {
++  int first;
++  __ea char *ptr;
++  int last;
++};
++
++__ea struct foo ea_struct1 = {
++  10,
++  (__ea char *)0,
++  11,
++};
++
++__ea struct foo ea_struct2 = {
++  20,
++  0,
++  21,
++};
++
++struct foo ea_struct3 = {
++  30,
++  ea_str,
++  31,
++};
++
++struct foo ea_struct4 = {
++  40,
++  (__ea char *)lm_str,	/* { dg-error "(initializer element is not constant)|(near initialization)" "" } */
++  41,
++};
++
++struct bar {
++  int first;
++  char *ptr;
++  int last;
++};
++
++__ea struct bar ea_struct5 = {
++  50,
++  0,
++  51,
++};
++
++__ea struct bar ea_struct6 = {
++  60,
++  (char *)0,
++  61,
++};
++
++__ea struct bar ea_struct7 = {
++  70,
++  lm_str,
++  71,
++};
++
++struct bar lm_struct8 = {
++  80,
++  0,
++  81,
++};
++
++struct bar lm_struct9 = {
++  90,
++  (char *)0,
++  91,
++};
++
++struct bar lm_struct10 = {
++  100,
++  lm_str,
++  101,
++};
+Index: gcc/testsuite/gcc.target/spu/ea/ea.exp
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/ea.exp	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/ea.exp	(.../cell-4_4-branch)
+@@ -0,0 +1,54 @@
++#   Copyright (C) 2008, 2009 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++# GCC testsuite that uses the `dg.exp' driver.
++
++# Exit immediately if this isn't a SPU target.
++if { ![istarget spu-*-*] } then {
++  return
++}
++
++# Load support procs.
++load_lib gcc-dg.exp
++
++# Return 1 if target __ea library functions are available
++proc check_effective_target_ealib { } {
++    return [check_no_compiler_messages ealib executable {
++	#include <ea.h>
++	int main (void)
++	{
++	    __ea void *ptr = malloc_ea (1024);
++	    return 0;
++	}
++    }]
++}
++
++# If a testcase doesn't have special options, use these.
++# We do not use the global DEFAULT_CFLAGS as all test cases
++# in this directory use the __ea address space qualifier
++# extension and thus will not compile with -ansi.
++set DEFAULT_EA_CFLAGS "-std=gnu99 -pedantic-errors -O2"
++
++# Initialize `dg'.
++dg-init
++
++# Run all tests in both -mea32 and -mea64 mode.
++set tests [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]]
++dg-runtest $tests "-mea32" $DEFAULT_EA_CFLAGS
++dg-runtest $tests "-mea64" $DEFAULT_EA_CFLAGS
++
++# All done.
++dg-finish
+Index: gcc/testsuite/gcc.target/spu/ea/compile1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/compile1.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/compile1.c	(.../cell-4_4-branch)
+@@ -0,0 +1,109 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* Valid __ea declarations.  */
++
++/* { dg-do compile } */
++
++/* Typedefs.  */
++typedef __ea int ea_int_t;
++typedef __ea int *ea_int_star_t;
++typedef int outer_t;
++
++/* Externs.  */
++
++__ea extern int i1;
++extern __ea int i2;
++extern int __ea i3;
++extern __ea ea_int_t i4;		/* __ea qualifier permitted via typedef.  */
++extern int __ea __ea __ea dupe;		/* __ea duplicate permitted directly.  */
++extern int __ea *ppu;
++
++/* Pointers.  */
++__ea int *i4p;
++
++/* Structs.  */
++struct st {
++  __ea int *p;
++};
++
++/* Variable definitions.  */
++__ea int ii0;
++int *__ea ii1;
++static int __ea ii2;
++
++void
++f1 ()
++{
++  int *spu;
++  ppu = (ea_int_t *) spu;
++  ppu = (ea_int_star_t) spu;
++}
++
++void
++f2 ()
++{
++  int *spu;
++  spu = (int *) ppu;
++  ppu = (__ea int *) spu;
++}
++
++void
++f3 ()
++{
++  int i = sizeof (__ea int);
++}
++
++__ea int *f4 (void)
++{
++  return 0;
++}
++
++int f5 (__ea int *parm)
++{
++  static __ea int local4;
++  int tmp = local4;
++  local4 = *parm;
++  return tmp;
++}
++
++static inline __ea void *f6 (__ea void *start)
++{
++  return 0;
++}
++
++void f7 (void)
++{
++  __ea void *s1;
++  auto __ea void *s2;
++}
++
++__ea int *f8 (__ea int *x)
++{
++  register __ea int *y = x;
++  __ea int *z = y;
++  return z;
++}
++
++long long f9 (__ea long long x[2])
++{
++  return x[0] + x[1];
++}
++
++void f10 ()
++{
++  static __ea outer_t o;
++}
+Index: gcc/testsuite/gcc.target/spu/ea/test-sizes.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/test-sizes.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/test-sizes.c	(.../cell-4_4-branch)
+@@ -0,0 +1,608 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do run } */
++
++#ifdef __EA32__
++#define EA_PTRSIZE 4
++#endif
++#ifdef __EA64__
++#define EA_PTRSIZE 8
++#endif
++
++#if !defined(LEVEL1) && !defined(LEVEL2) && !defined(LEVEL3)
++#define LEVEL1 1		/* single pointer indirection */
++#define LEVEL2 1		/* 2 levels of pointer indirection */
++#define LEVEL3 1		/* 3 levels of pointer indirection */
++
++#else
++#ifndef LEVEL1
++#define LEVEL1 0
++#endif
++
++#ifndef LEVEL2
++#define LEVEL2 0
++#endif
++
++#ifndef LEVEL3
++#define LEVEL3 0
++#endif
++#endif
++
++#if !defined(USE_SIMPLE) && !defined(USE_COMPLEX)
++#define USE_SIMPLE  1		/* build up pointers via multiple typedefs */
++#define USE_COMPLEX 1		/* single typedef for pointer indirections */
++
++#else
++#ifndef USE_SIMPLE
++#define USE_SIMPLE 0
++#endif
++
++#ifndef USE_COMPLEX
++#define USE_COMPLEX 0
++#endif
++#endif
++
++#if !defined(USE_LOCAL_VAR) && !defined(USE_EA_VAR)
++#define USE_LOCAL_VAR 1		/* use variables declared locally */
++#define USE_EA_VAR    1		/* use variables on the host */
++
++#else
++#ifndef USE_LOCAL_VAR
++#define USE_LOCAL_VAR 0
++#endif
++
++#ifndef USE_EA_VAR
++#define USE_EA_VAR    0
++#endif
++#endif
++
++static int errors;
++
++#ifdef USE_PRINTF		/* print results via printf */
++#include <stdio.h>
++#include <stdlib.h>
++
++static int num_tests;
++
++#define TEST_SIZE(EXPR, EXPECTED)					\
++do {									\
++  char *msg;								\
++									\
++  if (sizeof (EXPR) != EXPECTED)					\
++    {									\
++      msg = ", FAIL";							\
++      errors++;								\
++    }									\
++  else									\
++    msg = "";								\
++									\
++  num_tests++;								\
++  printf ("sizeof %-20s = %2u, expected = %2u%s\n",			\
++	  #EXPR,							\
++	  (unsigned) sizeof (EXPR),					\
++	  (unsigned) EXPECTED,						\
++	  msg);								\
++} while (0)
++
++#define PRINT1(FMT)	  printf (FMT)
++#define PRINT2(FMT,A1)	  printf (FMT,A1)
++#define PRINT3(FMT,A1,A2) printf (FMT,A1,A2)
++
++#else	/* standalone */
++extern void abort (void);
++
++#define TEST_SIZE(EXPR, EXPECTED)					\
++do {									\
++  if (sizeof (EXPR) != EXPECTED)					\
++    abort ();								\
++} while (0)
++
++#define PRINT1(FMT)
++#define PRINT2(FMT,ARG)
++#define PRINT3(FMT,A1,A2)
++#endif
++
++/* 'local memory' hack to keep the same spacing.  */
++#define __lm
++
++#if USE_SIMPLE
++#if (LEVEL1 || LEVEL2 || LEVEL3)
++typedef __lm char *lm_ptr_t;
++typedef __ea char *ea_ptr_t;
++#endif
++
++#if LEVEL1
++#if USE_LOCAL_VAR
++__lm lm_ptr_t lm_ptr;
++__lm ea_ptr_t ea_ptr;
++#endif
++
++#if USE_EA_VAR
++__ea lm_ptr_t lm_ptr_ea;
++__ea ea_ptr_t ea_ptr_ea;
++#endif
++#endif
++
++#if (LEVEL2 || LEVEL3)
++typedef __lm lm_ptr_t *lm_lm_ptr_t;
++typedef __ea lm_ptr_t *ea_lm_ptr_t;
++typedef __lm ea_ptr_t *lm_ea_ptr_t;
++typedef __ea ea_ptr_t *ea_ea_ptr_t;
++#endif
++
++#if LEVEL2
++#if USE_LOCAL_VAR
++__lm lm_lm_ptr_t lm_lm_ptr;
++__lm ea_lm_ptr_t ea_lm_ptr;
++__lm lm_ea_ptr_t lm_ea_ptr;
++__lm ea_ea_ptr_t ea_ea_ptr;
++#endif
++
++#if USE_EA_VAR
++__ea lm_lm_ptr_t lm_lm_ptr_ea;
++__ea ea_lm_ptr_t ea_lm_ptr_ea;
++__ea lm_ea_ptr_t lm_ea_ptr_ea;
++__ea ea_ea_ptr_t ea_ea_ptr_ea;
++#endif
++#endif
++
++#if LEVEL3
++typedef __lm lm_lm_ptr_t *lm_lm_lm_ptr_t;
++typedef __ea lm_lm_ptr_t *ea_lm_lm_ptr_t;
++typedef __lm ea_lm_ptr_t *lm_ea_lm_ptr_t;
++typedef __ea ea_lm_ptr_t *ea_ea_lm_ptr_t;
++typedef __lm lm_ea_ptr_t *lm_lm_ea_ptr_t;
++typedef __ea lm_ea_ptr_t *ea_lm_ea_ptr_t;
++typedef __lm ea_ea_ptr_t *lm_ea_ea_ptr_t;
++typedef __ea ea_ea_ptr_t *ea_ea_ea_ptr_t;
++
++#if USE_LOCAL_VAR
++__lm lm_lm_lm_ptr_t lm_lm_lm_ptr;
++__lm ea_lm_lm_ptr_t ea_lm_lm_ptr;
++__lm lm_ea_lm_ptr_t lm_ea_lm_ptr;
++__lm ea_ea_lm_ptr_t ea_ea_lm_ptr;
++__lm lm_lm_ea_ptr_t lm_lm_ea_ptr;
++__lm ea_lm_ea_ptr_t ea_lm_ea_ptr;
++__lm lm_ea_ea_ptr_t lm_ea_ea_ptr;
++__lm ea_ea_ea_ptr_t ea_ea_ea_ptr;
++#endif
++
++#if USE_EA_VAR
++__ea lm_lm_lm_ptr_t lm_lm_lm_ptr_ea;
++__ea ea_lm_lm_ptr_t ea_lm_lm_ptr_ea;
++__ea lm_ea_lm_ptr_t lm_ea_lm_ptr_ea;
++__ea ea_ea_lm_ptr_t ea_ea_lm_ptr_ea;
++__ea lm_lm_ea_ptr_t lm_lm_ea_ptr_ea;
++__ea ea_lm_ea_ptr_t ea_lm_ea_ptr_ea;
++__ea lm_ea_ea_ptr_t lm_ea_ea_ptr_ea;
++__ea ea_ea_ea_ptr_t ea_ea_ea_ptr_ea;
++#endif
++#endif
++#endif
++
++#if USE_COMPLEX
++#if LEVEL1
++#if USE_LOCAL_VAR
++__lm char *__lm lm_cptr;
++__ea char *__lm ea_cptr;
++#endif
++
++#if USE_EA_VAR
++__lm char *__ea lm_cptr_ea;
++__ea char *__ea ea_cptr_ea;
++#endif
++#endif
++
++#if LEVEL2
++#if USE_LOCAL_VAR
++__lm char *__lm *__lm lm_lm_cptr;
++__lm char *__ea *__lm ea_lm_cptr;
++__ea char *__lm *__lm lm_ea_cptr;
++__ea char *__ea *__lm ea_ea_cptr;
++#endif
++
++#if USE_EA_VAR
++__lm char *__lm *__ea lm_lm_cptr_ea;
++__lm char *__ea *__ea ea_lm_cptr_ea;
++__ea char *__lm *__ea lm_ea_cptr_ea;
++__ea char *__ea *__ea ea_ea_cptr_ea;
++#endif
++#endif
++
++#if LEVEL3
++#if USE_LOCAL_VAR
++__lm char *__lm *__lm *__lm lm_lm_lm_cptr;
++__lm char *__ea *__lm *__lm lm_ea_lm_cptr;
++__ea char *__lm *__lm *__lm lm_lm_ea_cptr;
++__ea char *__ea *__lm *__lm lm_ea_ea_cptr;
++__lm char *__lm *__ea *__lm ea_lm_lm_cptr;
++__lm char *__ea *__ea *__lm ea_ea_lm_cptr;
++__ea char *__lm *__ea *__lm ea_lm_ea_cptr;
++__ea char *__ea *__ea *__lm ea_ea_ea_cptr;
++#endif
++
++#if USE_EA_VAR
++__lm char *__lm *__lm *__ea lm_lm_lm_cptr_ea;
++__lm char *__ea *__lm *__ea lm_ea_lm_cptr_ea;
++__ea char *__lm *__lm *__ea lm_lm_ea_cptr_ea;
++__ea char *__ea *__lm *__ea lm_ea_ea_cptr_ea;
++__lm char *__lm *__ea *__ea ea_lm_lm_cptr_ea;
++__lm char *__ea *__ea *__ea ea_ea_lm_cptr_ea;
++__ea char *__lm *__ea *__ea ea_lm_ea_cptr_ea;
++__ea char *__ea *__ea *__ea ea_ea_ea_cptr_ea;
++#endif
++#endif
++#endif
++
++int
++main ()
++{
++  PRINT2 ("LEVEL1        = %d\n", LEVEL1);
++  PRINT2 ("LEVEL2        = %d\n", LEVEL2);
++  PRINT2 ("LEVEL3        = %d\n", LEVEL3);
++  PRINT2 ("USE_SIMPLE    = %d\n", USE_SIMPLE);
++  PRINT2 ("USE_COMPLEX   = %d\n", USE_COMPLEX);
++  PRINT2 ("USE_LOCAL_VAR = %d\n", USE_LOCAL_VAR);
++  PRINT2 ("USE_EA_VAR    = %d\n", USE_EA_VAR);
++  PRINT1 ("\n");
++
++#if USE_SIMPLE
++#if LEVEL1
++#if USE_LOCAL_VAR
++  TEST_SIZE ( lm_ptr, 4);
++  TEST_SIZE (*lm_ptr, 1);
++  TEST_SIZE ( ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (*ea_ptr, 1);
++  PRINT1 ("\n");
++#endif
++
++#if USE_EA_VAR
++  TEST_SIZE ( lm_ptr_ea, 4);
++  TEST_SIZE (*lm_ptr_ea, 1);
++  TEST_SIZE ( ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (*ea_ptr_ea, 1);
++  PRINT1 ("\n");
++#endif
++#endif
++
++#if LEVEL2
++#if USE_LOCAL_VAR
++  TEST_SIZE (  lm_lm_ptr, 4);
++  TEST_SIZE ( *lm_lm_ptr, 4);
++  TEST_SIZE (**lm_lm_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  lm_ea_ptr, 4);
++  TEST_SIZE ( *lm_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (**lm_ea_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_lm_ptr, EA_PTRSIZE);
++  TEST_SIZE ( *ea_lm_ptr, 4);
++  TEST_SIZE (**ea_lm_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE ( *ea_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (**ea_ea_ptr, 1);
++  PRINT1 ("\n");
++#endif
++
++#if USE_EA_VAR
++  TEST_SIZE (  lm_lm_ptr_ea, 4);
++  TEST_SIZE ( *lm_lm_ptr_ea, 4);
++  TEST_SIZE (**lm_lm_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  lm_ea_ptr_ea, 4);
++  TEST_SIZE ( *lm_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (**lm_ea_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_lm_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( *ea_lm_ptr_ea, 4);
++  TEST_SIZE (**ea_lm_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( *ea_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (**ea_ea_ptr_ea, 1);
++  PRINT1 ("\n");
++#endif
++#endif
++
++#if LEVEL3
++#if USE_LOCAL_VAR
++  TEST_SIZE (   lm_lm_lm_ptr, 4);
++  TEST_SIZE (  *lm_lm_lm_ptr, 4);
++  TEST_SIZE ( **lm_lm_lm_ptr, 4);
++  TEST_SIZE (***lm_lm_lm_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_lm_ea_ptr, 4);
++  TEST_SIZE (  *lm_lm_ea_ptr, 4);
++  TEST_SIZE ( **lm_lm_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (***lm_lm_ea_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_lm_ptr, 4);
++  TEST_SIZE (  *lm_ea_lm_ptr, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_lm_ptr, 4);
++  TEST_SIZE (***lm_ea_lm_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_ea_ptr, 4);
++  TEST_SIZE (  *lm_ea_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (***lm_ea_ea_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_lm_ptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_lm_ptr, 4);
++  TEST_SIZE ( **ea_lm_lm_ptr, 4);
++  TEST_SIZE (***ea_lm_lm_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_ea_ptr, 4);
++  TEST_SIZE ( **ea_lm_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (***ea_lm_ea_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_lm_ptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_lm_ptr, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_lm_ptr, 4);
++  TEST_SIZE (***ea_ea_lm_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (***ea_ea_ea_ptr, 1);
++  PRINT1 ("\n");
++#endif
++
++#if USE_EA_VAR
++  TEST_SIZE (   lm_lm_lm_ptr_ea, 4);
++  TEST_SIZE (  *lm_lm_lm_ptr_ea, 4);
++  TEST_SIZE ( **lm_lm_lm_ptr_ea, 4);
++  TEST_SIZE (***lm_lm_lm_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_lm_ea_ptr_ea, 4);
++  TEST_SIZE (  *lm_lm_ea_ptr_ea, 4);
++  TEST_SIZE ( **lm_lm_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***lm_lm_ea_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_lm_ptr_ea, 4);
++  TEST_SIZE (  *lm_ea_lm_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_lm_ptr_ea, 4);
++  TEST_SIZE (***lm_ea_lm_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_ea_ptr_ea, 4);
++  TEST_SIZE (  *lm_ea_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***lm_ea_ea_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_lm_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_lm_ptr_ea, 4);
++  TEST_SIZE ( **ea_lm_lm_ptr_ea, 4);
++  TEST_SIZE (***ea_lm_lm_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_ea_ptr_ea, 4);
++  TEST_SIZE ( **ea_lm_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***ea_lm_ea_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_lm_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_lm_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_lm_ptr_ea, 4);
++  TEST_SIZE (***ea_ea_lm_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***ea_ea_ea_ptr_ea, 1);
++  PRINT1 ("\n");
++#endif
++#endif
++#endif
++
++#if USE_COMPLEX
++#if LEVEL1
++#if USE_LOCAL_VAR
++  TEST_SIZE ( lm_cptr, 4);
++  TEST_SIZE (*lm_cptr, 1);
++  TEST_SIZE ( ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (*ea_cptr, 1);
++  PRINT1 ("\n");
++#endif
++
++#if USE_EA_VAR
++  TEST_SIZE ( lm_cptr_ea, 4);
++  TEST_SIZE (*lm_cptr_ea, 1);
++  TEST_SIZE ( ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (*ea_cptr_ea, 1);
++  PRINT1 ("\n");
++#endif
++#endif
++
++#if LEVEL2
++#if USE_LOCAL_VAR
++  TEST_SIZE (  lm_lm_cptr, 4);
++  TEST_SIZE ( *lm_lm_cptr, 4);
++  TEST_SIZE (**lm_lm_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  lm_ea_cptr, 4);
++  TEST_SIZE ( *lm_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (**lm_ea_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_lm_cptr, EA_PTRSIZE);
++  TEST_SIZE ( *ea_lm_cptr, 4);
++  TEST_SIZE (**ea_lm_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE ( *ea_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (**ea_ea_cptr, 1);
++  PRINT1 ("\n");
++#endif
++
++#if USE_EA_VAR
++  TEST_SIZE (  lm_lm_cptr_ea, 4);
++  TEST_SIZE ( *lm_lm_cptr_ea, 4);
++  TEST_SIZE (**lm_lm_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  lm_ea_cptr_ea, 4);
++  TEST_SIZE ( *lm_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (**lm_ea_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_lm_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( *ea_lm_cptr_ea, 4);
++  TEST_SIZE (**ea_lm_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( *ea_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (**ea_ea_cptr_ea, 1);
++  PRINT1 ("\n");
++#endif
++#endif
++
++#if LEVEL3
++#if USE_LOCAL_VAR
++  TEST_SIZE (   lm_lm_lm_cptr, 4);
++  TEST_SIZE (  *lm_lm_lm_cptr, 4);
++  TEST_SIZE ( **lm_lm_lm_cptr, 4);
++  TEST_SIZE (***lm_lm_lm_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_lm_ea_cptr, 4);
++  TEST_SIZE (  *lm_lm_ea_cptr, 4);
++  TEST_SIZE ( **lm_lm_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (***lm_lm_ea_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_lm_cptr, 4);
++  TEST_SIZE (  *lm_ea_lm_cptr, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_lm_cptr, 4);
++  TEST_SIZE (***lm_ea_lm_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_ea_cptr, 4);
++  TEST_SIZE (  *lm_ea_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (***lm_ea_ea_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_lm_cptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_lm_cptr, 4);
++  TEST_SIZE ( **ea_lm_lm_cptr, 4);
++  TEST_SIZE (***ea_lm_lm_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_ea_cptr, 4);
++  TEST_SIZE ( **ea_lm_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (***ea_lm_ea_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_lm_cptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_lm_cptr, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_lm_cptr, 4);
++  TEST_SIZE (***ea_ea_lm_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (***ea_ea_ea_cptr, 1);
++  PRINT1 ("\n");
++#endif
++
++#if USE_EA_VAR
++  TEST_SIZE (   lm_lm_lm_cptr_ea, 4);
++  TEST_SIZE (  *lm_lm_lm_cptr_ea, 4);
++  TEST_SIZE ( **lm_lm_lm_cptr_ea, 4);
++  TEST_SIZE (***lm_lm_lm_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_lm_ea_cptr_ea, 4);
++  TEST_SIZE (  *lm_lm_ea_cptr_ea, 4);
++  TEST_SIZE ( **lm_lm_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***lm_lm_ea_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_lm_cptr_ea, 4);
++  TEST_SIZE (  *lm_ea_lm_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_lm_cptr_ea, 4);
++  TEST_SIZE (***lm_ea_lm_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_ea_cptr_ea, 4);
++  TEST_SIZE (  *lm_ea_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***lm_ea_ea_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_lm_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_lm_cptr_ea, 4);
++  TEST_SIZE ( **ea_lm_lm_cptr_ea, 4);
++  TEST_SIZE (***ea_lm_lm_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_ea_cptr_ea, 4);
++  TEST_SIZE ( **ea_lm_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***ea_lm_ea_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_lm_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_lm_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_lm_cptr_ea, 4);
++  TEST_SIZE (***ea_ea_lm_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***ea_ea_ea_cptr_ea, 1);
++  PRINT1 ("\n");
++#endif
++#endif
++#endif
++
++  if (errors)
++    {
++      PRINT3 ("%d error(s), %d test(s)\n", errors, num_tests);
++      abort ();
++    }
++  else
++    PRINT2 ("No errors, %d test(s)\n", num_tests);
++
++  return 0;
++}
+Index: gcc/testsuite/gcc.target/spu/ea/compile2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/compile2.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/compile2.c	(.../cell-4_4-branch)
+@@ -0,0 +1,43 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* Make sure __ea structure references work.  */
++
++/* { dg-do compile } */
++
++typedef unsigned long int uintptr_t;
++
++struct tostruct
++{
++  uintptr_t selfpc;
++  long count;
++  unsigned short link;
++};
++
++/* froms are indexing tos */
++static __ea unsigned short *froms;
++static __ea struct tostruct *tos = 0;
++
++void
++foo (uintptr_t frompc, uintptr_t selfpc)
++{
++  __ea unsigned short *frompcindex;
++
++  frompcindex = &froms[(frompc) / (4 * sizeof (*froms))];
++  *frompcindex = tos[0].link;
++
++  return;
++}
+Index: gcc/testsuite/gcc.target/spu/ea/cast1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/cast1.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/cast1.c	(.../cell-4_4-branch)
+@@ -0,0 +1,43 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do run } */
++
++extern void abort (void);
++extern unsigned long long __ea_local_store;
++
++__ea int *ppu;
++int x, *spu = &x, *spu2;
++
++int
++main (int argc, char **argv)
++{
++  ppu = (__ea int *) spu;
++  spu2 = (int *) ppu;
++
++#ifdef __EA32__
++  if ((int) ppu != (int) __ea_local_store + (int) spu)
++#else
++  if ((unsigned long long) ppu != __ea_local_store + (unsigned long long)(int) spu)
++#endif
++
++    abort ();
++
++  if (spu != spu2)
++    abort ();
++
++  return 0;
++}
+Index: gcc/testsuite/gcc.target/spu/ea/cast2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/cast2.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/cast2.c	(.../cell-4_4-branch)
+@@ -0,0 +1,74 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do run } */
++
++extern void abort (void);
++
++int array[128];
++
++__ea int *ea;
++int *lm;
++
++void verify_ea (void) __attribute__ ((noinline));
++void
++verify_ea (void)
++{
++  if (ea != (__ea int *)lm)
++    abort ();
++}
++
++void verify_lm (void) __attribute__ ((noinline));
++void
++verify_lm (void)
++{
++  if ((int *)ea != lm)
++    abort ();
++}
++
++void verify_diff (int x) __attribute__ ((noinline));
++void
++verify_diff (int x)
++{
++  if (ea - lm != x)
++    abort ();
++}
++
++int
++main (int argc, char **argv)
++{
++  ea = 0;
++  lm = 0;
++  verify_ea ();
++  verify_lm ();
++  verify_diff (0);
++
++  ea = &array[64];
++  lm = &array[64];
++  verify_ea ();
++  verify_lm ();
++  verify_diff (0);
++
++  ea = &array[0];
++  lm = &array[64];
++  verify_diff (-64);
++
++  ea = &array[64];
++  lm = &array[0];
++  verify_diff (64);
++
++  return 0;
++}
+Index: gcc/testsuite/gcc.target/spu/ea/options1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/options1.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/options1.c	(.../cell-4_4-branch)
+@@ -0,0 +1,22 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* Test -mcache-size.  */
++
++/* { dg-do compile } */
++/* { dg-options "-mcache-size=128" } */
++
++int x;
+Index: gcc/testsuite/gcc.target/spu/ea/ops1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/ops1.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/ops1.c	(.../cell-4_4-branch)
+@@ -0,0 +1,94 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* This is the same as ops2.c except for the compile option.
++   If you modify this code, please modify ops2.c as well.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -std=gnu99 -pedantic-errors -maddress-space-conversion" } */
++
++#define __lm
++
++__ea int ea_var = 1;
++__lm int lm_var = 2;
++
++typedef __ea int *ea_ptr_t;
++typedef __lm int *lm_ptr_t;
++
++typedef __ea void *ea_vptr_t;
++typedef __lm void *lm_vptr_t;
++
++ea_ptr_t ea, ea2;
++lm_ptr_t lm, lm2;
++
++ea_vptr_t eav;
++lm_vptr_t lmv;
++
++extern void call_ea (ea_ptr_t);
++extern void call_lm (lm_ptr_t);
++
++/* Assignment, initialization, argument passing, and return.  */
++void to_ea (void) { ea = lm; }
++void to_lm (void) { lm = ea; }			/* { dg-error "assignment from pointer to non-enclosed address space" } */
++void init_ea (void) { ea_ptr_t l_ea = lm; }
++void init_lm (void) { lm_ptr_t l_lm = ea; }	/* { dg-error "initialization from pointer to non-enclosed address space" } */
++ea_ptr_t ret_ea (void) { return lm; }
++lm_ptr_t ret_lm (void) { return ea; }		/* { dg-error "return from pointer to non-enclosed address space" } */
++void call_ea2 (void) { call_ea (lm); }
++void call_lm2 (void) { call_lm (ea); }		/* { dg-error "passing argument 1 of 'call_lm' from pointer to non-enclosed address space" } */
++
++/* Explicit casts.  */
++void to_ea_with_cast (void) { ea = (ea_ptr_t)lm; }
++void to_lm_with_cast (void) { lm = (lm_ptr_t)ea; }
++void init_ea_with_cast (void) { ea_ptr_t l_ea = (ea_ptr_t)lm; }
++void init_lm_with_cast (void) { lm_ptr_t l_lm = (lm_ptr_t)ea; }
++ea_ptr_t ret_ea_with_cast (void) { return (ea_ptr_t)lm; }
++lm_ptr_t ret_lm_with_cast (void) { return (lm_ptr_t)ea; }
++void call_ea2_with_cast (void) { call_ea ((ea_ptr_t)lm); }
++void call_lm2_with_cast (void) { call_lm ((lm_ptr_t)ea); }
++
++/* Arithmetic operators.  */
++int sub_eaea (void) { return ea - ea2; }
++int sub_ealm (void) { return ea - lm2; }
++int sub_lmea (void) { return lm - ea2; }
++int sub_lmlm (void) { return lm - lm2; }
++ea_ptr_t if_eaea1 (int test) { return test? ea : ea2; }
++lm_ptr_t if_eaea2 (int test) { return test? ea : ea2; }	/* { dg-error "return from pointer to non-enclosed address space" } */
++ea_ptr_t if_ealm1 (int test) { return test? ea : lm2; }
++lm_ptr_t if_ealm2 (int test) { return test? ea : lm2; }	/* { dg-error "return from pointer to non-enclosed address space" } */
++ea_ptr_t if_lmea1 (int test) { return test? lm : ea2; }
++lm_ptr_t if_lmea2 (int test) { return test? lm : ea2; }	/* { dg-error "return from pointer to non-enclosed address space" } */
++ea_ptr_t if_lmlm1 (int test) { return test? lm : lm2; }
++lm_ptr_t if_lmlm2 (int test) { return test? lm : lm2; }
++
++/* Relational operators.  */
++int eq_eaea (void) { return ea == ea2; }
++int eq_ealm (void) { return ea == lm2; }
++int eq_lmea (void) { return lm == ea2; }
++int eq_lmlm (void) { return lm == lm2; }
++int lt_eaea (void) { return ea < ea2; }
++int lt_ealm (void) { return ea < lm2; }
++int lt_lmea (void) { return lm < ea2; }
++int lt_lmlm (void) { return lm < lm2; }
++
++/* Null pointer.  */
++void null_ea1 (void) { ea = 0; }
++void null_ea2 (void) { ea = (void *)0; }
++void null_ea3 (void) { ea = (__ea void *)0; }
++void null_lm1 (void) { lm = 0; }
++void null_lm2 (void) { lm = (void *)0; }
++void null_lm3 (void) { lm = (__ea void *)0; }	/* { dg-error "assignment from pointer to non-enclosed address space" } */
++
+Index: gcc/testsuite/gcc.target/spu/ea/execute1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/execute1.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/execute1.c	(.../cell-4_4-branch)
+@@ -0,0 +1,41 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do compile } */
++
++#include <stdlib.h>
++
++__ea char str[] = "abc";
++
++int
++main (void)
++{
++  __ea char *p = str;
++
++  if (*p++ != 'a')
++    abort ();
++
++  if (*p++ != 'b')
++    abort ();
++
++  if (*p++ != 'c')
++    abort ();
++
++  if (*p++ != '\0')
++    abort ();
++
++  return 0;
++}
+Index: gcc/testsuite/gcc.target/spu/ea/ops2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/ops2.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/ops2.c	(.../cell-4_4-branch)
+@@ -0,0 +1,94 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* This is the same as ops1.c except for the compile option.
++   If you modify this code, please modify ops1.c as well.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -std=gnu99 -pedantic-errors -mno-address-space-conversion" } */
++
++#define __lm
++
++__ea int ea_var = 1;
++__lm int lm_var = 2;
++
++typedef __ea int *ea_ptr_t;
++typedef __lm int *lm_ptr_t;
++
++typedef __ea void *ea_vptr_t;
++typedef __lm void *lm_vptr_t;
++
++ea_ptr_t ea, ea2;
++lm_ptr_t lm, lm2;
++
++ea_vptr_t eav;
++lm_vptr_t lmv;
++
++extern void call_ea (ea_ptr_t);
++extern void call_lm (lm_ptr_t);
++
++/* Assignment, initialization, argument passing, and return.  */
++void to_ea (void) { ea = lm; }			/* { dg-error "assignment from pointer to non-enclosed address space" } */
++void to_lm (void) { lm = ea; }			/* { dg-error "assignment from pointer to non-enclosed address space" } */
++void init_ea (void) { ea_ptr_t l_ea = lm; }	/* { dg-error "initialization from pointer to non-enclosed address space" } */
++void init_lm (void) { lm_ptr_t l_lm = ea; }	/* { dg-error "initialization from pointer to non-enclosed address space" } */
++ea_ptr_t ret_ea (void) { return lm; }		/* { dg-error "return from pointer to non-enclosed address space" } */
++lm_ptr_t ret_lm (void) { return ea; }		/* { dg-error "return from pointer to non-enclosed address space" } */
++void call_ea2 (void) { call_ea (lm); }		/* { dg-error "passing argument 1 of 'call_ea' from pointer to non-enclosed address space" } */
++void call_lm2 (void) { call_lm (ea); }		/* { dg-error "passing argument 1 of 'call_lm' from pointer to non-enclosed address space" } */
++
++/* Explicit casts.  */
++void to_ea_with_cast (void) { ea = (ea_ptr_t)lm; }		/* { dg-warning "cast to __ea address space pointer" } */
++void to_lm_with_cast (void) { lm = (lm_ptr_t)ea; }		/* { dg-warning "cast to generic address space pointer" } */
++void init_ea_with_cast (void) { ea_ptr_t l_ea = (ea_ptr_t)lm; }	/* { dg-warning "cast to __ea address space pointer" } */
++void init_lm_with_cast (void) { lm_ptr_t l_lm = (lm_ptr_t)ea; }	/* { dg-warning "cast to generic address space pointer" } */
++ea_ptr_t ret_ea_with_cast (void) { return (ea_ptr_t)lm; }	/* { dg-warning "cast to __ea address space pointer" } */
++lm_ptr_t ret_lm_with_cast (void) { return (lm_ptr_t)ea; }	/* { dg-warning "cast to generic address space pointer" } */
++void call_ea2_with_cast (void) { call_ea ((ea_ptr_t)lm); }	/* { dg-warning "cast to __ea address space pointer" } */
++void call_lm2_with_cast (void) { call_lm ((lm_ptr_t)ea); }	/* { dg-warning "cast to generic address space pointer" } */
++
++/* Arithmetic operators.  */
++int sub_eaea (void) { return ea - ea2; }
++int sub_ealm (void) { return ea - lm2; }		/* { dg-error "invalid operands to binary -" } */
++int sub_lmea (void) { return lm - ea2; }		/* { dg-error "invalid operands to binary -" } */
++int sub_lmlm (void) { return lm - lm2; }
++ea_ptr_t if_eaea1 (int test) { return test? ea : ea2; }
++lm_ptr_t if_eaea2 (int test) { return test? ea : ea2; }	/* { dg-error "return from pointer to non-enclosed address space" } */
++ea_ptr_t if_ealm1 (int test) { return test? ea : lm2; } /* { dg-error "pointers to disjoint address spaces used in conditional expression" } */
++lm_ptr_t if_ealm2 (int test) { return test? ea : lm2; } /* { dg-error "pointers to disjoint address spaces used in conditional expression" } */
++ea_ptr_t if_lmea1 (int test) { return test? lm : ea2; } /* { dg-error "pointers to disjoint address spaces used in conditional expression" } */
++lm_ptr_t if_lmea2 (int test) { return test? lm : ea2; } /* { dg-error "pointers to disjoint address spaces used in conditional expression" } */
++ea_ptr_t if_lmlm1 (int test) { return test? lm : lm2; }	/* { dg-error "return from pointer to non-enclosed address space" } */
++lm_ptr_t if_lmlm2 (int test) { return test? lm : lm2; }
++
++/* Relational operators.  */
++int eq_eaea (void) { return ea == ea2; }
++int eq_ealm (void) { return ea == lm2; }	/* { dg-error "comparison of pointers to disjoint address spaces" } */
++int eq_lmea (void) { return lm == ea2; }	/* { dg-error "comparison of pointers to disjoint address spaces" } */
++int eq_lmlm (void) { return lm == lm2; }
++int lt_eaea (void) { return ea < ea2; }
++int lt_ealm (void) { return ea < lm2; }		/* { dg-error "comparison of pointers to disjoint address spaces" } */
++int lt_lmea (void) { return lm < ea2; }		/* { dg-error "comparison of pointers to disjoint address spaces" } */
++int lt_lmlm (void) { return lm < lm2; }
++
++/* Null pointer.  */
++void null_ea1 (void) { ea = 0; }
++void null_ea2 (void) { ea = (void *)0; }
++void null_ea3 (void) { ea = (__ea void *)0; }
++void null_lm1 (void) { lm = 0; }
++void null_lm2 (void) { lm = (void *)0; }
++void null_lm3 (void) { lm = (__ea void *)0; }	/* { dg-error "assignment from pointer to non-enclosed address space" } */
++
+Index: gcc/testsuite/gcc.target/spu/ea/cache1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/cache1.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/cache1.c	(.../cell-4_4-branch)
+@@ -0,0 +1,195 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target "ealib" } */
++
++#include <stdlib.h>
++#include <string.h>
++#include <ea.h>
++#include <spu_cache.h>
++
++#ifdef __EA64__
++#define addr unsigned long long
++#else
++#define addr unsigned long
++#endif
++
++static __ea void *bigblock;
++static __ea void *block;
++static int *ls_block;
++
++extern char __cache_tag_array_size[];
++#define CACHE_SIZE (4 * (int) &__cache_tag_array_size[0])
++#define LINE_SIZE ((addr)128)
++
++void
++init_mem (void)
++{
++  bigblock = malloc_ea (CACHE_SIZE + 2 * LINE_SIZE);
++  block = malloc_ea (2 * LINE_SIZE);
++  ls_block = malloc (LINE_SIZE);
++
++  memset_ea (bigblock, 0, CACHE_SIZE + 2 * LINE_SIZE);
++  memset_ea (block, -1, 2 * LINE_SIZE);
++  memset (ls_block, -1, LINE_SIZE);
++  cache_flush ();
++}
++
++/* Test 1: Simple cache fetching.  */
++void
++test1 (void)
++{
++  addr aligned = ((((addr) block) + LINE_SIZE - 1) & -LINE_SIZE);
++  int *p1 = NULL;
++  int *p2 = NULL;
++  int i = 0;
++
++  /* First, check if the same addr give the same cache ptr.  */
++  p1 = cache_fetch ((__ea void *) aligned);
++  p2 = cache_fetch ((__ea void *) aligned);
++
++  if (p1 != p2)
++    abort ();
++
++  /* Check that the data actually is in the cache. */
++  for (i = 0; i < LINE_SIZE / sizeof (int); i++)
++    {
++      if (p1[i] != -1)
++	abort ();
++    }
++
++  /* Check returning within the cache line. */
++  p2 = cache_fetch ((__ea void *) (aligned + sizeof (int)));
++
++  if (p2 - p1 != 1)
++    abort ();
++
++  /* Finally, check that fetching an LS pointer returns that pointer.  */
++  p1 = cache_fetch ((__ea char *) ls_block);
++  if (p1 != ls_block)
++    abort ();
++}
++
++/* Test 2: Eviction testing. */
++void
++test2 (void)
++{
++  addr aligned = ((((addr) block) + LINE_SIZE - 1) & -LINE_SIZE);
++  int *p = NULL;
++  int i = 0;
++
++  /* First check that clean evictions don't write back.  */
++  p = cache_fetch ((__ea void *) aligned);
++  for (i = 0; i < LINE_SIZE / sizeof (int); i++)
++    p[i] = 0;
++
++  cache_evict ((__ea void *) aligned);
++  memcpy_ea ((__ea char *) ls_block, (__ea void *) aligned, LINE_SIZE);
++
++  for (i = 0; i < LINE_SIZE / sizeof (int); i++)
++    {
++      if (ls_block[i] == 0)
++	abort ();
++    }
++
++  /* Now check that dirty evictions do write back.  */
++  p = cache_fetch_dirty ((__ea void *) aligned, LINE_SIZE);
++  for (i = 0; i < LINE_SIZE / sizeof (int); i++)
++    p[i] = 0;
++
++  cache_evict ((__ea void *) aligned);
++  memcpy_ea ((__ea char *) ls_block, (__ea void *) aligned, LINE_SIZE);
++
++  for (i = 0; i < LINE_SIZE / sizeof (int); i++)
++    {
++      if (ls_block[i] != 0)
++	abort ();
++    }
++
++  /* Finally, check that non-atomic writeback only writes dirty bytes.  */
++
++  for (i = 0; i < LINE_SIZE / sizeof (int); i++)
++    {
++      p = cache_fetch_dirty ((__ea void *) (aligned + i * sizeof (int)),
++			     (i % 2) * sizeof (int));
++      p[0] = -1;
++    }
++
++  cache_evict ((__ea void *) aligned);
++  memcpy_ea ((__ea char *) ls_block, (__ea void *) aligned, LINE_SIZE);
++
++  for (i = 0; i < LINE_SIZE / sizeof (int); i++)
++    {
++      if ((ls_block[i] == -1) && (i % 2 == 0))
++	abort ();
++      if ((ls_block[i] == 0) && (i % 2 == 1))
++	abort ();
++    }
++}
++
++/* Test LS forced-eviction. */
++void
++test3 (void)
++{
++  addr aligned = ((((addr) bigblock) + LINE_SIZE - 1) & -LINE_SIZE);
++  char *test = NULL;
++  char *ls = NULL;
++  int i = 0;
++
++  /* Init memory, fill the cache to capacity.  */
++  ls = cache_fetch_dirty ((__ea void *) aligned, LINE_SIZE);
++  for (i = 1; i < (CACHE_SIZE / LINE_SIZE); i++)
++    cache_fetch_dirty ((__ea void *) (aligned + i * LINE_SIZE), LINE_SIZE);
++
++  memset (ls, -1, LINE_SIZE);
++  test = cache_fetch ((__ea void *) (aligned + CACHE_SIZE));
++
++  /* test == ls indicates cache collision.  */
++  if (test != ls)
++    abort ();
++
++  /* Make sure it actually wrote the cache line.  */
++  for (i = 0; i < LINE_SIZE; i++)
++    {
++      if (ls[i] != 0)
++	abort ();
++    }
++
++  ls = cache_fetch ((__ea void *) aligned);
++
++  /* test != ls indicates another entry was evicted.  */
++  if (test == ls)
++    abort ();
++
++  /* Make sure that the previous eviction actually wrote back.  */
++  for (i = 0; i < LINE_SIZE; i++)
++    {
++      if (ls[i] != 0xFF)
++	abort ();
++    }
++}
++
++int
++main (int argc, char **argv)
++{
++  init_mem ();
++  test1 ();
++  test2 ();
++  test3 ();
++
++  return 0;
++}
+Index: gcc/testsuite/gcc.target/spu/ea/execute2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/execute2.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/execute2.c	(.../cell-4_4-branch)
+@@ -0,0 +1,41 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do run } */
++
++#include <stdlib.h>
++
++char str[] = "abc";
++
++int
++main (void)
++{
++  __ea char *p = (__ea char *)str;
++
++  if (*p++ != 'a')
++    abort ();
++
++  if (*p++ != 'b')
++    abort ();
++
++  if (*p++ != 'c')
++    abort ();
++
++  if (*p++ != '\0')
++    abort ();
++
++  return 0;
++}
+Index: gcc/testsuite/gcc.target/spu/ea/execute3.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/execute3.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/execute3.c	(.../cell-4_4-branch)
+@@ -0,0 +1,39 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do run } */
++
++#include <stdlib.h>
++
++int
++main (void)
++{
++  __ea char *p = (__ea char *)"abc";
++
++  if (*p++ != 'a')
++    abort ();
++
++  if (*p++ != 'b')
++    abort ();
++
++  if (*p++ != 'c')
++    abort ();
++
++  if (*p++ != '\0')
++    abort ();
++
++  return 0;
++}
+Index: gcc/testsuite/gcc.target/spu/ea/pr41857.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/pr41857.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/pr41857.c	(.../cell-4_4-branch)
+@@ -0,0 +1,29 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do compile } */
++
++__ea char *strchr_ea (__ea const char *s, int c);
++__ea char *foo (__ea char *s)
++{
++  __ea char *ret = s;
++  int i;
++
++  for (i = 0; i < 3; i++)
++    ret = strchr_ea (ret, s[i]);
++
++  return ret;
++}
+Index: gcc/testsuite/gcc.target/spu/ea/errors1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/errors1.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/errors1.c	(.../cell-4_4-branch)
+@@ -0,0 +1,67 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* Invalid __ea declarations.  */
++
++/* { dg-do compile } */
++
++typedef __ea int eaint;
++
++void func ()
++{
++  register __ea int local1; /* { dg-error "'__ea' combined with 'register' qualifier for 'local1'" } */
++  auto __ea int local2;     /* { dg-error "'__ea' combined with 'auto' qualifier for 'local2'" } */
++  __ea int local3;	    /* { dg-error "'__ea' specified for auto variable 'local3'" } */
++  register int *__ea p1;    /* { dg-error "'__ea' combined with 'register' qualifier for 'p1'" } */
++  auto char *__ea p2;       /* { dg-error "'__ea' combined with 'auto' qualifier for 'p2'" } */
++  void *__ea p3;            /* { dg-error "'__ea' specified for auto variable 'p3'" } */
++  register __ea int a1[2];  /* { dg-error "'__ea' combined with 'register' qualifier for 'a1'" } */
++  auto __ea char a2[1];     /* { dg-error "'__ea' combined with 'auto' qualifier for 'a2'" } */
++  __ea char a3[5];          /* { dg-error "'__ea' specified for auto variable 'a3'" } */
++  register eaint td1;       /* { dg-error "'__ea' combined with 'register' qualifier for 'td1'" } */
++  auto eaint td2;           /* { dg-error "'__ea' combined with 'auto' qualifier for 'td2'" } */
++  eaint td3;	            /* { dg-error "'__ea' specified for auto variable 'td3'" } */
++}
++
++void func2 (__ea int x)	    /* { dg-error "'__ea' specified for parameter 'x'" } */
++{ }
++
++void func2td (eaint x)	    /* { dg-error "'__ea' specified for parameter 'x'" } */
++{ }
++
++struct st {
++  __ea int x;		    /* { dg-error "'__ea' specified for structure field 'x'" } */
++  eaint td;		    /* { dg-error "'__ea' specified for structure field 'td'" } */
++  int *__ea q;		    /* { dg-error "'__ea' specified for structure field 'q'" } */
++  int __ea b : 7;	    /* { dg-error "'__ea' specified for structure field 'b'" } */
++  int __ea : 1;		    /* { dg-error "'__ea' specified for structure field" } */
++} s;
++
++struct A { int a; };
++
++int func3 (int *__ea);	    /* { dg-error "'__ea' specified for unnamed parameter" } */
++int func3 (int *__ea x)	    /* { dg-error "'__ea' specified for parameter 'x'" } */
++{
++  struct A i = (__ea struct A) { 1 };	/* { dg-error "compound literal qualified by address-space qualifier" } */
++  return i.a;
++}
++
++extern __ea int ea_var;		/* { dg-message "note: previous declaration of 'ea_var' was here" } */
++int ea_var;			/* { dg-error "conflicting named address spaces \\(generic vs __ea\\) for 'ea_var'" } */
++
++extern eaint ea_var_td;		/* { dg-message "note: previous declaration of 'ea_var_td' was here" } */
++int ea_var_td;			/* { dg-error "conflicting named address spaces \\(generic vs __ea\\) for 'ea_var_td'" } */
++
+Index: gcc/testsuite/gcc.target/spu/ea/cppdefine.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/spu/ea/cppdefine.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.target/spu/ea/cppdefine.c	(.../cell-4_4-branch)
+@@ -0,0 +1,36 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* Test default __EA32__/__EA64__ define.  */
++
++/* { dg-do compile } */
++
++#if !defined (__EA32__) && !defined (__EA64__)
++#error both __EA32__ and __EA64__ undefined
++#endif
++
++#if defined (__EA32__) && defined (__EA64__)
++#error both __EA32__ and __EA64__ defined
++#endif
++
++#ifdef __EA32__
++int x [ sizeof (__ea char *) == 4 ? 1 : -1 ];
++#endif
++
++#ifdef __EA64__
++int x [ sizeof (__ea char *) == 8 ? 1 : -1 ];
++#endif
++
+Index: gcc/testsuite/gcc.dg/vector-init-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/vector-init-1.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.dg/vector-init-1.c	(.../cell-4_4-branch)
+@@ -0,0 +1,6 @@
++/* { dg-do compile } */
++
++/* PR C/31499, test that the C front-end treats vectors like an array. */
++
++#define vector __attribute__((__vector_size__(4*sizeof(int)) ))
++vector signed int v1[]={0,1,2,3,4,5,6,7};
+Index: gcc/testsuite/gcc.dg/vector-4.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/vector-4.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.dg/vector-4.c	(.../cell-4_4-branch)
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++#define vector __attribute__((vector_size(4*sizeof(int)) ))
++
++vector int a, b, c;
++
++
++/* Test that remainder works for vectors. */
++void f(void)
++{
++  a = b % c;
++}
+Index: gcc/testsuite/gcc.dg/vector-init-2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/vector-init-2.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.dg/vector-init-2.c	(.../cell-4_4-branch)
+@@ -0,0 +1,25 @@
++/* { dg-do run } */
++
++/* PR C/31499, test that the C front-end treats vectors like an array
++   and that it works at runtime. */
++
++#define vector __attribute__((__vector_size__(4*sizeof(int)) ))
++vector signed int v1[]={0,1,2,3,4,5,6,7};
++
++
++int main(void)
++{
++  int i;
++  for (i = 0; i < sizeof(v1)/sizeof(v1[0]); i++)
++  {
++    vector int t = v1[i];
++    int *d = (int*)&t;
++    int j;
++    for (j = 0; j < 4; j++)
++      {
++        if (d[j] != i * 4 + j)
++	  __builtin_abort ();
++      }
++  }
++  return 0;
++}
+\ No newline at end of file
+Index: gcc/testsuite/gcc.dg/simd-1b.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/simd-1b.c	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/gcc.dg/simd-1b.c	(.../cell-4_4-branch)
+@@ -14,7 +14,7 @@
+ hanneke ()
+ {
+   /* Operators on compatible SIMD types.  */
+-  a %= b; /* { dg-error "invalid operands to binary %" } */
++  a %= b;
+   c &= d;
+   a |= b;
+   c ^= d;
+Index: gcc/testsuite/g++.dg/ext/vector16.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/ext/vector16.C	(.../gcc-4_4-branch)
++++ b/src/gcc/testsuite/g++.dg/ext/vector16.C	(.../cell-4_4-branch)
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++#define vector __attribute__((vector_size(4*sizeof(int)) ))
++
++vector int a, b, c;
++
++
++/* Test that remainder works for vectors. */
++void f(void)
++{
++  a = b % c;
++}
+Index: gcc/cp/typeck.c
+===================================================================
+--- a/src/gcc/cp/typeck.c	(.../gcc-4_4-branch)
++++ b/src/gcc/cp/typeck.c	(.../cell-4_4-branch)
+@@ -3481,7 +3481,11 @@
+     case FLOOR_MOD_EXPR:
+       warn_for_div_by_zero (location, op1);
+ 
+-      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
++      if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
++	  && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
++	  && TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE)
++	common = 1;
++      else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
+ 	{
+ 	  /* Although it would be tempting to shorten always here, that loses
+ 	     on some targets, since the modulo instruction is undefined if the
+Index: gcc/tree-ssa-loop-ivopts.c
+===================================================================
+--- a/src/gcc/tree-ssa-loop-ivopts.c	(.../gcc-4_4-branch)
++++ b/src/gcc/tree-ssa-loop-ivopts.c	(.../cell-4_4-branch)
+@@ -2575,21 +2575,25 @@
+ static rtx
+ produce_memory_decl_rtl (tree obj, int *regno)
+ {
++  addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (obj));
++  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
+   rtx x;
+   
+   gcc_assert (obj);
+   if (TREE_STATIC (obj) || DECL_EXTERNAL (obj))
+     {
+       const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (obj));
+-      x = gen_rtx_SYMBOL_REF (Pmode, name);
++      x = gen_rtx_SYMBOL_REF (address_mode, name);
+       SET_SYMBOL_REF_DECL (x, obj);
+       x = gen_rtx_MEM (DECL_MODE (obj), x);
++      set_mem_addr_space (x, as);
+       targetm.encode_section_info (obj, x, true);
+     }
+   else
+     {
+-      x = gen_raw_REG (Pmode, (*regno)++);
++      x = gen_raw_REG (address_mode, (*regno)++);
+       x = gen_rtx_MEM (DECL_MODE (obj), x);
++      set_mem_addr_space (x, as);
+     }
+ 
+   return x;
+@@ -2677,7 +2681,8 @@
+ 
+   cost = seq_cost (seq, speed);
+   if (MEM_P (rslt))
+-    cost += address_cost (XEXP (rslt, 0), TYPE_MODE (type), speed);
++    cost += address_cost (XEXP (rslt, 0), TYPE_MODE (type),
++			  TYPE_ADDR_SPACE (type), speed);
+ 
+   return cost;
+ }
+@@ -2953,124 +2958,153 @@
+ }
+ 
+ /* Returns true if multiplying by RATIO is allowed in an address.  Test the
+-   validity for a memory reference accessing memory of mode MODE.  */
++   validity for a memory reference accessing memory of mode MODE in
++   address space AS.  */
+ 
++DEF_VEC_P (sbitmap);
++DEF_VEC_ALLOC_P (sbitmap, heap);
++
+ bool
+-multiplier_allowed_in_address_p (HOST_WIDE_INT ratio, enum machine_mode mode)
++multiplier_allowed_in_address_p (HOST_WIDE_INT ratio, enum machine_mode mode,
++				 addr_space_t as)
+ {
+ #define MAX_RATIO 128
+-  static sbitmap valid_mult[MAX_MACHINE_MODE];
+-  
+-  if (!valid_mult[mode])
++  unsigned int data_index = (int) as * MAX_MACHINE_MODE + (int) mode;
++  static VEC (sbitmap, heap) *valid_mult_list;
++  sbitmap valid_mult;
++
++  if (data_index >= VEC_length (sbitmap, valid_mult_list))
++    VEC_safe_grow_cleared (sbitmap, heap, valid_mult_list, data_index + 1);
++
++  valid_mult = VEC_index (sbitmap, valid_mult_list, data_index);
++  if (!valid_mult)
+     {
+-      rtx reg1 = gen_raw_REG (Pmode, LAST_VIRTUAL_REGISTER + 1);
++      enum machine_mode address_mode = targetm.addr_space.address_mode (as);
++      rtx reg1 = gen_raw_REG (address_mode, LAST_VIRTUAL_REGISTER + 1);
+       rtx addr;
+       HOST_WIDE_INT i;
+ 
+-      valid_mult[mode] = sbitmap_alloc (2 * MAX_RATIO + 1);
+-      sbitmap_zero (valid_mult[mode]);
+-      addr = gen_rtx_fmt_ee (MULT, Pmode, reg1, NULL_RTX);
++      valid_mult = sbitmap_alloc (2 * MAX_RATIO + 1);
++      sbitmap_zero (valid_mult);
++      addr = gen_rtx_fmt_ee (MULT, address_mode, reg1, NULL_RTX);
+       for (i = -MAX_RATIO; i <= MAX_RATIO; i++)
+ 	{
+-	  XEXP (addr, 1) = gen_int_mode (i, Pmode);
+-	  if (memory_address_p (mode, addr))
+-	    SET_BIT (valid_mult[mode], i + MAX_RATIO);
++	  XEXP (addr, 1) = gen_int_mode (i, address_mode);
++	  if (memory_address_addr_space_p (mode, addr, as))
++	    SET_BIT (valid_mult, i + MAX_RATIO);
+ 	}
+ 
+       if (dump_file && (dump_flags & TDF_DETAILS))
+ 	{
+ 	  fprintf (dump_file, "  allowed multipliers:");
+ 	  for (i = -MAX_RATIO; i <= MAX_RATIO; i++)
+-	    if (TEST_BIT (valid_mult[mode], i + MAX_RATIO))
++	    if (TEST_BIT (valid_mult, i + MAX_RATIO))
+ 	      fprintf (dump_file, " %d", (int) i);
+ 	  fprintf (dump_file, "\n");
+ 	  fprintf (dump_file, "\n");
+ 	}
++
++      VEC_replace (sbitmap, valid_mult_list, data_index, valid_mult);
+     }
+ 
+   if (ratio > MAX_RATIO || ratio < -MAX_RATIO)
+     return false;
+ 
+-  return TEST_BIT (valid_mult[mode], ratio + MAX_RATIO);
++  return TEST_BIT (valid_mult, ratio + MAX_RATIO);
+ }
+ 
+ /* Returns cost of address in shape symbol + var + OFFSET + RATIO * index.
+    If SYMBOL_PRESENT is false, symbol is omitted.  If VAR_PRESENT is false,
+    variable is omitted.  Compute the cost for a memory reference that accesses
+-   a memory location of mode MEM_MODE.
++   a memory location of mode MEM_MODE in address space AS.
+ 
+    TODO -- there must be some better way.  This all is quite crude.  */
+ 
++typedef struct
++{
++  HOST_WIDE_INT min_offset, max_offset;
++  unsigned costs[2][2][2][2];
++} *address_cost_data;
++
++DEF_VEC_P (address_cost_data);
++DEF_VEC_ALLOC_P (address_cost_data, heap);
++
+ static comp_cost
+ get_address_cost (bool symbol_present, bool var_present,
+ 		  unsigned HOST_WIDE_INT offset, HOST_WIDE_INT ratio,
+-		  enum machine_mode mem_mode,
++		  enum machine_mode mem_mode, addr_space_t as,
+ 		  bool speed)
+ {
+-  static bool initialized[MAX_MACHINE_MODE];
+-  static HOST_WIDE_INT rat[MAX_MACHINE_MODE], off[MAX_MACHINE_MODE];
+-  static HOST_WIDE_INT min_offset[MAX_MACHINE_MODE], max_offset[MAX_MACHINE_MODE];
+-  static unsigned costs[MAX_MACHINE_MODE][2][2][2][2];
++  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
++  static VEC(address_cost_data, heap) *address_cost_data_list;
++  unsigned int data_index = (int) as * MAX_MACHINE_MODE + (int) mem_mode;
++  address_cost_data data;
+   unsigned cost, acost, complexity;
+   bool offset_p, ratio_p;
+   HOST_WIDE_INT s_offset;
+   unsigned HOST_WIDE_INT mask;
+   unsigned bits;
+ 
+-  if (!initialized[mem_mode])
++  if (data_index >= VEC_length (address_cost_data, address_cost_data_list))
++    VEC_safe_grow_cleared (address_cost_data, heap, address_cost_data_list,
++			   data_index + 1);
++
++  data = VEC_index (address_cost_data, address_cost_data_list, data_index);
++  if (!data)
+     {
+       HOST_WIDE_INT i;
+       HOST_WIDE_INT start = BIGGEST_ALIGNMENT / BITS_PER_UNIT;
++      HOST_WIDE_INT rat, off;
+       int old_cse_not_expected;
+       unsigned sym_p, var_p, off_p, rat_p, add_c;
+       rtx seq, addr, base;
+       rtx reg0, reg1;
+ 
+-      initialized[mem_mode] = true;
++      data = (address_cost_data) xcalloc (1, sizeof (*data));
+ 
+-      reg1 = gen_raw_REG (Pmode, LAST_VIRTUAL_REGISTER + 1);
++      reg1 = gen_raw_REG (address_mode, LAST_VIRTUAL_REGISTER + 1);
+ 
+-      addr = gen_rtx_fmt_ee (PLUS, Pmode, reg1, NULL_RTX);
++      addr = gen_rtx_fmt_ee (PLUS, address_mode, reg1, NULL_RTX);
+       for (i = start; i <= 1 << 20; i <<= 1)
+ 	{
+-	  XEXP (addr, 1) = gen_int_mode (i, Pmode);
+-	  if (!memory_address_p (mem_mode, addr))
++	  XEXP (addr, 1) = gen_int_mode (i, address_mode);
++	  if (!memory_address_addr_space_p (mem_mode, addr, as))
+ 	    break;
+ 	}
+-      max_offset[mem_mode] = i == start ? 0 : i >> 1;
+-      off[mem_mode] = max_offset[mem_mode];
++      data->max_offset = i == start ? 0 : i >> 1;
++      off = data->max_offset;
+ 
+       for (i = start; i <= 1 << 20; i <<= 1)
+ 	{
+-	  XEXP (addr, 1) = gen_int_mode (-i, Pmode);
+-	  if (!memory_address_p (mem_mode, addr))
++	  XEXP (addr, 1) = gen_int_mode (-i, address_mode);
++	  if (!memory_address_addr_space_p (mem_mode, addr, as))
+ 	    break;
+ 	}
+-      min_offset[mem_mode] = i == start ? 0 : -(i >> 1);
++      data->min_offset = i == start ? 0 : -(i >> 1);
+ 
+       if (dump_file && (dump_flags & TDF_DETAILS))
+ 	{
+ 	  fprintf (dump_file, "get_address_cost:\n");
+ 	  fprintf (dump_file, "  min offset %s %d\n",
+ 		   GET_MODE_NAME (mem_mode),
+-		   (int) min_offset[mem_mode]);
++		   (int) data->min_offset);
+ 	  fprintf (dump_file, "  max offset %s %d\n",
+ 		   GET_MODE_NAME (mem_mode),
+-		   (int) max_offset[mem_mode]);
++		   (int) data->max_offset);
+ 	}
+ 
+-      rat[mem_mode] = 1;
++      rat = 1;
+       for (i = 2; i <= MAX_RATIO; i++)
+-	if (multiplier_allowed_in_address_p (i, mem_mode))
++	if (multiplier_allowed_in_address_p (i, mem_mode, as))
+ 	  {
+-	    rat[mem_mode] = i;
++	    rat = i;
+ 	    break;
+ 	  }
+ 
+       /* Compute the cost of various addressing modes.  */
+       acost = 0;
+-      reg0 = gen_raw_REG (Pmode, LAST_VIRTUAL_REGISTER + 1);
+-      reg1 = gen_raw_REG (Pmode, LAST_VIRTUAL_REGISTER + 2);
++      reg0 = gen_raw_REG (address_mode, LAST_VIRTUAL_REGISTER + 1);
++      reg1 = gen_raw_REG (address_mode, LAST_VIRTUAL_REGISTER + 2);
+ 
+       for (i = 0; i < 16; i++)
+ 	{
+@@ -3081,15 +3115,15 @@
+ 
+ 	  addr = reg0;
+ 	  if (rat_p)
+-	    addr = gen_rtx_fmt_ee (MULT, Pmode, addr,
+-				   gen_int_mode (rat[mem_mode], Pmode));
++	    addr = gen_rtx_fmt_ee (MULT, address_mode, addr,
++				   gen_int_mode (rat, address_mode));
+ 
+ 	  if (var_p)
+-	    addr = gen_rtx_fmt_ee (PLUS, Pmode, addr, reg1);
++	    addr = gen_rtx_fmt_ee (PLUS, address_mode, addr, reg1);
+ 
+ 	  if (sym_p)
+ 	    {
+-	      base = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (""));
++	      base = gen_rtx_SYMBOL_REF (address_mode, ggc_strdup (""));
+ 	      /* ??? We can run into trouble with some backends by presenting
+ 		 it with symbols which haven't been properly passed through
+ 		 targetm.encode_section_info.  By setting the local bit, we
+@@ -3097,36 +3131,35 @@
+ 	      SYMBOL_REF_FLAGS (base) = SYMBOL_FLAG_LOCAL;
+ 
+ 	      if (off_p)
+-		base = gen_rtx_fmt_e (CONST, Pmode,
+-				      gen_rtx_fmt_ee (PLUS, Pmode,
+-						      base,
+-						      gen_int_mode (off[mem_mode],
+-								    Pmode)));
++		base = gen_rtx_fmt_e (CONST, address_mode,
++				      gen_rtx_fmt_ee
++					(PLUS, address_mode, base,
++					 gen_int_mode (off, address_mode)));
+ 	    }
+ 	  else if (off_p)
+-	    base = gen_int_mode (off[mem_mode], Pmode);
++	    base = gen_int_mode (off, address_mode);
+ 	  else
+ 	    base = NULL_RTX;
+     
+ 	  if (base)
+-	    addr = gen_rtx_fmt_ee (PLUS, Pmode, addr, base);
++	    addr = gen_rtx_fmt_ee (PLUS, address_mode, addr, base);
+   
+ 	  start_sequence ();
+ 	  /* To avoid splitting addressing modes, pretend that no cse will
+ 	     follow.  */
+ 	  old_cse_not_expected = cse_not_expected;
+ 	  cse_not_expected = true;
+-	  addr = memory_address (mem_mode, addr);
++	  addr = memory_address_addr_space (mem_mode, addr, as);
+ 	  cse_not_expected = old_cse_not_expected;
+ 	  seq = get_insns ();
+ 	  end_sequence ();
+ 
+ 	  acost = seq_cost (seq, speed);
+-	  acost += address_cost (addr, mem_mode, speed);
++	  acost += address_cost (addr, mem_mode, as, speed);
+ 
+ 	  if (!acost)
+ 	    acost = 1;
+-	  costs[mem_mode][sym_p][var_p][off_p][rat_p] = acost;
++	  data->costs[sym_p][var_p][off_p][rat_p] = acost;
+ 	}
+ 
+       /* On some targets, it is quite expensive to load symbol to a register,
+@@ -3141,19 +3174,19 @@
+ 	 If VAR_PRESENT is true, try whether the mode with
+ 	 SYMBOL_PRESENT = false is cheaper even with cost of addition, and
+ 	 if this is the case, use it.  */
+-      add_c = add_cost (Pmode, speed);
++      add_c = add_cost (address_mode, speed);
+       for (i = 0; i < 8; i++)
+ 	{
+ 	  var_p = i & 1;
+ 	  off_p = (i >> 1) & 1;
+ 	  rat_p = (i >> 2) & 1;
+ 
+-	  acost = costs[mem_mode][0][1][off_p][rat_p] + 1;
++	  acost = data->costs[0][1][off_p][rat_p] + 1;
+ 	  if (var_p)
+ 	    acost += add_c;
+ 
+-	  if (acost < costs[mem_mode][1][var_p][off_p][rat_p])
+-	    costs[mem_mode][1][var_p][off_p][rat_p] = acost;
++	  if (acost < data->costs[1][var_p][off_p][rat_p])
++	    data->costs[1][var_p][off_p][rat_p] = acost;
+ 	}
+   
+       if (dump_file && (dump_flags & TDF_DETAILS))
+@@ -3177,14 +3210,17 @@
+ 	      if (rat_p)
+ 		fprintf (dump_file, "rat * ");
+ 
+-	      acost = costs[mem_mode][sym_p][var_p][off_p][rat_p];
++	      acost = data->costs[sym_p][var_p][off_p][rat_p];
+ 	      fprintf (dump_file, "index costs %d\n", acost);
+ 	    }
+ 	  fprintf (dump_file, "\n");
+ 	}
++
++      VEC_replace (address_cost_data, address_cost_data_list,
++		   data_index, data);
+     }
+ 
+-  bits = GET_MODE_BITSIZE (Pmode);
++  bits = GET_MODE_BITSIZE (address_mode);
+   mask = ~(~(unsigned HOST_WIDE_INT) 0 << (bits - 1) << 1);
+   offset &= mask;
+   if ((offset >> (bits - 1) & 1))
+@@ -3193,18 +3229,18 @@
+ 
+   cost = 0;
+   offset_p = (s_offset != 0
+-	      && min_offset[mem_mode] <= s_offset
+-	      && s_offset <= max_offset[mem_mode]);
++	      && data->min_offset <= s_offset
++	      && s_offset <= data->max_offset);
+   ratio_p = (ratio != 1
+-	     && multiplier_allowed_in_address_p (ratio, mem_mode));
++	     && multiplier_allowed_in_address_p (ratio, mem_mode, as));
+ 
+   if (ratio != 1 && !ratio_p)
+-    cost += multiply_by_cost (ratio, Pmode, speed);
++    cost += multiply_by_cost (ratio, address_mode, speed);
+ 
+   if (s_offset && !offset_p && !symbol_present)
+-    cost += add_cost (Pmode, speed);
++    cost += add_cost (address_mode, speed);
+ 
+-  acost = costs[mem_mode][symbol_present][var_present][offset_p][ratio_p];
++  acost = data->costs[symbol_present][var_present][offset_p][ratio_p];
+   complexity = (symbol_present != 0) + (var_present != 0) + offset_p + ratio_p;
+   return new_cost (cost + acost, complexity);
+ }
+@@ -3421,6 +3457,7 @@
+ 		     unsigned HOST_WIDE_INT *offset, bitmap *depends_on)
+ {
+   HOST_WIDE_INT diff = 0;
++  enum machine_mode mode = TYPE_MODE (TREE_TYPE (e1));
+   comp_cost cost;
+   bool speed = optimize_loop_for_speed_p (data->current_loop);
+ 
+@@ -3443,7 +3480,7 @@
+   
+   cost = force_var_cost (data, e1, depends_on);
+   cost = add_costs (cost, force_var_cost (data, e2, depends_on));
+-  cost.cost += add_cost (Pmode, speed);
++  cost.cost += add_cost (mode, speed);
+ 
+   return cost;
+ }
+@@ -3619,7 +3656,9 @@
+   if (address_p)
+     return add_costs (cost, get_address_cost (symbol_present, var_present,
+ 				offset, ratio,
+-				TYPE_MODE (TREE_TYPE (*use->op_p)), speed));
++				TYPE_MODE (TREE_TYPE (*use->op_p)),
++				TYPE_ADDR_SPACE (TREE_TYPE (*use->op_p)),
++				speed));
+ 
+   /* Otherwise estimate the costs for computing the expression.  */
+   aratio = ratio > 0 ? ratio : -ratio;
+@@ -5309,6 +5348,7 @@
+ {
+   aff_tree aff;
+   gimple_stmt_iterator bsi = gsi_for_stmt (use->stmt);
++  tree base_hint = NULL_TREE;
+   tree ref;
+   bool ok;
+ 
+@@ -5316,7 +5356,22 @@
+   gcc_assert (ok);
+   unshare_aff_combination (&aff);
+ 
+-  ref = create_mem_ref (&bsi, TREE_TYPE (*use->op_p), &aff, data->speed);
++  /* To avoid undefined overflow problems, all IV candidates use unsigned
++     integer types.  The drawback is that this makes it impossible for
++     create_mem_ref to distinguish an IV that is based on a memory object
++     from one that represents simply an offset.
++
++     To work around this problem, we pass a hint to create_mem_ref that
++     indicates which variable (if any) in aff is an IV based on a memory
++     object.  Note that we only consider the candidate.  If this is not
++     based on an object, the base of the reference is in some subexpression
++     of the use -- but these will use pointer types, so they are recognized
++     by the create_mem_ref heuristics anyway.  */
++  if (cand->iv->base_object)
++    base_hint = var_at_stmt (data->current_loop, cand, use->stmt);
++
++  ref = create_mem_ref (&bsi, TREE_TYPE (*use->op_p), &aff, base_hint,
++			data->speed);
+   copy_ref_info (ref, *use->op_p);
+   *use->op_p = ref;
+ }
+Index: gcc/cse.c
+===================================================================
+--- a/src/gcc/cse.c	(.../gcc-4_4-branch)
++++ b/src/gcc/cse.c	(.../cell-4_4-branch)
+@@ -2435,6 +2435,10 @@
+   if (GET_MODE (x) != GET_MODE (y))
+     return 0;
+ 
++  /* MEMs refering to different address space are not equivalent.  */
++  if (code == MEM && MEM_ADDR_SPACE (x) != MEM_ADDR_SPACE (y))
++    return 0;
++
+   switch (code)
+     {
+     case PC:
+Index: gcc/c-tree.h
+===================================================================
+--- a/src/gcc/c-tree.h	(.../gcc-4_4-branch)
++++ b/src/gcc/c-tree.h	(.../cell-4_4-branch)
+@@ -287,6 +287,8 @@
+   BOOL_BITFIELD restrict_p : 1;
+   /* Whether "_Sat" was specified.  */
+   BOOL_BITFIELD saturating_p : 1;
++  /* The address space that the declaration belongs to.  */
++  addr_space_t address_space;
+ };
+ 
+ /* The various kinds of declarators in C.  */
+@@ -517,6 +519,8 @@
+ 					       struct c_typespec);
+ extern struct c_declspecs *declspecs_add_scspec (struct c_declspecs *, tree);
+ extern struct c_declspecs *declspecs_add_attrs (struct c_declspecs *, tree);
++extern struct c_declspecs *declspecs_add_addrspace (struct c_declspecs *,
++						    addr_space_t);
+ extern struct c_declspecs *finish_declspecs (struct c_declspecs *);
+ 
+ /* in c-objc-common.c */
+Index: gcc/ifcvt.c
+===================================================================
+--- a/src/gcc/ifcvt.c	(.../gcc-4_4-branch)
++++ b/src/gcc/ifcvt.c	(.../cell-4_4-branch)
+@@ -1331,11 +1331,15 @@
+   /* ??? FIXME: Magic number 5.  */
+   if (cse_not_expected
+       && MEM_P (a) && MEM_P (b)
++      && MEM_ADDR_SPACE (a) == MEM_ADDR_SPACE (b)
+       && if_info->branch_cost >= 5)
+     {
++      enum machine_mode address_mode
++	= targetm.addr_space.address_mode (MEM_ADDR_SPACE (a));
++
+       a = XEXP (a, 0);
+       b = XEXP (b, 0);
+-      x = gen_reg_rtx (Pmode);
++      x = gen_reg_rtx (address_mode);
+       is_mem = 1;
+     }
+ 
+@@ -1484,6 +1488,9 @@
+       set_mem_align (tmp,
+ 		     MIN (MEM_ALIGN (if_info->a), MEM_ALIGN (if_info->b)));
+ 
++      gcc_assert (MEM_ADDR_SPACE (if_info->a) == MEM_ADDR_SPACE (if_info->b));
++      set_mem_addr_space (tmp, MEM_ADDR_SPACE (if_info->a));
++
+       noce_emit_move_insn (if_info->x, tmp);
+     }
+   else if (target != x)
+Index: gcc/jump.c
+===================================================================
+--- a/src/gcc/jump.c	(.../gcc-4_4-branch)
++++ b/src/gcc/jump.c	(.../cell-4_4-branch)
+@@ -1641,6 +1641,10 @@
+   if (GET_MODE (x) != GET_MODE (y))
+     return 0;
+ 
++  /* MEMs refering to different address space are not equivalent.  */
++  if (code == MEM && MEM_ADDR_SPACE (x) != MEM_ADDR_SPACE (y))
++    return 0;
++
+   /* For commutative operations, the RTX match if the operand match in any
+      order.  Also handle the simple binary and unary cases without a loop.  */
+   if (targetm.commutative_p (x, UNKNOWN))
+Index: gcc/dwarf2out.c
+===================================================================
+--- a/src/gcc/dwarf2out.c	(.../gcc-4_4-branch)
++++ b/src/gcc/dwarf2out.c	(.../cell-4_4-branch)
+@@ -9591,6 +9591,9 @@
+       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
+ 		       simple_type_size_in_bits (type) / BITS_PER_UNIT);
+       item_type = TREE_TYPE (type);
++      if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
++	add_AT_unsigned (mod_type_die, DW_AT_address_class,
++			 TYPE_ADDR_SPACE (item_type));
+     }
+   else if (code == REFERENCE_TYPE)
+     {
+@@ -9598,6 +9601,9 @@
+       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
+ 		       simple_type_size_in_bits (type) / BITS_PER_UNIT);
+       item_type = TREE_TYPE (type);
++      if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
++	add_AT_unsigned (mod_type_die, DW_AT_address_class,
++			 TYPE_ADDR_SPACE (item_type));
+     }
+   else if (is_subrange_type (type))
+     {
+Index: gcc/expr.c
+===================================================================
+--- a/src/gcc/expr.c	(.../gcc-4_4-branch)
++++ b/src/gcc/expr.c	(.../cell-4_4-branch)
+@@ -895,6 +895,8 @@
+ 		unsigned int align, int endp)
+ {
+   struct move_by_pieces data;
++  enum machine_mode to_addr_mode, from_addr_mode
++    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (from));
+   rtx to_addr, from_addr = XEXP (from, 0);
+   unsigned int max_size = MOVE_MAX_PIECES + 1;
+   enum machine_mode mode = VOIDmode, tmode;
+@@ -906,6 +908,7 @@
+   data.from_addr = from_addr;
+   if (to)
+     {
++      to_addr_mode = targetm.addr_space.address_mode (MEM_ADDR_SPACE (to));
+       to_addr = XEXP (to, 0);
+       data.to = to;
+       data.autinc_to
+@@ -916,6 +919,7 @@
+     }
+   else
+     {
++      to_addr_mode = VOIDmode;
+       to_addr = NULL_RTX;
+       data.to = NULL_RTX;
+       data.autinc_to = 1;
+@@ -951,32 +955,34 @@
+ 
+       if (USE_LOAD_PRE_DECREMENT (mode) && data.reverse && ! data.autinc_from)
+ 	{
+-	  data.from_addr = copy_addr_to_reg (plus_constant (from_addr, len));
++	  data.from_addr = copy_to_mode_reg (from_addr_mode,
++					     plus_constant (from_addr, len));
+ 	  data.autinc_from = 1;
+ 	  data.explicit_inc_from = -1;
+ 	}
+       if (USE_LOAD_POST_INCREMENT (mode) && ! data.autinc_from)
+ 	{
+-	  data.from_addr = copy_addr_to_reg (from_addr);
++	  data.from_addr = copy_to_mode_reg (from_addr_mode, from_addr);
+ 	  data.autinc_from = 1;
+ 	  data.explicit_inc_from = 1;
+ 	}
+       if (!data.autinc_from && CONSTANT_P (from_addr))
+-	data.from_addr = copy_addr_to_reg (from_addr);
++	data.from_addr = copy_to_mode_reg (from_addr_mode, from_addr);
+       if (USE_STORE_PRE_DECREMENT (mode) && data.reverse && ! data.autinc_to)
+ 	{
+-	  data.to_addr = copy_addr_to_reg (plus_constant (to_addr, len));
++	  data.to_addr = copy_to_mode_reg (to_addr_mode,
++					   plus_constant (to_addr, len));
+ 	  data.autinc_to = 1;
+ 	  data.explicit_inc_to = -1;
+ 	}
+       if (USE_STORE_POST_INCREMENT (mode) && ! data.reverse && ! data.autinc_to)
+ 	{
+-	  data.to_addr = copy_addr_to_reg (to_addr);
++	  data.to_addr = copy_to_mode_reg (to_addr_mode, to_addr);
+ 	  data.autinc_to = 1;
+ 	  data.explicit_inc_to = 1;
+ 	}
+       if (!data.autinc_to && CONSTANT_P (to_addr))
+-	data.to_addr = copy_addr_to_reg (to_addr);
++	data.to_addr = copy_to_mode_reg (to_addr_mode, to_addr);
+     }
+ 
+   tmode = mode_for_size (MOVE_MAX_PIECES * BITS_PER_UNIT, MODE_INT, 1);
+@@ -1031,7 +1037,8 @@
+ 	      if (HAVE_POST_INCREMENT && data.explicit_inc_to > 0)
+ 		emit_insn (gen_add2_insn (data.to_addr, constm1_rtx));
+ 	      else
+-		data.to_addr = copy_addr_to_reg (plus_constant (data.to_addr,
++		data.to_addr = copy_to_mode_reg (to_addr_mode,
++						 plus_constant (data.to_addr,
+ 								-1));
+ 	    }
+ 	  to1 = adjust_automodify_address (data.to, QImode, data.to_addr,
+@@ -1233,7 +1240,9 @@
+   else if (emit_block_move_via_movmem (x, y, size, align,
+ 				       expected_align, expected_size))
+     ;
+-  else if (may_use_call)
++  else if (may_use_call
++	   && ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (x))
++	   && ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (y)))
+     retval = emit_block_move_via_libcall (x, y, size,
+ 					  method == BLOCK_OP_TAILCALL);
+   else
+@@ -1484,6 +1493,10 @@
+ 			  unsigned int align ATTRIBUTE_UNUSED)
+ {
+   rtx cmp_label, top_label, iter, x_addr, y_addr, tmp;
++  enum machine_mode x_addr_mode
++    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (x));
++  enum machine_mode y_addr_mode
++    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (y));
+   enum machine_mode iter_mode;
+ 
+   iter_mode = GET_MODE (size);
+@@ -1503,9 +1516,13 @@
+   emit_jump (cmp_label);
+   emit_label (top_label);
+ 
+-  tmp = convert_modes (Pmode, iter_mode, iter, true);
+-  x_addr = gen_rtx_PLUS (Pmode, x_addr, tmp);
+-  y_addr = gen_rtx_PLUS (Pmode, y_addr, tmp);
++  tmp = convert_modes (x_addr_mode, iter_mode, iter, true);
++  x_addr = gen_rtx_PLUS (x_addr_mode, x_addr, tmp);
++
++  if (x_addr_mode != y_addr_mode)
++    tmp = convert_modes (y_addr_mode, iter_mode, iter, true);
++  y_addr = gen_rtx_PLUS (y_addr_mode, y_addr, tmp);
++
+   x = change_address (x, QImode, x_addr);
+   y = change_address (y, QImode, y_addr);
+ 
+@@ -2380,6 +2397,8 @@
+ 		 rtx (*constfun) (void *, HOST_WIDE_INT, enum machine_mode),
+ 		 void *constfundata, unsigned int align, bool memsetp, int endp)
+ {
++  enum machine_mode to_addr_mode
++    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (to));
+   struct store_by_pieces data;
+ 
+   if (len == 0)
+@@ -2408,7 +2427,8 @@
+ 	      if (HAVE_POST_INCREMENT && data.explicit_inc_to > 0)
+ 		emit_insn (gen_add2_insn (data.to_addr, constm1_rtx));
+ 	      else
+-		data.to_addr = copy_addr_to_reg (plus_constant (data.to_addr,
++		data.to_addr = copy_to_mode_reg (to_addr_mode,
++						 plus_constant (data.to_addr,
+ 								-1));
+ 	    }
+ 	  to1 = adjust_automodify_address (data.to, QImode, data.to_addr,
+@@ -2463,6 +2483,8 @@
+ store_by_pieces_1 (struct store_by_pieces *data ATTRIBUTE_UNUSED,
+ 		   unsigned int align ATTRIBUTE_UNUSED)
+ {
++  enum machine_mode to_addr_mode
++    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (data->to));
+   rtx to_addr = XEXP (data->to, 0);
+   unsigned int max_size = STORE_MAX_PIECES + 1;
+   enum machine_mode mode = VOIDmode, tmode;
+@@ -2494,7 +2516,8 @@
+ 
+       if (USE_STORE_PRE_DECREMENT (mode) && data->reverse && ! data->autinc_to)
+ 	{
+-	  data->to_addr = copy_addr_to_reg (plus_constant (to_addr, data->len));
++	  data->to_addr = copy_to_mode_reg (to_addr_mode,
++					    plus_constant (to_addr, data->len));
+ 	  data->autinc_to = 1;
+ 	  data->explicit_inc_to = -1;
+ 	}
+@@ -2502,13 +2525,13 @@
+       if (USE_STORE_POST_INCREMENT (mode) && ! data->reverse
+ 	  && ! data->autinc_to)
+ 	{
+-	  data->to_addr = copy_addr_to_reg (to_addr);
++	  data->to_addr = copy_to_mode_reg (to_addr_mode, to_addr);
+ 	  data->autinc_to = 1;
+ 	  data->explicit_inc_to = 1;
+ 	}
+ 
+       if ( !data->autinc_to && CONSTANT_P (to_addr))
+-	data->to_addr = copy_addr_to_reg (to_addr);
++	data->to_addr = copy_to_mode_reg (to_addr_mode, to_addr);
+     }
+ 
+   tmode = mode_for_size (STORE_MAX_PIECES * BITS_PER_UNIT, MODE_INT, 1);
+@@ -2639,9 +2662,11 @@
+   else if (set_storage_via_setmem (object, size, const0_rtx, align,
+ 				   expected_align, expected_size))
+     ;
+-  else
++  else if (ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (object)))
+     return set_storage_via_libcall (object, size, const0_rtx,
+ 				    method == BLOCK_OP_TAILCALL);
++  else
++    gcc_unreachable ();
+ 
+   return NULL;
+ }
+@@ -3430,12 +3455,14 @@
+   /* If X or Y are memory references, verify that their addresses are valid
+      for the machine.  */
+   if (MEM_P (x)
+-      && (! memory_address_p (GET_MODE (x), XEXP (x, 0))
++      && (! memory_address_addr_space_p (GET_MODE (x), XEXP (x, 0),
++					 MEM_ADDR_SPACE (x))
+ 	  && ! push_operand (x, GET_MODE (x))))
+     x = validize_mem (x);
+ 
+   if (MEM_P (y)
+-      && ! memory_address_p (GET_MODE (y), XEXP (y, 0)))
++      && ! memory_address_addr_space_p (GET_MODE (y), XEXP (y, 0),
++					MEM_ADDR_SPACE (y)))
+     y = validize_mem (y);
+ 
+   gcc_assert (mode != BLKmode);
+@@ -4206,6 +4233,7 @@
+ 
+       if (offset != 0)
+ 	{
++	  enum machine_mode address_mode;
+ 	  rtx offset_rtx;
+ 
+ 	  if (!MEM_P (to_rtx))
+@@ -4218,13 +4246,10 @@
+ 	    }
+ 
+ 	  offset_rtx = expand_expr (offset, NULL_RTX, VOIDmode, EXPAND_SUM);
+-#ifdef POINTERS_EXTEND_UNSIGNED
+-	  if (GET_MODE (offset_rtx) != Pmode)
+-	    offset_rtx = convert_to_mode (Pmode, offset_rtx, 0);
+-#else
+-	  if (GET_MODE (offset_rtx) != ptr_mode)
+-	    offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0);
+-#endif
++	  address_mode
++	    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (to_rtx));
++	  if (GET_MODE (offset_rtx) != address_mode)
++	    offset_rtx = convert_to_mode (address_mode, offset_rtx, 0);
+ 
+ 	  /* A constant address in TO_RTX can have VOIDmode, we must not try
+ 	     to call force_reg for that case.  Avoid that case.  */
+@@ -4327,7 +4352,10 @@
+       else
+ 	{
+ 	  if (POINTER_TYPE_P (TREE_TYPE (to)))
+-	    value = convert_memory_address (GET_MODE (to_rtx), value);
++	    value = convert_memory_address_addr_space
++		      (GET_MODE (to_rtx), value,
++		       TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (to))));
++
+ 	  emit_move_insn (to_rtx, value);
+ 	}
+       preserve_temp_slots (to_rtx);
+@@ -4367,6 +4395,8 @@
+      the place the value is being stored, use a safe function when copying
+      a value through a pointer into a structure value return block.  */
+   if (TREE_CODE (to) == RESULT_DECL && TREE_CODE (from) == INDIRECT_REF
++      && ADDR_SPACE_GENERIC_P
++	  (TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (from, 0)))))
+       && cfun->returns_struct
+       && !cfun->returns_pcc_struct)
+     {
+@@ -4706,6 +4736,11 @@
+ 			      ? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL));
+ 	  else
+ 	    {
++	      enum machine_mode pointer_mode
++		= targetm.addr_space.pointer_mode (MEM_ADDR_SPACE (target));
++	      enum machine_mode address_mode
++		= targetm.addr_space.address_mode (MEM_ADDR_SPACE (target));
++
+ 	      /* Compute the size of the data to copy from the string.  */
+ 	      tree copy_size
+ 		= size_binop (MIN_EXPR,
+@@ -4718,14 +4753,14 @@
+ 	      rtx label = 0;
+ 
+ 	      /* Copy that much.  */
+-	      copy_size_rtx = convert_to_mode (ptr_mode, copy_size_rtx,
++	      copy_size_rtx = convert_to_mode (pointer_mode, copy_size_rtx,
+ 					       TYPE_UNSIGNED (sizetype));
+ 	      emit_block_move (target, temp, copy_size_rtx,
+ 			       (call_param_p
+ 				? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL));
+ 
+ 	      /* Figure out how much is left in TARGET that we have to clear.
+-		 Do all calculations in ptr_mode.  */
++		 Do all calculations in pointer_mode.  */
+ 	      if (GET_CODE (copy_size_rtx) == CONST_INT)
+ 		{
+ 		  size = plus_constant (size, -INTVAL (copy_size_rtx));
+@@ -4738,11 +4773,10 @@
+ 				       copy_size_rtx, NULL_RTX, 0,
+ 				       OPTAB_LIB_WIDEN);
+ 
+-#ifdef POINTERS_EXTEND_UNSIGNED
+-		  if (GET_MODE (copy_size_rtx) != Pmode)
+-		    copy_size_rtx = convert_to_mode (Pmode, copy_size_rtx,
++		  if (GET_MODE (copy_size_rtx) != address_mode)
++		    copy_size_rtx = convert_to_mode (address_mode,
++						     copy_size_rtx,
+ 						     TYPE_UNSIGNED (sizetype));
+-#endif
+ 
+ 		  target = offset_address (target, copy_size_rtx,
+ 					   highest_pow2_factor (copy_size));
+@@ -5232,6 +5266,7 @@
+ 
+ 	    if (offset)
+ 	      {
++	        enum machine_mode address_mode;
+ 		rtx offset_rtx;
+ 
+ 		offset
+@@ -5242,13 +5277,10 @@
+ 		offset_rtx = expand_normal (offset);
+ 		gcc_assert (MEM_P (to_rtx));
+ 
+-#ifdef POINTERS_EXTEND_UNSIGNED
+-		if (GET_MODE (offset_rtx) != Pmode)
+-		  offset_rtx = convert_to_mode (Pmode, offset_rtx, 0);
+-#else
+-		if (GET_MODE (offset_rtx) != ptr_mode)
+-		  offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0);
+-#endif
++		address_mode
++		  = targetm.addr_space.address_mode (MEM_ADDR_SPACE (to_rtx));
++		if (GET_MODE (offset_rtx) != address_mode)
++		  offset_rtx = convert_to_mode (address_mode, offset_rtx, 0);
+ 
+ 		to_rtx = offset_address (to_rtx, offset_rtx,
+ 					 highest_pow2_factor (offset));
+@@ -6756,7 +6788,7 @@
+ 
+ static rtx
+ expand_expr_addr_expr_1 (tree exp, rtx target, enum machine_mode tmode,
+-		         enum expand_modifier modifier)
++		         enum expand_modifier modifier, addr_space_t as)
+ {
+   rtx result, subtarget;
+   tree inner, offset;
+@@ -6783,7 +6815,7 @@
+     case CONST_DECL:
+       /* Recurse and make the output_constant_def clause above handle this.  */
+       return expand_expr_addr_expr_1 (DECL_INITIAL (exp), target,
+-				      tmode, modifier);
++				      tmode, modifier, as);
+ 
+     case REALPART_EXPR:
+       /* The real part of the complex number is always first, therefore
+@@ -6872,7 +6904,7 @@
+       TYPE_ALIGN (TREE_TYPE (inner)) = TYPE_ALIGN (TREE_TYPE (exp));
+       TYPE_USER_ALIGN (TREE_TYPE (inner)) = 1;
+     }
+-  result = expand_expr_addr_expr_1 (inner, subtarget, tmode, modifier);
++  result = expand_expr_addr_expr_1 (inner, subtarget, tmode, modifier, as);
+ 
+   if (offset)
+     {
+@@ -6884,8 +6916,8 @@
+ 			 modifier == EXPAND_INITIALIZER
+ 			  ? EXPAND_INITIALIZER : EXPAND_NORMAL);
+ 
+-      result = convert_memory_address (tmode, result);
+-      tmp = convert_memory_address (tmode, tmp);
++      result = convert_memory_address_addr_space (tmode, result, as);
++      tmp = convert_memory_address_addr_space (tmode, tmp, as);
+ 
+       if (modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER)
+ 	result = gen_rtx_PLUS (tmode, result, tmp);
+@@ -6918,6 +6950,9 @@
+ expand_expr_addr_expr (tree exp, rtx target, enum machine_mode tmode,
+ 		       enum expand_modifier modifier)
+ {
++  addr_space_t as = ADDR_SPACE_GENERIC;
++  enum machine_mode address_mode = Pmode;
++  enum machine_mode pointer_mode = ptr_mode;
+   enum machine_mode rmode;
+   rtx result;
+ 
+@@ -6925,14 +6960,21 @@
+   if (tmode == VOIDmode)
+     tmode = TYPE_MODE (TREE_TYPE (exp));
+ 
++  if (POINTER_TYPE_P (TREE_TYPE (exp)))
++    {
++      as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)));
++      address_mode = targetm.addr_space.address_mode (as);
++      pointer_mode = targetm.addr_space.pointer_mode (as);
++    }
++
+   /* We can get called with some Weird Things if the user does silliness
+      like "(short) &a".  In that case, convert_memory_address won't do
+      the right thing, so ignore the given target mode.  */
+-  if (tmode != Pmode && tmode != ptr_mode)
+-    tmode = Pmode;
++  if (tmode != address_mode && tmode != pointer_mode)
++    tmode = address_mode;
+ 
+   result = expand_expr_addr_expr_1 (TREE_OPERAND (exp, 0), target,
+-				    tmode, modifier);
++				    tmode, modifier, as);
+ 
+   /* Despite expand_expr claims concerning ignoring TMODE when not
+      strictly convenient, stuff breaks if we don't honor it.  Note
+@@ -6941,7 +6983,7 @@
+   if (rmode == VOIDmode)
+     rmode = tmode;
+   if (rmode != tmode)
+-    result = convert_memory_address (tmode, result);
++    result = convert_memory_address_addr_space (tmode, result, as);
+ 
+   return result;
+ }
+@@ -7330,7 +7372,9 @@
+ 	  decl_rtl = use_anchored_address (decl_rtl);
+ 	  if (modifier != EXPAND_CONST_ADDRESS
+ 	      && modifier != EXPAND_SUM
+-	      && !memory_address_p (DECL_MODE (exp), XEXP (decl_rtl, 0)))
++	      && !memory_address_addr_space_p (DECL_MODE (exp),
++					       XEXP (decl_rtl, 0),
++					       MEM_ADDR_SPACE (decl_rtl)))
+ 	    temp = replace_equiv_address (decl_rtl,
+ 					  copy_rtx (XEXP (decl_rtl, 0)));
+ 	}
+@@ -7452,7 +7496,8 @@
+       if (modifier != EXPAND_CONST_ADDRESS
+ 	  && modifier != EXPAND_INITIALIZER
+ 	  && modifier != EXPAND_SUM
+-	  && ! memory_address_p (mode, XEXP (temp, 0)))
++	  && ! memory_address_addr_space_p (mode, XEXP (temp, 0),
++					    MEM_ADDR_SPACE (temp)))
+ 	return replace_equiv_address (temp,
+ 				      copy_rtx (XEXP (temp, 0)));
+       return temp;
+@@ -7512,6 +7557,8 @@
+     case INDIRECT_REF:
+       {
+ 	tree exp1 = TREE_OPERAND (exp, 0);
++	addr_space_t as = ADDR_SPACE_GENERIC;
++	enum machine_mode address_mode = Pmode;
+ 
+ 	if (modifier != EXPAND_WRITE)
+ 	  {
+@@ -7522,19 +7569,26 @@
+ 	      return expand_expr (t, target, tmode, modifier);
+ 	  }
+ 
++	if (POINTER_TYPE_P (TREE_TYPE (exp1)))
++	  {
++	    as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp1)));
++	    address_mode = targetm.addr_space.address_mode (as);
++	  }
++
+ 	op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM);
+-	op0 = memory_address (mode, op0);
++	op0 = memory_address_addr_space (mode, op0, as);
+ 
+ 	if (code == ALIGN_INDIRECT_REF)
+ 	  {
+ 	    int align = TYPE_ALIGN_UNIT (type);
+-	    op0 = gen_rtx_AND (Pmode, op0, GEN_INT (-align));
+-	    op0 = memory_address (mode, op0);
++	    op0 = gen_rtx_AND (address_mode, op0, GEN_INT (-align));
++	    op0 = memory_address_addr_space (mode, op0, as);
+ 	  }
+ 
+ 	temp = gen_rtx_MEM (mode, op0);
+ 
+ 	set_mem_attributes (temp, exp, 0);
++	set_mem_addr_space (temp, as);
+ 
+ 	/* Resolve the misalignment now, so that we don't have to remember
+ 	   to resolve it later.  Of course, this only works for reads.  */
+@@ -7569,13 +7623,15 @@
+ 
+     case TARGET_MEM_REF:
+       {
++	addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (exp));
+ 	struct mem_address addr;
+ 
+ 	get_address_description (exp, &addr);
+-	op0 = addr_for_mem_ref (&addr, true);
+-	op0 = memory_address (mode, op0);
++	op0 = addr_for_mem_ref (&addr, as, true);
++	op0 = memory_address_addr_space (mode, op0, as);
+ 	temp = gen_rtx_MEM (mode, op0);
+ 	set_mem_attributes (temp, TMR_ORIGINAL (exp), 0);
++	set_mem_addr_space (temp, as);
+       }
+       return temp;
+ 
+@@ -7861,18 +7917,16 @@
+ 
+ 	if (offset)
+ 	  {
++	    enum machine_mode address_mode;
+ 	    rtx offset_rtx = expand_expr (offset, NULL_RTX, VOIDmode,
+ 					  EXPAND_SUM);
+ 
+ 	    gcc_assert (MEM_P (op0));
+ 
+-#ifdef POINTERS_EXTEND_UNSIGNED
+-	    if (GET_MODE (offset_rtx) != Pmode)
+-	      offset_rtx = convert_to_mode (Pmode, offset_rtx, 0);
+-#else
+-	    if (GET_MODE (offset_rtx) != ptr_mode)
+-	      offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0);
+-#endif
++	    address_mode
++	      = targetm.addr_space.address_mode (MEM_ADDR_SPACE (op0));
++	    if (GET_MODE (offset_rtx) != address_mode)
++	      offset_rtx = convert_to_mode (address_mode, offset_rtx, 0);
+ 
+ 	    if (GET_MODE (op0) == BLKmode
+ 		/* A constant address in OP0 can have VOIDmode, we must
+@@ -8349,6 +8403,40 @@
+ 
+       return op0;
+ 
++    case ADDR_SPACE_CONVERT_EXPR:
++      {
++	tree treeop0 = TREE_OPERAND (exp, 0);
++	tree treeop0_type = TREE_TYPE (treeop0);
++	addr_space_t as_to;
++	addr_space_t as_from;
++
++	gcc_assert (POINTER_TYPE_P (type));
++	gcc_assert (POINTER_TYPE_P (treeop0_type));
++
++	as_to = TYPE_ADDR_SPACE (TREE_TYPE (type));
++	as_from = TYPE_ADDR_SPACE (TREE_TYPE (treeop0_type));
++
++        /* Conversions between pointers to the same address space should
++	   have been implemented via CONVERT_EXPR / NOP_EXPR.  */
++	gcc_assert (as_to != as_from);
++
++        /* Ask target code to handle conversion between pointers
++	   to overlapping address spaces.  */
++	if (targetm.addr_space.subset_p (as_to, as_from)
++	    || targetm.addr_space.subset_p (as_from, as_to))
++	  {
++	    op0 = expand_expr (treeop0, NULL_RTX, VOIDmode, modifier);
++	    op0 = targetm.addr_space.convert (op0, treeop0_type, type);
++	    gcc_assert (op0);
++	    return op0;
++	  }
++
++	/* For disjoint address spaces, converting anything but
++	   a null pointer invokes undefined behaviour.  We simply
++	   always return a null pointer here.  */
++	return CONST0_RTX (mode);
++      }
++
+     case POINTER_PLUS_EXPR: 
+       /* Even though the sizetype mode and the pointer's mode can be different
+          expand is able to handle this correctly and get the correct result out 
+Index: gcc/expr.h
+===================================================================
+--- a/src/gcc/expr.h	(.../gcc-4_4-branch)
++++ b/src/gcc/expr.h	(.../cell-4_4-branch)
+@@ -635,10 +635,16 @@
+    The constant terms are added and stored via a second arg.  */
+ extern rtx eliminate_constant_term (rtx, rtx *);
+ 
+-/* Convert arg to a valid memory address for specified machine mode,
+-   by emitting insns to perform arithmetic if nec.  */
+-extern rtx memory_address (enum machine_mode, rtx);
++/* Convert arg to a valid memory address for specified machine mode that points
++   to a specific named address space, by emitting insns to perform arithmetic
++   if necessary.  */
++extern rtx memory_address_addr_space (enum machine_mode, rtx, addr_space_t);
+ 
++/* Like memory_address_addr_space, except assume the memory address points to
++   the generic named address space.  */
++#define memory_address(MODE,RTX) \
++	memory_address_addr_space ((MODE), (RTX), ADDR_SPACE_GENERIC)
++
+ /* Return a memory reference like MEMREF, but with its mode changed
+    to MODE and its address changed to ADDR.
+    (VOIDmode means don't change the mode.
+Index: gcc/recog.c
+===================================================================
+--- a/src/gcc/recog.c	(.../gcc-4_4-branch)
++++ b/src/gcc/recog.c	(.../cell-4_4-branch)
+@@ -376,7 +376,9 @@
+ 
+       if (MEM_P (object))
+ 	{
+-	  if (! memory_address_p (GET_MODE (object), XEXP (object, 0)))
++	  if (! memory_address_addr_space_p (GET_MODE (object),
++					     XEXP (object, 0),
++					     MEM_ADDR_SPACE (object)))
+ 	    break;
+ 	}
+       else if (REG_P (changes[i].old)
+@@ -964,7 +966,7 @@
+ 	return 0;
+ 
+       /* Use the mem's mode, since it will be reloaded thus.  */
+-      if (memory_address_p (GET_MODE (op), y))
++      if (memory_address_addr_space_p (GET_MODE (op), y, MEM_ADDR_SPACE (op)))
+ 	return 1;
+     }
+ 
+@@ -1248,11 +1250,16 @@
+   return XEXP (op, 0) == stack_pointer_rtx;
+ }
+ 
+-/* Return 1 if ADDR is a valid memory address for mode MODE.  */
++/* Return 1 if ADDR is a valid memory address
++   for mode MODE in address space AS.  */
+ 
+ int
+-memory_address_p (enum machine_mode mode ATTRIBUTE_UNUSED, rtx addr)
++memory_address_addr_space_p (enum machine_mode mode ATTRIBUTE_UNUSED,
++			     rtx addr, addr_space_t as)
+ {
++  if (!ADDR_SPACE_GENERIC_P (as))
++    return targetm.addr_space.legitimate_address_p (mode, addr, 0, as);
++
+   GO_IF_LEGITIMATE_ADDRESS (mode, addr, win);
+   return 0;
+ 
+@@ -1829,7 +1836,8 @@
+ offsettable_memref_p (rtx op)
+ {
+   return ((MEM_P (op))
+-	  && offsettable_address_p (1, GET_MODE (op), XEXP (op, 0)));
++	  && offsettable_address_addr_space_p (1, GET_MODE (op), XEXP (op, 0),
++					       MEM_ADDR_SPACE (op)));
+ }
+ 
+ /* Similar, but don't require a strictly valid mem ref:
+@@ -1839,12 +1847,13 @@
+ offsettable_nonstrict_memref_p (rtx op)
+ {
+   return ((MEM_P (op))
+-	  && offsettable_address_p (0, GET_MODE (op), XEXP (op, 0)));
++	  && offsettable_address_addr_space_p (0, GET_MODE (op), XEXP (op, 0),
++					       MEM_ADDR_SPACE (op)));
+ }
+ 
+ /* Return 1 if Y is a memory address which contains no side effects
+-   and would remain valid after the addition of a positive integer
+-   less than the size of that mode.
++   and would remain valid for address space AS after the addition of
++   a positive integer less than the size of that mode.
+ 
+    We assume that the original address is valid and do not check it.
+    We do check that it is valid for narrower modes.
+@@ -1853,14 +1862,16 @@
+    for the sake of use in reload.c.  */
+ 
+ int
+-offsettable_address_p (int strictp, enum machine_mode mode, rtx y)
++offsettable_address_addr_space_p (int strictp, enum machine_mode mode, rtx y,
++				  addr_space_t as)
+ {
+   enum rtx_code ycode = GET_CODE (y);
+   rtx z;
+   rtx y1 = y;
+   rtx *y2;
+-  int (*addressp) (enum machine_mode, rtx) =
+-    (strictp ? strict_memory_address_p : memory_address_p);
++  int (*addressp) (enum machine_mode, rtx, addr_space_t) =
++    (strictp ? strict_memory_address_addr_space_p
++	     : memory_address_addr_space_p);
+   unsigned int mode_sz = GET_MODE_SIZE (mode);
+ 
+   if (CONSTANT_ADDRESS_P (y))
+@@ -1890,7 +1901,7 @@
+       *y2 = plus_constant (*y2, mode_sz - 1);
+       /* Use QImode because an odd displacement may be automatically invalid
+ 	 for any wider mode.  But it should be valid for a single byte.  */
+-      good = (*addressp) (QImode, y);
++      good = (*addressp) (QImode, y, as);
+ 
+       /* In any case, restore old contents of memory.  */
+       *y2 = y1;
+@@ -1915,7 +1926,7 @@
+ 
+   /* Use QImode because an odd displacement may be automatically invalid
+      for any wider mode.  But it should be valid for a single byte.  */
+-  return (*addressp) (QImode, z);
++  return (*addressp) (QImode, z, as);
+ }
+ 
+ /* Return 1 if ADDR is an address-expression whose effect depends
+@@ -2459,11 +2470,14 @@
+ 		if (MEM_P (op))
+ 		  {
+ 		    if (strict > 0
+-			&& !strict_memory_address_p (GET_MODE (op),
+-						     XEXP (op, 0)))
++			&& !strict_memory_address_addr_space_p
++			     (GET_MODE (op), XEXP (op, 0),
++			      MEM_ADDR_SPACE (op)))
+ 		      break;
+ 		    if (strict == 0
+-			&& !memory_address_p (GET_MODE (op), XEXP (op, 0)))
++			&& !memory_address_addr_space_p
++			     (GET_MODE (op), XEXP (op, 0),
++			      MEM_ADDR_SPACE (op)))
+ 		      break;
+ 		    win = 1;
+ 		  }
+Index: gcc/recog.h
+===================================================================
+--- a/src/gcc/recog.h	(.../gcc-4_4-branch)
++++ b/src/gcc/recog.h	(.../cell-4_4-branch)
+@@ -84,8 +84,13 @@
+ extern void cancel_changes (int);
+ extern int constrain_operands (int);
+ extern int constrain_operands_cached (int);
+-extern int memory_address_p (enum machine_mode, rtx);
+-extern int strict_memory_address_p (enum machine_mode, rtx);
++extern int memory_address_addr_space_p (enum machine_mode, rtx, addr_space_t);
++#define memory_address_p(mode,addr) \
++	memory_address_addr_space_p ((mode), (addr), ADDR_SPACE_GENERIC)
++extern int strict_memory_address_addr_space_p (enum machine_mode, rtx,
++					       addr_space_t);
++#define strict_memory_address_p(mode,addr) \
++	strict_memory_address_addr_space_p ((mode), (addr), ADDR_SPACE_GENERIC)
+ extern int validate_replace_rtx (rtx, rtx, rtx);
+ extern int validate_replace_rtx_part (rtx, rtx, rtx *, rtx);
+ extern int validate_replace_rtx_part_nosimplify (rtx, rtx, rtx *, rtx);
+@@ -100,7 +105,11 @@
+ 
+ extern int offsettable_memref_p (rtx);
+ extern int offsettable_nonstrict_memref_p (rtx);
+-extern int offsettable_address_p (int, enum machine_mode, rtx);
++extern int offsettable_address_addr_space_p (int, enum machine_mode, rtx,
++					     addr_space_t);
++#define offsettable_address_p(strict,mode,addr) \
++	offsettable_address_addr_space_p ((strict), (mode), (addr), \
++					  ADDR_SPACE_GENERIC)
+ extern int mode_dependent_address_p (rtx);
+ 
+ extern int recog (rtx, rtx, int *);
+Index: gcc/tree-ssa-address.c
+===================================================================
+--- a/src/gcc/tree-ssa-address.c	(.../gcc-4_4-branch)
++++ b/src/gcc/tree-ssa-address.c	(.../cell-4_4-branch)
+@@ -42,6 +42,7 @@
+ #include "expr.h"
+ #include "ggc.h"
+ #include "tree-affine.h"
++#include "target.h"
+ 
+ /* TODO -- handling of symbols (according to Richard Hendersons
+    comments, http://gcc.gnu.org/ml/gcc-patches/2005-04/msg00949.html):
+@@ -70,33 +71,39 @@
+ /* A "template" for memory address, used to determine whether the address is
+    valid for mode.  */
+ 
+-struct mem_addr_template GTY (())
++typedef struct mem_addr_template GTY (())
+ {
+   rtx ref;			/* The template.  */
+   rtx * GTY ((skip)) step_p;	/* The point in template where the step should be
+ 				   filled in.  */
+   rtx * GTY ((skip)) off_p;	/* The point in template where the offset should
+ 				   be filled in.  */
+-};
++} mem_addr_template;
+ 
+-/* The templates.  Each of the five bits of the index corresponds to one
+-   component of TARGET_MEM_REF being present, see TEMPL_IDX.  */
++DEF_VEC_O (mem_addr_template);
++DEF_VEC_ALLOC_O (mem_addr_template, gc);
+ 
+-static GTY (()) struct mem_addr_template templates[32];
++/* The templates.  Each of the low five bits of the index corresponds to one
++   component of TARGET_MEM_REF being present, while the high bits identify
++   the address space.  See TEMPL_IDX.  */
+ 
+-#define TEMPL_IDX(SYMBOL, BASE, INDEX, STEP, OFFSET) \
+-  (((SYMBOL != 0) << 4) \
++static GTY(()) VEC (mem_addr_template, gc) *mem_addr_template_list;
++
++#define TEMPL_IDX(AS, SYMBOL, BASE, INDEX, STEP, OFFSET) \
++  (((int) (AS) << 5) \
++   | ((SYMBOL != 0) << 4) \
+    | ((BASE != 0) << 3) \
+    | ((INDEX != 0) << 2) \
+    | ((STEP != 0) << 1) \
+    | (OFFSET != 0))
+ 
+ /* Stores address for memory reference with parameters SYMBOL, BASE, INDEX,
+-   STEP and OFFSET to *ADDR.  Stores pointers to where step is placed to
+-   *STEP_P and offset to *OFFSET_P.  */
++   STEP and OFFSET to *ADDR using address mode ADDRESS_MODE.  Stores pointers
++   to where step is placed to *STEP_P and offset to *OFFSET_P.  */
+ 
+ static void
+-gen_addr_rtx (rtx symbol, rtx base, rtx index, rtx step, rtx offset,
++gen_addr_rtx (enum machine_mode address_mode,
++	      rtx symbol, rtx base, rtx index, rtx step, rtx offset,
+ 	      rtx *addr, rtx **step_p, rtx **offset_p)
+ {
+   rtx act_elem;
+@@ -112,7 +119,7 @@
+       act_elem = index;
+       if (step)
+ 	{
+-	  act_elem = gen_rtx_MULT (Pmode, act_elem, step);
++	  act_elem = gen_rtx_MULT (address_mode, act_elem, step);
+ 
+ 	  if (step_p)
+ 	    *step_p = &XEXP (act_elem, 1);
+@@ -124,7 +131,7 @@
+   if (base)
+     {
+       if (*addr)
+-	*addr = simplify_gen_binary (PLUS, Pmode, base, *addr);
++	*addr = simplify_gen_binary (PLUS, address_mode, base, *addr);
+       else
+ 	*addr = base;
+     }
+@@ -134,7 +141,7 @@
+       act_elem = symbol;
+       if (offset)
+ 	{
+-	  act_elem = gen_rtx_PLUS (Pmode, act_elem, offset);
++	  act_elem = gen_rtx_PLUS (address_mode, act_elem, offset);
+ 
+ 	  if (offset_p)
+ 	    *offset_p = &XEXP (act_elem, 1);
+@@ -142,11 +149,11 @@
+ 	  if (GET_CODE (symbol) == SYMBOL_REF
+ 	      || GET_CODE (symbol) == LABEL_REF
+ 	      || GET_CODE (symbol) == CONST)
+-	    act_elem = gen_rtx_CONST (Pmode, act_elem);
++	    act_elem = gen_rtx_CONST (address_mode, act_elem);
+ 	}
+ 
+       if (*addr)
+-	*addr = gen_rtx_PLUS (Pmode, *addr, act_elem);
++	*addr = gen_rtx_PLUS (address_mode, *addr, act_elem);
+       else
+ 	*addr = act_elem;
+     }
+@@ -154,7 +161,7 @@
+     {
+       if (*addr)
+ 	{
+-	  *addr = gen_rtx_PLUS (Pmode, *addr, offset);
++	  *addr = gen_rtx_PLUS (address_mode, *addr, offset);
+ 	  if (offset_p)
+ 	    *offset_p = &XEXP (*addr, 1);
+ 	}
+@@ -170,55 +177,64 @@
+     *addr = const0_rtx;
+ }
+ 
+-/* Returns address for TARGET_MEM_REF with parameters given by ADDR.
++/* Returns address for TARGET_MEM_REF with parameters given by ADDR
++   in address space AS.
+    If REALLY_EXPAND is false, just make fake registers instead 
+    of really expanding the operands, and perform the expansion in-place
+    by using one of the "templates".  */
+ 
+ rtx
+-addr_for_mem_ref (struct mem_address *addr, bool really_expand)
++addr_for_mem_ref (struct mem_address *addr, addr_space_t as,
++		  bool really_expand)
+ {
++  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
+   rtx address, sym, bse, idx, st, off;
+-  static bool templates_initialized = false;
+   struct mem_addr_template *templ;
+ 
+   if (addr->step && !integer_onep (addr->step))
+     st = immed_double_const (TREE_INT_CST_LOW (addr->step),
+-			     TREE_INT_CST_HIGH (addr->step), Pmode);
++			     TREE_INT_CST_HIGH (addr->step), address_mode);
+   else
+     st = NULL_RTX;
+ 
+   if (addr->offset && !integer_zerop (addr->offset))
+     off = immed_double_const (TREE_INT_CST_LOW (addr->offset),
+-			      TREE_INT_CST_HIGH (addr->offset), Pmode);
++			      TREE_INT_CST_HIGH (addr->offset), address_mode);
+   else
+     off = NULL_RTX;
+ 
+   if (!really_expand)
+     {
++      unsigned int templ_index
++	= TEMPL_IDX (as, addr->symbol, addr->base, addr->index, st, off);
++
++      if (templ_index
++	  >= VEC_length (mem_addr_template, mem_addr_template_list))
++	VEC_safe_grow_cleared (mem_addr_template, gc, mem_addr_template_list,
++			       templ_index + 1);
++
+       /* Reuse the templates for addresses, so that we do not waste memory.  */
+-      if (!templates_initialized)
++      templ = VEC_index (mem_addr_template, mem_addr_template_list, templ_index);
++      if (!templ->ref)
+ 	{
+-	  unsigned i;
++	  sym = (addr->symbol ?
++		 gen_rtx_SYMBOL_REF (address_mode, ggc_strdup ("test_symbol"))
++		 : NULL_RTX);
++	  bse = (addr->base ?
++		 gen_raw_REG (address_mode, LAST_VIRTUAL_REGISTER + 1)
++		 : NULL_RTX);
++	  idx = (addr->index ?
++		 gen_raw_REG (address_mode, LAST_VIRTUAL_REGISTER + 2)
++		 : NULL_RTX);
+ 
+-	  templates_initialized = true;
+-	  sym = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup ("test_symbol"));
+-	  bse = gen_raw_REG (Pmode, LAST_VIRTUAL_REGISTER + 1);
+-	  idx = gen_raw_REG (Pmode, LAST_VIRTUAL_REGISTER + 2);
+-
+-	  for (i = 0; i < 32; i++)
+-	    gen_addr_rtx ((i & 16 ? sym : NULL_RTX),
+-			  (i & 8 ? bse : NULL_RTX),
+-			  (i & 4 ? idx : NULL_RTX),
+-			  (i & 2 ? const0_rtx : NULL_RTX),
+-			  (i & 1 ? const0_rtx : NULL_RTX),
+-			  &templates[i].ref,
+-			  &templates[i].step_p,
+-			  &templates[i].off_p);
++	  gen_addr_rtx (address_mode, sym, bse, idx,
++			st? const0_rtx : NULL_RTX,
++			off? const0_rtx : NULL_RTX,
++			&templ->ref,
++			&templ->step_p,
++			&templ->off_p);
+ 	}
+ 
+-      templ = templates + TEMPL_IDX (addr->symbol, addr->base, addr->index,
+-				     st, off);
+       if (st)
+ 	*templ->step_p = st;
+       if (off)
+@@ -230,16 +246,16 @@
+   /* Otherwise really expand the expressions.  */
+   sym = (addr->symbol
+ 	 ? expand_expr (build_addr (addr->symbol, current_function_decl),
+-			NULL_RTX, Pmode, EXPAND_NORMAL)
++			NULL_RTX, address_mode, EXPAND_NORMAL)
+ 	 : NULL_RTX);
+   bse = (addr->base
+-	 ? expand_expr (addr->base, NULL_RTX, Pmode, EXPAND_NORMAL)
++	 ? expand_expr (addr->base, NULL_RTX, address_mode, EXPAND_NORMAL)
+ 	 : NULL_RTX);
+   idx = (addr->index
+-	 ? expand_expr (addr->index, NULL_RTX, Pmode, EXPAND_NORMAL)
++	 ? expand_expr (addr->index, NULL_RTX, address_mode, EXPAND_NORMAL)
+ 	 : NULL_RTX);
+ 
+-  gen_addr_rtx (sym, bse, idx, st, off, &address, NULL, NULL);
++  gen_addr_rtx (address_mode, sym, bse, idx, st, off, &address, NULL, NULL);
+   return address;
+ }
+ 
+@@ -306,15 +322,16 @@
+    ADDR is valid on the current target.  */
+ 
+ static bool
+-valid_mem_ref_p (enum machine_mode mode, struct mem_address *addr)
++valid_mem_ref_p (enum machine_mode mode, addr_space_t as,
++		 struct mem_address *addr)
+ {
+   rtx address;
+ 
+-  address = addr_for_mem_ref (addr, false);
++  address = addr_for_mem_ref (addr, as, false);
+   if (!address)
+     return false;
+ 
+-  return memory_address_p (mode, address);
++  return memory_address_addr_space_p (mode, address, as);
+ }
+ 
+ /* Checks whether a TARGET_MEM_REF with type TYPE and parameters given by ADDR
+@@ -324,7 +341,7 @@
+ static tree
+ create_mem_ref_raw (tree type, struct mem_address *addr)
+ {
+-  if (!valid_mem_ref_p (TYPE_MODE (type), addr))
++  if (!valid_mem_ref_p (TYPE_MODE (type), TYPE_ADDR_SPACE (type), addr))
+     return NULL_TREE;
+ 
+   if (addr->step && integer_onep (addr->step))
+@@ -376,6 +393,39 @@
+   aff_combination_remove_elt (addr, i);
+ }
+ 
++/* If ADDR contains an instance of BASE_HINT, move it to PARTS->base.  */
++
++static void
++move_hint_to_base (tree type, struct mem_address *parts, tree base_hint,
++		   aff_tree *addr)
++{
++  unsigned i;
++  tree val = NULL_TREE;
++  int qual;
++
++  for (i = 0; i < addr->n; i++)
++    {
++      if (!double_int_one_p (addr->elts[i].coef))
++	continue;
++
++      val = addr->elts[i].val;
++      if (operand_equal_p (val, base_hint, 0))
++	break;
++    }
++
++  if (i == addr->n)
++    return;
++
++  /* Cast value to appropriate pointer type.  We cannot use a pointer
++     to TYPE directly, as the back-end will assume registers of pointer
++     type are aligned, and just the base itself may not actually be.
++     We use void pointer to the type's address space instead.  */
++  qual = ENCODE_QUAL_ADDR_SPACE (TYPE_ADDR_SPACE (type));
++  type = build_qualified_type (void_type_node, qual);
++  parts->base = fold_convert (build_pointer_type (type), val);
++  aff_combination_remove_elt (addr, i);
++}
++
+ /* If ADDR contains an address of a dereferenced pointer, move it to
+    PARTS->base.  */
+ 
+@@ -437,9 +487,11 @@
+    element(s) to PARTS.  */
+ 
+ static void
+-most_expensive_mult_to_index (struct mem_address *parts, aff_tree *addr,
+-			      bool speed)
++most_expensive_mult_to_index (tree type, struct mem_address *parts,
++			      aff_tree *addr, bool speed)
+ {
++  addr_space_t as = TYPE_ADDR_SPACE (type);
++  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
+   HOST_WIDE_INT coef;
+   double_int best_mult, amult, amult_neg;
+   unsigned best_mult_cost = 0, acost;
+@@ -453,14 +505,12 @@
+       if (!double_int_fits_in_shwi_p (addr->elts[i].coef))
+ 	continue;
+ 
+-      /* FIXME: Should use the correct memory mode rather than Pmode.  */
+-
+       coef = double_int_to_shwi (addr->elts[i].coef);
+       if (coef == 1
+-	  || !multiplier_allowed_in_address_p (coef, Pmode))
++	  || !multiplier_allowed_in_address_p (coef, TYPE_MODE (type), as))
+ 	continue;
+ 
+-      acost = multiply_by_cost (coef, Pmode, speed);
++      acost = multiply_by_cost (coef, address_mode, speed);
+ 
+       if (acost > best_mult_cost)
+ 	{
+@@ -503,8 +553,10 @@
+   parts->step = double_int_to_tree (sizetype, best_mult);
+ }
+ 
+-/* Splits address ADDR into PARTS.
+-   
++/* Splits address ADDR for a memory access of type TYPE into PARTS.
++   If BASE_HINT is non-NULL, it specifies an SSA name to be used
++   preferentially as base of the reference.
++
+    TODO -- be more clever about the distribution of the elements of ADDR
+    to PARTS.  Some architectures do not support anything but single
+    register in address, possibly with a small integer offset; while
+@@ -513,7 +565,8 @@
+    addressing modes is useless.  */
+ 
+ static void
+-addr_to_parts (aff_tree *addr, struct mem_address *parts, bool speed)
++addr_to_parts (tree type, aff_tree *addr, tree base_hint,
++	       struct mem_address *parts, bool speed)
+ {
+   tree part;
+   unsigned i;
+@@ -533,12 +586,14 @@
+ 
+   /* First move the most expensive feasible multiplication
+      to index.  */
+-  most_expensive_mult_to_index (parts, addr, speed);
++  most_expensive_mult_to_index (type, parts, addr, speed);
+ 
+   /* Try to find a base of the reference.  Since at the moment
+      there is no reliable way how to distinguish between pointer and its
+      offset, this is just a guess.  */
+-  if (!parts->symbol)
++  if (!parts->symbol && base_hint)
++    move_hint_to_base (type, parts, base_hint, addr);
++  if (!parts->symbol && !parts->base)
+     move_pointer_to_base (parts, addr);
+ 
+   /* Then try to process the remaining elements.  */
+@@ -575,13 +630,13 @@
+ 
+ tree
+ create_mem_ref (gimple_stmt_iterator *gsi, tree type, aff_tree *addr,
+-		bool speed)
++		tree base_hint, bool speed)
+ {
+   tree mem_ref, tmp;
+   tree atype;
+   struct mem_address parts;
+ 
+-  addr_to_parts (addr, &parts, speed);
++  addr_to_parts (type, addr, base_hint, &parts, speed);
+   gimplify_mem_ref_parts (gsi, &parts);
+   mem_ref = create_mem_ref_raw (type, &parts);
+   if (mem_ref)
+Index: gcc/dse.c
+===================================================================
+--- a/src/gcc/dse.c	(.../gcc-4_4-branch)
++++ b/src/gcc/dse.c	(.../cell-4_4-branch)
+@@ -826,9 +826,9 @@
+     case POST_INC:
+       {
+ 	rtx r1 = XEXP (x, 0);
+-	rtx c = gen_int_mode (data->size, Pmode);
+-	emit_insn_before (gen_rtx_SET (Pmode, r1, 
+-				       gen_rtx_PLUS (Pmode, r1, c)),
++	rtx c = gen_int_mode (data->size, GET_MODE (r1));
++	emit_insn_before (gen_rtx_SET (VOIDmode, r1,
++				       gen_rtx_PLUS (GET_MODE (r1), r1, c)),
+ 			  data->insn);
+ 	return -1;
+       }
+@@ -837,9 +837,9 @@
+     case POST_DEC:
+       {
+ 	rtx r1 = XEXP (x, 0);
+-	rtx c = gen_int_mode (-data->size, Pmode);
+-	emit_insn_before (gen_rtx_SET (Pmode, r1, 
+-				       gen_rtx_PLUS (Pmode, r1, c)),
++	rtx c = gen_int_mode (-data->size, GET_MODE (r1));
++	emit_insn_before (gen_rtx_SET (VOIDmode, r1,
++				       gen_rtx_PLUS (GET_MODE (r1), r1, c)),
+ 			  data->insn);
+ 	return -1;
+       }
+@@ -851,7 +851,7 @@
+ 	   insn that contained it.  */
+ 	rtx add = XEXP (x, 0);
+ 	rtx r1 = XEXP (add, 0);
+-	emit_insn_before (gen_rtx_SET (Pmode, r1, add), data->insn);
++	emit_insn_before (gen_rtx_SET (VOIDmode, r1, add), data->insn);
+ 	return -1;
+       }
+ 
+@@ -1065,6 +1065,8 @@
+ 	       HOST_WIDE_INT *offset, 
+ 	       cselib_val **base)
+ {
++  enum machine_mode address_mode
++    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem));
+   rtx mem_address = XEXP (mem, 0);
+   rtx expanded_address, address;
+   int expanded;
+@@ -1104,7 +1106,7 @@
+ 
+   *alias_set_out = 0;
+ 
+-  cselib_lookup (mem_address, Pmode, 1);
++  cselib_lookup (mem_address, address_mode, 1);
+ 
+   if (dump_file)
+     {
+@@ -1170,7 +1172,8 @@
+ 	  address = XEXP (address, 0);
+ 	}
+ 
+-      if (const_or_frame_p (address))
++      if (ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (mem))
++	  && const_or_frame_p (address))
+ 	{
+ 	  group_info_t group = get_group_info (address);
+ 
+@@ -1183,7 +1186,7 @@
+ 	}
+     }
+ 
+-  *base = cselib_lookup (address, Pmode, true);
++  *base = cselib_lookup (address, address_mode, true);
+   *group_id = -1;
+ 
+   if (*base == NULL)
+Index: gcc/c-decl.c
+===================================================================
+--- a/src/gcc/c-decl.c	(.../gcc-4_4-branch)
++++ b/src/gcc/c-decl.c	(.../cell-4_4-branch)
+@@ -1249,8 +1249,35 @@
+ 	}
+       else
+ 	{
+-	  if (TYPE_QUALS (newtype) != TYPE_QUALS (oldtype))
+-	    error ("conflicting type qualifiers for %q+D", newdecl);
++	  int new_quals = TYPE_QUALS (newtype);
++	  int old_quals = TYPE_QUALS (oldtype);
++
++	  if (new_quals != old_quals)
++	    {
++	      addr_space_t new_addr = DECODE_QUAL_ADDR_SPACE (new_quals);
++	      addr_space_t old_addr = DECODE_QUAL_ADDR_SPACE (old_quals);
++	      if (new_addr != old_addr)
++		{
++		  if (ADDR_SPACE_GENERIC_P (new_addr))
++		    error ("conflicting named address spaces (generic vs %s) "
++			   "for %q+D",
++			   c_addr_space_name (old_addr), newdecl);
++		  else if (ADDR_SPACE_GENERIC_P (old_addr))
++		    error ("conflicting named address spaces (%s vs generic) "
++			   "for %q+D",
++			   c_addr_space_name (new_addr), newdecl);
++		  else
++		    error ("conflicting named address spaces (%s vs %s) "
++			   "for %q+D",
++			   c_addr_space_name (new_addr),
++			   c_addr_space_name (old_addr),
++			   newdecl);
++		}
++
++	      if (CLEAR_QUAL_ADDR_SPACE (new_quals)
++		  != CLEAR_QUAL_ADDR_SPACE (old_quals))
++		error ("conflicting type qualifiers for %q+D", newdecl);
++	    }
+ 	  else
+ 	    error ("conflicting types for %q+D", newdecl);
+ 	  diagnose_arglist_conflict (newdecl, olddecl, newtype, oldtype);
+@@ -2922,7 +2949,8 @@
+ 	  else if (!declspecs->tag_defined_p
+ 		   && (declspecs->const_p
+ 		       || declspecs->volatile_p
+-		       || declspecs->restrict_p))
++		       || declspecs->restrict_p
++		       || declspecs->address_space))
+ 	    {
+ 	      if (warned != 1)
+ 		pedwarn (input_location, 0,
+@@ -2993,7 +3021,8 @@
+ 
+   if (!warned && !in_system_header && (declspecs->const_p
+ 				       || declspecs->volatile_p
+-				       || declspecs->restrict_p))
++				       || declspecs->restrict_p
++				       || declspecs->address_space))
+     {
+       warning (0, "useless type qualifier in empty declaration");
+       warned = 2;
+@@ -3016,7 +3045,8 @@
+ {
+   int quals = ((specs->const_p ? TYPE_QUAL_CONST : 0)
+ 	       | (specs->volatile_p ? TYPE_QUAL_VOLATILE : 0)
+-	       | (specs->restrict_p ? TYPE_QUAL_RESTRICT : 0));
++	       | (specs->restrict_p ? TYPE_QUAL_RESTRICT : 0)
++	       | (ENCODE_QUAL_ADDR_SPACE (specs->address_space)));
+   gcc_assert (!specs->type
+ 	      && !specs->decl_attr
+ 	      && specs->typespec_word == cts_none
+@@ -4002,6 +4032,7 @@
+   bool bitfield = width != NULL;
+   tree element_type;
+   struct c_arg_info *arg_info = 0;
++  addr_space_t as1, as2, address_space;
+ 
+   if (decl_context == FUNCDEF)
+     funcdef_flag = true, decl_context = NORMAL;
+@@ -4102,6 +4133,10 @@
+   constp = declspecs->const_p + TYPE_READONLY (element_type);
+   restrictp = declspecs->restrict_p + TYPE_RESTRICT (element_type);
+   volatilep = declspecs->volatile_p + TYPE_VOLATILE (element_type);
++  as1 = declspecs->address_space;
++  as2 = TYPE_ADDR_SPACE (element_type);
++  address_space = ADDR_SPACE_GENERIC_P (as1)? as2 : as1;
++
+   if (pedantic && !flag_isoc99)
+     {
+       if (constp > 1)
+@@ -4111,11 +4146,17 @@
+       if (volatilep > 1)
+ 	pedwarn (input_location, OPT_pedantic, "duplicate %<volatile%>");
+     }
++
++  if (!ADDR_SPACE_GENERIC_P (as1) && !ADDR_SPACE_GENERIC_P (as2) && as1 != as2)
++    error ("conflicting named address spaces (%s vs %s)",
++	   c_addr_space_name (as1), c_addr_space_name (as2));
++
+   if (!flag_gen_aux_info && (TYPE_QUALS (element_type)))
+     type = TYPE_MAIN_VARIANT (type);
+   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
+ 		| (restrictp ? TYPE_QUAL_RESTRICT : 0)
+-		| (volatilep ? TYPE_QUAL_VOLATILE : 0));
++		| (volatilep ? TYPE_QUAL_VOLATILE : 0)
++		| ENCODE_QUAL_ADDR_SPACE (address_space));
+ 
+   /* Warn about storage classes that are invalid for certain
+      kinds of declarations (parameters, typenames, etc.).  */
+@@ -4459,8 +4500,15 @@
+ 	       it, but here we want to make sure we don't ever
+ 	       modify the shared type, so we gcc_assert (itype)
+ 	       below.  */
+-	      type = build_array_type (type, itype);
++	      {
++		addr_space_t as = DECODE_QUAL_ADDR_SPACE (type_quals);
++		if (!ADDR_SPACE_GENERIC_P (as) && as != TYPE_ADDR_SPACE (type))
++		  type = build_qualified_type (type,
++					       ENCODE_QUAL_ADDR_SPACE (as));
+ 
++		type = build_array_type (type, itype);
++	      }
++
+ 	    if (type != error_mark_node)
+ 	      {
+ 		if (size_varies)
+@@ -4649,6 +4697,59 @@
+   /* Now TYPE has the actual type, apart from any qualifiers in
+      TYPE_QUALS.  */
+ 
++  /* Warn about address space used for things other than static memory or
++     pointers.  */
++  address_space = DECODE_QUAL_ADDR_SPACE (type_quals);
++  if (!ADDR_SPACE_GENERIC_P (address_space))
++    {
++      if (decl_context == NORMAL)
++	{
++	  switch (storage_class)
++	    {
++	    case csc_auto:
++	      error ("%qs combined with %<auto%> qualifier for %qs",
++		     c_addr_space_name (address_space), name);
++	      break;
++	    case csc_register:
++	      error ("%qs combined with %<register%> qualifier for %qs",
++		     c_addr_space_name (address_space), name);
++	      break;
++	    case csc_none:
++	      if (current_function_scope)
++		{
++		  error ("%qs specified for auto variable %qs",
++			 c_addr_space_name (address_space), name);
++		  break;
++		}
++	      break;
++	    case csc_static:
++	    case csc_extern:
++	    case csc_typedef:
++	      break;
++	    default:
++	      gcc_unreachable ();
++	    }
++	}
++      else if (decl_context == PARM && TREE_CODE (type) != ARRAY_TYPE)
++	{
++	  if (orig_name)
++	    error ("%qs specified for parameter %qs",
++		   c_addr_space_name (address_space), name);
++	  else
++	    error ("%qs specified for unnamed parameter",
++		   c_addr_space_name (address_space));
++	}
++      else if (decl_context == FIELD)
++	{
++	  if (orig_name)
++	    error ("%qs specified for structure field %qs",
++		   c_addr_space_name (address_space), name);
++	  else
++	    error ("%qs specified for structure field",
++		   c_addr_space_name (address_space));
++	}
++    }
++
+   /* Check the type and width of a bit-field.  */
+   if (bitfield)
+     check_bitfield_type_and_width (&type, width, orig_name);
+@@ -7172,9 +7273,29 @@
+   ret->volatile_p = false;
+   ret->restrict_p = false;
+   ret->saturating_p = false;
++  ret->address_space = ADDR_SPACE_GENERIC;
+   return ret;
+ }
+ 
++/* Add the address space ADDRSPACE to the declaration specifiers
++   SPECS, returning SPECS.  */
++
++struct c_declspecs *
++declspecs_add_addrspace (struct c_declspecs *specs, addr_space_t as)
++{
++  specs->non_sc_seen_p = true;
++  specs->declspecs_seen_p = true;
++
++  if (!ADDR_SPACE_GENERIC_P (specs->address_space)
++      && specs->address_space != as)
++    error ("incompatible address space qualifiers %qs and %qs",
++	   c_addr_space_name (as),
++	   c_addr_space_name (specs->address_space));
++  else
++    specs->address_space = as;
++  return specs;
++}
++
+ /* Add the type qualifier QUAL to the declaration specifiers SPECS,
+    returning SPECS.  */
+ 
+Index: gcc/gimple-pretty-print.c
+===================================================================
+--- a/src/gcc/gimple-pretty-print.c	(.../gcc-4_4-branch)
++++ b/src/gcc/gimple-pretty-print.c	(.../cell-4_4-branch)
+@@ -254,6 +254,7 @@
+       break;
+ 
+     case FIXED_CONVERT_EXPR:
++    case ADDR_SPACE_CONVERT_EXPR:
+     case FIX_TRUNC_EXPR:
+     case FLOAT_EXPR:
+     CASE_CONVERT:
+Index: gcc/c-pretty-print.c
+===================================================================
+--- a/src/gcc/c-pretty-print.c	(.../gcc-4_4-branch)
++++ b/src/gcc/c-pretty-print.c	(.../cell-4_4-branch)
+@@ -220,8 +220,12 @@
+        const
+        restrict                              -- C99
+        __restrict__                          -- GNU C
+-       volatile    */
++       address-space-qualifier		     -- GNU C
++       volatile
+ 
++   address-space-qualifier:
++       identifier			     -- GNU C  */
++
+ void
+ pp_c_type_qualifier_list (c_pretty_printer *pp, tree t)
+ {
+@@ -240,6 +244,12 @@
+     pp_c_cv_qualifier (pp, "volatile");
+   if (qualifiers & TYPE_QUAL_RESTRICT)
+     pp_c_cv_qualifier (pp, flag_isoc99 ? "restrict" : "__restrict__");
++
++  if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (t)))
++    {
++      const char *as = c_addr_space_name (TYPE_ADDR_SPACE (t));
++      pp_c_identifier (pp, as);
++    }
+ }
+ 
+ /* pointer:
+Index: gcc/regmove.c
+===================================================================
+--- a/src/gcc/regmove.c	(.../gcc-4_4-branch)
++++ b/src/gcc/regmove.c	(.../cell-4_4-branch)
+@@ -179,7 +179,9 @@
+ 		   &SET_SRC (inc_insn_set),
+ 		   XEXP (SET_SRC (inc_insn_set), 0), 1);
+ 	      validate_change (insn, &XEXP (use, 0),
+-			       gen_rtx_fmt_e (inc_code, Pmode, reg), 1);
++			       gen_rtx_fmt_e (inc_code,
++					      GET_MODE (XEXP (use, 0)), reg),
++			       1);
+ 	      if (apply_change_group ())
+ 		{
+ 		  /* If there is a REG_DEAD note on this insn, we must
+Index: gcc/sel-sched-dump.c
+===================================================================
+--- a/src/gcc/sel-sched-dump.c	(.../gcc-4_4-branch)
++++ b/src/gcc/sel-sched-dump.c	(.../cell-4_4-branch)
+@@ -34,6 +34,7 @@
+ #include "output.h"
+ #include "basic-block.h"
+ #include "cselib.h"
++#include "target.h"
+ 
+ #ifdef INSN_SCHEDULING
+ #include "sel-sched-ir.h"
+@@ -931,10 +932,13 @@
+ debug_mem_addr_value (rtx x)
+ {
+   rtx t, addr;
++  enum machine_mode address_mode;
+ 
+   gcc_assert (MEM_P (x));
++  address_mode = targetm.addr_space.address_mode (MEM_ADDR_SPACE (x));
++
+   t = shallow_copy_rtx (x);
+-  if (cselib_lookup (XEXP (t, 0), Pmode, 0))
++  if (cselib_lookup (XEXP (t, 0), address_mode, 0))
+     XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0));
+ 
+   t = canon_rtx (t);
+Index: gcc/print-rtl.c
+===================================================================
+--- a/src/gcc/print-rtl.c	(.../gcc-4_4-branch)
++++ b/src/gcc/print-rtl.c	(.../cell-4_4-branch)
+@@ -556,6 +556,9 @@
+       if (MEM_ALIGN (in_rtx) != 1)
+ 	fprintf (outfile, " A%u", MEM_ALIGN (in_rtx));
+ 
++      if (!ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (in_rtx)))
++	fprintf (outfile, " AS%u", MEM_ADDR_SPACE (in_rtx));
++
+       fputc (']', outfile);
+       break;
+ 
+Index: gcc/stor-layout.c
+===================================================================
+--- a/src/gcc/stor-layout.c	(.../gcc-4_4-branch)
++++ b/src/gcc/stor-layout.c	(.../cell-4_4-branch)
+@@ -48,9 +48,9 @@
+ /* ... and its original value in bytes, specified via -fpack-struct=<value>.  */
+ unsigned int initial_max_fld_align = TARGET_DEFAULT_PACK_STRUCT;
+ 
+-/* Nonzero if all REFERENCE_TYPEs are internal and hence should be
+-   allocated in Pmode, not ptr_mode.   Set only by internal_reference_types
+-   called only by a front end.  */
++/* Nonzero if all REFERENCE_TYPEs are internal and hence should be allocated
++   in the address spaces' address_mode, not pointer_mode.   Set only by
++   internal_reference_types called only by a front end.  */
+ static int reference_types_internal = 0;
+ 
+ static void finalize_record_size (record_layout_info);
+@@ -66,8 +66,8 @@
+ 
+ static GTY(()) tree pending_sizes;
+ 
+-/* Show that REFERENCE_TYPES are internal and should be Pmode.  Called only
+-   by front end.  */
++/* Show that REFERENCE_TYPES are internal and should use address_mode.
++   Called only by front end.  */
+ 
+ void
+ internal_reference_types (void)
+@@ -1700,6 +1700,7 @@
+       /* A pointer might be MODE_PARTIAL_INT,
+ 	 but ptrdiff_t must be integral.  */
+       SET_TYPE_MODE (type, mode_for_size (POINTER_SIZE, MODE_INT, 0));
++      TYPE_PRECISION (type) = POINTER_SIZE;
+       break;
+ 
+     case FUNCTION_TYPE:
+@@ -1715,16 +1716,17 @@
+     case POINTER_TYPE:
+     case REFERENCE_TYPE:
+       {
+-	enum machine_mode mode = ((TREE_CODE (type) == REFERENCE_TYPE
+-				   && reference_types_internal)
+-				  ? Pmode : TYPE_MODE (type));
++	enum machine_mode mode = TYPE_MODE (type);
++	if (TREE_CODE (type) == REFERENCE_TYPE && reference_types_internal)
++	  {
++	    addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (type));
++	    mode = targetm.addr_space.address_mode (as);
++	  }
+ 
+-	int nbits = GET_MODE_BITSIZE (mode);
+-
+-	TYPE_SIZE (type) = bitsize_int (nbits);
++	TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (mode));
+ 	TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (mode));
+ 	TYPE_UNSIGNED (type) = 1;
+-	TYPE_PRECISION (type) = nbits;
++	TYPE_PRECISION (type) = GET_MODE_BITSIZE (mode);
+       }
+       break;
+ 
+Index: gcc/alias.c
+===================================================================
+--- a/src/gcc/alias.c	(.../gcc-4_4-branch)
++++ b/src/gcc/alias.c	(.../cell-4_4-branch)
+@@ -1000,6 +1000,11 @@
+       return 0;
+ 
+     case TRUNCATE:
++      /* As we do not know which address space the pointer is refering to, we can
++	 handle this only if the target does not support different pointer or
++	 address modes depending on the address space.  */
++      if (!target_default_pointer_address_modes_p ())
++	break;
+       if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode))
+ 	break;
+       /* Fall through.  */
+@@ -1014,6 +1019,12 @@
+ 
+     case ZERO_EXTEND:
+     case SIGN_EXTEND:	/* used for NT/Alpha pointers */
++      /* As we do not know which address space the pointer is refering to, we can
++	 handle this only if the target does not support different pointer or
++	 address modes depending on the address space.  */
++      if (!target_default_pointer_address_modes_p ())
++	break;
++
+       {
+ 	rtx temp = find_base_value (XEXP (src, 0));
+ 
+@@ -1406,6 +1417,11 @@
+       return REG_BASE_VALUE (x);
+ 
+     case TRUNCATE:
++      /* As we do not know which address space the pointer is refering to, we can
++	 handle this only if the target does not support different pointer or
++	 address modes depending on the address space.  */
++      if (!target_default_pointer_address_modes_p ())
++	return 0;
+       if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (Pmode))
+ 	return 0;
+       /* Fall through.  */
+@@ -1420,6 +1436,12 @@
+ 
+     case ZERO_EXTEND:
+     case SIGN_EXTEND:	/* Used for Alpha/NT pointers */
++      /* As we do not know which address space the pointer is refering to, we can
++	 handle this only if the target does not support different pointer or
++	 address modes depending on the address space.  */
++      if (!target_default_pointer_address_modes_p ())
++	return 0;
++
+       {
+ 	rtx temp = find_base_term (XEXP (x, 0));
+ 
+@@ -2120,6 +2142,13 @@
+       && ! rtx_equal_p (rtlx, rtly))
+     return 1;
+ 
++  /* If we have MEMs refering to different address spaces (which can
++     potentially overlap), we cannot easily tell from the addresses
++     whether the references overlap.  */
++  if (MEM_P (rtlx) && MEM_P (rtly)
++      && MEM_ADDR_SPACE (rtlx) != MEM_ADDR_SPACE (rtly))
++    return 0;
++
+   /* Get the base and offsets of both decls.  If either is a register, we
+      know both are and are the same, so use that as the base.  The only
+      we can avoid overlap is if we can deduce that they are nonoverlapping
+@@ -2211,6 +2240,12 @@
+   if (nonoverlapping_memrefs_p (mem, x))
+     return 0;
+ 
++  /* If we have MEMs refering to different address spaces (which can
++     potentially overlap), we cannot easily tell from the addresses
++     whether the references overlap.  */
++  if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
++    return 1;
++
+   if (mem_mode == VOIDmode)
+     mem_mode = GET_MODE (mem);
+ 
+@@ -2296,6 +2331,12 @@
+   if (nonoverlapping_memrefs_p (x, mem))
+     return 0;
+ 
++  /* If we have MEMs refering to different address spaces (which can
++     potentially overlap), we cannot easily tell from the addresses
++     whether the references overlap.  */
++  if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
++    return 1;
++
+   if (! x_addr)
+     {
+       x_addr = XEXP (x, 0);
+@@ -2366,6 +2407,12 @@
+   if (nonoverlapping_memrefs_p (x, mem))
+     return 0;
+ 
++  /* If we have MEMs refering to different address spaces (which can
++     potentially overlap), we cannot easily tell from the addresses
++     whether the references overlap.  */
++  if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
++    return 1;
++
+   x_addr = XEXP (x, 0);
+   mem_addr = XEXP (mem, 0);
+   if (!((GET_CODE (x_addr) == VALUE
+Index: gcc/c-typeck.c
+===================================================================
+--- a/src/gcc/c-typeck.c	(.../gcc-4_4-branch)
++++ b/src/gcc/c-typeck.c	(.../cell-4_4-branch)
+@@ -242,14 +242,55 @@
+   return type;
+ }
+ 
++/* Return true if between two named address spaces, whether there is a superset
++   named address space that encompasses both address spaces.  If there is a
++   superset, return which address space is the superset.  */
++
++static bool
++addr_space_superset (addr_space_t as1, addr_space_t as2, addr_space_t *common)
++{
++  if (as1 == as2)
++    {
++      *common = as1;
++      return true;
++    }
++  else if (targetm.addr_space.subset_p (as1, as2))
++    {
++      *common = as2;
++      return true;
++    }
++  else if (targetm.addr_space.subset_p (as2, as1))
++    {
++      *common = as1;
++      return true;
++    }
++  else
++    return false;
++}
++
+ /* Return a variant of TYPE which has all the type qualifiers of LIKE
+    as well as those of TYPE.  */
+ 
+ static tree
+ qualify_type (tree type, tree like)
+ {
++  addr_space_t as_type = TYPE_ADDR_SPACE (type);
++  addr_space_t as_like = TYPE_ADDR_SPACE (like);
++  addr_space_t as_common;
++
++  /* If the two named address spaces are different, determine the common
++     superset address space.  If there isn't one, raise an error.  */
++  if (!addr_space_superset (as_type, as_like, &as_common))
++    {
++      as_common = as_type;
++      error ("%qT and %qT are in disjoint named address spaces",
++	     type, like);
++    }
++
+   return c_build_qualified_type (type,
+-				 TYPE_QUALS (type) | TYPE_QUALS (like));
++				 TYPE_QUALS_NO_ADDR_SPACE (type)
++				 | TYPE_QUALS_NO_ADDR_SPACE (like)
++				 | ENCODE_QUAL_ADDR_SPACE (as_common));
+ }
+ 
+ /* Return true iff the given tree T is a variable length array.  */
+@@ -329,7 +370,8 @@
+ 	bool t1_complete, t2_complete;
+ 
+ 	/* We should not have any type quals on arrays at all.  */
+-	gcc_assert (!TYPE_QUALS (t1) && !TYPE_QUALS (t2));
++	gcc_assert (!TYPE_QUALS_NO_ADDR_SPACE (t1)
++		    && !TYPE_QUALS_NO_ADDR_SPACE (t2));
+ 
+ 	t1_complete = COMPLETE_TYPE_P (t1);
+ 	t2_complete = COMPLETE_TYPE_P (t2);
+@@ -543,6 +585,8 @@
+   tree pointed_to_2, mv2;
+   tree target;
+   unsigned target_quals;
++  addr_space_t as1, as2, as_common;
++  int quals1, quals2;
+ 
+   /* Save time if the two types are the same.  */
+ 
+@@ -574,10 +618,24 @@
+   /* For function types do not merge const qualifiers, but drop them
+      if used inconsistently.  The middle-end uses these to mark const
+      and noreturn functions.  */
++  quals1 = TYPE_QUALS_NO_ADDR_SPACE (pointed_to_1);
++  quals2 = TYPE_QUALS_NO_ADDR_SPACE (pointed_to_2);
++
+   if (TREE_CODE (pointed_to_1) == FUNCTION_TYPE)
+-    target_quals = TYPE_QUALS (pointed_to_1) & TYPE_QUALS (pointed_to_2);
++    target_quals = (quals1 & quals2);
+   else
+-    target_quals = TYPE_QUALS (pointed_to_1) | TYPE_QUALS (pointed_to_2);
++    target_quals = (quals1 | quals2);
++
++  /* If the two named address spaces are different, determine the common
++     superset address space.  This is guaranteed to exist due to the
++     assumption that comp_target_type returned non-zero.  */
++  as1 = TYPE_ADDR_SPACE (pointed_to_1);
++  as2 = TYPE_ADDR_SPACE (pointed_to_2);
++  if (!addr_space_superset (as1, as2, &as_common))
++    gcc_unreachable ();
++
++  target_quals |= ENCODE_QUAL_ADDR_SPACE (as_common);
++
+   t1 = build_pointer_type (c_build_qualified_type (target, target_quals));
+   return build_type_attribute_variant (t1, attributes);
+ }
+@@ -1032,15 +1090,25 @@
+   return attrval == 2 && val == 1 ? 2 : val;
+ }
+ 
+-/* Return 1 if TTL and TTR are pointers to types that are equivalent,
+-   ignoring their qualifiers.  */
++/* Return 1 if TTL and TTR are pointers to types that are equivalent, ignoring
++   their qualifiers, except for named address spaces.  If the pointers point to
++   different named addresses, then we must determine if one address space is a
++   subset of the other.  */
+ 
+ static int
+ comp_target_types (tree ttl, tree ttr)
+ {
+   int val;
+-  tree mvl, mvr;
++  tree mvl = TREE_TYPE (ttl);
++  tree mvr = TREE_TYPE (ttr);
++  addr_space_t asl = TYPE_ADDR_SPACE (mvl);
++  addr_space_t asr = TYPE_ADDR_SPACE (mvr);
++  addr_space_t as_common;
+ 
++  /* Fail if pointers point to incompatible address spaces.  */
++  if (!addr_space_superset (asl, asr, &as_common))
++    return 0;
++
+   /* Do not lose qualifiers on element types of array types that are
+      pointer targets by taking their TYPE_MAIN_VARIANT.  */
+   mvl = TREE_TYPE (ttl);
+@@ -2840,11 +2908,43 @@
+ pointer_diff (tree op0, tree op1)
+ {
+   tree restype = ptrdiff_type_node;
++  tree result, inttype;
+ 
++  addr_space_t as0 = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (op0)));
++  addr_space_t as1 = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (op1)));
+   tree target_type = TREE_TYPE (TREE_TYPE (op0));
+   tree con0, con1, lit0, lit1;
+   tree orig_op1 = op1;
+ 
++  /* If the operands point into different address spaces, we need to
++     explicitly convert them to pointers into the common address space
++     before we can subtract the numerical address values.  */
++  if (as0 != as1)
++    {
++      addr_space_t as_common;
++      tree common_type;
++
++      /* Determine the common superset address space.  This is guaranteed
++	 to exist because the caller verified that comp_target_types
++	 returned non-zero.  */
++      if (!addr_space_superset (as0, as1, &as_common))
++	gcc_unreachable ();
++
++      common_type = common_pointer_type (TREE_TYPE (op0), TREE_TYPE (op1));
++      op0 = convert (common_type, op0);
++      op1 = convert (common_type, op1);
++    }
++
++  /* Determine integer type to perform computations in.  This will usually
++     be the same as the result type (ptrdiff_t), but may need to be a wider
++     type if pointers for the address space are wider than ptrdiff_t.  */
++  if (TYPE_PRECISION (restype) < TYPE_PRECISION (TREE_TYPE (op0)))
++    inttype = lang_hooks.types.type_for_size
++		(TYPE_PRECISION (TREE_TYPE (op0)), 0);
++  else
++    inttype = restype;
++
++
+   if (TREE_CODE (target_type) == VOID_TYPE)
+     pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith, 
+ 	     "pointer of type %<void *%> used in subtraction");
+@@ -2902,8 +3002,8 @@
+      in case restype is a short type.  */
+ 
+   op0 = build_binary_op (input_location,
+-			 MINUS_EXPR, convert (restype, op0),
+-			 convert (restype, op1), 0);
++			 MINUS_EXPR, convert (inttype, op0),
++			 convert (inttype, op1), 0);
+   /* This generates an error if op1 is pointer to incomplete type.  */
+   if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
+     error ("arithmetic on pointer to an incomplete type");
+@@ -2912,7 +3012,10 @@
+   op1 = c_size_in_bytes (target_type);
+ 
+   /* Divide by the size, in easiest possible way.  */
+-  return fold_build2 (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
++  result = fold_build2 (EXACT_DIV_EXPR, inttype, op0, convert (inttype, op1));
++
++  /* Convert to final result type if necessary.  */
++  return convert (restype, result);
+ }
+ 
+ /* Construct and perhaps optimize a tree representation
+@@ -3527,12 +3630,22 @@
+     }
+   else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
+     {
++      addr_space_t as1 = TYPE_ADDR_SPACE (TREE_TYPE (type1));
++      addr_space_t as2 = TYPE_ADDR_SPACE (TREE_TYPE (type2));
++      addr_space_t as_common;
++
+       if (comp_target_types (type1, type2))
+ 	result_type = common_pointer_type (type1, type2);
+       else if (null_pointer_constant_p (orig_op1))
+-	result_type = qualify_type (type2, type1);
++	result_type = type2;
+       else if (null_pointer_constant_p (orig_op2))
+-	result_type = qualify_type (type1, type2);
++	result_type = type1;
++      else if (!addr_space_superset (as1, as2, &as_common))
++	{
++	  error ("pointers to disjoint address spaces "
++		 "used in conditional expression");
++	  return error_mark_node;
++	}
+       else if (VOID_TYPE_P (TREE_TYPE (type1)))
+ 	{
+ 	  if (TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
+@@ -3553,10 +3666,13 @@
+ 	}
+       else
+ 	{
++	  int qual = ENCODE_QUAL_ADDR_SPACE (as_common);
++
+ 	  if (!objc_ok)
+ 	    pedwarn (input_location, 0, 
+ 		     "pointer type mismatch in conditional expression");
+-	  result_type = build_pointer_type (void_type_node);
++	  result_type = build_pointer_type
++			  (build_qualified_type (void_type_node, qual));
+ 	}
+     }
+   else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
+@@ -3724,7 +3840,9 @@
+ 
+       otype = TREE_TYPE (value);
+ 
+-      /* Optionally warn about potentially worrisome casts.  */
++      /* Optionally warn about potentially worrisome casts.
++	 Named address space qualifiers are handled below,
++	 because they result in different warnings.  */
+ 
+       if (warn_cast_qual
+ 	  && TREE_CODE (type) == POINTER_TYPE
+@@ -3750,9 +3868,11 @@
+ 		 are added, not when they're taken away.  */
+ 	      if (TREE_CODE (in_otype) == FUNCTION_TYPE
+ 		  && TREE_CODE (in_type) == FUNCTION_TYPE)
+-		added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
++		added |= (TYPE_QUALS_NO_ADDR_SPACE (in_type)
++			  & ~TYPE_QUALS_NO_ADDR_SPACE (in_otype));
+ 	      else
+-		discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
++		discarded |= (TYPE_QUALS_NO_ADDR_SPACE (in_otype)
++			      & ~TYPE_QUALS_NO_ADDR_SPACE (in_type));
+ 	    }
+ 	  while (TREE_CODE (in_type) == POINTER_TYPE
+ 		 && TREE_CODE (in_otype) == POINTER_TYPE);
+@@ -3766,6 +3886,36 @@
+ 	    warning (OPT_Wcast_qual, "cast discards qualifiers from pointer target type");
+ 	}
+ 
++      /* Warn about conversions between pointers to disjoint
++	 address spaces.  */
++      if (TREE_CODE (type) == POINTER_TYPE
++	  && TREE_CODE (otype) == POINTER_TYPE
++	  && !null_pointer_constant_p (value))
++	{
++	  addr_space_t as_to = TYPE_ADDR_SPACE (TREE_TYPE (type));
++	  addr_space_t as_from = TYPE_ADDR_SPACE (TREE_TYPE (otype));
++	  addr_space_t as_common;
++
++	  if (!addr_space_superset (as_to, as_from, &as_common))
++	    {
++	      if (ADDR_SPACE_GENERIC_P (as_from))
++		warning (0, "cast to %s address space pointer "
++			 "from disjoint generic address space pointer",
++			 c_addr_space_name (as_to));
++
++	      else if (ADDR_SPACE_GENERIC_P (as_to))
++		warning (0, "cast to generic address space pointer "
++			 "from disjoint %s address space pointer",
++			 c_addr_space_name (as_from));
++
++	      else
++		warning (0, "cast to %s address space pointer "
++			 "from disjoint %s address space pointer",
++			 c_addr_space_name (as_to),
++			 c_addr_space_name (as_from));
++	    }
++	}
++
+       /* Warn about possible alignment problems.  */
+       if (STRICT_ALIGNMENT
+ 	  && TREE_CODE (type) == POINTER_TYPE
+@@ -4227,7 +4377,8 @@
+ 		     certain things, it is okay to use a const or volatile
+ 		     function where an ordinary one is wanted, but not
+ 		     vice-versa.  */
+-		  if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
++		  if (TYPE_QUALS_NO_ADDR_SPACE (ttl)
++		      & ~TYPE_QUALS_NO_ADDR_SPACE (ttr))
+ 		    WARN_FOR_ASSIGNMENT (input_location, 0,
+ 					 G_("passing argument %d of %qE "
+ 					    "makes qualified function "
+@@ -4241,7 +4392,8 @@
+ 					 G_("return makes qualified function "
+ 					    "pointer from unqualified"));
+ 		}
+-	      else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
++	      else if (TYPE_QUALS_NO_ADDR_SPACE (ttr)
++		       & ~TYPE_QUALS_NO_ADDR_SPACE (ttl))
+ 		WARN_FOR_ASSIGNMENT (input_location, 0,
+ 				     G_("passing argument %d of %qE discards "
+ 					"qualifiers from pointer target type"),
+@@ -4274,6 +4426,8 @@
+       tree mvr = ttr;
+       bool is_opaque_pointer;
+       int target_cmp = 0;   /* Cache comp_target_types () result.  */
++      addr_space_t asl;
++      addr_space_t asr;
+ 
+       if (TREE_CODE (mvl) != ARRAY_TYPE)
+ 	mvl = TYPE_MAIN_VARIANT (mvl);
+@@ -4293,6 +4447,36 @@
+ 	warning (OPT_Wc___compat, "request for implicit conversion from "
+ 		 "%qT to %qT not permitted in C++", rhstype, type);
+ 
++      /* See if the pointers point to incompatible address spaces.  */
++      asl = TYPE_ADDR_SPACE (ttl);
++      asr = TYPE_ADDR_SPACE (ttr);
++      if (!null_pointer_constant_p (rhs)
++	  && asr != asl && !targetm.addr_space.subset_p (asr, asl))
++	{
++	  switch (errtype)
++	    {
++	    case ic_argpass:
++	      error ("passing argument %d of %qE from pointer to "
++		     "non-enclosed address space", parmnum, rname);
++	      break;
++	    case ic_assign:
++	      error ("assignment from pointer to "
++		     "non-enclosed address space");
++	      break;
++	    case ic_init:
++	      error ("initialization from pointer to "
++		     "non-enclosed address space");
++	      break;
++	    case ic_return:
++	      error ("return from pointer to "
++		     "non-enclosed address space");
++	      break;
++	    default:
++	      gcc_unreachable ();
++	    }
++	  return error_mark_node;
++	}
++
+       /* Check if the right-hand side has a format attribute but the
+ 	 left-hand side doesn't.  */
+       if (warn_missing_format_attribute
+@@ -4356,7 +4540,8 @@
+ 	  else if (TREE_CODE (ttr) != FUNCTION_TYPE
+ 		   && TREE_CODE (ttl) != FUNCTION_TYPE)
+ 	    {
+-	      if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
++	      if (TYPE_QUALS_NO_ADDR_SPACE (ttr)
++		  & ~TYPE_QUALS_NO_ADDR_SPACE (ttl))
+ 		{
+ 		  /* Types differing only by the presence of the 'volatile'
+ 		     qualifier are acceptable if the 'volatile' has been added
+@@ -4396,7 +4581,8 @@
+ 		 that say the function will not do certain things,
+ 		 it is okay to use a const or volatile function
+ 		 where an ordinary one is wanted, but not vice-versa.  */
+-	      if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
++	      if (TYPE_QUALS_NO_ADDR_SPACE (ttl)
++		  & ~TYPE_QUALS_NO_ADDR_SPACE (ttr))
+ 		WARN_FOR_ASSIGNMENT (input_location, 0,
+ 				     G_("passing argument %d of %qE makes "
+ 					"qualified function pointer "
+@@ -6705,7 +6891,8 @@
+ 	   || TREE_CODE (constructor_type) == UNION_TYPE)
+ 	  && constructor_fields == 0)
+ 	process_init_element (pop_init_level (1), true);
+-      else if (TREE_CODE (constructor_type) == ARRAY_TYPE
++      else if ((TREE_CODE (constructor_type) == ARRAY_TYPE
++	        || TREE_CODE (constructor_type) == VECTOR_TYPE)
+ 	       && (constructor_max_index == 0
+ 		   || tree_int_cst_lt (constructor_max_index,
+ 				       constructor_index)))
+@@ -6766,7 +6953,7 @@
+ 		   && value.value != error_mark_node
+ 		   && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
+ 		   && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
+-		       || fieldcode == UNION_TYPE))
++		       || fieldcode == UNION_TYPE || fieldcode == VECTOR_TYPE))
+ 	    {
+ 	      push_init_level (1);
+ 	      continue;
+@@ -6856,7 +7043,7 @@
+ 		   && value.value != error_mark_node
+ 		   && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
+ 		   && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
+-		       || fieldcode == UNION_TYPE))
++		       || fieldcode == UNION_TYPE || fieldcode == VECTOR_TYPE))
+ 	    {
+ 	      push_init_level (1);
+ 	      continue;
+@@ -6896,7 +7083,7 @@
+ 		   && value.value != error_mark_node
+ 		   && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
+ 		   && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
+-		       || eltcode == UNION_TYPE))
++		       || eltcode == UNION_TYPE || eltcode == VECTOR_TYPE))
+ 	    {
+ 	      push_init_level (1);
+ 	      continue;
+@@ -6944,8 +7131,12 @@
+ 
+ 	  /* Now output the actual element.  */
+ 	  if (value.value)
+-	    output_init_element (value.value, strict_string,
+-				 elttype, constructor_index, 1, implicit);
++	    {
++	      if (TREE_CODE (value.value) == VECTOR_CST)
++		elttype = TYPE_MAIN_VARIANT (constructor_type);
++	      output_init_element (value.value, strict_string,
++				   elttype, constructor_index, 1, implicit);
++	    }
+ 
+ 	  constructor_index
+ 	    = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
+@@ -8204,7 +8395,11 @@
+     case FLOOR_MOD_EXPR:
+       warn_for_div_by_zero (location, op1);
+ 
+-      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
++      if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
++	  && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
++	  && TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE)
++	common = 1;
++      else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
+ 	{
+ 	  /* Although it would be tempting to shorten always here, that loses
+ 	     on some targets, since the modulo instruction is undefined if the
+@@ -8314,24 +8509,34 @@
+ 	{
+ 	  tree tt0 = TREE_TYPE (type0);
+ 	  tree tt1 = TREE_TYPE (type1);
++	  addr_space_t as0 = TYPE_ADDR_SPACE (tt0);
++	  addr_space_t as1 = TYPE_ADDR_SPACE (tt1);
++	  addr_space_t as_common = ADDR_SPACE_GENERIC;
++
+ 	  /* Anything compares with void *.  void * compares with anything.
+ 	     Otherwise, the targets must be compatible
+ 	     and both must be object or both incomplete.  */
+ 	  if (comp_target_types (type0, type1))
+ 	    result_type = common_pointer_type (type0, type1);
++	  else if (null_pointer_constant_p (orig_op0))
++	    result_type = type1;
++	  else if (null_pointer_constant_p (orig_op1))
++	    result_type = type0;
++	  else if (!addr_space_superset (as0, as1, &as_common))
++	    {
++	      error_at (location, "comparison of pointers to "
++			"disjoint address spaces");
++	      return error_mark_node;
++	    }
+ 	  else if (VOID_TYPE_P (tt0))
+ 	    {
+-	      /* op0 != orig_op0 detects the case of something
+-		 whose value is 0 but which isn't a valid null ptr const.  */
+-	      if (pedantic && !null_pointer_constant_p (orig_op0)
+-		  && TREE_CODE (tt1) == FUNCTION_TYPE)
++	      if (pedantic && TREE_CODE (tt1) == FUNCTION_TYPE)
+ 		pedwarn (location, OPT_pedantic, "ISO C forbids "
+ 			 "comparison of %<void *%> with function pointer");
+ 	    }
+ 	  else if (VOID_TYPE_P (tt1))
+ 	    {
+-	      if (pedantic && !null_pointer_constant_p (orig_op1)
+-		  && TREE_CODE (tt0) == FUNCTION_TYPE)
++	      if (pedantic && TREE_CODE (tt0) == FUNCTION_TYPE)
+ 		pedwarn (location, OPT_pedantic, "ISO C forbids "
+ 			 "comparison of %<void *%> with function pointer");
+ 	    }
+@@ -8342,7 +8547,11 @@
+ 		       "comparison of distinct pointer types lacks a cast");
+ 
+ 	  if (result_type == NULL_TREE)
+-	    result_type = ptr_type_node;
++	    {
++	      int qual = ENCODE_QUAL_ADDR_SPACE (as_common);
++	      result_type = build_pointer_type
++			      (build_qualified_type (void_type_node, qual));
++	    }
+ 	}
+       else if (code0 == POINTER_TYPE && null_pointer_constant_p (orig_op1))
+ 	{
+@@ -8386,6 +8595,10 @@
+ 	short_compare = 1;
+       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
+ 	{
++	  addr_space_t as0 = TYPE_ADDR_SPACE (TREE_TYPE (type0));
++	  addr_space_t as1 = TYPE_ADDR_SPACE (TREE_TYPE (type1));
++	  addr_space_t as_common;
++
+ 	  if (comp_target_types (type0, type1))
+ 	    {
+ 	      result_type = common_pointer_type (type0, type1);
+@@ -8397,9 +8610,17 @@
+ 		pedwarn (location, OPT_pedantic, "ISO C forbids "
+ 			 "ordered comparisons of pointers to functions");
+ 	    }
++	  else if (!addr_space_superset (as0, as1, &as_common))
++	    {
++	      error_at (location, "comparison of pointers to "
++			"disjoint address spaces");
++	      return error_mark_node;
++	    }
+ 	  else
+ 	    {
+-	      result_type = ptr_type_node;
++	      int qual = ENCODE_QUAL_ADDR_SPACE (as_common);
++	      result_type = build_pointer_type
++			      (build_qualified_type (void_type_node, qual));
+ 	      pedwarn (location, 0,
+ 		       "comparison of distinct pointer types lacks a cast");
+ 	    }
+Index: gcc/coretypes.h
+===================================================================
+--- a/src/gcc/coretypes.h	(.../gcc-4_4-branch)
++++ b/src/gcc/coretypes.h	(.../cell-4_4-branch)
+@@ -67,6 +67,13 @@
+ typedef struct gimple_seq_node_d *gimple_seq_node;
+ typedef const struct gimple_seq_node_d *const_gimple_seq_node;
+ 
++/* Address space number for named address space support.  */
++typedef unsigned char addr_space_t;
++
++/* The value of addr_space_t that represents the generic address space.  */
++#define ADDR_SPACE_GENERIC 0
++#define ADDR_SPACE_GENERIC_P(AS) ((AS) == ADDR_SPACE_GENERIC)
++
+ /* The major intermediate representations of GCC.  */
+ enum ir_type {
+   IR_GIMPLE,
+Index: gcc/tree.def
+===================================================================
+--- a/src/gcc/tree.def	(.../gcc-4_4-branch)
++++ b/src/gcc/tree.def	(.../cell-4_4-branch)
+@@ -763,6 +763,10 @@
+    represented by CONVERT_EXPR or NOP_EXPR nodes.  */
+ DEFTREECODE (CONVERT_EXPR, "convert_expr", tcc_unary, 1)
+ 
++/* Conversion of a pointer value to a pointer to a different
++   address space.  */
++DEFTREECODE (ADDR_SPACE_CONVERT_EXPR, "addr_space_convert_expr", tcc_unary, 1)
++
+ /* Conversion of a fixed-point value to an integer, a real, or a fixed-point
+    value.  Or conversion of a fixed-point value from an integer, a real, or
+    a fixed-point value.  */
+Index: gcc/expmed.c
+===================================================================
+--- a/src/gcc/expmed.c	(.../gcc-4_4-branch)
++++ b/src/gcc/expmed.c	(.../cell-4_4-branch)
+@@ -5017,10 +5017,11 @@
+     default:
+       t = build_decl (VAR_DECL, NULL_TREE, type);
+ 
+-      /* If TYPE is a POINTER_TYPE, X might be Pmode with TYPE_MODE being
+-	 ptr_mode.  So convert.  */
++      /* If TYPE is a POINTER_TYPE, we might need to convert X from
++	 address mode to pointer mode.  */
+       if (POINTER_TYPE_P (type))
+-	x = convert_memory_address (TYPE_MODE (type), x);
++	x = convert_memory_address_addr_space
++	      (TYPE_MODE (type), x, TYPE_ADDR_SPACE (TREE_TYPE (type)));
+ 
+       /* Note that we do *not* use SET_DECL_RTL here, because we do not
+ 	 want set_decl_rtl to go adjusting REG_ATTRS for this temporary.  */
+Index: gcc/emit-rtl.c
+===================================================================
+--- a/src/gcc/emit-rtl.c	(.../gcc-4_4-branch)
++++ b/src/gcc/emit-rtl.c	(.../cell-4_4-branch)
+@@ -58,6 +58,7 @@
+ #include "langhooks.h"
+ #include "tree-pass.h"
+ #include "df.h"
++#include "target.h"
+ 
+ /* Commonly used modes.  */
+ 
+@@ -193,7 +194,7 @@
+ static hashval_t mem_attrs_htab_hash (const void *);
+ static int mem_attrs_htab_eq (const void *, const void *);
+ static mem_attrs *get_mem_attrs (alias_set_type, tree, rtx, rtx, unsigned int,
+-				 enum machine_mode);
++				 addr_space_t, enum machine_mode);
+ static hashval_t reg_attrs_htab_hash (const void *);
+ static int reg_attrs_htab_eq (const void *, const void *);
+ static reg_attrs *get_reg_attrs (tree, int);
+@@ -293,6 +294,7 @@
+   const mem_attrs *const p = (const mem_attrs *) x;
+ 
+   return (p->alias ^ (p->align * 1000)
++	  ^ (p->addrspace * 4000)
+ 	  ^ ((p->offset ? INTVAL (p->offset) : 0) * 50000)
+ 	  ^ ((p->size ? INTVAL (p->size) : 0) * 2500000)
+ 	  ^ (size_t) iterative_hash_expr (p->expr, 0));
+@@ -310,6 +312,7 @@
+ 
+   return (p->alias == q->alias && p->offset == q->offset
+ 	  && p->size == q->size && p->align == q->align
++	  && p->addrspace == q->addrspace
+ 	  && (p->expr == q->expr
+ 	      || (p->expr != NULL_TREE && q->expr != NULL_TREE
+ 		  && operand_equal_p (p->expr, q->expr, 0))));
+@@ -321,7 +324,7 @@
+ 
+ static mem_attrs *
+ get_mem_attrs (alias_set_type alias, tree expr, rtx offset, rtx size,
+-	       unsigned int align, enum machine_mode mode)
++	       unsigned int align, addr_space_t addrspace, enum machine_mode mode)
+ {
+   mem_attrs attrs;
+   void **slot;
+@@ -329,7 +332,7 @@
+   /* If everything is the default, we can just return zero.
+      This must match what the corresponding MEM_* macros return when the
+      field is not present.  */
+-  if (alias == 0 && expr == 0 && offset == 0
++  if (alias == 0 && expr == 0 && offset == 0 && addrspace == 0
+       && (size == 0
+ 	  || (mode != BLKmode && GET_MODE_SIZE (mode) == INTVAL (size)))
+       && (STRICT_ALIGNMENT && mode != BLKmode
+@@ -341,6 +344,7 @@
+   attrs.offset = offset;
+   attrs.size = size;
+   attrs.align = align;
++  attrs.addrspace = addrspace;
+ 
+   slot = htab_find_slot (mem_attrs_htab, &attrs, INSERT);
+   if (*slot == 0)
+@@ -1387,7 +1391,9 @@
+ 
+       else if (reload_completed)
+ 	{
+-	  if (! strict_memory_address_p (word_mode, XEXP (new_rtx, 0)))
++	  if (! strict_memory_address_addr_space_p (word_mode,
++						    XEXP (new_rtx, 0),
++						    MEM_ADDR_SPACE (op)))
+ 	    return 0;
+ 	}
+       else
+@@ -1842,7 +1848,8 @@
+ 
+   /* Now set the attributes we computed above.  */
+   MEM_ATTRS (ref)
+-    = get_mem_attrs (alias, expr, offset, size, align, GET_MODE (ref));
++    = get_mem_attrs (alias, expr, offset, size, align,
++		     TYPE_ADDR_SPACE (type), GET_MODE (ref));
+ 
+   /* If this is already known to be a scalar or aggregate, we are done.  */
+   if (MEM_IN_STRUCT_P (ref) || MEM_SCALAR_P (ref))
+@@ -1870,7 +1877,8 @@
+   MEM_ATTRS (mem)
+     = get_mem_attrs (MEM_ALIAS_SET (mem), REG_EXPR (reg),
+ 		     GEN_INT (REG_OFFSET (reg)),
+-		     MEM_SIZE (mem), MEM_ALIGN (mem), GET_MODE (mem));
++		     MEM_SIZE (mem), MEM_ALIGN (mem),
++		     MEM_ADDR_SPACE (mem), GET_MODE (mem));
+ }
+ 
+ /* Set the alias set of MEM to SET.  */
+@@ -1885,9 +1893,19 @@
+ 
+   MEM_ATTRS (mem) = get_mem_attrs (set, MEM_EXPR (mem), MEM_OFFSET (mem),
+ 				   MEM_SIZE (mem), MEM_ALIGN (mem),
+-				   GET_MODE (mem));
++				   MEM_ADDR_SPACE (mem), GET_MODE (mem));
+ }
+ 
++/* Set the address space of MEM to ADDRSPACE (target-defined).  */
++
++void
++set_mem_addr_space (rtx mem, addr_space_t addrspace)
++{
++  MEM_ATTRS (mem) = get_mem_attrs (MEM_ALIAS_SET (mem), MEM_EXPR (mem),
++				   MEM_OFFSET (mem), MEM_SIZE (mem),
++				   MEM_ALIGN (mem), addrspace, GET_MODE (mem));
++}
++
+ /* Set the alignment of MEM to ALIGN bits.  */
+ 
+ void
+@@ -1895,7 +1913,7 @@
+ {
+   MEM_ATTRS (mem) = get_mem_attrs (MEM_ALIAS_SET (mem), MEM_EXPR (mem),
+ 				   MEM_OFFSET (mem), MEM_SIZE (mem), align,
+-				   GET_MODE (mem));
++				   MEM_ADDR_SPACE (mem), GET_MODE (mem));
+ }
+ 
+ /* Set the expr for MEM to EXPR.  */
+@@ -1905,7 +1923,8 @@
+ {
+   MEM_ATTRS (mem)
+     = get_mem_attrs (MEM_ALIAS_SET (mem), expr, MEM_OFFSET (mem),
+-		     MEM_SIZE (mem), MEM_ALIGN (mem), GET_MODE (mem));
++		     MEM_SIZE (mem), MEM_ALIGN (mem),
++		     MEM_ADDR_SPACE (mem), GET_MODE (mem));
+ }
+ 
+ /* Set the offset of MEM to OFFSET.  */
+@@ -1915,7 +1934,7 @@
+ {
+   MEM_ATTRS (mem) = get_mem_attrs (MEM_ALIAS_SET (mem), MEM_EXPR (mem),
+ 				   offset, MEM_SIZE (mem), MEM_ALIGN (mem),
+-				   GET_MODE (mem));
++				   MEM_ADDR_SPACE (mem), GET_MODE (mem));
+ }
+ 
+ /* Set the size of MEM to SIZE.  */
+@@ -1925,7 +1944,7 @@
+ {
+   MEM_ATTRS (mem) = get_mem_attrs (MEM_ALIAS_SET (mem), MEM_EXPR (mem),
+ 				   MEM_OFFSET (mem), size, MEM_ALIGN (mem),
+-				   GET_MODE (mem));
++				   MEM_ADDR_SPACE (mem), GET_MODE (mem));
+ }
+ 
+ /* Return a memory reference like MEMREF, but with its mode changed to MODE
+@@ -1937,23 +1956,25 @@
+ static rtx
+ change_address_1 (rtx memref, enum machine_mode mode, rtx addr, int validate)
+ {
++  addr_space_t as;
+   rtx new_rtx;
+ 
+   gcc_assert (MEM_P (memref));
++  as = MEM_ADDR_SPACE (memref);
+   if (mode == VOIDmode)
+     mode = GET_MODE (memref);
+   if (addr == 0)
+     addr = XEXP (memref, 0);
+   if (mode == GET_MODE (memref) && addr == XEXP (memref, 0)
+-      && (!validate || memory_address_p (mode, addr)))
++      && (!validate || memory_address_addr_space_p (mode, addr, as)))
+     return memref;
+ 
+   if (validate)
+     {
+       if (reload_in_progress || reload_completed)
+-	gcc_assert (memory_address_p (mode, addr));
++	gcc_assert (memory_address_addr_space_p (mode, addr, as));
+       else
+-	addr = memory_address (mode, addr);
++	addr = memory_address_addr_space (mode, addr, as);
+     }
+ 
+   if (rtx_equal_p (addr, XEXP (memref, 0)) && mode == GET_MODE (memref))
+@@ -1992,7 +2013,8 @@
+     }
+ 
+   MEM_ATTRS (new_rtx)
+-    = get_mem_attrs (MEM_ALIAS_SET (memref), 0, 0, size, align, mmode);
++    = get_mem_attrs (MEM_ALIAS_SET (memref), 0, 0, size, align,
++		     MEM_ADDR_SPACE (memref), mmode);
+ 
+   return new_rtx;
+ }
+@@ -2012,11 +2034,13 @@
+   rtx memoffset = MEM_OFFSET (memref);
+   rtx size = 0;
+   unsigned int memalign = MEM_ALIGN (memref);
++  addr_space_t as = MEM_ADDR_SPACE (memref);
++  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
+   int pbits;
+ 
+   /* If there are no changes, just return the original memory reference.  */
+   if (mode == GET_MODE (memref) && !offset
+-      && (!validate || memory_address_p (mode, addr)))
++      && (!validate || memory_address_addr_space_p (mode, addr, as)))
+     return memref;
+ 
+   /* ??? Prefer to create garbage instead of creating shared rtl.
+@@ -2026,7 +2050,7 @@
+ 
+   /* Convert a possibly large offset to a signed value within the
+      range of the target address space.  */
+-  pbits = GET_MODE_BITSIZE (Pmode);
++  pbits = GET_MODE_BITSIZE (address_mode);
+   if (HOST_BITS_PER_WIDE_INT > pbits)
+     {
+       int shift = HOST_BITS_PER_WIDE_INT - pbits;
+@@ -2042,7 +2066,7 @@
+ 	  && offset >= 0
+ 	  && (unsigned HOST_WIDE_INT) offset
+ 	      < GET_MODE_ALIGNMENT (GET_MODE (memref)) / BITS_PER_UNIT)
+-	addr = gen_rtx_LO_SUM (Pmode, XEXP (addr, 0),
++	addr = gen_rtx_LO_SUM (address_mode, XEXP (addr, 0),
+ 			       plus_constant (XEXP (addr, 1), offset));
+       else
+ 	addr = plus_constant (addr, offset);
+@@ -2075,7 +2099,8 @@
+     size = plus_constant (MEM_SIZE (memref), -offset);
+ 
+   MEM_ATTRS (new_rtx) = get_mem_attrs (MEM_ALIAS_SET (memref), MEM_EXPR (memref),
+-				   memoffset, size, memalign, GET_MODE (new_rtx));
++				       memoffset, size, memalign, as,
++				       GET_MODE (new_rtx));
+ 
+   /* At some point, we should validate that this offset is within the object,
+      if all the appropriate values are known.  */
+@@ -2103,8 +2128,10 @@
+ offset_address (rtx memref, rtx offset, unsigned HOST_WIDE_INT pow2)
+ {
+   rtx new_rtx, addr = XEXP (memref, 0);
++  addr_space_t as = MEM_ADDR_SPACE (memref);
++  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
+ 
+-  new_rtx = simplify_gen_binary (PLUS, Pmode, addr, offset);
++  new_rtx = simplify_gen_binary (PLUS, address_mode, addr, offset);
+ 
+   /* At this point we don't know _why_ the address is invalid.  It
+      could have secondary memory references, multiplies or anything.
+@@ -2113,12 +2140,12 @@
+      being able to recognize the magic around pic_offset_table_rtx.
+      This stuff is fragile, and is yet another example of why it is
+      bad to expose PIC machinery too early.  */
+-  if (! memory_address_p (GET_MODE (memref), new_rtx)
++  if (! memory_address_addr_space_p (GET_MODE (memref), new_rtx, as)
+       && GET_CODE (addr) == PLUS
+       && XEXP (addr, 0) == pic_offset_table_rtx)
+     {
+       addr = force_reg (GET_MODE (addr), addr);
+-      new_rtx = simplify_gen_binary (PLUS, Pmode, addr, offset);
++      new_rtx = simplify_gen_binary (PLUS, address_mode, addr, offset);
+     }
+ 
+   update_temp_slot_address (XEXP (memref, 0), new_rtx);
+@@ -2133,7 +2160,7 @@
+   MEM_ATTRS (new_rtx)
+     = get_mem_attrs (MEM_ALIAS_SET (memref), MEM_EXPR (memref), 0, 0,
+ 		     MIN (MEM_ALIGN (memref), pow2 * BITS_PER_UNIT),
+-		     GET_MODE (new_rtx));
++		     as, GET_MODE (new_rtx));
+   return new_rtx;
+ }
+ 
+@@ -2237,7 +2264,8 @@
+   /* ??? Maybe use get_alias_set on any remaining expression.  */
+ 
+   MEM_ATTRS (new_rtx) = get_mem_attrs (0, expr, memoffset, GEN_INT (size),
+-				   MEM_ALIGN (new_rtx), mode);
++				       MEM_ALIGN (new_rtx),
++				       MEM_ADDR_SPACE (new_rtx), mode);
+ 
+   return new_rtx;
+ }
+@@ -2264,7 +2292,7 @@
+   rd = gen_rtx_MEM (BLKmode, frame_pointer_rtx);
+   MEM_NOTRAP_P (rd) = 1;
+   MEM_ATTRS (rd) = get_mem_attrs (new_alias_set (), d, const0_rtx,
+-				  NULL_RTX, 0, BLKmode);
++				  NULL_RTX, 0, ADDR_SPACE_GENERIC, BLKmode);
+   SET_DECL_RTL (d, rd);
+ 
+   return d;
+@@ -2297,7 +2325,7 @@
+ 
+   MEM_ATTRS (mem) = get_mem_attrs (alias, expr, offset,
+ 				   MEM_SIZE (mem), MEM_ALIGN (mem),
+-				   GET_MODE (mem));
++				   ADDR_SPACE_GENERIC, GET_MODE (mem));
+   MEM_NOTRAP_P (mem) = 1;
+ }
+ 
+Index: gcc/cselib.c
+===================================================================
+--- a/src/gcc/cselib.c	(.../gcc-4_4-branch)
++++ b/src/gcc/cselib.c	(.../cell-4_4-branch)
+@@ -1689,7 +1689,13 @@
+ 	    src = gen_rtx_IF_THEN_ELSE (GET_MODE (dest), cond, src, dest);
+ 	  sets[i].src_elt = cselib_lookup (src, GET_MODE (dest), 1);
+ 	  if (MEM_P (dest))
+-	    sets[i].dest_addr_elt = cselib_lookup (XEXP (dest, 0), Pmode, 1);
++	    {
++	      enum machine_mode address_mode
++		= targetm.addr_space.address_mode (MEM_ADDR_SPACE (dest));
++
++	      sets[i].dest_addr_elt = cselib_lookup (XEXP (dest, 0),
++						     address_mode, 1);
++	    }
+ 	  else
+ 	    sets[i].dest_addr_elt = 0;
+ 	}
+Index: gcc/emit-rtl.h
+===================================================================
+--- a/src/gcc/emit-rtl.h	(.../gcc-4_4-branch)
++++ b/src/gcc/emit-rtl.h	(.../cell-4_4-branch)
+@@ -26,6 +26,9 @@
+ /* Set the alignment of MEM to ALIGN bits.  */
+ extern void set_mem_align (rtx, unsigned int);
+ 
++/* Set the address space of MEM to ADDRSPACE.  */
++extern void set_mem_addr_space (rtx, addr_space_t);
++
+ /* Set the expr for MEM to EXPR.  */
+ extern void set_mem_expr (rtx, tree);
+ 
+Index: gcc/simplify-rtx.c
+===================================================================
+--- a/src/gcc/simplify-rtx.c	(.../gcc-4_4-branch)
++++ b/src/gcc/simplify-rtx.c	(.../cell-4_4-branch)
+@@ -863,7 +863,11 @@
+ 	return rtl_hooks.gen_lowpart_no_emit (mode, op);
+ 
+ #if defined(POINTERS_EXTEND_UNSIGNED) && !defined(HAVE_ptr_extend)
+-      if (! POINTERS_EXTEND_UNSIGNED
++      /* As we do not know which address space the pointer is refering to,
++	 we can do this only if the target does not support different pointer
++	 or address modes depending on the address space.  */
++      if (target_default_pointer_address_modes_p ()
++	  && ! POINTERS_EXTEND_UNSIGNED
+ 	  && mode == Pmode && GET_MODE (op) == ptr_mode
+ 	  && (CONSTANT_P (op)
+ 	      || (GET_CODE (op) == SUBREG
+@@ -885,7 +889,11 @@
+ 	return rtl_hooks.gen_lowpart_no_emit (mode, op);
+ 
+ #if defined(POINTERS_EXTEND_UNSIGNED) && !defined(HAVE_ptr_extend)
+-      if (POINTERS_EXTEND_UNSIGNED > 0
++      /* As we do not know which address space the pointer is refering to,
++	 we can do this only if the target does not support different pointer
++	 or address modes depending on the address space.  */
++      if (target_default_pointer_address_modes_p ()
++	  && POINTERS_EXTEND_UNSIGNED > 0
+ 	  && mode == Pmode && GET_MODE (op) == ptr_mode
+ 	  && (CONSTANT_P (op)
+ 	      || (GET_CODE (op) == SUBREG
+Index: gcc/explow.c
+===================================================================
+--- a/src/gcc/explow.c	(.../gcc-4_4-branch)
++++ b/src/gcc/explow.c	(.../cell-4_4-branch)
+@@ -306,27 +306,27 @@
+       rtx op1 = break_out_memory_refs (XEXP (x, 1));
+ 
+       if (op0 != XEXP (x, 0) || op1 != XEXP (x, 1))
+-	x = simplify_gen_binary (GET_CODE (x), Pmode, op0, op1);
++	x = simplify_gen_binary (GET_CODE (x), GET_MODE (x), op0, op1);
+     }
+ 
+   return x;
+ }
+ 
+-/* Given X, a memory address in ptr_mode, convert it to an address
+-   in Pmode, or vice versa (TO_MODE says which way).  We take advantage of
+-   the fact that pointers are not allowed to overflow by commuting arithmetic
+-   operations over conversions so that address arithmetic insns can be
+-   used.  */
++/* Given X, a memory address in address space AS' pointer mode, convert it to
++   an address in the address space's address mode, or vice versa (TO_MODE says
++   which way).  We take advantage of the fact that pointers are not allowed to
++   overflow by commuting arithmetic operations over conversions so that address
++   arithmetic insns can be used.  */
+ 
+ rtx
+-convert_memory_address (enum machine_mode to_mode ATTRIBUTE_UNUSED, 
+-			rtx x)
++convert_memory_address_addr_space (enum machine_mode to_mode ATTRIBUTE_UNUSED,
++				   rtx x, addr_space_t as ATTRIBUTE_UNUSED)
+ {
+ #ifndef POINTERS_EXTEND_UNSIGNED
+   gcc_assert (GET_MODE (x) == to_mode || GET_MODE (x) == VOIDmode);
+   return x;
+ #else /* defined(POINTERS_EXTEND_UNSIGNED) */
+-  enum machine_mode from_mode;
++  enum machine_mode pointer_mode, address_mode, from_mode;
+   rtx temp;
+   enum rtx_code code;
+ 
+@@ -334,7 +334,9 @@
+   if (GET_MODE (x) == to_mode)
+     return x;
+ 
+-  from_mode = to_mode == ptr_mode ? Pmode : ptr_mode;
++  pointer_mode = targetm.addr_space.pointer_mode (as);
++  address_mode = targetm.addr_space.address_mode (as);
++  from_mode = to_mode == pointer_mode ? address_mode : pointer_mode;
+ 
+   /* Here we handle some special cases.  If none of them apply, fall through
+      to the default case.  */
+@@ -375,7 +377,8 @@
+ 
+     case CONST:
+       return gen_rtx_CONST (to_mode,
+-			    convert_memory_address (to_mode, XEXP (x, 0)));
++			    convert_memory_address_addr_space
++			      (to_mode, XEXP (x, 0), as));
+       break;
+ 
+     case PLUS:
+@@ -389,10 +392,12 @@
+       if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode)
+ 	  || (GET_CODE (x) == PLUS
+ 	      && GET_CODE (XEXP (x, 1)) == CONST_INT
+-	      && (XEXP (x, 1) == convert_memory_address (to_mode, XEXP (x, 1))
++	      && (XEXP (x, 1) == convert_memory_address_addr_space
++				   (to_mode, XEXP (x, 1), as)
+                  || POINTERS_EXTEND_UNSIGNED < 0)))
+ 	return gen_rtx_fmt_ee (GET_CODE (x), to_mode,
+-			       convert_memory_address (to_mode, XEXP (x, 0)),
++			       convert_memory_address_addr_space
++				 (to_mode, XEXP (x, 0), as),
+ 			       XEXP (x, 1));
+       break;
+ 
+@@ -405,21 +410,22 @@
+ #endif /* defined(POINTERS_EXTEND_UNSIGNED) */
+ }
+ 
+-/* Return something equivalent to X but valid as a memory address
+-   for something of mode MODE.  When X is not itself valid, this
+-   works by copying X or subexpressions of it into registers.  */
++/* Return something equivalent to X but valid as a memory address for something
++   of mode MODE in the named address space AS.  When X is not itself valid,
++   this works by copying X or subexpressions of it into registers.  */
+ 
+ rtx
+-memory_address (enum machine_mode mode, rtx x)
++memory_address_addr_space (enum machine_mode mode, rtx x, addr_space_t as)
+ {
+   rtx oldx = x;
++  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
+ 
+-  x = convert_memory_address (Pmode, x);
++  x = convert_memory_address_addr_space (address_mode, x, as);
+ 
+   /* By passing constant addresses through registers
+      we get a chance to cse them.  */
+   if (! cse_not_expected && CONSTANT_P (x) && CONSTANT_ADDRESS_P (x))
+-    x = force_reg (Pmode, x);
++    x = force_reg (address_mode, x);
+ 
+   /* We get better cse by rejecting indirect addressing at this stage.
+      Let the combiner create indirect addresses where appropriate.
+@@ -431,12 +437,12 @@
+ 	x = break_out_memory_refs (x);
+ 
+       /* At this point, any valid address is accepted.  */
+-      if (memory_address_p (mode, x))
++      if (memory_address_addr_space_p (mode, x, as))
+ 	goto done;
+ 
+       /* If it was valid before but breaking out memory refs invalidated it,
+ 	 use it the old way.  */
+-      if (memory_address_p (mode, oldx))
++      if (memory_address_addr_space_p (mode, oldx, as))
+ 	{
+ 	  x = oldx;
+ 	  goto done;
+@@ -446,7 +452,12 @@
+ 	 in certain cases.  This is not necessary since the code
+ 	 below can handle all possible cases, but machine-dependent
+ 	 transformations can make better code.  */
+-      LEGITIMIZE_ADDRESS (x, oldx, mode, done);
++      {
++	rtx orig_x = x;
++	x = targetm.addr_space.legitimize_address (x, oldx, mode, as);
++	if (orig_x != x && memory_address_addr_space_p (mode, x, as))
++	  goto done;
++      }
+ 
+       /* PLUS and MULT can appear in special ways
+ 	 as the result of attempts to make an address usable for indexing.
+@@ -462,12 +473,12 @@
+ 	  rtx constant_term = const0_rtx;
+ 	  rtx y = eliminate_constant_term (x, &constant_term);
+ 	  if (constant_term == const0_rtx
+-	      || ! memory_address_p (mode, y))
++	      || ! memory_address_addr_space_p (mode, y, as))
+ 	    x = force_operand (x, NULL_RTX);
+ 	  else
+ 	    {
+ 	      y = gen_rtx_PLUS (GET_MODE (x), copy_to_reg (y), constant_term);
+-	      if (! memory_address_p (mode, y))
++	      if (! memory_address_addr_space_p (mode, y, as))
+ 		x = force_operand (x, NULL_RTX);
+ 	      else
+ 		x = y;
+@@ -485,12 +496,12 @@
+       /* Last resort: copy the value to a register, since
+ 	 the register is a valid address.  */
+       else
+-	x = force_reg (Pmode, x);
++	x = force_reg (address_mode, x);
+     }
+ 
+  done:
+ 
+-  gcc_assert (memory_address_p (mode, x));
++  gcc_assert (memory_address_addr_space_p (mode, x, as));
+   /* If we didn't change the address, we are done.  Otherwise, mark
+      a reg as a pointer if we have REG or REG + CONST_INT.  */
+   if (oldx == x)
+@@ -518,7 +529,8 @@
+   if (!MEM_P (ref))
+     return ref;
+   ref = use_anchored_address (ref);
+-  if (memory_address_p (GET_MODE (ref), XEXP (ref, 0)))
++  if (memory_address_addr_space_p (GET_MODE (ref), XEXP (ref, 0),
++				   MEM_ADDR_SPACE (ref)))
+     return ref;
+ 
+   /* Don't alter REF itself, since that is probably a stack slot.  */
+@@ -789,7 +801,8 @@
+ #ifdef POINTERS_EXTEND_UNSIGNED
+     case REFERENCE_TYPE:
+     case POINTER_TYPE:
+-      mode = Pmode;
++      mode = targetm.addr_space.address_mode
++	       (TYPE_ADDR_SPACE (TREE_TYPE (type)));
+       unsignedp = POINTERS_EXTEND_UNSIGNED;
+       break;
+ #endif
+Index: gcc/print-tree.c
+===================================================================
+--- a/src/gcc/print-tree.c	(.../gcc-4_4-branch)
++++ b/src/gcc/print-tree.c	(.../cell-4_4-branch)
+@@ -110,6 +110,8 @@
+ 	    fprintf (file, " %s",
+ 		     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (node))));
+ 	}
++      if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
++	fprintf (file, " address-space-%d", TYPE_ADDR_SPACE (node));
+     }
+   if (TREE_CODE (node) == IDENTIFIER_NODE)
+     fprintf (file, " %s", IDENTIFIER_POINTER (node));
+@@ -299,6 +301,9 @@
+   else if (TYPE_P (node) && TYPE_SIZES_GIMPLIFIED (node))
+     fputs (" sizes-gimplified", file);
+ 
++  if (TYPE_P (node) && !ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
++    fprintf (file, " address-space-%d", TYPE_ADDR_SPACE (node));
++
+   if (TREE_ADDRESSABLE (node))
+     fputs (" addressable", file);
+   if (TREE_THIS_VOLATILE (node))
+Index: gcc/varasm.c
+===================================================================
+--- a/src/gcc/varasm.c	(.../gcc-4_4-branch)
++++ b/src/gcc/varasm.c	(.../cell-4_4-branch)
+@@ -1156,11 +1156,17 @@
+ static section *
+ get_variable_section (tree decl, bool prefer_noswitch_p)
+ {
++  addr_space_t as = ADDR_SPACE_GENERIC;
+   int reloc;
+ 
+-  /* If the decl has been given an explicit section name, then it
+-     isn't common, and shouldn't be handled as such.  */
+-  if (DECL_COMMON (decl) && DECL_SECTION_NAME (decl) == NULL)
++  if (TREE_TYPE (decl) != error_mark_node)
++    as = TYPE_ADDR_SPACE (TREE_TYPE (decl));
++
++  /* If the decl has been given an explicit section name, or it resides
++     in a non-generic address space, then it isn't common, and shouldn't
++     be handled as such.  */
++  if (DECL_COMMON (decl) && DECL_SECTION_NAME (decl) == NULL
++      && ADDR_SPACE_GENERIC_P (as))
+     {
+       if (DECL_THREAD_LOCAL_P (decl))
+ 	return tls_comm_section;
+@@ -1184,7 +1190,8 @@
+   if (IN_NAMED_SECTION (decl))
+     return get_named_section (decl, NULL, reloc);
+ 
+-  if (!DECL_THREAD_LOCAL_P (decl)
++  if (ADDR_SPACE_GENERIC_P (as)
++      && !DECL_THREAD_LOCAL_P (decl)
+       && !(prefer_noswitch_p && targetm.have_switchable_bss_sections)
+       && bss_initializer_p (decl))
+     {
+@@ -1428,7 +1435,15 @@
+   if (use_object_blocks_p () && use_blocks_for_decl_p (decl))
+     x = create_block_symbol (name, get_block_for_decl (decl), -1);
+   else
+-    x = gen_rtx_SYMBOL_REF (Pmode, name);
++    {
++      enum machine_mode address_mode = Pmode;
++      if (TREE_TYPE (decl) != error_mark_node)
++	{
++	  addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (decl));
++	  address_mode = targetm.addr_space.address_mode (as);
++	}
++      x = gen_rtx_SYMBOL_REF (address_mode, name);
++    }
+   SYMBOL_REF_WEAK (x) = DECL_WEAK (decl);
+   SET_SYMBOL_REF_DECL (x, decl);
+ 
+@@ -4336,7 +4351,7 @@
+       if (cache && cache[0] == value)
+ 	return cache[1];
+       if (! INTEGRAL_TYPE_P (endtype)
+-	  || TYPE_PRECISION (endtype) >= POINTER_SIZE)
++	  || TYPE_PRECISION (endtype) >= TYPE_PRECISION (TREE_TYPE (value)))
+ 	{
+ 	  tree ncache[4] = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE };
+ 	  tree valid0
+@@ -4371,7 +4386,7 @@
+       if (cache && cache[0] == value)
+ 	return cache[1];
+       if (! INTEGRAL_TYPE_P (endtype)
+-	  || TYPE_PRECISION (endtype) >= POINTER_SIZE)
++	  || TYPE_PRECISION (endtype) >= TYPE_PRECISION (TREE_TYPE (value)))
+ 	{
+ 	  tree ncache[4] = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE };
+ 	  tree valid0
+@@ -4466,7 +4481,9 @@
+      resolving it.  */
+   if (TREE_CODE (exp) == NOP_EXPR
+       && POINTER_TYPE_P (TREE_TYPE (exp))
+-      && targetm.valid_pointer_mode (TYPE_MODE (TREE_TYPE (exp))))
++      && targetm.addr_space.valid_pointer_mode
++	   (TYPE_MODE (TREE_TYPE (exp)),
++	    TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)))))
+     {
+       tree saved_type = TREE_TYPE (exp);
+ 
+@@ -4474,7 +4491,9 @@
+ 	 pointer modes.  */
+       while (TREE_CODE (exp) == NOP_EXPR
+ 	     && POINTER_TYPE_P (TREE_TYPE (exp))
+-	     && targetm.valid_pointer_mode (TYPE_MODE (TREE_TYPE (exp))))
++	     && targetm.addr_space.valid_pointer_mode
++		  (TYPE_MODE (TREE_TYPE (exp)),
++		   TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)))))
+ 	exp = TREE_OPERAND (exp, 0);
+ 
+       /* If what we're left with is the address of something, we can
+@@ -6400,14 +6419,6 @@
+   return local_p;
+ }
+ 
+-/* Determine whether or not a pointer mode is valid. Assume defaults
+-   of ptr_mode or Pmode - can be overridden.  */
+-bool
+-default_valid_pointer_mode (enum machine_mode mode)
+-{
+-  return (mode == ptr_mode || mode == Pmode);
+-}
+-
+ /* Default function to output code that will globalize a label.  A
+    target must define GLOBAL_ASM_OP or provide its own function to
+    globalize a label.  */
+Index: gcc/sched-deps.c
+===================================================================
+--- a/src/gcc/sched-deps.c	(.../gcc-4_4-branch)
++++ b/src/gcc/sched-deps.c	(.../cell-4_4-branch)
+@@ -41,6 +41,7 @@
+ #include "sched-int.h"
+ #include "params.h"
+ #include "cselib.h"
++#include "target.h"
+ 
+ #ifdef INSN_SCHEDULING
+ 
+@@ -1907,8 +1908,11 @@
+ 
+       if (sched_deps_info->use_cselib)
+ 	{
++	  enum machine_mode address_mode
++	    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (dest));
++
+ 	  t = shallow_copy_rtx (dest);
+-	  cselib_lookup (XEXP (t, 0), Pmode, 1);
++	  cselib_lookup (XEXP (t, 0), address_mode, 1);
+ 	  XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0));
+ 	}
+       t = canon_rtx (t);
+@@ -2061,8 +2065,11 @@
+ 
+ 	if (sched_deps_info->use_cselib)
+ 	  {
++	    enum machine_mode address_mode
++	      = targetm.addr_space.address_mode (MEM_ADDR_SPACE (t));
++
+ 	    t = shallow_copy_rtx (t);
+-	    cselib_lookup (XEXP (t, 0), Pmode, 1);
++	    cselib_lookup (XEXP (t, 0), address_mode, 1);
+ 	    XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0));
+ 	  }
+ 	t = canon_rtx (t);
+Index: gcc/tree-ssa.c
+===================================================================
+--- a/src/gcc/tree-ssa.c	(.../gcc-4_4-branch)
++++ b/src/gcc/tree-ssa.c	(.../cell-4_4-branch)
+@@ -1075,6 +1075,11 @@
+   if (POINTER_TYPE_P (inner_type)
+       && POINTER_TYPE_P (outer_type))
+     {
++      /* Do not lose casts between pointers to different address spaces.  */
++      if (TYPE_ADDR_SPACE (TREE_TYPE (outer_type))
++	  != TYPE_ADDR_SPACE (TREE_TYPE (inner_type)))
++	return false;
++
+       /* Do not lose casts to restrict qualified pointers.  */
+       if ((TYPE_RESTRICT (outer_type)
+ 	   != TYPE_RESTRICT (inner_type))
+@@ -1235,8 +1240,15 @@
+   if (POINTER_TYPE_P (inner_type)
+       && POINTER_TYPE_P (outer_type)
+       && TREE_CODE (TREE_TYPE (outer_type)) == VOID_TYPE)
+-    return true;
++    {
++      /* Do not lose casts between pointers to different address spaces.  */
++      if (TYPE_ADDR_SPACE (TREE_TYPE (outer_type))
++	  != TYPE_ADDR_SPACE (TREE_TYPE (inner_type)))
++	return false;
+ 
++      return true;
++    }
++
+   return useless_type_conversion_p_1 (outer_type, inner_type);
+ }
+ 
+Index: gcc/target-def.h
+===================================================================
+--- a/src/gcc/target-def.h	(.../gcc-4_4-branch)
++++ b/src/gcc/target-def.h	(.../cell-4_4-branch)
+@@ -457,6 +457,48 @@
+ #define TARGET_VALID_POINTER_MODE default_valid_pointer_mode
+ #endif
+ 
++#ifndef TARGET_ADDR_SPACE_POINTER_MODE
++#define TARGET_ADDR_SPACE_POINTER_MODE default_addr_space_pointer_mode
++#endif
++
++#ifndef TARGET_ADDR_SPACE_ADDRESS_MODE
++#define TARGET_ADDR_SPACE_ADDRESS_MODE default_addr_space_address_mode
++#endif
++
++#ifndef TARGET_ADDR_SPACE_VALID_POINTER_MODE
++#define TARGET_ADDR_SPACE_VALID_POINTER_MODE \
++	default_addr_space_valid_pointer_mode
++#endif
++
++#ifndef TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P
++#define TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P \
++  default_addr_space_legitimate_address_p
++#endif
++
++#ifndef TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS
++#define TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS \
++  default_addr_space_legitimize_address
++#endif
++
++#ifndef TARGET_ADDR_SPACE_SUBSET_P
++#define TARGET_ADDR_SPACE_SUBSET_P default_addr_space_subset_p
++#endif
++
++#ifndef TARGET_ADDR_SPACE_CONVERT
++#define TARGET_ADDR_SPACE_CONVERT default_addr_space_convert
++#endif
++
++#define TARGET_ADDR_SPACE_HOOKS			\
++  {						\
++    TARGET_ADDR_SPACE_POINTER_MODE,		\
++    TARGET_ADDR_SPACE_ADDRESS_MODE,		\
++    TARGET_ADDR_SPACE_VALID_POINTER_MODE,	\
++    TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P,	\
++    TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS,	\
++    TARGET_ADDR_SPACE_SUBSET_P,			\
++    TARGET_ADDR_SPACE_CONVERT,			\
++  }
++
+ #ifndef TARGET_SCALAR_MODE_SUPPORTED_P
+ #define TARGET_SCALAR_MODE_SUPPORTED_P default_scalar_mode_supported_p
+ #endif
+@@ -879,6 +921,7 @@
+   TARGET_MIN_DIVISIONS_FOR_RECIP_MUL,		\
+   TARGET_MODE_REP_EXTENDED,			\
+   TARGET_VALID_POINTER_MODE,                    \
++  TARGET_ADDR_SPACE_HOOKS,			\
+   TARGET_SCALAR_MODE_SUPPORTED_P,		\
+   TARGET_VECTOR_MODE_SUPPORTED_P,               \
+   TARGET_VECTOR_OPAQUE_P,			\
+Index: gcc/rtl.c
+===================================================================
+--- a/src/gcc/rtl.c	(.../gcc-4_4-branch)
++++ b/src/gcc/rtl.c	(.../cell-4_4-branch)
+@@ -367,6 +367,14 @@
+   if (GET_MODE (x) != GET_MODE (y))
+     return 0;
+ 
++  /* MEMs refering to different address space are not equivalent.  */
++  if (code == MEM && MEM_ADDR_SPACE (x) != MEM_ADDR_SPACE (y))
++    return 0;
++
++  /* MEMs refering to different address space are not equivalent.  */
++  if (code == MEM && MEM_ADDR_SPACE (x) != MEM_ADDR_SPACE (y))
++    return 0;
++
+   /* Some RTL can be compared nonrecursively.  */
+   switch (code)
+     {
+Index: gcc/rtl.h
+===================================================================
+--- a/src/gcc/rtl.h	(.../gcc-4_4-branch)
++++ b/src/gcc/rtl.h	(.../cell-4_4-branch)
+@@ -146,6 +146,7 @@
+   rtx size;			/* Size in bytes, as a CONST_INT.  */
+   alias_set_type alias;		/* Memory alias set.  */
+   unsigned int align;		/* Alignment of MEM in bits.  */
++  unsigned char addrspace;	/* Address space (0 for generic).  */
+ } mem_attrs;
+ 
+ /* Structure used to describe the attributes of a REG in similar way as
+@@ -1075,7 +1076,7 @@
+ 
+ extern void init_rtlanal (void);
+ extern int rtx_cost (rtx, enum rtx_code, bool);
+-extern int address_cost (rtx, enum machine_mode, bool);
++extern int address_cost (rtx, enum machine_mode, addr_space_t, bool);
+ extern unsigned int subreg_lsb (const_rtx);
+ extern unsigned int subreg_lsb_1 (enum machine_mode, enum machine_mode,
+ 				  unsigned int);
+@@ -1209,6 +1210,10 @@
+    RTX that is always a CONST_INT.  */
+ #define MEM_OFFSET(RTX) (MEM_ATTRS (RTX) == 0 ? 0 : MEM_ATTRS (RTX)->offset)
+ 
++/* For a MEM rtx, the address space.  */
++#define MEM_ADDR_SPACE(RTX) (MEM_ATTRS (RTX) == 0 ? ADDR_SPACE_GENERIC \
++						  : MEM_ATTRS (RTX)->addrspace)
++
+ /* For a MEM rtx, the size in bytes of the MEM, if known, as an RTX that
+    is always a CONST_INT.  */
+ #define MEM_SIZE(RTX)							\
+@@ -1542,7 +1547,10 @@
+ 					    enum machine_mode);
+ extern int byte_lowpart_offset (enum machine_mode, enum machine_mode);
+ extern rtx make_safe_from (rtx, rtx);
+-extern rtx convert_memory_address (enum machine_mode, rtx);
++extern rtx convert_memory_address_addr_space (enum machine_mode, rtx,
++					      addr_space_t);
++#define convert_memory_address(to_mode,x) \
++	convert_memory_address_addr_space ((to_mode), (x), ADDR_SPACE_GENERIC)
+ extern rtx get_insns (void);
+ extern const char *get_insn_name (int);
+ extern rtx get_last_insn (void);
+Index: gcc/tree-inline.c
+===================================================================
+--- a/src/gcc/tree-inline.c	(.../gcc-4_4-branch)
++++ b/src/gcc/tree-inline.c	(.../cell-4_4-branch)
+@@ -2765,6 +2765,7 @@
+     case MINUS_EXPR:
+     case MULT_EXPR:
+ 
++    case ADDR_SPACE_CONVERT_EXPR:
+     case FIXED_CONVERT_EXPR:
+     case FIX_TRUNC_EXPR:
+ 
+Index: gcc/output.h
+===================================================================
+--- a/src/gcc/output.h	(.../gcc-4_4-branch)
++++ b/src/gcc/output.h	(.../cell-4_4-branch)
+@@ -618,7 +618,6 @@
+ extern void default_internal_label (FILE *, const char *, unsigned long);
+ extern void default_file_start (void);
+ extern void file_end_indicate_exec_stack (void);
+-extern bool default_valid_pointer_mode (enum machine_mode);
+ 
+ extern void default_elf_asm_output_external (FILE *file, tree,
+ 					     const char *);
+Index: gcc/combine.c
+===================================================================
+--- a/src/gcc/combine.c	(.../gcc-4_4-branch)
++++ b/src/gcc/combine.c	(.../cell-4_4-branch)
+@@ -3890,9 +3890,12 @@
+       if (GET_CODE (XEXP (x, 0)) == CONST
+ 	  || GET_CODE (XEXP (x, 0)) == SYMBOL_REF)
+ 	{
++	  enum machine_mode address_mode
++	    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (x));
++
+ 	  SUBST (XEXP (x, 0),
+-		 gen_rtx_LO_SUM (Pmode,
+-				 gen_rtx_HIGH (Pmode, XEXP (x, 0)),
++		 gen_rtx_LO_SUM (address_mode,
++				 gen_rtx_HIGH (address_mode, XEXP (x, 0)),
+ 				 XEXP (x, 0)));
+ 	  return &XEXP (XEXP (x, 0), 0);
+ 	}
+@@ -3905,7 +3908,8 @@
+ 	 it will not remain in the result.  */
+       if (GET_CODE (XEXP (x, 0)) == PLUS
+ 	  && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
+-	  && ! memory_address_p (GET_MODE (x), XEXP (x, 0)))
++	  && ! memory_address_addr_space_p (GET_MODE (x), XEXP (x, 0),
++					    MEM_ADDR_SPACE (x)))
+ 	{
+ 	  rtx reg = regno_reg_rtx[FIRST_PSEUDO_REGISTER];
+ 	  rtx seq = combine_split_insns (gen_rtx_SET (VOIDmode, reg,
+@@ -3928,8 +3932,9 @@
+ 	      && NONJUMP_INSN_P (NEXT_INSN (seq))
+ 	      && GET_CODE (PATTERN (NEXT_INSN (seq))) == SET
+ 	      && SET_DEST (PATTERN (NEXT_INSN (seq))) == reg
+-	      && memory_address_p (GET_MODE (x),
+-				   SET_SRC (PATTERN (NEXT_INSN (seq)))))
++	      && memory_address_addr_space_p
++		   (GET_MODE (x), SET_SRC (PATTERN (NEXT_INSN (seq))),
++		    MEM_ADDR_SPACE (x)))
+ 	    {
+ 	      rtx src1 = SET_SRC (PATTERN (seq));
+ 	      rtx src2 = SET_SRC (PATTERN (NEXT_INSN (seq)));
+@@ -3968,7 +3973,8 @@
+       /* If we have a PLUS whose first operand is complex, try computing it
+          separately by making a split there.  */
+       if (GET_CODE (XEXP (x, 0)) == PLUS
+-          && ! memory_address_p (GET_MODE (x), XEXP (x, 0))
++          && ! memory_address_addr_space_p (GET_MODE (x), XEXP (x, 0),
++					    MEM_ADDR_SPACE (x))
+           && ! OBJECT_P (XEXP (XEXP (x, 0), 0))
+           && ! (GET_CODE (XEXP (XEXP (x, 0), 0)) == SUBREG
+                 && OBJECT_P (SUBREG_REG (XEXP (XEXP (x, 0), 0)))))
+Index: gcc/c-common.c
+===================================================================
+--- a/src/gcc/c-common.c	(.../gcc-4_4-branch)
++++ b/src/gcc/c-common.c	(.../cell-4_4-branch)
+@@ -750,6 +750,11 @@
+   { "inout",		RID_INOUT,		D_OBJC },
+   { "oneway",		RID_ONEWAY,		D_OBJC },
+   { "out",		RID_OUT,		D_OBJC },
++
++#ifdef TARGET_ADDR_SPACE_KEYWORDS
++  /* Any address space keywords recognized by the target.  */
++  TARGET_ADDR_SPACE_KEYWORDS,
++#endif
+ };
+ 
+ const unsigned int num_c_common_reswords =
+@@ -878,6 +883,19 @@
+   { NULL,                     0, 0, false, false, false, NULL }
+ };
+ 
++/* Return identifier for address space AS.  */
++const char *
++c_addr_space_name (addr_space_t as)
++{
++  unsigned int i;
++
++  for (i = 0; i < num_c_common_reswords; i++)
++    if (c_common_reswords[i].rid == RID_FIRST_ADDR_SPACE + as)
++      return c_common_reswords[i].word;
++
++  gcc_unreachable ();
++}
++
+ /* Push current bindings for the function name VAR_DECLS.  */
+ 
+ void
+@@ -5777,9 +5795,10 @@
+ 
+       if (POINTER_TYPE_P (type))
+ 	{
++	  addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (type));
+ 	  tree (*fn)(tree, enum machine_mode, bool);
+ 
+-	  if (!targetm.valid_pointer_mode (mode))
++	  if (!targetm.addr_space.valid_pointer_mode (mode, as))
+ 	    {
+ 	      error ("invalid pointer mode %qs", p);
+ 	      return NULL_TREE;
+@@ -7808,7 +7827,7 @@
+   if (quals == 0)
+     unqual_elt = elt;
+   else
+-    unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
++    unqual_elt = c_build_qualified_type (elt, KEEP_QUAL_ADDR_SPACE (quals));
+ 
+   /* Using build_distinct_type_copy and modifying things afterward instead
+      of using build_array_type to create a new type preserves all of the
+Index: gcc/tree-flow.h
+===================================================================
+--- a/src/gcc/tree-flow.h	(.../gcc-4_4-branch)
++++ b/src/gcc/tree-flow.h	(.../cell-4_4-branch)
+@@ -1133,7 +1133,8 @@
+ /* In tree-ssa-loop-ivopts.c  */
+ bool expr_invariant_in_loop_p (struct loop *, tree);
+ bool stmt_invariant_in_loop_p (struct loop *, gimple);
+-bool multiplier_allowed_in_address_p (HOST_WIDE_INT, enum machine_mode);
++bool multiplier_allowed_in_address_p (HOST_WIDE_INT, enum machine_mode,
++				      addr_space_t);
+ unsigned multiply_by_cost (HOST_WIDE_INT, enum machine_mode, bool);
+ 
+ /* In tree-ssa-threadupdate.c.  */
+@@ -1166,8 +1167,8 @@
+ 
+ struct affine_tree_combination;
+ tree create_mem_ref (gimple_stmt_iterator *, tree, 
+-		     struct affine_tree_combination *, bool);
+-rtx addr_for_mem_ref (struct mem_address *, bool);
++		     struct affine_tree_combination *, tree, bool);
++rtx addr_for_mem_ref (struct mem_address *, addr_space_t, bool);
+ void get_address_description (tree, struct mem_address *);
+ tree maybe_fold_tmr (tree);
+ 
+Index: gcc/c-common.h
+===================================================================
+--- a/src/gcc/c-common.h	(.../gcc-4_4-branch)
++++ b/src/gcc/c-common.h	(.../cell-4_4-branch)
+@@ -119,6 +119,30 @@
+   RID_AT_INTERFACE,
+   RID_AT_IMPLEMENTATION,
+ 
++  /* Named address support, mapping the keyword to a particular named address
++     number.  Named address space 0 is reserved for the generic address.  If
++     there are more than 254 named addresses, the addr_space_t type will need
++     to be grown from an unsigned char to unsigned short.  */
++  RID_ADDR_SPACE_0,		/* generic address */
++  RID_ADDR_SPACE_1,
++  RID_ADDR_SPACE_2,
++  RID_ADDR_SPACE_3,
++  RID_ADDR_SPACE_4,
++  RID_ADDR_SPACE_5,
++  RID_ADDR_SPACE_6,
++  RID_ADDR_SPACE_7,
++  RID_ADDR_SPACE_8,
++  RID_ADDR_SPACE_9,
++  RID_ADDR_SPACE_10,
++  RID_ADDR_SPACE_11,
++  RID_ADDR_SPACE_12,
++  RID_ADDR_SPACE_13,
++  RID_ADDR_SPACE_14,
++  RID_ADDR_SPACE_15,
++
++  RID_FIRST_ADDR_SPACE = RID_ADDR_SPACE_0,
++  RID_LAST_ADDR_SPACE = RID_ADDR_SPACE_15,
++
+   RID_MAX,
+ 
+   RID_FIRST_MODIFIER = RID_STATIC,
+@@ -228,6 +252,10 @@
+ #define D_CXX_OBJC	0x100	/* In Objective C, and C++, but not C.  */
+ #define D_CXXWARN	0x200	/* In C warn with -Wcxx-compat.  */
+ 
++/* Macro for backends to define named address keywords.  */
++#define ADDR_SPACE_KEYWORD(STRING, VALUE) \
++  { STRING, RID_FIRST_ADDR_SPACE + (VALUE), D_CONLY | D_EXT }
++
+ /* The reserved keyword table.  */
+ extern const struct c_common_resword c_common_reswords[];
+ 
+@@ -685,6 +713,7 @@
+ 
+ extern tree (*make_fname_decl) (tree, int);
+ 
++extern const char *c_addr_space_name (addr_space_t as);
+ extern tree identifier_global_value (tree);
+ extern void record_builtin_type (enum rid, const char *, tree);
+ extern tree build_void_list_node (void);
+Index: gcc/config.gcc
+===================================================================
+--- a/src/gcc/config.gcc	(.../gcc-4_4-branch)
++++ b/src/gcc/config.gcc	(.../cell-4_4-branch)
+@@ -2316,7 +2316,7 @@
+ spu-*-elf*)
+ 	tm_file="dbxelf.h elfos.h spu/spu-elf.h spu/spu.h"
+ 	tmake_file="spu/t-spu-elf"
+-	extra_headers="spu_intrinsics.h spu_internals.h vmx2spu.h spu_mfcio.h vec_types.h"
++	extra_headers="spu_intrinsics.h spu_internals.h vmx2spu.h spu_mfcio.h vec_types.h spu_cache.h"
+ 	extra_modes=spu/spu-modes.def
+ 	c_target_objs="${c_target_objs} spu-c.o"
+ 	cxx_target_objs="${cxx_target_objs} spu-c.o"
+Index: gcc/Makefile.in
+===================================================================
+--- a/src/gcc/Makefile.in	(.../gcc-4_4-branch)
++++ b/src/gcc/Makefile.in	(.../cell-4_4-branch)
+@@ -2249,7 +2249,7 @@
+    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) \
+    output.h $(DIAGNOSTIC_H) $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
+    tree-pass.h $(FLAGS_H) $(TREE_INLINE_H) $(RECOG_H) insn-config.h $(EXPR_H) \
+-   gt-tree-ssa-address.h $(GGC_H) tree-affine.h
++   gt-tree-ssa-address.h $(GGC_H) tree-affine.h $(TARGET_H)
+ tree-ssa-loop-niter.o : tree-ssa-loop-niter.c $(TREE_FLOW_H) $(CONFIG_H) \
+    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(CFGLOOP_H) $(PARAMS_H) \
+    $(TREE_INLINE_H) output.h $(DIAGNOSTIC_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
+@@ -2563,7 +2563,7 @@
+    $(TREE_H) $(FLAGS_H) $(FUNCTION_H) $(REGS_H) insn-config.h $(RECOG_H) \
+    $(GGC_H) $(EXPR_H) hard-reg-set.h $(BITMAP_H) $(TOPLEV_H) $(BASIC_BLOCK_H) \
+    $(HASHTAB_H) $(TM_P_H) debug.h langhooks.h tree-pass.h gt-emit-rtl.h \
+-   $(REAL_H) $(DF_H)
++   $(REAL_H) $(DF_H) $(TARGET_H)
+ real.o : real.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
+    $(TOPLEV_H) $(TM_P_H) $(REAL_H) dfp.h
+ dfp.o : dfp.c dfp.h $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)	$(TREE_H) \
+@@ -2771,7 +2771,7 @@
+ auto-inc-dec.o : auto-inc-dec.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+    $(TREE_H) $(RTL_H) $(TM_P_H) hard-reg-set.h $(BASIC_BLOCK_H) insn-config.h \
+    $(REGS_H) $(FLAGS_H) output.h $(FUNCTION_H) except.h $(TOPLEV_H) $(RECOG_H) \
+-   $(EXPR_H) $(TIMEVAR_H) tree-pass.h $(DF_H) $(DBGCNT_H)
++   $(EXPR_H) $(TIMEVAR_H) tree-pass.h $(DF_H) $(DBGCNT_H) $(TARGET_H)
+ cfg.o : cfg.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(FLAGS_H) \
+    $(REGS_H) hard-reg-set.h output.h $(TOPLEV_H) $(FUNCTION_H) except.h $(GGC_H) \
+    $(TM_P_H) $(TIMEVAR_H) $(OBSTACK_H) $(TREE_H) alloc-pool.h \
+@@ -2952,7 +2952,7 @@
+ sched-deps.o : sched-deps.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+    $(RTL_H) $(SCHED_INT_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \
+    $(FUNCTION_H) $(INSN_ATTR_H) $(TOPLEV_H) $(RECOG_H) except.h cselib.h \
+-   $(PARAMS_H) $(TM_P_H)
++   $(PARAMS_H) $(TM_P_H) $(TARGET_H)
+ sched-rgn.o : sched-rgn.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+    $(RTL_H) $(SCHED_INT_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \
+    $(FUNCTION_H) $(INSN_ATTR_H) $(TOPLEV_H) $(RECOG_H) except.h $(PARAMS_H) \
+Index: gcc/tree-cfg.c
+===================================================================
+--- a/src/gcc/tree-cfg.c	(.../gcc-4_4-branch)
++++ b/src/gcc/tree-cfg.c	(.../cell-4_4-branch)
+@@ -3364,6 +3364,21 @@
+ 	return false;
+       }
+ 
++    case ADDR_SPACE_CONVERT_EXPR:
++      {
++	if (!POINTER_TYPE_P (rhs1_type) || !POINTER_TYPE_P (lhs_type)
++	    || (TYPE_ADDR_SPACE (TREE_TYPE (rhs1_type))
++		== TYPE_ADDR_SPACE (TREE_TYPE (lhs_type))))
++	  {
++	    error ("invalid types in address space conversion");
++	    debug_generic_expr (lhs_type);
++	    debug_generic_expr (rhs1_type);
++	    return true;
++	  }
++
++	return false;
++      }
++
+     case FIXED_CONVERT_EXPR:
+       {
+ 	if (!valid_fixed_convert_types_p (lhs_type, rhs1_type)
+Index: gcc/c-parser.c
+===================================================================
+--- a/src/gcc/c-parser.c	(.../gcc-4_4-branch)
++++ b/src/gcc/c-parser.c	(.../cell-4_4-branch)
+@@ -70,6 +70,10 @@
+   tree id;
+   int mask = 0;
+ 
++  /* Make sure RID_MAX hasn't grown past the 8 bits used to hold the keyword in
++     the c_token structure.  */
++  gcc_assert (RID_MAX <= 255);
++
+   mask |= D_CXXONLY;
+   if (!flag_isoc99)
+     mask |= D_C99;
+@@ -130,6 +134,8 @@
+   C_ID_TYPENAME,
+   /* An identifier declared as an Objective-C class name.  */
+   C_ID_CLASSNAME,
++  /* An address space identifier.  */
++  C_ID_ADDRSPACE,
+   /* Not an identifier.  */
+   C_ID_NONE
+ } c_id_kind;
+@@ -226,6 +232,13 @@
+ 			    "identifier %qs conflicts with C++ keyword",
+ 			    IDENTIFIER_POINTER (token->value));
+ 	      }
++	    else if (rid_code >= RID_FIRST_ADDR_SPACE
++		     && rid_code <= RID_LAST_ADDR_SPACE)
++	      {
++		token->id_kind = C_ID_ADDRSPACE;
++		token->keyword = rid_code;
++		break;
++	      }
+ 	    else if (c_dialect_objc ())
+ 	      {
+ 		if (!objc_is_reserved_word (token->value)
+@@ -352,6 +365,8 @@
+ 	{
+ 	case C_ID_ID:
+ 	  return false;
++	case C_ID_ADDRSPACE:
++	  return true;
+ 	case C_ID_TYPENAME:
+ 	  return true;
+ 	case C_ID_CLASSNAME:
+@@ -422,6 +437,8 @@
+ 	{
+ 	case C_ID_ID:
+ 	  return false;
++	case C_ID_ADDRSPACE:
++	  return true;
+ 	case C_ID_TYPENAME:
+ 	  return true;
+ 	case C_ID_CLASSNAME:
+@@ -1391,6 +1408,7 @@
+      const
+      restrict
+      volatile
++     address-space-qualifier
+ 
+    (restrict is new in C99.)
+ 
+@@ -1399,6 +1417,12 @@
+    declaration-specifiers:
+      attributes declaration-specifiers[opt]
+ 
++   type-qualifier:
++     address-space
++
++   address-space:
++     identifier recognized by the target
++
+    storage-class-specifier:
+      __thread
+ 
+@@ -1438,6 +1462,17 @@
+ 	{
+ 	  tree value = c_parser_peek_token (parser)->value;
+ 	  c_id_kind kind = c_parser_peek_token (parser)->id_kind;
++
++	  if (kind == C_ID_ADDRSPACE)
++	    {
++	      addr_space_t as
++		= c_parser_peek_token (parser)->keyword - RID_FIRST_ADDR_SPACE;
++	      declspecs_add_addrspace (specs, as);
++	      c_parser_consume_token (parser);
++	      attrs_ok = true;
++	      continue;
++	    }
++
+ 	  /* This finishes the specifiers unless a type name is OK, it
+ 	     is declared as a type name and a type name hasn't yet
+ 	     been seen.  */
+@@ -5549,6 +5584,14 @@
+   finish_init ();
+   maybe_warn_string_init (type, init);
+ 
++  if (type != error_mark_node
++      && !ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (type))
++      && current_function_decl)
++    {
++      error ("compound literal qualified by address-space qualifier");
++      type = error_mark_node;
++    }
++
+   if (!flag_isoc99)
+     pedwarn (start_loc, OPT_pedantic, "ISO C90 forbids compound literals");
+   expr.value = build_compound_literal (type, init.value);
+Index: gcc/config/spu/spu_cache.h
+===================================================================
+--- a/src/gcc/config/spu/spu_cache.h	(.../gcc-4_4-branch)
++++ b/src/gcc/config/spu/spu_cache.h	(.../cell-4_4-branch)
+@@ -0,0 +1,39 @@
++/* Copyright (C) 2008, 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   Under Section 7 of GPL version 3, you are granted additional
++   permissions described in the GCC Runtime Library Exception, version
++   3.1, as published by the Free Software Foundation.
++
++   You should have received a copy of the GNU General Public License and
++   a copy of the GCC Runtime Library Exception along with this program;
++   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#ifndef _SPU_CACHE_H
++#define _SPU_CACHE_H
++
++void *__cache_fetch_dirty (__ea void *ea, int n_bytes_dirty);
++void *__cache_fetch (__ea void *ea);
++void __cache_evict (__ea void *ea);
++void __cache_flush (void);
++void __cache_touch (__ea void *ea);
++
++#define cache_fetch_dirty(_ea, _n_bytes_dirty) \
++     __cache_fetch_dirty(_ea, _n_bytes_dirty)
++
++#define cache_fetch(_ea) __cache_fetch(_ea)
++#define cache_touch(_ea) __cache_touch(_ea)
++#define cache_evict(_ea) __cache_evict(_ea)
++#define cache_flush() __cache_flush()
++
++#endif
+Index: gcc/config/spu/spu-protos.h
+===================================================================
+--- a/src/gcc/config/spu/spu-protos.h	(.../gcc-4_4-branch)
++++ b/src/gcc/config/spu/spu-protos.h	(.../cell-4_4-branch)
+@@ -90,6 +90,7 @@
+ extern void spu_expand_vector_init (rtx target, rtx vals);
+ extern void spu_init_expanders (void);
+ extern void spu_split_convert (rtx *);
++extern void spu_function_profiler (FILE *, int);
+ 
+ /* spu-c.c */
+ extern tree spu_resolve_overloaded_builtin (tree fndecl, tree fnargs);
+Index: gcc/config/spu/cachemgr.c
+===================================================================
+--- a/src/gcc/config/spu/cachemgr.c	(.../gcc-4_4-branch)
++++ b/src/gcc/config/spu/cachemgr.c	(.../cell-4_4-branch)
+@@ -0,0 +1,438 @@
++/* Copyright (C) 2008, 2009 Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 3, or (at your option) any later
++version.
++
++GCC is distributed in the hope that it will be useful, but WITHOUT ANY
++WARRANTY; without even the implied warranty of MERCHANTABILITY or
++FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++for more details.
++
++Under Section 7 of GPL version 3, you are granted additional
++permissions described in the GCC Runtime Library Exception, version
++3.1, as published by the Free Software Foundation.
++
++You should have received a copy of the GNU General Public License and
++a copy of the GCC Runtime Library Exception along with this program;
++see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
++<http://www.gnu.org/licenses/>.  */
++
++#include <spu_mfcio.h>
++#include <spu_internals.h>
++#include <spu_intrinsics.h>
++#include <spu_cache.h>
++
++extern unsigned long long __ea_local_store;
++extern char __cache_tag_array_size;
++
++#define LINE_SIZE 128
++#define TAG_MASK (LINE_SIZE - 1)
++
++#define WAYS 4
++#define SET_MASK ((int) &__cache_tag_array_size - LINE_SIZE)
++
++#define CACHE_LINES ((int) &__cache_tag_array_size /		\
++		     sizeof (struct __cache_tag_array) * WAYS)
++
++struct __cache_tag_array
++{
++  unsigned int tag_lo[WAYS];
++  unsigned int tag_hi[WAYS];
++  void *base[WAYS];
++  int reserved[WAYS];
++  vector unsigned short dirty_bits[WAYS];
++};
++
++extern struct __cache_tag_array __cache_tag_array[];
++extern char __cache[];
++
++/* In order to make the code seem a little cleaner, and to avoid having
++   64/32 bit ifdefs all over the place, we use macros.  */
++
++#ifdef __EA64__
++typedef unsigned long long addr;
++
++#define CHECK_TAG(_entry, _way, _tag)			\
++  ((_entry)->tag_lo[(_way)] == ((_tag) & 0xFFFFFFFF)	\
++   && (_entry)->tag_hi[(_way)] == ((_tag) >> 32))
++
++#define GET_TAG(_entry, _way) \
++  ((unsigned long long)(_entry)->tag_hi[(_way)] << 32	\
++   | (unsigned long long)(_entry)->tag_lo[(_way)])
++
++#define SET_TAG(_entry, _way, _tag)			\
++  (_entry)->tag_lo[(_way)] = (_tag) & 0xFFFFFFFF;	\
++  (_entry)->tag_hi[(_way)] = (_tag) >> 32
++
++#else /*__EA32__*/
++typedef unsigned long addr;
++
++#define CHECK_TAG(_entry, _way, _tag)			\
++  ((_entry)->tag_lo[(_way)] == (_tag))
++
++#define GET_TAG(_entry, _way)				\
++  ((_entry)->tag_lo[(_way)])
++
++#define SET_TAG(_entry, _way, _tag)			\
++  (_entry)->tag_lo[(_way)] = (_tag)
++
++#endif
++
++/* In GET_ENTRY, we cast away the high 32 bits,
++   as the tag is only in the low 32.  */
++
++#define GET_ENTRY(_addr)						   \
++  ((struct __cache_tag_array *)						   \
++   si_to_uint (si_a (si_and (si_from_uint ((unsigned int) (addr) (_addr)), \
++			     si_from_uint (SET_MASK)),			   \
++	       si_from_uint ((unsigned int) __cache_tag_array))))
++
++#define GET_CACHE_LINE(_addr, _way) \
++  ((void *) (__cache + ((_addr) & SET_MASK) * WAYS) + ((_way) * LINE_SIZE));
++
++#define CHECK_DIRTY(_vec) (si_to_uint (si_orx ((qword) (_vec))))
++#define SET_EMPTY(_entry, _way) ((_entry)->tag_lo[(_way)] = 1)
++#define CHECK_EMPTY(_entry, _way) ((_entry)->tag_lo[(_way)] == 1)
++
++#define LS_FLAG 0x80000000
++#define SET_IS_LS(_entry, _way) ((_entry)->reserved[(_way)] |= LS_FLAG)
++#define CHECK_IS_LS(_entry, _way) ((_entry)->reserved[(_way)] & LS_FLAG)
++#define GET_LRU(_entry, _way) ((_entry)->reserved[(_way)] & ~LS_FLAG)
++
++static int dma_tag = 32;
++
++static void
++__cache_evict_entry (struct __cache_tag_array *entry, int way)
++{
++  addr tag = GET_TAG (entry, way);
++
++  if (CHECK_DIRTY (entry->dirty_bits[way]) && !CHECK_IS_LS (entry, way))
++    {
++#ifdef NONATOMIC
++      /* Non-atomic writes.  */
++      unsigned int oldmask, mach_stat;
++      char *line = ((void *) 0);
++
++      /* Enter critical section.  */
++      mach_stat = spu_readch (SPU_RdMachStat);
++      spu_idisable ();
++
++      /* Issue DMA request.  */
++      line = GET_CACHE_LINE (entry->tag_lo[way], way);
++      mfc_put (line, tag, LINE_SIZE, dma_tag, 0, 0);
++
++      /* Wait for DMA completion.  */
++      oldmask = mfc_read_tag_mask ();
++      mfc_write_tag_mask (1 << dma_tag);
++      mfc_read_tag_status_all ();
++      mfc_write_tag_mask (oldmask);
++
++      /* Leave critical section.  */
++      if (__builtin_expect (mach_stat & 1, 0))
++	spu_ienable ();
++#else
++      /* Allocate a buffer large enough that we know it has 128 bytes
++         that are 128 byte aligned (for DMA). */
++
++      char buffer[LINE_SIZE + 127];
++      qword *buf_ptr = (qword *) (((unsigned int) (buffer) + 127) & ~127);
++      qword *line = GET_CACHE_LINE (entry->tag_lo[way], way);
++      qword bits;
++      unsigned int mach_stat;
++
++      /* Enter critical section.  */
++      mach_stat = spu_readch (SPU_RdMachStat);
++      spu_idisable ();
++
++      do
++	{
++	  /* We atomically read the current memory into a buffer
++	     modify the dirty bytes in the buffer, and write it
++	     back. If writeback fails, loop and try again.  */
++
++	  mfc_getllar (buf_ptr, tag, 0, 0);
++	  mfc_read_atomic_status ();
++
++	  /* The method we're using to write 16 dirty bytes into
++	     the buffer at a time uses fsmb which in turn uses
++	     the least significant 16 bits of word 0, so we
++	     load the bits and rotate so that the first bit of
++	     the bitmap is in the first bit that fsmb will use.  */
++
++	  bits = (qword) entry->dirty_bits[way];
++	  bits = si_rotqbyi (bits, -2);
++
++	  /* Si_fsmb creates the mask of dirty bytes.
++	     Use selb to nab the appropriate bits.  */
++	  buf_ptr[0] = si_selb (buf_ptr[0], line[0], si_fsmb (bits));
++
++	  /* Rotate to next 16 byte section of cache.  */
++	  bits = si_rotqbyi (bits, 2);
++
++	  buf_ptr[1] = si_selb (buf_ptr[1], line[1], si_fsmb (bits));
++	  bits = si_rotqbyi (bits, 2);
++	  buf_ptr[2] = si_selb (buf_ptr[2], line[2], si_fsmb (bits));
++	  bits = si_rotqbyi (bits, 2);
++	  buf_ptr[3] = si_selb (buf_ptr[3], line[3], si_fsmb (bits));
++	  bits = si_rotqbyi (bits, 2);
++	  buf_ptr[4] = si_selb (buf_ptr[4], line[4], si_fsmb (bits));
++	  bits = si_rotqbyi (bits, 2);
++	  buf_ptr[5] = si_selb (buf_ptr[5], line[5], si_fsmb (bits));
++	  bits = si_rotqbyi (bits, 2);
++	  buf_ptr[6] = si_selb (buf_ptr[6], line[6], si_fsmb (bits));
++	  bits = si_rotqbyi (bits, 2);
++	  buf_ptr[7] = si_selb (buf_ptr[7], line[7], si_fsmb (bits));
++	  bits = si_rotqbyi (bits, 2);
++
++	  mfc_putllc (buf_ptr, tag, 0, 0);
++	}
++      while (mfc_read_atomic_status ());
++
++      /* Leave critical section.  */
++      if (__builtin_expect (mach_stat & 1, 0))
++	spu_ienable ();
++#endif
++    }
++
++  /* In any case, marking the lo tag with 1 which denotes empty.  */
++  SET_EMPTY (entry, way);
++  entry->dirty_bits[way] = (vector unsigned short) si_from_uint (0);
++}
++
++void
++__cache_evict (__ea void *ea)
++{
++  addr tag = (addr) ea & ~TAG_MASK;
++  struct __cache_tag_array *entry = GET_ENTRY (ea);
++  int i = 0;
++
++  /* Cycles through all the possible ways an address could be at
++     and evicts the way if found.  */
++
++  for (i = 0; i < WAYS; i++)
++    if (CHECK_TAG (entry, i, tag))
++      __cache_evict_entry (entry, i);
++}
++
++static void *
++__cache_fill (int way, addr tag)
++{
++  unsigned int oldmask, mach_stat;
++  char *line = ((void *) 0);
++
++  /* Reserve our DMA tag.  */
++  if (dma_tag == 32)
++    dma_tag = mfc_tag_reserve ();
++
++  /* Enter critical section.  */
++  mach_stat = spu_readch (SPU_RdMachStat);
++  spu_idisable ();
++
++  /* Issue DMA request.  */
++  line = GET_CACHE_LINE (tag, way);
++  mfc_get (line, tag, LINE_SIZE, dma_tag, 0, 0);
++
++  /* Wait for DMA completion.  */
++  oldmask = mfc_read_tag_mask ();
++  mfc_write_tag_mask (1 << dma_tag);
++  mfc_read_tag_status_all ();
++  mfc_write_tag_mask (oldmask);
++
++  /* Leave critical section.  */
++  if (__builtin_expect (mach_stat & 1, 0))
++    spu_ienable ();
++
++  return (void *) line;
++}
++
++static void
++__cache_miss (__ea void *ea, struct __cache_tag_array *entry, int way)
++{
++
++  addr tag = (addr) ea & ~TAG_MASK;
++  unsigned int lru = 0;
++  int i = 0;
++  int idx = 0;
++
++  /* If way > 4, then there are no empty slots, so we must evict
++     the least recently used entry. */
++  if (way >= 4)
++    {
++      for (i = 0; i < WAYS; i++)
++	{
++	  if (GET_LRU (entry, i) > lru)
++	    {
++	      lru = GET_LRU (entry, i);
++	      idx = i;
++	    }
++	}
++      __cache_evict_entry (entry, idx);
++      way = idx;
++    }
++
++  /* Set the empty entry's tag and fill it's cache line. */
++
++  SET_TAG (entry, way, tag);
++  entry->reserved[way] = 0;
++
++  /* Check if the address is just an effective address within the
++     SPU's local store. */
++
++  /* Because the LS is not 256k aligned, we can't do a nice and mask
++     here to compare, so we must check the whole range.  */
++
++  if ((addr) ea >= (addr) __ea_local_store
++      && (addr) ea < (addr) (__ea_local_store + 0x40000))
++    {
++      SET_IS_LS (entry, way);
++      entry->base[way] =
++	(void *) ((unsigned int) ((addr) ea -
++				  (addr) __ea_local_store) & ~0x7f);
++    }
++  else
++    {
++      entry->base[way] = __cache_fill (way, tag);
++    }
++}
++
++void *
++__cache_fetch_dirty (__ea void *ea, int n_bytes_dirty)
++{
++#ifdef __EA64__
++  unsigned int tag_hi;
++  qword etag_hi;
++#endif
++  unsigned int tag_lo;
++  struct __cache_tag_array *entry;
++
++  qword etag_lo;
++  qword equal;
++  qword bit_mask;
++  qword way;
++
++  /* This first chunk, we merely fill the pointer and tag.  */
++
++  entry = GET_ENTRY (ea);
++
++#ifndef __EA64__
++  tag_lo =
++    si_to_uint (si_andc
++		(si_shufb
++		 (si_from_uint ((addr) ea), si_from_uint (0),
++		  si_from_uint (0x00010203)), si_from_uint (TAG_MASK)));
++#else
++  tag_lo =
++    si_to_uint (si_andc
++		(si_shufb
++		 (si_from_ullong ((addr) ea), si_from_uint (0),
++		  si_from_uint (0x04050607)), si_from_uint (TAG_MASK)));
++
++  tag_hi =
++    si_to_uint (si_shufb
++		(si_from_ullong ((addr) ea), si_from_uint (0),
++		 si_from_uint (0x00010203)));
++#endif
++
++  /* Increment LRU in reserved bytes.  */
++  si_stqd (si_ai (si_lqd (si_from_ptr (entry), 48), 1),
++	   si_from_ptr (entry), 48);
++
++missreturn:
++  /* Check if the entry's lo_tag is equal to the address' lo_tag.  */
++  etag_lo = si_lqd (si_from_ptr (entry), 0);
++  equal = si_ceq (etag_lo, si_from_uint (tag_lo));
++#ifdef __EA64__
++  /* And the high tag too.  */
++  etag_hi = si_lqd (si_from_ptr (entry), 16);
++  equal = si_and (equal, (si_ceq (etag_hi, si_from_uint (tag_hi))));
++#endif
++
++  if ((si_to_uint (si_orx (equal)) == 0))
++    goto misshandler;
++
++  if (n_bytes_dirty)
++    {
++      /* way = 0x40,0x50,0x60,0x70 for each way, which is also the
++         offset of the appropriate dirty bits.  */
++      way = si_shli (si_clz (si_gbb (equal)), 2);
++
++      /* To create the bit_mask, we set it to all 1s (uint -1), then we
++         shift it over (128 - n_bytes_dirty) times.  */
++
++      bit_mask = si_from_uint (-1);
++
++      bit_mask =
++	si_shlqby (bit_mask, si_from_uint ((LINE_SIZE - n_bytes_dirty) / 8));
++
++      bit_mask =
++	si_shlqbi (bit_mask, si_from_uint ((LINE_SIZE - n_bytes_dirty) % 8));
++
++      /* Rotate it around to the correct offset.  */
++      bit_mask =
++	si_rotqby (bit_mask,
++		   si_from_uint (-1 * ((addr) ea & TAG_MASK) / 8));
++
++      bit_mask =
++	si_rotqbi (bit_mask,
++		   si_from_uint (-1 * ((addr) ea & TAG_MASK) % 8));
++
++      /* Update the dirty bits.  */
++      si_stqx (si_or (si_lqx (si_from_ptr (entry), way), bit_mask),
++	       si_from_ptr (entry), way);
++    };
++
++  /* We've definitely found the right entry, set LRU (reserved) to 0
++     maintaining the LS flag (MSB).  */
++
++  si_stqd (si_andc
++	   (si_lqd (si_from_ptr (entry), 48),
++	    si_and (equal, si_from_uint (~(LS_FLAG)))),
++	   si_from_ptr (entry), 48);
++
++  return (void *)
++    si_to_uint (si_a
++		(si_orx
++		 (si_and (si_lqd (si_from_ptr (entry), 32), equal)),
++		 si_from_uint (((unsigned int) (addr) ea) & TAG_MASK)));
++
++misshandler:
++  equal = si_ceqi (etag_lo, 1);
++  __cache_miss (ea, entry, (si_to_uint (si_clz (si_gbb (equal))) - 16) >> 2);
++  goto missreturn;
++}
++
++void *
++__cache_fetch (__ea void *ea)
++{
++  return __cache_fetch_dirty (ea, 0);
++}
++
++void
++__cache_touch (__ea void *ea __attribute__ ((unused)))
++{
++  /* NO-OP for now.  */
++}
++
++void __cache_flush (void) __attribute__ ((destructor));
++void
++__cache_flush (void)
++{
++  struct __cache_tag_array *entry = __cache_tag_array;
++  unsigned int i;
++  int j;
++
++  /* Cycle through each cache entry and evict all used ways.  */
++
++  for (i = 0; i < CACHE_LINES / WAYS; i++)
++    {
++      for (j = 0; j < WAYS; j++)
++	if (!CHECK_EMPTY (entry, j))
++	  __cache_evict_entry (entry, j);
++
++      entry++;
++    }
++}
+Index: gcc/config/spu/cache.S
+===================================================================
+--- a/src/gcc/config/spu/cache.S	(.../gcc-4_4-branch)
++++ b/src/gcc/config/spu/cache.S	(.../cell-4_4-branch)
+@@ -0,0 +1,43 @@
++/* Copyright (C) 2008, 2009 Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 3, or (at your option) any later
++version.
++
++GCC is distributed in the hope that it will be useful, but WITHOUT ANY
++WARRANTY; without even the implied warranty of MERCHANTABILITY or
++FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++for more details.
++
++Under Section 7 of GPL version 3, you are granted additional
++permissions described in the GCC Runtime Library Exception, version
++3.1, as published by the Free Software Foundation.
++
++You should have received a copy of the GNU General Public License and
++a copy of the GCC Runtime Library Exception along with this program;
++see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
++<http://www.gnu.org/licenses/>.  */
++
++	.data
++	.p2align 7
++	.global __cache
++__cache:
++	.rept __CACHE_SIZE__ * 8
++	.fill 128
++	.endr
++
++	.p2align 7
++	.global __cache_tag_array
++__cache_tag_array:
++	.rept __CACHE_SIZE__ * 2
++	.long 1, 1, 1, 1
++	.fill 128-16
++	.endr
++__end_cache_tag_array:
++
++	.globl __cache_tag_array_size
++	.set __cache_tag_array_size, __end_cache_tag_array-__cache_tag_array
++
+Index: gcc/config/spu/spu.opt
+===================================================================
+--- a/src/gcc/config/spu/spu.opt	(.../gcc-4_4-branch)
++++ b/src/gcc/config/spu/spu.opt	(.../cell-4_4-branch)
+@@ -82,3 +82,24 @@
+ mtune=
+ Target RejectNegative Joined Var(spu_tune_string)
+ Schedule code for given CPU
++
++mea32
++Target Report RejectNegative Var(spu_ea_model,32) Init(32)
++Access variables in 32-bit PPU objects (default)
++
++mea64
++Target Report RejectNegative Var(spu_ea_model,64) VarExists
++Access variables in 64-bit PPU objects
++
++maddress-space-conversion
++Target Report Mask(ADDRESS_SPACE_CONVERSION)
++Allow conversions between __ea and generic pointers (default)
++
++mcache-size=
++Target Report RejectNegative Joined UInteger
++Size (in KB) of software data cache
++
++matomic-updates
++Target Report
++Atomically write back software data cache lines (default)
++
+Index: gcc/config/spu/spu-c.c
+===================================================================
+--- a/src/gcc/config/spu/spu-c.c	(.../gcc-4_4-branch)
++++ b/src/gcc/config/spu/spu-c.c	(.../cell-4_4-branch)
+@@ -199,6 +199,17 @@
+   if (spu_arch == PROCESSOR_CELLEDP)
+     builtin_define_std ("__SPU_EDP__");
+   builtin_define_std ("__vector=__attribute__((__spu_vector__))");
++  switch (spu_ea_model)
++    {
++    case 32:
++      builtin_define_std ("__EA32__");
++      break;
++    case 64:
++      builtin_define_std ("__EA64__");
++      break;
++    default:
++       gcc_unreachable ();
++    }
+ 
+   if (!flag_iso)
+     {
+Index: gcc/config/spu/t-spu-elf
+===================================================================
+--- a/src/gcc/config/spu/t-spu-elf	(.../gcc-4_4-branch)
++++ b/src/gcc/config/spu/t-spu-elf	(.../cell-4_4-branch)
+@@ -66,15 +66,40 @@
+ # Don't let CTOR_LIST end up in sdata section.
+ CRTSTUFF_T_CFLAGS =
+ 
+-#MULTILIB_OPTIONS=mlarge-mem/mtest-abi
+-#MULTILIB_DIRNAMES=large-mem test-abi
+-#MULTILIB_MATCHES=
++# Multi-lib support.
++MULTILIB_OPTIONS=mea64
+ 
+ # Neither gcc or newlib seem to have a standard way to generate multiple
+ # crt*.o files.  So we don't use the standard crt0.o name anymore.
+ 
+-EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o
++EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o libgcc_cachemgr.a libgcc_cachemgr_nonatomic.a \
++	libgcc_cache8k.a libgcc_cache16k.a libgcc_cache32k.a libgcc_cache64k.a libgcc_cache128k.a
+ 
++$(T)cachemgr.o: $(srcdir)/config/spu/cachemgr.c
++	$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(MULTILIB_CFLAGS) -c $< -o $@
++
++# Specialised rule to add a -D flag.
++$(T)cachemgr_nonatomic.o: $(srcdir)/config/spu/cachemgr.c
++	$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(MULTILIB_CFLAGS) -DNONATOMIC -c $< -o $@
++
++$(T)libgcc_%.a: $(T)%.o
++	$(AR_FOR_TARGET) -rcs $@ $<
++
++$(T)cache8k.o: $(srcdir)/config/spu/cache.S
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -D__CACHE_SIZE__=8 -o $@ -c $<
++
++$(T)cache16k.o: $(srcdir)/config/spu/cache.S
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -D__CACHE_SIZE__=16 -o $@ -c $<
++
++$(T)cache32k.o: $(srcdir)/config/spu/cache.S
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -D__CACHE_SIZE__=32 -o $@ -c $<
++
++$(T)cache64k.o: $(srcdir)/config/spu/cache.S
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -D__CACHE_SIZE__=64 -o $@ -c $<
++
++$(T)cache128k.o: $(srcdir)/config/spu/cache.S
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -D__CACHE_SIZE__=128 -o $@ -c $<
++
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+ 
+Index: gcc/config/spu/spu.c
+===================================================================
+--- a/src/gcc/config/spu/spu.c	(.../gcc-4_4-branch)
++++ b/src/gcc/config/spu/spu.c	(.../cell-4_4-branch)
+@@ -153,6 +153,8 @@
+ static void spu_init_builtins (void);
+ static unsigned char spu_scalar_mode_supported_p (enum machine_mode mode);
+ static unsigned char spu_vector_mode_supported_p (enum machine_mode mode);
++static bool spu_addr_space_legitimate_address_p (enum machine_mode, rtx,
++						 bool, addr_space_t);
+ static rtx adjust_operand (rtx op, HOST_WIDE_INT * start);
+ static rtx get_pic_reg (void);
+ static int need_to_save_reg (int regno, int saving);
+@@ -201,15 +203,23 @@
+ static bool spu_return_in_memory (const_tree type, const_tree fntype);
+ static void fix_range (const char *);
+ static void spu_encode_section_info (tree, rtx, int);
++static rtx spu_addr_space_legitimize_address (rtx, rtx, enum machine_mode,
++					      addr_space_t);
+ static tree spu_builtin_mul_widen_even (tree);
+ static tree spu_builtin_mul_widen_odd (tree);
+ static tree spu_builtin_mask_for_load (void);
+ static int spu_builtin_vectorization_cost (bool);
+ static bool spu_vector_alignment_reachable (const_tree, bool);
+ static tree spu_builtin_vec_perm (tree, tree *);
++static enum machine_mode spu_addr_space_pointer_mode (addr_space_t);
++static enum machine_mode spu_addr_space_address_mode (addr_space_t);
++static bool spu_addr_space_subset_p (addr_space_t, addr_space_t);
++static rtx spu_addr_space_convert (rtx, tree, tree);
+ static int spu_sms_res_mii (struct ddg *g);
+ static void asm_file_start (void);
+ static unsigned int spu_section_type_flags (tree, const char *, int);
++static section *spu_select_section (tree, int, unsigned HOST_WIDE_INT);
++static void spu_unique_section (tree, int);
+ static rtx spu_expand_load (rtx, rtx, rtx, int);
+ 
+ extern const char *reg_names[];
+@@ -269,9 +279,31 @@
+ static enum machine_mode
+ spu_libgcc_shift_count_mode (void);
+ 
++/* Pointer mode for __ea references.  */
++#define EAmode (spu_ea_model != 32 ? DImode : SImode)
++
+ 
+ /*  TARGET overrides.  */
+ 
++#undef TARGET_ADDR_SPACE_POINTER_MODE
++#define TARGET_ADDR_SPACE_POINTER_MODE spu_addr_space_pointer_mode
++
++#undef TARGET_ADDR_SPACE_ADDRESS_MODE
++#define TARGET_ADDR_SPACE_ADDRESS_MODE spu_addr_space_address_mode
++
++#undef TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P
++#define TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P \
++  spu_addr_space_legitimate_address_p
++
++#undef TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS
++#define TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS spu_addr_space_legitimize_address
++
++#undef TARGET_ADDR_SPACE_SUBSET_P
++#define TARGET_ADDR_SPACE_SUBSET_P spu_addr_space_subset_p
++
++#undef TARGET_ADDR_SPACE_CONVERT
++#define TARGET_ADDR_SPACE_CONVERT spu_addr_space_convert
++
+ #undef TARGET_INIT_BUILTINS
+ #define TARGET_INIT_BUILTINS spu_init_builtins
+ 
+@@ -281,6 +313,15 @@
+ #undef TARGET_UNWIND_WORD_MODE
+ #define TARGET_UNWIND_WORD_MODE spu_unwind_word_mode
+ 
++/* The current assembler doesn't like .4byte foo@ppu, so use the normal .long
++   and .quad for the debugger.  When it is known that the assembler is fixed,
++   these can be removed.  */
++#undef TARGET_ASM_UNALIGNED_SI_OP
++#define TARGET_ASM_UNALIGNED_SI_OP	"\t.long\t"
++
++#undef TARGET_ASM_ALIGNED_DI_OP
++#define TARGET_ASM_ALIGNED_DI_OP	"\t.quad\t"
++
+ /* The .8byte directive doesn't seem to work well for a 32 bit
+    architecture. */
+ #undef TARGET_ASM_UNALIGNED_DI_OP
+@@ -398,6 +439,12 @@
+ #undef TARGET_SECTION_TYPE_FLAGS
+ #define TARGET_SECTION_TYPE_FLAGS spu_section_type_flags
+ 
++#undef TARGET_ASM_SELECT_SECTION
++#define TARGET_ASM_SELECT_SECTION  spu_select_section
++
++#undef TARGET_ASM_UNIQUE_SECTION
++#define TARGET_ASM_UNIQUE_SECTION  spu_unique_section
++
+ struct gcc_target targetm = TARGET_INITIALIZER;
+ 
+ void
+@@ -3606,6 +3653,29 @@
+   return FALSE;
+ }
+ 
++/* Return true if X is a SYMBOL_REF to an __ea qualified variable.  */
++
++static int
++ea_symbol_ref (rtx *px, void *data ATTRIBUTE_UNUSED)
++{
++  rtx x = *px;
++  tree decl;
++
++  if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == PLUS)
++    {
++      rtx plus = XEXP (x, 0);
++      rtx op0 = XEXP (plus, 0);
++      rtx op1 = XEXP (plus, 1);
++      if (GET_CODE (op1) == CONST_INT)
++	x = op0;
++    }
++
++  return (GET_CODE (x) == SYMBOL_REF
++ 	  && (decl = SYMBOL_REF_DECL (x)) != 0
++ 	  && TREE_CODE (decl) == VAR_DECL
++ 	  && TYPE_ADDR_SPACE (TREE_TYPE (decl)));
++}
++
+ /* We accept:
+    - any 32-bit constant (SImode, SFmode)
+    - any constant that can be generated with fsmbi (any mode)
+@@ -3617,6 +3687,12 @@
+ {
+   if (GET_CODE (x) == HIGH)
+     x = XEXP (x, 0);
++
++  /* Reject any __ea qualified reference.  These can't appear in
++     instructions but must be forced to the constant pool.  */
++  if (for_each_rtx (&x, ea_symbol_ref, 0))
++    return 0;
++
+   /* V4SI with all identical symbols is valid. */
+   if (!flag_pic
+       && GET_MODE (x) == V4SImode
+@@ -3655,8 +3731,14 @@
+   switch (GET_CODE (x))
+     {
+     case LABEL_REF:
++      return !TARGET_LARGE_MEM;
++
+     case SYMBOL_REF:
+     case CONST:
++      /* Keep __ea references until reload so that spu_expand_mov can see them
++	 in MEMs.  */
++      if (ea_symbol_ref (&x, 0))
++	return !reload_in_progress && !reload_completed;
+       return !TARGET_LARGE_MEM;
+ 
+     case CONST_INT:
+@@ -3700,6 +3782,20 @@
+   return FALSE;
+ }
+ 
++/* Like spu_legitimate_address, except with named addresses.  */
++static bool
++spu_addr_space_legitimate_address_p (enum machine_mode mode, rtx x,
++				     bool reg_ok_strict, addr_space_t as)
++{
++  if (as == ADDR_SPACE_EA)
++    return (REG_P (x) && (GET_MODE (x) == EAmode));
++
++  else if (as != ADDR_SPACE_GENERIC)
++    gcc_unreachable ();
++
++  return spu_legitimate_address (mode, x, reg_ok_strict);
++}
++
+ /* When the address is reg + const_int, force the const_int into a
+    register.  */
+ rtx
+@@ -3733,6 +3829,23 @@
+   return NULL_RTX;
+ }
+ 
++/* Like spu_legitimate_address, except with named address support.  */
++static rtx
++spu_addr_space_legitimize_address (rtx x, rtx oldx, enum machine_mode mode,
++				   addr_space_t as)
++{
++  rtx result;
++
++  if (as != ADDR_SPACE_GENERIC)
++    return x;
++
++  result = spu_legitimize_address (x, oldx, mode);
++  if (result)
++    return result;
++
++  return x;
++}
++
+ /* Handle an attribute requiring a FUNCTION_DECL; arguments as in
+    struct attribute_spec.handler.  */
+ static tree
+@@ -4233,6 +4346,233 @@
+   return 0;
+ }
+ 
++static GTY(()) rtx cache_fetch;		  /* __cache_fetch function */
++static GTY(()) rtx cache_fetch_dirty;	  /* __cache_fetch_dirty function */
++static alias_set_type ea_alias_set = -1;  /* alias set for __ea memory */
++
++/* MEM is known to be an __ea qualified memory access.  Emit a call to
++   fetch the ppu memory to local store, and return its address in local
++   store.  */
++
++static void
++ea_load_store (rtx mem, bool is_store, rtx ea_addr, rtx data_addr)
++{
++  if (is_store)
++    {
++      rtx ndirty = GEN_INT (GET_MODE_SIZE (GET_MODE (mem)));
++      if (!cache_fetch_dirty)
++	cache_fetch_dirty = init_one_libfunc ("__cache_fetch_dirty");
++      emit_library_call_value (cache_fetch_dirty, data_addr, LCT_NORMAL, Pmode,
++			       2, ea_addr, EAmode, ndirty, SImode);
++    }
++  else
++    {
++      if (!cache_fetch)
++	cache_fetch = init_one_libfunc ("__cache_fetch");
++      emit_library_call_value (cache_fetch, data_addr, LCT_NORMAL, Pmode,
++			       1, ea_addr, EAmode);
++    }
++}
++
++/* Like ea_load_store, but do the cache tag comparison and, for stores,
++   dirty bit marking, inline.
++
++   The cache control data structure is an array of
++
++   struct __cache_tag_array
++     {
++        unsigned int tag_lo[4];
++        unsigned int tag_hi[4];
++        void *data_pointer[4];
++        int reserved[4];
++        vector unsigned short dirty_bits[4];
++     }  */
++
++static void
++ea_load_store_inline (rtx mem, bool is_store, rtx ea_addr, rtx data_addr)
++{
++  rtx ea_addr_si;
++  HOST_WIDE_INT v;
++  rtx tag_size_sym = gen_rtx_SYMBOL_REF (Pmode, "__cache_tag_array_size");
++  rtx tag_arr_sym = gen_rtx_SYMBOL_REF (Pmode, "__cache_tag_array");
++  rtx index_mask = gen_reg_rtx (SImode);
++  rtx tag_arr = gen_reg_rtx (Pmode);
++  rtx splat_mask = gen_reg_rtx (TImode);
++  rtx splat = gen_reg_rtx (V4SImode);
++  rtx splat_hi = NULL_RTX;
++  rtx tag_index = gen_reg_rtx (Pmode);
++  rtx block_off = gen_reg_rtx (SImode);
++  rtx tag_addr = gen_reg_rtx (Pmode);
++  rtx tag = gen_reg_rtx (V4SImode);
++  rtx cache_tag = gen_reg_rtx (V4SImode);
++  rtx cache_tag_hi = NULL_RTX;
++  rtx cache_ptrs = gen_reg_rtx (TImode);
++  rtx cache_ptrs_si = gen_reg_rtx (SImode);
++  rtx tag_equal = gen_reg_rtx (V4SImode);
++  rtx tag_equal_hi = NULL_RTX;
++  rtx tag_eq_pack = gen_reg_rtx (V4SImode);
++  rtx tag_eq_pack_si = gen_reg_rtx (SImode);
++  rtx eq_index = gen_reg_rtx (SImode);
++  rtx bcomp, hit_label, hit_ref, cont_label, insn;
++
++  if (spu_ea_model != 32)
++    {
++      splat_hi = gen_reg_rtx (V4SImode);
++      cache_tag_hi = gen_reg_rtx (V4SImode);
++      tag_equal_hi = gen_reg_rtx (V4SImode);
++    }
++
++  emit_move_insn (index_mask, plus_constant (tag_size_sym, -128));
++  emit_move_insn (tag_arr, tag_arr_sym);
++  v = 0x0001020300010203LL;
++  emit_move_insn (splat_mask, immed_double_const (v, v, TImode));
++  ea_addr_si = ea_addr;
++  if (spu_ea_model != 32)
++    ea_addr_si = convert_to_mode (SImode, ea_addr, 1);
++
++  /* tag_index = ea_addr & (tag_array_size - 128)  */
++  emit_insn (gen_andsi3 (tag_index, ea_addr_si, index_mask));
++
++  /* splat ea_addr to all 4 slots.  */
++  emit_insn (gen_shufb (splat, ea_addr_si, ea_addr_si, splat_mask));
++  /* Similarly for high 32 bits of ea_addr.  */
++  if (spu_ea_model != 32)
++    emit_insn (gen_shufb (splat_hi, ea_addr, ea_addr, splat_mask));
++
++  /* block_off = ea_addr & 127  */
++  emit_insn (gen_andsi3 (block_off, ea_addr_si, spu_const (SImode, 127)));
++
++  /* tag_addr = tag_arr + tag_index  */
++  emit_insn (gen_addsi3 (tag_addr, tag_arr, tag_index));
++
++  /* Read cache tags.  */
++  emit_move_insn (cache_tag, gen_rtx_MEM (V4SImode, tag_addr));
++  if (spu_ea_model != 32)
++    emit_move_insn (cache_tag_hi, gen_rtx_MEM (V4SImode,
++					       plus_constant (tag_addr, 16)));
++
++  /* tag = ea_addr & -128  */
++  emit_insn (gen_andv4si3 (tag, splat, spu_const (V4SImode, -128)));
++
++  /* Read all four cache data pointers.  */
++  emit_move_insn (cache_ptrs, gen_rtx_MEM (TImode,
++					   plus_constant (tag_addr, 32)));
++
++  /* Compare tags.  */
++  emit_insn (gen_ceq_v4si (tag_equal, tag, cache_tag));
++  if (spu_ea_model != 32)
++    {
++      emit_insn (gen_ceq_v4si (tag_equal_hi, splat_hi, cache_tag_hi));
++      emit_insn (gen_andv4si3 (tag_equal, tag_equal, tag_equal_hi));
++    }
++
++  /* At most one of the tags compare equal, so tag_equal has one
++     32-bit slot set to all 1's, with the other slots all zero.
++     gbb picks off low bit from each byte in the 128-bit registers,
++     so tag_eq_pack is one of 0xf000, 0x0f00, 0x00f0, 0x000f, assuming
++     we have a hit.  */
++  emit_insn (gen_spu_gbb (tag_eq_pack, spu_gen_subreg (V16QImode, tag_equal)));
++  emit_insn (gen_spu_convert (tag_eq_pack_si, tag_eq_pack));
++
++  /* So counting leading zeros will set eq_index to 16, 20, 24 or 28.  */
++  emit_insn (gen_clzsi2 (eq_index, tag_eq_pack_si));
++
++  /* Allowing us to rotate the corresponding cache data pointer to slot0.
++     (rotating eq_index mod 16 bytes).  */
++  emit_insn (gen_rotqby_ti (cache_ptrs, cache_ptrs, eq_index));
++  emit_insn (gen_spu_convert (cache_ptrs_si, cache_ptrs));
++
++  /* Add block offset to form final data address.  */
++  emit_insn (gen_addsi3 (data_addr, cache_ptrs_si, block_off));
++
++  /* Check that we did hit.  */
++  hit_label = gen_label_rtx ();
++  hit_ref = gen_rtx_LABEL_REF (VOIDmode, hit_label);
++  bcomp = gen_rtx_NE (SImode, tag_eq_pack_si, const0_rtx);
++  insn = emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx,
++				      gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp,
++							    hit_ref, pc_rtx)));
++  /* Say that this branch is very likely to happen.  */
++  v = REG_BR_PROB_BASE - REG_BR_PROB_BASE / 100 - 1;
++  REG_NOTES (insn)
++    = gen_rtx_EXPR_LIST (REG_BR_PROB, GEN_INT (v), REG_NOTES (insn));
++
++  ea_load_store (mem, is_store, ea_addr, data_addr);
++  cont_label = gen_label_rtx ();
++  emit_jump_insn (gen_jump (cont_label));
++  emit_barrier ();
++
++  emit_label (hit_label);
++
++  if (is_store)
++    {
++      HOST_WIDE_INT v_hi;
++      rtx dirty_bits = gen_reg_rtx (TImode);
++      rtx dirty_off = gen_reg_rtx (SImode);
++      rtx dirty_128 = gen_reg_rtx (TImode);
++      rtx neg_block_off = gen_reg_rtx (SImode);
++
++      /* Set up mask with one dirty bit per byte of the mem we are
++	 writing, starting from top bit.  */
++      v_hi = v = -1;
++      v <<= (128 - GET_MODE_SIZE (GET_MODE (mem))) & 63;
++      if ((128 - GET_MODE_SIZE (GET_MODE (mem))) >= 64)
++	{
++	  v_hi = v;
++	  v = 0;
++	}
++      emit_move_insn (dirty_bits, immed_double_const (v, v_hi, TImode));
++
++      /* Form index into cache dirty_bits.  eq_index is one of
++	 0x10, 0x14, 0x18 or 0x1c.  Multiplying by 4 gives us
++	 0x40, 0x50, 0x60 or 0x70 which just happens to be the
++	 offset to each of the four dirty_bits elements.  */
++      emit_insn (gen_ashlsi3 (dirty_off, eq_index, spu_const (SImode, 2)));
++
++      emit_insn (gen_spu_lqx (dirty_128, tag_addr, dirty_off));
++
++      /* Rotate bit mask to proper bit.  */
++      emit_insn (gen_negsi2 (neg_block_off, block_off));
++      emit_insn (gen_rotqbybi_ti (dirty_bits, dirty_bits, neg_block_off));
++      emit_insn (gen_rotqbi_ti (dirty_bits, dirty_bits, neg_block_off));
++
++      /* Or in the new dirty bits.  */
++      emit_insn (gen_iorti3 (dirty_128, dirty_bits, dirty_128));
++
++      /* Store.  */
++      emit_insn (gen_spu_stqx (dirty_128, tag_addr, dirty_off));
++    }
++
++  emit_label (cont_label);
++}
++
++static rtx
++expand_ea_mem (rtx mem, bool is_store)
++{
++  rtx ea_addr;
++  rtx data_addr = gen_reg_rtx (Pmode);
++  rtx new_mem;
++
++  ea_addr = force_reg (EAmode, XEXP (mem, 0));
++  if (optimize_size || optimize == 0)
++    ea_load_store (mem, is_store, ea_addr, data_addr);
++  else
++    ea_load_store_inline (mem, is_store, ea_addr, data_addr);
++
++  if (ea_alias_set == -1)
++    ea_alias_set = new_alias_set ();
++
++  /* We generate a new MEM RTX to refer to the copy of the data
++     in the cache.  We do not copy memory attributes (except the
++     alignment) from the original MEM, as they may no longer apply
++     to the cache copy.  */
++  new_mem = gen_rtx_MEM (GET_MODE (mem), data_addr);
++  set_mem_alias_set (new_mem, ea_alias_set);
++  set_mem_align (new_mem, MIN (MEM_ALIGN (mem), 128 * 8));
++
++  return new_mem;
++}
++
+ int
+ spu_expand_mov (rtx * ops, enum machine_mode mode)
+ {
+@@ -4290,9 +4630,17 @@
+ 	}
+     }
+   if (MEM_P (ops[0]))
+-    return spu_split_store (ops);
++    {
++      if (MEM_ADDR_SPACE (ops[0]))
++	ops[0] = expand_ea_mem (ops[0], true);
++      return spu_split_store (ops);
++    }
+   if (MEM_P (ops[1]))
+-    return spu_split_load (ops);
++    {
++      if (MEM_ADDR_SPACE (ops[1]))
++	ops[1] = expand_ea_mem (ops[1], false);
++      return spu_split_load (ops);
++    }
+ 
+   return 0;
+ }
+@@ -6415,6 +6763,113 @@
+   return d->fndecl;
+ }
+ 
++/* Return the appropriate mode for a named address pointer.  */
++static enum machine_mode
++spu_addr_space_pointer_mode (addr_space_t addrspace)
++{
++  switch (addrspace)
++    {
++    case ADDR_SPACE_GENERIC:
++      return ptr_mode;
++    case ADDR_SPACE_EA:
++      return EAmode;
++    default:
++      gcc_unreachable ();
++    }
++}
++
++/* Return the appropriate mode for a named address address.  */
++static enum machine_mode
++spu_addr_space_address_mode (addr_space_t addrspace)
++{
++  switch (addrspace)
++    {
++    case ADDR_SPACE_GENERIC:
++      return Pmode;
++    case ADDR_SPACE_EA:
++      return EAmode;
++    default:
++      gcc_unreachable ();
++    }
++}
++
++/* Determine if one named address space is a subset of another.  */
++
++static bool
++spu_addr_space_subset_p (addr_space_t subset, addr_space_t superset)
++{
++  gcc_assert (subset == ADDR_SPACE_GENERIC || subset == ADDR_SPACE_EA);
++  gcc_assert (superset == ADDR_SPACE_GENERIC || superset == ADDR_SPACE_EA);
++
++  if (subset == superset)
++    return true;
++
++  /* If we have -mno-address-space-conversion, treat __ea and generic as not
++     being subsets but instead as disjoint address spaces.  */
++  else if (!TARGET_ADDRESS_SPACE_CONVERSION)
++    return false;
++
++  else
++    return (subset == ADDR_SPACE_GENERIC && superset == ADDR_SPACE_EA);
++}
++
++/* Convert from one address space to another.  */
++static rtx
++spu_addr_space_convert (rtx op, tree from_type, tree to_type)
++{
++  addr_space_t from_as = TYPE_ADDR_SPACE (TREE_TYPE (from_type));
++  addr_space_t to_as = TYPE_ADDR_SPACE (TREE_TYPE (to_type));
++
++  gcc_assert (from_as == ADDR_SPACE_GENERIC || from_as == ADDR_SPACE_EA);
++  gcc_assert (to_as == ADDR_SPACE_GENERIC || to_as == ADDR_SPACE_EA);
++
++  if (to_as == ADDR_SPACE_GENERIC && from_as == ADDR_SPACE_EA)
++    {
++      rtx result, ls;
++
++      ls = gen_const_mem (DImode,
++			  gen_rtx_SYMBOL_REF (Pmode, "__ea_local_store"));
++      set_mem_align (ls, 128);
++
++      result = gen_reg_rtx (Pmode);
++      ls = force_reg (Pmode, convert_modes (Pmode, DImode, ls, 1));
++      op = force_reg (Pmode, convert_modes (Pmode, EAmode, op, 1));
++      ls = emit_conditional_move (ls, NE, op, const0_rtx, Pmode,
++					  ls, const0_rtx, Pmode, 1);
++
++      emit_insn (gen_subsi3 (result, op, ls));
++
++      return result;
++    }
++
++  else if (to_as == ADDR_SPACE_EA && from_as == ADDR_SPACE_GENERIC)
++    {
++      rtx result, ls;
++
++      ls = gen_const_mem (DImode,
++			  gen_rtx_SYMBOL_REF (Pmode, "__ea_local_store"));
++      set_mem_align (ls, 128);
++
++      result = gen_reg_rtx (EAmode);
++      ls = force_reg (EAmode, convert_modes (EAmode, DImode, ls, 1));
++      op = force_reg (Pmode, op);
++      ls = emit_conditional_move (ls, NE, op, const0_rtx, Pmode,
++					  ls, const0_rtx, EAmode, 1);
++      op = force_reg (EAmode, convert_modes (EAmode, Pmode, op, 1));
++
++      if (EAmode == SImode)
++	emit_insn (gen_addsi3 (result, op, ls));
++      else
++	emit_insn (gen_adddi3 (result, op, ls));
++
++      return result;
++    }
++
++  else
++    gcc_unreachable ();
++}
++
++
+ /* Count the total number of instructions in each pipe and return the
+    maximum, which is used as the Minimum Iteration Interval (MII)
+    in the modulo scheduler.  get_pipe() will return -2, -1, 0, or 1.
+@@ -6507,9 +6962,46 @@
+   /* .toe needs to have type @nobits.  */
+   if (strcmp (name, ".toe") == 0)
+     return SECTION_BSS;
++  /* Don't load _ea into the current address space.  */
++  if (strcmp (name, "._ea") == 0)
++    return SECTION_WRITE | SECTION_DEBUG;
+   return default_section_type_flags (decl, name, reloc);
+ }
+ 
++/* Implement targetm.select_section.  */
++static section *
++spu_select_section (tree decl, int reloc, unsigned HOST_WIDE_INT align)
++{
++  /* Variables and constants defined in the __ea address space
++     go into a special section named "._ea".  */
++  if (TREE_TYPE (decl) != error_mark_node
++      && TYPE_ADDR_SPACE (TREE_TYPE (decl)) == ADDR_SPACE_EA)
++    {
++      /* We might get called with string constants, but get_named_section
++	 doesn't like them as they are not DECLs.  Also, we need to set
++	 flags in that case.  */
++      if (!DECL_P (decl))
++	return get_section ("._ea", SECTION_WRITE | SECTION_DEBUG, NULL);
++
++      return get_named_section (decl, "._ea", reloc);
++    }
++
++  return default_elf_select_section (decl, reloc, align);
++}
++
++/* Implement targetm.unique_section.  */
++static void
++spu_unique_section (tree decl, int reloc)
++{
++  /* We don't support unique section names in the __ea address
++     space for now.  */
++  if (TREE_TYPE (decl) != error_mark_node
++      && TYPE_ADDR_SPACE (TREE_TYPE (decl)) != 0)
++    return;
++
++  default_unique_section (decl, reloc);
++}
++
+ /* Generate a constant or register which contains 2^SCALE.  We assume
+    the result is valid for MODE.  Currently, MODE must be V4SFmode and
+    SCALE must be SImode. */
+@@ -6558,5 +7050,12 @@
+     }
+ }
+ 
++void
++spu_function_profiler (FILE * file, int labelno)
++{
++  fprintf (file, "# profile\n");
++  fprintf (file, "brsl $75,  _mcount\n");
++}
++
+ #include "gt-spu.h"
+ 
+Index: gcc/config/spu/spu.h
+===================================================================
+--- a/src/gcc/config/spu/spu.h	(.../gcc-4_4-branch)
++++ b/src/gcc/config/spu/spu.h	(.../cell-4_4-branch)
+@@ -51,7 +51,7 @@
+ /* Default target_flags if no switches specified.  */
+ #ifndef TARGET_DEFAULT
+ #define TARGET_DEFAULT (MASK_ERROR_RELOC | MASK_SAFE_DMA | MASK_BRANCH_HINTS \
+-			| MASK_SAFE_HINTS)
++			| MASK_SAFE_HINTS | MASK_ADDRESS_SPACE_CONVERSION)
+ #endif
+ 
+ 
+@@ -395,10 +395,13 @@
+ 
+ /* Profiling */
+ 
+-/* Nothing, for now. */
+ #define FUNCTION_PROFILER(FILE, LABELNO)  \
+-   fprintf (FILE, "\t\n")
++  spu_function_profiler ((FILE), (LABELNO));
+ 
++#define NO_PROFILE_COUNTERS 1
++
++#define PROFILE_BEFORE_PROLOGUE 1
++
+ 
+ /* Trampolines */
+ 
+@@ -497,6 +500,17 @@
+ #define ASM_OUTPUT_LABELREF(FILE, NAME) \
+   asm_fprintf (FILE, "%U%s", default_strip_name_encoding (NAME))
+ 
++#define ASM_OUTPUT_SYMBOL_REF(FILE, X) \
++  do							\
++    {							\
++      tree decl;					\
++      assemble_name (FILE, XSTR ((X), 0));		\
++      if ((decl = SYMBOL_REF_DECL ((X))) != 0		\
++	  && TREE_CODE (decl) == VAR_DECL		\
++	  && TYPE_ADDR_SPACE (TREE_TYPE (decl)))	\
++	fputs ("@ppu", FILE);				\
++    } while (0)
++
+ 
+ /* Instruction Output */
+ #define REGISTER_NAMES \
+@@ -623,6 +637,13 @@
+ extern GTY(()) rtx spu_compare_op1;
+ 
+ 
++/* Address spaces.  */
++#define ADDR_SPACE_EA	1
++
++/* Named address space keywords.  */
++#define TARGET_ADDR_SPACE_KEYWORDS ADDR_SPACE_KEYWORD ("__ea", ADDR_SPACE_EA)
++
++
+ /* Builtins.  */
+ 
+ enum spu_builtin_type
+Index: gcc/config/spu/spu-elf.h
+===================================================================
+--- a/src/gcc/config/spu/spu-elf.h	(.../gcc-4_4-branch)
++++ b/src/gcc/config/spu/spu-elf.h	(.../cell-4_4-branch)
+@@ -48,8 +48,9 @@
+    object constructed before entering `main'.  */
+ 
+ #undef  STARTFILE_SPEC 
+-#define STARTFILE_SPEC "%{mstdmain: crt2.o%s} %{!mstdmain: crt1.o%s} \
+-			crti.o%s crtbegin.o%s"
++#define STARTFILE_SPEC "%{mstdmain: %{pg|p:gcrt2.o%s;:crt2.o%s}}\
++                        %{!mstdmain: %{pg|p:gcrt1.o%s;:crt1.o%s}}\
++                        crti.o%s crtbegin.o%s"
+ 
+ #undef  ENDFILE_SPEC
+ #define ENDFILE_SPEC   "crtend.o%s crtn.o%s"
+@@ -68,8 +69,14 @@
+ 
+ #define LINK_SPEC "%{mlarge-mem: --defsym __stack=0xfffffff0 }"
+ 
+-#define LIB_SPEC \
+-	"-( %{!shared:%{g*:-lg}} -lc -lgloss -)"
++#define LIB_SPEC "-( %{!shared:%{g*:-lg}} -lc -lgloss -) \
++    %{mno-atomic-updates:-lgcc_cachemgr_nonatomic; :-lgcc_cachemgr} \
++    %{mcache-size=128:-lgcc_cache128k; \
++      mcache-size=64 :-lgcc_cache64k; \
++      mcache-size=32 :-lgcc_cache32k; \
++      mcache-size=16 :-lgcc_cache16k; \
++      mcache-size=8  :-lgcc_cache8k; \
++                     :-lgcc_cache64k}"
+ 
+ /* Turn off warnings in the assembler too. */
+ #undef ASM_SPEC
+Index: gcc/convert.c
+===================================================================
+--- a/src/gcc/convert.c	(.../gcc-4_4-branch)
++++ b/src/gcc/convert.c	(.../cell-4_4-branch)
+@@ -53,15 +53,35 @@
+     {
+     case POINTER_TYPE:
+     case REFERENCE_TYPE:
+-      return fold_build1 (NOP_EXPR, type, expr);
++      {
++	/* If the pointers point to different address spaces, conversion needs
++	   to be done via a ADDR_SPACE_CONVERT_EXPR instead of a NOP_EXPR.  */
++	addr_space_t to_as = TYPE_ADDR_SPACE (TREE_TYPE (type));
++	addr_space_t from_as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (expr)));
+ 
++	if (to_as == from_as)
++	  return fold_build1 (NOP_EXPR, type, expr);
++	else
++	  return fold_build1 (ADDR_SPACE_CONVERT_EXPR, type, expr);
++      }
++
+     case INTEGER_TYPE:
+     case ENUMERAL_TYPE:
+     case BOOLEAN_TYPE:
+-      if (TYPE_PRECISION (TREE_TYPE (expr)) != POINTER_SIZE)
+-	expr = fold_build1 (NOP_EXPR,
+-                            lang_hooks.types.type_for_size (POINTER_SIZE, 0),
+-			    expr);
++      {
++	/* If the input precision differs from the target pointer type
++	   precision, first convert the input expression to an integer type of
++	   the target precision.  Some targets, e.g. VMS, need several pointer
++	   sizes to coexist so the latter isn't necessarily POINTER_SIZE.  */
++	unsigned int pprec = TYPE_PRECISION (type);
++	unsigned int eprec = TYPE_PRECISION (TREE_TYPE (expr));
++
++	if (eprec != pprec)
++	  expr = fold_build1 (NOP_EXPR,
++			      lang_hooks.types.type_for_size (pprec, 0),
++			      expr);
++      }
++
+       return fold_build1 (CONVERT_EXPR, type, expr);
+ 
+ 
+@@ -488,10 +508,13 @@
+       if (integer_zerop (expr))
+ 	return build_int_cst (type, 0);
+ 
+-      /* Convert to an unsigned integer of the correct width first,
+-	 and from there widen/truncate to the required type.  */
++      /* Convert to an unsigned integer of the correct width first, and from
++	 there widen/truncate to the required type.  Some targets support the
++	 coexistence of multiple valid pointer sizes, so fetch the one we need
++	 from the type.  */
+       expr = fold_build1 (CONVERT_EXPR,
+-			  lang_hooks.types.type_for_size (POINTER_SIZE, 0),
++			  lang_hooks.types.type_for_size
++			    (TYPE_PRECISION (intype), 0),
+ 			  expr);
+       return fold_convert (type, expr);
+ 
+Index: gcc/reload1.c
+===================================================================
+--- a/src/gcc/reload1.c	(.../gcc-4_4-branch)
++++ b/src/gcc/reload1.c	(.../cell-4_4-branch)
+@@ -999,8 +999,9 @@
+ 	  {
+ 	    rtx x = eliminate_regs (reg_equiv_memory_loc[i], 0, NULL_RTX);
+ 
+-	    if (strict_memory_address_p (GET_MODE (regno_reg_rtx[i]),
+-					 XEXP (x, 0)))
++	    if (strict_memory_address_addr_space_p
++		  (GET_MODE (regno_reg_rtx[i]), XEXP (x, 0),
++		   MEM_ADDR_SPACE (x)))
+ 	      reg_equiv_mem[i] = x, reg_equiv_address[i] = 0;
+ 	    else if (CONSTANT_P (XEXP (x, 0))
+ 		     || (REG_P (XEXP (x, 0))
+@@ -2610,7 +2611,7 @@
+ 		     && reg_equiv_constant[REGNO (new0)] != 0)
+ 	      new0 = reg_equiv_constant[REGNO (new0)];
+ 
+-	    new_rtx = form_sum (new0, new1);
++	    new_rtx = form_sum (GET_MODE (x), new0, new1);
+ 
+ 	    /* As above, if we are not inside a MEM we do not want to
+ 	       turn a PLUS into something else.  We might try to do so here
+Index: ChangeLog.cell
+===================================================================
+--- a/src/ChangeLog.cell	(.../gcc-4_4-branch)
++++ b/src/ChangeLog.cell	(.../cell-4_4-branch)
+@@ -0,0 +1,651 @@
++2010-05-17  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Update to gcc-4_4-branch revision 159486.
++
++2010-04-07  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Update to gcc-4_4-branch revision 158036.
++
++2009-12-07  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-05-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	* c-typeck.c (build_binary_op): Allow % on integal vectors.
++	* doc/extend.texi (Vector Extension): Document that % is allowed too.
++
++gcc/cp/
++	2009-05-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	* typeck.c (build_binary_op): Allow % on integal vectors.
++
++gcc/testsuite/
++	2009-05-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	* gcc.dg/vector-4.c: New testcase.
++	* gcc.dg/simd-1b.c: % is now allowed for integer vectors.
++	* g++.dg/ext/vector16.C: New testcase.
++
++2009-12-07  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-04-22  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR C/31499
++	* c-typeck.c (process_init_element): Treat VECTOR_TYPE like ARRAY_TYPE
++	and RECORD_TYPE/UNION_TYPE.  When outputing the actual element and the
++	value is a VECTOR_CST, the element type is the element type of the
++	vector.
++
++gcc/testsuite/
++	2009-04-22  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR C/31499
++	* gcc.dg/vector-init-1.c: New testcase.
++	* gcc.dg/vector-init-2.c: New testcase.
++
++2009-12-07  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Update to gcc-4_4-branch revision 155038.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-12-03  Ken Werner  <ken.werner@de.ibm.com>
++
++	* config/spu/spu-elf.h (STARTFILE_SPEC): Add support for gprof
++	startup files.
++	* config/spu/spu-protos.h (spu_function_profiler): Add prototype.
++	* config/spu/spu.c (spu_function_profiler): New function.
++	* config/spu/spu.h (FUNCTION_PROFILER): Invoke
++	spu_function_profiler.
++	(NO_PROFILE_COUNTERS): Define.
++	(PROFILE_BEFORE_PROLOGUE): Likewise.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-12-02  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	PR middle-end/42224
++	* tree.h (int_or_pointer_precision): Remove.
++	* tree.c (int_or_pointer_precision): Remove.
++	(integer_pow2p): Use TYPE_PRECISION instead.
++	(tree_log2): Likewise.
++	(tree_floor_log2): Likewise.
++	(signed_or_unsigned_type_for): Likewise.
++	* fold-const.c (fit_double_type): Likewise.
++	* varasm.c (initializer_constant_valid_p): Likewise.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-11-17  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	PR tree-optimization/41857
++	* tree-ssa-address.c (move_hint_to_base): Use void pointer to
++	TYPE's address space instead of pointer to TYPE.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-11-17  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* reload.c (find_reloads_address): Fix typo.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-11-02  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	PR tree-optimization/41857
++	* tree-flow.h (rewrite_use_address): Add BASE_HINT argument.
++	* tree-ssa-loop-ivopts.c (rewrite_use_address): Pass base hint
++	to create_mem_ref.
++	* tree-ssa-address.c (move_hint_to_base): New function.
++	(most_expensive_mult_to_index): Add TYPE argument.  Use mode and
++	address space associated with TYPE.
++	(addr_to_parts): Add TYPE and BASE_HINT arguments.  Pass TYPE to
++	most_expensive_mult_to_index.  Call move_hint_to_base.
++	(create_mem_ref): Add BASE_HINT argument.  Pass BASE_HINT and
++	TYPE to addr_to_parts.
++
++gcc/testsuite/
++	2009-11-02  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	PR tree-optimization/41857
++	* gcc.target/spu/ea/pr41857.c: New file.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/testsuite/
++	2009-10-26  Ben Elliston  <bje@au.ibm.com>
++		    Michael Meissner  <meissner@linux.vnet.ibm.com>
++		    Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* gcc.target/spu/ea/ea.exp: New file.
++	* gcc.target/spu/ea/cache1.c: Likewise.
++	* gcc.target/spu/ea/cast1.c: Likewise.
++	* gcc.target/spu/ea/cast2.c: Likewise.
++	* gcc.target/spu/ea/compile1.c: Likewise.
++	* gcc.target/spu/ea/compile2.c: Likewise.
++	* gcc.target/spu/ea/cppdefine.c: Likewise.
++	* gcc.target/spu/ea/errors1.c: Likewise.
++	* gcc.target/spu/ea/errors2.c: Likewise.
++	* gcc.target/spu/ea/execute1.c: Likewise.
++	* gcc.target/spu/ea/execute2.c: Likewise.
++	* gcc.target/spu/ea/execute3.c: Likewise.
++	* gcc.target/spu/ea/ops1.c: Likewise.
++	* gcc.target/spu/ea/ops2.c: Likewise.
++	* gcc.target/spu/ea/options1.c: Likewise.
++	* gcc.target/spu/ea/test-sizes.c: Likewise.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-10-26  Ben Elliston  <bje@au.ibm.com>
++		    Michael Meissner  <meissner@linux.vnet.ibm.com>
++		    Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* config.gcc (spu-*-elf*): Add spu_cache.h to extra_headers.
++	* config/spu/spu_cache.h: New file.
++
++	* config/spu/cachemgr.c: New file.
++	* config/spu/cache.S: New file.
++
++	* config/spu/spu.h (ASM_OUTPUT_SYMBOL_REF): Define.
++	(ADDR_SPACE_EA): Define.
++	(TARGET_ADDR_SPACE_KEYWORDS): Define.
++	* config/spu/spu.c (EAmode): New macro.
++	(TARGET_ADDR_SPACE_POINTER_MODE): Define.
++	(TARGET_ADDR_SPACE_ADDRESS_MODE): Likewise.
++	(TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P): Likewise.
++	(TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS): Likewise.
++	(TARGET_ADDR_SPACE_SUBSET_P): Likewise.
++	(TARGET_ADDR_SPACE_CONVERT): Likewise.
++	(TARGET_ASM_SELECT_SECTION): Likewise.
++	(TARGET_ASM_UNIQUE_SECTION): Likewise.
++	(TARGET_ASM_UNALIGNED_SI_OP): Likewise.
++	(TARGET_ASM_ALIGNED_DI_OP): Likewise.
++	(ea_symbol_ref): New function.
++	(spu_legitimate_constant_p): Handle __ea qualified addresses.
++	(spu_legitimate_address): Likewise.
++	(spu_addr_space_legitimate_address_p): New function.
++	(spu_addr_space_legitimize_address): Likewise.
++	(cache_fetch): New global.
++	(cache_fetch_dirty): Likewise.
++	(ea_alias_set): Likewise.
++	(ea_load_store): New function.
++	(ea_load_store_inline): Likewise.
++	(expand_ea_mem): Likewise.
++	(spu_expand_mov): Handle __ea qualified memory references.
++	(spu_addr_space_pointer_mode): New function.
++	(spu_addr_space_address_mode): Likewise.
++	(spu_addr_space_subset_p): Likewise.
++	(spu_addr_space_convert): Likewise.
++	(spu_section_type_flags): Handle "._ea" section.
++	(spu_select_section): New function.
++	(spu_unique_section): Likewise.
++	* config/spu/spu-c.c (spu_cpu_cpp_builtins): Support __EA32__
++	and __EA64__ predefined macros.
++	* config/spu/spu-elf.h (LIB_SPEC): Handle -mcache-size= and
++	-matomic-updates switches.
++
++	* config/spu/t-spu-elf (MULTILIB_OPTIONS): Define.
++	(EXTRA_MULTILIB_PARTS): Add libgcc_cachemgr.a,
++	libgcc_cachemgr_nonatomic.a, libgcc_cache8k.a, libgcc_cache16k.a,
++	libgcc_cache32k.a, libgcc_cache64k.a, libgcc_cache128k.a.
++	($(T)cachemgr.o, $(T)cachemgr_nonatomic.o): New target.
++	($(T)cache8k.o, $(T)cache16k.o, $(T)cache32k.o, $(T)cache64k.o,
++	$(T)cache128k.o): Likewise.
++	($(T)libgcc_%.a): Likewise.
++
++	* config/spu/spu.h (TARGET_DEFAULT): Add MASK_ADDRESS_SPACE_CONVERSION.
++	* config/spu/spu.opt (-mea32/-mea64): Add switches.
++	(-maddress-space-conversion): Likewise.
++	(-mcache-size=): Likewise.
++	(-matomic-updates): Likewise.
++	* doc/invoke.texi (-mea32/-mea64): Document.
++	(-maddress-space-conversion): Likewise.
++	(-mcache-size=): Likewise.
++	(-matomic-updates): Likewise.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-10-26  Ben Elliston  <bje@au.ibm.com>
++		    Michael Meissner  <meissner@linux.vnet.ibm.com>
++		    Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* doc/tm.texi (TARGET_ADDR_SPACE_KEYWORDS): Document.
++
++	* c-common.c (c_common_reswords): If TARGET_ADDR_SPACE_KEYWORDS is
++	defined, add the named address space keywords.
++	(c_addr_space_name): New function.
++	(complete_array_type): Preserve named address space.
++	(handle_mode_attribute): Use targetm.addr_space.valid_pointer_mode
++	instead of targetm.valid_pointer_mode.
++
++	* c-common.h (enum rid): Add RID_ADDR_SPACE_0 .. RID_ADDR_SPACE_15,
++	RID_FIRST_ADDR_SPACE and RID_LAST_ADDR_SPACE.
++	(ADDR_SPACE_KEYWORD): New macro.
++	(c_addr_space_name): Add prototype.
++
++	* c-tree.h (struct c_declspecs): Add address_space member.
++	(declspecs_add_addrspace): Add prototype.
++
++	* c-pretty-print.c (pp_c_type_qualifier_list): Handle address spaces.
++
++	* c-parser.c (c_parse_init): Add assertion.
++	(typedef enum c_id_kind): Add C_ID_ADDRSPACE.
++	(c_lex_one_token): Handle address space keywords.
++	(c_token_starts_typename): Likewise.
++	(c_token_starts_declspecs): Likewise.
++	(c_parser_declspecs): Likewise.
++	(c_parser_postfix_expression_after_paren_type): Diagnose compound
++	literal within function qualified with named address space.
++
++	* c-decl.c (diagnose_mismatched_decls): Diagnose conflicting named
++	address space qualifiers.
++	(shadow_tag_warned): Warn about useless address space qualifiers.
++	(quals_from_declspecs): Handle address space qualifiers.
++	(grokdeclarator): Likewise.
++	(build_null_declspecs): Likewise.
++	(declspecs_add_addrspace): New function.
++
++	* c-typeck.c (addr_space_superset): New function.
++	(qualify_type): Handle named address spaces.
++	(composite_type): Likewise.
++	(common_pointer_type): Likewise.
++	(comp_target_types): Likewise.
++	(build_conditional_expr): Likewise.
++	(build_c_cast): Likewise.
++	(convert_for_assignment): Likewise.
++	(build_binary_op): Likewise.
++	(pointer_diff): Handle named address spaces.  Use intermediate
++	integer type of sufficient size if required.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-10-26  Ben Elliston  <bje@au.ibm.com>
++		    Michael Meissner  <meissner@linux.vnet.ibm.com>
++		    Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* doc/tm.texi (TARGET_ADDR_SPACE_POINTER_MODE): Document.
++	(TARGET_ADDR_SPACE_ADDRESS_MODE): Likewise.
++	(TARGET_ADDR_SPACE_VALID_POINTER_MODE): Likewise.
++
++	* target.h (struct target_def): Add pointer_mode, address_mode,
++	and valid_pointer_mode to addr_space substructure.
++	* target-def.h (TARGET_ADDR_SPACE_POINTER_MODE): Define.
++	(TARGET_ADDR_SPACE_ADDRESS_MODE): Likewise.
++	(TARGET_ADDR_SPACE_VALID_POINTER_MODE): Likewise.
++	(TARGET_ADDR_SPACE_HOOKS): Add them.
++	* targhooks.c (target_default_pointer_address_modes_p): New function.
++	* target.h (target_default_pointer_address_modes_p): Add prototype.
++	* targhooks.c (default_addr_space_pointer_mode): New function.
++	(default_addr_space_address_mode): Likewise.
++	(default_addr_space_valid_pointer_mode): Likewise.
++	* targhooks.h (default_addr_space_pointer_mode): Add prototype.
++	(default_addr_space_address_mode): Likewise.
++	(default_addr_space_valid_pointer_mode): Likewise.
++	* output.h (default_valid_pointer_mode): Move to ...
++	* targhooks.h (default_valid_pointer_mode): ... here.
++	* varasm.c (default_valid_pointer_mode): Move to ...
++	* targhooks.c (default_valid_pointer_mode): ... here.
++
++	* varasm.c (output_constant): Use targetm.addr_space.valid_pointer_mode
++	instead of targetm.valid_pointer_mode.
++
++	* fold-const.c (fit_double_type): Use int_or_pointer_precision.
++	* tree.c (integer_pow2p): Likewise.
++	(tree_log2): Likewise.
++	(tree_floor_log2): Likewise.
++	(signed_or_unsigned_type_for): Support pointer type of different size.
++	(int_or_pointer_precision): New function.
++	* tree.h (int_or_pointer_precision): Add prototype.
++	* stor-layout.c (layout_type): Set TYPE_PRECISION for offset types.
++	* varasm.c (initializer_constant_valid_p): Use TYPE_PRECISION of
++	incoming pointer type instead of POINTER_SIZE.
++
++	* tree.c (build_pointer_type): Use appropriate pointer mode
++	instead of ptr_mode.
++	(build_reference_type): Likewise.
++	* expr.c (store_expr): Likewise.
++	(expand_expr_addr_expr): Likewise.
++	* cfgexpand.c (expand_debug_expr): Likewise.
++	
++	* auto-inc-dec.c: Include "target.h".
++	(try_merge): Use appropriate address mode instead of Pmode.
++	(find_inc): Likewise.
++	* combine.c (find_split_point): Likewise.
++	* cselib.c (cselib_record_sets): Likewise.
++	* dse.c (replace_inc_dec): Likewise.
++	(canon_address): Likewise.
++	(count_uses): Likewise.
++	(add_uses): Likewise.
++	(add_stores): Likewise.
++	* emit-rtl.c: Include "target.h".
++	(adjust_address_1): Use appropriate address mode instead of Pmode.
++	(offset_address): Likewise.
++	* explow.c (break_out_memory_refs): Likewise.
++	(memory_address_addr_space): Likewise.
++	(promote_mode): Likewise.
++	* expr.c (move_by_pieces): Likewise.
++	(emit_block_move_via_loop): Likewise.
++	(store_by_pieces): Likewise.
++	(store_by_pieces_1): Likewise.
++	(expand_assignment): Likewise.
++	(store_constructor): Likewise.
++	(expand_expr_addr_expr): Likewise.
++	(expand_expr_real_1): Likewise.
++	* cfgexpand.c (expand_debug_expr): Likewise.
++	* ifcvt.c (noce_try_cmove_arith): Likewise.
++	* regrename.c (kill_autoinc_value): Likewise.
++	* regmove.c (try_auto_increment): Likewise.
++	* reload.c (find_reloads): Likewise.
++	(find_reloads_address): Likewise.
++	(find_reloads_address_1): Likewise.
++	* sched-deps.c: Include "target.h".
++	(sched_analyze_1): Use appropriate address mode instead of Pmode.
++	(sched_analyze_2): Likewise.
++	* sel-sched-dump.c: Include "target.h".
++	(debug_mem_addr_value): Use appropriate address mode instead of Pmode.
++	* stor-layout.c (layout_type): Likewise.
++	* tree-ssa-loop-ivopts.c (produce_memory_decl_rtl): Likewise.
++	(multiplier_allowed_in_address_p): Likewise.
++	(get_address_cost): Likewise.
++	* varasm.c (make_decl_rtl): Likewise.
++	
++	* expr.c (expand_assignment): Always convert offsets to appropriate
++	address mode.
++	(store_expr): Likewise.
++	(store_constructor): Likewise.
++	(expand_expr_real_1): Likewise.
++
++	* reload.h (form_sum): Add MODE argument.
++	* reload.c (form_sum): Add MODE argument, use it instead of Pmode.
++	Update recursive calls.
++	(subst_indexed_address): Update calls to form_sum.
++	
++	* tree-flow.h (addr_for_mem_ref): Add ADDRSPACE argument.
++	* tree-ssa-address.c: Include "target.h".
++	(templates): Replace by ...
++	(mem_addr_template_list): ... this new vector.
++	(TEMPL_IDX): Handle address space numbers.
++	(gen_addr_rtx): Add address mode argument, use it instead of Pmode.
++	(addr_for_mem_ref): Add ADDRSPACE argument.  Use per-address-space
++	instead of global cache.  Update call to gen_addr_rtx.
++	(valid_mem_ref_p): Update call to addr_for_mem_ref.
++	* expr.c (expand_expr_real_1): Update call to addr_for_mem_ref.
++	
++	* rtl.h (convert_memory_address_addr_space): Add prototype.
++	(convert_memory_address): Define as macro.
++	* explow.c (convert_memory_address): Rename to ...
++	(convert_memory_address_addr_space): ... this.  Add ADDRSPACE argument.
++	Use appropriate pointer and address modes instead of ptr_mode / Pmode.
++	Update recursive calls.
++	(memory_address_addr_space): Call convert_memory_address_addr_space.
++	* expmed.c (make_tree): Likewise.
++	* expr.c (expand_assignment): Likewise.
++	(expand_expr_addr_expr_1): Likewise.  Also, add ADDRSPACE argument.
++	(expand_expr_addr_expr): Likewise.  Also, update call.
++
++	* alias.c (find_base_value): Guard pointer size optimizations.
++	(find_base_term): Likewise.
++	* rtlanal.c (nonzero_bits1): Likewise.
++	(num_sign_bit_copies1): Likewise.
++	* simplify-rtx.c (simplify_unary_operation_1): Likewise.
++
++	* Makefile.in (tree-ssa-address.o): Add $(TARGET_H) dependency.
++	(emit-rtl.o): Likewise.
++	(auto-inc-dec.o): Likewise.
++	(sched-deps.o): Likewise.
++
++	2009-08-24  Olivier Hainque  <hainque@adacore.com>
++
++	* convert.c (convert_to_integer): Don't assume an input pointer is
++	POINTER_SIZE wide.  Fetch from the type instead.
++
++	2009-07-27  Olivier Hainque  <hainque@adacore.com>
++		    Douglas B Rupp  <rupp@gnat.com>
++
++	* convert.c (convert_to_pointer): Don't assume the target
++	pointer type is POINTER_SIZE long. Fetch its precision instead.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-10-26  Ben Elliston  <bje@au.ibm.com>
++		    Michael Meissner  <meissner@linux.vnet.ibm.com>
++		    Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* doc/extend.texi (Named Address Spaces): New section.
++	* coretypes.h (addr_space_t): New type.
++	(ADDR_SPACE_GENERIC): New define.
++	(ADDR_SPACE_GENERIC_P): New macro.
++
++	* doc/tm.texi (Named Address Spaces): New section.
++	(TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P): Document.
++	(TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS): Document.
++	(TARGET_ADDR_SPACE_SUBSET_P): Document.
++	(TARGET_ADDR_SPACE_CONVERT): Document.
++	* target.h (struct gcc_target): Add addr_space substructure.
++	* target-def.h (TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P): Define.
++	(TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS): Likewise.
++	(TARGET_ADDR_SPACE_SUBSET_P): Likewise.
++	(TARGET_ADDR_SPACE_CONVERT): Likewise.
++	(TARGET_ADDR_SPACE_HOOKS): Likewise.
++	(TARGET_INITIALIZER): Initialize addr_space hooks.
++	* targhooks.c (default_addr_space_legitimate_address_p): New function.
++	(default_addr_space_legitimize_address): Likewise.
++	(default_addr_space_subset_p): Likewise.
++	(default_addr_space_convert): Likewise.
++	* targhooks.h (default_addr_space_legitimate_address_p): Add prototype.
++	(default_addr_space_legitimize_address): Likewise.
++	(default_addr_space_subset_p): Likewise.
++	(default_addr_space_convert): Likewise.
++
++	* doc/rtl.texi (MEM_ADDR_SPACE): Document.
++	* rtl.h (mem_attrs): Add ADDRSPACE memory attribute.
++	(MEM_ADDR_SPACE): New macro.
++	* emit-rtl.c (get_mem_attrs): Add ADDRSPACE argument and set
++	address space memory attribute.
++	(mem_attrs_htab_hash): Handle address space memory attribute.
++	(mem_attrs_htab_eq): Likewise.
++	(set_mem_attributes_minus_bitpos): Likewise.
++	(set_mem_attrs_from_reg): Likewise.
++	(set_mem_alias_set): Likewise.
++	(set_mem_align): Likewise.
++	(set_mem_expr): Likewise.
++	(set_mem_offset): Likewise.
++	(set_mem_size): Likewise.
++	(adjust_address_1): Likewise.
++	(offset_address): Likewise.
++	(widen_memoy_address): Likewise.
++	(get_spill_slot_decl): Likewise.
++	(set_mem_attrs_for_spill): Likewise.
++	(set_mem_addr_space): New function.
++	* emit-rtl.h (set_mem_addr_space): Add prototype.
++	* print-rtl.c (print_rtx): Print address space memory attribute.
++	* expr.c (expand_expr_real_1): Set address space memory attribute
++	of generated MEM RTXes as appropriate.
++	* tree-ssa-loop-ivopts.c (produce_memory_decl_rtl): Likewise.
++
++	* tree.h (struct tree_base): Add address_space bitfield.  Reduce
++	size of "spare" bitfield.
++	(TYPE_ADDR_SPACE): New macro.
++	(ENCODE_QUAL_ADDR_SPACE): Likewise.
++	(DECODE_QUAL_ADDR_SPACE): Likewise.
++	(CLEAR_QUAL_ADDR_SPACE): Likewise.
++	(KEEP_QUAL_ADDR_SPACE): Likewise.
++	(TYPE_QUALS): Encode type address space.
++	(TYPE_QUALS_NO_ADDR_SPACE): New macro.
++	* tree.c (set_type_quals): Set type address space.
++	(build_array_type): Inherit array address space from element type.
++	* print-tree.c (print_node_brief): Print type address space.
++	(print_node): Likewise.
++	* tree-pretty-print.c (dump_generic_node): Likewise.
++
++	* explow.c (memory_address): Rename to ...
++	(memory_address_addr_space): ... this.  Add ADDRSPACE argument.
++	Use address-space aware variants of memory address routines.
++	* recog.c (memory_address_p): Rename to ...
++	(memory_address_addr_space_p): ... this.  Add ADDSPACE argument.
++	Use address-space aware variants of memory address routines.
++	(offsettable_address_p): Rename to ...
++	(offsettable_address_addr_space_p): ... this.  Add ADDRSPACE argument.
++	Use address-space aware variants of memory address routines.
++	* reload.c (strict_memory_address_p): Rename to ...
++	(strict_memory_address_addr_space_p): ... this.  Add ADDSPACE argument.
++	Use address-space aware variants of memory address routines.
++	(maybe_memory_address_p): Rename to ...
++	(maybe_memory_address_addr_space_p): ... this.  Add ADDSPACE argument.
++	Use address-space aware variants of memory address routines.
++	* expr.h (memory_address_addr_space): Add prototype.
++	(memory_address): Define as macro.
++	* recog.h (memory_address_addr_space_p): Add prototype.
++	(memory_address_p): Define as macro.
++	(offsettable_address_addr_space_p): Add prototype.
++	(offsettable_address_p): Define as macro.
++	(strict_memory_address_addr_space_p): Add prototype.
++	(strict_memory_address_p): Define as macro.
++
++	* combine.c (find_split_point): Use address-space aware variants
++	of memory address routines.
++	* emit-rtl.c (operand_subword): Likewise.
++	(change_address_1): Likewise.
++	(adjust_address_1): Likewise.
++	(offset_address): Likewise.
++	* expr.c (emit_move_insn): Likewise.
++	(expand_expr_real_1): Likewise.
++	* recog.c (verify_changes): Likewise.
++	(general_operand): Likewise.
++	(offsettable_memref_p): Likewise.
++	(offsettable_nonstrict_memref_p): Likewise.
++	(constrain_operands): Likewise.
++	* reload.c (get_secondary_mem): Likewise.
++	(find_reloads_toplev): Likewise.
++	(find_reloads_address): Likewise.
++	(find_reloads_subreg_address): Likewise.
++	* reload1.c (reload): Likewise.
++	* rtlhooks.c (gen_lowpart_if_possible): Likewise.
++	* rtl.h (address_cost): Add ADDRSPACE argument.
++	* rtlanal.c (address_cost): Add ADDRSPACE argument.  Use address-space
++	aware variant of memory address routines.
++	* tree-ssa-loop-ivopts.c (computation_cost): Update address_cost call.
++	* fwprop.c (should_replace_address): Add ADDRSPACE argument.
++	Use address-space aware variant of memory address routines.
++	(propagate_rtx_1): Update call to should_replace_address.
++	* tree-flow.h (multiplier_allowed_in_address_p): Add ADDRSPACE
++	argument.
++	* tree-ssa-loop-ivopts.c (multiplier_allowed_in_address_p): Add
++	ADDRSPACE argument.  Use per-address-space instead of global cache.
++	Use address-space aware variant of memory address routines.
++	(get_address_cost): Likewise.
++	(get_computation_cost_at): Update calls.
++	* tree-ssa-address.c (valid_mem_ref_p): Add ADDRSPACE argument.
++	Use address-space aware variant of memory address routines.
++	(create_mem_ref_raw): Update call to valid_mem_ref_p.
++	(most_expensive_mult_to_index): Update call to
++	multiplier_allowed_in_address_p.
++
++	* dwarf2out.c (modified_type_die): Output DW_AT_address_class
++	attribute to indicate named address spaces.
++
++	* varasm.c (get_variable_section): DECLs in named address spaces
++	cannot be "common".
++
++	* reload.c (find_reloads_address): Do not use LEGITIMIZE_RELOAD_ADDRESS
++	for addresses in a non-generic address space.
++
++	* expr.c (emit_block_move_hints): Do not use libcalls for
++	memory in non-generic address spaces.
++	(clear_storage_hints): Likewise.
++	(expand_assignment): Likewise.
++
++	* fold-const.c (operand_equal_p): Expressions refering to different
++	address spaces are not equivalent.
++
++	* rtl.c (rtx_equal_p_cb): MEMs refering to different address
++	spaces are not equivalent.
++	(rtx_equal_p): Likewise.
++	* cse.c (exp_equiv_p): Likewise.
++	* jump.c (rtx_renumbered_equal_p): Likewise.
++	* reload.c (operands_match_p): Likewise.
++
++	* alias.c (nonoverlapping_memrefs_p): MEMs refering to different
++	address spaces may alias.
++	(true_dependence): Likewise.
++	(canon_true_dependence): Likewise.
++	(write_dependence_p): Likewise.
++
++	* dse.c (canon_address): Handle named address spaces.
++	* ifcvt.c (noce_try_cmove_arith): Likewise.
++
++	* tree.def (ADDR_SPACE_CONVERT_EXPR): New tree code.
++	* expr.c (expand_expr_real_1): Expand ADDR_SPACE_CONVERT_EXPR.
++	* convert.c (convert_to_pointer): Generate ADDR_SPACE_CONVERT_EXPR
++	to handle conversions between different address spaces.
++	* fold-const.c (fold_convert_loc): Likewise.
++	(fold_unary_loc): Handle ADDR_SPACE_CONVERT_EXPR.
++	* tree-pretty-print.c (dump_generic_node): Likewise.
++	* gimple-pretty-print.c (dump_unary_rhs): Likewise.
++	* tree-cfg.c (verify_gimple_assign_unary): Likewise.
++	* tree-inline.c (estimate_operator_cost): Likewise.
++	* tree-ssa.c (useless_type_conversion_p): Conversions between pointers
++	to different address spaces are not useless.
++	(useless_type_conversion_p_1): Likewise.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-08-14  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* c-lex.c (c_lex_with_flags): Increase size of local variable
++	to avoid memory clobber.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++libgfortran/
++	2009-04-17  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* configure.ac: Test for -ffunction-sections -fdata-sections and
++	set SECTION_FLAGS accordingly.
++	* configure: Regenerate.
++
++	* Makefile.am: Add SECTION_FLAGS to AM_CFLAGS.
++	* Makefile.in: Regenerate.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* Created "cell-4_4-branch".
+Index: libgfortran/configure
+===================================================================
+--- a/src/libgfortran/configure	(.../gcc-4_4-branch)
++++ b/src/libgfortran/configure	(.../cell-4_4-branch)
+@@ -457,7 +457,7 @@
+ # include <unistd.h>
+ #endif"
+ 
+-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os build_libsubdir build_subdir host_subdir target_subdir onestep_TRUE onestep_FALSE onestep host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT multi_basedir toolexecdir toolexeclibdir CC ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE AM_FCFLAGS AM_CFLAGS CFLAGS LIBGFOR_USE_SYMVER_TRUE LIBGFOR_USE_SYMVER_FALSE AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB LIBTOOL SED EGREP FGREP GREP LD DUMPBIN ac_ct_DUMPBIN NM LN_S OBJDUMP ac_ct_OBJDUMP lt_ECHO DSYMUTIL ac_ct_DSYMUTIL NMEDIT ac_ct_NMEDIT LIPO ac_ct_LIPO OTOOL ac_ct_OTOOL OTOOL64 ac_ct_OTOOL64 CPP CPPFLAGS enable_shared enable_static FC FCFLAGS LDFLAGS ac_ct_FC extra_ldflags_libgfortran FPU_HOST_HEADER LIBOBJS LTLIBOBJS'
++ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os build_libsubdir build_subdir host_subdir target_subdir onestep_TRUE onestep_FALSE onestep host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT multi_basedir toolexecdir toolexeclibdir CC ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE AM_FCFLAGS AM_CFLAGS CFLAGS LIBGFOR_USE_SYMVER_TRUE LIBGFOR_USE_SYMVER_FALSE SECTION_FLAGS AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB LIBTOOL SED EGREP FGREP GREP LD DUMPBIN ac_ct_DUMPBIN NM LN_S OBJDUMP ac_ct_OBJDUMP lt_ECHO DSYMUTIL ac_ct_DSYMUTIL NMEDIT ac_ct_NMEDIT LIPO ac_ct_LIPO OTOOL ac_ct_OTOOL OTOOL64 ac_ct_OTOOL64 CPP CPPFLAGS enable_shared enable_static FC FCFLAGS LDFLAGS ac_ct_FC extra_ldflags_libgfortran FPU_HOST_HEADER LIBOBJS LTLIBOBJS'
+ ac_subst_files=''
+ ac_pwd=`pwd`
+ 
+@@ -3500,6 +3500,73 @@
+ fi
+ 
+ 
++# Figure out whether the compiler supports "-ffunction-sections -fdata-sections",
++# similarly to how libstdc++ does it
++ac_test_CFLAGS="${CFLAGS+set}"
++ac_save_CFLAGS="$CFLAGS"
++
++# Check for -ffunction-sections -fdata-sections
++echo "$as_me:$LINENO: checking for gcc that supports -ffunction-sections -fdata-sections" >&5
++echo $ECHO_N "checking for gcc that supports -ffunction-sections -fdata-sections... $ECHO_C" >&6
++CFLAGS='-Werror -ffunction-sections -fdata-sections'
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++int
++main ()
++{
++int foo;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++  (eval $ac_compile) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest.$ac_objext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  ac_fdsections=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ac_fdsections=no
++fi
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++if test "$ac_test_CFLAGS" = set; then
++  CFLAGS="$ac_save_CFLAGS"
++else
++  # this is the suspicious part
++  CFLAGS=""
++fi
++if test x"$ac_fdsections" = x"yes"; then
++  SECTION_FLAGS='-ffunction-sections -fdata-sections'
++fi
++echo "$as_me:$LINENO: result: $ac_fdsections" >&5
++echo "${ECHO_T}$ac_fdsections" >&6
++
++
+ # Find other programs we need.
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+@@ -4287,13 +4354,13 @@
+ else
+   lt_cv_nm_interface="BSD nm"
+   echo "int some_variable = 0;" > conftest.$ac_ext
+-  (eval echo "\"\$as_me:4290: $ac_compile\"" >&5)
++  (eval echo "\"\$as_me:4357: $ac_compile\"" >&5)
+   (eval "$ac_compile" 2>conftest.err)
+   cat conftest.err >&5
+-  (eval echo "\"\$as_me:4293: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
++  (eval echo "\"\$as_me:4360: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+   cat conftest.err >&5
+-  (eval echo "\"\$as_me:4296: output\"" >&5)
++  (eval echo "\"\$as_me:4363: output\"" >&5)
+   cat conftest.out >&5
+   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+     lt_cv_nm_interface="MS dumpbin"
+@@ -5450,7 +5517,7 @@
+   ;;
+ *-*-irix6*)
+   # Find out which ABI we are using.
+-  echo '#line 5453 "configure"' > conftest.$ac_ext
++  echo '#line 5520 "configure"' > conftest.$ac_ext
+   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+@@ -7239,11 +7306,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:7242: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:7309: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:7246: \$? = $ac_status" >&5
++   echo "$as_me:7313: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -7578,11 +7645,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:7581: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:7648: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:7585: \$? = $ac_status" >&5
++   echo "$as_me:7652: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -7683,11 +7750,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:7686: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:7753: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:7690: \$? = $ac_status" >&5
++   echo "$as_me:7757: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -7738,11 +7805,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:7741: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:7808: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:7745: \$? = $ac_status" >&5
++   echo "$as_me:7812: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -10605,7 +10672,7 @@
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 10608 "configure"
++#line 10675 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -10701,7 +10768,7 @@
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 10704 "configure"
++#line 10771 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -11027,7 +11094,7 @@
+ 
+ 
+ # Provide some information about the compiler.
+-echo "$as_me:11030:" \
++echo "$as_me:11097:" \
+      "checking for Fortran compiler version" >&5
+ ac_compiler=`set X $ac_compile; echo $2`
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+@@ -11263,7 +11330,7 @@
+ 
+ 
+ # Provide some information about the compiler.
+-echo "$as_me:11266:" \
++echo "$as_me:11333:" \
+      "checking for Fortran compiler version" >&5
+ ac_compiler=`set X $ac_compile; echo $2`
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+@@ -12003,11 +12070,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:12006: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:12073: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:12010: \$? = $ac_status" >&5
++   echo "$as_me:12077: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -12102,11 +12169,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:12105: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:12172: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:12109: \$? = $ac_status" >&5
++   echo "$as_me:12176: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -12154,11 +12221,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:12157: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:12224: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:12161: \$? = $ac_status" >&5
++   echo "$as_me:12228: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -35350,6 +35417,7 @@
+ s,@CFLAGS@,$CFLAGS,;t t
+ s,@LIBGFOR_USE_SYMVER_TRUE@,$LIBGFOR_USE_SYMVER_TRUE,;t t
+ s,@LIBGFOR_USE_SYMVER_FALSE@,$LIBGFOR_USE_SYMVER_FALSE,;t t
++s,@SECTION_FLAGS@,$SECTION_FLAGS,;t t
+ s,@AS@,$AS,;t t
+ s,@ac_ct_AS@,$ac_ct_AS,;t t
+ s,@AR@,$AR,;t t
+Index: libgfortran/Makefile.in
+===================================================================
+--- a/src/libgfortran/Makefile.in	(.../gcc-4_4-branch)
++++ b/src/libgfortran/Makefile.in	(.../cell-4_4-branch)
+@@ -300,7 +300,7 @@
+ AMTAR = @AMTAR@
+ 
+ # Fortran rules for complex multiplication and division
+-AM_CFLAGS = @AM_CFLAGS@ -fcx-fortran-rules
++AM_CFLAGS = @AM_CFLAGS@ -fcx-fortran-rules $(SECTION_FLAGS)
+ AM_FCFLAGS = @AM_FCFLAGS@
+ AR = @AR@
+ AS = @AS@
+@@ -360,6 +360,9 @@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ RANLIB = @RANLIB@
++
++# Use -ffunction-sections -fdata-sections if supported by the compiler
++SECTION_FLAGS = @SECTION_FLAGS@
+ SED = @SED@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
+Index: libgfortran/configure.ac
+===================================================================
+--- a/src/libgfortran/configure.ac	(.../gcc-4_4-branch)
++++ b/src/libgfortran/configure.ac	(.../cell-4_4-branch)
+@@ -149,6 +149,27 @@
+ AC_MSG_RESULT($gfortran_use_symver)
+ AM_CONDITIONAL(LIBGFOR_USE_SYMVER, [test "x$gfortran_use_symver" = xyes])
+ 
++# Figure out whether the compiler supports "-ffunction-sections -fdata-sections",
++# similarly to how libstdc++ does it
++ac_test_CFLAGS="${CFLAGS+set}"
++ac_save_CFLAGS="$CFLAGS"
++
++# Check for -ffunction-sections -fdata-sections
++AC_MSG_CHECKING([for gcc that supports -ffunction-sections -fdata-sections])
++CFLAGS='-Werror -ffunction-sections -fdata-sections'
++AC_TRY_COMPILE(, [int foo;], [ac_fdsections=yes], [ac_fdsections=no])
++if test "$ac_test_CFLAGS" = set; then
++  CFLAGS="$ac_save_CFLAGS"
++else
++  # this is the suspicious part
++  CFLAGS=""
++fi
++if test x"$ac_fdsections" = x"yes"; then
++  SECTION_FLAGS='-ffunction-sections -fdata-sections'
++fi
++AC_MSG_RESULT($ac_fdsections)
++AC_SUBST(SECTION_FLAGS)
++
+ # Find other programs we need.
+ AC_CHECK_TOOL(AS, as)
+ AC_CHECK_TOOL(AR, ar)
+Index: libgfortran/Makefile.am
+===================================================================
+--- a/src/libgfortran/Makefile.am	(.../gcc-4_4-branch)
++++ b/src/libgfortran/Makefile.am	(.../cell-4_4-branch)
+@@ -33,6 +33,10 @@
+ # Fortran rules for complex multiplication and division
+ AM_CFLAGS += -fcx-fortran-rules
+ 
++# Use -ffunction-sections -fdata-sections if supported by the compiler
++SECTION_FLAGS = @SECTION_FLAGS@
++AM_CFLAGS += $(SECTION_FLAGS)
++
+ gfor_io_src= \
+ io/close.c \
+ io/file_pos.c \
+
+Property changes on: .
+___________________________________________________________________
+Added: svnmerge-integrated
+   + /branches/gcc-4_4-branch:1-159500
+
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libsupc++-vmi_class_type_info.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libsupc++-vmi_class_type_info.diff
@@ -0,0 +1,222 @@
+# DP: Update libsupc++/vmi_class_type_info.cc from the 4.5 branch.
+
+libstdc++-v3/
+
+2009-07-06  Jason Merrill  <jason@redhat.com>
+
+	* libsupc++/vmi_class_type_info.cc (__do_dyncast): Use src2dst hint
+	to defer searching bases that don't overlap the desired address.
+
+gcc/testsuite/
+
+2009-07-06  Jason Merrill  <jason@redhat.com>
+
+	* g++.dg/rtti/dyncast[34].C: New.
+
+Index: gcc/testsuite/g++.dg/rtti/dyncast3.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/rtti/dyncast3.C	(revision
++++ b/src/gcc/testsuite/g++.dg/rtti/dyncast3.C	(revision
+@@ -0,0 +1,81 @@
++// This testcase used to crash while looking in A for my_module.  I'm still
++// not sure it's well-formed, but it works now because of the optimization
++// to look at the expected address first.
++
++// { dg-do run }
++
++extern "C" int puts (const char *);
++extern "C" void abort ();
++
++struct my_object
++{
++  my_object() { puts ("in my_object ctor");}
++  virtual ~my_object() { puts ("in my_object dtor"); }
++};
++
++my_object* my_module_ptr = 0;
++
++struct my_module : my_object
++{
++  my_module()
++  {
++    puts ("in my_module ctor, setting up ptr");
++    my_module_ptr = this;
++  }
++  ~my_module() { puts ("in my_module dtor");}
++};
++
++struct D
++{
++  D() { puts ("in D ctor"); }
++  virtual ~D();
++};
++
++D::~D()
++{
++  puts ("in D dtor");
++  puts ("before DCASTing to my_module*");
++  my_module* m = dynamic_cast<my_module*>(my_module_ptr);
++  if (m != my_module_ptr)
++    abort ();
++  puts ("after DCASTing to my_module*");
++}
++
++struct my_interface
++{
++  my_interface() { puts ("in my_interface ctor");}
++  ~my_interface() { puts ("in my_interface dtor");}
++};
++
++struct myif : virtual my_interface
++{
++  myif() { puts ("in myif ctor");}
++  ~myif() { puts ("in myif dtor");}
++};
++
++struct A: virtual myif
++{
++  A() { puts ("in A ctor"); }
++  ~A() { puts ("in A dtor"); }
++
++  D d;
++};
++
++struct B: virtual myif
++{
++  B() { puts ("in B ctor"); }
++  ~B() { puts ("in B dtor"); }
++
++  D d;
++};
++
++struct C : my_module, A, B
++{
++  C() { puts ("in C ctor");}
++  ~C() { puts ("in C dtor"); }
++};
++
++int main(int, char**)
++{
++  C t;
++}
+Index: gcc/testsuite/g++.dg/rtti/dyncast4.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/rtti/dyncast4.C	(revision
++++ b/src/gcc/testsuite/g++.dg/rtti/dyncast4.C	(revision
+@@ -0,0 +1,26 @@
++// Test to make sure that we keep searching if we don't find the type we
++// want at the expected address.
++
++// { dg-do run }
++
++struct A
++{
++  virtual void f() {};
++};
++
++struct B: A { };
++
++struct C: A { };
++
++struct D: B, C { };
++
++int main()
++{
++  D d;
++  A* ap = static_cast<B*>(&d);
++  C* cp = dynamic_cast<C*>(ap);
++  if (cp == 0)
++    return 1;
++  else
++    return 0;
++}
+Index: libstdc++-v3/libsupc++/vmi_class_type_info.cc
+===================================================================
+--- a/src/libstdc++-v3/libsupc++/vmi_class_type_info.cc	(revision
++++ b/src/libstdc++-v3/libsupc++/vmi_class_type_info.cc	(revision
+@@ -108,7 +108,17 @@
+       return false;
+     }
+ 
++  // If src_type is a unique non-virtual base of dst_type, we have a good
++  // guess at the address we want, so in the first pass try skipping any
++  // bases which don't contain that address.
++  const void *dst_cand = NULL;
++  if (src2dst >= 0)
++    dst_cand = adjust_pointer<void>(src_ptr, -src2dst);
++  bool first_pass = true;
++  bool skipped = false;
++
+   bool result_ambig = false;
++ again:
+   for (std::size_t i = __base_count; i--;)
+     {
+       __dyncast_result result2 (result.whole_details);
+@@ -121,6 +131,20 @@
+         base_access = __sub_kind (base_access | __contained_virtual_mask);
+       base = convert_to_base (base, is_virtual, offset);
+ 
++      if (dst_cand)
++	{
++	  bool skip_on_first_pass = base > dst_cand;
++	  if (skip_on_first_pass == first_pass)
++	    {
++	      // We aren't interested in this base on this pass: either
++	      // we're on the first pass and this base doesn't contain the
++	      // likely address, or we're on the second pass and we checked
++	      // this base on the first pass.
++	      skipped = true;
++	      continue;
++	    }
++	}
++
+       if (!__base_info[i].__is_public_p ())
+         {
+           if (src2dst == -2 &&
+@@ -267,6 +291,14 @@
+         return result_ambig;
+     }
+ 
++  if (skipped && first_pass)
++    {
++      // We didn't find dst where we expected it, so let's go back and try
++      // the bases we skipped (if any).
++      first_pass = false;
++      goto again;
++    }
++
+   return result_ambig;
+ }
+ 
+Index: libstdc++-v3/libsupc++/dyncast.cc
+===================================================================
+--- a/src/libstdc++-v3/libsupc++/dyncast.cc	(revision
++++ b/src/libstdc++-v3/libsupc++/dyncast.cc	(revision
+@@ -28,12 +28,26 @@
+ 
+ 
+ // this is the external interface to the dynamic cast machinery
++/* sub: source address to be adjusted; nonnull, and since the
++ *      source object is polymorphic, *(void**)sub is a virtual pointer.
++ * src: static type of the source object.
++ * dst: destination type (the "T" in "dynamic_cast<T>(v)").
++ * src2dst_offset: a static hint about the location of the
++ *    source subobject with respect to the complete object;
++ *    special negative values are:
++ *       -1: no hint
++ *       -2: src is not a public base of dst
++ *       -3: src is a multiple public base type but never a
++ *           virtual base type
++ *    otherwise, the src type is a unique public nonvirtual
++ *    base type of dst at offset src2dst_offset from the
++ *    origin of dst.  */
+ extern "C" void *
+ __dynamic_cast (const void *src_ptr,    // object started from
+                 const __class_type_info *src_type, // type of the starting object
+                 const __class_type_info *dst_type, // desired target type
+                 ptrdiff_t src2dst) // how src and dst are related
+-{
++  {
+   const void *vtable = *static_cast <const void *const *> (src_ptr);
+   const vtable_prefix *prefix =
+       adjust_pointer <vtable_prefix> (vtable, 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr39429.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr39429.diff
@@ -0,0 +1,59 @@
+# DP: Proposed patch for PR target/39429, an ARM wrong-code error.
+
+2009-07-20  Mikael Pettersson  <mikpe@it.uu.se>
+
+gcc/
+	Backport from mainline:
+	2009-04-20  Ian Lance Taylor  <ian@gcc.gnu.org>
+	Fix enum conversions which are invalid in C++.
+
+	PR target/39429
+	* config/arm/arm.c (adjacent_mem_locations): Fix swapped
+	parameters in const_ok_for_op calls.
+
+gcc/testsuite/
+	PR target/39429
+	* gcc.target/arm/pr39429.c: New test case.
+
+--- a/src/gcc/config/arm/arm.c	2009-06-02 09:18:16.000000000 +0200
++++ b/src/gcc/config/arm/arm.c	2009-07-18 20:14:45.000000000 +0200
+@@ -7401,7 +7401,7 @@ adjacent_mem_locations (rtx a, rtx b)
+       /* Don't accept any offset that will require multiple
+ 	 instructions to handle, since this would cause the
+ 	 arith_adjacentmem pattern to output an overlong sequence.  */
+-      if (!const_ok_for_op (PLUS, val0) || !const_ok_for_op (PLUS, val1))
++      if (!const_ok_for_op (val0, PLUS) || !const_ok_for_op (val1, PLUS))
+ 	return 0;
+ 
+       /* Don't allow an eliminable register: register elimination can make
+--- a/src/gcc/testsuite/gcc.target/arm/pr39429.c	1970-01-01 01:00:00.000000000 +0100
++++ b/src/gcc/testsuite/gcc.target/arm/pr39429.c	2009-07-14 01:21:46.000000000 +0200
+@@ -0,0 +1,28 @@
++/* PR target/39429 */
++/* { dg-do run } */
++/* { dg-options "-O2 -mtune=arm740t" } */
++
++struct obj {
++    unsigned int _filler[270];
++    unsigned int mapsize;
++    unsigned int size;
++};
++
++int __attribute__((noinline)) useOffScreen(struct obj *obj)
++{
++    unsigned int size = obj->size;
++    unsigned int mapsize = obj->mapsize;
++
++    return (mapsize - size) < 16*1024 ? 0 : 1;
++}
++
++int main(void)
++{
++    struct obj obj;
++
++    obj.mapsize = 0;
++    obj.size = 0;
++    if (useOffScreen(&obj) != 0)
++	__builtin_abort();
++    return 0;
++}
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-hg-doc-updates.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-hg-doc-updates.diff
@@ -0,0 +1,997 @@
+# DP: HG documentation updates from the gdc branch up to 20100912.
+
+--- a/src/gcc/d/ChangeLog
++++ b/src/gcc/d/ChangeLog
+@@ -1,3 +1,670 @@
++2010-09-09  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-codegen.cc:
++	Revert part of commit 210, and fix integer representations on gdc-4.4.
++	[844b25646834]
++
++2010-09-07  michaelp  <baseball.mjp@gmail.com>
++
++	* gcc-mars.cc:
++	Removed gcc-mars.cc from top level d/ folder.
++	[e4b1e3753bf5]
++	
++	* Make-lang.in:
++	Updated Make-lang.in for removal of gcc-mars.cc.
++	[db7d6aae8ceb]
++
++	* GDC.html, History, INSTALL, INSTALL.html, README, dmd-script,
++	dmd-script.1, gdc.1:
++	Documentation updates.
++	[e651ed00a16e]
++
++2010-09-03  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-codegen.cc, d-glue.cc, d-objfile.cc:
++	Issue #59 and #60: ICE when goto undefined label and ICE in foreach over
++	member member array in static func
++	[955dc7d43780]
++
++	* d-codegen.cc, d-glue.cc, d-irstate.cc, d-lang.h, dmd/func.c,
++	dmd/statement.c, dmd/statement.h:
++	Issue #54: 1.063 changes in phobos versioning + dmd backend.
++	[4c10fa4a539a]
++
++2010-09-01  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* dmd/cast.c, dmd/impcnvgen.c, dmd2/impcnvgen.c:
++	Bugzilla 1822 - String slicing in 64-bit gdc causes spurious
++	warnings
++	[5efc9014eef8]
++
++	* patches/patch-gcc-4.0.x, patches/patch-gcc-4.1.x, d/patches
++	/patch-gcc-4.2.x, patches/patch-gcc-4.3.x, patches/patch-
++	gcc-4.4.x:
++	Issue #50 - thanks venix1: SjLj expections fail when thrown from catch
++	block
++	[d655a072bbb8]
++
++	* d-builtins2.cc, d-lang.cc, d-spec.c:
++	Removed va_list hack, small change to D2 lang driver.
++	[7a67e4973ace]
++
++2010-08-30  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-codegen.cc:
++	Issue #14: STATIC_CHAIN_EXPR not caught in estimate_num_insns_1()
++	[63c14701ccde]
++
++2010-08-29  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-c-stubs.c, d-glue.cc, d-lang.cc:
++	Add stubs for C_TARGET_OBJS on non-x86 archs.
++	[b530fcd9baab]
++
++	* d-glue.cc:
++	Bugzilla 1669 - this.outer in nested classes gives a bogus pointer
++	[ebce488abf89]
++
++	* d-lang.cc, phobos2/Makefile.am, phobos2/acinclude.m4:
++	Add D_Version2 version predicate.
++	[9808b8987cce]
++
++2010-08-28  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-c-stubs.c, d-decls.cc, d-lang.cc,
++	druntime/compiler/gdc/aaA.d, druntime/compiler/gdc/util/cpuid.d,
++	druntime/gc/basic/gc_c.h, druntime/gc/basic/gc_dyld.c,
++	druntime/gc/basic/gc_freebsd.c, druntime/gc/basic/gcgccextern.d,
++	phobos/internal/gc/gcgccextern.d, phobos/std/loader.d,
++	phobos2/Makefile.am, phobos2/acinclude.m4,
++	phobos2/std/cpuid.d:
++	D2 updates.
++	[ebe4ca2bd83a]
++
++2010-08-27  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d/Make-lang.in, d-spec.c, phobos2/Makefile.am:
++	Add druntime to the GDC driver.
++	[3dbc1c4cd214]
++
++	* druntime/Makefile, druntime/compiler/gdc/dgccmain2.d,
++	druntime/compiler/gdc/lifetime.d, phobos2/gcc/deh.d,
++	phobos2/gcc/unwind_generic.d, phobos2/gcc/unwind_pe.d,
++	phobos2/std/stream.d:
++	Remove Makefile and fix module dependencies in Druntime
++	[6fea2af61a0c]
++
++	* phobos2/Makefile.am, phobos2/acinclude.m4, phobos2/aclocal.m4,
++	phobos2/configure.in, d/setup-gcc.sh:
++	Reorganise D2 Makefile for Druntime
++	[f888b572d19a]
++
++	* d/Make-lang.in:
++	Use BACKENDLIBS rather than GMPLIBS for gdc-4.4
++	[bda0f5d37728]
++
++	* d-glue.cc:
++	Fix ICE in D2 ForeachRange statements
++	[7d35bcb69e7e]
++
++2010-08-26  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* patches/patch-gcc-4.4.x:
++	Regenerate gcc-4.4.x patch
++	[4dfe5494460a]
++
++2010-08-25  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-codegen.h:
++	Fix codegen for addressOf array types, resolves broken va_lists on
++	gdc-4.4.
++	[9463381e1daa]
++
++	* druntime/compiler/gdc/fpmath.d, druntime/compiler/gdc/gcc/*,
++	druntime/druntimelicense.txt, druntime/druntimereadme.txt,
++	druntime/hello.d, druntime/license.txt, druntime/readme.txt:
++	Re-add fpmath.d - previously from removed internal directory.
++	[bf3e292d1a4c]
++
++	* d-builtins2.cc:
++	Slight alteration to va_list type generation on gdc-4.4
++	[e005caeafced]
++
++	* d-codegen.cc, d-glue.cc, d-irstate.cc, d-lang.h:
++	Use own language flag for labels marked 'used'.
++	[d7963235235c]
++
++	* d-lang.cc:
++	Rework of previous commit for Issue #58.
++	[025031c2e274]
++
++2010-08-24  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-lang.cc:
++	Issue #58 - Fixed stack overflow in gdc-4.4
++	[c02f5ac787a8]
++
++2010-08-23  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-codegen.cc:
++	Bugzilla 1813 - ICE on static function parametrized with alias.
++	[2e06ca97b873]
++
++2010-08-22  michaelp  <baseball.mjp@gmail.com>
++
++	* patches/patch-gcc-3.4.x, patches/patch-gcc-4.0.x, d/patches
++	/patch-gcc-4.1.x, patches/patch-gcc-4.2.x, patches/patch-
++	gcc-4.3.x, patches/patch-toplev-3.4.x, patches/patch-
++	toplev-4.0.x, patches/patch-toplev-4.1.x, patches/patch-
++	toplev-4.2.x, patches/patch-toplev-4.3.x:
++	Updated patches for D2/druntime
++	[dc882e7537c0]
++
++2010-08-22  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d/Make-lang.in, d-bi-attrs-44.h, d-builtins.c, d-builtins2.cc,
++	d-codegen.cc, d-decls.cc, d-gcc-includes.h, d-lang.cc,
++	d-objfile.cc, patches/patch-gcc-4.4.x, patches/patch-
++	toplev-4.4.x, d/setup-gcc.sh:
++	Building on GCC-4.4 now supported.
++	[0616ebb4255b]
++
++	* d-lang.cc:
++	Issue #51: 1.062 outstanding issues
++	[9663a271233b]
++
++2010-08-20  michaelp  <baseball.mjp@gmail.com>
++
++	* phobos2/*:
++	Updated phobos2 to 2.020 (not working)
++	[08d9a5b24ff4]
++
++2010-08-20  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-glue.cc:
++	Fix ICE on shorthand if statements.
++	[ef2959fa8184]
++
++2010-08-20  michaelp  <baseball.mjp@gmail.com>
++
++	* d-glue.cc:
++	Fixed problem with continue statements in D2
++	[511f3176ec0d]
++
++2010-08-20  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-lang.cc, druntime/compiler/gdc/arraybyte.d,
++	druntime/compiler/gdc/arraydouble.d,
++	druntime/compiler/gdc/arrayfloat.d,
++	druntime/compiler/gdc/arrayint.d,
++	druntime/compiler/gdc/arrayshort.d, phobos/internal/arraybyte.d,
++	phobos/internal/arraydouble.d, phobos/internal/arrayfloat.d,
++	phobos/internal/arrayint.d, phobos/internal/arrayshort.d,
++	phobos2/internal/arraybyte.d, phobos2/internal/arraydouble.d,
++	phobos2/internal/arrayfloat.d, phobos2/internal/arrayint.d,
++	phobos2/internal/arrayshort.d:
++	Issue #30: D_InlineAsm updates
++	[ce1833f9106a]
++
++2010-08-19  michaelp  <baseball.mjp@gmail.com>
++
++	* d-lang.cc:
++	Fixed JSON option for D2
++	[2118f4d1de83]
++
++	* d/setup-gcc.sh:
++	Updated setup-gcc.sh for libdruntime building
++	[6e7640bc2b3c]
++
++	* patches/patch-toplev-4.1.x, patches/patch-toplev-4.2.x,
++	patches/patch-toplev-4.3.x:
++	Updated toplevel 4.1, 4.2, and 4.3 patches for libdruntime
++	[1df5716f2b88]
++
++	* patches/patch-toplev-3.4.x, patches/patch-toplev-4.0.x:
++	Updated 3.4 + 4.0 toplevel patches to include libdruntime
++	[a74ceca3c239]
++
++	* dmd/func.c:
++	Issue #57: C-style variadic functions broken
++	[ae817bd07dbf]
++
++2010-08-19  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* phobos/*:
++	Updated Phobos to 1.063 - expanded tabs.
++	[bbe96bfd09dd]
++
++2010-08-17  michaelp  <baseball.mjp@gmail.com>
++
++	* d-glue.cc:
++	One of Issue #56. Cannot goto into finally block
++	[22792e6a6253]
++
++2010-08-17  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-codegen.cc, d-glue.cc, d-irstate.cc, d-irstate.h:
++	Bugzilla 1041 - incorrect code gen for scope(exit) inside switch
++	[d472abadf847]
++
++2010-08-16  michaelp  <baseball.mjp@gmail.com>
++
++	* d-glue.cc, dmd/func.c, dmd/statement.c, dmd/statement.h:
++	Temporarily reverted 1.063 change
++	[d89d1a46125d]
++
++2010-08-16  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d/asmstmt.cc, d-apple-gcc.c, d-asm-i386.h, d-builtins.c,
++	d-builtins2.cc, d-c-stubs.c, d-codegen.cc, d-codegen.h,
++	d-convert.cc, d-cppmngl.cc, d-decls.cc, d-gcc-includes.h,
++	d-gcc-real.h, d-glue.cc, d-irstate.cc, d-lang.cc,
++	d-lang.h, d-objfile.cc, d-spec.c, d/dt.cc, d/dt.h,
++	d/gdc_alloca.h, d/symbol.cc:
++	Added GPL onto files missing it, attributed modifications.
++	[4d41771eba7c]
++
++2010-08-15  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-codegen.cc:
++	Some more type conversion updates in glue.
++	[4567e417c0b3]
++
++2010-08-14  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-apple-gcc.c, d-codegen.cc, d-convert.cc, d-glue.cc,
++	d-lang.cc:
++	Remove default_conversion, tighten up signed/unsigned conversions.
++	[c1ae96f4e1a6]
++
++	* d-builtins2.cc, d-codegen.cc, d-glue.cc, d-lang.cc,
++	d-lang.h:
++	Removed references to TREE_UNSIGNED.
++	[4a59c1bbc04c]
++
++	* d-gcc-includes.h:
++	Fixed previous glue commit.
++	[9cac96f771a1]
++
++2010-08-14  michaelp  <baseball.mjp@gmail.com>
++
++	* phobos/std/thread.d:
++	Updated thread_attach bug in Windows
++	[de30c34ef79d]
++
++2010-08-14  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d/asmstmt.cc, d-builtins2.cc, d-codegen.cc, d-gcc-includes.h,
++	d-glue.cc, d-lang.cc, d-objfile.cc:
++	Glue touch-ups, now uses D_USE_MAPPED_LOCATION
++	[6122f6d23a71]
++
++2010-08-13  michaelp  <baseball.mjp@gmail.com>
++
++	* d-cppmngl.cc:
++	Uploaded missing fix from 1.063 merge
++	[fc7de0a268ab]
++
++	* dmd/template.c:
++	Fixed implicit conversion of template parameters
++	[888e3cc8a31d]
++
++	* d-glue.cc, dmd/async.c, dmd/declaration.c,
++	dmd/declaration.h, dmd/dsymbol.c, dmd/dsymbol.h, dmd/enum.c,
++	dmd/enum.h, dmd/expression.c, dmd/func.c, dmd/init.c,
++	dmd/interpret.c, dmd/mars.c, dmd/mars.h, dmd/module.c,
++	dmd/module.h, dmd/mtype.c, dmd/parse.c, dmd/parse.h,
++	dmd/root.c, dmd/statement.c, dmd/statement.h, dmd/todt.c,
++	phobos/internal/deh2.d, phobos/internal/object.d,
++	phobos/std/math.d:
++	Updated to 1.063
++	[f1e726cbcc98]
++
++2010-08-11  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d/Make-lang.in, d-bi-attrs-34.h, d-bi-attrs-341.h, d-bi-
++	attrs-40.h, d-bi-attrs-41.h, d-bi-attrs-42.h, d-bi-attrs-43.h,
++	d-builtins.c:
++	Cleanup d-bi-attrs. Make includes slightly smarter.
++	[349f85192e52]
++
++	* d-codegen.cc:
++	Remove useless trial/error comments in function.
++	[89b4363653f8]
++
++2010-08-10  michaelp  <baseball.mjp@gmail.com>
++
++	* d-codegen.cc:
++	Issue 33 - Sefault with nested array allocation
++	[be805cb4fb58]
++
++2010-08-09  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d/Make-lang.in, patches/patch-gcc-4.2.x, patches/patch-
++	toplev-4.2.x, d/setup-gcc.sh:
++	Building on GCC-4.2 now supported.
++	[c1b55292cd94]
++
++	* d-codegen.cc, d-glue.cc, d-irstate.cc:
++	Apply adaptation of feep's autovec patch (one big thanks!)
++	[fbce9c0580d3]
++
++	* d/asmstmt.cc, d-asm-i386.h:
++	Replace tabs for space in ASM outbuffer.
++	[659f6f38f6f4]
++
++2010-08-09  michaelp  <baseball.mjp@gmail.com>
++
++	* d/dmd-script:
++	Whitespace fix to previous commit.
++	[0fee937d84d4]
++
++	* d-lang.cc, d/dmd-script, d/lang.opt:
++	Added JSON support - Issue 52 + gdmd usage change
++	[35f04cb2339c]
++
++	* d/dmd-script:
++	Added -defaultlib= and -debuglib= into gdmd usage
++	[e34a68f9c427]
++
++	* d/dmd-script:
++	Updated -defaultlib and -debuglib switches for gdmd - Issue 46
++	[181e89b3d8d6]
++
++2010-08-08  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-builtins.c, d-c-stubs.c, d-codegen.cc, d-glue.cc,
++	d-lang.h:
++	Build with GCC-3.4 working again.
++	[58e9b23e110c]
++
++	* d/Make-lang.in, dmd2/array.c, dmd2/mars.c, dmd2/root.c,
++	dmd2/total.h:
++	Updates of previous commit
++	[41657ecdc3fe]
++
++	* d/Make-lang.in, d-decls.cc, dmd/expression.c, dmd2/arrayop.c,
++	dmd2/bit.c, dmd2/complex_t.h, dmd2/e2ir.c, dmd2/lib.h,
++	dmd2/libelf.c, dmd2/link.c, dmd2/man.c, dmd2/port.h,
++	dmd2/template.c, dmd2/tocsym.c, dmd2/toir.c, dmd2/toir.h,
++	dmd2/toobj.c, d/symbol.cc, d/symbol.h:
++	Issue 29 - Remove unused D2 files
++	[fdef7864146b]
++
++	* d-decls.cc:
++	Bugzilla 1296 - ICE when object.d is missing things
++	[e9bfccc01834]
++
++2010-08-06  michaelp  <baseball.mjp@gmail.com>
++
++	* d/dmd-script:
++	More updates to gdmd
++	[d77ee89f6174]
++
++2010-08-05  michaelp  <baseball.mjp@gmail.com>
++
++	* d/dmd-script:
++	Small changes to gdmd; some fixes for Issue 46
++	[9269acda0b86]
++
++2010-08-05  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-decls.cc, d-glue.cc:
++	Fix logic on array ops. Fixup comments for previous commits.
++	[5792cfbf3ae7]
++
++	* d-glue.cc:
++	Issue 43: >>> and >>>= generate wrong code
++	[56caae262c41]
++
++2010-08-02  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-lang.cc:
++	Regression in D1 when building with --enable-checking
++	[6f2adfcabae6]
++
++	* d-spec.c:
++	Check missing argument for -defaultlib
++	[8d59f275476b]
++
++	* d-decls.cc:
++	Issue 47: GDC improperly handles extern(System) and extern(Windows) on
++	Windows
++	[e5b50cb17c57]
++
++2010-07-31  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-codegen.cc, dmd/todt.c:
++	Issue 51: 1.062 outstanding issues
++	[f41ce1e8e5b2]
++
++	* dmd/aav.c, dmd/aav.h, dmd/arrayop.c, dmd/attrib.c,
++	dmd/cast.c, dmd/constfold.c, dmd/dsymbol.c,
++	dmd/expression.c, dmd/imphint.c, dmd/interpret.c,
++	dmd/lexer.c, dmd/mtype.c, dmd/parse.c, dmd/speller.h,
++	dmd/statement.c, dmd/toobj.c, dmd/unittests.c, dmd/utf.c:
++	Line endings, cleanups, and a missing ')'
++	[84378e5ef655]
++
++	* d-codegen.cc, d-glue.cc:
++	Glue updates for previous merge.
++	[a48e13277e67]
++
++2010-07-31  michaelp  <baseball.mjp@gmail.com>
++
++	* d-glue.cc, dmd/*, phobos/std/date.d:
++	Updated to 1.062
++	[9f7927e5f551]
++
++2010-07-30  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-spec.c:
++	Added -defaultlib and -debuglib to allow building with another
++	library other than libphobos.
++	[f7a52f778a09]
++
++	* druntime/*:
++	Initial import of druntime into project.
++	[2f052aaedd25]
++
++	* d-glue.cc:
++	Fix generation of D array concatenation calls.
++	[d70321dcd604]
++
++	* phobos2/acinclude.m4, phobos2/configure, phobos2/configure.in,
++	phobos2/internal/arrayassign.d, phobos2/phobos-ver-syms.in:
++	D2 now defines Posix.
++	[575ed6d347e0]
++
++	* dmd/parse.c, dmd/speller.c:
++	Include header needed for MinGW to build.
++	[5260cab6c448]
++
++2010-07-29  michaelp  <baseball.mjp@gmail.com>
++
++	* phobos2/std/c/stdio.d:
++	Fixed accidentally reapplied Windows patch
++	[d4356fb371ee]
++
++	* d/Make-lang.in, dmd/aav.c, dmd/aav.h, dmd/class.c,
++	dmd/declaration.c, dmd/dsymbol.c, dmd/dsymbol.h,
++	dmd/expression.c, dmd/func.c, dmd/imphint.c, dmd/mars.c,
++	dmd/mars.h, dmd/optimize.c, dmd/scope.c, dmd/speller.c,
++	dmd/struct.c, dmd/template.c, phobos2/std/c/stdio.d:
++	Updated to 1.061
++	[9038432ea1ff]
++
++	* phobos/std/c/stdio.d, phobos2/std/c/stdio.d:
++	Remove stdio.d patches from Issue 21 patch
++	[a53c51fad1bd]
++
++	* d-decls.cc, phobos/std/c/stdio.d, phobos2/std/c/stdio.d:
++	Issue 21 - _iob undefined reference under Windows
++	[ea913c7eec42]
++
++	* d-glue.cc:
++	Fixed array ops bugs from 1.059
++	[92c39c74433f]
++
++	* d/Make-lang.in, dmd/cast.c, dmd/class.c, dmd/declaration.c,
++	dmd/declaration.h, dmd/dsymbol.c, dmd/expression.c,
++	dmd/expression.h, dmd/idgen.c, dmd/init.c, dmd/inline.c,
++	dmd/interpret.c, dmd/json.c, dmd/mars.c, dmd/mtype.c,
++	dmd/parse.c, dmd/speller.c, dmd/speller.h, dmd/statement.h,
++	dmd/unittests.c:
++	Updated to 1.060
++	[1c1cc97db718]
++
++2010-07-28  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d/dmd-script, d/lang-specs.h:
++	Issue 48: gdc/gdmd should be able to compile .di files
++	[976a611f59f3]
++
++	* d-lang.cc, dmd/*, phobos/*:
++	Updated to 1.058
++	[9ac6a02138c2]
++
++	* d/Make-lang.in, dmd/machobj.c:
++	Remove machobj.c from D1
++	[67d109f8fe79]
++
++	* d-lang.cc, d/dmd-script, d/symbol.cc:
++	Issue 42: -Wall should not error out compiler
++	[7593822be7c0]
++
++2010-07-27  michaelp  <baseball.mjp@gmail.com>
++
++	* d/Make-lang.in, d-lang.cc, d/dmd-script, dmd/dsymbol.c,
++	dmd/dsymbol.h, dmd/expression.c, dmd/func.c, dmd/init.c,
++	dmd/inline.c, dmd/interpret.c, dmd/machobj.c, dmd/mars.c,
++	dmd/mars.h, dmd/module.c, dmd/module.h, dmd/mtype.c,
++	dmd/root.c, dmd/root.h, dmd/scope.c, dmd/scope.h,
++	dmd/speller.c, dmd/speller.h, dmd/statement.c,
++	dmd/template.c, d/lang.opt, phobos/internal/aaA.d:
++	Updated to 1.057
++	[b4fb93e94c29]
++
++2010-07-27  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d/Make-lang.in, dmd/array.c, dmd/bit.c, dmd/complex_t.h,
++	dmd/constfold.c, dmd/e2ir.c, dmd/elfobj.c, dmd/expression.c,
++	dmd/irstate.c, dmd/irstate.h, dmd/lib.h, dmd/libelf.c,
++	dmd/libmach.c, dmd/link.c, dmd/man.c, dmd/mars.c,
++	dmd/mem.c, dmd/mem.h, dmd/mtype.c, dmd/port.c, dmd/port.h,
++	dmd/root.c, dmd/tocsym.c, dmd/toir.c, dmd/toir.h:
++	Issue 29 - Remove unused D1 files
++	[d74291c4230b]
++
++	* dmd/template.c, dmd2/template.c:
++	Issue 36: duplicate symbols created for negatively initialized template
++	arugments
++	[1bd9793d8fc6]
++
++	* d-builtins.c:
++	Partial fix for Issue 28
++	[7fb5519947d4]
++
++	* d-lang.cc:
++	Issue 44: strange code in d-asm-1386.h
++	[73c379cc9714]
++
++2010-07-26  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-codegen.cc, d-glue.cc:
++	D2 postblit on struct literals finished!
++	[9ee37bd66bca]
++
++2010-07-25  michaelp  <baseball.mjp@gmail.com>
++
++	* d-lang.cc, d/dmd-script, dmd/*,
++	phobos/internal/arrayfloat.d:
++	Updated to 1.056
++	[4ff162deda23]
++
++2010-07-24  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-glue.cc:
++	D2 postblit updates.
++	[d53a8be7c0ed]
++
++2010-07-23  michaelp  <baseball.mjp@gmail.com>
++
++	* dmd/class.c, dmd/enum.c, dmd/enum.h, dmd/mars.c,
++	dmd/struct.c:
++	Updated to 1.055
++	[9c62fb9d0abf]
++
++	* dmd/expression.c:
++	Fixed spot with wrong patch in it
++	[172855a888e9]
++
++	* dmd/*, phobos/internal/gc/gcx.d:
++	Updated to 1.054
++	[64df5a74b2c4]
++
++2010-07-21  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-lang.cc:
++	Fixed warnings in d-lang.cc (thanks Trass3r)
++	[7a3c1ae0b625]
++
++	* d-asm-i386.h:
++	Fix cast warnings in d-asm-i386.h
++	[fa9b66399a13]
++
++	* dmd/lexer.c, dmd2/lexer.c:
++	Fix buffer overflow in certain error messages
++	[b91574453f5e]
++
++	* d-asm-i386.h:
++	Correctly check align value in asm.
++	[d5a0f3619810]
++
++2010-07-20  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-glue.cc, dmd/root.c, dmd/statement.c, dmd/template.c,
++	dmd/template.h, phobos/std/c/stddef.d:
++	Quick updates to D1 and postblit code.
++	[214fbfbf5f3f]
++
++	* d-builtins2.cc, d-codegen.cc, d-codegen.h, d-glue.cc,
++	dmd/expression.c, dmd/func.c, dmd/machobj.c, dmd/mtype.c,
++	dmd/parse.c, dmd/statement.c, dmd/statement.h, dmd/toobj.c,
++	phobos/internal/gc/gc.d:
++	Some whitespace corrections.
++	[c9c54a275526]
++
++2010-07-20  michaelp  <baseball.mjp@gmail.com>
++
++	* d-builtins2.cc, d-codegen.cc, d-codegen.h, d-glue.cc,
++	dmd/*, phobos/*:
++	Updated to 1.053
++	[f02a96cfc1de]
++
++2010-07-20  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-glue.cc:
++	Quick revision updates
++	[c79811b4f1fc]
++
++2010-07-19  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* d-glue.cc, dmd2/attrib.c, dmd2/cast.c, dmd2/cond.c,
++	dmd2/constfold.c, dmd2/declaration.c, dmd2/declaration.h,
++	dmd2/e2ir.c, dmd2/expression.c, dmd2/func.c,
++	dmd2/impcnvgen.c, dmd2/lexer.c, dmd2/lexer.h, dmd2/link.c,
++	dmd2/mars.c, dmd2/mtype.c, dmd2/mtype.h, dmd2/parse.c,
++	dmd2/parse.h, dmd2/statement.c, dmd2/toir.c:
++	Updated to 2.020 - Frontend Only
++	[676f0aa79458]
++
++2010-07-17  Iain Buclaw  <ibuclaw@ubuntu.com>
++
++	* phobos2/Makefile.in:
++	libgphobos2 Makefile fixes.
++	[c4acdacfddd2]
++
+ 2010-07-16  Iain Buclaw  <ibuclaw@ubuntu.com>
+ 
+ 	Merge with DMD 2.019
+--- a/src/gcc/d/dmd-script.1
++++ b/src/gcc/d/dmd-script.1
+@@ -1,8 +1,8 @@
+-.TH dmd 1
++.TH gdmd 1
+ .SH NAME
+-dmd - wrapper script for gdc that emulates the dmd command
++gdmd - wrapper script for gdc that emulates the dmd command
+ .SH SYNOPSIS
+-.B dmd
++.B gdmd
+ files.d
+ ...
+ .I { -switch }
+@@ -11,56 +11,98 @@
+ .IP files.htm
+ .IP files.html
+ D source files
++.IP files.di
++D interface files
+ .IP files.o  
+ Object files to link in
+ .IP files.a
+ Library files to link in
+-.IP -vdmd
+-Print commands executed by this wrapper script
+-.IP -q<arg1>[,<arg2>,<arg3>,...]
+-Pass the comma-separated arguments to gdc
++.IP -arch ...
++pass -arch option to gdc
+ .IP -c
+ compile only, do not link
+-.IP  -d
++.IP -cov
++do code coverage analysis
++.IP -d
+ allow deprecated features
+-.IP  -g
++.IP -debug
++compile in debug code
++.IP -debug=level
++compile in debug code <= level
++.IP -debug=ident
++compile in debug code identified by ident
++.IP -deps=filename
++write module dependencies to filename
++.IP -g
+ add symbolic debug info
+-.IP  -gt
++.IP -gt
+ add trace profiling hooks (not supported under linux)
+-.IP  -v
+-verbose
+-.IP  -O
++.IP -H
++generate 'header' file
++.IP -Hdhdrdir
++write 'header' file to hdrdir directory
++.IP -Hffilename
++write 'header' file to filename
++.IP -inline
++do function inlining
++.IP -Llinkerflag
++pass linkerflag to linker
++.IP -lib
++generate library
++.IP -O
+ optimize
+-.IP  -odobjdir
++.IP -o-
++do not write object file
++.IP -odobjdir
+ write object files to directory objdir
+-.IP  -offilename
++.IP -offilename
+ name output file to filename
+-.IP  -op
++.IP -op
+ do not strip paths from source file
+-.IP  -Ipath
++.IP -Ipath
+ where to look for imports
+ 
+ .I path
+ is a ; separated list of paths. Multiple -I's can be used, and the paths are searched in the same order.
+-.IP  -Llinkerflag
+-pass linkerflag to linker
+-.IP  -debug
+-compile in debug code
+-.IP  -debug=level
+-compile in debug code <= level
+-.IP  -debug=ident
+-compile in debug code identified by ident
+-.IP  -inline
+-do function inlining
+-.IP  -release
++.IP -pipe
++use pipes instead of intermediate files
++.IP -profile
++profile runtime performance
++.IP -quiet
++suppress unnecessary error messages
++.IP -q<arg1>[,<arg2>,<arg3>,...]
++Pass the comma-separated arguments to gdc
++.IP -release
+ compile release version
+-.IP  -unittest
++.IP -run
++run resulting program, passing args
++.IP -unittest
+ compile in unit tests
+-.IP  -version=level
++.IP -v
++verbose
++.IP -vdmd
++Print commands executed by this wrapper script
++.IP -version=level
+ compile in version code >= level
+-.IP  -version=ident
++.IP  version=ident
+ compile in version code identified by ident
++.IP -X
++generate JSON file
++.IP -Xffilename
++write JSON to filename
++
+ .SH SEE ALSO
+ .BR gdc(1)
++
+ .SH AUTHOR
+-Copyright (C) 2004 David Friedman
++Copyright
++
++(C) 2004 David Friedman
++
++Modified by
++
++(C) 2010 Iain Buclaw
++
++(C) 2010 Michael Parrott
++
++(C) 2010 Vincenzo Ampolo
+--- a/src/gcc/d/gdc.1
++++ b/src/gcc/d/gdc.1
+@@ -14,18 +14,22 @@
+ .IP files.htm
+ .IP files.html
+ D source files
++.IP files.di
++D interface files
+ .IP files.o  
+ Object files to link in
+ .IP files.a
+ Library files to link in
+-.IP  -frelease
+-compile release version
+-.IP  -funittest
+-compile in unit tests
++.IP -fall-sources
++For each source file on the command line, semantically process each file
++preceding it.  Use this if compilation errors occur due to complicated
++.IP -f[no-]bounds-check
++Controls array bounds checking
++circular module references.  This will slow compilation noticeably.
+ .IP  -fdeprecated
+ allow deprecated features
+-.IP  -fversion=ident
+-compile in version code identified by ident
++.IP  -fdeps=<filename>
++output module dependencies to <filename>
+ .IP -femit-templates[=full|private|none|auto]
+ Controls whether or not template code is emitted.
+ 
+@@ -41,13 +45,34 @@
+ For targets that support templates, the "full" mode is used. 
+ Otherwise, the "private" mode is used.
+ .RE
+-.IP -f[no-]bounds-check
+-Controls array bounds checking
+-.IP -fall-sources
+-For each source file on the command line, semantically process each file
+-preceding it.  Use this if compilation errors occur due to complicated
+-circular module references.  This will slow compilation noticeably.
++
++.IP  -fintfc
++generate D interface files
++.IP  -fintfc-dir=<dir>
++write D interface files to directory <dir>
++.IP -fintfc-file=<filename>
++wite D interface file to <filename>
++.IP  -frelease
++compile release version
++.IP  -funittest
++compile in unit tests
++.IP  -fversion=ident
++compile in version code identified by ident
++.IP  -fXf=<filename>
++output JSON to <filename>
++
+ .SH SEE ALSO
+ .BR gcc(1)
++
+ .SH AUTHOR
+-Copyright (C) 2004 David Friedman
++Copyright
++
++(C) 2004 David Friedman
++
++Modified by
++
++(C) 2010 Iain Buclaw
++
++(C) 2010 Michael Parrott
++
++(C) 2010 Vincenzo Ampolo
+--- a/src/gcc/d/GDC.html
++++ b/src/gcc/d/GDC.html
+@@ -10,7 +10,7 @@
+ Last update: August 22, 2007<br>
+ <h3>Supported Systems</h3>
+ <ul>
+-  <li>GCC 3.4.x, 4.0.x, 4.1.x<br>
++  <li>GCC 3.4.x, 4.0.x, 4.1.x, 4.2.x, 4.3.x, 4.4.x<br>
+   </li>
+   <li>Linux (tested on Fedora Core 5 x86, x86_64, and PowerPC)<br>
+   </li>
+@@ -46,13 +46,13 @@
+ 
+ 
+ 
+-  <li><a href="http://sourceforge.net/projects/dgcc">Main
++  <li><a href="http://bitbucket.org/goshawk/gdc/wiki/Home">Main
+ package</a></li>
+ 
+ 
+ 
+ 
+-  <li><a href="install.html">Build Instructions</a></li>
++  <li><a href="INSTALL.html">Build Instructions</a></li>
+ 
+ 
+ 
+@@ -72,7 +72,7 @@
+ 
+ 
+ 
+-  <li><a href="http://dgcc.sourceforge.net/">GDC: D
++  <li><a href="http://bitbucket.org/goshawk/gdc">GDC: D
+ Compiler for GCC</a><br>
+ 
+ 
+@@ -147,11 +147,11 @@
+ 
+ 
+ David Friedman<br>
+-
+-
+-
+-
+ e-mail: dvdfrdmn &lt;at&gt; users.sf.net<br>
++Iain Buclaw<br>
++e-mail: ibuclaw &lt;at&gt; ubuntu.com<br>
++Michael Parrott<br>
++e-mail: baseball.mjp &lt;at&gt; gmail.com<br>
+ 
+ 
+ 
+--- a/src/gcc/d/History
++++ b/src/gcc/d/History
+@@ -1,4 +1,10 @@
+-0.25:
++0.25: (Future release)
++  * Support for GCC, 4.2.x, 4.3.x, and 4.4.x added
++  * Updated D1 to 1.063
++  * Updated D2 to 2.020
++  * Added druntime support
++  * Fixed Bugzilla ...
++  * Fixed Bitbucket issues ...
+ 
+ 0.24:
+   * Removed support for GCC 3.3.x
+--- a/src/gcc/d/README
++++ b/src/gcc/d/README
+@@ -12,7 +12,7 @@
+ 
+ Supported Systems
+ 
+-    * GCC 3.4.x, 4.0.x, 4.1.x
++    * GCC 3.4.x, 4.0.x, 4.1.x, 4.2.x, 4.3.x, 4.4.x
+     * Linux (tested on Fedora Core 5 x86, x86_64, and PowerPC)
+     * Mac OS X 10.3.9 and 10.4.x
+     * FreeBSD 6.x
+@@ -35,14 +35,15 @@
+ Downloads
+ 
+     * Main package
+-      http://sourceforge.net/projects/dgcc
++      http://bitbucket.org/goshawk/gdc/wiki/Home
+     * Build Instructions
+-      http://dgcc.sourceforge.net/gdc/install.html
++      http://bitbucket.org/goshawk/gdc/wiki/Home#installation
+       (or see INSTALL included in the main package)
+ 
+ Links
+ 
+-    * This Project -- http://dgcc.sourceforge.net/
++    * This Project -- http://bitbucket.org/goshawk/gdc/wiki/Home
++    * Previous home -- http://dgcc.sourceforge.net/
+     * The D Programming Language -- http://www.digitalmars.com/d/
+     * D Links Page -- http://digitalmars.com/d/dlinks.html
+     * The D.gnu newsgroup -- news://news.digitalmars.com/D.gnu
+@@ -54,6 +55,10 @@
+ Contact
+ David Friedman
+ e-mail: dvdfrdmn@users.sf.net
++Iain Buclaw
++e-mail: ibuclaw@ubuntu.com
++Michael Parrott
++e-mail: baseball.mjp@gmail.com
+ 
+ Status
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libstdc++-arm-no-check.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libstdc++-arm-no-check.diff
@@ -0,0 +1,12 @@
+# DP: Don't run the libstdc++-v3 testsuite on arm*-*-linux-gnueabi
+
+--- a/src/libstdc++-v3/testsuite/Makefile.in~	2010-06-12 15:16:18.401082211 +0200
++++ b/src/libstdc++-v3/testsuite/Makefile.in	2010-06-12 15:21:47.091076028 +0200
+@@ -556,6 +556,7 @@
+ 
+ # Run the testsuite in normal mode.
+ check-DEJAGNU $(check_DEJAGNU_normal_targets): check-DEJAGNU%: site.exp
++	case "${target}" in arm*-*-linux-gnueabi) exit 0;; esac; \
+ 	AR=$(AR); export AR; \
+ 	RANLIB=$(RANLIB); export RANLIB; \
+ 	if [ -z "$*$(filter-out --target_board=%, $(RUNTESTFLAGS))" ] \
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-build-id.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-build-id.diff
@@ -0,0 +1,114 @@
+# DP: Add configure check if linker supports --build-id
+
+Index: a/src/gcc/configure.ac
+===================================================================
+--- a/src/gcc/configure.ac	(revision 146981)
++++ b/src/gcc/configure.ac	(working copy)
+@@ -3510,6 +3510,41 @@
+     ;;
+ esac
+ 
++AC_CACHE_CHECK(linker --build-id support,
++  gcc_cv_ld_buildid,
++  [gcc_cv_ld_buildid=no
++  if test $in_tree_ld = yes ; then
++    if test "$gcc_cv_gld_major_version" -eq 2 -a \
++       "$gcc_cv_gld_minor_version" -ge 18 -o \
++       "$gcc_cv_gld_major_version" -gt 2 \
++       && test $in_tree_ld_is_elf = yes; then
++      gcc_cv_ld_buildid=yes
++    fi
++  elif test x$gcc_cv_ld != x; then
++    if $gcc_cv_ld --help 2>/dev/null | grep build-id > /dev/null; then
++      gcc_cv_ld_buildid=yes
++    fi
++  fi])
++if test x"$gcc_cv_ld_buildid" = xyes; then
++  AC_DEFINE(HAVE_LD_BUILDID, 1,
++  [Define if your linker supports --build-id.])
++fi
++
++AC_ARG_ENABLE(linker-build-id,
++[  --enable-linker-build-id
++                          compiler will always pass --build-id to linker],
++[],
++enable_linker_build_id=no)
++
++if test x"$enable_linker_build_id" = xyes; then
++  if test x"$gcc_cv_ld_buildid" = xyes; then
++    AC_DEFINE(ENABLE_LD_BUILDID, 1,
++    [Define if gcc should always pass --build-id to linker.])
++  else
++    AC_MSG_WARN(--build-id is not supported by your linker; --enable-linker-build-id ignored)
++  fi
++fi
++
+ AC_CACHE_CHECK(linker --sysroot support,
+   gcc_cv_ld_sysroot,
+   [gcc_cv_ld_sysroot=no
+Index: a/src/gcc/gcc.c
+===================================================================
+--- a/src/gcc/gcc.c	(revision 146981)
++++ b/src/gcc/gcc.c	(working copy)
+@@ -730,6 +730,13 @@
+ #endif
+ #endif
+ 
++#ifndef LINK_BUILDID_SPEC
++# if defined(HAVE_LD_BUILDID) && defined(ENABLE_LD_BUILDID)
++#  define LINK_BUILDID_SPEC "%{!r:--build-id} "
++# endif
++#endif
++
++
+ /* -u* was put back because both BSD and SysV seem to support it.  */
+ /* %{static:} simply prevents an error message if the target machine
+    doesn't handle -static.  */
+@@ -1844,9 +1851,16 @@
+     asm_spec = XOBFINISH (&obstack, const char *);
+   }
+ #endif
+-#ifdef LINK_EH_SPEC
++
++#if defined LINK_EH_SPEC || defined LINK_BUILDID_SPEC
++# ifdef LINK_BUILDID_SPEC
++  /* Prepend LINK_BUILDID_SPEC to whatever link_spec we had before.  */
++  obstack_grow (&obstack, LINK_BUILDID_SPEC, sizeof(LINK_BUILDID_SPEC) - 1);
++# endif
++# ifdef LINK_EH_SPEC
+   /* Prepend LINK_EH_SPEC to whatever link_spec we had before.  */
+   obstack_grow (&obstack, LINK_EH_SPEC, sizeof(LINK_EH_SPEC) - 1);
++# endif
+   obstack_grow0 (&obstack, link_spec, strlen (link_spec));
+   link_spec = XOBFINISH (&obstack, const char *);
+ #endif
+Index: a/src/gcc/config.in
+===================================================================
+--- a/src/gcc/config.in	(revision 146981)
++++ b/src/gcc/config.in	(working copy)
+@@ -101,6 +101,12 @@
+ #endif
+ 
+ 
++/* Define if gcc should always pass --build-id to linker. */
++#ifndef USED_FOR_TARGET
++#undef ENABLE_LD_BUILDID
++#endif
++
++
+ /* Define to 1 if translation of program messages to the user's native
+    language is requested. */
+ #ifndef USED_FOR_TARGET
+@@ -1025,6 +1031,12 @@
+ #endif
+ 
+ 
++/* Define if your linker supports --build-id. */
++#ifndef USED_FOR_TARGET
++#undef HAVE_LD_BUILDID
++#endif
++
++
+ /* Define if your linker supports --demangle option. */
+ #ifndef USED_FOR_TARGET
+ #undef HAVE_LD_DEMANGLE
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libgomp-omp_h-multilib.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libgomp-omp_h-multilib.diff
@@ -0,0 +1,19 @@
+# DP: Fix up omp.h for multilibs.
+
+2008-06-09  Jakub Jelinek  <jakub@redhat.com>
+
+	* omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs.
+
+--- a/src/libgomp/omp.h.in.jj	2008-06-09 13:34:05.000000000 +0200
++++ b/src/libgomp/omp.h.in	2008-06-09 13:34:48.000000000 +0200
+@@ -42,8 +42,8 @@ typedef struct
+ 
+ typedef struct
+ {
+-  unsigned char _x[@OMP_NEST_LOCK_SIZE@] 
+-    __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@)));
++  unsigned char _x[8 + sizeof (void *)] 
++    __attribute__((__aligned__(sizeof (void *))));
+ } omp_nest_lock_t;
+ #endif
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-stubs.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-stubs.diff
@@ -0,0 +1,118 @@
+# DP: Added stubs for various functions referenced by $(C_TARGET_OBJS)
+
+--- a/src/gcc/d/d-builtins.c	2010-08-19 12:30:20.000000000 +0100
++++ b/src/gcc/d/d-builtins.c	2010-09-12 10:05:46.654888000 +0100
+@@ -76,7 +76,12 @@
+ #error "Version of GCC is not supported."
+ #endif
+ 
+-#if D_GCC_VER >= 41
++
++/* Nonzero if an ISO standard was selected.  It rejects macros in the
++   user's namespace.  */
++
++/*extern*/ int flag_iso;
++
+ /* Nonzero means enable C89 Amendment 1 features.  */
+ 
+ /*extern*/ int flag_isoc94;
+@@ -84,7 +89,7 @@
+ /* Nonzero means use the ISO C99 dialect of C.  */
+ 
+ /*extern*/ int flag_isoc99;
+-#endif
++
+ 
+ /* Used to help initialize the builtin-types.def table.  When a type of
+    the correct size doesn't exist, use error_mark_node instead of NULL.
+--- a/src/gcc/d/d-c-stubs.c	2010-08-19 12:30:20.000000000 +0100
++++ b/src/gcc/d/d-c-stubs.c	2010-08-29 11:41:16.020473123 +0100
+@@ -31,6 +31,7 @@
+    link against function in the C front end.  These definitions
+    satisfy the link requirements, but should never be executed. */
+ 
++void
+ add_cpp_dir_path (cpp_dir *p, int chain)
+ {
+     /* nothing */
+@@ -48,6 +49,41 @@
+     /* nothing */
+ }
+ 
++tree
++default_conversion (tree exp)
++{
++    return exp;
++}
++
++tree
++build_binary_op (location_t location, enum tree_code code,
++		 tree orig_op0, tree orig_op1, int convert_p)
++{
++#if D_GCC_VER >= 40
++    gcc_assert(0);
++#endif
++    return NULL_TREE;
++}
++
++tree
++build_unary_op (location_t location,
++		enum tree_code code, tree xarg, int flag)
++{
++#if D_GCC_VER >= 40
++    gcc_assert(0);
++#endif
++    return NULL_TREE;
++}
++
++tree
++build_indirect_ref (location_t loc, tree ptr, const char *errorstring)
++{
++#if D_GCC_VER >= 40
++    gcc_assert(0);
++#endif
++    return NULL_TREE;
++}
++
+ enum { unused } c_language;
+ 
+ enum cpp_ttype
+--- a/src/gcc/d/d-gcc-includes.h	2010-08-29 21:11:57.875486089 +0100
++++ b/src/gcc/d/d-gcc-includes.h	2010-08-29 21:10:24.335459843 +0100
+@@ -44,6 +44,23 @@
+ #include "config.h"
+ #include "system.h"
+ 
++/* Those are used in TARGET_OS_CPP_BUILTINS in some gcc/config/<arch>/<arch>.c
++   (alpha, mips, arm and a few others) for some builtin_defines such
++   __LANGUAGE_C_PLUS_PLUS but are defined in c-common.h. */
++#ifndef c_dialect_cxx
++#  define c_dialect_cxx()      0
++#endif
++#ifndef c_dialect_objc
++#  define c_dialect_objc()     0
++#endif
++
++/* Even if they are defined in d-apple-gcc.c and d-c-stubs.c, they are also
++   used in config/mips (as in config/darwin), so as we don't /need/ them,
++   better to define an empty macro here. */
++#ifndef builtin_define_with_value
++#  define builtin_define_with_value(macro, expansion, is_str)
++#endif
++
+ /* Before gcc 4.0, <stdbool.h> was included before defining bool.  In 4.0,
+    it is always defined as "unsigned char" unless __cplusplus.  Have to make
+    sure the "bool" under c++ is the same so that structs are laid out
+--- a/src/gcc/d/d-lang.cc	2010-08-29 21:10:24.343463863 +0100
++++ b/src/gcc/d/d-lang.cc	2010-08-29 21:11:02.459458778 +0100
+@@ -442,8 +442,9 @@
+     {
+ 	line_maps lm;
+ 	cpp_reader * pfile; // Target macros below expect this identifier.
+-	int flag_iso = 0;   // ditto
++	extern int flag_iso;// ditto
+ 
++	flag_iso = 0;
+ 	linemap_init(& lm);
+ #if D_GCC_VER >= 43
+ 	lm.reallocator = NULL;
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ignore-comp-fail.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ignore-comp-fail.diff
@@ -0,0 +1,19 @@
+# DP: Ignore the bootstrap comparision failure
+
+---
+ Makefile.in |    4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -53636,7 +53636,9 @@ compare:
+ 	if [ -f .bad_compare ]; then \
+ 	  echo "Bootstrap comparison failure!"; \
+ 	  cat .bad_compare; \
+-	  exit 1; \
++	  echo ""; \
++	  echo "Ignore the comparision failure!"; \
++	  true; \
+ 	else \
+ 	  echo Comparison successful.; \
+ 	fi ; \
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-bug589164.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-bug589164.diff
@@ -0,0 +1,63 @@
+DP: Backport a patch from GCC 4.5 that fixes Debian bug #589164.
+
+commit e24057574351e460afdd3ab007c36f34c7ae7398
+Author: charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date:   Fri Apr 17 12:12:07 2009 +0000
+
+    2009-04-17  Thomas Quinot  <quinot@adacore.com>
+    
+    	* exp_ch7.adb (Expand_Ctrl_Function_Call): Remove incorrect special
+    	case for the case of an aggregate component, the attach call for the
+    	result is actually needed.
+    
+    	* exp_aggr.adb (Backend_Processing_Possible): Backend processing for
+    	an array aggregate must be disabled if the component type requires
+    	controlled actions.
+    
+    git-svn-id: svn://gcc.gnu.org/svn/gcc/trunk@146254 138bc75d-0d04-0410-961f-82ee72b054a4
+
+Index: b/src/gcc/ada/exp_aggr.adb
+===================================================================
+--- a/src/gcc/ada/exp_aggr.adb
++++ b/src/gcc/ada/exp_aggr.adb
+@@ -505,6 +505,8 @@
+    --    9. There cannot be any discriminated record components, since the
+    --       back end cannot handle this complex case.
+ 
++   --   10. No controlled actions need to be generated for components.
++
+    function Backend_Processing_Possible (N : Node_Id) return Boolean is
+       Typ : constant Entity_Id := Etype (N);
+       --  Typ is the correct constrained array subtype of the aggregate
+@@ -579,9 +581,9 @@
+    --  Start of processing for Backend_Processing_Possible
+ 
+    begin
+-      --  Checks 2 (array must not be bit packed)
++      --  Checks 2 (array not bit packed) and 10 (no controlled actions)
+ 
+-      if Is_Bit_Packed_Array (Typ) then
++      if Is_Bit_Packed_Array (Typ) or else Needs_Finalization (Typ) then
+          return False;
+       end if;
+ 
+Index: b/src/gcc/ada/exp_ch7.adb
+===================================================================
+--- a/src/gcc/ada/exp_ch7.adb
++++ b/src/gcc/ada/exp_ch7.adb
+@@ -1403,15 +1403,6 @@
+ 
+       --    Attach_To_Final_List (_Lx, Resx (Resx'last)._controller, 3);
+ 
+-      --  If the context is an aggregate, the call will be expanded into an
+-      --  assignment, and the attachment will be done when the aggregate
+-      --  expansion is complete. See body of Exp_Aggr for the treatment of
+-      --  other controlled components.
+-
+-      if Nkind (Parent (N)) = N_Aggregate then
+-         return;
+-      end if;
+-
+       --  Case where type has controlled components
+ 
+       if Has_Controlled_Component (Rtype) then
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-libgnatvsn.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-libgnatvsn.diff
@@ -0,0 +1,1564 @@
+# DP: - Introduce a new shared library named libgnatvsn, containing
+# DP:   common components of GNAT under the GNAT-Modified GPL, for
+# DP:   use in GNAT tools, ASIS, GLADE and GPS.   Link the gnat tools
+# DP:   against this new library.
+
+# This patch seems large, but the hunks in Makefile.in are actually
+# generated from Makefile.def using autogen.
+
+# !!! Must be applied after ada-link-lib.dpatch
+
+Index: b/src/gnattools/Makefile.in
+===================================================================
+--- a/src/gnattools/Makefile.in
++++ b/src/gnattools/Makefile.in
+@@ -38,10 +38,11 @@
+ CFLAGS=-O2 -Wall
+ INCLUDES = -I@srcdir@/../gcc/ada -I@srcdir@/../gcc
+ ADA_CFLAGS=-O2 -gnatn
+-ADA_INCLUDES=-nostdinc -I- -I. -I../gcc/ada/rts -I@srcdir@/../gcc/ada
++ADA_INCLUDES=-nostdinc -I- -I. -I../gcc/ada/rts -I../libgnatvsn
+ LIB_VERSION=$(strip $(shell grep ' Library_Version :' \
+-              @srcdir@/../gcc/ada/gnatvsn.ads | sed -e 's/.*"\(.*\)".*/\1/'))
++              ../libgnatvsn/gnatvsn.ads | sed -e 's/.*"\(.*\)".*/\1/'))
+ ADA_LIBS := -L../gcc/ada/rts -lgnat-$(LIB_VERSION)
++ADA_LIBS += -L../libgnatvsn -lgnatvsn
+ 
+ # We will use the just-built compiler to compile and link everything.
+ GCC=../gcc/xgcc -B../gcc/
+@@ -67,62 +68,34 @@
+ # Since we don't have gnatmake, we must specify the full list of
+ # object files necessary to build gnatmake and gnatlink.
+ # TODO: remove from these lists the objects that are part of
+-# libgnatvsn and libgnatprj.
++# libgnatprj.
+ GNATLINK_OBJS = \
+ ali.o \
+-alloc.o \
+ butil.o \
+-casing.o \
+-csets.o \
+-debug.o \
+ fmap.o \
+-fname.o \
+ gnatlink.o \
+-gnatvsn.o \
+-hostparm.o \
+ indepsw.o \
+-namet.o \
+-opt.o \
+ osint.o \
+-output.o \
+ prefix.o \
+ rident.o \
+ sdefault.o \
+-snames.o \
+ stylesw.o \
+ switch.o \
+-table.o \
+ targparm.o \
+-tree_io.o \
+-types.o \
+-validsw.o \
+-version.o \
+-widechar.o
++validsw.o
+ 
+ GNATMAKE_OBJS = \
+ ali-util.o \
+ ali.o \
+-alloc.o \
+-atree.o \
+ binderr.o \
+ butil.o \
+-casing.o \
+-csets.o \
+-debug.o \
+-einfo.o\
+-elists.o \
+ err_vars.o \
+ erroutc.o \
+ errutil.o \
+ fmap.o \
+ fname-sf.o \
+ fname-uf.o \
+-fname.o \
+ gnatmake.o \
+-gnatvsn.o \
+-hostparm.o \
+-krunch.o \
+-lib.o \
+ make.o \
+ makeusg.o \
+ makeutl.o \
+@@ -132,12 +105,8 @@
+ mlib-tgt-specific.o \
+ mlib-utl.o \
+ mlib.o \
+-namet.o \
+-nlists.o \
+-opt.o \
+ osint-m.o \
+ osint.o \
+-output.o \
+ prefix.o \
+ prj-attr-pm.o \
+ prj-attr.o \
+@@ -155,47 +124,58 @@
+ prj-util.o \
+ prj.o \
+ rident.o \
+-scans.o \
+ scng.o \
+ sdefault.o \
+ sfn_scan.o \
+-sinfo.o \
+ sinput-c.o \
+ sinput-p.o \
+-sinput.o \
+-snames.o \
+-stand.o \
+-stringt.o \
+ styleg.o \
+ stylesw.o \
+ switch-m.o \
+ switch.o \
+-table.o \
+ targparm.o \
+ tempdir.o \
+-tree_io.o \
+-types.o \
+-uintp.o \
+-uname.o \
+-urealp.o \
+ usage.o \
+ validsw.o \
+-version.o \
+-widechar.o \
+ $(EXTRA_GNATMAKE_OBJS)
+ 
++EXTRA_TOOLS_OBJS = \
++bcheck.o \
++binde.o \
++bindgen.o \
++bindusg.o \
++clean.o \
++gprep.o \
++makegpr.o \
++osint-b.o \
++osint-l.o \
++prep.o \
++prj-makr.o \
++prj-pp.o \
++switch-b.o \
++vms_conv.o \
++vms_data.o \
++xr_tabls.o \
++xref_lib.o
++
++OBJECTS = $(GNATLINK_OBJS) $(GNATMAKE_OBJS) $(EXTRA_TOOLS_OBJS)
++
+ # Makefile targets
+ # ----------------
+ 
+ .PHONY: gnattools gnattools-native gnattools-cross regnattools
+ gnattools: @default_gnattools_target@
+ 
+-# Build directory for the tools. Let's copy the target-dependent
+-# sources using the same mechanism as for gnatlib. The other sources are
+-# accessed using the vpath directive.
++BODIES := $(foreach f,$(OBJECTS),$(wildcard $(patsubst %.o,@srcdir@/../gcc/ada/%.adb,$(f))))
++SPECS  := $(foreach f,$(OBJECTS),$(wildcard $(patsubst %.o,@srcdir@/../gcc/ada/%.ads,$(f))))
++
++$(notdir $(SPECS) $(BODIES)): stamp-gnattools-sources
+ 
+ stamp-gnattools-sources:
+-	$(LN_S) ../gcc/ada/sdefault.adb .
++	for file in $(BODIES) $(SPECS); do \
++	   $(LN_S) -f $$file .; \
++	done
++	rm -f sdefault.adb; $(LN_S) ../gcc/ada/sdefault.adb .
+ 	$(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
+ 	          rm -f $(word 1,$(subst <, ,$(PAIR)));\
+ 	          $(LN_S) @srcdir@/../gcc/ada/$(word 2,$(subst <, ,$(PAIR))) \
+@@ -203,6 +183,7 @@
+ 	touch $@
+ 
+ gnattools-native: ../gcc/ada/rts/libgnat-$(LIB_VERSION).so
++gnattools-native: ../libgnatvsn/libgnatvsn.so
+ gnattools-native: stamp-gnattools-sources
+ gnattools-native: $(TOOLS)
+ 
+@@ -210,18 +191,16 @@
+ 
+ vpath %.c @srcdir@/../gcc/ada:@srcdir@/../gcc
+ vpath %.h @srcdir@/../gcc/ada
+-vpath %.adb .:@srcdir@/../gcc/ada
+-vpath %.ads @srcdir@/../gcc/ada
+ 
+ # Because the just-built gcc is a host tool like us, we can use some
+-# of its object files, e.g. prefix.o and version.o.
++# of its object files, e.g. prefix.o.
+ vpath prefix.o ../gcc
+-vpath version.o ../gcc
+ 
+ # gnatlink
+ 
+ gnatlink-static: $(GNATLINK_OBJS) b_gnatl.o link.o
+ 	$(GCC) -o $@ $^ \
++	   ../libgnatvsn/libgnatvsn.a \
+ 	   ../gcc/ada/rts/libgnat.a \
+ 	   ../libiberty/libiberty.a
+ 
+@@ -238,6 +217,7 @@
+ 
+ gnatmake-static: $(GNATMAKE_OBJS) b_gnatm.o link.o
+ 	$(GCC) -o $@ $(ADA_CFLAGS) $^ \
++	   ../libgnatvsn/libgnatvsn.a \
+ 	   ../gcc/ada/rts/libgnat.a \
+ 	   ../libiberty/libiberty.a
+ 
+@@ -251,7 +231,8 @@
+ 	../gcc/gnatbind -C -o $@ $(ADA_INCLUDES) gnatmake.ali
+ 
+ # Other tools
+-gnatkr: version.o
++gnatkr:
++	if [ ! -f $@.adb ] ; then $(LN_S) ../../src/gcc/ada/$@.ad[bs] .; fi
+ 	./gnatmake-static -c -b $@ $(ADA_CFLAGS) $(ADA_INCLUDES) \
+ 	   --GCC="$(GCC)" \
+ 	   --GNATBIND=../gcc/gnatbind
+@@ -262,7 +243,8 @@
+ 	cp -lp $< $@
+ 
+ gnatbind gnatchop gnatclean gnatcmd gnatfind gnatls gnatname gnatprep gnatxref: \
+-link.o version.o prefix.o
++link.o prefix.o
++	if [ ! -f $@.adb ] ; then $(LN_S) ../../src/gcc/ada/$@.ad[bs] .; fi
+ 	./gnatmake-static -c -b $@ $(ADA_CFLAGS) $(ADA_INCLUDES) \
+ 	   --GCC="$(GCC)" \
+ 	   --GNATBIND=../gcc/gnatbind
+@@ -284,6 +266,8 @@
+ %.o: %.c
+ 	$(GCC) -c -o $@ $< $(CFLAGS) $(INCLUDES)
+ 
++prefix.o:
++
+ # Other
+ # -----
+ 
+@@ -319,13 +303,15 @@
+ install-html:
+ 
+ # Cleaning rules.
++.PHONY: mostlyclean clean distclean
++
+ mostlyclean:
+ 	$(RM) gnatmake gnatlink $(TOOLS) *.o *.ali
+ 
+-clean:
++clean: mostlyclean
+ 	$(RM) *.ads *.adb stamp-gnattools-sources
+ 
+-distclean:
++distclean: clean
+ 	$(RM) Makefile config.status config.log
+ 
+ maintainer-clean:
+Index: b/src/libgnatvsn/configure
+===================================================================
+--- /dev/null
++++ b/src/libgnatvsn/configure
+@@ -0,0 +1,43 @@
++#!/bin/sh
++
++# Minimal configure script for libgnatvsn.  We're only interested in
++# a few parameters.
++
++for arg in $*; do
++    case ${arg} in
++	--build=*)
++	    build=`expr ${arg} : '--build=\(.\+\)'`;;
++	--host=*)
++	    host=`expr ${arg} : '--host=\(.\+\)'`;;
++	--target=*)
++	    target=`expr ${arg} : '--target=\(.\+\)'`;;
++	--prefix=*)
++	    prefix=`expr ${arg} : '--prefix=\(.\+\)'`;;
++	--srcdir=*)
++	    srcdir=`expr ${arg} : '--srcdir=\(.\+\)'`;;
++	--with-pkgversion=*)
++	    pkgversion=`expr ${arg} : '--with-pkgversion=\(.\+\)'`;;
++	--with-bugurl=*)
++	    bugurl=`expr ${arg} : '--with-bugurl=\(.\+\)'`;;
++	*)
++	    echo "Warning: ignoring option: ${arg}"
++    esac
++done
++
++echo "build: ${build}" | tee config.log
++echo "host: ${host}" | tee -a config.log
++echo "target: ${target}" | tee -a config.log
++echo "prefix: ${prefix}" | tee -a config.log
++echo "srcdir: ${srcdir}" | tee -a config.log
++echo "pkgversion: ${pkgversion}" | tee -a config.log
++echo "bugurl: ${bugurl}" | tee -a config.log
++
++echo "Creating Makefile..." | tee -a config.log
++sed -e "s,@build@,${build},g" \
++    -e "s,@host@,${host},g" \
++    -e "s,@target@,${target},g" \
++    -e "s,@prefix@,${prefix},g" \
++    -e "s,@srcdir@,${srcdir},g" \
++    -e "s,@PKGVERSION@,${pkgversion},g" \
++    -e "s,@REPORT_BUGS_TO@,${bugurl},g" \
++    < ${srcdir}/Makefile.in > Makefile
+Index: b/src/libgnatvsn/Makefile.in
+===================================================================
+--- /dev/null
++++ b/src/libgnatvsn/Makefile.in
+@@ -0,0 +1,147 @@
++# Makefile for libgnatvsn.
++#   Copyright (c) 2006 Ludovic Brenta <ludovic@ludovic-brenta.org>
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++# 
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++# 
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++
++# Default target; must be first.
++all: libgnatvsn
++
++.SUFFIXES:
++
++CPUS := $(shell getconf _NPROCESSORS_ONLN)
++LIB_VERSION := $(strip $(shell grep ' Library_Version :' \
++                 @srcdir@/../gcc/ada/gnatvsn.ads | \
++	         sed -e 's/.*"\(.*\)".*/\1/'))
++GCC:=../gcc/xgcc -B../gcc/
++LIBGNAT_JUST_BUILT := -nostdinc -I../gcc/ada/rts
++CFLAGS := -g -O2 -gnatn
++BASEVER := $(shell cat @srcdir@/../gcc/BASE-VER)
++DEVPHASE := $(shell cat @srcdir@/../gcc/DEV-PHASE)
++DATESTAMP := $(shell cat @srcdir@/../gcc/DATESTAMP)
++
++# For use in version.c - double quoted strings, with appropriate
++# surrounding punctuation and spaces, and with the datestamp and
++# development phase collapsed to the empty string in release mode
++# (i.e. if DEVPHASE_c is empty).  The space immediately after the
++# comma in the $(if ...) constructs is significant - do not remove it.
++BASEVER_s   := "\"$(BASEVER)\""
++DEVPHASE_s  := "\"$(if $(DEVPHASE), ($(DEVPHASE)))\""
++DATESTAMP_s := "\"$(if $(DEVPHASE), $(DATESTAMP))\""
++PKGVERSION_s:= "\"@PKGVERSION@\""
++BUGURL_s    := "\"@REPORT_BUGS_TO@\""
++
++ifneq (@build@,@host@)
++   CFLAGS += -b @host@
++endif
++
++.PHONY: libgnatvsn install
++libgnatvsn: libgnatvsn.so.$(LIB_VERSION) libgnatvsn.a
++
++VSN_SOURCES := alloc.ads atree.adb casing.adb csets.adb debug.adb einfo.adb \
++elists.adb fname.adb gnatvsn.adb hostparm.ads krunch.adb lib.adb namet.adb \
++nlists.adb opt.adb output.adb repinfo.adb scans.adb sinfo.adb sem_aux.adb \
++sinput.adb snames.adb stand.adb stringt.adb table.adb tree_in.adb tree_io.adb \
++types.adb uintp.adb uname.adb urealp.adb widechar.adb
++
++VSN_SEPARATES := lib-list.adb lib-sort.adb
++
++OBJECTS=$(patsubst %.ads,%.o,$(VSN_SOURCES:.adb=.o)) version.o
++
++vpath %.c @srcdir@/../gcc
++
++libgnatvsn.so.$(LIB_VERSION): $(addprefix obj-shared/,$(OBJECTS))
++	: # Make libgnatvsn.so
++	$(GCC) -o $@ -shared -fPIC -Wl,--soname,$@ $^ \
++	   -L../gcc/ada/rts -lgnat-$(LIB_VERSION)
++	ln -s libgnatvsn.so.$(LIB_VERSION) libgnatvsn.so
++	chmod a=r obj-shared/*.ali
++# Make the .ali files, but not the .o files, visible to the gnat tools.
++	cp -lp obj-shared/*.ali .
++
++$(addprefix obj-shared/,$(OBJECTS)): | stamp-libgnatvsn-sources obj-shared
++
++obj-shared/%.o: %.adb
++	$(GCC) -c -fPIC $(CFLAGS) $(LIBGNAT_JUST_BUILT) $< -o $@
++
++obj-shared/%.o: %.ads
++	$(GCC) -c -fPIC $(CFLAGS) $(LIBGNAT_JUST_BUILT) $< -o $@
++
++obj-shared/version.o: version.c
++	$(GCC) -c -fPIC -g -O2 \
++	   -DBASEVER=$(BASEVER_s) \
++	   -DDATESTAMP=$(DATESTAMP_s) \
++	   -DDEVPHASE=$(DEVPHASE_s) \
++	   -DPKGVERSION=$(PKGVERSION_s) \
++	   -DBUGURL=$(BUGURL_s) \
++	   -DREVISION= \
++	   $(realpath $<) -o $@
++
++obj-shared:
++	-mkdir $@
++
++libgnatvsn.a: $(addprefix obj-static/,$(OBJECTS))
++	: # Make libgnatvsn.a
++	ar rc $@ $^
++	ranlib $@
++
++$(addprefix obj-static/,$(OBJECTS)): | stamp-libgnatvsn-sources obj-static
++
++obj-static/%.o: %.adb
++	$(GCC) -c $(CFLAGS) $(LIBGNAT_JUST_BUILT) $< -o $@
++
++obj-static/%.o: %.ads
++	$(GCC) -c $(CFLAGS) $(LIBGNAT_JUST_BUILT) $< -o $@
++
++obj-static/version.o: version.c
++	$(GCC) -c -g -O2 \
++	   -DBASEVER=$(BASEVER_s) \
++	   -DDATESTAMP=$(DATESTAMP_s) \
++	   -DDEVPHASE=$(DEVPHASE_s) \
++	   -DPKGVERSION=$(PKGVERSION_s) \
++	   -DBUGURL=$(BUGURL_s) \
++	   -DREVISION= \
++	   $< -o $@
++
++obj-static:
++	-mkdir $@
++
++$(VSN_SOURCES) $(VSN_SEPARATES): stamp-libgnatvsn-sources
++
++stamp-libgnatvsn-sources:
++	for file in $(VSN_SOURCES) $(VSN_SEPARATES); do \
++	   ads=$$(echo $$file | sed 's/\.adb/.ads/'); \
++	   if [ -f @srcdir@/../gcc/ada/$$file -a ! -L $$file ] ; then ln -s @srcdir@/../gcc/ada/$$file .; fi; \
++	   if [ -f @srcdir@/../gcc/ada/$$ads -a ! -L $$ads ] ; then ln -s @srcdir@/../gcc/ada/$$ads .; fi; \
++	done
++	touch $@
++
++install: libgnatvsn
++	$(INSTALL_DATA) libgnatvsn.a $(DESTDIR)$(prefix)/lib
++	$(INSTALL_DATA) libgnatvsn.so.$(LIB_VERSION) $(DESTDIR)$(prefix)/lib
++	cd $(DESTDIR)$(prefix)/lib; \
++	ln -sf libgnatvsn.so.$(LIB_VERSION) libgnatvsn.so
++	mkdir -p $(DESTDIR)$(prefix)/share/ada/adainclude/gnatvsn
++	$(INSTALL_DATA) \
++	   $(addprefix @srcdir@/../gcc/ada/,$(VSN_SOURCES) $(VSN_SEPARATES)) \
++	   $(addprefix @srcdir@/../gcc/ada/,$(patsubst %.adb,%.ads,$(filter %.adb,$(VSN_SOURCES)))) \
++	   $(DESTDIR)$(prefix)/share/ada/adainclude/gnatvsn
++	mkdir -p $(DESTDIR)$(prefix)/lib/ada/adalib/gnatvsn
++	$(INSTALL) -m 0444 obj-shared/*.ali \
++	   $(DESTDIR)$(prefix)/lib/ada/adalib/gnatvsn
++	chmod a=r $(DESTDIR)$(prefix)/lib/ada/adalib/gnatvsn/*.ali
++
++.PHONY: clean
++clean:
++	rm -rf *.ali obj-static obj-shared libgnatvsn* *.adb *.ads stamp*
+Index: b/src/Makefile.def
+===================================================================
+--- a/src/Makefile.def
++++ b/src/Makefile.def
+@@ -143,6 +143,13 @@
+ 		missing= TAGS;
+ 		missing= install-info;
+ 		missing= installcheck; };
++host_modules= { module= libgnatvsn; no_check=true;
++		missing= info;
++		missing= dvi;
++		missing= html;
++		missing= TAGS;
++		missing= install-info;
++		missing= installcheck; };
+ host_modules= { module= gnattools; no_check=true;
+ 		missing= info;
+ 		missing= dvi;
+@@ -181,6 +188,13 @@
+ 		   missing= TAGS;
+ 		   missing= install-info;
+ 		   missing= installcheck; };
++target_modules = { module= libgnatvsn; no_check=true;
++		   missing= info;
++		   missing= dvi;
++		   missing= html;
++		   missing= TAGS;
++		   missing= install-info;
++		   missing= installcheck; };
+ target_modules = { module= libgomp; lib_path=.libs; };
+ 
+ // These are (some of) the make targets to be done in each subdirectory.
+@@ -356,6 +370,8 @@
+ dependencies = { module=all-fixincludes; on=all-libiberty; };
+ 
+ dependencies = { module=all-gnattools; on=all-libada; };
++dependencies = { module=all-gnattools; on=all-libgnatvsn; };
++dependencies = { module=all-libgnatvsn; on=all-libada; };
+ 
+ dependencies = { module=configure-mpfr; on=all-gmp; };
+ dependencies = { module=configure-ppl; on=all-gmp; };
+Index: b/src/Makefile.in
+===================================================================
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -747,6 +747,7 @@
+     maybe-configure-libtermcap \
+     maybe-configure-utils \
+     maybe-configure-libada \
++    maybe-configure-libgnatvsn \
+     maybe-configure-gnattools
+ .PHONY: configure-target
+ configure-target:  \
+@@ -770,6 +771,7 @@
+     maybe-configure-target-qthreads \
+     maybe-configure-target-rda \
+     maybe-configure-target-libada \
++    maybe-configure-target-libgnatvsn \
+     maybe-configure-target-libgomp
+ 
+ # The target built for a native non-bootstrap build.
+@@ -908,6 +910,7 @@
+ all-host: maybe-all-libtermcap
+ all-host: maybe-all-utils
+ all-host: maybe-all-libada
++all-host: maybe-all-libgnatvsn
+ all-host: maybe-all-gnattools
+ 
+ .PHONY: all-target
+@@ -934,6 +937,7 @@
+ all-target: maybe-all-target-qthreads
+ all-target: maybe-all-target-rda
+ all-target: maybe-all-target-libada
++all-target: maybe-all-target-libgnatvsn
+ all-target: maybe-all-target-libgomp
+ 
+ # Do a target for all the subdirectories.  A ``make do-X'' will do a
+@@ -1026,6 +1030,7 @@
+ info-host: maybe-info-libtermcap
+ info-host: maybe-info-utils
+ info-host: maybe-info-libada
++info-host: maybe-info-libgnatvsn
+ info-host: maybe-info-gnattools
+ 
+ .PHONY: info-target
+@@ -1050,6 +1055,7 @@
+ info-target: maybe-info-target-qthreads
+ info-target: maybe-info-target-rda
+ info-target: maybe-info-target-libada
++info-target: maybe-info-target-libgnatvsn
+ info-target: maybe-info-target-libgomp
+ 
+ .PHONY: do-dvi
+@@ -1137,6 +1143,7 @@
+ dvi-host: maybe-dvi-libtermcap
+ dvi-host: maybe-dvi-utils
+ dvi-host: maybe-dvi-libada
++dvi-host: maybe-dvi-libgnatvsn
+ dvi-host: maybe-dvi-gnattools
+ 
+ .PHONY: dvi-target
+@@ -1161,6 +1168,7 @@
+ dvi-target: maybe-dvi-target-qthreads
+ dvi-target: maybe-dvi-target-rda
+ dvi-target: maybe-dvi-target-libada
++dvi-target: maybe-dvi-target-libgnatvsn
+ dvi-target: maybe-dvi-target-libgomp
+ 
+ .PHONY: do-pdf
+@@ -1248,6 +1256,7 @@
+ pdf-host: maybe-pdf-libtermcap
+ pdf-host: maybe-pdf-utils
+ pdf-host: maybe-pdf-libada
++pdf-host: maybe-pdf-libgnatvsn
+ pdf-host: maybe-pdf-gnattools
+ 
+ .PHONY: pdf-target
+@@ -1272,6 +1281,7 @@
+ pdf-target: maybe-pdf-target-qthreads
+ pdf-target: maybe-pdf-target-rda
+ pdf-target: maybe-pdf-target-libada
++pdf-target: maybe-pdf-target-libgnatvsn
+ pdf-target: maybe-pdf-target-libgomp
+ 
+ .PHONY: do-html
+@@ -1359,6 +1369,7 @@
+ html-host: maybe-html-libtermcap
+ html-host: maybe-html-utils
+ html-host: maybe-html-libada
++html-host: maybe-html-libgnatvsn
+ html-host: maybe-html-gnattools
+ 
+ .PHONY: html-target
+@@ -1383,6 +1394,7 @@
+ html-target: maybe-html-target-qthreads
+ html-target: maybe-html-target-rda
+ html-target: maybe-html-target-libada
++html-target: maybe-html-target-libgnatvsn
+ html-target: maybe-html-target-libgomp
+ 
+ .PHONY: do-TAGS
+@@ -1470,6 +1482,7 @@
+ TAGS-host: maybe-TAGS-libtermcap
+ TAGS-host: maybe-TAGS-utils
+ TAGS-host: maybe-TAGS-libada
++TAGS-host: maybe-TAGS-libgnatvsn
+ TAGS-host: maybe-TAGS-gnattools
+ 
+ .PHONY: TAGS-target
+@@ -1494,6 +1507,7 @@
+ TAGS-target: maybe-TAGS-target-qthreads
+ TAGS-target: maybe-TAGS-target-rda
+ TAGS-target: maybe-TAGS-target-libada
++TAGS-target: maybe-TAGS-target-libgnatvsn
+ TAGS-target: maybe-TAGS-target-libgomp
+ 
+ .PHONY: do-install-info
+@@ -1581,6 +1595,7 @@
+ install-info-host: maybe-install-info-libtermcap
+ install-info-host: maybe-install-info-utils
+ install-info-host: maybe-install-info-libada
++install-info-host: maybe-install-info-libgnatvsn
+ install-info-host: maybe-install-info-gnattools
+ 
+ .PHONY: install-info-target
+@@ -1605,6 +1620,7 @@
+ install-info-target: maybe-install-info-target-qthreads
+ install-info-target: maybe-install-info-target-rda
+ install-info-target: maybe-install-info-target-libada
++install-info-target: maybe-install-info-target-libgnatvsn
+ install-info-target: maybe-install-info-target-libgomp
+ 
+ .PHONY: do-install-pdf
+@@ -1692,6 +1708,7 @@
+ install-pdf-host: maybe-install-pdf-libtermcap
+ install-pdf-host: maybe-install-pdf-utils
+ install-pdf-host: maybe-install-pdf-libada
++install-pdf-host: maybe-install-pdf-libgnatvsn
+ install-pdf-host: maybe-install-pdf-gnattools
+ 
+ .PHONY: install-pdf-target
+@@ -1716,6 +1733,7 @@
+ install-pdf-target: maybe-install-pdf-target-qthreads
+ install-pdf-target: maybe-install-pdf-target-rda
+ install-pdf-target: maybe-install-pdf-target-libada
++install-pdf-target: maybe-install-pdf-target-libgnatvsn
+ install-pdf-target: maybe-install-pdf-target-libgomp
+ 
+ .PHONY: do-install-html
+@@ -1803,6 +1821,7 @@
+ install-html-host: maybe-install-html-libtermcap
+ install-html-host: maybe-install-html-utils
+ install-html-host: maybe-install-html-libada
++install-html-host: maybe-install-html-libgnatvsn
+ install-html-host: maybe-install-html-gnattools
+ 
+ .PHONY: install-html-target
+@@ -1827,6 +1846,7 @@
+ install-html-target: maybe-install-html-target-qthreads
+ install-html-target: maybe-install-html-target-rda
+ install-html-target: maybe-install-html-target-libada
++install-html-target: maybe-install-html-target-libgnatvsn
+ install-html-target: maybe-install-html-target-libgomp
+ 
+ .PHONY: do-installcheck
+@@ -1914,6 +1934,7 @@
+ installcheck-host: maybe-installcheck-libtermcap
+ installcheck-host: maybe-installcheck-utils
+ installcheck-host: maybe-installcheck-libada
++installcheck-host: maybe-installcheck-libgnatvsn
+ installcheck-host: maybe-installcheck-gnattools
+ 
+ .PHONY: installcheck-target
+@@ -1938,6 +1959,7 @@
+ installcheck-target: maybe-installcheck-target-qthreads
+ installcheck-target: maybe-installcheck-target-rda
+ installcheck-target: maybe-installcheck-target-libada
++installcheck-target: maybe-installcheck-target-libgnatvsn
+ installcheck-target: maybe-installcheck-target-libgomp
+ 
+ .PHONY: do-mostlyclean
+@@ -2025,6 +2047,7 @@
+ mostlyclean-host: maybe-mostlyclean-libtermcap
+ mostlyclean-host: maybe-mostlyclean-utils
+ mostlyclean-host: maybe-mostlyclean-libada
++mostlyclean-host: maybe-mostlyclean-libgnatvsn
+ mostlyclean-host: maybe-mostlyclean-gnattools
+ 
+ .PHONY: mostlyclean-target
+@@ -2049,6 +2072,7 @@
+ mostlyclean-target: maybe-mostlyclean-target-qthreads
+ mostlyclean-target: maybe-mostlyclean-target-rda
+ mostlyclean-target: maybe-mostlyclean-target-libada
++mostlyclean-target: maybe-mostlyclean-target-libgnatvsn
+ mostlyclean-target: maybe-mostlyclean-target-libgomp
+ 
+ .PHONY: do-clean
+@@ -2136,6 +2160,7 @@
+ clean-host: maybe-clean-libtermcap
+ clean-host: maybe-clean-utils
+ clean-host: maybe-clean-libada
++clean-host: maybe-clean-libgnatvsn
+ clean-host: maybe-clean-gnattools
+ 
+ .PHONY: clean-target
+@@ -2160,6 +2185,7 @@
+ clean-target: maybe-clean-target-qthreads
+ clean-target: maybe-clean-target-rda
+ clean-target: maybe-clean-target-libada
++clean-target: maybe-clean-target-libgnatvsn
+ clean-target: maybe-clean-target-libgomp
+ 
+ .PHONY: do-distclean
+@@ -2247,6 +2273,7 @@
+ distclean-host: maybe-distclean-libtermcap
+ distclean-host: maybe-distclean-utils
+ distclean-host: maybe-distclean-libada
++distclean-host: maybe-distclean-libgnatvsn
+ distclean-host: maybe-distclean-gnattools
+ 
+ .PHONY: distclean-target
+@@ -2271,6 +2298,7 @@
+ distclean-target: maybe-distclean-target-qthreads
+ distclean-target: maybe-distclean-target-rda
+ distclean-target: maybe-distclean-target-libada
++distclean-target: maybe-distclean-target-libgnatvsn
+ distclean-target: maybe-distclean-target-libgomp
+ 
+ .PHONY: do-maintainer-clean
+@@ -2358,6 +2386,7 @@
+ maintainer-clean-host: maybe-maintainer-clean-libtermcap
+ maintainer-clean-host: maybe-maintainer-clean-utils
+ maintainer-clean-host: maybe-maintainer-clean-libada
++maintainer-clean-host: maybe-maintainer-clean-libgnatvsn
+ maintainer-clean-host: maybe-maintainer-clean-gnattools
+ 
+ .PHONY: maintainer-clean-target
+@@ -2382,6 +2411,7 @@
+ maintainer-clean-target: maybe-maintainer-clean-target-qthreads
+ maintainer-clean-target: maybe-maintainer-clean-target-rda
+ maintainer-clean-target: maybe-maintainer-clean-target-libada
++maintainer-clean-target: maybe-maintainer-clean-target-libgnatvsn
+ maintainer-clean-target: maybe-maintainer-clean-target-libgomp
+ 
+ 
+@@ -2523,6 +2553,7 @@
+     maybe-check-libtermcap \
+     maybe-check-utils \
+     maybe-check-libada \
++    maybe-check-libgnatvsn \
+     maybe-check-gnattools
+ 
+ .PHONY: check-target
+@@ -2547,6 +2578,7 @@
+     maybe-check-target-qthreads \
+     maybe-check-target-rda \
+     maybe-check-target-libada \
++    maybe-check-target-libgnatvsn \
+     maybe-check-target-libgomp
+ 
+ do-check:
+@@ -2660,6 +2692,7 @@
+     maybe-install-libtermcap \
+     maybe-install-utils \
+     maybe-install-libada \
++    maybe-install-libgnatvsn \
+     maybe-install-gnattools
+ 
+ .PHONY: install-host
+@@ -2738,6 +2771,7 @@
+     maybe-install-libtermcap \
+     maybe-install-utils \
+     maybe-install-libada \
++    maybe-install-libgnatvsn \
+     maybe-install-gnattools
+ 
+ .PHONY: install-target
+@@ -2762,6 +2796,7 @@
+     maybe-install-target-qthreads \
+     maybe-install-target-rda \
+     maybe-install-target-libada \
++    maybe-install-target-libgnatvsn \
+     maybe-install-target-libgomp
+ 
+ uninstall:
+@@ -42962,6 +42997,327 @@
+ 
+ 
+ 
++.PHONY: configure-libgnatvsn maybe-configure-libgnatvsn
++maybe-configure-libgnatvsn:
++@if gcc-bootstrap
++configure-libgnatvsn: stage_current
++@endif gcc-bootstrap
++@if libgnatvsn
++maybe-configure-libgnatvsn: configure-libgnatvsn
++configure-libgnatvsn: 
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	test ! -f $(HOST_SUBDIR)/libgnatvsn/Makefile || exit 0; \
++	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libgnatvsn ; \
++	$(HOST_EXPORTS) \
++	echo Configuring in $(HOST_SUBDIR)/libgnatvsn; \
++	cd "$(HOST_SUBDIR)/libgnatvsn" || exit 1; \
++	case $(srcdir) in \
++	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
++	  *) topdir=`echo $(HOST_SUBDIR)/libgnatvsn/ | \
++		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
++	esac; \
++	srcdiroption="--srcdir=$${topdir}/libgnatvsn"; \
++	libsrcdir="$$s/libgnatvsn"; \
++	$(SHELL) $${libsrcdir}/configure \
++	  $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
++	  --target=${target_alias} $${srcdiroption}  \
++	  || exit 1
++@endif libgnatvsn
++
++
++
++
++
++.PHONY: all-libgnatvsn maybe-all-libgnatvsn
++maybe-all-libgnatvsn:
++@if gcc-bootstrap
++all-libgnatvsn: stage_current
++@endif gcc-bootstrap
++@if libgnatvsn
++TARGET-libgnatvsn=all
++maybe-all-libgnatvsn: all-libgnatvsn
++all-libgnatvsn: configure-libgnatvsn
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	(cd $(HOST_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(FLAGS_TO_PASS)  $(TARGET-libgnatvsn))
++@endif libgnatvsn
++
++
++
++
++.PHONY: check-libgnatvsn maybe-check-libgnatvsn
++maybe-check-libgnatvsn:
++@if libgnatvsn
++maybe-check-libgnatvsn: check-libgnatvsn
++
++check-libgnatvsn:
++
++@endif libgnatvsn
++
++.PHONY: install-libgnatvsn maybe-install-libgnatvsn
++maybe-install-libgnatvsn:
++@if libgnatvsn
++maybe-install-libgnatvsn: install-libgnatvsn
++
++install-libgnatvsn: installdirs
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	(cd $(HOST_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(FLAGS_TO_PASS)  install)
++
++@endif libgnatvsn
++
++# Other targets (info, dvi, pdf, etc.)
++
++.PHONY: maybe-info-libgnatvsn info-libgnatvsn
++maybe-info-libgnatvsn:
++@if libgnatvsn
++maybe-info-libgnatvsn: info-libgnatvsn
++
++# libgnatvsn doesn't support info.
++info-libgnatvsn:
++
++@endif libgnatvsn
++
++.PHONY: maybe-dvi-libgnatvsn dvi-libgnatvsn
++maybe-dvi-libgnatvsn:
++@if libgnatvsn
++maybe-dvi-libgnatvsn: dvi-libgnatvsn
++
++# libgnatvsn doesn't support dvi.
++dvi-libgnatvsn:
++
++@endif libgnatvsn
++
++.PHONY: maybe-pdf-libgnatvsn pdf-libgnatvsn
++maybe-pdf-libgnatvsn:
++@if libgnatvsn
++maybe-pdf-libgnatvsn: pdf-libgnatvsn
++
++pdf-libgnatvsn: \
++    configure-libgnatvsn 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libgnatvsn/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing pdf in libgnatvsn" ; \
++	(cd $(HOST_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          pdf) \
++	  || exit 1
++
++@endif libgnatvsn
++
++.PHONY: maybe-html-libgnatvsn html-libgnatvsn
++maybe-html-libgnatvsn:
++@if libgnatvsn
++maybe-html-libgnatvsn: html-libgnatvsn
++
++# libgnatvsn doesn't support html.
++html-libgnatvsn:
++
++@endif libgnatvsn
++
++.PHONY: maybe-TAGS-libgnatvsn TAGS-libgnatvsn
++maybe-TAGS-libgnatvsn:
++@if libgnatvsn
++maybe-TAGS-libgnatvsn: TAGS-libgnatvsn
++
++# libgnatvsn doesn't support TAGS.
++TAGS-libgnatvsn:
++
++@endif libgnatvsn
++
++.PHONY: maybe-install-info-libgnatvsn install-info-libgnatvsn
++maybe-install-info-libgnatvsn:
++@if libgnatvsn
++maybe-install-info-libgnatvsn: install-info-libgnatvsn
++
++# libgnatvsn doesn't support install-info.
++install-info-libgnatvsn:
++
++@endif libgnatvsn
++
++.PHONY: maybe-install-pdf-libgnatvsn install-pdf-libgnatvsn
++maybe-install-pdf-libgnatvsn:
++@if libgnatvsn
++maybe-install-pdf-libgnatvsn: install-pdf-libgnatvsn
++
++install-pdf-libgnatvsn: \
++    configure-libgnatvsn \
++    pdf-libgnatvsn 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libgnatvsn/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing install-pdf in libgnatvsn" ; \
++	(cd $(HOST_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          install-pdf) \
++	  || exit 1
++
++@endif libgnatvsn
++
++.PHONY: maybe-install-html-libgnatvsn install-html-libgnatvsn
++maybe-install-html-libgnatvsn:
++@if libgnatvsn
++maybe-install-html-libgnatvsn: install-html-libgnatvsn
++
++install-html-libgnatvsn: \
++    configure-libgnatvsn \
++    html-libgnatvsn 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libgnatvsn/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing install-html in libgnatvsn" ; \
++	(cd $(HOST_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          install-html) \
++	  || exit 1
++
++@endif libgnatvsn
++
++.PHONY: maybe-installcheck-libgnatvsn installcheck-libgnatvsn
++maybe-installcheck-libgnatvsn:
++@if libgnatvsn
++maybe-installcheck-libgnatvsn: installcheck-libgnatvsn
++
++# libgnatvsn doesn't support installcheck.
++installcheck-libgnatvsn:
++
++@endif libgnatvsn
++
++.PHONY: maybe-mostlyclean-libgnatvsn mostlyclean-libgnatvsn
++maybe-mostlyclean-libgnatvsn:
++@if libgnatvsn
++maybe-mostlyclean-libgnatvsn: mostlyclean-libgnatvsn
++
++mostlyclean-libgnatvsn: 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libgnatvsn/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing mostlyclean in libgnatvsn" ; \
++	(cd $(HOST_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          mostlyclean) \
++	  || exit 1
++
++@endif libgnatvsn
++
++.PHONY: maybe-clean-libgnatvsn clean-libgnatvsn
++maybe-clean-libgnatvsn:
++@if libgnatvsn
++maybe-clean-libgnatvsn: clean-libgnatvsn
++
++clean-libgnatvsn: 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libgnatvsn/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing clean in libgnatvsn" ; \
++	(cd $(HOST_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          clean) \
++	  || exit 1
++
++@endif libgnatvsn
++
++.PHONY: maybe-distclean-libgnatvsn distclean-libgnatvsn
++maybe-distclean-libgnatvsn:
++@if libgnatvsn
++maybe-distclean-libgnatvsn: distclean-libgnatvsn
++
++distclean-libgnatvsn: 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libgnatvsn/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing distclean in libgnatvsn" ; \
++	(cd $(HOST_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          distclean) \
++	  || exit 1
++
++@endif libgnatvsn
++
++.PHONY: maybe-maintainer-clean-libgnatvsn maintainer-clean-libgnatvsn
++maybe-maintainer-clean-libgnatvsn:
++@if libgnatvsn
++maybe-maintainer-clean-libgnatvsn: maintainer-clean-libgnatvsn
++
++maintainer-clean-libgnatvsn: 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libgnatvsn/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing maintainer-clean in libgnatvsn" ; \
++	(cd $(HOST_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          maintainer-clean) \
++	  || exit 1
++
++@endif libgnatvsn
++
++
++
+ .PHONY: configure-gnattools maybe-configure-gnattools
+ maybe-configure-gnattools:
+ @if gcc-bootstrap
+@@ -52586,6 +52942,345 @@
+ 
+ 
+ 
++.PHONY: configure-target-libgnatvsn maybe-configure-target-libgnatvsn
++maybe-configure-target-libgnatvsn:
++@if gcc-bootstrap
++configure-target-libgnatvsn: stage_current
++@endif gcc-bootstrap
++@if target-libgnatvsn
++maybe-configure-target-libgnatvsn: configure-target-libgnatvsn
++configure-target-libgnatvsn: 
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	echo "Checking multilib configuration for libgnatvsn..."; \
++	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgnatvsn ; \
++	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp 2> /dev/null ; \
++	if test -r $(TARGET_SUBDIR)/libgnatvsn/multilib.out; then \
++	  if cmp -s $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp $(TARGET_SUBDIR)/libgnatvsn/multilib.out; then \
++	    rm -f $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp; \
++	  else \
++	    rm -f $(TARGET_SUBDIR)/libgnatvsn/Makefile; \
++	    mv $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp $(TARGET_SUBDIR)/libgnatvsn/multilib.out; \
++	  fi; \
++	else \
++	  mv $(TARGET_SUBDIR)/libgnatvsn/multilib.tmp $(TARGET_SUBDIR)/libgnatvsn/multilib.out; \
++	fi; \
++	test ! -f $(TARGET_SUBDIR)/libgnatvsn/Makefile || exit 0; \
++	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgnatvsn ; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo Configuring in $(TARGET_SUBDIR)/libgnatvsn; \
++	cd "$(TARGET_SUBDIR)/libgnatvsn" || exit 1; \
++	case $(srcdir) in \
++	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
++	  *) topdir=`echo $(TARGET_SUBDIR)/libgnatvsn/ | \
++		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
++	esac; \
++	srcdiroption="--srcdir=$${topdir}/libgnatvsn"; \
++	libsrcdir="$$s/libgnatvsn"; \
++	rm -f no-such-file || : ; \
++	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
++	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
++	  --target=${target_alias} $${srcdiroption}  \
++	  || exit 1
++@endif target-libgnatvsn
++
++
++
++
++
++.PHONY: all-target-libgnatvsn maybe-all-target-libgnatvsn
++maybe-all-target-libgnatvsn:
++@if gcc-bootstrap
++all-target-libgnatvsn: stage_current
++@endif gcc-bootstrap
++@if target-libgnatvsn
++TARGET-target-libgnatvsn=all
++maybe-all-target-libgnatvsn: all-target-libgnatvsn
++all-target-libgnatvsn: configure-target-libgnatvsn
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	(cd $(TARGET_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  $(TARGET-target-libgnatvsn))
++@endif target-libgnatvsn
++
++
++
++
++
++.PHONY: check-target-libgnatvsn maybe-check-target-libgnatvsn
++maybe-check-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-check-target-libgnatvsn: check-target-libgnatvsn
++
++# Dummy target for uncheckable module.
++check-target-libgnatvsn:
++
++@endif target-libgnatvsn
++
++.PHONY: install-target-libgnatvsn maybe-install-target-libgnatvsn
++maybe-install-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-install-target-libgnatvsn: install-target-libgnatvsn
++
++install-target-libgnatvsn: installdirs
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	(cd $(TARGET_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
++
++@endif target-libgnatvsn
++
++# Other targets (info, dvi, pdf, etc.)
++
++.PHONY: maybe-info-target-libgnatvsn info-target-libgnatvsn
++maybe-info-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-info-target-libgnatvsn: info-target-libgnatvsn
++
++# libgnatvsn doesn't support info.
++info-target-libgnatvsn:
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-dvi-target-libgnatvsn dvi-target-libgnatvsn
++maybe-dvi-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-dvi-target-libgnatvsn: dvi-target-libgnatvsn
++
++# libgnatvsn doesn't support dvi.
++dvi-target-libgnatvsn:
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-pdf-target-libgnatvsn pdf-target-libgnatvsn
++maybe-pdf-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-pdf-target-libgnatvsn: pdf-target-libgnatvsn
++
++pdf-target-libgnatvsn: \
++    configure-target-libgnatvsn 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing pdf in $(TARGET_SUBDIR)/libgnatvsn" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           pdf) \
++	  || exit 1
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-html-target-libgnatvsn html-target-libgnatvsn
++maybe-html-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-html-target-libgnatvsn: html-target-libgnatvsn
++
++# libgnatvsn doesn't support html.
++html-target-libgnatvsn:
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-TAGS-target-libgnatvsn TAGS-target-libgnatvsn
++maybe-TAGS-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-TAGS-target-libgnatvsn: TAGS-target-libgnatvsn
++
++# libgnatvsn doesn't support TAGS.
++TAGS-target-libgnatvsn:
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-install-info-target-libgnatvsn install-info-target-libgnatvsn
++maybe-install-info-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-install-info-target-libgnatvsn: install-info-target-libgnatvsn
++
++# libgnatvsn doesn't support install-info.
++install-info-target-libgnatvsn:
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-install-pdf-target-libgnatvsn install-pdf-target-libgnatvsn
++maybe-install-pdf-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-install-pdf-target-libgnatvsn: install-pdf-target-libgnatvsn
++
++install-pdf-target-libgnatvsn: \
++    configure-target-libgnatvsn \
++    pdf-target-libgnatvsn 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing install-pdf in $(TARGET_SUBDIR)/libgnatvsn" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           install-pdf) \
++	  || exit 1
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-install-html-target-libgnatvsn install-html-target-libgnatvsn
++maybe-install-html-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-install-html-target-libgnatvsn: install-html-target-libgnatvsn
++
++install-html-target-libgnatvsn: \
++    configure-target-libgnatvsn \
++    html-target-libgnatvsn 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing install-html in $(TARGET_SUBDIR)/libgnatvsn" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           install-html) \
++	  || exit 1
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-installcheck-target-libgnatvsn installcheck-target-libgnatvsn
++maybe-installcheck-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-installcheck-target-libgnatvsn: installcheck-target-libgnatvsn
++
++# libgnatvsn doesn't support installcheck.
++installcheck-target-libgnatvsn:
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-mostlyclean-target-libgnatvsn mostlyclean-target-libgnatvsn
++maybe-mostlyclean-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-mostlyclean-target-libgnatvsn: mostlyclean-target-libgnatvsn
++
++mostlyclean-target-libgnatvsn: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libgnatvsn" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           mostlyclean) \
++	  || exit 1
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-clean-target-libgnatvsn clean-target-libgnatvsn
++maybe-clean-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-clean-target-libgnatvsn: clean-target-libgnatvsn
++
++clean-target-libgnatvsn: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing clean in $(TARGET_SUBDIR)/libgnatvsn" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           clean) \
++	  || exit 1
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-distclean-target-libgnatvsn distclean-target-libgnatvsn
++maybe-distclean-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-distclean-target-libgnatvsn: distclean-target-libgnatvsn
++
++distclean-target-libgnatvsn: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing distclean in $(TARGET_SUBDIR)/libgnatvsn" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           distclean) \
++	  || exit 1
++
++@endif target-libgnatvsn
++
++.PHONY: maybe-maintainer-clean-target-libgnatvsn maintainer-clean-target-libgnatvsn
++maybe-maintainer-clean-target-libgnatvsn:
++@if target-libgnatvsn
++maybe-maintainer-clean-target-libgnatvsn: maintainer-clean-target-libgnatvsn
++
++maintainer-clean-target-libgnatvsn: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatvsn/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libgnatvsn" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatvsn && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           maintainer-clean) \
++	  || exit 1
++
++@endif target-libgnatvsn
++
++
++
++
++
+ .PHONY: configure-target-libgomp maybe-configure-target-libgomp
+ maybe-configure-target-libgomp:
+ @if gcc-bootstrap
+@@ -55420,6 +56115,7 @@
+ configure-target-qthreads: stage_last
+ configure-target-rda: stage_last
+ configure-target-libada: stage_last
++configure-target-libgnatvsn: stage_last
+ configure-target-libgomp: stage_last
+ @endif gcc-bootstrap
+ 
+@@ -55444,6 +56140,7 @@
+ configure-target-qthreads: maybe-all-gcc
+ configure-target-rda: maybe-all-gcc
+ configure-target-libada: maybe-all-gcc
++configure-target-libgnatvsn: maybe-all-gcc
+ configure-target-libgomp: maybe-all-gcc
+ @endif gcc-no-bootstrap
+ 
+@@ -55728,6 +56425,8 @@
+ all-stagefeedback-libcpp: maybe-all-stagefeedback-intl
+ all-fixincludes: maybe-all-libiberty
+ all-gnattools: maybe-all-libada
++all-gnattools: maybe-all-libgnatvsn
++all-libgnatvsn: maybe-all-libada
+ configure-mpfr: maybe-all-gmp
+ 
+ configure-stage1-mpfr: maybe-all-stage1-gmp
+@@ -56288,6 +56987,7 @@
+ configure-target-qthreads: maybe-all-target-libgcc
+ configure-target-rda: maybe-all-target-libgcc
+ configure-target-libada: maybe-all-target-libgcc
++configure-target-libgnatvsn: maybe-all-target-libgcc
+ configure-target-libgomp: maybe-all-target-libgcc
+ @endif gcc-no-bootstrap
+ 
+@@ -56330,6 +57030,8 @@
+ 
+ configure-target-libada: maybe-all-target-newlib maybe-all-target-libgloss
+ 
++configure-target-libgnatvsn: maybe-all-target-newlib maybe-all-target-libgloss
++
+ configure-target-libgomp: maybe-all-target-newlib maybe-all-target-libgloss
+ 
+ 
+Index: b/src/configure.ac
+===================================================================
+--- a/src/configure.ac
++++ b/src/configure.ac
+@@ -158,7 +158,7 @@
+ 
+ # these libraries are used by various programs built for the host environment
+ #
+-host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr ppl cloog libiconv libada"
++host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr ppl cloog libiconv libada libgnatvsn"
+ 
+ # these tools are built for the host environment
+ # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
+@@ -189,7 +189,8 @@
+ 		target-boehm-gc \
+ 		${libgcj} \
+ 		target-libobjc \
+-		target-libada"
++		target-libada \
++		target-libgnatvsn"
+ 
+ # these tools are built using the target libraries, and are intended to
+ # run only in the target environment
+@@ -271,7 +272,7 @@
+ 
+ # Similarly, some are only suitable for cross toolchains.
+ # Remove these if host=target.
+-cross_only="target-libgloss target-newlib target-opcodes target-libada"
++cross_only="target-libgloss target-newlib target-opcodes target-libada target-libgnatvsn"
+ 
+ case $is_cross_compiler in
+   no) skipdirs="${skipdirs} ${cross_only}" ;;
+@@ -380,7 +381,7 @@
+ ENABLE_LIBADA=$enableval,
+ ENABLE_LIBADA=yes)
+ if test "${ENABLE_LIBADA}" != "yes" ; then
+-  noconfigdirs="$noconfigdirs gnattools"
++  noconfigdirs="$noconfigdirs libgnatvsn gnattools"
+ fi
+ 
+ AC_ARG_ENABLE(libssp,
+Index: b/src/gcc/ada/gcc-interface/config-lang.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/config-lang.in
++++ b/src/gcc/ada/gcc-interface/config-lang.in
+@@ -36,8 +36,8 @@
+ 
+ outputs="ada/gcc-interface/Makefile ada/Makefile"
+ 
+-target_libs="target-libada"
+-lang_dirs="libada gnattools"
++target_libs="target-libada target-libgnatvsn"
++lang_dirs="libada libgnatvsn gnattools"
+ 
+ # Ada is not enabled by default for the time being.
+ build_by_default=no
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-multiarch.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-multiarch.diff
@@ -0,0 +1,27 @@
+# DP: Let gdc recognize the -imultilib option (and ignore it)
+
+--- a/src/gcc/d/lang.opt
++++ b/src/gcc/d/lang.opt
+@@ -155,6 +155,10 @@
+ D Joined Separate
+ -iprefix <path>	Specify <path> as a prefix for next two options
+ 
++imultiarch
++D Joined Separate
++-imultiarch <dir>      Set <dir> to be the multiarch include subdirectory
++
+ isysroot
+ D Joined Separate
+ -isysroot <dir>	Set <dir> to be the system root directory
+--- a/src/gcc/d/d-lang.cc
++++ b/src/gcc/d/d-lang.cc
+@@ -707,6 +708,9 @@
+       case OPT_iprefix:
+ 	  iprefix = xstrdup(arg);
+ 	  break;
++      case OPT_imultiarch:
++	  imultiarch = xstrdup(arg);
++	  break;
+       case OPT_fmultilib_dir_:
+ 	  multilib_dir = xstrdup(arg);
+ 	  break;
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr44364.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr44364.diff
@@ -0,0 +1,41 @@
+# DP: PR target/44364:
+# DP: This patch made it into trunk. Not on the 4.4 branch
+# DP: because not proved that it is a regression since 4.3.
+
+Index: gcc/caller-save.c
+===================================================================
+--- a/src/gcc/caller-save.c	(revision 160245)
++++ b/src/gcc/caller-save.c	(working copy)
+@@ -1080,7 +1080,7 @@ insert_restore (struct insn_chain *chain
+       /* Check that insn to restore REGNO in save_mode[regno] is
+ 	 correct.  */
+       && reg_save_code (regno, save_mode[regno]) >= 0)
+-    mem = adjust_address (mem, save_mode[regno], 0);
++    mem = adjust_address_nv (mem, save_mode[regno], 0);
+   else
+     mem = copy_rtx (mem);
+ 
+@@ -1161,7 +1161,7 @@ insert_save (struct insn_chain *chain, i
+       /* Check that insn to save REGNO in save_mode[regno] is
+ 	 correct.  */
+       && reg_save_code (regno, save_mode[regno]) >= 0)
+-    mem = adjust_address (mem, save_mode[regno], 0);
++    mem = adjust_address_nv (mem, save_mode[regno], 0);
+   else
+     mem = copy_rtx (mem);
+ 
+Index: gcc/config/rs6000/e500.h
+===================================================================
+--- a/src/gcc/config/rs6000/e500.h	(revision 160245)
++++ b/src/gcc/config/rs6000/e500.h	(working copy)
+@@ -43,3 +43,10 @@
+ 	  error ("E500 and FPRs not supported");			\
+       }									\
+   } while (0)
++
++/* When setting up caller-save slots (MODE == VOIDmode) ensure we
++   allocate space for DFmode.  Save gprs in the correct mode too.  */
++#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
++  (TARGET_E500_DOUBLE && ((MODE) == VOIDmode || (MODE) == DFmode)	\
++   ? DFmode								\
++   : choose_hard_reg_mode ((REGNO), (NREGS), false))
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-atom-doc.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-atom-doc.diff
@@ -0,0 +1,30 @@
+Index: gcc/doc/invoke.texi
+===================================================================
+--- a/src/gcc/doc/invoke.texi	(revision 146514)
++++ b/src/gcc/doc/invoke.texi	(working copy)
+@@ -10959,6 +10959,9 @@
+ @item core2
+ Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
+ instruction set support.
++@item atom
++Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
++instruction set support.
+ @item k6
+ AMD K6 CPU with MMX instruction set support.
+ @item k6-2, k6-3
+Index: gcc/doc/md.texi
+===================================================================
+--- a/src/gcc/doc/md.texi	(revision 146514)
++++ b/src/gcc/doc/md.texi	(working copy)
+@@ -7506,6 +7506,11 @@
+ recognize complicated bypasses, e.g.@: when the consumer is only an address
+ of insn @samp{store} (not a stored value).
+ 
++If there are more one bypass with the same output and input insns, the
++chosen bypass is the first bypass with a guard in description whose
++guard function returns nonzero.  If there is no such bypass, then
++bypass without the guard function is chosen.
++
+ @findex exclusion_set
+ @findex presence_set
+ @findex final_presence_set
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-hash-style-gnu.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-hash-style-gnu.diff
@@ -0,0 +1,134 @@
+# DP: Link using --hash-style=gnu (alpha, amd64, armel, ia64, i386, powerpc, ppc64, s390, sparc)
+
+2006-07-11  Jakub Jelinek  <jakub@redhat.com>
+
+	* config/i386/linux.h (LINK_SPEC): Add --hash-style=gnu.
+	* config/i386/linux64.h (LINK_SPEC): Likewise.
+	* config/rs6000/sysv4.h (LINK_OS_LINUX_SPEC): Likewise.
+	* config/rs6000/linux64.h (LINK_OS_LINUX_SPEC32,
+	LINK_OS_LINUX_SPEC64): Likewise.
+	* config/s390/linux.h (LINK_SPEC): Likewise.
+	* config/ia64/linux.h (LINK_SPEC): Likewise.
+	* config/sparc/linux.h (LINK_SPEC): Likewise.
+	* config/sparc/linux64.h (LINK_SPEC, LINK_ARCH32_SPEC,
+	LINK_ARCH64_SPEC): Likewise.
+	* config/alpha/linux-elf.h (LINK_SPEC): Likewise.
+
+2009-12-21  Matthias Klose  <doko@ubuntu.com>
+
+	* config/arm/linux-elf.h (LINK_SPEC): Add --hash-style=gnu.
+	
+---
+ gcc/config/alpha/linux-elf.h |    2 +-
+ gcc/config/i386/linux.h      |    2 +-
+ gcc/config/i386/linux64.h    |    2 +-
+ gcc/config/ia64/linux.h      |    2 +-
+ gcc/config/rs6000/linux64.h  |    4 ++--
+ gcc/config/rs6000/sysv4.h    |    2 +-
+ gcc/config/s390/linux.h      |    2 +-
+ gcc/config/sparc/linux.h     |    2 +-
+ 8 files changed, 9 insertions(+), 9 deletions(-)
+
+--- a/src/gcc/config/alpha/linux-elf.h
++++ b/src/gcc/config/alpha/linux-elf.h
+@@ -39,7 +39,7 @@ along with GCC; see the file COPYING3.  If not see
+ 
+ #define ELF_DYNAMIC_LINKER	LINUX_DYNAMIC_LINKER
+ 
+-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax}		\
++#define LINK_SPEC "-m elf64alpha --hash-style=gnu %{G*} %{relax:-relax}	\
+   %{O*:-O3} %{!O*:-O1}						\
+   %{shared:-shared}						\
+   %{!shared:							\
+--- a/src/gcc/config/i386/linux.h
++++ b/src/gcc/config/i386/linux.h
+@@ -113,7 +113,7 @@ along with GCC; see the file COPYING3.  If not see
+   { "dynamic_linker", LINUX_DYNAMIC_LINKER }
+ 
+ #undef	LINK_SPEC
+-#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
++#define LINK_SPEC "-m %(link_emulation) --hash-style=gnu %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+       %{!static: \
+--- a/src/gcc/config/i386/linux64.h
++++ b/src/gcc/config/i386/linux64.h
+@@ -70,7 +70,7 @@ along with GCC; see the file COPYING3.  If not see
+ #endif
+ 
+ #undef	LINK_SPEC
+-#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} \
++#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} --hash-style=gnu \
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
+--- a/src/gcc/config/ia64/linux.h
++++ b/src/gcc/config/ia64/linux.h
+@@ -40,7 +40,7 @@ do {						\
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
+ 
+ #undef LINK_SPEC
+-#define LINK_SPEC "\
++#define LINK_SPEC "--hash-style=gnu \
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
+--- a/src/gcc/config/rs6000/linux64.h
++++ b/src/gcc/config/rs6000/linux64.h
+@@ -352,11 +352,11 @@ extern int dot_symbols;
+   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
+ 
+ 
+-#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=gnu %{!shared: %{!static: \
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER32 "}}}"
+ 
+-#define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=gnu %{!shared: %{!static: \
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}}"
+ 
+--- a/src/gcc/config/rs6000/sysv4.h
++++ b/src/gcc/config/rs6000/sysv4.h
+@@ -906,7 +906,7 @@ SVR4_ASM_SPEC \
+ #define LINUX_DYNAMIC_LINKER \
+   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
+ 
+-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=gnu %{!shared: %{!static: \
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}"
+ 
+--- a/src/gcc/config/s390/linux.h
++++ b/src/gcc/config/s390/linux.h
+@@ -77,7 +77,7 @@ along with GCC; see the file COPYING3.  If not see
+ 
+ #undef  LINK_SPEC
+ #define LINK_SPEC \
+-  "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
++  "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=gnu \
+    %{shared:-shared} \
+    %{!shared: \
+       %{static:-static} \
+--- a/src/gcc/config/sparc/linux.h
++++ b/src/gcc/config/sparc/linux.h
+@@ -86,7 +86,7 @@ along with GCC; see the file COPYING3.  If not see
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+ 
+ #undef  LINK_SPEC
+-#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
++#define LINK_SPEC "-m elf32_sparc --hash-style=gnu -Y P,/usr/lib %{shared:-shared} \
+   %{!mno-relax:%{!r:-relax}} \
+   %{!shared: \
+     %{!ibcs: \
+--- a/src/gcc/config/arm/linux-elf.h~	2009-02-20 16:20:38.000000000 +0100
++++ b/src/gcc/config/arm/linux-elf.h	2009-12-21 13:19:36.000000000 +0100
+@@ -72,6 +72,7 @@
+    %{rdynamic:-export-dynamic} \
+    %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "} \
+    -X \
++   --hash-style=gnu \
+    %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+    SUBTARGET_EXTRA_LINK_SPEC
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libjava-nobiarch-check.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libjava-nobiarch-check.diff
@@ -0,0 +1,43 @@
+# DP: For biarch builds, disable the testsuite for the non-default architecture
+# DP: for runtime libraries, which are not built by default (libjava).
+
+---
+ libjava/testsuite/Makefile.in |    4 +++-
+ 2 files changed, 25 insertions(+), 1 deletions(-)
+
+--- a/src/libjava/testsuite/Makefile.in
++++ b/src/libjava/testsuite/Makefile.in
+@@ -435,12 +435,14 @@ CTAGS:
+ 
+ 
+ check-DEJAGNU: site.exp
++	runtestflags="`echo '$(RUNTESTFLAGS)' | sed 's/,-m[36][24]//;s/,-mabi=n32//;s/,-mabi=64//'`"; \
++	case "$$runtestflags" in *\\{\\}) runtestflags=; esac; \
+ 	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
+ 	EXPECT=$(EXPECT); export EXPECT; \
+ 	runtest=$(RUNTEST); \
+ 	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
+ 	  l='$(DEJATOOL)'; for tool in $$l; do \
+-	    $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \
++	    $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $$runtestflags; \
+ 	  done; \
+ 	else echo "WARNING: could not find \`runtest'" 1>&2; :;\
+ 	fi
+--- a/src/libffi/testsuite/Makefile.in
++++ b/src/libffi/testsuite/Makefile.in
+@@ -435,12 +435,14 @@ CTAGS:
+ 
+ 
+ check-DEJAGNU: site.exp
++	runtestflags="`echo '$(RUNTESTFLAGS)' | sed 's/,-m[36][24]//;s/,-mabi=n32//;s/,-mabi=64//'`"; \
++	case "$$runtestflags" in *\\{\\}) runtestflags=; esac; \
+ 	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
+ 	EXPECT=$(EXPECT); export EXPECT; \
+ 	runtest=$(RUNTEST); \
+ 	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
+ 	  l='$(DEJATOOL)'; for tool in $$l; do \
+-	    $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \
++	    $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $$runtestflags; \
+ 	  done; \
+ 	else echo "WARNING: could not find \`runtest'" 1>&2; :;\
+ 	fi
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/hurd-pthread.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/hurd-pthread.diff
@@ -0,0 +1,170 @@
+# Fix pthread support in a/src/boehm-gc
+
+--- a/src/boehm-gc/pthread_support.c.orig	2009-02-07 22:27:11.828527000 +0000
++++ b/src/boehm-gc/pthread_support.c	2009-02-07 22:27:18.279505000 +0000
+@@ -885,7 +885,7 @@
+ 	  GC_nprocs = pthread_num_processors_np();
+ #       endif
+ #	if defined(GC_OSF1_THREADS) || defined(GC_AIX_THREADS) \
+-	   || defined(GC_SOLARIS_PTHREADS)
++	   || defined(GC_SOLARIS_PTHREADS) || defined(GC_GNU_THREADS)
+ 	  GC_nprocs = sysconf(_SC_NPROCESSORS_ONLN);
+ 	  if (GC_nprocs <= 0) GC_nprocs = 1;
+ #	endif
+--- a/src/boehm-gc/include/gc_config_macros.h.orig	2009-02-07 22:25:08.240177000 +0000
++++ b/src/boehm-gc/include/gc_config_macros.h	2009-02-07 22:28:40.648347000 +0000
+@@ -6,7 +6,8 @@
+ 		             || defined(GC_SOLARIS_PTHREADS) \
+ 			     || defined(GC_HPUX_THREADS) \
+ 			     || defined(GC_AIX_THREADS) \
+-			     || defined(GC_LINUX_THREADS))
++			     || defined(GC_LINUX_THREADS) \
++			     || defined(GC_GNU_THREADS))
+ # define _REENTRANT
+ 	/* Better late than never.  This fails if system headers that	*/
+ 	/* depend on this were previously included.			*/
+@@ -21,7 +22,8 @@
+ 	defined(GC_HPUX_THREADS) || defined(GC_OSF1_THREADS) || \
+ 	defined(GC_DGUX386_THREADS) || defined(GC_DARWIN_THREADS) || \
+ 	defined(GC_AIX_THREADS) || \
+-        (defined(GC_WIN32_THREADS) && defined(__CYGWIN32__))
++        (defined(GC_WIN32_THREADS) && defined(__CYGWIN32__)) || \
++	defined(GC_GNU_THREADS)
+ #   define GC_PTHREADS
+ # endif
+ 
+--- a/src/boehm-gc/threadlibs.c.orig	2009-02-07 22:34:42.429201000 +0000
++++ b/src/boehm-gc/threadlibs.c	2009-02-07 22:34:49.530544000 +0000
+@@ -12,7 +12,8 @@
+ #   endif
+ #   if defined(GC_LINUX_THREADS) || defined(GC_IRIX_THREADS) \
+ 	|| defined(GC_SOLARIS_PTHREADS) \
+-	|| defined(GC_DARWIN_THREADS) || defined(GC_AIX_THREADS)
++	|| defined(GC_DARWIN_THREADS) || defined(GC_AIX_THREADS) \
++	|| defined(GC_GNU_THREADS)
+         printf("-lpthread\n");
+ #   endif
+ #   if defined(GC_FREEBSD_THREADS)
+--- a/src/boehm-gc/configure.ac.orig	2009-02-07 22:30:12.000000000 +0000
++++ b/src/boehm-gc/configure.ac	2009-02-07 22:35:31.717091000 +0000
+@@ -172,6 +172,11 @@
+ 	AM_CPPFLAGS="$AM_CPPFLAGS -pthread"
+ 	THREADLIBS=-pthread
+       	;;
++     *-*-gnu*)
++	AC_DEFINE(GC_GNU_THREADS,1,[support GNU threads])
++	AC_DEFINE(_REENTRANT)
++	AC_DEFINE(THREAD_LOCAL_ALLOC)
++      	;;
+      *-*-solaris*)
+ 	AC_DEFINE(GC_SOLARIS_PTHREADS,1,[support for Solaris pthreads])
+ 	# Need to use alternate thread library, otherwise gctest hangs
+--- a/src/boehm-gc/configure.orig	2009-02-07 22:32:34.000000000 +0000
++++ b/src/boehm-gc/configure	2009-02-07 22:35:28.065650000 +0000
+@@ -5489,6 +5489,20 @@
+ 	AM_CPPFLAGS="$AM_CPPFLAGS -pthread"
+ 	THREADLIBS=-pthread
+       	;;
++     *-*-gnu*)
++cat >>confdefs.h <<\_ACEOF
++#define GC_GNU_THREADS 1
++_ACEOF
++
++       cat >>confdefs.h <<\_ACEOF
++#define _REENTRANT 1
++_ACEOF
++
++cat >>confdefs.h <<\_ACEOF
++#define THREAD_LOCAL_ALLOC 1
++_ACEOF
++
++      	;;
+      *-*-solaris*)
+ 
+ cat >>confdefs.h <<\_ACEOF
+--- a/src/boehm-gc/os_dep.c.orig	2009-02-07 22:37:20.000000000 +0000
++++ b/src/boehm-gc/os_dep.c	2009-02-07 22:37:40.000000000 +0000
+@@ -312,7 +312,7 @@
+   /* for recent Linux versions.  This seems to be the easiest way to	*/
+   /* cover all versions.						*/
+ 
+-# ifdef LINUX
++# if defined(LINUX) || defined(HURD)
+     /* Some Linux distributions arrange to define __data_start.  Some	*/
+     /* define data_start as a weak symbol.  The latter is technically	*/
+     /* broken, since the user program may define data_start, in which	*/
+@@ -331,7 +331,7 @@
+   {
+     extern ptr_t GC_find_limit();
+ 
+-#   ifdef LINUX
++#   if defined(LINUX) || defined(HURD)
+       /* Try the easy approaches first:	*/
+       if ((ptr_t)__data_start != 0) {
+ 	  GC_data_start = (ptr_t)(__data_start);
+--- a/src/boehm-gc/include/private/gcconfig.h.orig	2009-02-07 22:29:18.000000000 +0000
++++ b/src/boehm-gc/include/private/gcconfig.h	2009-02-07 22:41:24.598684000 +0000
+@@ -1316,8 +1316,9 @@
+ #     define OS_TYPE "HURD"
+ #     define STACK_GROWS_DOWN
+ #     define HEURISTIC2
+-      extern int  __data_start[];
+-#     define DATASTART ( (ptr_t) (__data_start))
++#     define SIG_SUSPEND SIGUSR1
++#     define SIG_THR_RESTART SIGUSR2
++#     define SEARCH_FOR_DATA_START
+       extern int   _end[];
+ #     define DATAEND ( (ptr_t) (_end))
+ /* #     define MPROTECT_VDB  Not quite working yet? */
+@@ -2153,7 +2154,8 @@
+ # if defined(SVR4) || defined(LINUX) || defined(IRIX5) || defined(HPUX) \
+ 	    || defined(OPENBSD) || defined(NETBSD) || defined(FREEBSD) \
+ 	    || defined(DGUX) || defined(BSD) || defined(SUNOS4) \
+-	    || defined(_AIX) || defined(DARWIN) || defined(OSF1)
++	    || defined(_AIX) || defined(DARWIN) || defined(OSF1) \
++	    || defined(HURD)
+ #   define UNIX_LIKE   /* Basic Unix-like system calls work.	*/
+ # endif
+ 
+@@ -2209,7 +2211,7 @@
+ #   define CACHE_LINE_SIZE 32	/* Wild guess	*/
+ # endif
+ 
+-# if defined(LINUX) || defined(__GLIBC__)
++# if defined(LINUX) || defined(HURD) || defined(__GLIBC__)
+ #   define REGISTER_LIBRARIES_EARLY
+     /* We sometimes use dl_iterate_phdr, which may acquire an internal	*/
+     /* lock.  This isn't safe after the world has stopped.  So we must	*/
+@@ -2244,6 +2246,9 @@
+ # if defined(GC_AIX_THREADS) && !defined(_AIX)
+ 	--> inconsistent configuration
+ # endif
++# if defined(GC_GNU_THREADS) && !defined(HURD)
++	--> inconsistent configuration
++# endif
+ # if defined(GC_WIN32_THREADS) && !defined(MSWIN32) && !defined(CYGWIN32)
+ 	--> inconsistent configuration
+ # endif
+--- a/src/boehm-gc/include/gc_config.h.in.orig	2009-02-08 01:51:09.707191000 +0000
++++ b/src/boehm-gc/include/gc_config.h.in	2009-02-08 01:54:06.298757000 +0000
+@@ -33,6 +33,9 @@
+ /* include support for gcj */
+ #undef GC_GCJ_SUPPORT
+ 
++/* support GNU/Hurd threads */
++#undef GC_GNU_THREADS
++
+ /* enables support for HP/UX 11 pthreads */
+ #undef GC_HPUX_THREADS
+ 
+--- a/src/boehm-gc/specific.c.orig	2009-02-08 03:44:40.833287000 +0000
++++ b/src/boehm-gc/specific.c	2009-02-08 03:44:50.865199000 +0000
+@@ -13,7 +13,7 @@
+ 
+ #include "private/gc_priv.h" /* For GC_compare_and_exchange, GC_memory_barrier */
+ 
+-#if defined(GC_LINUX_THREADS)
++#if defined(GC_LINUX_THREADS) || defined(GC_GNU_THREADS)
+ 
+ #include "private/specific.h"
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/s390-biarch.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/s390-biarch.diff
@@ -0,0 +1,24 @@
+# DP: Build a bi-arch compiler on s390-linux-gnu.
+# DP: http://gcc.gnu.org/ml/gcc-patches/2009-03/msg01044.html
+
+2009-03-23  Arthur Loiret  <aloiret@debian.org>
+
+	* config.gcc (s390-*-linux*): If 'enabled_targets' is 'all', build
+	a bi-arch compiler defaulting to 31-bit. In this case:
+	(tmake_file): Add s390/t-linux64.
+---
+ gcc/config.gcc |    3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -1966,6 +1966,9 @@ rs6000-ibm-aix[6789].* | powerpc-ibm-aix[6789].*)
+ s390-*-linux*)
+ 	tm_file="s390/s390.h dbxelf.h elfos.h svr4.h linux.h s390/linux.h"
+ 	tmake_file="${tmake_file} t-dfprules s390/t-crtstuff s390/t-linux"
++	if test x$enable_targets = xall; then
++		tmake_file="${tmake_file} s390/t-linux64"
++	fi
+ 	;;
+ s390x-*-linux*)
+ 	tm_file="s390/s390x.h s390/s390.h dbxelf.h elfos.h svr4.h linux.h s390/linux.h"
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-atom.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-atom.diff
@@ -0,0 +1,2744 @@
+Index: gcc/genautomata.c
+===================================================================
+--- a/src/gcc/genautomata.c	(revision 146514)
++++ b/src/gcc/genautomata.c	(working copy)
+@@ -1,5 +1,5 @@
+ /* Pipeline hazard description translator.
+-   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008
++   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
+    Free Software Foundation, Inc.
+ 
+    Written by Vladimir Makarov <vmakarov@redhat.com>
+@@ -22,21 +22,25 @@
+ 
+ /* References:
+ 
+-   1. Detecting pipeline structural hazards quickly. T. Proebsting,
++   1. The finite state automaton based pipeline hazard recognizer and
++      instruction scheduler in GCC.  V. Makarov.  Proceedings of GCC
++      summit, 2003.
++
++   2. Detecting pipeline structural hazards quickly. T. Proebsting,
+       C. Fraser. Proceedings of ACM SIGPLAN-SIGACT Symposium on
+       Principles of Programming Languages, pages 280--286, 1994.
+ 
+       This article is a good start point to understand usage of finite
+       state automata for pipeline hazard recognizers.  But I'd
+-      recommend the 2nd article for more deep understanding.
++      recommend the 1st and 3rd article for more deep understanding.
+ 
+-   2. Efficient Instruction Scheduling Using Finite State Automata:
++   3. Efficient Instruction Scheduling Using Finite State Automata:
+       V. Bala and N. Rubin, Proceedings of MICRO-28.  This is the best
+       article about usage of finite state automata for pipeline hazard
+       recognizers.
+ 
+-   The current implementation is different from the 2nd article in the
+-   following:
++   The current implementation is described in the 1st article and it
++   is different from the 3rd article in the following:
+ 
+    1. New operator `|' (alternative) is permitted in functional unit
+       reservation which can be treated deterministically and
+@@ -463,7 +467,10 @@
+      insn.  */
+   int insn_num;
+   /* The following field value is list of bypasses in which given insn
+-     is output insn.  */
++     is output insn.  Bypasses with the same input insn stay one after
++     another in the list in the same order as their occurrences in the
++     description but the bypass without a guard stays always the last
++     in a row of bypasses with the same input insn.  */
+   struct bypass_decl *bypass_list;
+ 
+   /* The following fields are defined by automaton generator.  */
+@@ -2367,18 +2374,67 @@
+ }
+ 
+ 
+-/* The function searches for bypass with given IN_INSN_RESERV in given
+-   BYPASS_LIST.  */
+-static struct bypass_decl *
+-find_bypass (struct bypass_decl *bypass_list,
+-	     struct insn_reserv_decl *in_insn_reserv)
++/* The function inserts BYPASS in the list of bypasses of the
++   corresponding output insn.  The order of bypasses in the list is
++   decribed in a comment for member `bypass_list' (see above).  If
++   there is already the same bypass in the list the function reports
++   this and does nothing.  */
++static void
++insert_bypass (struct bypass_decl *bypass)
+ {
+-  struct bypass_decl *bypass;
+-
+-  for (bypass = bypass_list; bypass != NULL; bypass = bypass->next)
+-    if (bypass->in_insn_reserv == in_insn_reserv)
+-      break;
+-  return bypass;
++  struct bypass_decl *curr, *last;
++  struct insn_reserv_decl *out_insn_reserv = bypass->out_insn_reserv;
++  struct insn_reserv_decl *in_insn_reserv = bypass->in_insn_reserv;
++  
++  for (curr = out_insn_reserv->bypass_list, last = NULL;
++       curr != NULL;
++       last = curr, curr = curr->next)
++    if (curr->in_insn_reserv == in_insn_reserv)
++      {
++	if ((bypass->bypass_guard_name != NULL
++	     && curr->bypass_guard_name != NULL
++	     && ! strcmp (bypass->bypass_guard_name, curr->bypass_guard_name))
++	    || bypass->bypass_guard_name == curr->bypass_guard_name)
++	  {
++	    if (bypass->bypass_guard_name == NULL)
++	      {
++		if (!w_flag)
++		  error ("the same bypass `%s - %s' is already defined",
++			 bypass->out_insn_name, bypass->in_insn_name);
++		else
++		  warning (0, "the same bypass `%s - %s' is already defined",
++			   bypass->out_insn_name, bypass->in_insn_name);
++	      }
++	    else if (!w_flag)
++	      error ("the same bypass `%s - %s' (guard %s) is already defined",
++		     bypass->out_insn_name, bypass->in_insn_name,
++		     bypass->bypass_guard_name);
++	    else
++	      warning
++		(0, "the same bypass `%s - %s' (guard %s) is already defined",
++		 bypass->out_insn_name, bypass->in_insn_name,
++		 bypass->bypass_guard_name);
++	    return;
++	  }
++	if (curr->bypass_guard_name == NULL)
++	  break;
++	if (curr->next == NULL || curr->next->in_insn_reserv != in_insn_reserv)
++	  {
++	    last = curr;
++	    break;
++	  }
++	  
++      }
++  if (last == NULL)
++    {
++      bypass->next = out_insn_reserv->bypass_list;
++      out_insn_reserv->bypass_list = bypass;
++    }
++  else
++    {
++      bypass->next = last->next;
++      last->next = bypass;
++    }
+ }
+ 
+ /* The function processes pipeline description declarations, checks
+@@ -2391,7 +2447,6 @@
+   decl_t decl_in_table;
+   decl_t out_insn_reserv;
+   decl_t in_insn_reserv;
+-  struct bypass_decl *bypass;
+   int automaton_presence;
+   int i;
+ 
+@@ -2514,36 +2569,7 @@
+ 		= DECL_INSN_RESERV (out_insn_reserv);
+ 	      DECL_BYPASS (decl)->in_insn_reserv
+ 		= DECL_INSN_RESERV (in_insn_reserv);
+-	      bypass
+-		= find_bypass (DECL_INSN_RESERV (out_insn_reserv)->bypass_list,
+-			       DECL_BYPASS (decl)->in_insn_reserv);
+-	      if (bypass != NULL)
+-		{
+-		  if (DECL_BYPASS (decl)->latency == bypass->latency)
+-		    {
+-		      if (!w_flag)
+-			error
+-			  ("the same bypass `%s - %s' is already defined",
+-			   DECL_BYPASS (decl)->out_insn_name,
+-			   DECL_BYPASS (decl)->in_insn_name);
+-		      else
+-			warning
+-			  (0, "the same bypass `%s - %s' is already defined",
+-			   DECL_BYPASS (decl)->out_insn_name,
+-			   DECL_BYPASS (decl)->in_insn_name);
+-		    }
+-		  else
+-		    error ("bypass `%s - %s' is already defined",
+-			   DECL_BYPASS (decl)->out_insn_name,
+-			   DECL_BYPASS (decl)->in_insn_name);
+-		}
+-	      else
+-		{
+-		  DECL_BYPASS (decl)->next
+-		    = DECL_INSN_RESERV (out_insn_reserv)->bypass_list;
+-		  DECL_INSN_RESERV (out_insn_reserv)->bypass_list
+-		    = DECL_BYPASS (decl);
+-		}
++	      insert_bypass (DECL_BYPASS (decl));
+ 	    }
+ 	}
+     }
+@@ -8159,19 +8185,32 @@
+ 			    (advance_cycle_insn_decl)->insn_num));
+ 	    fprintf (output_file, "        case %d:\n",
+ 		     bypass->in_insn_reserv->insn_num);
+-	    if (bypass->bypass_guard_name == NULL)
+-	      fprintf (output_file, "          return %d;\n",
+-		       bypass->latency);
+-	    else
++	    for (;;)
+ 	      {
+-		fprintf (output_file,
+-			 "          if (%s (%s, %s))\n",
+-			 bypass->bypass_guard_name, INSN_PARAMETER_NAME,
+-			 INSN2_PARAMETER_NAME);
+-		fprintf (output_file,
+-			 "            return %d;\n          break;\n",
+-			 bypass->latency);
++		if (bypass->bypass_guard_name == NULL)
++		  {
++		    gcc_assert (bypass->next == NULL
++				|| (bypass->in_insn_reserv
++				    != bypass->next->in_insn_reserv));
++		    fprintf (output_file, "          return %d;\n",
++			     bypass->latency);
++		  }
++		else
++		  {
++		    fprintf (output_file,
++			     "          if (%s (%s, %s))\n",
++			     bypass->bypass_guard_name, INSN_PARAMETER_NAME,
++			     INSN2_PARAMETER_NAME);
++		    fprintf (output_file, "            return %d;\n",
++			     bypass->latency);
++		  }
++		if (bypass->next == NULL
++		    || bypass->in_insn_reserv != bypass->next->in_insn_reserv)
++		  break;
++		bypass = bypass->next;
+ 	      }
++	    if (bypass->bypass_guard_name != NULL)
++	      fprintf (output_file, "          break;\n");
+ 	  }
+ 	fputs ("        }\n      break;\n", output_file);
+       }
+Index: gcc/rtl.def
+===================================================================
+--- a/src/gcc/rtl.def	(revision 146514)
++++ b/src/gcc/rtl.def	(working copy)
+@@ -1088,7 +1088,11 @@
+    guard for the bypass.  The function will get the two insns as
+    parameters.  If the function returns zero the bypass will be
+    ignored for this case.  Additional guard is necessary to recognize
+-   complicated bypasses, e.g. when consumer is load address.  */
++   complicated bypasses, e.g. when consumer is load address.  If there
++   are more one bypass with the same output and input insns, the
++   chosen bypass is the first bypass with a guard in description whose
++   guard function returns nonzero.  If there is no such bypass, then
++   bypass without the guard function is chosen.  */
+ DEF_RTL_EXPR(DEFINE_BYPASS, "define_bypass", "issS", RTX_EXTRA)
+ 
+ /* (define_automaton string) describes names of automata generated and
+Index: gcc/ChangeLog.ix86
+===================================================================
+--- a/src/gcc/ChangeLog.ix86	(revision 0)
++++ b/src/gcc/ChangeLog.ix86	(revision 0)
+@@ -0,0 +1,121 @@
++2009-04-20  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-04-20  Joey Ye  <joey.ye@intel.com>
++		    Xuepeng Guo <xuepeng.guo@intel.com>
++		    H.J. Lu  <hongjiu.lu@intel.com>
++
++	* config/i386/atom.md: Add bypasses with ix86_dep_by_shift_count.
++
++	* config/i386/i386.c (LEA_SEARCH_THRESHOLD): New macro.
++	(IX86_LEA_PRIORITY): Likewise.
++	(distance_non_agu_define): New function.
++	(distance_agu_use): Likewise.
++	(ix86_lea_for_add_ok): Likewise.
++	(ix86_dep_by_shift_count): Likewise.
++
++	* config/i386/i386.md: Call ix86_lea_for_add_ok to decide we
++	should split for LEA.
++
++	* config/i386/i386-protos.h (ix86_lea_for_add_ok): Declare new
++	function.
++	(ix86_dep_by_shift_count): Likewise.
++
++2009-04-07  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-04-07  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* doc/invoke.texi: Document Atom support.
++
++2009-04-06  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* config/i386/i386.md: Revert 2 accidental checkins.
++
++2009-04-06  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-04-06  Joey Ye  <joey.ye@intel.com>
++		    Xuepeng Guo <xuepeng.guo@intel.com>
++		    H.J. Lu  <hongjiu.lu@intel.com>
++
++	Atom pipeline model, tuning and insn selection.
++	* config.gcc (atom): Add atom config options and target.
++
++	* config/i386/atom.md: New.
++
++	* config/i386/i386.c (atom_cost): New cost.
++	(m_ATOM): New macro flag.
++	(initial_ix86_tune_features): Set m_ATOM.
++	(x86_accumulate_outgoing_args): Likewise.
++	(x86_arch_always_fancy_math_387): Likewise.
++	(processor_target): Add Atom cost.
++	(cpu_names): Add Atom cpu name.
++	(override_options): Set Atom ISA.
++	(ix86_issue_rate): New case PROCESSOR_ATOM.
++	(ix86_adjust_cost): Likewise.
++
++	* config/i386/i386.h (TARGET_ATOM): New target macro.
++	(ix86_tune_indices): Add X86_TUNE_OPT_AGU.
++	(TARGET_OPT_AGU): New target option.
++	(target_cpu_default): Add TARGET_CPU_DEFAULT_atom.
++	(processor_type): Add PROCESSOR_ATOM.
++
++	* config/i386/i386.md (cpu): Add new value "atom".
++	(use_carry, movu): New attr.
++	(atom.md): Include atom.md.
++	(adddi3_carry_rex64): Set attr "use_carry".
++	(addqi3_carry): Likewise.
++	(addhi3_carry): Likewise.
++	(addsi3_carry): Likewise.
++	(*addsi3_carry_zext): Likewise.
++	(subdi3_carry_rex64): Likewise.
++	(subqi3_carry): Likewise.
++	(subhi3_carry): Likewise.
++	(subsi3_carry): Likewise.
++	(x86_movdicc_0_m1_rex64): Likewise.
++	(*x86_movdicc_0_m1_se): Likewise.
++	(x86_movsicc_0_m1): Likewise.
++	(*x86_movsicc_0_m1_se): Likewise.
++	(*adddi_1_rex64): Emit add insn as much as possible.
++	(*addsi_1): Likewise.
++	(return_internal): Set atom_unit.
++	(return_internal_long): Likewise.
++	(return_pop_internal): Likewise.
++	(*rcpsf2_sse): Set atom_sse_attr attr.
++	(*qrt<mode>2_sse): Likewise.
++
++2009-04-02  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-04-02  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* config/i386/i386.c (ix86_abi): Move initialization to ...
++	(override_options): Here.
++
++2009-03-29  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-03-29  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* config/i386/i386-protos.h (ix86_agi_dependent): New.
++
++	* config/i386/i386.c (ix86_agi_dependent): Rewrite.
++	(ix86_adjust_cost): Updated.
++
++2009-03-27  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-03-27  Vladimir Makarov  <vmakarov@redhat.com>
++
++	* genautomata.c: Add a new year to the copyright.  Add a new
++	reference.
++	(struct insn_reserv_decl): Add comments for member bypass_list.
++	(find_bypass): Remove.
++	(insert_bypass): New.
++	(process_decls): Use insert_bypass.
++	(output_internal_insn_latency_func): Output all bypasses with the
++	same input insn in one switch case.
++
++	* rtl.def (define_bypass): Describe bypass choice.
++	* doc/md.texi (define_bypass): Ditto.
+Index: gcc/config.gcc
+===================================================================
+--- a/src/gcc/config.gcc	(revision 146514)
++++ b/src/gcc/config.gcc	(working copy)
+@@ -1088,7 +1088,7 @@
+ 			tmake_file="${tmake_file} i386/t-linux64"
+ 			need_64bit_hwint=yes
+ 			case X"${with_cpu}" in
+-			Xgeneric|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx)
++			Xgeneric|Xatom|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx)
+ 				;;
+ 			X)
+ 				if test x$with_cpu_64 = x; then
+@@ -1097,7 +1097,7 @@
+ 				;;
+ 			*)
+ 				echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2
+-				echo "generic core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx" 1>&2
++				echo "generic atom core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx" 1>&2
+ 				exit 1
+ 				;;
+ 			esac
+@@ -1202,7 +1202,7 @@
+ 		# libgcc/configure.ac instead.
+ 		need_64bit_hwint=yes
+ 		case X"${with_cpu}" in
+-		Xgeneric|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx)
++		Xgeneric|Xatom|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx)
+ 			;;
+ 		X)
+ 			if test x$with_cpu_64 = x; then
+@@ -1211,7 +1211,7 @@
+ 			;;
+ 		*)
+ 			echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2
+-			echo "generic core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx" 1>&2
++			echo "generic atom core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx" 1>&2
+ 			exit 1
+ 			;;
+ 		esac
+@@ -2805,7 +2805,7 @@
+ 				esac
+ 				# OK
+ 				;;
+-			"" | amdfam10 | barcelona | k8 | opteron | athlon64 | athlon-fx | nocona | core2 | generic)
++			"" | amdfam10 | barcelona | k8 | opteron | athlon64 | athlon-fx | nocona | core2 | atom | generic)
+ 				# OK
+ 				;;
+ 			*)
+Index: gcc/config/i386/i386.h
+===================================================================
+--- a/src/gcc/config/i386/i386.h	(revision 146514)
++++ b/src/gcc/config/i386/i386.h	(working copy)
+@@ -236,6 +236,7 @@
+ #define TARGET_GENERIC64 (ix86_tune == PROCESSOR_GENERIC64)
+ #define TARGET_GENERIC (TARGET_GENERIC32 || TARGET_GENERIC64)
+ #define TARGET_AMDFAM10 (ix86_tune == PROCESSOR_AMDFAM10)
++#define TARGET_ATOM (ix86_tune == PROCESSOR_ATOM)
+ 
+ /* Feature tests against the various tunings.  */
+ enum ix86_tune_indices {
+@@ -300,6 +301,7 @@
+   X86_TUNE_USE_VECTOR_FP_CONVERTS,
+   X86_TUNE_USE_VECTOR_CONVERTS,
+   X86_TUNE_FUSE_CMP_AND_BRANCH,
++  X86_TUNE_OPT_AGU,
+ 
+   X86_TUNE_LAST
+ };
+@@ -387,6 +389,7 @@
+ 	ix86_tune_features[X86_TUNE_USE_VECTOR_CONVERTS]
+ #define TARGET_FUSE_CMP_AND_BRANCH \
+ 	ix86_tune_features[X86_TUNE_FUSE_CMP_AND_BRANCH]
++#define TARGET_OPT_AGU ix86_tune_features[X86_TUNE_OPT_AGU]
+ 
+ /* Feature tests against the various architecture variations.  */
+ enum ix86_arch_indices {
+@@ -569,6 +572,7 @@
+   TARGET_CPU_DEFAULT_prescott,
+   TARGET_CPU_DEFAULT_nocona,
+   TARGET_CPU_DEFAULT_core2,
++  TARGET_CPU_DEFAULT_atom,
+ 
+   TARGET_CPU_DEFAULT_geode,
+   TARGET_CPU_DEFAULT_k6,
+@@ -2260,6 +2264,7 @@
+   PROCESSOR_GENERIC32,
+   PROCESSOR_GENERIC64,
+   PROCESSOR_AMDFAM10,
++  PROCESSOR_ATOM,
+   PROCESSOR_max
+ };
+ 
+Index: gcc/config/i386/i386.md
+===================================================================
+--- a/src/gcc/config/i386/i386.md	(revision 146514)
++++ b/src/gcc/config/i386/i386.md	(working copy)
+@@ -316,7 +316,7 @@
+ 
+ 
+ ;; Processor type.
+-(define_attr "cpu" "none,pentium,pentiumpro,geode,k6,athlon,k8,core2,
++(define_attr "cpu" "none,pentium,pentiumpro,geode,k6,athlon,k8,core2,atom,
+ 		    generic64,amdfam10"
+   (const (symbol_ref "ix86_schedule")))
+ 
+@@ -612,6 +612,12 @@
+ (define_attr "i387_cw" "trunc,floor,ceil,mask_pm,uninitialized,any"
+   (const_string "any"))
+ 
++;; Define attribute to classify add/sub insns that consumes carry flag (CF)
++(define_attr "use_carry" "0,1" (const_string "0"))
++
++;; Define attribute to indicate unaligned ssemov insns
++(define_attr "movu" "0,1" (const_string "0"))
++
+ ;; Describe a user's asm statement.
+ (define_asm_attributes
+   [(set_attr "length" "128")
+@@ -727,6 +733,7 @@
+ (include "k6.md")
+ (include "athlon.md")
+ (include "geode.md")
++(include "atom.md")
+ 
+ 
+ ;; Operand and operator predicates and constraints
+@@ -5790,6 +5797,7 @@
+   "TARGET_64BIT && ix86_binary_operator_ok (PLUS, DImode, operands)"
+   "adc{q}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "DI")])
+ 
+@@ -5864,6 +5872,7 @@
+   "ix86_binary_operator_ok (PLUS, QImode, operands)"
+   "adc{b}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "QI")])
+ 
+@@ -5876,6 +5885,7 @@
+   "ix86_binary_operator_ok (PLUS, HImode, operands)"
+   "adc{w}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "HI")])
+ 
+@@ -5888,6 +5898,7 @@
+   "ix86_binary_operator_ok (PLUS, SImode, operands)"
+   "adc{l}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "SI")])
+ 
+@@ -5901,6 +5912,7 @@
+   "TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands)"
+   "adc{l}\t{%2, %k0|%k0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "SI")])
+ 
+@@ -6130,9 +6142,9 @@
+    (set_attr "mode" "SI")])
+ 
+ (define_insn "*adddi_1_rex64"
+-  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,rm,r")
+-	(plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0,r")
+-		 (match_operand:DI 2 "x86_64_general_operand" "rme,re,le")))
++  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,rm,r,r")
++	(plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0,r,r")
++		 (match_operand:DI 2 "x86_64_general_operand" "rme,re,0,le")))
+    (clobber (reg:CC FLAGS_REG))]
+   "TARGET_64BIT && ix86_binary_operator_ok (PLUS, DImode, operands)"
+ {
+@@ -6153,6 +6165,10 @@
+ 	}
+ 
+     default:
++      /* Use add as much as possible to replace lea for AGU optimization. */
++      if (which_alternative == 2 && TARGET_OPT_AGU)
++        return "add{q}\t{%1, %0|%0, %1}";
++        
+       gcc_assert (rtx_equal_p (operands[0], operands[1]));
+ 
+       /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'.
+@@ -6171,8 +6187,11 @@
+     }
+ }
+   [(set (attr "type")
+-     (cond [(eq_attr "alternative" "2")
++     (cond [(and (eq_attr "alternative" "2") 
++                 (eq (symbol_ref "TARGET_OPT_AGU") (const_int 0)))
+ 	      (const_string "lea")
++            (eq_attr "alternative" "3")
++              (const_string "lea")
+ 	    ; Current assemblers are broken and do not allow @GOTOFF in
+ 	    ; ought but a memory context.
+ 	    (match_operand:DI 2 "pic_symbolic_operand" "")
+@@ -6189,8 +6208,8 @@
+ 	(plus:DI (match_operand:DI 1 "register_operand" "")
+ 		 (match_operand:DI 2 "x86_64_nonmemory_operand" "")))
+    (clobber (reg:CC FLAGS_REG))]
+-  "TARGET_64BIT && reload_completed
+-   && true_regnum (operands[0]) != true_regnum (operands[1])"
++  "TARGET_64BIT && reload_completed 
++   && ix86_lea_for_add_ok (PLUS, insn, operands)"
+   [(set (match_dup 0)
+ 	(plus:DI (match_dup 1)
+ 		 (match_dup 2)))]
+@@ -6394,9 +6413,9 @@
+ 
+ 
+ (define_insn "*addsi_1"
+-  [(set (match_operand:SI 0 "nonimmediate_operand" "=r,rm,r")
+-	(plus:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0,r")
+-		 (match_operand:SI 2 "general_operand" "g,ri,li")))
++  [(set (match_operand:SI 0 "nonimmediate_operand" "=r,rm,r,r")
++	(plus:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0,r,r")
++		 (match_operand:SI 2 "general_operand" "g,ri,0,li")))
+    (clobber (reg:CC FLAGS_REG))]
+   "ix86_binary_operator_ok (PLUS, SImode, operands)"
+ {
+@@ -6417,6 +6436,10 @@
+ 	}
+ 
+     default:
++      /* Use add as much as possible to replace lea for AGU optimization. */
++      if (which_alternative == 2 && TARGET_OPT_AGU)
++        return "add{l}\t{%1, %0|%0, %1}";
++
+       gcc_assert (rtx_equal_p (operands[0], operands[1]));
+ 
+       /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'.
+@@ -6433,7 +6456,10 @@
+     }
+ }
+   [(set (attr "type")
+-     (cond [(eq_attr "alternative" "2")
++     (cond [(and (eq_attr "alternative" "2") 
++                 (eq (symbol_ref "TARGET_OPT_AGU") (const_int 0)))
++               (const_string "lea")
++            (eq_attr "alternative" "3")
+ 	      (const_string "lea")
+ 	    ; Current assemblers are broken and do not allow @GOTOFF in
+ 	    ; ought but a memory context.
+@@ -6451,8 +6477,7 @@
+ 	(plus (match_operand 1 "register_operand" "")
+               (match_operand 2 "nonmemory_operand" "")))
+    (clobber (reg:CC FLAGS_REG))]
+-  "reload_completed
+-   && true_regnum (operands[0]) != true_regnum (operands[1])"
++  "reload_completed && ix86_lea_for_add_ok (PLUS, insn, operands)" 
+   [(const_int 0)]
+ {
+   rtx pat;
+@@ -7553,6 +7578,7 @@
+   "TARGET_64BIT && ix86_binary_operator_ok (MINUS, DImode, operands)"
+   "sbb{q}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "DI")])
+ 
+@@ -7601,6 +7627,7 @@
+   "ix86_binary_operator_ok (MINUS, QImode, operands)"
+   "sbb{b}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "QI")])
+ 
+@@ -7613,6 +7640,7 @@
+   "ix86_binary_operator_ok (MINUS, HImode, operands)"
+   "sbb{w}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "HI")])
+ 
+@@ -7625,6 +7653,7 @@
+   "ix86_binary_operator_ok (MINUS, SImode, operands)"
+   "sbb{l}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "SI")])
+ 
+@@ -15244,6 +15273,7 @@
+   "reload_completed"
+   "ret"
+   [(set_attr "length" "1")
++   (set_attr "atom_unit" "jeu")
+    (set_attr "length_immediate" "0")
+    (set_attr "modrm" "0")])
+ 
+@@ -15256,6 +15286,7 @@
+   "reload_completed"
+   "rep\;ret"
+   [(set_attr "length" "1")
++   (set_attr "atom_unit" "jeu")
+    (set_attr "length_immediate" "0")
+    (set_attr "prefix_rep" "1")
+    (set_attr "modrm" "0")])
+@@ -15266,6 +15297,7 @@
+   "reload_completed"
+   "ret\t%0"
+   [(set_attr "length" "3")
++   (set_attr "atom_unit" "jeu")
+    (set_attr "length_immediate" "2")
+    (set_attr "modrm" "0")])
+ 
+@@ -16387,6 +16419,7 @@
+   "TARGET_SSE_MATH"
+   "%vrcpss\t{%1, %d0|%d0, %1}"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "rcp")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "SF")])
+ 
+@@ -16738,6 +16771,7 @@
+   "TARGET_SSE_MATH"
+   "%vrsqrtss\t{%1, %d0|%d0, %1}"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "rcp")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "SF")])
+ 
+@@ -16758,6 +16792,7 @@
+   "SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH"
+   "%vsqrts<ssemodefsuffix>\t{%1, %d0|%d0, %1}"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "sqrt")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "<MODE>")
+    (set_attr "athlon_decode" "*")
+@@ -19811,6 +19846,7 @@
+   ; Since we don't have the proper number of operands for an alu insn,
+   ; fill in all the blanks.
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "memory" "none")
+    (set_attr "imm_disp" "false")
+@@ -19826,6 +19862,7 @@
+   ""
+   "sbb{q}\t%0, %0"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "memory" "none")
+    (set_attr "imm_disp" "false")
+@@ -19869,6 +19906,7 @@
+   ; Since we don't have the proper number of operands for an alu insn,
+   ; fill in all the blanks.
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "memory" "none")
+    (set_attr "imm_disp" "false")
+@@ -19884,6 +19922,7 @@
+   ""
+   "sbb{l}\t%0, %0"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "memory" "none")
+    (set_attr "imm_disp" "false")
+@@ -20216,7 +20255,8 @@
+     }
+ }
+   [(set (attr "type")
+-	(cond [(eq_attr "alternative" "0")
++	(cond [(and (eq_attr "alternative" "0") 
++	            (eq (symbol_ref "TARGET_OPT_AGU") (const_int 0)))
+ 		 (const_string "alu")
+ 	       (match_operand:SI 2 "const0_operand" "")
+ 		 (const_string "imov")
+@@ -20259,7 +20299,8 @@
+     }
+ }
+   [(set (attr "type")
+-	(cond [(eq_attr "alternative" "0")
++	(cond [(and (eq_attr "alternative" "0")
++	            (eq (symbol_ref "TARGET_OPT_AGU") (const_int 0)))
+ 		 (const_string "alu")
+ 	       (match_operand:DI 2 "const0_operand" "")
+ 		 (const_string "imov")
+@@ -21751,6 +21792,7 @@
+   return patterns[locality];
+ }
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "prefetch")
+    (set_attr "memory" "none")])
+ 
+ (define_insn "*prefetch_sse_rex"
+@@ -21769,6 +21811,7 @@
+   return patterns[locality];
+ }
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "prefetch")
+    (set_attr "memory" "none")])
+ 
+ (define_insn "*prefetch_3dnow"
+Index: gcc/config/i386/atom.md
+===================================================================
+--- a/src/gcc/config/i386/atom.md	(revision 0)
++++ b/src/gcc/config/i386/atom.md	(revision 0)
+@@ -0,0 +1,795 @@
++;; Atom Scheduling
++;; Copyright (C) 2009 Free Software Foundation, Inc.
++;;
++;; This file is part of GCC.
++;;
++;; GCC is free software; you can redistribute it and/or modify
++;; it under the terms of the GNU General Public License as published by
++;; the Free Software Foundation; either version 3, or (at your option)
++;; any later version.
++;;
++;; GCC is distributed in the hope that it will be useful,
++;; but WITHOUT ANY WARRANTY; without even the implied warranty of
++;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++;; GNU General Public License for more details.
++;;
++;; You should have received a copy of the GNU General Public License
++;; along with GCC; see the file COPYING3.  If not see
++;; <http://www.gnu.org/licenses/>.
++;;
++;; Atom is an in-order core with two integer pipelines.
++
++
++(define_attr "atom_unit" "sishuf,simul,jeu,complex,other" 
++  (const_string "other"))
++
++(define_attr "atom_sse_attr" "rcp,movdup,lfence,fence,prefetch,sqrt,mxcsr,other"
++  (const_string "other"))
++
++(define_automaton "atom")
++
++;;  Atom has two ports: port 0 and port 1 connecting to all execution units
++(define_cpu_unit "atom-port-0,atom-port-1" "atom")
++
++;;  EU: Execution Unit
++;;  Atom EUs are connected by port 0 or port 1. 
++
++(define_cpu_unit "atom-eu-0, atom-eu-1,
++                  atom-imul-1, atom-imul-2, atom-imul-3, atom-imul-4"
++                  "atom")
++
++;; Some EUs have duplicated copied and can be accessed via either
++;; port 0 or port 1
++;; (define_reservation "atom-port-either" "(atom-port-0 | atom-port-1)")
++
++;;; Some instructions is dual-pipe execution, need both ports
++;;; Complex multi-op macro-instructoins need both ports and all EUs
++(define_reservation "atom-port-dual" "(atom-port-0 + atom-port-1)")
++(define_reservation "atom-all-eu" "(atom-eu-0 + atom-eu-1 + 
++                                    atom-imul-1 + atom-imul-2 + atom-imul-3 +
++                                    atom-imul-4)")
++
++;;; Most of simple instructions have 1 cycle latency. Some of them
++;;; issue in port 0, some in port 0 and some in either port.
++(define_reservation "atom-simple-0" "(atom-port-0 + atom-eu-0)")
++(define_reservation "atom-simple-1" "(atom-port-1 + atom-eu-1)")
++(define_reservation "atom-simple-either" "(atom-simple-0 | atom-simple-1)")
++
++;;; Some insn issues in port 0 with 3 cycle latency and 1 cycle tput
++(define_reservation "atom-eu-0-3-1" "(atom-port-0 + atom-eu-0, nothing*2)")
++
++;;; fmul insn can have 4 or 5 cycles latency
++(define_reservation "atom-fmul-5c" "(atom-port-0 + atom-eu-0), nothing*4")
++(define_reservation "atom-fmul-4c" "(atom-port-0 + atom-eu-0), nothing*3")
++
++;;; fadd can has 5 cycles latency depends on instruction forms
++(define_reservation "atom-fadd-5c" "(atom-port-1 + atom-eu-1), nothing*5")
++
++;;; imul insn has 5 cycles latency
++(define_reservation "atom-imul-32" 
++                    "atom-imul-1, atom-imul-2, atom-imul-3, atom-imul-4, 
++                     atom-port-0")
++;;; imul instruction excludes other non-FP instructions.
++(exclusion_set "atom-eu-0, atom-eu-1" 
++               "atom-imul-1, atom-imul-2, atom-imul-3, atom-imul-4")
++
++;;; dual-execution instructions can have 1,2,4,5 cycles latency depends on 
++;;; instruction forms
++(define_reservation "atom-dual-1c" "(atom-port-dual + atom-eu-0 + atom-eu-1)")
++(define_reservation "atom-dual-2c"
++                    "(atom-port-dual + atom-eu-0 + atom-eu-1, nothing)")
++(define_reservation "atom-dual-5c"
++                    "(atom-port-dual + atom-eu-0 + atom-eu-1, nothing*4)")
++
++;;; Complex macro-instruction has variants of latency, and uses both ports.
++(define_reservation "atom-complex" "(atom-port-dual + atom-all-eu)")
++
++(define_insn_reservation  "atom_other" 9
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "other")
++            (eq_attr "atom_unit" "!jeu")))
++  "atom-complex, atom-all-eu*8")
++
++;; return has type "other" with atom_unit "jeu"
++(define_insn_reservation  "atom_other_2" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "other")
++            (eq_attr "atom_unit" "jeu")))
++  "atom-dual-1c")
++
++(define_insn_reservation  "atom_multi" 9
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "multi"))
++  "atom-complex, atom-all-eu*8")
++
++;; Normal alu insns without carry
++(define_insn_reservation  "atom_alu" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "alu")
++            (and (eq_attr "memory" "none")
++                 (eq_attr "use_carry" "0"))))
++  "atom-simple-either")
++
++;; Normal alu insns without carry
++(define_insn_reservation  "atom_alu_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "alu")
++            (and (eq_attr "memory" "!none")
++                 (eq_attr "use_carry" "0"))))
++  "atom-simple-either")
++
++;; Alu insn consuming CF, such as add/sbb
++(define_insn_reservation  "atom_alu_carry" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "alu")
++            (and (eq_attr "memory" "none")
++                 (eq_attr "use_carry" "1"))))
++  "atom-simple-either")
++
++;; Alu insn consuming CF, such as add/sbb
++(define_insn_reservation  "atom_alu_carry_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "alu")
++            (and (eq_attr "memory" "!none")
++                (eq_attr "use_carry" "1"))))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_alu1" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "alu1")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_alu1_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "alu1")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_negnot" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "negnot")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_negnot_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "negnot")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_imov" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imov")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_imov_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imov")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++;; 16<-16, 32<-32
++(define_insn_reservation  "atom_imovx" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imovx")
++            (and (eq_attr "memory" "none")
++                 (ior (and (match_operand:HI 0 "register_operand")
++                           (match_operand:HI 1 "general_operand"))
++                      (and (match_operand:SI 0 "register_operand")
++                           (match_operand:SI 1 "general_operand"))))))
++  "atom-simple-either")
++
++;; 16<-16, 32<-32, mem
++(define_insn_reservation  "atom_imovx_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imovx")
++            (and (eq_attr "memory" "!none")
++                 (ior (and (match_operand:HI 0 "register_operand")
++                           (match_operand:HI 1 "general_operand"))
++                      (and (match_operand:SI 0 "register_operand")
++                           (match_operand:SI 1 "general_operand"))))))
++  "atom-simple-either")
++
++;; 32<-16, 32<-8, 64<-16, 64<-8, 64<-32, 8<-8
++(define_insn_reservation  "atom_imovx_2" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imovx")
++            (and (eq_attr "memory" "none")
++                 (ior (match_operand:QI 0 "register_operand")
++                      (ior (and (match_operand:SI 0 "register_operand")
++                                (not (match_operand:SI 1 "general_operand")))
++                           (match_operand:DI 0 "register_operand"))))))
++  "atom-simple-0")
++
++;; 32<-16, 32<-8, 64<-16, 64<-8, 64<-32, 8<-8, mem
++(define_insn_reservation  "atom_imovx_2_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imovx")
++            (and (eq_attr "memory" "!none")
++                 (ior (match_operand:QI 0 "register_operand")
++                      (ior (and (match_operand:SI 0 "register_operand")
++                                (not (match_operand:SI 1 "general_operand")))
++                           (match_operand:DI 0 "register_operand"))))))
++  "atom-simple-0")
++
++;; 16<-8
++(define_insn_reservation  "atom_imovx_3" 3
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imovx")
++            (and (match_operand:HI 0 "register_operand")
++                 (match_operand:QI 1 "general_operand"))))
++  "atom-complex, atom-all-eu*2")
++
++(define_insn_reservation  "atom_lea" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "lea")
++            (eq_attr "mode" "!HI")))
++  "atom-simple-either")
++
++;; lea 16bit address is complex insn
++(define_insn_reservation  "atom_lea_2" 2
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "lea")
++            (eq_attr "mode" "HI")))
++  "atom-complex, atom-all-eu")
++
++(define_insn_reservation  "atom_incdec" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "incdec")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_incdec_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "incdec")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++;; simple shift instruction use SHIFT eu, none memory
++(define_insn_reservation  "atom_ishift" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ishift")
++            (and (eq_attr "memory" "none") (eq_attr "prefix_0f" "0"))))
++  "atom-simple-0")
++
++;; simple shift instruction use SHIFT eu, memory
++(define_insn_reservation  "atom_ishift_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ishift")
++            (and (eq_attr "memory" "!none") (eq_attr "prefix_0f" "0"))))
++  "atom-simple-0")
++
++;; DF shift (prefixed with 0f) is complex insn with latency of 7 cycles
++(define_insn_reservation  "atom_ishift_3" 7
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ishift")
++            (eq_attr "prefix_0f" "1")))
++  "atom-complex, atom-all-eu*6")
++
++(define_insn_reservation  "atom_ishift1" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ishift1")
++            (eq_attr "memory" "none")))
++  "atom-simple-0")
++
++(define_insn_reservation  "atom_ishift1_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ishift1")
++            (eq_attr "memory" "!none")))
++  "atom-simple-0")
++
++(define_insn_reservation  "atom_rotate" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "rotate")
++            (eq_attr "memory" "none")))
++  "atom-simple-0")
++
++(define_insn_reservation  "atom_rotate_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "rotate")
++            (eq_attr "memory" "!none")))
++  "atom-simple-0")
++
++(define_insn_reservation  "atom_rotate1" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "rotate1")
++            (eq_attr "memory" "none")))
++  "atom-simple-0")
++
++(define_insn_reservation  "atom_rotate1_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "rotate1")
++            (eq_attr "memory" "!none")))
++  "atom-simple-0")
++
++(define_insn_reservation  "atom_imul" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imul")
++            (and (eq_attr "memory" "none") (eq_attr "mode" "SI"))))
++  "atom-imul-32")
++
++(define_insn_reservation  "atom_imul_mem" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imul")
++            (and (eq_attr "memory" "!none") (eq_attr "mode" "SI"))))
++  "atom-imul-32")
++
++;; latency set to 10 as common 64x64 imul
++(define_insn_reservation  "atom_imul_3" 10
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imul")
++            (eq_attr "mode" "!SI")))
++  "atom-complex, atom-all-eu*9")
++
++(define_insn_reservation  "atom_idiv" 65
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "idiv"))
++  "atom-complex, atom-all-eu*32, nothing*32")
++
++(define_insn_reservation  "atom_icmp" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "icmp")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_icmp_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "icmp")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_test" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "test")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_test_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "test")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_ibr" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ibr")
++            (eq_attr "memory" "!load")))
++  "atom-simple-1")
++
++;; complex if jump target is from address
++(define_insn_reservation  "atom_ibr_2" 2
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ibr")
++            (eq_attr "memory" "load")))
++  "atom-complex, atom-all-eu")
++
++(define_insn_reservation  "atom_setcc" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "setcc")
++            (eq_attr "memory" "!store")))
++  "atom-simple-either")
++
++;; 2 cycles complex if target is in memory
++(define_insn_reservation  "atom_setcc_2" 2
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "setcc")
++            (eq_attr "memory" "store")))
++  "atom-complex, atom-all-eu")
++
++(define_insn_reservation  "atom_icmov" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "icmov")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_icmov_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "icmov")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++;; UCODE if segreg, ignored
++(define_insn_reservation  "atom_push" 2
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "push"))
++  "atom-dual-2c")
++
++;; pop r64 is 1 cycle. UCODE if segreg, ignored
++(define_insn_reservation  "atom_pop" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "pop")
++            (eq_attr "mode" "DI")))
++  "atom-dual-1c")
++
++;; pop non-r64 is 2 cycles. UCODE if segreg, ignored
++(define_insn_reservation  "atom_pop_2" 2
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "pop")
++            (eq_attr "mode" "!DI")))
++  "atom-dual-2c")
++
++;; UCODE if segreg, ignored
++(define_insn_reservation  "atom_call" 1
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "call"))
++  "atom-dual-1c")
++
++(define_insn_reservation  "atom_callv" 1
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "callv"))
++  "atom-dual-1c")
++
++(define_insn_reservation  "atom_leave" 3
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "leave"))
++  "atom-complex, atom-all-eu*2")
++
++(define_insn_reservation  "atom_str" 3
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "str"))
++  "atom-complex, atom-all-eu*2")
++
++(define_insn_reservation  "atom_sselog" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sselog")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_sselog_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sselog")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_sselog1" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sselog1")
++            (eq_attr "memory" "none")))
++  "atom-simple-0")
++
++(define_insn_reservation  "atom_sselog1_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sselog1")
++            (eq_attr "memory" "!none")))
++  "atom-simple-0")
++
++;; not pmad, not psad
++(define_insn_reservation  "atom_sseiadd" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseiadd")
++            (and (not (match_operand:V2DI 0 "register_operand"))
++                 (and (eq_attr "atom_unit" "!simul")
++                      (eq_attr "atom_unit" "!complex")))))
++  "atom-simple-either")
++
++;; pmad, psad and 64
++(define_insn_reservation  "atom_sseiadd_2" 4
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseiadd")
++            (and (not (match_operand:V2DI 0 "register_operand"))
++                 (and (eq_attr "atom_unit" "simul" )
++                      (eq_attr "mode" "DI")))))
++  "atom-fmul-4c")
++
++;; pmad, psad and 128
++(define_insn_reservation  "atom_sseiadd_3" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseiadd")
++            (and (not (match_operand:V2DI 0 "register_operand"))
++                 (and (eq_attr "atom_unit" "simul" )
++                      (eq_attr "mode" "TI")))))
++  "atom-fmul-5c")
++
++;; if paddq(64 bit op), phadd/phsub
++(define_insn_reservation  "atom_sseiadd_4" 6
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseiadd")
++            (ior (match_operand:V2DI 0 "register_operand")
++                 (eq_attr "atom_unit" "complex"))))
++  "atom-complex, atom-all-eu*5")
++
++;; if immediate op. 
++(define_insn_reservation  "atom_sseishft" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseishft")
++            (and (eq_attr "atom_unit" "!sishuf")
++                 (match_operand 2 "immediate_operand"))))
++  "atom-simple-either")
++
++;; if palignr or psrldq
++(define_insn_reservation  "atom_sseishft_2" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseishft")
++            (and (eq_attr "atom_unit" "sishuf")
++                 (match_operand 2 "immediate_operand"))))
++  "atom-simple-0")
++
++;; if reg/mem op
++(define_insn_reservation  "atom_sseishft_3" 2
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseishft")
++            (not (match_operand 2 "immediate_operand"))))
++  "atom-complex, atom-all-eu")
++
++(define_insn_reservation  "atom_sseimul" 1
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "sseimul"))
++  "atom-simple-0")
++
++;; rcpss or rsqrtss
++(define_insn_reservation  "atom_sse" 4
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sse")
++            (and (eq_attr "atom_sse_attr" "rcp") (eq_attr "mode" "SF"))))
++  "atom-fmul-4c")
++
++;; movshdup, movsldup. Suggest to type sseishft
++(define_insn_reservation  "atom_sse_2" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sse")
++            (eq_attr "atom_sse_attr" "movdup")))
++  "atom-simple-0")
++
++;; lfence
++(define_insn_reservation  "atom_sse_3" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sse")
++            (eq_attr "atom_sse_attr" "lfence")))
++  "atom-simple-either")
++
++;; sfence,clflush,mfence, prefetch
++(define_insn_reservation  "atom_sse_4" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sse")
++            (ior (eq_attr "atom_sse_attr" "fence")
++                 (eq_attr "atom_sse_attr" "prefetch"))))
++  "atom-simple-0")
++
++;; rcpps, rsqrtss, sqrt, ldmxcsr
++(define_insn_reservation  "atom_sse_5" 7
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sse")
++            (ior (ior (eq_attr "atom_sse_attr" "sqrt")
++                      (eq_attr "atom_sse_attr" "mxcsr"))
++                 (and (eq_attr "atom_sse_attr" "rcp")
++                      (eq_attr "mode" "V4SF")))))
++  "atom-complex, atom-all-eu*6")
++
++;; xmm->xmm
++(define_insn_reservation  "atom_ssemov" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssemov")
++            (and (match_operand 0 "register_operand" "xy") (match_operand 1 "register_operand" "xy"))))
++  "atom-simple-either")
++
++;; reg->xmm
++(define_insn_reservation  "atom_ssemov_2" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssemov")
++            (and (match_operand 0 "register_operand" "xy") (match_operand 1 "register_operand" "r"))))
++  "atom-simple-0")
++
++;; xmm->reg
++(define_insn_reservation  "atom_ssemov_3" 3
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssemov")
++            (and (match_operand 0 "register_operand" "r") (match_operand 1 "register_operand" "xy"))))
++  "atom-eu-0-3-1")
++
++;; mov mem
++(define_insn_reservation  "atom_ssemov_4" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssemov")
++            (and (eq_attr "movu" "0") (eq_attr "memory" "!none"))))
++  "atom-simple-0")
++
++;; movu mem
++(define_insn_reservation  "atom_ssemov_5" 2
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssemov")
++            (ior (eq_attr "movu" "1") (eq_attr "memory" "!none"))))
++  "atom-complex, atom-all-eu")
++
++;; no memory simple
++(define_insn_reservation  "atom_sseadd" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseadd")
++            (and (eq_attr "memory" "none")
++                 (and (eq_attr "mode" "!V2DF")
++                      (eq_attr "atom_unit" "!complex")))))
++  "atom-fadd-5c")
++
++;; memory simple
++(define_insn_reservation  "atom_sseadd_mem" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseadd")
++            (and (eq_attr "memory" "!none")
++                 (and (eq_attr "mode" "!V2DF")
++                      (eq_attr "atom_unit" "!complex")))))
++  "atom-dual-5c")
++
++;; maxps, minps, *pd, hadd, hsub
++(define_insn_reservation  "atom_sseadd_3" 8
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseadd")
++            (ior (eq_attr "mode" "V2DF") (eq_attr "atom_unit" "complex"))))
++  "atom-complex, atom-all-eu*7")
++
++;; Except dppd/dpps
++(define_insn_reservation  "atom_ssemul" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssemul")
++            (eq_attr "mode" "!SF")))
++  "atom-fmul-5c")
++
++;; Except dppd/dpps, 4 cycle if mulss
++(define_insn_reservation  "atom_ssemul_2" 4
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssemul")
++            (eq_attr "mode" "SF")))
++  "atom-fmul-4c")
++
++(define_insn_reservation  "atom_ssecmp" 1
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "ssecmp"))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_ssecomi" 10
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "ssecomi"))
++  "atom-complex, atom-all-eu*9")
++
++;; no memory and cvtpi2ps, cvtps2pi, cvttps2pi
++(define_insn_reservation  "atom_ssecvt" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssecvt")
++            (ior (and (match_operand:V2SI 0 "register_operand")
++                      (match_operand:V4SF 1 "register_operand"))
++                 (and (match_operand:V4SF 0 "register_operand")
++                      (match_operand:V2SI 1 "register_operand")))))
++  "atom-fadd-5c")
++
++;; memory and cvtpi2ps, cvtps2pi, cvttps2pi
++(define_insn_reservation  "atom_ssecvt_2" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssecvt")
++            (ior (and (match_operand:V2SI 0 "register_operand")
++                      (match_operand:V4SF 1 "memory_operand"))
++                 (and (match_operand:V4SF 0 "register_operand")
++                      (match_operand:V2SI 1 "memory_operand")))))
++  "atom-dual-5c")
++
++;; otherwise. 7 cycles average for cvtss2sd
++(define_insn_reservation  "atom_ssecvt_3" 7
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssecvt")
++            (not (ior (and (match_operand:V2SI 0 "register_operand")
++                           (match_operand:V4SF 1 "nonimmediate_operand"))
++                      (and (match_operand:V4SF 0 "register_operand")
++                           (match_operand:V2SI 1 "nonimmediate_operand"))))))
++  "atom-complex, atom-all-eu*6")
++
++;; memory and cvtsi2sd
++(define_insn_reservation  "atom_sseicvt" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseicvt")
++            (and (match_operand:V2DF 0 "register_operand")
++                 (match_operand:SI 1 "memory_operand"))))
++  "atom-dual-5c")
++
++;; otherwise. 8 cycles average for cvtsd2si
++(define_insn_reservation  "atom_sseicvt_2" 8
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseicvt")
++            (not (and (match_operand:V2DF 0 "register_operand")
++                      (match_operand:SI 1 "memory_operand")))))
++  "atom-complex, atom-all-eu*7")
++
++(define_insn_reservation  "atom_ssediv" 62
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "ssediv"))
++  "atom-complex, atom-all-eu*12, nothing*49")
++
++;; simple for fmov
++(define_insn_reservation  "atom_fmov" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "fmov")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++;; simple for fmov
++(define_insn_reservation  "atom_fmov_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "fmov")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++;; Define bypass here
++
++;; There will be no stall from lea to non-mem EX insns
++(define_bypass 0 "atom_lea"
++                 "atom_alu_carry,
++                  atom_alu,atom_alu1,atom_negnot,atom_imov,atom_imovx,
++                  atom_incdec, atom_setcc, atom_icmov, atom_pop")
++
++(define_bypass 0 "atom_lea"
++                 "atom_alu_mem, atom_alu_carry_mem, atom_alu1_mem,
++                  atom_imovx_mem, atom_imovx_2_mem,
++                  atom_imov_mem, atom_icmov_mem, atom_fmov_mem"
++                 "!ix86_agi_dependent")
++
++;; There will be 3 cycles stall from EX insns to AGAN insns LEA
++(define_bypass 4 "atom_alu_carry,
++                  atom_alu,atom_alu1,atom_negnot,atom_imov,atom_imovx,
++                  atom_incdec,atom_ishift,atom_ishift1,atom_rotate,
++                  atom_rotate1, atom_setcc, atom_icmov, atom_pop,
++                  atom_alu_mem, atom_alu_carry_mem, atom_alu1_mem,
++                  atom_imovx_mem, atom_imovx_2_mem,
++                  atom_imov_mem, atom_icmov_mem, atom_fmov_mem"
++                 "atom_lea")
++
++;; There will be 3 cycles stall from EX insns to insns need addr calculation
++(define_bypass 4 "atom_alu_carry,
++                  atom_alu,atom_alu1,atom_negnot,atom_imov,atom_imovx,
++                  atom_incdec,atom_ishift,atom_ishift1,atom_rotate,
++                  atom_rotate1, atom_setcc, atom_icmov, atom_pop,
++                  atom_imovx_mem, atom_imovx_2_mem,
++                  atom_alu_mem, atom_alu_carry_mem, atom_alu1_mem,
++                  atom_imov_mem, atom_icmov_mem, atom_fmov_mem"
++                 "atom_alu_mem, atom_alu_carry_mem, atom_alu1_mem,
++                  atom_negnot_mem, atom_imov_mem, atom_incdec_mem,
++                  atom_imovx_mem, atom_imovx_2_mem,
++                  atom_imul_mem, atom_icmp_mem,
++                  atom_test_mem, atom_icmov_mem, atom_sselog_mem,
++                  atom_sselog1_mem, atom_fmov_mem, atom_sseadd_mem,
++                  atom_ishift_mem, atom_ishift1_mem, 
++                  atom_rotate_mem, atom_rotate1_mem"
++                  "ix86_agi_dependent")
++
++;; Stall from imul to lea is 8 cycles.
++(define_bypass 9 "atom_imul, atom_imul_mem" "atom_lea")
++
++;; Stall from imul to memory address is 8 cycles.
++(define_bypass 9 "atom_imul, atom_imul_mem" 
++                 "atom_alu_mem, atom_alu_carry_mem, atom_alu1_mem,
++                  atom_negnot_mem, atom_imov_mem, atom_incdec_mem,
++                  atom_ishift_mem, atom_ishift1_mem, atom_rotate_mem,
++                  atom_rotate1_mem, atom_imul_mem, atom_icmp_mem,
++                  atom_test_mem, atom_icmov_mem, atom_sselog_mem,
++                  atom_sselog1_mem, atom_fmov_mem, atom_sseadd_mem"
++                  "ix86_agi_dependent")
++
++;; There will be 0 cycle stall from cmp/test to jcc
++
++;; There will be 1 cycle stall from flag producer to cmov and adc/sbb
++(define_bypass 2 "atom_icmp, atom_test, atom_alu, atom_alu_carry,
++                  atom_alu1, atom_negnot, atom_incdec, atom_ishift,
++                  atom_ishift1, atom_rotate, atom_rotate1"
++                 "atom_icmov, atom_alu_carry")
++
++;; lea to shift count stall is 2 cycles
++(define_bypass 3 "atom_lea"
++                 "atom_ishift, atom_ishift1, atom_rotate, atom_rotate1,
++                  atom_ishift_mem, atom_ishift1_mem, 
++                  atom_rotate_mem, atom_rotate1_mem"
++                 "ix86_dep_by_shift_count")
++
++;; lea to shift source stall is 1 cycle
++(define_bypass 2 "atom_lea"
++                 "atom_ishift, atom_ishift1, atom_rotate, atom_rotate1"
++                 "!ix86_dep_by_shift_count")
++
++;; non-lea to shift count stall is 1 cycle
++(define_bypass 2 "atom_alu_carry,
++                  atom_alu,atom_alu1,atom_negnot,atom_imov,atom_imovx,
++                  atom_incdec,atom_ishift,atom_ishift1,atom_rotate,
++                  atom_rotate1, atom_setcc, atom_icmov, atom_pop,
++                  atom_alu_mem, atom_alu_carry_mem, atom_alu1_mem,
++                  atom_imovx_mem, atom_imovx_2_mem,
++                  atom_imov_mem, atom_icmov_mem, atom_fmov_mem"
++                 "atom_ishift, atom_ishift1, atom_rotate, atom_rotate1,
++                  atom_ishift_mem, atom_ishift1_mem, 
++                  atom_rotate_mem, atom_rotate1_mem"
++                 "ix86_dep_by_shift_count")
+Index: gcc/config/i386/sse.md
+===================================================================
+--- a/src/gcc/config/i386/sse.md	(revision 146514)
++++ b/src/gcc/config/i386/sse.md	(working copy)
+@@ -338,6 +338,7 @@
+    && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "vmovup<avxmodesuffixf2c>\t{%1, %0|%0, %1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "movu" "1")
+    (set_attr "prefix" "vex")
+    (set_attr "mode" "<MODE>")])
+ 
+@@ -363,6 +364,7 @@
+    && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "movup<ssemodesuffixf2c>\t{%1, %0|%0, %1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "movu" "1")
+    (set_attr "mode" "<MODE>")])
+ 
+ (define_insn "avx_movdqu<avxmodesuffix>"
+@@ -373,6 +375,7 @@
+   "TARGET_AVX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "vmovdqu\t{%1, %0|%0, %1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "movu" "1")
+    (set_attr "prefix" "vex")
+    (set_attr "mode" "<avxvecmode>")])
+ 
+@@ -383,6 +386,7 @@
+   "TARGET_SSE2 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "movdqu\t{%1, %0|%0, %1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "movu" "1")
+    (set_attr "prefix_data16" "1")
+    (set_attr "mode" "TI")])
+ 
+@@ -424,7 +428,7 @@
+ 		     UNSPEC_MOVNT))]
+   "TARGET_SSE2"
+   "movntdq\t{%1, %0|%0, %1}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
+    (set_attr "prefix_data16" "1")
+    (set_attr "mode" "TI")])
+ 
+@@ -434,7 +438,7 @@
+ 		   UNSPEC_MOVNT))]
+   "TARGET_SSE2"
+   "movnti\t{%1, %0|%0, %1}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
+    (set_attr "mode" "V2DF")])
+ 
+ (define_insn "avx_lddqu<avxmodesuffix>"
+@@ -445,6 +449,7 @@
+   "TARGET_AVX"
+   "vlddqu\t{%1, %0|%0, %1}"
+   [(set_attr "type" "ssecvt")
++   (set_attr "movu" "1")
+    (set_attr "prefix" "vex")
+    (set_attr "mode" "<avxvecmode>")])
+ 
+@@ -454,7 +459,8 @@
+ 		      UNSPEC_LDDQU))]
+   "TARGET_SSE3"
+   "lddqu\t{%1, %0|%0, %1}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
++   (set_attr "movu" "1")
+    (set_attr "prefix_rep" "1")
+    (set_attr "mode" "TI")])
+ 
+@@ -761,6 +767,7 @@
+   "TARGET_SSE"
+   "%vrcpps\t{%1, %0|%0, %1}"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "rcp")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "V4SF")])
+ 
+@@ -787,6 +794,7 @@
+   "TARGET_SSE"
+   "rcpss\t{%1, %0|%0, %1}"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "rcp")
+    (set_attr "mode" "SF")])
+ 
+ (define_expand "sqrtv8sf2"
+@@ -832,6 +840,7 @@
+   "TARGET_SSE"
+   "%vsqrtps\t{%1, %0|%0, %1}"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "sqrt")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "V4SF")])
+ 
+@@ -876,6 +885,7 @@
+   "SSE_VEC_FLOAT_MODE_P (<MODE>mode)"
+   "sqrts<ssemodesuffixf2c>\t{%1, %0|%0, %1}"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "sqrt")
+    (set_attr "mode" "<ssescalarmode>")])
+ 
+ (define_expand "rsqrtv8sf2"
+@@ -1039,7 +1049,7 @@
+ 	 (const_int 1)))]
+   "SSE_VEC_FLOAT_MODE_P (<MODE>mode)"
+   "<maxminfprefix>s<ssemodesuffixf2c>\t{%2, %0|%0, %2}"
+-  [(set_attr "type" "sse")
++  [(set_attr "type" "sseadd")
+    (set_attr "mode" "<ssescalarmode>")])
+ 
+ ;; These versions of the min/max patterns implement exactly the operations
+@@ -1175,6 +1185,7 @@
+   "TARGET_SSE3"
+   "addsubpd\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "mode" "V2DF")])
+ 
+ (define_insn "avx_h<plusminus_insn>v4df3"
+@@ -1298,6 +1309,7 @@
+   "TARGET_SSE3"
+   "h<plusminus_mnemonic>ps\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_rep" "1")
+    (set_attr "mode" "V4SF")])
+ 
+@@ -5066,6 +5078,7 @@
+   "TARGET_SSE2 && ix86_binary_operator_ok (MULT, V8HImode, operands)"
+   "pmaddwd\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "simul")
+    (set_attr "prefix_data16" "1")
+    (set_attr "mode" "TI")])
+ 
+@@ -7025,6 +7038,7 @@
+    movq\t{%H1, %0|%0, %H1}
+    mov{q}\t{%H1, %0|%0, %H1}"
+   [(set_attr "type" "ssemov,sseishft,ssemov,imov")
++   (set_attr "atom_unit" "*,sishuf,*,*")
+    (set_attr "memory" "*,none,*,*")
+    (set_attr "mode" "V2SF,TI,TI,DI")])
+ 
+@@ -7057,6 +7071,7 @@
+    psrldq\t{$8, %0|%0, 8}
+    movq\t{%H1, %0|%0, %H1}"
+   [(set_attr "type" "ssemov,sseishft,ssemov")
++   (set_attr "atom_unit" "*,sishuf,*")
+    (set_attr "memory" "*,none,*")
+    (set_attr "mode" "V2SF,TI,TI")])
+ 
+@@ -7614,6 +7629,7 @@
+   "TARGET_SSE2"
+   "psadbw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "simul")
+    (set_attr "prefix_data16" "1")
+    (set_attr "mode" "TI")])
+ 
+@@ -7635,7 +7651,7 @@
+ 	  UNSPEC_MOVMSK))]
+   "SSE_VEC_FLOAT_MODE_P (<MODE>mode)"
+   "%vmovmskp<ssemodesuffixf2c>\t{%1, %0|%0, %1}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "<MODE>")])
+ 
+@@ -7645,7 +7661,7 @@
+ 		   UNSPEC_MOVMSK))]
+   "TARGET_SSE2"
+   "%vpmovmskb\t{%1, %0|%0, %1}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "SI")])
+@@ -7668,7 +7684,7 @@
+   "TARGET_SSE2 && !TARGET_64BIT"
+   ;; @@@ check ordering of operands in intel/nonintel syntax
+   "%vmaskmovdqu\t{%2, %1|%1, %2}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "TI")])
+@@ -7682,7 +7698,7 @@
+   "TARGET_SSE2 && TARGET_64BIT"
+   ;; @@@ check ordering of operands in intel/nonintel syntax
+   "%vmaskmovdqu\t{%2, %1|%1, %2}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "TI")])
+@@ -7693,6 +7709,7 @@
+   "TARGET_SSE"
+   "%vldmxcsr\t%0"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "mxcsr")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "memory" "load")])
+ 
+@@ -7702,6 +7719,7 @@
+   "TARGET_SSE"
+   "%vstmxcsr\t%0"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "mxcsr")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "memory" "store")])
+ 
+@@ -7720,6 +7738,7 @@
+   "TARGET_SSE || TARGET_3DNOW_A"
+   "sfence"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "fence")
+    (set_attr "memory" "unknown")])
+ 
+ (define_insn "sse2_clflush"
+@@ -7728,6 +7747,7 @@
+   "TARGET_SSE2"
+   "clflush\t%a0"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "fence")
+    (set_attr "memory" "unknown")])
+ 
+ (define_expand "sse2_mfence"
+@@ -7745,6 +7765,7 @@
+   "TARGET_64BIT || TARGET_SSE2"
+   "mfence"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "fence")
+    (set_attr "memory" "unknown")])
+ 
+ (define_expand "sse2_lfence"
+@@ -7762,6 +7783,7 @@
+   "TARGET_SSE2"
+   "lfence"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "lfence")
+    (set_attr "memory" "unknown")])
+ 
+ (define_insn "sse3_mwait"
+@@ -7885,6 +7907,7 @@
+   "TARGET_SSSE3"
+   "phaddw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -7913,6 +7936,7 @@
+   "TARGET_SSSE3"
+   "phaddw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -7967,6 +7991,7 @@
+   "TARGET_SSSE3"
+   "phaddd\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -7987,6 +8012,7 @@
+   "TARGET_SSSE3"
+   "phaddd\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -8073,6 +8099,7 @@
+   "TARGET_SSSE3"
+   "phaddsw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -8101,6 +8128,7 @@
+   "TARGET_SSSE3"
+   "phaddsw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -8187,6 +8215,7 @@
+   "TARGET_SSSE3"
+   "phsubw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -8215,6 +8244,7 @@
+   "TARGET_SSSE3"
+   "phsubw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -8269,6 +8299,7 @@
+   "TARGET_SSSE3"
+   "phsubd\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -8289,6 +8320,7 @@
+   "TARGET_SSSE3"
+   "phsubd\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -8375,6 +8407,7 @@
+   "TARGET_SSSE3"
+   "phsubsw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -8403,6 +8436,7 @@
+   "TARGET_SSSE3"
+   "phsubsw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -8509,6 +8543,7 @@
+   "TARGET_SSSE3"
+   "pmaddubsw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "simul")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -8547,6 +8582,7 @@
+   "TARGET_SSSE3"
+   "pmaddubsw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "simul")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -8754,6 +8790,7 @@
+   return "palignr\t{%3, %2, %0|%0, %2, %3}";
+ }
+   [(set_attr "type" "sseishft")
++   (set_attr "atom_unit" "sishuf")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -8770,6 +8807,7 @@
+   return "palignr\t{%3, %2, %0|%0, %2, %3}";
+ }
+   [(set_attr "type" "sseishft")
++   (set_attr "atom_unit" "sishuf")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -8956,7 +8994,7 @@
+ 		     UNSPEC_MOVNTDQA))]
+   "TARGET_SSE4_1"
+   "%vmovntdqa\t{%1, %0|%0, %1}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
+    (set_attr "prefix_extra" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "TI")])
+Index: gcc/config/i386/i386-c.c
+===================================================================
+--- a/src/gcc/config/i386/i386-c.c	(revision 146514)
++++ b/src/gcc/config/i386/i386-c.c	(working copy)
+@@ -119,6 +119,10 @@
+       def_or_undef (parse_in, "__core2");
+       def_or_undef (parse_in, "__core2__");
+       break;
++    case PROCESSOR_ATOM:
++      def_or_undef (parse_in, "__atom");
++      def_or_undef (parse_in, "__atom__");
++      break;
+     /* use PROCESSOR_max to not set/unset the arch macro.  */
+     case PROCESSOR_max:
+       break;
+@@ -187,6 +191,9 @@
+     case PROCESSOR_CORE2:
+       def_or_undef (parse_in, "__tune_core2__");
+       break;
++    case PROCESSOR_ATOM:
++      def_or_undef (parse_in, "__tune_atom__");
++      break;
+     case PROCESSOR_GENERIC32:
+     case PROCESSOR_GENERIC64:
+       break;
+Index: gcc/config/i386/i386-protos.h
+===================================================================
+--- a/src/gcc/config/i386/i386-protos.h	(revision 146514)
++++ b/src/gcc/config/i386/i386-protos.h	(working copy)
+@@ -85,6 +85,9 @@
+ extern void ix86_expand_binary_operator (enum rtx_code,
+ 					 enum machine_mode, rtx[]);
+ extern int ix86_binary_operator_ok (enum rtx_code, enum machine_mode, rtx[]);
++extern bool ix86_lea_for_add_ok (enum rtx_code, rtx, rtx[]);
++extern bool ix86_dep_by_shift_count (const_rtx set_insn, const_rtx use_insn);
++extern bool ix86_agi_dependent (rtx set_insn, rtx use_insn);
+ extern void ix86_expand_unary_operator (enum rtx_code, enum machine_mode,
+ 					rtx[]);
+ extern rtx ix86_build_const_vector (enum machine_mode, bool, rtx);
+Index: gcc/config/i386/i386.c
+===================================================================
+--- a/src/gcc/config/i386/i386.c	(revision 146514)
++++ b/src/gcc/config/i386/i386.c	(working copy)
+@@ -1036,6 +1036,79 @@
+   1,                                    /* cond_not_taken_branch_cost.  */
+ };
+ 
++static const
++struct processor_costs atom_cost = {
++  COSTS_N_INSNS (1),			/* cost of an add instruction */
++  COSTS_N_INSNS (1) + 1,		/* cost of a lea instruction */
++  COSTS_N_INSNS (1),			/* variable shift costs */
++  COSTS_N_INSNS (1),			/* constant shift costs */
++  {COSTS_N_INSNS (3),			/* cost of starting multiply for QI */
++   COSTS_N_INSNS (4),			/*                               HI */
++   COSTS_N_INSNS (3),			/*                               SI */
++   COSTS_N_INSNS (4),			/*                               DI */
++   COSTS_N_INSNS (2)},			/*                               other */
++  0,					/* cost of multiply per each bit set */
++  {COSTS_N_INSNS (18),			/* cost of a divide/mod for QI */
++   COSTS_N_INSNS (26),			/*                          HI */
++   COSTS_N_INSNS (42),			/*                          SI */
++   COSTS_N_INSNS (74),			/*                          DI */
++   COSTS_N_INSNS (74)},			/*                          other */
++  COSTS_N_INSNS (1),			/* cost of movsx */
++  COSTS_N_INSNS (1),			/* cost of movzx */
++  8,					/* "large" insn */
++  17,					/* MOVE_RATIO */
++  2,					/* cost for loading QImode using movzbl */
++  {4, 4, 4},				/* cost of loading integer registers
++					   in QImode, HImode and SImode.
++					   Relative to reg-reg move (2).  */
++  {4, 4, 4},				/* cost of storing integer registers */
++  4,					/* cost of reg,reg fld/fst */
++  {12, 12, 12},				/* cost of loading fp registers
++					   in SFmode, DFmode and XFmode */
++  {6, 6, 8},				/* cost of storing fp registers
++					   in SFmode, DFmode and XFmode */
++  2,					/* cost of moving MMX register */
++  {8, 8},				/* cost of loading MMX registers
++					   in SImode and DImode */
++  {8, 8},				/* cost of storing MMX registers
++					   in SImode and DImode */
++  2,					/* cost of moving SSE register */
++  {8, 8, 8},				/* cost of loading SSE registers
++					   in SImode, DImode and TImode */
++  {8, 8, 8},				/* cost of storing SSE registers
++					   in SImode, DImode and TImode */
++  5,					/* MMX or SSE register to integer */
++  32,					/* size of l1 cache.  */
++  256,					/* size of l2 cache.  */
++  64,					/* size of prefetch block */
++  6,					/* number of parallel prefetches */
++  3,					/* Branch cost */
++  COSTS_N_INSNS (8),			/* cost of FADD and FSUB insns.  */
++  COSTS_N_INSNS (8),			/* cost of FMUL instruction.  */
++  COSTS_N_INSNS (20),			/* cost of FDIV instruction.  */
++  COSTS_N_INSNS (8),			/* cost of FABS instruction.  */
++  COSTS_N_INSNS (8),			/* cost of FCHS instruction.  */
++  COSTS_N_INSNS (40),			/* cost of FSQRT instruction.  */
++  {{libcall, {{11, loop}, {-1, rep_prefix_4_byte}}},
++   {libcall, {{32, loop}, {64, rep_prefix_4_byte},
++          {8192, rep_prefix_8_byte}, {-1, libcall}}}},
++  {{libcall, {{8, loop}, {15, unrolled_loop},
++          {2048, rep_prefix_4_byte}, {-1, libcall}}},
++   {libcall, {{24, loop}, {32, unrolled_loop},
++          {8192, rep_prefix_8_byte}, {-1, libcall}}}},
++  1,                                    /* scalar_stmt_cost.  */
++  1,                                    /* scalar load_cost.  */
++  1,                                    /* scalar_store_cost.  */
++  1,                                    /* vec_stmt_cost.  */
++  1,                                    /* vec_to_scalar_cost.  */
++  1,                                    /* scalar_to_vec_cost.  */
++  1,                                    /* vec_align_load_cost.  */
++  2,                                    /* vec_unalign_load_cost.  */
++  1,                                    /* vec_store_cost.  */
++  3,                                    /* cond_taken_branch_cost.  */
++  1,                                    /* cond_not_taken_branch_cost.  */
++};
++
+ /* Generic64 should produce code tuned for Nocona and K8.  */
+ static const
+ struct processor_costs generic64_cost = {
+@@ -1194,6 +1267,7 @@
+ #define m_PENT4  (1<<PROCESSOR_PENTIUM4)
+ #define m_NOCONA  (1<<PROCESSOR_NOCONA)
+ #define m_CORE2  (1<<PROCESSOR_CORE2)
++#define m_ATOM  (1<<PROCESSOR_ATOM)
+ 
+ #define m_GEODE  (1<<PROCESSOR_GEODE)
+ #define m_K6  (1<<PROCESSOR_K6)
+@@ -1231,10 +1305,11 @@
+   m_486 | m_PENT,
+ 
+   /* X86_TUNE_UNROLL_STRLEN */
+-  m_486 | m_PENT | m_PPRO | m_AMD_MULTIPLE | m_K6 | m_CORE2 | m_GENERIC,
++  m_486 | m_PENT | m_ATOM | m_PPRO | m_AMD_MULTIPLE | m_K6
++  | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_DEEP_BRANCH_PREDICTION */
+-  m_PPRO | m_K6_GEODE | m_AMD_MULTIPLE | m_PENT4 | m_GENERIC,
++  m_ATOM | m_PPRO | m_K6_GEODE | m_AMD_MULTIPLE | m_PENT4 | m_GENERIC,
+ 
+   /* X86_TUNE_BRANCH_PREDICTION_HINTS: Branch hints were put in P4 based
+      on simulation result. But after P4 was made, no performance benefit
+@@ -1246,12 +1321,12 @@
+   ~m_386,
+ 
+   /* X86_TUNE_USE_SAHF */
+-  m_PPRO | m_K6_GEODE | m_K8 | m_AMDFAM10 | m_PENT4
++  m_ATOM | m_PPRO | m_K6_GEODE | m_K8 | m_AMDFAM10 | m_PENT4
+   | m_NOCONA | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_MOVX: Enable to zero extend integer registers to avoid
+      partial dependencies.  */
+-  m_AMD_MULTIPLE | m_PPRO | m_PENT4 | m_NOCONA
++  m_AMD_MULTIPLE | m_ATOM | m_PPRO | m_PENT4 | m_NOCONA
+   | m_CORE2 | m_GENERIC | m_GEODE /* m_386 | m_K6 */,
+ 
+   /* X86_TUNE_PARTIAL_REG_STALL: We probably ought to watch for partial
+@@ -1271,13 +1346,13 @@
+   m_386 | m_486 | m_K6_GEODE,
+ 
+   /* X86_TUNE_USE_SIMODE_FIOP */
+-  ~(m_PPRO | m_AMD_MULTIPLE | m_PENT | m_CORE2 | m_GENERIC),
++  ~(m_PPRO | m_AMD_MULTIPLE | m_PENT | m_ATOM | m_CORE2 | m_GENERIC),
+ 
+   /* X86_TUNE_USE_MOV0 */
+   m_K6,
+ 
+   /* X86_TUNE_USE_CLTD */
+-  ~(m_PENT | m_K6 | m_CORE2 | m_GENERIC),
++  ~(m_PENT | m_ATOM | m_K6 | m_CORE2 | m_GENERIC),
+ 
+   /* X86_TUNE_USE_XCHGB: Use xchgb %rh,%rl instead of rolw/rorw $8,rx.  */
+   m_PENT4,
+@@ -1292,8 +1367,8 @@
+   ~(m_PENT | m_PPRO),
+ 
+   /* X86_TUNE_PROMOTE_QIMODE */
+-  m_K6_GEODE | m_PENT | m_386 | m_486 | m_AMD_MULTIPLE | m_CORE2
+-  | m_GENERIC /* | m_PENT4 ? */,
++  m_K6_GEODE | m_PENT | m_ATOM | m_386 | m_486 | m_AMD_MULTIPLE
++  | m_CORE2 | m_GENERIC /* | m_PENT4 ? */,
+ 
+   /* X86_TUNE_FAST_PREFIX */
+   ~(m_PENT | m_486 | m_386),
+@@ -1317,26 +1392,28 @@
+   m_PPRO,
+ 
+   /* X86_TUNE_ADD_ESP_4: Enable if add/sub is preferred over 1/2 push/pop.  */
+-  m_AMD_MULTIPLE | m_K6_GEODE | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
++  m_ATOM | m_AMD_MULTIPLE | m_K6_GEODE | m_PENT4 | m_NOCONA
++  | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_ADD_ESP_8 */
+-  m_AMD_MULTIPLE | m_PPRO | m_K6_GEODE | m_386
++  m_AMD_MULTIPLE | m_ATOM | m_PPRO | m_K6_GEODE | m_386
+   | m_486 | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_SUB_ESP_4 */
+-  m_AMD_MULTIPLE | m_PPRO | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
++  m_AMD_MULTIPLE | m_ATOM | m_PPRO | m_PENT4 | m_NOCONA | m_CORE2
++  | m_GENERIC,
+ 
+   /* X86_TUNE_SUB_ESP_8 */
+-  m_AMD_MULTIPLE | m_PPRO | m_386 | m_486
++  m_AMD_MULTIPLE | m_ATOM | m_PPRO | m_386 | m_486
+   | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_INTEGER_DFMODE_MOVES: Enable if integer moves are preferred
+      for DFmode copies */
+-  ~(m_AMD_MULTIPLE | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2
++  ~(m_AMD_MULTIPLE | m_ATOM | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2
+     | m_GENERIC | m_GEODE),
+ 
+   /* X86_TUNE_PARTIAL_REG_DEPENDENCY */
+-  m_AMD_MULTIPLE | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
++  m_AMD_MULTIPLE | m_ATOM | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY: In the Generic model we have a
+      conflict here in between PPro/Pentium4 based chips that thread 128bit
+@@ -1347,7 +1424,8 @@
+      shows that disabling this option on P4 brings over 20% SPECfp regression,
+      while enabling it on K8 brings roughly 2.4% regression that can be partly
+      masked by careful scheduling of moves.  */
+-  m_PENT4 | m_NOCONA | m_PPRO | m_CORE2 | m_GENERIC | m_AMDFAM10,
++  m_ATOM | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2 | m_GENERIC
++  | m_AMDFAM10,
+ 
+   /* X86_TUNE_SSE_UNALIGNED_MOVE_OPTIMAL */
+   m_AMDFAM10,
+@@ -1365,13 +1443,13 @@
+   m_PPRO | m_PENT4 | m_NOCONA,
+ 
+   /* X86_TUNE_MEMORY_MISMATCH_STALL */
+-  m_AMD_MULTIPLE | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
++  m_AMD_MULTIPLE | m_ATOM | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_PROLOGUE_USING_MOVE */
+-  m_ATHLON_K8 | m_PPRO | m_CORE2 | m_GENERIC,
++  m_ATHLON_K8 | m_ATOM | m_PPRO | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_EPILOGUE_USING_MOVE */
+-  m_ATHLON_K8 | m_PPRO | m_CORE2 | m_GENERIC,
++  m_ATHLON_K8 | m_ATOM | m_PPRO | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_SHIFT1 */
+   ~m_486,
+@@ -1380,29 +1458,32 @@
+   m_AMD_MULTIPLE,
+ 
+   /* X86_TUNE_INTER_UNIT_MOVES */
+-  ~(m_AMD_MULTIPLE | m_GENERIC),
++  ~(m_AMD_MULTIPLE | m_ATOM | m_GENERIC),
+ 
+   /* X86_TUNE_INTER_UNIT_CONVERSIONS */
+   ~(m_AMDFAM10),
+ 
+   /* X86_TUNE_FOUR_JUMP_LIMIT: Some CPU cores are not able to predict more
+      than 4 branch instructions in the 16 byte window.  */
+-  m_PPRO | m_AMD_MULTIPLE | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
++  m_ATOM | m_PPRO | m_AMD_MULTIPLE | m_PENT4 | m_NOCONA | m_CORE2
++  | m_GENERIC,
+ 
+   /* X86_TUNE_SCHEDULE */
+-  m_PPRO | m_AMD_MULTIPLE | m_K6_GEODE | m_PENT | m_CORE2 | m_GENERIC,
++  m_PPRO | m_AMD_MULTIPLE | m_K6_GEODE | m_PENT | m_ATOM | m_CORE2
++  | m_GENERIC,
+ 
+   /* X86_TUNE_USE_BT */
+-  m_AMD_MULTIPLE | m_CORE2 | m_GENERIC,
++  m_AMD_MULTIPLE | m_ATOM | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_USE_INCDEC */
+-  ~(m_PENT4 | m_NOCONA | m_GENERIC),
++  ~(m_PENT4 | m_NOCONA | m_GENERIC | m_ATOM),
+ 
+   /* X86_TUNE_PAD_RETURNS */
+   m_AMD_MULTIPLE | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_EXT_80387_CONSTANTS */
+-  m_K6_GEODE | m_ATHLON_K8 | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2 | m_GENERIC,
++  m_K6_GEODE | m_ATHLON_K8 | m_ATOM | m_PENT4 | m_NOCONA | m_PPRO
++  | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_SHORTEN_X87_SSE */
+   ~m_K8,
+@@ -1447,6 +1528,10 @@
+      with a subsequent conditional jump instruction into a single
+      compare-and-branch uop.  */
+   m_CORE2,
++
++  /* X86_TUNE_OPT_AGU: Optimize for Address Generation Unit. This flag
++     will impact LEA instruction selection. */
++  m_ATOM,
+ };
+ 
+ /* Feature tests against the various architecture variations.  */
+@@ -1472,10 +1557,11 @@
+ };
+ 
+ static const unsigned int x86_accumulate_outgoing_args
+-  = m_AMD_MULTIPLE | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2 | m_GENERIC;
++  = m_AMD_MULTIPLE | m_ATOM | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2
++    | m_GENERIC;
+ 
+ static const unsigned int x86_arch_always_fancy_math_387
+-  = m_PENT | m_PPRO | m_AMD_MULTIPLE | m_PENT4
++  = m_PENT | m_ATOM | m_PPRO | m_AMD_MULTIPLE | m_PENT4
+     | m_NOCONA | m_CORE2 | m_GENERIC;
+ 
+ static enum stringop_alg stringop_alg = no_stringop;
+@@ -1953,7 +2039,8 @@
+   {&core2_cost, 16, 10, 16, 10, 16},
+   {&generic32_cost, 16, 7, 16, 7, 16},
+   {&generic64_cost, 16, 10, 16, 10, 16},
+-  {&amdfam10_cost, 32, 24, 32, 7, 32}
++  {&amdfam10_cost, 32, 24, 32, 7, 32},
++  {&atom_cost, 16, 7, 16, 7, 16}
+ };
+ 
+ static const char *const cpu_names[TARGET_CPU_DEFAULT_max] =
+@@ -1971,6 +2058,7 @@
+   "prescott",
+   "nocona",
+   "core2",
++  "atom",
+   "geode",
+   "k6",
+   "k6-2",
+@@ -2529,6 +2617,9 @@
+       {"core2", PROCESSOR_CORE2, CPU_CORE2,
+ 	PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
+ 	| PTA_SSSE3 | PTA_CX16},
++      {"atom", PROCESSOR_ATOM, CPU_ATOM,
++	PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
++	| PTA_SSSE3 | PTA_CX16},
+       {"geode", PROCESSOR_GEODE, CPU_GEODE,
+ 	PTA_MMX | PTA_3DNOW | PTA_3DNOW_A |PTA_PREFETCH_SSE},
+       {"k6", PROCESSOR_K6, CPU_K6, PTA_MMX},
+@@ -12903,6 +12994,316 @@
+     emit_move_insn (operands[0], dst);
+ }
+ 
++#define LEA_SEARCH_THRESHOLD 12
++
++/* Search backward for non-agu definition of register number REGNO1
++   or register number REGNO2 in INSN's basic block until 
++   1. Pass LEA_SEARCH_THRESHOLD instructions, or
++   2. Reach BB boundary, or
++   3. Reach agu definition.
++   Returns the distance between the non-agu definition point and INSN.
++   If no definition point, returns -1.  */
++
++static int
++distance_non_agu_define (unsigned int regno1, unsigned int regno2,
++			 rtx insn)
++{
++  basic_block bb = BLOCK_FOR_INSN (insn);
++  int distance = 0;
++  df_ref *def_rec;
++  enum attr_type insn_type;
++
++  if (insn != BB_HEAD (bb))
++    {
++      rtx prev = PREV_INSN (insn);
++      while (prev && distance < LEA_SEARCH_THRESHOLD)
++	{
++	  if (INSN_P (prev))
++	    {
++	      distance++;
++              for (def_rec = DF_INSN_DEFS (prev); *def_rec; def_rec++)
++                if (DF_REF_TYPE (*def_rec) == DF_REF_REG_DEF
++                    && !DF_REF_IS_ARTIFICIAL (*def_rec)
++                    && (regno1 == DF_REF_REGNO (*def_rec)
++			|| regno2 == DF_REF_REGNO (*def_rec)))
++		  {
++		    insn_type = get_attr_type (prev);
++		    if (insn_type != TYPE_LEA)
++		      goto done;
++		  }
++	    }
++	  if (prev == BB_HEAD (bb))
++	    break;
++	  prev = PREV_INSN (prev);
++	}
++    }
++  
++  if (distance < LEA_SEARCH_THRESHOLD)
++    {
++      edge e;
++      edge_iterator ei;
++      bool simple_loop = false;
++  
++      FOR_EACH_EDGE (e, ei, bb->preds)
++	if (e->src == bb)
++	  {
++	    simple_loop = true;
++	    break;
++	  }
++  
++      if (simple_loop)
++	{
++	  rtx prev = BB_END (bb);
++	  while (prev
++		 && prev != insn
++		 && distance < LEA_SEARCH_THRESHOLD)
++	    {
++	      if (INSN_P (prev))
++		{
++		  distance++;
++		  for (def_rec = DF_INSN_DEFS (prev); *def_rec; def_rec++)
++		    if (DF_REF_TYPE (*def_rec) == DF_REF_REG_DEF
++			&& !DF_REF_IS_ARTIFICIAL (*def_rec)
++			&& (regno1 == DF_REF_REGNO (*def_rec)
++			    || regno2 == DF_REF_REGNO (*def_rec)))
++		      {
++			insn_type = get_attr_type (prev);
++			if (insn_type != TYPE_LEA)
++			  goto done;
++		      }
++		}
++	      prev = PREV_INSN (prev);
++	    }
++	}
++    }
++
++  distance = -1;
++
++done:
++  /* get_attr_type may modify recog data.  We want to make sure
++     that recog data is valid for instruction INSN, on which
++     distance_non_agu_define is called.  INSN is unchanged here.  */
++  extract_insn_cached (insn);
++  return distance;
++}
++
++/* Return the distance between INSN and the next insn that uses 
++   register number REGNO0 in memory address.  Return -1 if no such
++   a use is found within LEA_SEARCH_THRESHOLD or REGNO0 is set.  */
++
++static int
++distance_agu_use (unsigned int regno0, rtx insn)
++{
++  basic_block bb = BLOCK_FOR_INSN (insn);
++  int distance = 0;
++  df_ref *def_rec;
++  df_ref *use_rec;
++
++  if (insn != BB_END (bb))
++    {
++      rtx next = NEXT_INSN (insn);
++      while (next && distance < LEA_SEARCH_THRESHOLD)
++	{
++	  if (INSN_P (next))
++	    {
++	      distance++;
++
++	      for (use_rec = DF_INSN_USES (next); *use_rec; use_rec++)
++		if ((DF_REF_TYPE (*use_rec) == DF_REF_REG_MEM_LOAD
++		     || DF_REF_TYPE (*use_rec) == DF_REF_REG_MEM_STORE)
++		    && regno0 == DF_REF_REGNO (*use_rec))
++		  {
++		    /* Return DISTANCE if OP0 is used in memory
++		       address in NEXT.  */
++		    return distance;
++		  }
++
++	      for (def_rec = DF_INSN_DEFS (next); *def_rec; def_rec++)
++		if (DF_REF_TYPE (*def_rec) == DF_REF_REG_DEF
++		    && !DF_REF_IS_ARTIFICIAL (*def_rec)
++		    && regno0 == DF_REF_REGNO (*def_rec))
++		  {
++		    /* Return -1 if OP0 is set in NEXT.  */
++		    return -1;
++		  }
++	    }
++	  if (next == BB_END (bb))
++	    break;
++	  next = NEXT_INSN (next);
++	}
++    }
++
++  if (distance < LEA_SEARCH_THRESHOLD)
++    {
++      edge e;
++      edge_iterator ei;
++      bool simple_loop = false;
++  
++      FOR_EACH_EDGE (e, ei, bb->succs)
++        if (e->dest == bb)
++	  {
++	    simple_loop = true;
++	    break;
++	  }
++  
++      if (simple_loop)
++	{
++	  rtx next = BB_HEAD (bb);
++	  while (next
++		 && next != insn
++		 && distance < LEA_SEARCH_THRESHOLD)
++	    {
++	      if (INSN_P (next))
++		{
++		  distance++;
++
++		  for (use_rec = DF_INSN_USES (next); *use_rec; use_rec++)
++		    if ((DF_REF_TYPE (*use_rec) == DF_REF_REG_MEM_LOAD
++			 || DF_REF_TYPE (*use_rec) == DF_REF_REG_MEM_STORE)
++			&& regno0 == DF_REF_REGNO (*use_rec))
++		      {
++			/* Return DISTANCE if OP0 is used in memory
++			   address in NEXT.  */
++			return distance;
++		      }
++
++		  for (def_rec = DF_INSN_DEFS (next); *def_rec; def_rec++)
++		    if (DF_REF_TYPE (*def_rec) == DF_REF_REG_DEF
++			&& !DF_REF_IS_ARTIFICIAL (*def_rec)
++			&& regno0 == DF_REF_REGNO (*def_rec))
++		      {
++			/* Return -1 if OP0 is set in NEXT.  */
++			return -1;
++		      }
++
++		}
++	      next = NEXT_INSN (next);
++	    }
++	}
++    }  
++
++  return -1;
++}
++
++/* Define this macro to tune LEA priority vs ADD, it take effect when
++   there is a dilemma of choicing LEA or ADD
++   Negative value: ADD is more preferred than LEA
++   Zero: Netrual
++   Positive value: LEA is more preferred than ADD*/
++#define IX86_LEA_PRIORITY 2
++
++/* Return true if it is ok to optimize an ADD operation to LEA
++   operation to avoid flag register consumation.  For the processors
++   like ATOM, if the destination register of LEA holds an actual
++   address which will be used soon, LEA is better and otherwise ADD
++   is better.  */
++
++bool
++ix86_lea_for_add_ok (enum rtx_code code ATTRIBUTE_UNUSED,
++                     rtx insn, rtx operands[])
++{
++  unsigned int regno0 = true_regnum (operands[0]);
++  unsigned int regno1 = true_regnum (operands[1]);
++  unsigned int regno2;
++
++  if (!TARGET_OPT_AGU || optimize_function_for_size_p (cfun))
++    return regno0 != regno1;
++
++  regno2 = true_regnum (operands[2]);
++
++  /* If a = b + c, (a!=b && a!=c), must use lea form. */
++  if (regno0 != regno1 && regno0 != regno2)
++    return true;
++  else    
++    {
++      int dist_define, dist_use;
++      dist_define = distance_non_agu_define (regno1, regno2, insn);
++      if (dist_define <= 0)
++        return true;
++
++      /* If this insn has both backward non-agu dependence and forward
++         agu dependence, the one with short distance take effect. */
++      dist_use = distance_agu_use (regno0, insn);
++      if (dist_use <= 0
++	  || (dist_define + IX86_LEA_PRIORITY) < dist_use)
++        return false;
++
++      return true;
++    }
++}
++
++/* Return true if destination reg of SET_BODY is shift count of
++   USE_BODY.  */
++
++static bool
++ix86_dep_by_shift_count_body (const_rtx set_body, const_rtx use_body)
++{
++  rtx set_dest;
++  rtx shift_rtx;
++  int i;
++
++  /* Retrieve destination of SET_BODY.  */
++  switch (GET_CODE (set_body))
++    {
++    case SET:
++      set_dest = SET_DEST (set_body);
++      if (!set_dest || !REG_P (set_dest))
++	return false;
++      break;
++    case PARALLEL:
++      for (i = XVECLEN (set_body, 0) - 1; i >= 0; i--)
++	if (ix86_dep_by_shift_count_body (XVECEXP (set_body, 0, i),
++					  use_body))
++	  return true;
++    default:
++      return false;
++      break;
++    }
++
++  /* Retrieve shift count of USE_BODY.  */
++  switch (GET_CODE (use_body))
++    {
++    case SET:
++      shift_rtx = XEXP (use_body, 1);
++      break;
++    case PARALLEL:
++      for (i = XVECLEN (use_body, 0) - 1; i >= 0; i--)
++	if (ix86_dep_by_shift_count_body (set_body,
++					  XVECEXP (use_body, 0, i)))
++	  return true;
++    default:
++      return false;
++      break;
++    }
++
++  if (shift_rtx 
++      && (GET_CODE (shift_rtx) == ASHIFT
++	  || GET_CODE (shift_rtx) == LSHIFTRT
++	  || GET_CODE (shift_rtx) == ASHIFTRT
++	  || GET_CODE (shift_rtx) == ROTATE
++	  || GET_CODE (shift_rtx) == ROTATERT))
++    {
++      rtx shift_count = XEXP (shift_rtx, 1);
++
++      /* Return true if shift count is dest of SET_BODY.  */
++      if (REG_P (shift_count)
++	  && true_regnum (set_dest) == true_regnum (shift_count))
++	return true;
++    }
++
++  return false;
++}
++
++/* Return true if destination reg of SET_INSN is shift count of
++   USE_INSN.  */
++
++bool
++ix86_dep_by_shift_count (const_rtx set_insn, const_rtx use_insn)
++{
++  return ix86_dep_by_shift_count_body (PATTERN (set_insn),
++				       PATTERN (use_insn));
++}
++
+ /* Return TRUE or FALSE depending on whether the unary operator meets the
+    appropriate constraints.  */
+ 
+@@ -19022,6 +19423,7 @@
+   switch (ix86_tune)
+     {
+     case PROCESSOR_PENTIUM:
++    case PROCESSOR_ATOM:
+     case PROCESSOR_K6:
+       return 2;
+ 
+@@ -19088,41 +19490,21 @@
+   return 1;
+ }
+ 
+-/* A subroutine of ix86_adjust_cost -- return true iff INSN has a memory
+-   address with operands set by DEP_INSN.  */
++/* Return true iff USE_INSN has a memory address with operands set by
++   SET_INSN.  */
+ 
+-static int
+-ix86_agi_dependent (rtx insn, rtx dep_insn, enum attr_type insn_type)
++bool
++ix86_agi_dependent (rtx set_insn, rtx use_insn)
+ {
+-  rtx addr;
+-
+-  if (insn_type == TYPE_LEA
+-      && TARGET_PENTIUM)
+-    {
+-      addr = PATTERN (insn);
+-
+-      if (GET_CODE (addr) == PARALLEL)
+-	addr = XVECEXP (addr, 0, 0);
+-
+-      gcc_assert (GET_CODE (addr) == SET);
+-
+-      addr = SET_SRC (addr);
+-    }
+-  else
+-    {
+-      int i;
+-      extract_insn_cached (insn);
+-      for (i = recog_data.n_operands - 1; i >= 0; --i)
+-	if (MEM_P (recog_data.operand[i]))
+-	  {
+-	    addr = XEXP (recog_data.operand[i], 0);
+-	    goto found;
+-	  }
+-      return 0;
+-    found:;
+-    }
+-
+-  return modified_in_p (addr, dep_insn);
++  int i;
++  extract_insn_cached (use_insn);
++  for (i = recog_data.n_operands - 1; i >= 0; --i)
++    if (MEM_P (recog_data.operand[i]))
++      {
++	rtx addr = XEXP (recog_data.operand[i], 0);
++	return modified_in_p (addr, set_insn) != 0;
++      }
++  return false;
+ }
+ 
+ static int
+@@ -19150,7 +19532,20 @@
+     {
+     case PROCESSOR_PENTIUM:
+       /* Address Generation Interlock adds a cycle of latency.  */
+-      if (ix86_agi_dependent (insn, dep_insn, insn_type))
++      if (insn_type == TYPE_LEA)
++	{
++	  rtx addr = PATTERN (insn);
++
++	  if (GET_CODE (addr) == PARALLEL)
++	    addr = XVECEXP (addr, 0, 0);
++
++	  gcc_assert (GET_CODE (addr) == SET);
++
++	  addr = SET_SRC (addr);
++	  if (modified_in_p (addr, dep_insn))
++	    cost += 1;
++	}
++      else if (ix86_agi_dependent (dep_insn, insn))
+ 	cost += 1;
+ 
+       /* ??? Compares pair with jump/setcc.  */
+@@ -19160,7 +19555,7 @@
+       /* Floating point stores require value to be ready one cycle earlier.  */
+       if (insn_type == TYPE_FMOV
+ 	  && get_attr_memory (insn) == MEMORY_STORE
+-	  && !ix86_agi_dependent (insn, dep_insn, insn_type))
++	  && !ix86_agi_dependent (dep_insn, insn))
+ 	cost += 1;
+       break;
+ 
+@@ -19183,7 +19578,7 @@
+ 	 in parallel with previous instruction in case
+ 	 previous instruction is not needed to compute the address.  */
+       if ((memory == MEMORY_LOAD || memory == MEMORY_BOTH)
+-	  && !ix86_agi_dependent (insn, dep_insn, insn_type))
++	  && !ix86_agi_dependent (dep_insn, insn))
+ 	{
+ 	  /* Claim moves to take one cycle, as core can issue one load
+ 	     at time and the next load can start cycle later.  */
+@@ -19212,7 +19607,7 @@
+ 	 in parallel with previous instruction in case
+ 	 previous instruction is not needed to compute the address.  */
+       if ((memory == MEMORY_LOAD || memory == MEMORY_BOTH)
+-	  && !ix86_agi_dependent (insn, dep_insn, insn_type))
++	  && !ix86_agi_dependent (dep_insn, insn))
+ 	{
+ 	  /* Claim moves to take one cycle, as core can issue one load
+ 	     at time and the next load can start cycle later.  */
+@@ -19229,6 +19624,7 @@
+     case PROCESSOR_ATHLON:
+     case PROCESSOR_K8:
+     case PROCESSOR_AMDFAM10:
++    case PROCESSOR_ATOM:
+     case PROCESSOR_GENERIC32:
+     case PROCESSOR_GENERIC64:
+       memory = get_attr_memory (insn);
+@@ -19237,7 +19633,7 @@
+ 	 in parallel with previous instruction in case
+ 	 previous instruction is not needed to compute the address.  */
+       if ((memory == MEMORY_LOAD || memory == MEMORY_BOTH)
+-	  && !ix86_agi_dependent (insn, dep_insn, insn_type))
++	  && !ix86_agi_dependent (dep_insn, insn))
+ 	{
+ 	  enum attr_unit unit = get_attr_unit (insn);
+ 	  int loadcost = 3;
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr40134.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr40134.diff
@@ -0,0 +1,73 @@
+# DP: Backport of PR target/40134 from the trunk
+
+Index: gcc/config.gcc
+===================================================================
+--- a/src/gcc/config.gcc	(revision 151558)
++++ b/src/gcc/config.gcc	(working copy)
+@@ -900,7 +900,7 @@
+ 	target_cpu_default="MASK_PA_11|MASK_NO_SPACE_REGS"
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h pa/pa-linux.h \
+ 		 pa/pa32-regs.h pa/pa32-linux.h"
+-	tmake_file="${tmake_file} pa/t-linux"
++	tmake_file="${tmake_file} pa/t-linux t-slibgcc-libgcc"
+ 	# Set the libgcc version number
+ 	if test x$sjlj = x1; then
+ 	    tmake_file="$tmake_file pa/t-slibgcc-sjlj-ver"
+@@ -1745,12 +1745,12 @@
+ 		tm_file="rs6000/secureplt.h ${tm_file}"
+ 	fi
+ 	extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt"
+-	tmake_file="t-dfprules rs6000/t-fprules ${tmake_file} rs6000/t-ppccomm rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp"
++	tmake_file="t-dfprules rs6000/t-fprules ${tmake_file} rs6000/t-ppccomm rs6000/t-linux64 t-slibgcc-libgcc rs6000/t-fprules-softfp soft-fp/t-softfp"
+ 	;;
+ powerpc64-*-gnu*)
+ 	tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux64.h rs6000/gnu.h"
+ 	extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt"
+-	tmake_file="rs6000/t-fprules t-slibgcc-elf-ver t-gnu rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp"
++	tmake_file="rs6000/t-fprules t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp"
+ 	;;
+ powerpc-*-darwin*)
+ 	extra_options="${extra_options} rs6000/darwin.opt"
+@@ -1856,7 +1856,7 @@
+ 		tm_file="${tm_file} rs6000/linux.h"
+ 		;;
+ 	esac
+-	tmake_file="${tmake_file} rs6000/t-fprules-softfp soft-fp/t-softfp"
++	tmake_file="${tmake_file} t-slibgcc-libgcc rs6000/t-fprules-softfp soft-fp/t-softfp"
+ 	if test x${enable_secureplt} = xyes; then
+ 		tm_file="rs6000/secureplt.h ${tm_file}"
+ 	fi
+@@ -1864,14 +1864,14 @@
+ powerpc-*-gnu-gnualtivec*)
+ 	tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxaltivec.h rs6000/gnu.h"
+ 	extra_options="${extra_options} rs6000/sysv4.opt"
+-	tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-gnu rs6000/t-ppccomm"
++	tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu rs6000/t-ppccomm"
+ 	if test x$enable_threads = xyes; then
+ 		thread_file='posix'
+ 	fi
+ 	;;
+ powerpc-*-gnu*)
+ 	tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/gnu.h"
+-	tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-gnu rs6000/t-ppccomm"
++	tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu rs6000/t-ppccomm"
+ 	extra_options="${extra_options} rs6000/sysv4.opt"
+ 	if test x$enable_threads = xyes; then
+ 		thread_file='posix'
+Index: gcc/config/pa/pa-linux.h
+===================================================================
+--- a/src/gcc/config/pa/pa-linux.h	(revision 154725)
++++ b/src/gcc/config/pa/pa-linux.h	(working copy)
+@@ -31,12 +31,6 @@
+ #undef CPP_SPEC
+ #define CPP_SPEC "%{posix:-D_POSIX_SOURCE}"
+ 
+-#undef	LIB_SPEC
+-#define LIB_SPEC \
+-  "%{pthread:-lpthread} \
+-   %{shared:-lgcc -lc} \
+-   %{!shared:%{mieee-fp:-lieee} %{shared-libgcc:-lgcc} %{profile:-lc_p}%{!profile:-lc}}"
+-
+ #undef ASM_SPEC
+ #define ASM_SPEC \
+   "%{v:-V} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}"
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/rename-info-files.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/rename-info-files.diff
@@ -0,0 +1,570 @@
+# DP: Allow transformations on info file names. Reference the
+# DP: transformed info file names in the texinfo files.
+
+
+2004-02-17  Matthias Klose  <doko@debian.org>
+
+gcc/ChangeLog:
+	* Makefile.in: Allow transformations on info file names.
+	Define MAKEINFODEFS, macros to pass transformated info file
+	names to makeinfo.
+	* doc/cpp.texi: Use macros defined in MAKEINFODEFS for references.
+	* doc/cppinternals.texi: Likewise.
+	* doc/extend.texi: Likewise.
+	* doc/gcc.texi: Likewise.
+	* doc/gccint.texi: Likewise.
+	* doc/invoke.texi: Likewise.
+	* doc/libgcc.texi: Likewise.
+	* doc/makefile.texi: Likewise.
+	* doc/passes.texi: Likewise.
+	* doc/sourcebuild.texi: Likewise.
+	* doc/standards.texi: Likewise.
+	* doc/trouble.texi: Likewise.
+
+gcc/fortran/ChangeLog:
+	* Make-lang.in: Allow transformations on info file names.
+	Pass macros of transformated info file defined in MAKEINFODEFS
+	names to makeinfo.
+	* gfortran.texi: Use macros defined in MAKEINFODEFS for references.
+
+gcc/java/ChangeLog:
+	* Make-lang.in: Allow transformations on info file names.
+	Pass macros of transformated info file defined in MAKEINFODEFS
+
+---
+ gcc/Makefile.in           |   74 +++++++++++++++++++++++++++++++++++----------
+ gcc/ada/gnat-style.texi   |    2 +-
+ gcc/ada/gnat_rm.texi      |    2 +-
+ gcc/doc/cpp.texi          |    2 +-
+ gcc/doc/cppinternals.texi |    2 +-
+ gcc/doc/extend.texi       |    2 +-
+ gcc/doc/gcc.texi          |    6 ++--
+ gcc/doc/gccint.texi       |    4 +-
+ gcc/doc/install.texi      |    2 +-
+ gcc/doc/invoke.texi       |    8 ++--
+ gcc/doc/libgcc.texi       |    2 +-
+ gcc/doc/makefile.texi     |    2 +-
+ gcc/doc/passes.texi       |    2 +-
+ gcc/doc/standards.texi    |    4 +-
+ gcc/fortran/Make-lang.in  |   11 ++++---
+ gcc/fortran/gfortran.texi |    2 +-
+ gcc/java/Make-lang.in     |   18 +++++++++--
+ gcc/java/gcj.texi         |   20 ++++++------
+ libgomp/Makefile.am       |   13 +++++---
+ libgomp/Makefile.in       |   14 +++++----
+ libgomp/libgomp.texi      |    2 +-
+ 21 files changed, 127 insertions(+), 67 deletions(-)
+
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -3809,8 +3809,27 @@ stmp-install-fixproto: fixproto
+ 
+ doc: $(BUILD_INFO) $(GENERATED_MANPAGES) gccbug
+ 
+-INFOFILES = doc/cpp.info doc/gcc.info doc/gccint.info \
+-            doc/gccinstall.info doc/cppinternals.info
++INFO_CPP_NAME = $(shell echo cpp|sed '$(program_transform_name)')
++INFO_GCC_NAME = $(shell echo gcc|sed '$(program_transform_name)')
++INFO_GXX_NAME = $(shell echo g++|sed '$(program_transform_name)')
++INFO_GCCINT_NAME = $(shell echo gccint|sed '$(program_transform_name)')
++INFO_GCCINSTALL_NAME = $(shell echo gccinstall|sed '$(program_transform_name)')
++INFO_CPPINT_NAME = $(shell echo cppinternals|sed '$(program_transform_name)')
++
++INFO_FORTRAN_NAME = $(shell echo gfortran|sed '$(program_transform_name)')
++INFO_GCJ_NAME = $(shell echo gcj|sed '$(program_transform_name)')
++
++INFOFILES = doc/$(INFO_CPP_NAME).info doc/$(INFO_GCC_NAME).info \
++            doc/$(INFO_GCCINT_NAME).info \
++            doc/$(INFO_GCCINSTALL_NAME).info doc/$(INFO_CPPINT_NAME).info
++
++MAKEINFODEFS = -D 'fncpp $(INFO_CPP_NAME)' -D 'fngcc $(INFO_GCC_NAME)' \
++               -D 'fngxx $(INFO_GXX_NAME)' \
++               -D 'fngccint $(INFO_GCCINT_NAME)' \
++               -D 'fngccinstall $(INFO_GCCINSTALL_NAME)' \
++               -D 'fncppint $(INFO_CPPINT_NAME)' \
++               -D 'fngfortran $(INFO_FORTRAN_NAME)' \
++               -D 'fngcj $(INFO_GCJ_NAME)'
+ 
+ info: $(INFOFILES) lang.info @GENINSRC@ srcinfo lang.srcinfo
+ 
+@@ -3860,21 +3879,41 @@ gcc-vers.texi: $(BASEVER) $(DEVPHASE)
+ # patterns.  To use them, put each of the specific targets with its
+ # specific dependencies but no build commands.
+ 
+-doc/cpp.info: $(TEXI_CPP_FILES)
+-doc/gcc.info: $(TEXI_GCC_FILES)
+-doc/gccint.info: $(TEXI_GCCINT_FILES)
+-doc/cppinternals.info: $(TEXI_CPPINT_FILES)
+-
++# Generic entry to handle info files, which are not renamed (currently Ada)
+ doc/%.info: %.texi
+ 	if [ x$(BUILD_INFO) = xinfo ]; then \
+ 		$(MAKEINFO) $(MAKEINFOFLAGS) -I . -I $(gcc_docdir) \
+ 			-I $(gcc_docdir)/include -o $@ $<; \
+ 	fi
+ 
++doc/$(INFO_CPP_NAME).info: $(TEXI_CPP_FILES)
++	if [ x$(BUILD_INFO) = xinfo ]; then \
++		$(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
++			-I $(gcc_docdir)/include -o $@ $<; \
++	fi
++
++doc/$(INFO_GCC_NAME).info: $(TEXI_GCC_FILES)
++	if [ x$(BUILD_INFO) = xinfo ]; then \
++		$(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
++			-I $(gcc_docdir)/include -o $@ $<; \
++	fi
++
++doc/$(INFO_GCCINT_NAME).info: $(TEXI_GCCINT_FILES)
++	if [ x$(BUILD_INFO) = xinfo ]; then \
++		$(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
++			-I $(gcc_docdir)/include -o $@ $<; \
++	fi
++
++doc/$(INFO_CPPINT_NAME).info: $(TEXI_CPPINT_FILES)
++	if [ x$(BUILD_INFO) = xinfo ]; then \
++		$(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
++			-I $(gcc_docdir)/include -o $@ $<; \
++	fi
++
+ # Duplicate entry to handle renaming of gccinstall.info
+-doc/gccinstall.info: $(TEXI_GCCINSTALL_FILES)
++doc/$(INFO_GCCINSTALL_NAME).info: $(TEXI_GCCINSTALL_FILES)
+ 	if [ x$(BUILD_INFO) = xinfo ]; then \
+-		$(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir) \
++		$(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
+ 			-I $(gcc_docdir)/include -o $@ $<; \
+ 	fi
+ 
+@@ -4185,11 +4224,11 @@ install-driver: installdirs xgcc$(exeext)
+ # $(INSTALL_DATA) might be a relative pathname, so we can't cd into srcdir
+ # to do the install.
+ install-info:: doc installdirs \
+-	$(DESTDIR)$(infodir)/cpp.info \
+-	$(DESTDIR)$(infodir)/gcc.info \
+-	$(DESTDIR)$(infodir)/cppinternals.info \
+-	$(DESTDIR)$(infodir)/gccinstall.info \
+-	$(DESTDIR)$(infodir)/gccint.info \
++	$(DESTDIR)$(infodir)/$(INFO_CPP_NAME).info \
++	$(DESTDIR)$(infodir)/$(INFO_GCC_NAME).info \
++	$(DESTDIR)$(infodir)/$(INFO_CPPINT_NAME).info \
++	$(DESTDIR)$(infodir)/$(INFO_GCCINSTALL_NAME).info \
++	$(DESTDIR)$(infodir)/$(INFO_GCCINT_NAME).info \
+ 	lang.install-info
+ 
+ $(DESTDIR)$(infodir)/%.info: doc/%.info installdirs
+@@ -4390,8 +4429,11 @@ uninstall: lang.uninstall
+ 	-rm -rf $(DESTDIR)$(man1dir)/cpp$(man1ext)
+ 	-rm -rf $(DESTDIR)$(man1dir)/protoize$(man1ext)
+ 	-rm -rf $(DESTDIR)$(man1dir)/unprotoize$(man1ext)
+-	-rm -f $(DESTDIR)$(infodir)/cpp.info* $(DESTDIR)$(infodir)/gcc.info*
+-	-rm -f $(DESTDIR)$(infodir)/cppinternals.info* $(DESTDIR)$(infodir)/gccint.info*
++	-rm -f $(DESTDIR)$(infodir)/$(INFO_CPP_NAME).info*
++	-rm -f $(DESTDIR)$(infodir)/$(INFO_GCC_NAME).info*
++	-rm -f $(DESTDIR)$(infodir)/$(INFO_CPPINT_NAME).info*
++	-rm -f $(DESTDIR)$(infodir)/$(INFO_GCCINT_NAME).info*
++	-rm -f $(DESTDIR)$(infodir)/$(INFO_GCCINSTALL_NAME).info*
+ #
+ # These targets are for the dejagnu testsuites. The file site.exp
+ # contains global variables that all the testsuites will use.
+--- a/src/gcc/ada/gnat-style.texi
++++ b/src/gcc/ada/gnat-style.texi
+@@ -31,7 +31,7 @@ Texts.  A copy of the license is included in the section entitled
+ 
+ @dircategory Software development
+ @direntry
+-* gnat-style: (gnat-style).      GNAT Coding Style
++* gnat-style: (gnat-style-4.3).      GNAT Coding Style
+ @end direntry
+ 
+ @macro syntax{element}
+--- a/src/gcc/ada/gnat_rm.texi
++++ b/src/gcc/ada/gnat_rm.texi
+@@ -38,7 +38,7 @@ included in the section entitled ``GNU Free Documentation License''.
+ 
+ @dircategory GNU Ada tools
+ @direntry
+-* GNAT Reference Manual: (gnat_rm).  Reference Manual for GNU Ada tools.
++* GNAT Reference Manual: (gnat_rm-4.3).  Reference Manual for GNU Ada tools.
+ @end direntry
+ 
+ @titlepage
+--- a/src/gcc/doc/cpp.texi
++++ b/src/gcc/doc/cpp.texi
+@@ -52,7 +52,7 @@ This manual contains no Invariant Sections.  The Front-Cover Texts are
+ @ifinfo
+ @dircategory Software development
+ @direntry
+-* Cpp: (cpp).                  The GNU C preprocessor.
++* @value{fncpp}: (@value{fncpp}).                  The GNU C preprocessor.
+ @end direntry
+ @end ifinfo
+ 
+--- a/src/gcc/doc/cppinternals.texi
++++ b/src/gcc/doc/cppinternals.texi
+@@ -7,7 +7,7 @@
+ @ifinfo
+ @dircategory Software development
+ @direntry
+-* Cpplib: (cppinternals).      Cpplib internals.
++* @value{fncppint}: (@value{fncppint}).      Cpplib internals.
+ @end direntry
+ @end ifinfo
+ 
+--- a/src/gcc/doc/extend.texi
++++ b/src/gcc/doc/extend.texi
+@@ -12339,7 +12339,7 @@ want to write code that checks whether these features are available, you can
+ test for the GNU compiler the same way as for C programs: check for a
+ predefined macro @code{__GNUC__}.  You can also use @code{__GNUG__} to
+ test specifically for GNU C++ (@pxref{Common Predefined Macros,,
+-Predefined Macros,cpp,The GNU C Preprocessor}).
++Predefined Macros,@value{fncpp},The GNU C Preprocessor}).
+ 
+ @menu
+ * Volatiles::           What constitutes an access to a volatile object.
+--- a/src/gcc/doc/gcc.texi
++++ b/src/gcc/doc/gcc.texi
+@@ -65,8 +65,8 @@ Texts being (a) (see below), and with the Back-Cover Texts being (b)
+ @ifnottex
+ @dircategory Software development
+ @direntry
+-* gcc: (gcc).                  The GNU Compiler Collection.
+-* g++: (gcc).                  The GNU C++ compiler.
++* @value{fngcc}: (@value{fngcc}).                  The GNU Compiler Collection.
++* @value{fngxx}: (@value{fngcc}).                  The GNU C++ compiler.
+ @end direntry
+ This file documents the use of the GNU compilers.
+ @sp 1
+@@ -126,7 +126,7 @@ version @value{version-GCC}.
+ The internals of the GNU compilers, including how to port them to new
+ targets and some information about how to write front ends for new
+ languages, are documented in a separate manual.  @xref{Top,,
+-Introduction, gccint, GNU Compiler Collection (GCC) Internals}.
++Introduction, @value{fngccint}, GNU Compiler Collection (GCC) Internals}.
+ 
+ @menu
+ * G++ and GCC::     You can compile C or C++ programs.
+--- a/src/gcc/doc/gccint.texi
++++ b/src/gcc/doc/gccint.texi
+@@ -51,7 +51,7 @@ Texts being (a) (see below), and with the Back-Cover Texts being (b)
+ @ifnottex
+ @dircategory Software development
+ @direntry
+-* gccint: (gccint).            Internals of the GNU Compiler Collection.
++* @value{fngccint}: (@value{fngccint}).            Internals of the GNU Compiler Collection.
+ @end direntry
+ This file documents the internals of the GNU compilers.
+ @sp 1
+@@ -83,7 +83,7 @@ write front ends for new languages.  It corresponds to the compilers
+ @value{VERSION_PACKAGE}
+ @end ifset
+ version @value{version-GCC}.  The use of the GNU compilers is documented in a
+-separate manual.  @xref{Top,, Introduction, gcc, Using the GNU
++separate manual.  @xref{Top,, Introduction, @value{fngcc}, Using the GNU
+ Compiler Collection (GCC)}.
+ 
+ This manual is mainly a reference manual rather than a tutorial.  It
+--- a/src/gcc/doc/install.texi
++++ b/src/gcc/doc/install.texi
+@@ -97,7 +97,7 @@ Free Documentation License}''.
+ @end ifinfo
+ @dircategory Software development
+ @direntry
+-* gccinstall: (gccinstall).    Installing the GNU Compiler Collection.
++* @value{fngccinstall}: (@value{fngccinstall}).    Installing the GNU Compiler Collection.
+ @end direntry
+ 
+ @c Part 3 Titlepage and Copyright
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -7939,7 +7939,7 @@ One of the standard libraries bypassed by @option{-nostdlib} and
+ @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or special
+ needs for some languages.
+-(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
++(@xref{Interface,,Interfacing to GCC Output,@value{fngccint},GNU Compiler
+ Collection (GCC) Internals},
+ for more discussion of @file{libgcc.a}.)
+ In most cases, you need @file{libgcc.a} even when you want to avoid
+@@ -7947,7 +7947,7 @@ other standard libraries.  In other words, when you specify @option{-nostdlib}
+ or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
+ This ensures that you have no unresolved references to internal GCC
+ library subroutines.  (For example, @samp{__main}, used to ensure C++
+-constructors will be called; @pxref{Collect2,,@code{collect2}, gccint,
++constructors will be called; @pxref{Collect2,,@code{collect2}, @value{fngccint},
+ GNU Compiler Collection (GCC) Internals}.)
+ 
+ @item -pie
+@@ -16121,7 +16121,7 @@ Note that you can also specify places to search using options such as
+ @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
+ take precedence over places specified using environment variables, which
+ in turn take precedence over those specified by the configuration of GCC@.
+-@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
++@xref{Driver,, Controlling the Compilation Driver @file{gcc}, @value{fngccint},
+ GNU Compiler Collection (GCC) Internals}.
+ 
+ @table @env
+@@ -16276,7 +16276,7 @@ the headers it contains change.
+ 
+ A precompiled header file will be searched for when @code{#include} is
+ seen in the compilation.  As it searches for the included file
+-(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
++(@pxref{Search Path,,Search Path,@value{fncpp},The C Preprocessor}) the
+ compiler looks for a precompiled header in each directory just before it
+ looks for the include file in that directory.  The name searched for is
+ the name specified in the @code{#include} with @samp{.gch} appended.  If
+--- a/src/gcc/doc/libgcc.texi
++++ b/src/gcc/doc/libgcc.texi
+@@ -24,7 +24,7 @@ that needs them.
+ GCC will also generate calls to C library routines, such as
+ @code{memcpy} and @code{memset}, in some cases.  The set of routines
+ that GCC may possibly use is documented in @ref{Other
+-Builtins,,,gcc, Using the GNU Compiler Collection (GCC)}.
++Builtins,,,@value{fngcc}, Using the GNU Compiler Collection (GCC)}.
+ 
+ These routines take arguments and return values of a specific machine
+ mode, not a specific C type.  @xref{Machine Modes}, for an explanation
+--- a/src/gcc/doc/makefile.texi
++++ b/src/gcc/doc/makefile.texi
+@@ -140,7 +140,7 @@ regardless of how it itself was compiled.
+ @item profiledbootstrap
+ Builds a compiler with profiling feedback information.  For more
+ information, see
+-@ref{Building,,Building with profile feedback,gccinstall,Installing GCC}.
++@ref{Building,,Building with profile feedback,@value{fngccinstall},Installing GCC}.
+ 
+ @item restrap
+ Restart a bootstrap, so that everything that was not built with
+--- a/src/gcc/doc/passes.texi
++++ b/src/gcc/doc/passes.texi
+@@ -196,7 +196,7 @@ rid of it.  This pass is located in @file{tree-cfg.c} and described by
+ @item Mudflap declaration registration
+ 
+ If mudflap (@pxref{Optimize Options,,-fmudflap -fmudflapth
+--fmudflapir,gcc,Using the GNU Compiler Collection (GCC)}) is
++-fmudflapir,@value{fngcc},Using the GNU Compiler Collection (GCC)}) is
+ enabled, we generate code to register some variable declarations with
+ the mudflap runtime.  Specifically, the runtime tracks the lifetimes of
+ those variable declarations that have their addresses taken, or whose
+--- a/src/gcc/doc/standards.texi
++++ b/src/gcc/doc/standards.texi
+@@ -223,8 +223,8 @@ have additional useful information.
+ GNAT Reference Manual}, for information on standard
+ conformance and compatibility of the Ada compiler.
+ 
+-@xref{Standards,,Standards, gfortran, The GNU Fortran Compiler}, for details
++@xref{Standards,,Standards, @value{fngfortran}, The GNU Fortran Compiler}, for details
+ of standards supported by GNU Fortran.
+ 
+-@xref{Compatibility,,Compatibility with the Java Platform, gcj, GNU gcj},
++@xref{Compatibility,,Compatibility with the Java Platform, @value{fngcj}, GNU gcj},
+ for details of compatibility between @command{gcj} and the Java Platform.
+--- a/src/gcc/fortran/Make-lang.in
++++ b/src/gcc/fortran/Make-lang.in
+@@ -116,7 +116,8 @@ fortran.tags: force
+ 	cd $(srcdir)/fortran; etags -o TAGS.sub *.c *.h; \
+ 	etags --include TAGS.sub --include ../TAGS.sub
+ 
+-fortran.info: doc/gfortran.info doc/gfc-internals.info
++INFO_FORTRAN_NAME = $(shell echo gfortran|sed '$(program_transform_name)')
++fortran.info: doc/$(INFO_FORTRAN_NAME).info
+ fortran.dvi: doc/gfortran.dvi doc/gfc-internals.dvi
+ fortran.html: $(build_htmldir)/gfortran/index.html
+ 
+@@ -165,10 +166,10 @@ GFORTRAN_TEXI = \
+   $(srcdir)/doc/include/gcc-common.texi \
+   gcc-vers.texi
+ 
+-doc/gfortran.info: $(GFORTRAN_TEXI)
++doc/$(INFO_FORTRAN_NAME).info: $(GFORTRAN_TEXI)
+ 	if [ x$(BUILD_INFO) = xinfo ]; then \
+ 	  rm -f doc/gfortran.info-*; \
+-	  $(MAKEINFO) -I $(srcdir)/doc/include -I $(srcdir)/fortran \
++	  $(MAKEINFO) $(MAKEINFODEFS) -I $(srcdir)/doc/include -I $(srcdir)/fortran \
+ 	    -o $@ $<; \
+ 	else true; fi
+ 
+@@ -234,7 +235,7 @@ fortran.install-common: install-finclude-dir installdirs
+ 	  fi ; \
+ 	fi
+ 
+-fortran.install-info: $(DESTDIR)$(infodir)/gfortran.info
++fortran.install-info: $(DESTDIR)$(infodir)/$(INFO_FORTRAN_NAME).info
+ 
+ fortran.install-man: $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext)
+ 
+@@ -252,7 +253,7 @@ fortran.uninstall:
+ 	rm -rf $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext); \
+ 	rm -rf $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext); \
+ 	rm -rf $(DESTDIR)$(bindir)/$(GFORTRAN_TARGET_INSTALL_NAME)$(exeext); \
+-	rm -rf $(DESTDIR)$(infodir)/gfortran.info*
++	rm -rf $(DESTDIR)$(infodir)/$(INFO_FORTRAN_NAME).info*
+ 
+ #
+ # Clean hooks:
+--- a/src/gcc/fortran/gfortran.texi
++++ b/src/gcc/fortran/gfortran.texi
+@@ -101,7 +101,7 @@ Texts being (a) (see below), and with the Back-Cover Texts being (b)
+ @ifinfo
+ @dircategory Software development
+ @direntry
+-* gfortran: (gfortran).                  The GNU Fortran Compiler.
++* @value{fngfortran}: (@value{fngfortran}).                  The GNU Fortran Compiler.
+ @end direntry
+ This file documents the use and the internals of
+ the GNU Fortran compiler, (@command{gfortran}).
+--- a/src/gcc/java/Make-lang.in
++++ b/src/gcc/java/Make-lang.in
+@@ -126,11 +126,23 @@ java.tags: force
+ 	etags --include TAGS.sub --include ../TAGS.sub
+ 
+ 
+-java.info: doc/gcj.info
++TEXI_GCJ_FILES = java/gcj.texi \
++		 $(gcc_docdir)/include/gpl.texi $(gcc_docdir)/include/funding.texi \
++		 $(gcc_docdir)/include/fdl.texi $(gcc_docdir)/include/gcc-common.texi gcc-vers.texi
++INFO_GCJ_NAME = $(shell echo gcj|sed '$(program_transform_name)')
+ 
+-java.srcinfo: doc/gcj.info
++java.info: doc/$(INFO_GCJ_NAME).info
++
++java.srcinfo: doc/$(INFO_GCJ_NAME).info
+ 	-cp -p $^ $(srcdir)/doc
+ 
++doc/$(INFO_GCJ_NAME).info: $(TEXI_GCJ_FILES)
++	if test "x$(BUILD_INFO)" = xinfo; then \
++	  rm -f $(@)*; \
++	  $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) \
++	    -I$(gcc_docdir)/include -I$(srcdir)/f -o$@ $<; \
++	fi
++
+ java.dvi: doc/gcj.dvi
+ 
+ JAVA_PDFFILES = doc/gcj.pdf
+@@ -191,7 +203,7 @@ java.uninstall:
+ 	-rm -rf $(DESTDIR)$(man1dir)/aot-compile$(man1ext)
+ 	-rm -rf $(DESTDIR)$(man1dir)/rebuild-gcj-db$(man1ext)
+ 
+-java.install-info: $(DESTDIR)$(infodir)/gcj.info
++java.install-info: $(DESTDIR)$(infodir)/$(INFO_GCJ_NAME).info
+ 
+ java.install-pdf: $(JAVA_PDFFILES)
+ 	@$(NORMAL_INSTALL)
+--- a/src/gcc/java/gcj.texi
++++ b/src/gcc/java/gcj.texi
+@@ -55,25 +55,25 @@ man page gfdl(7).
+ @format
+ @dircategory Software development
+ @direntry
+-* Gcj: (gcj).               Ahead-of-time compiler for the Java language
++* @value{fngcj}: (@value{fngcj}).               Ahead-of-time compiler for the Java language
+ @end direntry
+ 
+ @dircategory Individual utilities
+ @direntry
+-* jcf-dump: (gcj)Invoking jcf-dump.
++* jcf-dump: (@value{fngcj}) Invoking jcf-dump.
+                             Print information about Java class files
+-* gij: (gcj)Invoking gij.   GNU interpreter for Java bytecode
+-* gcj-dbtool: (gcj)Invoking gcj-dbtool.
++* gij: (@value{fngcj}) Invoking gij.   GNU interpreter for Java bytecode
++* gcj-dbtool: (@value{fngcj}) Invoking gcj-dbtool.
+                             Tool for manipulating class file databases.
+-* jv-convert: (gcj)Invoking jv-convert.
++* jv-convert: (@value{fngcj}) Invoking jv-convert.
+                             Convert file from one encoding to another
+-* grmic: (gcj)Invoking grmic.
++* grmic: (@value{fngcj}) Invoking grmic.
+                             Generate stubs for Remote Method Invocation.
+-* gc-analyze: (gcj)Invoking gc-analyze.
++* gc-analyze: (@value{fngcj}) Invoking gc-analyze.
+                             Analyze Garbage Collector (GC) memory dumps.
+-* aot-compile: (gcj)Invoking aot-compile.
++* aot-compile: (@value{fngcj})Invoking aot-compile.
+                             Compile bytecode to native and generate databases.
+-* rebuild-gcj-db: (gcj)Invoking rebuild-gcj-db.
++* rebuild-gcj-db: (@value{fngcj})Invoking rebuild-gcj-db.
+                             Merge the per-solib databases made by aot-compile
+                             into one system-wide database.
+ @end direntry
+@@ -159,7 +159,7 @@ and the Info entries for @file{gcj} and @file{gcc}.
+ 
+ As @command{gcj} is just another front end to @command{gcc}, it supports many
+ of the same options as gcc.  @xref{Option Summary, , Option Summary,
+-gcc, Using the GNU Compiler Collection (GCC)}.  This manual only documents the
++@value{fngcc}, Using the GNU Compiler Collection (GCC)}.  This manual only documents the
+ options specific to @command{gcj}.
+ 
+ @c man end
+--- a/src/libgomp/Makefile.am
++++ b/src/libgomp/Makefile.am
+@@ -93,16 +93,19 @@ endif
+ 
+ all-local: $(STAMP_GENINSRC)
+ 
+-stamp-geninsrc: libgomp.info
+-	cp -p $(top_builddir)/libgomp.info $(srcdir)/libgomp.info
++INFO_LIBGOMP_NAME = $(shell echo libgomp|sed '$(program_transform_name)')
++stamp-geninsrc: $(INFO_LIBGOMP_NAME).info
++	cp -p $(top_builddir)/$(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.info
+ 	@touch $@
+ 
+-libgomp.info: $(STAMP_BUILD_INFO)
++libgomp.info: $(INFO_LIBGOMP_NAME).info
++	cp $(INFO_LIBGOMP_NAME).info libgomp.info
++$(INFO_LIBGOMP_NAME).info: $(STAMP_BUILD_INFO)
+ 
+ stamp-build-info: libgomp.texi
+-	$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o libgomp.info $(srcdir)/libgomp.texi
++	$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -D 'fnlibgomp $(INFO_LIBGOMP_NAME)' -I $(srcdir) -o $(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.texi
+ 	@touch $@
+ 
+ 
+-CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) libgomp.info
++CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) $(INFO_LIBGOMP_NAME).info
+ MAINTAINERCLEANFILES = $(srcdir)/libgomp.info
+--- a/src/libgomp/Makefile.in
++++ b/src/libgomp/Makefile.in
+@@ -336,7 +336,8 @@ info_TEXINFOS = libgomp.texi
+ 
+ # AM_CONDITIONAL on configure check ACX_CHECK_PROG_VER([MAKEINFO])
+ @BUILD_INFO_TRUE@STAMP_BUILD_INFO = stamp-build-info
+-CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) libgomp.info
++INFO_LIBGOMP_NAME = $(shell echo libgomp|sed '$(program_transform_name)')
++CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) $(INFO_LIBGOMP_NAME).info
+ MAINTAINERCLEANFILES = $(srcdir)/libgomp.info
+ all: config.h
+ 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+@@ -1100,15 +1101,16 @@ install-pdf: $(PDFS)
+ 	done
+ 
+ all-local: $(STAMP_GENINSRC)
+-
+-stamp-geninsrc: libgomp.info
+-	cp -p $(top_builddir)/libgomp.info $(srcdir)/libgomp.info
++stamp-geninsrc: $(INFO_LIBGOMP_NAME).info
++	cp -p $(top_builddir)/$(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.info
+ 	@touch $@
+ 
+-libgomp.info: $(STAMP_BUILD_INFO)
++libgomp.info: $(INFO_LIBGOMP_NAME).info
++	[ "$(INFO_LIBGOMP_NAME).info" = libgomp.info ] || cp $(INFO_LIBGOMP_NAME).info libgomp.info
++$(INFO_LIBGOMP_NAME).info: $(STAMP_BUILD_INFO)
+ 
+ stamp-build-info: libgomp.texi
+-	$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o libgomp.info $(srcdir)/libgomp.texi
++	$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -D 'fnlibgomp $(INFO_LIBGOMP_NAME)' -I $(srcdir) -o $(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.texi
+ 	@touch $@
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+--- a/src/libgomp/libgomp.texi
++++ b/src/libgomp/libgomp.texi
+@@ -31,7 +31,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b)
+ @ifinfo
+ @dircategory GNU Libraries
+ @direntry
+-* libgomp: (libgomp).                    GNU OpenMP runtime library
++* @value{fnlibgomp}: (@value{fnlibgomp}).                    GNU OpenMP runtime library
+ @end direntry
+ 
+ This manual documents the GNU implementation of the OpenMP API for 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libstdc++-pic.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libstdc++-pic.diff
@@ -0,0 +1,53 @@
+# DP: Build and install libstdc++_pic.a library.
+
+---
+ libstdc++-v3/src/Makefile.am |    4 ++++
+ libstdc++-v3/src/Makefile.in |    8 +++++++-
+ 2 files changed, 11 insertions(+), 1 deletions(-)
+
+--- a/src/libstdc++-v3/src/Makefile.am
++++ b/src/libstdc++-v3/src/Makefile.am
+@@ -352,6 +352,11 @@ CXXLINK = $(LIBTOOL) --tag CXX --mode=link $(CXX) \
+ 	  $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
+ 
+ 
++install-exec-local:
++	$(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o || touch libstdc++_pic.a
++	$(mkdir_p) $(DESTDIR)$(toolexeclibdir)
++	$(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Added bits to build debug library.
+ if GLIBCXX_BUILD_DEBUG
+ all-local: build_debug
+--- a/src/libstdc++-v3/src/Makefile.in
++++ b/src/libstdc++-v3/src/Makefile.in
+@@ -726,7 +726,7 @@ info-am:
+ 
+ install-data-am: install-data-local
+ 
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+ 
+ install-info: install-info-am
+ 
+@@ -759,6 +759,7 @@ uninstall-am: uninstall-info-am uninstall-toolexeclibLTLIBRARIES
+ 	distclean-libtool distclean-tags distdir dvi dvi-am html \
+ 	html-am info info-am install install-am install-data \
+ 	install-data-am install-data-local install-exec \
++	install-exec-local \
+ 	install-exec-am install-info install-info-am install-man \
+ 	install-strip install-toolexeclibLTLIBRARIES installcheck \
+ 	installcheck-am installdirs maintainer-clean \
+@@ -942,6 +943,12 @@ build_debug: stamp-debug
+ install_debug:
+ 	(cd ${debugdir} && $(MAKE) \
+ 	toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
++
++install-exec-local:
++	$(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o || touch libstdc++_pic.a
++	$(mkdir_p) $(DESTDIR)$(toolexeclibdir)
++	$(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/arm-thumb2-speedup-division.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/arm-thumb2-speedup-division.diff
@@ -0,0 +1,252 @@
+# DP: ARM: speed up division on Thumb-2 (backport from the trunk)
+
+2009-08-06  Paul Brook  <paul@codesourcery.com>
+
+	gcc/
+	* config/arm/lib1funcs.asm (ARM_DIV_BODY): Add Thumb-2 implementation.
+	(udivsi3, aeabi_uidivmod, divsi3, aeabi_idivmod): Only use Thumb-1
+	implementation on ARMv6-M.
+
+---
+ src/gcc/config/arm/lib1funcs.asm |   63 +++++++++++++++++++++++++++++++++------
+ 1 file changed, 54 insertions(+), 9 deletions(-)
+
+--- a/src/gcc/config/arm/lib1funcs.asm
++++ b/src/gcc/config/arm/lib1funcs.asm
+@@ -436,10 +436,31 @@ pc		.req	r15
+ /* ------------------------------------------------------------------------ */	
+ .macro ARM_DIV_BODY dividend, divisor, result, curbit
+ 
+ #if __ARM_ARCH__ >= 5 && ! defined (__OPTIMIZE_SIZE__)
+ 
++#if defined (__thumb2__)
++	clz	\curbit, \dividend
++	clz	\result, \divisor
++	sub	\curbit, \result, \curbit
++	rsb	\curbit, \curbit, #31
++	adr	\result, 1f
++	add	\curbit, \result, \curbit, lsl #4
++	mov	\result, #0
++	mov	pc, \curbit
++.p2align 3
++1:
++	.set	shift, 32
++	.rept	32
++	.set	shift, shift - 1
++	cmp.w	\dividend, \divisor, lsl #shift
++	nop.n
++	adc.w	\result, \result, \result
++	it	cs
++	subcs.w	\dividend, \dividend, \divisor, lsl #shift
++	.endr
++#else
+ 	clz	\curbit, \dividend
+ 	clz	\result, \divisor
+ 	sub	\curbit, \result, \curbit
+ 	rsbs	\curbit, \curbit, #31
+ 	addne	\curbit, \curbit, \curbit, lsl #1
+@@ -451,10 +472,11 @@ pc		.req	r15
+ 	.set	shift, shift - 1
+ 	cmp	\dividend, \divisor, lsl #shift
+ 	adc	\result, \result, \result
+ 	subcs	\dividend, \dividend, \divisor, lsl #shift
+ 	.endr
++#endif
+ 
+ #else /* __ARM_ARCH__ < 5 || defined (__OPTIMIZE_SIZE__) */
+ #if __ARM_ARCH__ >= 5
+ 
+ 	clz	\curbit, \divisor
+@@ -498,22 +520,27 @@ pc		.req	r15
+ 
+ #endif /* __ARM_ARCH__ < 5 */
+ 
+ 	@ Division loop
+ 1:	cmp	\dividend, \divisor
++	do_it	hs, t
+ 	subhs	\dividend, \dividend, \divisor
+ 	orrhs	\result,   \result,   \curbit
+ 	cmp	\dividend, \divisor,  lsr #1
++	do_it	hs, t
+ 	subhs	\dividend, \dividend, \divisor, lsr #1
+ 	orrhs	\result,   \result,   \curbit,  lsr #1
+ 	cmp	\dividend, \divisor,  lsr #2
++	do_it	hs, t
+ 	subhs	\dividend, \dividend, \divisor, lsr #2
+ 	orrhs	\result,   \result,   \curbit,  lsr #2
+ 	cmp	\dividend, \divisor,  lsr #3
++	do_it	hs, t
+ 	subhs	\dividend, \dividend, \divisor, lsr #3
+ 	orrhs	\result,   \result,   \curbit,  lsr #3
+ 	cmp	\dividend, #0			@ Early termination?
++	do_it	hs, t
+ 	movnes	\curbit,   \curbit,  lsr #4	@ No, any more bits to do?
+ 	movne	\divisor,  \divisor, lsr #4
+ 	bne	1b
+ 
+ #endif /* __ARM_ARCH__ < 5 || defined (__OPTIMIZE_SIZE__) */
+@@ -798,15 +825,15 @@ LSYM(Lgot_result):
+ /* ------------------------------------------------------------------------ */
+ /*		Start of the Real Functions				    */
+ /* ------------------------------------------------------------------------ */
+ #ifdef L_udivsi3
+ 
++#if defined(__ARM_ARCH_6M__)
++
+ 	FUNC_START udivsi3
+ 	FUNC_ALIAS aeabi_uidiv udivsi3
+ 
+-#ifdef __thumb__
+-
+ 	cmp	divisor, #0
+ 	beq	LSYM(Ldiv0)
+ 	mov	curbit, #1
+ 	mov	result, #0
+ 	
+@@ -818,13 +845,17 @@ LSYM(Lgot_result):
+ 	
+ 	mov	r0, result
+ 	pop	{ work }
+ 	RET
+ 
+-#else /* ARM version.  */
++#else /* ARM version/Thumb-2.  */
++
++	ARM_FUNC_START udivsi3
++	ARM_FUNC_ALIAS aeabi_uidiv udivsi3
+ 
+ 	subs	r2, r1, #1
++	do_it	eq
+ 	RETc(eq)
+ 	bcc	LSYM(Ldiv0)
+ 	cmp	r0, r1
+ 	bls	11f
+ 	tst	r1, r2
+@@ -833,11 +864,12 @@ LSYM(Lgot_result):
+ 	ARM_DIV_BODY r0, r1, r2, r3
+ 	
+ 	mov	r0, r2
+ 	RET	
+ 
+-11:	moveq	r0, #1
++11:	do_it	eq, e
++	moveq	r0, #1
+ 	movne	r0, #0
+ 	RET
+ 
+ 12:	ARM_DIV2_ORDER r1, r2
+ 
+@@ -846,19 +878,20 @@ LSYM(Lgot_result):
+ 
+ #endif /* ARM version */
+ 
+ 	DIV_FUNC_END udivsi3
+ 
++#if defined(__ARM_ARCH_6M__)
+ FUNC_START aeabi_uidivmod
+-#ifdef __thumb__
+ 	push	{r0, r1, lr}
+ 	bl	SYM(__udivsi3)
+ 	POP	{r1, r2, r3}
+ 	mul	r2, r0
+ 	sub	r1, r1, r2
+ 	bx	r3
+ #else
++ARM_FUNC_START aeabi_uidivmod
+ 	stmfd	sp!, { r0, r1, lr }
+ 	bl	SYM(__udivsi3)
+ 	ldmfd	sp!, { r1, r2, lr }
+ 	mul	r3, r2, r0
+ 	sub	r1, r1, r3
+@@ -909,14 +942,15 @@ LSYM(Lover10):
+ 
+ #endif /* L_umodsi3 */
+ /* ------------------------------------------------------------------------ */
+ #ifdef L_divsi3
+ 
++#if defined(__ARM_ARCH_6M__)
++
+ 	FUNC_START divsi3	
+ 	FUNC_ALIAS aeabi_idiv divsi3
+ 
+-#ifdef __thumb__
+ 	cmp	divisor, #0
+ 	beq	LSYM(Ldiv0)
+ 	
+ 	push	{ work }
+ 	mov	work, dividend
+@@ -944,60 +978,71 @@ LSYM(Lover11):
+ 	neg	r0, r0
+ LSYM(Lover12):
+ 	pop	{ work }
+ 	RET
+ 
+-#else /* ARM version.  */
++#else /* ARM/Thumb-2 version.  */
+ 	
++	ARM_FUNC_START divsi3
++	ARM_FUNC_ALIAS aeabi_idiv divsi3
++
+ 	cmp	r1, #0
+ 	eor	ip, r0, r1			@ save the sign of the result.
+ 	beq	LSYM(Ldiv0)
++	do_it	mi
+ 	rsbmi	r1, r1, #0			@ loops below use unsigned.
+ 	subs	r2, r1, #1			@ division by 1 or -1 ?
+ 	beq	10f
+ 	movs	r3, r0
++	do_it	mi
+ 	rsbmi	r3, r0, #0			@ positive dividend value
+ 	cmp	r3, r1
+ 	bls	11f
+ 	tst	r1, r2				@ divisor is power of 2 ?
+ 	beq	12f
+ 
+ 	ARM_DIV_BODY r3, r1, r0, r2
+ 	
+ 	cmp	ip, #0
++	do_it	mi
+ 	rsbmi	r0, r0, #0
+ 	RET	
+ 
+ 10:	teq	ip, r0				@ same sign ?
++	do_it	mi
+ 	rsbmi	r0, r0, #0
+ 	RET	
+ 
+-11:	movlo	r0, #0
++11:	do_it	lo
++	movlo	r0, #0
++	do_it	eq,t
+ 	moveq	r0, ip, asr #31
+ 	orreq	r0, r0, #1
+ 	RET
+ 
+ 12:	ARM_DIV2_ORDER r1, r2
+ 
+ 	cmp	ip, #0
+ 	mov	r0, r3, lsr r2
++	do_it	mi
+ 	rsbmi	r0, r0, #0
+ 	RET
+ 
+ #endif /* ARM version */
+ 	
+ 	DIV_FUNC_END divsi3
+ 
++#if defined(__ARM_ARCH_6M__)
+ FUNC_START aeabi_idivmod
+-#ifdef __thumb__
+ 	push	{r0, r1, lr}
+ 	bl	SYM(__divsi3)
+ 	POP	{r1, r2, r3}
+ 	mul	r2, r0
+ 	sub	r1, r1, r2
+ 	bx	r3
+ #else
++ARM_FUNC_START aeabi_idivmod
+ 	stmfd	sp!, { r0, r1, lr }
+ 	bl	SYM(__divsi3)
+ 	ldmfd	sp!, { r1, r2, lr }
+ 	mul	r3, r2, r0
+ 	sub	r1, r1, r3
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-link-lib.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-link-lib.diff
@@ -0,0 +1,1844 @@
+# DP: - Install the shared Ada libraries as '.so.1', not '.so' to conform
+# DP:   to the Debian policy.
+# DP: - Don't include a runtime link path (-rpath), when linking binaries.
+# DP: - Build the shared libraries on hppa-linux.
+# DP: - Instead of building libada as a target library only, build it as
+# DP:   both a host and, if different, target library.
+# DP: - Build the GNAT tools in their top-level directory; do not use
+# DP:   recursive makefiles.
+# DP: - Link the GNAT tools dynamically.
+# DP: - Fix a bug in src/gnattools/configure.ac whereby a nonexistent version
+# DP:   of indepsw's body was selected.  Regenerate configure. (PR ada/27300)
+
+# This patch seems large, but the hunks in Makefile.in are actually
+# generated from Makefile.def using autogen.
+
+Index: b/src/gcc/ada/gcc-interface/config-lang.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/config-lang.in
++++ b/src/gcc/ada/gcc-interface/config-lang.in
+@@ -37,7 +37,7 @@
+ outputs="ada/gcc-interface/Makefile ada/Makefile"
+ 
+ target_libs="target-libada"
+-lang_dirs="gnattools"
++lang_dirs="libada gnattools"
+ 
+ # Ada is not enabled by default for the time being.
+ build_by_default=no
+Index: b/src/gcc/ada/link.c
+===================================================================
+--- a/src/gcc/ada/link.c
++++ b/src/gcc/ada/link.c
+@@ -145,8 +145,8 @@
+ 
+ #elif defined (__FreeBSD__)
+ const char *__gnat_object_file_option = "";
+-const char *__gnat_run_path_option = "-Wl,-rpath,";
+-char __gnat_shared_libgnat_default = STATIC;
++char *__gnat_run_path_option = "";
++char __gnat_shared_libgnat_default = SHARED;
+ int __gnat_link_max = 8192;
+ unsigned char __gnat_objlist_file_supported = 1;
+ unsigned char __gnat_using_gnu_linker = 1;
+@@ -154,8 +154,8 @@
+ 
+ #elif defined (linux) || defined(__GLIBC__)
+ const char *__gnat_object_file_option = "";
+-const char *__gnat_run_path_option = "-Wl,-rpath,";
+-char __gnat_shared_libgnat_default = STATIC;
++const char *__gnat_run_path_option = "";
++char __gnat_shared_libgnat_default = SHARED;
+ int __gnat_link_max = 8192;
+ unsigned char __gnat_objlist_file_supported = 1;
+ unsigned char __gnat_using_gnu_linker = 1;
+Index: b/src/gcc/ada/gcc-interface/Makefile.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -99,7 +99,7 @@
+ MAKEINFO = makeinfo
+ TEXI2DVI = texi2dvi
+ TEXI2PDF = texi2pdf
+-GNATBIND_FLAGS = -static -x
++GNATBIND_FLAGS = -shared -x
+ ADA_CFLAGS =
+ ADAFLAGS = -W -Wall -gnatpg -gnata
+ SOME_ADAFLAGS =-gnata
+@@ -230,7 +230,6 @@
+ LIBDEPS = $(LIBINTL_DEP) $(LIBIBERTY)
+ # Default is no TGT_LIB; one might be passed down or something
+ TGT_LIB =
+-TOOLS_LIBS = $(EXTRA_GNATTOOLS_OBJS) targext.o link.o $(LIBGNAT) ../../../libiberty/libiberty.a $(SYSLIBS) $(TGT_LIB)
+ 
+ # Specify the directories to be searched for header files.
+ # Both . and srcdir are used, in that order,
+@@ -276,30 +275,6 @@
+ # defined in this file into the environment.
+ .NOEXPORT:
+ 
+-# Lists of files for various purposes.
+-
+-GNATLINK_OBJS = gnatlink.o \
+- a-except.o ali.o alloc.o butil.o casing.o csets.o debug.o fmap.o fname.o \
+- gnatvsn.o hostparm.o indepsw.o interfac.o i-c.o i-cstrin.o namet.o opt.o \
+- osint.o output.o rident.o s-exctab.o s-secsta.o s-stalib.o s-stoele.o \
+- sdefault.o snames.o stylesw.o switch.o system.o table.o targparm.o tree_io.o \
+- types.o validsw.o widechar.o
+-
+-GNATMAKE_OBJS = a-except.o ali.o ali-util.o s-casuti.o \
+- alloc.o atree.o binderr.o butil.o casing.o csets.o debug.o elists.o einfo.o\
+- erroutc.o errutil.o err_vars.o fmap.o fname.o fname-uf.o fname-sf.o \
+- gnatmake.o gnatvsn.o hostparm.o interfac.o i-c.o i-cstrin.o krunch.o lib.o \
+- make.o makeusg.o makeutl.o mlib.o mlib-fil.o mlib-prj.o mlib-tgt.o \
+- mlib-tgt-specific.o mlib-utl.o namet.o nlists.o opt.o osint.o osint-m.o output.o \
+- prj.o prj-attr.o prj-attr-pm.o prj-com.o prj-dect.o prj-env.o prj-err.o prj-ext.o prj-nmsc.o \
+- prj-pars.o prj-part.o prj-proc.o prj-strt.o prj-tree.o prj-util.o \
+- rident.o s-exctab.o s-secsta.o s-stalib.o s-stoele.o \
+- scans.o scng.o sdefault.o sfn_scan.o s-purexc.o s-htable.o \
+- sinfo.o sinput.o sinput-c.o sinput-p.o \
+- snames.o stand.o stringt.o styleg.o stylesw.o system.o validsw.o switch.o switch-m.o \
+- table.o targparm.o tempdir.o tree_io.o types.o \
+- uintp.o uname.o urealp.o usage.o widechar.o \
+- $(EXTRA_GNATMAKE_OBJS)
+ 
+ # Convert the target variable into a space separated list of architecture,
+ # manufacturer, and operating system and assign each of those to its own
+@@ -1058,6 +1033,11 @@
+   GMEM_LIB = gmemlib
+ endif
+ 
++ifeq ($(strip $(filter-out hppa% unknown linux gnu,$(targ))),)
++  GNATLIB_SHARED = gnatlib-shared-dual
++  LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
+ ifeq ($(strip $(filter-out hppa% hp hpux10%,$(targ))),)
+   LIBGNAT_TARGET_PAIRS = \
+   a-excpol.adb<a-excpol-abort.adb \
+@@ -1839,96 +1819,6 @@
+  a-[a-o]*.adb a-[p-z]*.adb a-[a-o]*.ads a-[p-z]*.ads g-*.ad? i-*.ad? \
+  s-[a-o]*.adb s-[p-z]*.adb s-[a-o]*.ads s-[p-z]*.ads
+ 
+-LIBGNAT=../$(RTSDIR)/libgnat.a
+-
+-GCC_LINK=$(CC) -static-libgcc $(ADA_INCLUDES)
+-
+-# when compiling the tools, the runtime has to be first on the path so that
+-# it hides the runtime files lying with the rest of the sources
+-ifeq ($(TOOLSCASE),native)
+-  vpath %.ads ../$(RTSDIR) ../
+-  vpath %.adb ../$(RTSDIR) ../
+-  vpath %.c   ../$(RTSDIR) ../
+-  vpath %.h   ../$(RTSDIR) ../
+-endif
+-
+-# in the cross tools case, everything is compiled with the native
+-# gnatmake/link. Therefore only -I needs to be modified in ADA_INCLUDES
+-ifeq ($(TOOLSCASE),cross)
+-  vpath %.ads ../
+-  vpath %.adb ../
+-  vpath %.c   ../
+-  vpath %.h   ../
+-endif
+-
+-common-tools:
+-	$(GNATMAKE) -c -b $(ADA_INCLUDES) \
+-	  --GNATBIND="$(GNATBIND)" --GCC="$(CC) $(ALL_ADAFLAGS)" \
+-	  gnatchop gnatcmd gnatkr gnatls gnatprep gnatxref gnatfind gnatname \
+-	  gnatclean -bargs $(ADA_INCLUDES) $(GNATBIND_FLAGS)
+-	$(GNATLINK) -v gnatcmd -o ../../gnat$(exeext) \
+-		--GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-	$(GNATLINK) -v gnatchop -o ../../gnatchop$(exeext) \
+-		--GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-	$(GNATLINK) -v gnatkr -o ../../gnatkr$(exeext) \
+-		--GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-	$(GNATLINK) -v gnatls -o ../../gnatls$(exeext) \
+-		--GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-	$(GNATLINK) -v gnatprep -o ../../gnatprep$(exeext) \
+-		--GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-	$(GNATLINK) -v gnatxref -o ../../gnatxref$(exeext) \
+-		--GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-	$(GNATLINK) -v gnatfind -o ../../gnatfind$(exeext) \
+-		--GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-	$(GNATLINK) -v gnatname -o ../../gnatname$(exeext) \
+-		--GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-	$(GNATLINK) -v gnatclean -o ../../gnatclean$(exeext) \
+-		--GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-
+-../../gnatsym$(exeext): 
+-	$(GNATMAKE) -c $(ADA_INCLUDES) gnatsym --GCC="$(CC) $(ALL_ADAFLAGS)"
+-	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatsym
+-	$(GNATLINK) -v gnatsym -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-
+-../../gnatdll$(exeext): 
+-	$(GNATMAKE) -c $(ADA_INCLUDES) gnatdll --GCC="$(CC) $(ALL_ADAFLAGS)"
+-	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatdll
+-	$(GNATLINK) -v gnatdll -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-
+-../../vxaddr2line$(exeext): targext.o
+-	$(GNATMAKE) -c  $(ADA_INCLUDES) vxaddr2line --GCC="$(CC) $(ALL_ADAFLAGS)"
+-	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) vxaddr2line
+-	$(GNATLINK) -v vxaddr2line -o $@ --GCC="$(GCC_LINK)" targext.o $(CLIB)
+-
+-gnatmake-re:  link.o targext.o
+-	$(GNATMAKE) $(ADA_INCLUDES) -u sdefault --GCC="$(CC) $(MOST_ADA_FLAGS)"
+-	$(GNATMAKE) -c $(ADA_INCLUDES) gnatmake --GCC="$(CC) $(ALL_ADAFLAGS)"
+-	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatmake
+-	$(GNATLINK) -v gnatmake -o ../../gnatmake$(exeext) \
+-		--GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-
+-# Note the use of the "mv" command in order to allow gnatlink to be linked with
+-# with the former version of gnatlink itself which cannot override itself.
+-gnatlink-re:  link.o targext.o
+-	$(GNATMAKE) -c $(ADA_INCLUDES) gnatlink --GCC="$(CC) $(ALL_ADAFLAGS)"
+-	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatlink
+-	$(GNATLINK) -v gnatlink -o ../../gnatlinknew$(exeext) \
+-		    --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-	$(MV)  ../../gnatlinknew$(exeext)  ../../gnatlink$(exeext)
+-
+-# Needs to be built with CC=gcc
+-# Since the RTL should be built with the latest compiler, remove the
+-#  stamp target in the parent directory whenever gnat1 is rebuilt
+-
+-# Likewise for the tools
+-../../gnatmake$(exeext): $(P) b_gnatm.o link.o targext.o $(GNATMAKE_OBJS)
+-	$(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) \
+-		    $(TOOLS_LIBS)
+-
+-../../gnatlink$(exeext): $(P) b_gnatl.o link.o targext.o $(GNATLINK_OBJS)
+-	$(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) \
+-		    $(TOOLS_LIBS)
+-
+ ../stamp-gnatlib-$(RTSDIR):
+ 	@if [ ! -f stamp-gnatlib-$(RTSDIR) ] ; \
+ 	then \
+@@ -1964,13 +1854,9 @@
+ #     permission is required.
+ 	for file in gnat gnarl; do \
+ 	   if [ -f $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) ]; then \
+-	      $(INSTALL) $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \
++	      $(INSTALL) $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
+ 			 $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
+ 	   fi; \
+-	   if [ -f $(RTSDIR)/lib$${file}$(soext) ]; then \
+-	      $(LN_S) lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \
+-	      $(DESTDIR)$(ADA_RTL_OBJ_DIR)/lib$${file}$(soext); \
+-	   fi; \
+ 	done
+ # This copy must be done preserving the date on the original file.
+ 	for file in $(RTSDIR)/*.ad?; do \
+@@ -1979,18 +1865,6 @@
+ 	cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.adb
+ 	cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.ads
+ 
+-../stamp-gnatlib2-$(RTSDIR):
+-	$(RM) $(RTSDIR)/s-*.ali
+-	$(RM) $(RTSDIR)/s-*$(objext)
+-	$(RM) $(RTSDIR)/a-*.ali
+-	$(RM) $(RTSDIR)/a-*$(objext)
+-	$(RM) $(RTSDIR)/*.ali
+-	$(RM) $(RTSDIR)/*$(objext)
+-	$(RM) $(RTSDIR)/*$(arext)
+-	$(RM) $(RTSDIR)/*$(soext)
+-	touch ../stamp-gnatlib2-$(RTSDIR)
+-	$(RM) ../stamp-gnatlib-$(RTSDIR)
+-
+ # NOTE: The $(foreach ...) commands assume ";" is the valid separator between
+ #       successive target commands. Although the Gnu make documentation
+ #       implies this is true on all systems, I suspect it may not be, So care
+@@ -2000,7 +1874,7 @@
+ 
+ # GNULLI Begin ###########################################################
+ 
+-../stamp-gnatlib1-$(RTSDIR): Makefile ../stamp-gnatlib2-$(RTSDIR)
++../stamp-gnatlib1-$(RTSDIR): Makefile
+ 	$(RMDIR) $(RTSDIR)
+ 	$(MKDIR) $(RTSDIR)
+ 	$(CHMOD) u+w $(RTSDIR)
+@@ -2029,7 +1903,7 @@
+ # Example: cd $(RTSDIR); ar rc libfoo.a $(LONG_LIST_OF_OBJS)
+ # is guaranteed to overflow the buffer.
+ 
+-gnatlib: ../stamp-gnatlib1-$(RTSDIR) ../stamp-gnatlib2-$(RTSDIR)
++gnatlib: ../stamp-gnatlib1-$(RTSDIR)
+ 	$(MAKE) -C $(RTSDIR) \
+ 		CC="`echo \"$(GCC_FOR_TARGET)\" \
+ 		| sed -e 's,^\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
+@@ -2068,36 +1942,49 @@
+ 		  $(RTSDIR)/memtrack.o
+ 		$(RANLIB_FOR_TARGET) $(RTSDIR)/libgmem$(arext)
+         endif
+-	$(CHMOD) a-wx $(RTSDIR)/*.ali
+ 	touch ../stamp-gnatlib-$(RTSDIR)
+ 
+ # Warning: this target assumes that LIBRARY_VERSION has been set correctly.
+-gnatlib-shared-default:
+-	$(MAKE) $(FLAGS_TO_PASS) \
+-             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+-	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
+-	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+-	     MULTISUBDIR="$(MULTISUBDIR)" \
+-	     THREAD_KIND="$(THREAD_KIND)" \
+-             gnatlib
+-	$(RM) $(RTSDIR)/libgna*$(soext)
++gnatlib-shared-default: ../stamp-gnatlib1-$(RTSDIR)
++	$(MAKE) -C $(RTSDIR) \
++		CC="`echo \"$(GCC_FOR_TARGET)\" \
++		| sed -e 's,^\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
++	        INCLUDES="$(INCLUDES_FOR_SUBDIR) -I./../.." \
++                CFLAGS="$(GNATLIBCFLAGS_FOR_C)" \
++		srcdir=$(fsrcdir) \
++	        -f ../Makefile $(LIBGNAT_OBJS)
++	$(MAKE) -C $(RTSDIR) \
++		CC="`echo \"$(GCC_FOR_TARGET)\" \
++		| sed -e 's,^\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
++	        ADA_INCLUDES="" \
++                CFLAGS="$(GNATLIBCFLAGS) $(GNATLIBCFLAGS_FOR_C) $(TARGET_LIBGCC2_CFLAGS)" \
++	        ADAFLAGS="$(GNATLIBFLAGS)" \
++	        THREAD_KIND="$(THREAD_KIND)" \
++		srcdir=$(fsrcdir) \
++	        -f ../Makefile \
++	        $(GNATRTL_OBJS)
++	$(RM) $(RTSDIR)/libgna*$(soext) $(RTSDIR)/libgna*$(soext).1
+ 	cd $(RTSDIR); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
+ 		$(TARGET_LIBGCC2_CFLAGS) \
+-		-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
++		-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
+ 		$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
+ 		g-trasym.o convert_addresses.o \
+-		$(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
++		$(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
+ 		$(MISCLIB) -lm
+ 	cd $(RTSDIR); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
+ 		$(TARGET_LIBGCC2_CFLAGS) \
+-		-o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
++		-o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
+ 		$(GNATRTL_TASKING_OBJS) \
+-		$(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
++		$(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
+ 		$(THREADSLIB)
+-	cd $(RTSDIR); $(LN_S) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+-		libgnat$(soext)
+-	cd $(RTSDIR); $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+-		libgnarl$(soext)
++	cd $(RTSDIR); for lib in gnat gnarl; do \
++		l=lib$${lib}$(hyphen)$(LIBRARY_VERSION)$(soext); \
++		$(LN_S) $$l.1 $$l; \
++	done
++# Delete the object files, lest they be linked statically into the tools
++# executables.  Only the .ali, .a and .so files must remain.
++	rm -f $(RTSDIR)/*.o
++	$(CHMOD) a-wx $(RTSDIR)/*.ali
+ 
+ gnatlib-shared-dual:
+ 	$(MAKE) $(FLAGS_TO_PASS) \
+@@ -2106,36 +1993,32 @@
+ 	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+ 	     MULTISUBDIR="$(MULTISUBDIR)" \
+ 	     THREAD_KIND="$(THREAD_KIND)" \
+-             gnatlib-shared-default
+-	$(MV) $(RTSDIR)/libgna*$(soext) .
+-	$(RM) ../stamp-gnatlib2-$(RTSDIR)
++             gnatlib
++	$(RM) $(RTSDIR)/*.o $(RTSDIR)/*.ali
+ 	$(MAKE) $(FLAGS_TO_PASS) \
+              GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+ 	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+ 	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+ 	     MULTISUBDIR="$(MULTISUBDIR)" \
+ 	     THREAD_KIND="$(THREAD_KIND)" \
+-             gnatlib
+-	$(MV) libgna*$(soext) $(RTSDIR)
++             gnatlib-shared-default
+ 
+ gnatlib-shared-dual-win32:
+ 	$(MAKE) $(FLAGS_TO_PASS) \
+              GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+-	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
++	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+ 	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+ 	     MULTISUBDIR="$(MULTISUBDIR)" \
+ 	     THREAD_KIND="$(THREAD_KIND)" \
+-             gnatlib-shared-win32
+-	$(MV) $(RTSDIR)/libgna*$(soext) .
+-	$(RM) ../stamp-gnatlib2-$(RTSDIR)
++             gnatlib
++	$(RM) $(RTSDIR)/*.o $(RTSDIR)/*.ali
+ 	$(MAKE) $(FLAGS_TO_PASS) \
+              GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+-	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
++	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
+ 	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+ 	     MULTISUBDIR="$(MULTISUBDIR)" \
+ 	     THREAD_KIND="$(THREAD_KIND)" \
+-             gnatlib
+-	$(MV) libgna*$(soext) $(RTSDIR)
++             gnatlib-shared-win32
+ 
+ # ??? we need to add the option to support auto-import of arrays/records to
+ # the GNATLIBFLAGS when this will be supported by GNAT. At this point we will
+@@ -2254,22 +2137,6 @@
+ gnat-cross: force
+ 	make $(GNAT1_ADA_OBJS) CC="gcc -B../stage1/" CFLAGS="-S -gnatp"
+ 
+-# Compiling object files from source files.
+-
+-# Note that dependencies on obstack.h are not written
+-# because that file is not part of GCC.
+-# Dependencies on gvarargs.h are not written
+-# because all that file does, when not compiling with GCC,
+-# is include the system varargs.h.
+-
+-b_gnatl.c : $(GNATLINK_OBJS)
+-	$(GNATBIND) -C $(ADA_INCLUDES) -o b_gnatl.c gnatlink.ali
+-b_gnatl.o : b_gnatl.c
+-
+-b_gnatm.c : $(GNATMAKE_OBJS)
+-	$(GNATBIND) -C $(ADA_INCLUDES) -o b_gnatm.c gnatmake.ali
+-b_gnatm.o : b_gnatm.c
+-
+ ADA_INCLUDE_DIR = $(libsubdir)/adainclude
+ ADA_RTL_OBJ_DIR = $(libsubdir)/adalib
+ 
+@@ -2385,18 +2252,3 @@
+ 
+ force:
+ 
+-# Gnatlbr, Vms_help, and Gnat.hlp are only used on VMS
+-
+-../../gnatlbr$(exeext): ../../prefix.o
+-	$(GNATMAKE) -c $(ADA_INCLUDES) gnatlbr --GCC="$(CC) $(ALL_ADAFLAGS)"
+-	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatlbr
+-	$(GNATLINK) -v gnatlbr -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-
+-../../vms_help$(exeext):
+-	$(GNATMAKE) -c $(ADA_INCLUDES) vms_help --GCC="$(CC) $(ALL_ADAFLAGS)"
+-	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) vms_help
+-	$(GNATLINK) -v vms_help -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
+-
+-../../gnat.hlp: ../../vms_help$(exeext)
+-	../../vms_help$(exeext) $(fsrcdir)/ada/gnat.help_in \
+-	                        $(fsrcdir)/ada/vms_data.ads ../../gnat.hlp
+Index: b/src/gnattools/Makefile.in
+===================================================================
+--- a/src/gnattools/Makefile.in
++++ b/src/gnattools/Makefile.in
+@@ -18,6 +18,8 @@
+ # Default target; must be first.
+ all: gnattools
+ 
++.SUFFIXES:
++
+ # Standard autoconf-set variables.
+ SHELL = @SHELL@
+ srcdir = @srcdir@
+@@ -33,102 +35,16 @@
+ LN_S=@LN_S@
+ target_noncanonical=@target_noncanonical@
+ 
+-# Variables for the user (or the top level) to override.
+-exeext = @EXEEXT@
+-objext=.o
+-TRACE=no
+-ADA_FOR_BUILD=
+-ADA_FOR_TARGET=
+-LDFLAGS=
+-PWD_COMMAND = $${PWDCMD-pwd}
+-
+-# The tedious process of getting CFLAGS right.
+-CFLAGS=-g
+-LOOSE_WARN = -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
+-GCC_WARN_CFLAGS = $(LOOSE_WARN)
+-WARN_CFLAGS = @warn_cflags@
+-
+-ADA_CFLAGS=@ADA_CFLAGS@
+-
+-# Variables for gnattools.
+-ADAFLAGS= -gnatpg -gnata
+-
+-# For finding the GCC build dir, which is used far too much
+-GCC_DIR=../gcc
+-
+-# Absolute srcdir for gcc (why do we want absolute?  I dunno)
+-fsrcdir := $(shell cd $(srcdir)/../gcc/; ${PWD_COMMAND})
+-
+-# Useful "subroutines" for the excess includes
+-INCLUDES_FOR_SUBDIR = -I. -I.. -I../.. -I$(fsrcdir)/ada -I$(fsrcdir)/config \
+-	-I$(fsrcdir)/../include -I$(fsrcdir)
+-ADA_INCLUDES_FOR_SUBDIR = -I. -I$(fsrcdir)/ada
+-
+-# Variables for gnattools1, native
+-TOOLS_FLAGS_TO_PASS_1= \
+-	"CC=../../xgcc -B../../" \
+-	"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
+-	"LDFLAGS=$(LDFLAGS)" \
+-	"ADAFLAGS=$(ADAFLAGS)" \
+-	"ADA_CFLAGS=$(ADA_CFLAGS)" \
+-	"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
+-	"ADA_INCLUDES=-I- -I../rts $(ADA_INCLUDES_FOR_SUBDIR)"\
+-	"exeext=$(exeext)" \
+-	"fsrcdir=$(fsrcdir)" \
+-	"srcdir=$(fsrcdir)" \
+-	"GNATBIND=../../gnatbind" \
+-	"TOOLSCASE=native"
+-
+-# Variables for regnattools
+-TOOLS_FLAGS_TO_PASS_1re= \
+-	"CC=../../xgcc -B../../" \
+-	"CFLAGS=$(CFLAGS)" \
+-	"ADAFLAGS=$(ADAFLAGS)" \
+-	"ADA_CFLAGS=$(ADA_CFLAGS)" \
+-	"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
+-	"ADA_INCLUDES=-I../rts $(ADA_INCLUDES_FOR_SUBDIR)"\
+-	"exeext=$(exeext)" \
+-	"fsrcdir=$(fsrcdir)" \
+-	"srcdir=$(fsrcdir)" \
+-	"GNATMAKE=../../gnatmake" \
+-	"GNATLINK=../../gnatlink" \
+-	"GNATBIND=../../gnatbind" \
+-	"TOOLSCASE=cross" \
+-	"INCLUDES="
+-
+-# Variables for gnattools2, native
+-TOOLS_FLAGS_TO_PASS_NATIVE= \
+-	"CC=../../xgcc -B../../" \
+-	"CFLAGS=$(CFLAGS)" \
+-	"ADAFLAGS=$(ADAFLAGS)" \
+-	"ADA_CFLAGS=$(ADA_CFLAGS)" \
+-	"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
+-	"ADA_INCLUDES=-I../rts $(ADA_INCLUDES_FOR_SUBDIR)" \
+-	"exeext=$(exeext)" \
+-	"fsrcdir=$(fsrcdir)" \
+-	"srcdir=$(fsrcdir)" \
+-	"GNATMAKE=../../gnatmake" \
+-	"GNATLINK=../../gnatlink" \
+-	"GNATBIND=../../gnatbind" \
+-	"TOOLSCASE=native"
+-
+-# Variables for gnattools, cross
+-TOOLS_FLAGS_TO_PASS_CROSS= \
+-	"CC=$(CC)" \
+-	"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
+-	"LDFLAGS=$(LDFLAGS)" \
+-	"ADAFLAGS=$(ADAFLAGS)"	\
+-	"ADA_CFLAGS=$(ADA_CFLAGS)" \
+-	"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
+-	"ADA_INCLUDES=-I$(RTS_DIR)../adainclude -I$(RTS_DIR) $(ADA_INCLUDES_FOR_SUBDIR)" \
+-	"exeext=$(exeext)" \
+-	"fsrcdir=$(fsrcdir)" \
+-	"srcdir=$(fsrcdir)" \
+-	"GNATMAKE=gnatmake" \
+-	"GNATLINK=gnatlink" \
+-	"GNATBIND=gnatbind" \
+-	"TOOLSCASE=cross" \
+-	"LIBGNAT="
++CFLAGS=-O2 -Wall
++INCLUDES = -I@srcdir@/../gcc/ada -I@srcdir@/../gcc
++ADA_CFLAGS=-O2 -gnatn
++ADA_INCLUDES=-nostdinc -I- -I. -I../gcc/ada/rts -I@srcdir@/../gcc/ada
++LIB_VERSION=$(strip $(shell grep ' Library_Version :' \
++              @srcdir@/../gcc/ada/gnatvsn.ads | sed -e 's/.*"\(.*\)".*/\1/'))
++ADA_LIBS := -L../gcc/ada/rts -lgnat-$(LIB_VERSION)
++
++# We will use the just-built compiler to compile and link everything.
++GCC=../gcc/xgcc -B../gcc/
+ 
+ # File lists
+ # ----------
+@@ -137,121 +53,236 @@
+ EXTRA_GNATTOOLS = @EXTRA_GNATTOOLS@
+ TOOLS_TARGET_PAIRS = @TOOLS_TARGET_PAIRS@
+ 
++# Stage 1 builds xgcc and gnatbind; we can use them to build
++# gnatmake-static and gnatlink-static, then use gnatmake-static and
++# gnatlink-static to build the other tools.  The reason we first build
++# statically-linked versions of gnatmake and gnatlink is so we can run
++# them with confidence on all build platforms, without LD_LIBRARY_PATH
++# or some such variable.
++
++# The tools we will build using gnatmake-static and gnatlink-static.
++TOOLS := gnat gnatbind gnatchop gnatclean gnatfind gnatkr gnatls gnatlink
++TOOLS += gnatmake gnatname gnatprep gnatxref
++
++# Since we don't have gnatmake, we must specify the full list of
++# object files necessary to build gnatmake and gnatlink.
++# TODO: remove from these lists the objects that are part of
++# libgnatvsn and libgnatprj.
++GNATLINK_OBJS = \
++ali.o \
++alloc.o \
++butil.o \
++casing.o \
++csets.o \
++debug.o \
++fmap.o \
++fname.o \
++gnatlink.o \
++gnatvsn.o \
++hostparm.o \
++indepsw.o \
++namet.o \
++opt.o \
++osint.o \
++output.o \
++prefix.o \
++rident.o \
++sdefault.o \
++snames.o \
++stylesw.o \
++switch.o \
++table.o \
++targparm.o \
++tree_io.o \
++types.o \
++validsw.o \
++version.o \
++widechar.o
++
++GNATMAKE_OBJS = \
++ali-util.o \
++ali.o \
++alloc.o \
++atree.o \
++binderr.o \
++butil.o \
++casing.o \
++csets.o \
++debug.o \
++einfo.o\
++elists.o \
++err_vars.o \
++erroutc.o \
++errutil.o \
++fmap.o \
++fname-sf.o \
++fname-uf.o \
++fname.o \
++gnatmake.o \
++gnatvsn.o \
++hostparm.o \
++krunch.o \
++lib.o \
++make.o \
++makeusg.o \
++makeutl.o \
++mlib-fil.o \
++mlib-prj.o \
++mlib-tgt.o \
++mlib-tgt-specific.o \
++mlib-utl.o \
++mlib.o \
++namet.o \
++nlists.o \
++opt.o \
++osint-m.o \
++osint.o \
++output.o \
++prefix.o \
++prj-attr-pm.o \
++prj-attr.o \
++prj-com.o \
++prj-dect.o \
++prj-env.o \
++prj-err.o \
++prj-ext.o \
++prj-nmsc.o \
++prj-pars.o \
++prj-part.o \
++prj-proc.o \
++prj-strt.o \
++prj-tree.o \
++prj-util.o \
++prj.o \
++rident.o \
++scans.o \
++scng.o \
++sdefault.o \
++sfn_scan.o \
++sinfo.o \
++sinput-c.o \
++sinput-p.o \
++sinput.o \
++snames.o \
++stand.o \
++stringt.o \
++styleg.o \
++stylesw.o \
++switch-m.o \
++switch.o \
++table.o \
++targparm.o \
++tempdir.o \
++tree_io.o \
++types.o \
++uintp.o \
++uname.o \
++urealp.o \
++usage.o \
++validsw.o \
++version.o \
++widechar.o \
++$(EXTRA_GNATMAKE_OBJS)
++
+ # Makefile targets
+ # ----------------
+ 
+ .PHONY: gnattools gnattools-native gnattools-cross regnattools
+ gnattools: @default_gnattools_target@
+ 
+-# Sanity check
+-$(GCC_DIR)/stamp-gnatlib-rts:
+-	@if [ ! -f $(GCC_DIR)/stamp-gnatlib-rts ] ; \
+-        then \
+-          echo "Cannot build gnattools while gnatlib is out of date or unbuilt" ; \
+-          false; \
+-        else \
+-          true; \
+-        fi
+-
+-
+ # Build directory for the tools. Let's copy the target-dependent
+ # sources using the same mechanism as for gnatlib. The other sources are
+-# accessed using the vpath directive in ada/Makefile.in
++# accessed using the vpath directive.
++
++stamp-gnattools-sources:
++	$(LN_S) ../gcc/ada/sdefault.adb .
++	$(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
++	          rm -f $(word 1,$(subst <, ,$(PAIR)));\
++	          $(LN_S) @srcdir@/../gcc/ada/$(word 2,$(subst <, ,$(PAIR))) \
++	                  $(word 1,$(subst <, ,$(PAIR)));)
++	touch $@
++
++gnattools-native: ../gcc/ada/rts/libgnat-$(LIB_VERSION).so
++gnattools-native: stamp-gnattools-sources
++gnattools-native: $(TOOLS)
++
++$(TOOLS) gnatcmd: | gnatmake-static gnatlink-static
++
++vpath %.c @srcdir@/../gcc/ada:@srcdir@/../gcc
++vpath %.h @srcdir@/../gcc/ada
++vpath %.adb .:@srcdir@/../gcc/ada
++vpath %.ads @srcdir@/../gcc/ada
++
++# Because the just-built gcc is a host tool like us, we can use some
++# of its object files, e.g. prefix.o and version.o.
++vpath prefix.o ../gcc
++vpath version.o ../gcc
++
++# gnatlink
++
++gnatlink-static: $(GNATLINK_OBJS) b_gnatl.o link.o
++	$(GCC) -o $@ $^ \
++	   ../gcc/ada/rts/libgnat.a \
++	   ../libiberty/libiberty.a
++
++gnatlink: $(GNATLINK_OBJS) b_gnatl.o link.o
++	$(GCC) -o $@ $^ $(ADA_LIBS) ../libiberty/libiberty.a
++
++b_gnatl.o: b_gnatl.c adaint.h
++	$(GCC) -c -o $@ $(CFLAGS) $<
++
++b_gnatl.c: $(GNATLINK_OBJS)
++	../gcc/gnatbind -C -o $@ $(ADA_INCLUDES) gnatlink.ali
++
++# gnatmake
++
++gnatmake-static: $(GNATMAKE_OBJS) b_gnatm.o link.o
++	$(GCC) -o $@ $(ADA_CFLAGS) $^ \
++	   ../gcc/ada/rts/libgnat.a \
++	   ../libiberty/libiberty.a
++
++gnatmake: $(GNATMAKE_OBJS) b_gnatm.o link.o
++	$(GCC) -o $@ $(ADA_CFLAGS) $^ $(ADA_LIBS) ../libiberty/libiberty.a
++
++b_gnatm.o: b_gnatm.c adaint.h
++	$(GCC) -c -o $@ $(CFLAGS) $<
++
++b_gnatm.c: $(GNATMAKE_OBJS) adaint.h
++	../gcc/gnatbind -C -o $@ $(ADA_INCLUDES) gnatmake.ali
++
++# Other tools
++gnatkr: version.o
++	./gnatmake-static -c -b $@ $(ADA_CFLAGS) $(ADA_INCLUDES) \
++	   --GCC="$(GCC)" \
++	   --GNATBIND=../gcc/gnatbind
++	./gnatlink-static -o $@ $@.ali $^ $(ADA_INCLUDES) $(ADA_LIBS) \
++	   --GCC="$(GCC) $(ADA_INCLUDES)"
++
++gnat: gnatcmd
++	cp -lp $< $@
++
++gnatbind gnatchop gnatclean gnatcmd gnatfind gnatls gnatname gnatprep gnatxref: \
++link.o version.o prefix.o
++	./gnatmake-static -c -b $@ $(ADA_CFLAGS) $(ADA_INCLUDES) \
++	   --GCC="$(GCC)" \
++	   --GNATBIND=../gcc/gnatbind
++	./gnatlink-static -o $@ $@.ali $^ $(ADA_INCLUDES) $(ADA_LIBS) \
++	   ../libiberty/libiberty.a \
++	   --GCC="$(GCC) $(ADA_INCLUDES)"
++
++# Force compiling sdefault.adb, not .ads, to produce sdefault.o
++sdefault.o: sdefault.adb
++
++sdefault.adb: stamp-gnattools-sources
++
++%.o: %.adb
++	$(GCC) -c -o $@ $< $(ADA_CFLAGS) $(ADA_INCLUDES)
++
++%.o: %.ads
++	$(GCC) -c -o $@ $< $(ADA_CFLAGS) $(ADA_INCLUDES)
+ 
+-$(GCC_DIR)/stamp-tools:
+-	-rm -rf $(GCC_DIR)/ada/tools
+-	-mkdir -p $(GCC_DIR)/ada/tools
+-	-(cd $(GCC_DIR)/ada/tools; $(LN_S) ../sdefault.adb .)
+-	-$(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
+-	          rm -f $(GCC_DIR)/ada/tools/$(word 1,$(subst <, ,$(PAIR)));\
+-	          $(LN_S) $(fsrcdir)/ada/$(word 2,$(subst <, ,$(PAIR))) \
+-	                $(GCC_DIR)/ada/tools/$(word 1,$(subst <, ,$(PAIR)));)
+-	touch $(GCC_DIR)/stamp-tools
+-
+-# gnatmake/link tools cannot always be built with gnatmake/link for bootstrap 
+-# reasons: gnatmake should be built with a recent compiler, a recent compiler
+-# may not generate ALI files compatible with an old gnatmake so it is important
+-# to be able to build gnatmake without a version of gnatmake around. Once 
+-# everything has been compiled once, gnatmake can be recompiled with itself 
+-# (see target regnattools) 
+-gnattools-native: $(GCC_DIR)/stamp-tools $(GCC_DIR)/stamp-gnatlib-rts
+-	# gnattools1
+-	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
+-	  $(TOOLS_FLAGS_TO_PASS_1) \
+-	  ../../gnatmake$(exeext) ../../gnatlink$(exeext)
+-	# gnattools2
+-	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
+-	  $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
+-
+-# gnatmake/link can be built with recent gnatmake/link if they are available.
+-# This is especially convenient for building cross tools or for rebuilding
+-# the tools when the original bootstrap has already be done.
+-regnattools: $(GCC_DIR)/stamp-gnatlib-rts
+-	# gnattools1-re
+-	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
+-	  $(TOOLS_FLAGS_TO_PASS_1re) \
+-	  gnatmake-re gnatlink-re
+-	# gnattools2
+-	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
+-	  $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
+-
+-# For cross builds of gnattools,
+-# put the host RTS dir first in the PATH to hide the default runtime
+-# files that are among the sources
+-# FIXME: This should be done in configure.
+-RTS_DIR:=$(strip $(subst \,/,$(shell gnatls -v | grep adalib )))
+-gnattools-cross: $(GCC_DIR)/stamp-tools
+-	# gnattools1-re
+-	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
+-	  $(TOOLS_FLAGS_TO_PASS_CROSS) INCLUDES="" \
+-	  gnatmake-re gnatlink-re
+-	# gnattools2
+-	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
+-	  $(TOOLS_FLAGS_TO_PASS_CROSS) common-tools
+-	# Rename cross tools to where the GCC makefile wants them when
+-	# installing.  FIXME: installation should be done elsewhere.
+-	if [ -f $(GCC_DIR)/gnatbind$(exeext) ] ; then \
+-	  mv $(GCC_DIR)/gnatbind$(exeext) $(GCC_DIR)/gnatbind-cross$(exeext); \
+-	fi
+-	if [ -f $(GCC_DIR)/gnatchop$(exeext) ] ; then \
+-	  mv $(GCC_DIR)/gnatchop$(exeext) $(GCC_DIR)/gnatchop-cross$(exeext); \
+-	fi
+-	if [ -f $(GCC_DIR)/gnat$(exeext) ] ; then \
+-	  mv $(GCC_DIR)/gnat$(exeext) $(GCC_DIR)/gnat-cross$(exeext); \
+-	fi
+-	if [ -f $(GCC_DIR)/gnatkr$(exeext) ] ; then \
+-	  mv $(GCC_DIR)/gnatkr$(exeext) $(GCC_DIR)/gnatkr-cross$(exeext); \
+-	fi
+-	if [ -f $(GCC_DIR)/gnatlink$(exeext) ] ; then \
+-	  mv $(GCC_DIR)/gnatlink$(exeext) $(GCC_DIR)/gnatlink-cross$(exeext); \
+-	fi
+-	if [ -f $(GCC_DIR)/gnatls$(exeext) ] ; then \
+-	  mv $(GCC_DIR)/gnatls$(exeext) $(GCC_DIR)/gnatls-cross$(exeext); \
+-	fi
+-	if [ -f $(GCC_DIR)/gnatmake$(exeext) ] ; then \
+-	  mv $(GCC_DIR)/gnatmake$(exeext) $(GCC_DIR)/gnatmake-cross$(exeext); \
+-	fi
+-	if [ -f $(GCC_DIR)/gnatmem$(exeext) ] ; then \
+-	  mv $(GCC_DIR)/gnatmem$(exeext) $(GCC_DIR)/gnatmem-cross$(exeext); \
+-	fi
+-	if [ -f $(GCC_DIR)/gnatname$(exeext) ] ; then \
+-	  mv $(GCC_DIR)/gnatname$(exeext) $(GCC_DIR)/gnatname-cross$(exeext); \
+-	fi
+-	if [ -f $(GCC_DIR)/gnatprep$(exeext) ] ; then \
+-	  mv $(GCC_DIR)/gnatprep$(exeext) $(GCC_DIR)/gnatprep-cross$(exeext); \
+-	fi
+-	if [ -f $(GCC_DIR)/gnatxref$(exeext) ] ; then \
+-	  mv $(GCC_DIR)/gnatxref$(exeext) $(GCC_DIR)/gnatxref-cross$(exeext); \
+-	fi
+-	if [ -f $(GCC_DIR)/gnatfind$(exeext) ] ; then \
+-	  mv $(GCC_DIR)/gnatfind$(exeext) $(GCC_DIR)/gnatfind-cross$(exeext); \
+-	fi
+-	if [ -f $(GCC_DIR)/gnatclean$(exeext) ] ; then \
+-	  mv $(GCC_DIR)/gnatclean$(exeext) $(GCC_DIR)/gnatclean-cross$(exeext); \
+-	fi
+-	if [ -f $(GCC_DIR)/gnatsym$(exeext) ] ; then \
+-	  mv $(GCC_DIR)/gnatsym$(exeext) $(GCC_DIR)/gnatsym-cross$(exeext); \
+-	fi
++%.o: %.c
++	$(GCC) -c -o $@ $< $(CFLAGS) $(INCLUDES)
+ 
+ # Other
+ # -----
+@@ -279,6 +310,7 @@
+ 
+ # Installation rules.
+ install:
++	$(INSTALL) -s gnatmake gnatlink $(TOOLS) $(DESTDIR)$(bindir)
+ 
+ install-info:
+ 
+@@ -288,8 +320,10 @@
+ 
+ # Cleaning rules.
+ mostlyclean:
++	$(RM) gnatmake gnatlink $(TOOLS) *.o *.ali
+ 
+ clean:
++	$(RM) *.ads *.adb stamp-gnattools-sources
+ 
+ distclean:
+ 	$(RM) Makefile config.status config.log
+Index: b/src/libada/Makefile.in
+===================================================================
+--- a/src/libada/Makefile.in
++++ b/src/libada/Makefile.in
+@@ -61,7 +61,7 @@
+ 
+ # Get target-specific overrides for TARGET_LIBGCC2_CFLAGS.
+ host_subdir = @host_subdir@
+-GCC_DIR=$(MULTIBUILDTOP)../../$(host_subdir)/gcc
++GCC_DIR=$(MULTIBUILDTOP)../$(host_subdir)/gcc
+ include $(GCC_DIR)/libgcc.mvars
+ 
+ target_noncanonical:=@target_noncanonical@
+Index: b/src/Makefile.def
+===================================================================
+--- a/src/Makefile.def
++++ b/src/Makefile.def
+@@ -136,7 +136,20 @@
+                 missing=distclean;
+                 missing=maintainer-clean; };
+ host_modules= { module= utils; no_check=true; };
+-host_modules= { module= gnattools; };
++host_modules= { module= libada; no_install=true; no_check=true;
++		missing= info;
++		missing= dvi;
++		missing= html;
++		missing= TAGS;
++		missing= install-info;
++		missing= installcheck; };
++host_modules= { module= gnattools; no_check=true;
++		missing= info;
++		missing= dvi;
++		missing= html;
++		missing= TAGS;
++		missing= install-info;
++		missing= installcheck; };
+ 
+ target_modules = { module= libstdc++-v3; lib_path=.libs; raw_cxx=true; };
+ target_modules = { module= libmudflap; lib_path=.libs; };
+@@ -161,7 +174,13 @@
+ target_modules = { module= boehm-gc; };
+ target_modules = { module= qthreads; };
+ target_modules = { module= rda; };
+-target_modules = { module= libada; };
++target_modules = { module= libada; no_install=true; no_check=true;
++		   missing= info;
++		   missing= dvi;
++		   missing= html;
++		   missing= TAGS;
++		   missing= install-info;
++		   missing= installcheck; };
+ target_modules = { module= libgomp; lib_path=.libs; };
+ 
+ // These are (some of) the make targets to be done in each subdirectory.
+@@ -336,7 +355,7 @@
+ 
+ dependencies = { module=all-fixincludes; on=all-libiberty; };
+ 
+-dependencies = { module=all-gnattools; on=all-target-libada; };
++dependencies = { module=all-gnattools; on=all-libada; };
+ 
+ dependencies = { module=configure-mpfr; on=all-gmp; };
+ dependencies = { module=configure-ppl; on=all-gmp; };
+Index: b/src/Makefile.in
+===================================================================
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -746,6 +746,7 @@
+     maybe-configure-tk \
+     maybe-configure-libtermcap \
+     maybe-configure-utils \
++    maybe-configure-libada \
+     maybe-configure-gnattools
+ .PHONY: configure-target
+ configure-target:  \
+@@ -906,6 +907,7 @@
+ all-host: maybe-all-tk
+ all-host: maybe-all-libtermcap
+ all-host: maybe-all-utils
++all-host: maybe-all-libada
+ all-host: maybe-all-gnattools
+ 
+ .PHONY: all-target
+@@ -1023,6 +1025,7 @@
+ info-host: maybe-info-tk
+ info-host: maybe-info-libtermcap
+ info-host: maybe-info-utils
++info-host: maybe-info-libada
+ info-host: maybe-info-gnattools
+ 
+ .PHONY: info-target
+@@ -1133,6 +1136,7 @@
+ dvi-host: maybe-dvi-tk
+ dvi-host: maybe-dvi-libtermcap
+ dvi-host: maybe-dvi-utils
++dvi-host: maybe-dvi-libada
+ dvi-host: maybe-dvi-gnattools
+ 
+ .PHONY: dvi-target
+@@ -1243,6 +1247,7 @@
+ pdf-host: maybe-pdf-tk
+ pdf-host: maybe-pdf-libtermcap
+ pdf-host: maybe-pdf-utils
++pdf-host: maybe-pdf-libada
+ pdf-host: maybe-pdf-gnattools
+ 
+ .PHONY: pdf-target
+@@ -1353,6 +1358,7 @@
+ html-host: maybe-html-tk
+ html-host: maybe-html-libtermcap
+ html-host: maybe-html-utils
++html-host: maybe-html-libada
+ html-host: maybe-html-gnattools
+ 
+ .PHONY: html-target
+@@ -1463,6 +1469,7 @@
+ TAGS-host: maybe-TAGS-tk
+ TAGS-host: maybe-TAGS-libtermcap
+ TAGS-host: maybe-TAGS-utils
++TAGS-host: maybe-TAGS-libada
+ TAGS-host: maybe-TAGS-gnattools
+ 
+ .PHONY: TAGS-target
+@@ -1573,6 +1580,7 @@
+ install-info-host: maybe-install-info-tk
+ install-info-host: maybe-install-info-libtermcap
+ install-info-host: maybe-install-info-utils
++install-info-host: maybe-install-info-libada
+ install-info-host: maybe-install-info-gnattools
+ 
+ .PHONY: install-info-target
+@@ -1683,6 +1691,7 @@
+ install-pdf-host: maybe-install-pdf-tk
+ install-pdf-host: maybe-install-pdf-libtermcap
+ install-pdf-host: maybe-install-pdf-utils
++install-pdf-host: maybe-install-pdf-libada
+ install-pdf-host: maybe-install-pdf-gnattools
+ 
+ .PHONY: install-pdf-target
+@@ -1793,6 +1802,7 @@
+ install-html-host: maybe-install-html-tk
+ install-html-host: maybe-install-html-libtermcap
+ install-html-host: maybe-install-html-utils
++install-html-host: maybe-install-html-libada
+ install-html-host: maybe-install-html-gnattools
+ 
+ .PHONY: install-html-target
+@@ -1903,6 +1913,7 @@
+ installcheck-host: maybe-installcheck-tk
+ installcheck-host: maybe-installcheck-libtermcap
+ installcheck-host: maybe-installcheck-utils
++installcheck-host: maybe-installcheck-libada
+ installcheck-host: maybe-installcheck-gnattools
+ 
+ .PHONY: installcheck-target
+@@ -2013,6 +2024,7 @@
+ mostlyclean-host: maybe-mostlyclean-tk
+ mostlyclean-host: maybe-mostlyclean-libtermcap
+ mostlyclean-host: maybe-mostlyclean-utils
++mostlyclean-host: maybe-mostlyclean-libada
+ mostlyclean-host: maybe-mostlyclean-gnattools
+ 
+ .PHONY: mostlyclean-target
+@@ -2123,6 +2135,7 @@
+ clean-host: maybe-clean-tk
+ clean-host: maybe-clean-libtermcap
+ clean-host: maybe-clean-utils
++clean-host: maybe-clean-libada
+ clean-host: maybe-clean-gnattools
+ 
+ .PHONY: clean-target
+@@ -2233,6 +2246,7 @@
+ distclean-host: maybe-distclean-tk
+ distclean-host: maybe-distclean-libtermcap
+ distclean-host: maybe-distclean-utils
++distclean-host: maybe-distclean-libada
+ distclean-host: maybe-distclean-gnattools
+ 
+ .PHONY: distclean-target
+@@ -2343,6 +2357,7 @@
+ maintainer-clean-host: maybe-maintainer-clean-tk
+ maintainer-clean-host: maybe-maintainer-clean-libtermcap
+ maintainer-clean-host: maybe-maintainer-clean-utils
++maintainer-clean-host: maybe-maintainer-clean-libada
+ maintainer-clean-host: maybe-maintainer-clean-gnattools
+ 
+ .PHONY: maintainer-clean-target
+@@ -2507,6 +2522,7 @@
+     maybe-check-tk \
+     maybe-check-libtermcap \
+     maybe-check-utils \
++    maybe-check-libada \
+     maybe-check-gnattools
+ 
+ .PHONY: check-target
+@@ -2643,6 +2659,7 @@
+     maybe-install-tk \
+     maybe-install-libtermcap \
+     maybe-install-utils \
++    maybe-install-libada \
+     maybe-install-gnattools
+ 
+ .PHONY: install-host
+@@ -2720,6 +2737,7 @@
+     maybe-install-tk \
+     maybe-install-libtermcap \
+     maybe-install-utils \
++    maybe-install-libada \
+     maybe-install-gnattools
+ 
+ .PHONY: install-target
+@@ -42629,6 +42647,321 @@
+ 
+ 
+ 
++.PHONY: configure-libada maybe-configure-libada
++maybe-configure-libada:
++@if gcc-bootstrap
++configure-libada: stage_current
++@endif gcc-bootstrap
++@if libada
++maybe-configure-libada: configure-libada
++configure-libada: 
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	test ! -f $(HOST_SUBDIR)/libada/Makefile || exit 0; \
++	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libada ; \
++	$(HOST_EXPORTS) \
++	echo Configuring in $(HOST_SUBDIR)/libada; \
++	cd "$(HOST_SUBDIR)/libada" || exit 1; \
++	case $(srcdir) in \
++	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
++	  *) topdir=`echo $(HOST_SUBDIR)/libada/ | \
++		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
++	esac; \
++	srcdiroption="--srcdir=$${topdir}/libada"; \
++	libsrcdir="$$s/libada"; \
++	$(SHELL) $${libsrcdir}/configure \
++	  $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
++	  --target=${target_alias} $${srcdiroption}  \
++	  || exit 1
++@endif libada
++
++
++
++
++
++.PHONY: all-libada maybe-all-libada
++maybe-all-libada:
++@if gcc-bootstrap
++all-libada: stage_current
++@endif gcc-bootstrap
++@if libada
++TARGET-libada=all
++maybe-all-libada: all-libada
++all-libada: configure-libada
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	(cd $(HOST_SUBDIR)/libada && \
++	  $(MAKE) $(FLAGS_TO_PASS)  $(TARGET-libada))
++@endif libada
++
++
++
++
++.PHONY: check-libada maybe-check-libada
++maybe-check-libada:
++@if libada
++maybe-check-libada: check-libada
++
++check-libada:
++
++@endif libada
++
++.PHONY: install-libada maybe-install-libada
++maybe-install-libada:
++@if libada
++maybe-install-libada: install-libada
++
++install-libada:
++
++@endif libada
++
++# Other targets (info, dvi, pdf, etc.)
++
++.PHONY: maybe-info-libada info-libada
++maybe-info-libada:
++@if libada
++maybe-info-libada: info-libada
++
++# libada doesn't support info.
++info-libada:
++
++@endif libada
++
++.PHONY: maybe-dvi-libada dvi-libada
++maybe-dvi-libada:
++@if libada
++maybe-dvi-libada: dvi-libada
++
++# libada doesn't support dvi.
++dvi-libada:
++
++@endif libada
++
++.PHONY: maybe-pdf-libada pdf-libada
++maybe-pdf-libada:
++@if libada
++maybe-pdf-libada: pdf-libada
++
++pdf-libada: \
++    configure-libada 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libada/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing pdf in libada" ; \
++	(cd $(HOST_SUBDIR)/libada && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          pdf) \
++	  || exit 1
++
++@endif libada
++
++.PHONY: maybe-html-libada html-libada
++maybe-html-libada:
++@if libada
++maybe-html-libada: html-libada
++
++# libada doesn't support html.
++html-libada:
++
++@endif libada
++
++.PHONY: maybe-TAGS-libada TAGS-libada
++maybe-TAGS-libada:
++@if libada
++maybe-TAGS-libada: TAGS-libada
++
++# libada doesn't support TAGS.
++TAGS-libada:
++
++@endif libada
++
++.PHONY: maybe-install-info-libada install-info-libada
++maybe-install-info-libada:
++@if libada
++maybe-install-info-libada: install-info-libada
++
++# libada doesn't support install-info.
++install-info-libada:
++
++@endif libada
++
++.PHONY: maybe-install-pdf-libada install-pdf-libada
++maybe-install-pdf-libada:
++@if libada
++maybe-install-pdf-libada: install-pdf-libada
++
++install-pdf-libada: \
++    configure-libada \
++    pdf-libada 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libada/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing install-pdf in libada" ; \
++	(cd $(HOST_SUBDIR)/libada && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          install-pdf) \
++	  || exit 1
++
++@endif libada
++
++.PHONY: maybe-install-html-libada install-html-libada
++maybe-install-html-libada:
++@if libada
++maybe-install-html-libada: install-html-libada
++
++install-html-libada: \
++    configure-libada \
++    html-libada 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libada/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing install-html in libada" ; \
++	(cd $(HOST_SUBDIR)/libada && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          install-html) \
++	  || exit 1
++
++@endif libada
++
++.PHONY: maybe-installcheck-libada installcheck-libada
++maybe-installcheck-libada:
++@if libada
++maybe-installcheck-libada: installcheck-libada
++
++# libada doesn't support installcheck.
++installcheck-libada:
++
++@endif libada
++
++.PHONY: maybe-mostlyclean-libada mostlyclean-libada
++maybe-mostlyclean-libada:
++@if libada
++maybe-mostlyclean-libada: mostlyclean-libada
++
++mostlyclean-libada: 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libada/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing mostlyclean in libada" ; \
++	(cd $(HOST_SUBDIR)/libada && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          mostlyclean) \
++	  || exit 1
++
++@endif libada
++
++.PHONY: maybe-clean-libada clean-libada
++maybe-clean-libada:
++@if libada
++maybe-clean-libada: clean-libada
++
++clean-libada: 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libada/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing clean in libada" ; \
++	(cd $(HOST_SUBDIR)/libada && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          clean) \
++	  || exit 1
++
++@endif libada
++
++.PHONY: maybe-distclean-libada distclean-libada
++maybe-distclean-libada:
++@if libada
++maybe-distclean-libada: distclean-libada
++
++distclean-libada: 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libada/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing distclean in libada" ; \
++	(cd $(HOST_SUBDIR)/libada && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          distclean) \
++	  || exit 1
++
++@endif libada
++
++.PHONY: maybe-maintainer-clean-libada maintainer-clean-libada
++maybe-maintainer-clean-libada:
++@if libada
++maybe-maintainer-clean-libada: maintainer-clean-libada
++
++maintainer-clean-libada: 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libada/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing maintainer-clean in libada" ; \
++	(cd $(HOST_SUBDIR)/libada && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          maintainer-clean) \
++	  || exit 1
++
++@endif libada
++
++
++
+ .PHONY: configure-gnattools maybe-configure-gnattools
+ maybe-configure-gnattools:
+ @if gcc-bootstrap
+@@ -42689,12 +43022,6 @@
+ maybe-check-gnattools: check-gnattools
+ 
+ check-gnattools:
+-	@: $(MAKE); $(unstage)
+-	@r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(HOST_EXPORTS) \
+-	(cd $(HOST_SUBDIR)/gnattools && \
+-	  $(MAKE) $(FLAGS_TO_PASS)  check)
+ 
+ @endif gnattools
+ 
+@@ -42720,24 +43047,8 @@
+ @if gnattools
+ maybe-info-gnattools: info-gnattools
+ 
+-info-gnattools: \
+-    configure-gnattools 
+-	@: $(MAKE); $(unstage)
+-	@[ -f ./gnattools/Makefile ] || exit 0; \
+-	r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(HOST_EXPORTS) \
+-	for flag in $(EXTRA_HOST_FLAGS) ; do \
+-	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+-	done; \
+-	echo "Doing info in gnattools" ; \
+-	(cd $(HOST_SUBDIR)/gnattools && \
+-	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+-	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+-	          "RANLIB=$${RANLIB}" \
+-	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+-	          info) \
+-	  || exit 1
++# gnattools doesn't support info.
++info-gnattools:
+ 
+ @endif gnattools
+ 
+@@ -42746,24 +43057,8 @@
+ @if gnattools
+ maybe-dvi-gnattools: dvi-gnattools
+ 
+-dvi-gnattools: \
+-    configure-gnattools 
+-	@: $(MAKE); $(unstage)
+-	@[ -f ./gnattools/Makefile ] || exit 0; \
+-	r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(HOST_EXPORTS) \
+-	for flag in $(EXTRA_HOST_FLAGS) ; do \
+-	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+-	done; \
+-	echo "Doing dvi in gnattools" ; \
+-	(cd $(HOST_SUBDIR)/gnattools && \
+-	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+-	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+-	          "RANLIB=$${RANLIB}" \
+-	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+-	          dvi) \
+-	  || exit 1
++# gnattools doesn't support dvi.
++dvi-gnattools:
+ 
+ @endif gnattools
+ 
+@@ -42798,24 +43093,8 @@
+ @if gnattools
+ maybe-html-gnattools: html-gnattools
+ 
+-html-gnattools: \
+-    configure-gnattools 
+-	@: $(MAKE); $(unstage)
+-	@[ -f ./gnattools/Makefile ] || exit 0; \
+-	r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(HOST_EXPORTS) \
+-	for flag in $(EXTRA_HOST_FLAGS) ; do \
+-	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+-	done; \
+-	echo "Doing html in gnattools" ; \
+-	(cd $(HOST_SUBDIR)/gnattools && \
+-	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+-	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+-	          "RANLIB=$${RANLIB}" \
+-	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+-	          html) \
+-	  || exit 1
++# gnattools doesn't support html.
++html-gnattools:
+ 
+ @endif gnattools
+ 
+@@ -42824,24 +43103,8 @@
+ @if gnattools
+ maybe-TAGS-gnattools: TAGS-gnattools
+ 
+-TAGS-gnattools: \
+-    configure-gnattools 
+-	@: $(MAKE); $(unstage)
+-	@[ -f ./gnattools/Makefile ] || exit 0; \
+-	r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(HOST_EXPORTS) \
+-	for flag in $(EXTRA_HOST_FLAGS) ; do \
+-	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+-	done; \
+-	echo "Doing TAGS in gnattools" ; \
+-	(cd $(HOST_SUBDIR)/gnattools && \
+-	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+-	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+-	          "RANLIB=$${RANLIB}" \
+-	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+-	          TAGS) \
+-	  || exit 1
++# gnattools doesn't support TAGS.
++TAGS-gnattools:
+ 
+ @endif gnattools
+ 
+@@ -42850,25 +43113,8 @@
+ @if gnattools
+ maybe-install-info-gnattools: install-info-gnattools
+ 
+-install-info-gnattools: \
+-    configure-gnattools \
+-    info-gnattools 
+-	@: $(MAKE); $(unstage)
+-	@[ -f ./gnattools/Makefile ] || exit 0; \
+-	r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(HOST_EXPORTS) \
+-	for flag in $(EXTRA_HOST_FLAGS) ; do \
+-	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+-	done; \
+-	echo "Doing install-info in gnattools" ; \
+-	(cd $(HOST_SUBDIR)/gnattools && \
+-	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+-	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+-	          "RANLIB=$${RANLIB}" \
+-	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+-	          install-info) \
+-	  || exit 1
++# gnattools doesn't support install-info.
++install-info-gnattools:
+ 
+ @endif gnattools
+ 
+@@ -42931,24 +43177,8 @@
+ @if gnattools
+ maybe-installcheck-gnattools: installcheck-gnattools
+ 
+-installcheck-gnattools: \
+-    configure-gnattools 
+-	@: $(MAKE); $(unstage)
+-	@[ -f ./gnattools/Makefile ] || exit 0; \
+-	r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(HOST_EXPORTS) \
+-	for flag in $(EXTRA_HOST_FLAGS) ; do \
+-	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+-	done; \
+-	echo "Doing installcheck in gnattools" ; \
+-	(cd $(HOST_SUBDIR)/gnattools && \
+-	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+-	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+-	          "RANLIB=$${RANLIB}" \
+-	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+-	          installcheck) \
+-	  || exit 1
++# gnattools doesn't support installcheck.
++installcheck-gnattools:
+ 
+ @endif gnattools
+ 
+@@ -52095,13 +52325,8 @@
+ @if target-libada
+ maybe-check-target-libada: check-target-libada
+ 
++# Dummy target for uncheckable module.
+ check-target-libada:
+-	@: $(MAKE); $(unstage)
+-	@r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(NORMAL_TARGET_EXPORTS) \
+-	(cd $(TARGET_SUBDIR)/libada && \
+-	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
+ 
+ @endif target-libada
+ 
+@@ -52110,13 +52335,8 @@
+ @if target-libada
+ maybe-install-target-libada: install-target-libada
+ 
+-install-target-libada: installdirs
+-	@: $(MAKE); $(unstage)
+-	@r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(NORMAL_TARGET_EXPORTS) \
+-	(cd $(TARGET_SUBDIR)/libada && \
+-	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
++# Dummy target for uninstallable.
++install-target-libada:
+ 
+ @endif target-libada
+ 
+@@ -52127,24 +52347,8 @@
+ @if target-libada
+ maybe-info-target-libada: info-target-libada
+ 
+-info-target-libada: \
+-    configure-target-libada 
+-	@: $(MAKE); $(unstage)
+-	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+-	r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(NORMAL_TARGET_EXPORTS) \
+-	echo "Doing info in $(TARGET_SUBDIR)/libada" ; \
+-	for flag in $(EXTRA_TARGET_FLAGS); do \
+-	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+-	done; \
+-	(cd $(TARGET_SUBDIR)/libada && \
+-	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+-	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+-	          "RANLIB=$${RANLIB}" \
+-	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+-	           info) \
+-	  || exit 1
++# libada doesn't support info.
++info-target-libada:
+ 
+ @endif target-libada
+ 
+@@ -52153,24 +52357,8 @@
+ @if target-libada
+ maybe-dvi-target-libada: dvi-target-libada
+ 
+-dvi-target-libada: \
+-    configure-target-libada 
+-	@: $(MAKE); $(unstage)
+-	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+-	r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(NORMAL_TARGET_EXPORTS) \
+-	echo "Doing dvi in $(TARGET_SUBDIR)/libada" ; \
+-	for flag in $(EXTRA_TARGET_FLAGS); do \
+-	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+-	done; \
+-	(cd $(TARGET_SUBDIR)/libada && \
+-	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+-	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+-	          "RANLIB=$${RANLIB}" \
+-	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+-	           dvi) \
+-	  || exit 1
++# libada doesn't support dvi.
++dvi-target-libada:
+ 
+ @endif target-libada
+ 
+@@ -52205,24 +52393,8 @@
+ @if target-libada
+ maybe-html-target-libada: html-target-libada
+ 
+-html-target-libada: \
+-    configure-target-libada 
+-	@: $(MAKE); $(unstage)
+-	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+-	r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(NORMAL_TARGET_EXPORTS) \
+-	echo "Doing html in $(TARGET_SUBDIR)/libada" ; \
+-	for flag in $(EXTRA_TARGET_FLAGS); do \
+-	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+-	done; \
+-	(cd $(TARGET_SUBDIR)/libada && \
+-	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+-	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+-	          "RANLIB=$${RANLIB}" \
+-	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+-	           html) \
+-	  || exit 1
++# libada doesn't support html.
++html-target-libada:
+ 
+ @endif target-libada
+ 
+@@ -52231,24 +52403,8 @@
+ @if target-libada
+ maybe-TAGS-target-libada: TAGS-target-libada
+ 
+-TAGS-target-libada: \
+-    configure-target-libada 
+-	@: $(MAKE); $(unstage)
+-	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+-	r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(NORMAL_TARGET_EXPORTS) \
+-	echo "Doing TAGS in $(TARGET_SUBDIR)/libada" ; \
+-	for flag in $(EXTRA_TARGET_FLAGS); do \
+-	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+-	done; \
+-	(cd $(TARGET_SUBDIR)/libada && \
+-	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+-	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+-	          "RANLIB=$${RANLIB}" \
+-	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+-	           TAGS) \
+-	  || exit 1
++# libada doesn't support TAGS.
++TAGS-target-libada:
+ 
+ @endif target-libada
+ 
+@@ -52257,25 +52413,8 @@
+ @if target-libada
+ maybe-install-info-target-libada: install-info-target-libada
+ 
+-install-info-target-libada: \
+-    configure-target-libada \
+-    info-target-libada 
+-	@: $(MAKE); $(unstage)
+-	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+-	r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(NORMAL_TARGET_EXPORTS) \
+-	echo "Doing install-info in $(TARGET_SUBDIR)/libada" ; \
+-	for flag in $(EXTRA_TARGET_FLAGS); do \
+-	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+-	done; \
+-	(cd $(TARGET_SUBDIR)/libada && \
+-	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+-	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+-	          "RANLIB=$${RANLIB}" \
+-	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+-	           install-info) \
+-	  || exit 1
++# libada doesn't support install-info.
++install-info-target-libada:
+ 
+ @endif target-libada
+ 
+@@ -52338,24 +52477,8 @@
+ @if target-libada
+ maybe-installcheck-target-libada: installcheck-target-libada
+ 
+-installcheck-target-libada: \
+-    configure-target-libada 
+-	@: $(MAKE); $(unstage)
+-	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+-	r=`${PWD_COMMAND}`; export r; \
+-	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+-	$(NORMAL_TARGET_EXPORTS) \
+-	echo "Doing installcheck in $(TARGET_SUBDIR)/libada" ; \
+-	for flag in $(EXTRA_TARGET_FLAGS); do \
+-	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+-	done; \
+-	(cd $(TARGET_SUBDIR)/libada && \
+-	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+-	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+-	          "RANLIB=$${RANLIB}" \
+-	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+-	           installcheck) \
+-	  || exit 1
++# libada doesn't support installcheck.
++installcheck-target-libada:
+ 
+ @endif target-libada
+ 
+@@ -55604,7 +55727,7 @@
+ all-stageprofile-libcpp: maybe-all-stageprofile-intl
+ all-stagefeedback-libcpp: maybe-all-stagefeedback-intl
+ all-fixincludes: maybe-all-libiberty
+-all-gnattools: maybe-all-target-libada
++all-gnattools: maybe-all-libada
+ configure-mpfr: maybe-all-gmp
+ 
+ configure-stage1-mpfr: maybe-all-stage1-gmp
+Index: b/src/configure.ac
+===================================================================
+--- a/src/configure.ac
++++ b/src/configure.ac
+@@ -158,7 +158,7 @@
+ 
+ # these libraries are used by various programs built for the host environment
+ #
+-host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr ppl cloog libiconv"
++host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr ppl cloog libiconv libada"
+ 
+ # these tools are built for the host environment
+ # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
+@@ -271,7 +271,7 @@
+ 
+ # Similarly, some are only suitable for cross toolchains.
+ # Remove these if host=target.
+-cross_only="target-libgloss target-newlib target-opcodes"
++cross_only="target-libgloss target-newlib target-opcodes target-libada"
+ 
+ case $is_cross_compiler in
+   no) skipdirs="${skipdirs} ${cross_only}" ;;
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr45112.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr45112.diff
@@ -0,0 +1,50 @@
+# DP: Proposed fix for PR c++/45112
+
+ChangeLog:
+
+gcc/
+	PR c++/45112
+	* cp/decl.c (duplicate_decls): Merge DECL_USER_ALIGN and DECL_PACKED.
+
+gcc/testsuite/
+	PR c++/45112
+	* testsuite/g++.dg/pr45112.C: New test.
+
+
+Index: gcc/cp/decl.c
+===================================================================
+*** a/src/gcc/cp/decl.c	(revision 162649)
+--- b/src/gcc/cp/decl.c	(working copy)
+*************** duplicate_decls (tree newdecl, tree oldd
+*** 2113,2118 ****
+--- 2113,2122 ----
+        SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
+        DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
+      }
++   /* Likewise for DECL_USER_ALIGN and DECL_PACKED.  */
++   DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
++   if (TREE_CODE (newdecl) == FIELD_DECL)
++     DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
+  
+    /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
+       with that from NEWDECL below.  */
+Index: gcc/testsuite/g++.dg/pr45112.C
+===================================================================
+*** a/src/gcc/testsuite/g++.dg/pr45112.C	(revision 0)
+--- b/src/gcc/testsuite/g++.dg/pr45112.C	(revision 0)
+***************
+*** 0 ****
+--- 1,12 ----
++ /* { dg-do compile } */
++ 
++ struct JSString
++ {
++   unsigned char mLength;
++   static JSString unitStringTable[];
++ };
++ 
++ JSString JSString::unitStringTable[] __attribute__ ((aligned (8))) = { 1 };
++ 
++ int bug [__alignof__ (JSString::unitStringTable) >= 8 ? 1 : -1];
++ 
+
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-libgnatprj.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-libgnatprj.diff
@@ -0,0 +1,1638 @@
+# DP: - Introduce a new shared library named libgnatprj, containing
+# DP:   the GNAT project file manager licensed under the pure GPL, for
+# DP:   use in GNAT tools, GLADE and GPS.  Link the GNAT tools against
+# DP:   this new library.
+
+# This patch seems large, but the hunks in Makefile.in are actually
+# generated from Makefile.def using autogen.
+
+# !!! Must be applied after ada-libgnatvsn.dpatch
+
+Index: b/src/gcc/ada/gcc-interface/config-lang.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/config-lang.in
++++ b/src/gcc/ada/gcc-interface/config-lang.in
+@@ -36,8 +36,8 @@
+ 
+ outputs="ada/gcc-interface/Makefile ada/Makefile"
+ 
+-target_libs="target-libada target-libgnatvsn"
+-lang_dirs="libada libgnatvsn gnattools"
++target_libs="target-libada target-libgnatvsn target-libgnatprj"
++lang_dirs="libada libgnatvsn libgnatprj gnattools"
+ 
+ # Ada is not enabled by default for the time being.
+ build_by_default=no
+Index: b/src/gnattools/Makefile.in
+===================================================================
+--- a/src/gnattools/Makefile.in
++++ b/src/gnattools/Makefile.in
+@@ -36,13 +36,13 @@
+ target_noncanonical=@target_noncanonical@
+ 
+ CFLAGS=-O2 -Wall
+-INCLUDES = -I@srcdir@/../gcc/ada -I@srcdir@/../gcc
+ ADA_CFLAGS=-O2 -gnatn
+-ADA_INCLUDES=-nostdinc -I- -I. -I../gcc/ada/rts -I../libgnatvsn
++ADA_INCLUDES=-nostdinc -I- -I. -I../gcc/ada/rts -I../libgnatvsn -I../libgnatprj
+ LIB_VERSION=$(strip $(shell grep ' Library_Version :' \
+               ../libgnatvsn/gnatvsn.ads | sed -e 's/.*"\(.*\)".*/\1/'))
+ ADA_LIBS := -L../gcc/ada/rts -lgnat-$(LIB_VERSION)
+ ADA_LIBS += -L../libgnatvsn -lgnatvsn
++ADA_LIBS += -L../libgnatprj -lgnatprj
+ 
+ # We will use the just-built compiler to compile and link everything.
+ GCC=../gcc/xgcc -B../gcc/
+@@ -67,74 +67,18 @@
+ 
+ # Since we don't have gnatmake, we must specify the full list of
+ # object files necessary to build gnatmake and gnatlink.
+-# TODO: remove from these lists the objects that are part of
+-# libgnatprj.
+ GNATLINK_OBJS = \
+-ali.o \
+-butil.o \
+-fmap.o \
+ gnatlink.o \
+ indepsw.o \
+-osint.o \
+-prefix.o \
+-rident.o \
+-sdefault.o \
+-stylesw.o \
+-switch.o \
+-targparm.o \
+ validsw.o
+ 
+ GNATMAKE_OBJS = \
+-ali-util.o \
+-ali.o \
+-binderr.o \
+-butil.o \
+-err_vars.o \
+-erroutc.o \
+-errutil.o \
+-fmap.o \
+ fname-sf.o \
+-fname-uf.o \
+ gnatmake.o \
+ make.o \
+ makeusg.o \
+-makeutl.o \
+-mlib-fil.o \
+ mlib-prj.o \
+-mlib-tgt.o \
+-mlib-tgt-specific.o \
+-mlib-utl.o \
+-mlib.o \
+ osint-m.o \
+-osint.o \
+-prefix.o \
+-prj-attr-pm.o \
+-prj-attr.o \
+-prj-com.o \
+-prj-dect.o \
+-prj-env.o \
+-prj-err.o \
+-prj-ext.o \
+-prj-nmsc.o \
+-prj-pars.o \
+-prj-part.o \
+-prj-proc.o \
+-prj-strt.o \
+-prj-tree.o \
+-prj-util.o \
+-prj.o \
+-rident.o \
+-scng.o \
+-sdefault.o \
+-sfn_scan.o \
+-sinput-c.o \
+-sinput-p.o \
+-styleg.o \
+-stylesw.o \
+-switch-m.o \
+-switch.o \
+-targparm.o \
+-tempdir.o \
+ usage.o \
+ validsw.o \
+ $(EXTRA_GNATMAKE_OBJS)
+@@ -175,11 +119,6 @@
+ 	for file in $(BODIES) $(SPECS); do \
+ 	   $(LN_S) -f $$file .; \
+ 	done
+-	rm -f sdefault.adb; $(LN_S) ../gcc/ada/sdefault.adb .
+-	$(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
+-	          rm -f $(word 1,$(subst <, ,$(PAIR)));\
+-	          $(LN_S) @srcdir@/../gcc/ada/$(word 2,$(subst <, ,$(PAIR))) \
+-	                  $(word 1,$(subst <, ,$(PAIR)));)
+ 	touch $@
+ 
+ gnattools-native: ../gcc/ada/rts/libgnat-$(LIB_VERSION).so
+@@ -192,19 +131,16 @@
+ vpath %.c @srcdir@/../gcc/ada:@srcdir@/../gcc
+ vpath %.h @srcdir@/../gcc/ada
+ 
+-# Because the just-built gcc is a host tool like us, we can use some
+-# of its object files, e.g. prefix.o.
+-vpath prefix.o ../gcc
+-
+ # gnatlink
+ 
+-gnatlink-static: $(GNATLINK_OBJS) b_gnatl.o link.o
++gnatlink-static: $(GNATLINK_OBJS) b_gnatl.o
+ 	$(GCC) -o $@ $^ \
++	   ../libgnatprj/libgnatprj.a \
+ 	   ../libgnatvsn/libgnatvsn.a \
+ 	   ../gcc/ada/rts/libgnat.a \
+ 	   ../libiberty/libiberty.a
+ 
+-gnatlink: $(GNATLINK_OBJS) b_gnatl.o link.o
++gnatlink: $(GNATLINK_OBJS) b_gnatl.o
+ 	$(GCC) -o $@ $^ $(ADA_LIBS) ../libiberty/libiberty.a
+ 
+ b_gnatl.o: b_gnatl.c adaint.h
+@@ -215,13 +151,14 @@
+ 
+ # gnatmake
+ 
+-gnatmake-static: $(GNATMAKE_OBJS) b_gnatm.o link.o
++gnatmake-static: $(GNATMAKE_OBJS) b_gnatm.o
+ 	$(GCC) -o $@ $(ADA_CFLAGS) $^ \
++	   ../libgnatprj/libgnatprj.a \
+ 	   ../libgnatvsn/libgnatvsn.a \
+ 	   ../gcc/ada/rts/libgnat.a \
+ 	   ../libiberty/libiberty.a
+ 
+-gnatmake: $(GNATMAKE_OBJS) b_gnatm.o link.o
++gnatmake: $(GNATMAKE_OBJS) b_gnatm.o
+ 	$(GCC) -o $@ $(ADA_CFLAGS) $^ $(ADA_LIBS) ../libiberty/libiberty.a
+ 
+ b_gnatm.o: b_gnatm.c adaint.h
+@@ -231,19 +168,11 @@
+ 	../gcc/gnatbind -C -o $@ $(ADA_INCLUDES) gnatmake.ali
+ 
+ # Other tools
+-gnatkr:
+-	if [ ! -f $@.adb ] ; then $(LN_S) ../../src/gcc/ada/$@.ad[bs] .; fi
+-	./gnatmake-static -c -b $@ $(ADA_CFLAGS) $(ADA_INCLUDES) \
+-	   --GCC="$(GCC)" \
+-	   --GNATBIND=../gcc/gnatbind
+-	./gnatlink-static -o $@ $@.ali $^ $(ADA_INCLUDES) $(ADA_LIBS) \
+-	   --GCC="$(GCC) $(ADA_INCLUDES)"
+-
+ gnat: gnatcmd
+ 	cp -lp $< $@
+ 
+-gnatbind gnatchop gnatclean gnatcmd gnatfind gnatls gnatname gnatprep gnatxref: \
+-link.o prefix.o
++gnatbind gnatchop gnatclean gnatcmd gnatfind gnatkr gnatls gnatname gnatprep \
++gnatxref:
+ 	if [ ! -f $@.adb ] ; then $(LN_S) ../../src/gcc/ada/$@.ad[bs] .; fi
+ 	./gnatmake-static -c -b $@ $(ADA_CFLAGS) $(ADA_INCLUDES) \
+ 	   --GCC="$(GCC)" \
+@@ -252,22 +181,12 @@
+ 	   ../libiberty/libiberty.a \
+ 	   --GCC="$(GCC) $(ADA_INCLUDES)"
+ 
+-# Force compiling sdefault.adb, not .ads, to produce sdefault.o
+-sdefault.o: sdefault.adb
+-
+-sdefault.adb: stamp-gnattools-sources
+-
+ %.o: %.adb
+ 	$(GCC) -c -o $@ $< $(ADA_CFLAGS) $(ADA_INCLUDES)
+ 
+ %.o: %.ads
+ 	$(GCC) -c -o $@ $< $(ADA_CFLAGS) $(ADA_INCLUDES)
+ 
+-%.o: %.c
+-	$(GCC) -c -o $@ $< $(CFLAGS) $(INCLUDES)
+-
+-prefix.o:
+-
+ # Other
+ # -----
+ 
+Index: b/src/libgnatprj/Makefile.in
+===================================================================
+--- /dev/null
++++ b/src/libgnatprj/Makefile.in
+@@ -0,0 +1,177 @@
++# Makefile for libgnatprj.
++#   Copyright (c) 2006 Ludovic Brenta <ludovic@ludovic-brenta.org>
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++# 
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++# 
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++
++# Default target; must be first.
++all: libgnatprj
++
++.SUFFIXES:
++
++CPUS := $(shell getconf _NPROCESSORS_ONLN)
++LIB_VERSION := $(strip $(shell grep ' Library_Version :' \
++                 @srcdir@/../gcc/ada/gnatvsn.ads | \
++	         sed -e 's/.*"\(.*\)".*/\1/'))
++GCC:=../gcc/xgcc -B../gcc/
++LIBGNAT_JUST_BUILT := -nostdinc -I../gcc/ada/rts
++LIBGNATVSN := -I../libgnatvsn
++CFLAGS := -g -O2
++ADAFLAGS := -g -O2 -gnatn
++BASEVER := $(shell cat @srcdir@/../gcc/BASE-VER)
++DEVPHASE := $(shell cat @srcdir@/../gcc/DEV-PHASE)
++DATESTAMP := $(shell cat @srcdir@/../gcc/DATESTAMP)
++TOOLS_TARGET_PAIRS := @TOOLS_TARGET_PAIRS@
++LN_S := @LN_S@
++
++ifneq (@build@,@host@)
++   CFLAGS += -b @host@
++endif
++
++.PHONY: libgnatprj install
++libgnatprj: libgnatprj.so.$(LIB_VERSION) libgnatprj.a
++
++# Here we list one file per Ada unit: the body file if the unit has a
++# body, the spec file otherwise.
++PRJ_SOURCES := ali.adb ali-util.adb butil.adb binderr.adb errout.adb \
++erroutc.adb errutil.adb err_vars.ads fname-uf.adb fmap.adb impunit.adb \
++lib-util.adb makeutl.adb mlib.adb mlib-fil.adb mlib-tgt.adb \
++mlib-tgt-specific.adb mlib-utl.adb osint.adb osint-c.adb prj.adb prj-attr.adb \
++prj-attr-pm.adb prj-com.ads prj-dect.adb prj-env.adb prj-err.adb prj-ext.adb \
++prj-nmsc.adb prj-pars.adb prj-part.adb prj-pp.adb prj-proc.adb prj-strt.adb \
++prj-tree.adb prj-util.adb rident.ads scng.adb sfn_scan.adb sinfo-cn.adb \
++sinput-c.adb sinput-p.adb style.ads styleg.adb styleg-c.adb stylesw.adb \
++switch.adb switch-m.adb targparm.adb tempdir.adb
++
++# Source files generated in build/gcc/ada, not src/gcc/ada.
++GENERATED_SOURCES := sdefault.adb
++
++SOURCES := $(PRJ_SOURCES) $(GENERATED_SOURCES)
++
++OBJECTS := $(patsubst %.ads,%.o,$(SOURCES:.adb=.o))
++
++# Add some object files compiled from C sources.  prefix.o requires
++# some objects from libiberty.
++OBJECTS += concat.o link.o prefix.o xexit.o xmalloc.o xstrdup.o
++
++vpath %.c @srcdir@/../gcc/ada
++
++libgnatprj.so.$(LIB_VERSION): $(addprefix obj-shared/,$(OBJECTS))
++	: # Make libgnatprj.so
++	$(GCC) -o $@ -shared -fPIC -Wl,--soname,$@ $^ \
++	   -L../gcc/ada/rts -lgnat-$(LIB_VERSION) \
++	   -L../libgnatvsn -lgnatvsn
++	$(LN_S) -f libgnatprj.so.$(LIB_VERSION) libgnatprj.so
++	chmod a=r obj-shared/*.ali
++# Make the .ali files, but not the .o files, visible to the gnat tools.
++	cp -lp obj-shared/*.ali .
++
++$(addprefix obj-shared/,$(OBJECTS)): | stamp-libgnatprj-sources obj-shared
++
++obj-shared/%.o: %.adb
++	$(GCC) -c -fPIC $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) $(LIBGNATVSN) $< -o $@
++
++obj-shared/%.o: %.ads
++	$(GCC) -c -fPIC $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) $(LIBGNATVSN) $< -o $@
++
++obj-shared/%.o: %.c
++	$(GCC) -c -fPIC $(CFLAGS) -I@srcdir@/../gcc $< -o $@
++
++obj-shared/prefix.o: @srcdir@/../gcc/prefix.c
++	$(GCC) -c -fPIC $(CFLAGS) -DPREFIX=\"@prefix@\" -DBASEVER=\"$(BASEVER)\" \
++	   -I@srcdir@/../gcc -I@srcdir@/../include -I../gcc -I../libiberty \
++	   $< -o $@
++
++obj-shared/%.o: @srcdir@/../libiberty/%.c
++	$(GCC) -c -fPIC $(CFLAGS) \
++	   -I@srcdir@/../libiberty -I@srcdir@/../include $< -o $@
++
++obj-shared:
++	-mkdir $@
++
++libgnatprj.a: $(addprefix obj-static/,$(OBJECTS))
++	: # Make libgnatprj.a
++	ar rc $@ $^
++	ranlib $@
++
++$(addprefix obj-static/,$(OBJECTS)): | stamp-libgnatprj-sources obj-static
++
++obj-static/%.o: %.adb
++	$(GCC) -c $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) $(LIBGNATVSN) $< -o $@
++
++obj-static/%.o: %.ads
++	$(GCC) -c $(ADAFLAGS) $(LIBGNAT_JUST_BUILT) $(LIBGNATVSN) $< -o $@
++
++obj-static/%.o: %.c
++	$(GCC) -c $(CFLAGS) -I@srcdir@/../gcc $< -o $@
++
++obj-static/prefix.o: @srcdir@/../gcc/prefix.c
++	$(GCC) -c $(CFLAGS) -DPREFIX=\"@prefix@\" -DBASEVER=\"$(BASEVER)\" \
++	   -I@srcdir@/../gcc -I@srcdir@/../include -I../gcc -I../libiberty \
++	   $< -o $@
++
++obj-static/%.o: @srcdir@/../libiberty/%.c
++	$(GCC) -c -fPIC $(CFLAGS) \
++	   -I@srcdir@/../libiberty -I@srcdir@/../include $< -o $@
++
++obj-static:
++	-mkdir $@
++
++$(SOURCES): stamp-libgnatprj-sources
++
++stamp-libgnatprj-sources:
++	for file in $(PRJ_SOURCES); do \
++	   ads=$$(echo $$file | sed 's/\.adb/.ads/'); \
++	   if [ -f @srcdir@/../gcc/ada/$$file -a ! -L $$file ] ; then $(LN_S) @srcdir@/../gcc/ada/$$file .; fi; \
++	   if [ -f @srcdir@/../gcc/ada/$$ads -a ! -L $$ads ] ; then $(LN_S) @srcdir@/../gcc/ada/$$ads .; fi; \
++	done
++	for file in $(GENERATED_SOURCES); do \
++	   ads=$$(echo $$file | sed 's/\.adb/.ads/'); \
++	   if [ -f ../gcc/ada/$$file -a ! -L $$file ] ; then $(LN_S) ../gcc/ada/$$file .; fi; \
++	   if [ -f ../gcc/ada/$$ads -a ! -L $$ads ] ; then $(LN_S) ../gcc/ada/$$ads .; \
++	   else \
++	      if [ -f @srcdir@/../gcc/ada/$$ads -a ! -L $$ads ] ; then $(LN_S) @srcdir@/../gcc/ada/$$ads .; fi; \
++	   fi; \
++	done
++	$(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
++	          rm -f $(word 1,$(subst <, ,$(PAIR)));\
++	          $(LN_S) @srcdir@/../gcc/ada/$(word 2,$(subst <, ,$(PAIR))) \
++	                  $(word 1,$(subst <, ,$(PAIR)));)
++	touch $@
++
++# Generate a list of source files (.ads and .adb) to install.  Almost
++# all of them are in src/gcc/ada, but some are generated during build
++# and are in build/gcc/ada.
++BODIES := $(filter %.adb,$(PRJ_SOURCES))
++SPECS := $(filter %.ads,$(PRJ_SOURCES)) $(patsubst %.adb,%.ads,$(BODIES) $(GENERATED_SOURCES))
++SOURCES_TO_INSTALL := \
++$(addprefix  @srcdir@/../gcc/ada/,$(SPECS) $(BODIES)) \
++$(addprefix ../gcc/ada/,$(GENERATED_SOURCES))
++
++install: libgnatprj
++	$(INSTALL_DATA) libgnatprj.a $(DESTDIR)$(prefix)/lib
++	$(INSTALL_DATA) libgnatprj.so.$(LIB_VERSION) $(DESTDIR)$(prefix)/lib
++	cd $(DESTDIR)$(prefix)/lib; \
++	ln -sf libgnatprj.so.$(LIB_VERSION) libgnatprj.so
++	mkdir -p $(DESTDIR)$(prefix)/share/ada/adainclude/gnatprj
++	$(INSTALL_DATA) $(SOURCES_TO_INSTALL) \
++	   $(DESTDIR)$(prefix)/share/ada/adainclude/gnatprj
++	mkdir -p $(DESTDIR)$(prefix)/lib/ada/adalib/gnatprj
++	$(INSTALL) -m 0444 obj-shared/*.ali \
++	   $(DESTDIR)$(prefix)/lib/ada/adalib/gnatprj
++	chmod a=r $(DESTDIR)$(prefix)/lib/ada/adalib/gnatprj/*.ali
++
++.PHONY: clean
++clean:
++	rm -rf *.ali obj-static obj-shared libgnatprj* *.adb *.ads stamp*
+Index: b/src/Makefile.def
+===================================================================
+--- a/src/Makefile.def
++++ b/src/Makefile.def
+@@ -150,6 +150,13 @@
+ 		missing= TAGS;
+ 		missing= install-info;
+ 		missing= installcheck; };
++host_modules= { module= libgnatprj; no_check=true;
++		missing= info;
++		missing= dvi;
++		missing= html;
++		missing= TAGS;
++		missing= install-info;
++		missing= installcheck; };
+ host_modules= { module= gnattools; no_check=true;
+ 		missing= info;
+ 		missing= dvi;
+@@ -195,6 +202,13 @@
+ 		   missing= TAGS;
+ 		   missing= install-info;
+ 		   missing= installcheck; };
++target_modules = { module= libgnatprj; no_check=true;
++		   missing= info;
++		   missing= dvi;
++		   missing= html;
++		   missing= TAGS;
++		   missing= install-info;
++		   missing= installcheck; };
+ target_modules = { module= libgomp; lib_path=.libs; };
+ 
+ // These are (some of) the make targets to be done in each subdirectory.
+@@ -371,7 +385,10 @@
+ 
+ dependencies = { module=all-gnattools; on=all-libada; };
+ dependencies = { module=all-gnattools; on=all-libgnatvsn; };
++dependencies = { module=all-gnattools; on=all-libgnatprj; };
+ dependencies = { module=all-libgnatvsn; on=all-libada; };
++dependencies = { module=all-libgnatprj; on=all-libada; };
++dependencies = { module=all-libgnatprj; on=all-libgnatvsn; };
+ 
+ dependencies = { module=configure-mpfr; on=all-gmp; };
+ dependencies = { module=configure-ppl; on=all-gmp; };
+Index: b/src/Makefile.in
+===================================================================
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -748,6 +748,7 @@
+     maybe-configure-utils \
+     maybe-configure-libada \
+     maybe-configure-libgnatvsn \
++    maybe-configure-libgnatprj \
+     maybe-configure-gnattools
+ .PHONY: configure-target
+ configure-target:  \
+@@ -772,6 +773,7 @@
+     maybe-configure-target-rda \
+     maybe-configure-target-libada \
+     maybe-configure-target-libgnatvsn \
++    maybe-configure-target-libgnatprj \
+     maybe-configure-target-libgomp
+ 
+ # The target built for a native non-bootstrap build.
+@@ -911,6 +913,7 @@
+ all-host: maybe-all-utils
+ all-host: maybe-all-libada
+ all-host: maybe-all-libgnatvsn
++all-host: maybe-all-libgnatprj
+ all-host: maybe-all-gnattools
+ 
+ .PHONY: all-target
+@@ -938,6 +941,7 @@
+ all-target: maybe-all-target-rda
+ all-target: maybe-all-target-libada
+ all-target: maybe-all-target-libgnatvsn
++all-target: maybe-all-target-libgnatprj
+ all-target: maybe-all-target-libgomp
+ 
+ # Do a target for all the subdirectories.  A ``make do-X'' will do a
+@@ -1031,6 +1035,7 @@
+ info-host: maybe-info-utils
+ info-host: maybe-info-libada
+ info-host: maybe-info-libgnatvsn
++info-host: maybe-info-libgnatprj
+ info-host: maybe-info-gnattools
+ 
+ .PHONY: info-target
+@@ -1056,6 +1061,7 @@
+ info-target: maybe-info-target-rda
+ info-target: maybe-info-target-libada
+ info-target: maybe-info-target-libgnatvsn
++info-target: maybe-info-target-libgnatprj
+ info-target: maybe-info-target-libgomp
+ 
+ .PHONY: do-dvi
+@@ -1144,6 +1150,7 @@
+ dvi-host: maybe-dvi-utils
+ dvi-host: maybe-dvi-libada
+ dvi-host: maybe-dvi-libgnatvsn
++dvi-host: maybe-dvi-libgnatprj
+ dvi-host: maybe-dvi-gnattools
+ 
+ .PHONY: dvi-target
+@@ -1169,6 +1176,7 @@
+ dvi-target: maybe-dvi-target-rda
+ dvi-target: maybe-dvi-target-libada
+ dvi-target: maybe-dvi-target-libgnatvsn
++dvi-target: maybe-dvi-target-libgnatprj
+ dvi-target: maybe-dvi-target-libgomp
+ 
+ .PHONY: do-pdf
+@@ -1257,6 +1265,7 @@
+ pdf-host: maybe-pdf-utils
+ pdf-host: maybe-pdf-libada
+ pdf-host: maybe-pdf-libgnatvsn
++pdf-host: maybe-pdf-libgnatprj
+ pdf-host: maybe-pdf-gnattools
+ 
+ .PHONY: pdf-target
+@@ -1282,6 +1291,7 @@
+ pdf-target: maybe-pdf-target-rda
+ pdf-target: maybe-pdf-target-libada
+ pdf-target: maybe-pdf-target-libgnatvsn
++pdf-target: maybe-pdf-target-libgnatprj
+ pdf-target: maybe-pdf-target-libgomp
+ 
+ .PHONY: do-html
+@@ -1370,6 +1380,7 @@
+ html-host: maybe-html-utils
+ html-host: maybe-html-libada
+ html-host: maybe-html-libgnatvsn
++html-host: maybe-html-libgnatprj
+ html-host: maybe-html-gnattools
+ 
+ .PHONY: html-target
+@@ -1395,6 +1406,7 @@
+ html-target: maybe-html-target-rda
+ html-target: maybe-html-target-libada
+ html-target: maybe-html-target-libgnatvsn
++html-target: maybe-html-target-libgnatprj
+ html-target: maybe-html-target-libgomp
+ 
+ .PHONY: do-TAGS
+@@ -1483,6 +1495,7 @@
+ TAGS-host: maybe-TAGS-utils
+ TAGS-host: maybe-TAGS-libada
+ TAGS-host: maybe-TAGS-libgnatvsn
++TAGS-host: maybe-TAGS-libgnatprj
+ TAGS-host: maybe-TAGS-gnattools
+ 
+ .PHONY: TAGS-target
+@@ -1508,6 +1521,7 @@
+ TAGS-target: maybe-TAGS-target-rda
+ TAGS-target: maybe-TAGS-target-libada
+ TAGS-target: maybe-TAGS-target-libgnatvsn
++TAGS-target: maybe-TAGS-target-libgnatprj
+ TAGS-target: maybe-TAGS-target-libgomp
+ 
+ .PHONY: do-install-info
+@@ -1596,6 +1610,7 @@
+ install-info-host: maybe-install-info-utils
+ install-info-host: maybe-install-info-libada
+ install-info-host: maybe-install-info-libgnatvsn
++install-info-host: maybe-install-info-libgnatprj
+ install-info-host: maybe-install-info-gnattools
+ 
+ .PHONY: install-info-target
+@@ -1621,6 +1636,7 @@
+ install-info-target: maybe-install-info-target-rda
+ install-info-target: maybe-install-info-target-libada
+ install-info-target: maybe-install-info-target-libgnatvsn
++install-info-target: maybe-install-info-target-libgnatprj
+ install-info-target: maybe-install-info-target-libgomp
+ 
+ .PHONY: do-install-pdf
+@@ -1709,6 +1725,7 @@
+ install-pdf-host: maybe-install-pdf-utils
+ install-pdf-host: maybe-install-pdf-libada
+ install-pdf-host: maybe-install-pdf-libgnatvsn
++install-pdf-host: maybe-install-pdf-libgnatprj
+ install-pdf-host: maybe-install-pdf-gnattools
+ 
+ .PHONY: install-pdf-target
+@@ -1734,6 +1751,7 @@
+ install-pdf-target: maybe-install-pdf-target-rda
+ install-pdf-target: maybe-install-pdf-target-libada
+ install-pdf-target: maybe-install-pdf-target-libgnatvsn
++install-pdf-target: maybe-install-pdf-target-libgnatprj
+ install-pdf-target: maybe-install-pdf-target-libgomp
+ 
+ .PHONY: do-install-html
+@@ -1822,6 +1840,7 @@
+ install-html-host: maybe-install-html-utils
+ install-html-host: maybe-install-html-libada
+ install-html-host: maybe-install-html-libgnatvsn
++install-html-host: maybe-install-html-libgnatprj
+ install-html-host: maybe-install-html-gnattools
+ 
+ .PHONY: install-html-target
+@@ -1847,6 +1866,7 @@
+ install-html-target: maybe-install-html-target-rda
+ install-html-target: maybe-install-html-target-libada
+ install-html-target: maybe-install-html-target-libgnatvsn
++install-html-target: maybe-install-html-target-libgnatprj
+ install-html-target: maybe-install-html-target-libgomp
+ 
+ .PHONY: do-installcheck
+@@ -1935,6 +1955,7 @@
+ installcheck-host: maybe-installcheck-utils
+ installcheck-host: maybe-installcheck-libada
+ installcheck-host: maybe-installcheck-libgnatvsn
++installcheck-host: maybe-installcheck-libgnatprj
+ installcheck-host: maybe-installcheck-gnattools
+ 
+ .PHONY: installcheck-target
+@@ -1960,6 +1981,7 @@
+ installcheck-target: maybe-installcheck-target-rda
+ installcheck-target: maybe-installcheck-target-libada
+ installcheck-target: maybe-installcheck-target-libgnatvsn
++installcheck-target: maybe-installcheck-target-libgnatprj
+ installcheck-target: maybe-installcheck-target-libgomp
+ 
+ .PHONY: do-mostlyclean
+@@ -2048,6 +2070,7 @@
+ mostlyclean-host: maybe-mostlyclean-utils
+ mostlyclean-host: maybe-mostlyclean-libada
+ mostlyclean-host: maybe-mostlyclean-libgnatvsn
++mostlyclean-host: maybe-mostlyclean-libgnatprj
+ mostlyclean-host: maybe-mostlyclean-gnattools
+ 
+ .PHONY: mostlyclean-target
+@@ -2073,6 +2096,7 @@
+ mostlyclean-target: maybe-mostlyclean-target-rda
+ mostlyclean-target: maybe-mostlyclean-target-libada
+ mostlyclean-target: maybe-mostlyclean-target-libgnatvsn
++mostlyclean-target: maybe-mostlyclean-target-libgnatprj
+ mostlyclean-target: maybe-mostlyclean-target-libgomp
+ 
+ .PHONY: do-clean
+@@ -2161,6 +2185,7 @@
+ clean-host: maybe-clean-utils
+ clean-host: maybe-clean-libada
+ clean-host: maybe-clean-libgnatvsn
++clean-host: maybe-clean-libgnatprj
+ clean-host: maybe-clean-gnattools
+ 
+ .PHONY: clean-target
+@@ -2186,6 +2211,7 @@
+ clean-target: maybe-clean-target-rda
+ clean-target: maybe-clean-target-libada
+ clean-target: maybe-clean-target-libgnatvsn
++clean-target: maybe-clean-target-libgnatprj
+ clean-target: maybe-clean-target-libgomp
+ 
+ .PHONY: do-distclean
+@@ -2274,6 +2300,7 @@
+ distclean-host: maybe-distclean-utils
+ distclean-host: maybe-distclean-libada
+ distclean-host: maybe-distclean-libgnatvsn
++distclean-host: maybe-distclean-libgnatprj
+ distclean-host: maybe-distclean-gnattools
+ 
+ .PHONY: distclean-target
+@@ -2299,6 +2326,7 @@
+ distclean-target: maybe-distclean-target-rda
+ distclean-target: maybe-distclean-target-libada
+ distclean-target: maybe-distclean-target-libgnatvsn
++distclean-target: maybe-distclean-target-libgnatprj
+ distclean-target: maybe-distclean-target-libgomp
+ 
+ .PHONY: do-maintainer-clean
+@@ -2387,6 +2415,7 @@
+ maintainer-clean-host: maybe-maintainer-clean-utils
+ maintainer-clean-host: maybe-maintainer-clean-libada
+ maintainer-clean-host: maybe-maintainer-clean-libgnatvsn
++maintainer-clean-host: maybe-maintainer-clean-libgnatprj
+ maintainer-clean-host: maybe-maintainer-clean-gnattools
+ 
+ .PHONY: maintainer-clean-target
+@@ -2412,6 +2441,7 @@
+ maintainer-clean-target: maybe-maintainer-clean-target-rda
+ maintainer-clean-target: maybe-maintainer-clean-target-libada
+ maintainer-clean-target: maybe-maintainer-clean-target-libgnatvsn
++maintainer-clean-target: maybe-maintainer-clean-target-libgnatprj
+ maintainer-clean-target: maybe-maintainer-clean-target-libgomp
+ 
+ 
+@@ -2554,6 +2584,7 @@
+     maybe-check-utils \
+     maybe-check-libada \
+     maybe-check-libgnatvsn \
++    maybe-check-libgnatprj \
+     maybe-check-gnattools
+ 
+ .PHONY: check-target
+@@ -2579,6 +2610,7 @@
+     maybe-check-target-rda \
+     maybe-check-target-libada \
+     maybe-check-target-libgnatvsn \
++    maybe-check-target-libgnatprj \
+     maybe-check-target-libgomp
+ 
+ do-check:
+@@ -2693,6 +2725,7 @@
+     maybe-install-utils \
+     maybe-install-libada \
+     maybe-install-libgnatvsn \
++    maybe-install-libgnatprj \
+     maybe-install-gnattools
+ 
+ .PHONY: install-host
+@@ -2772,6 +2805,7 @@
+     maybe-install-utils \
+     maybe-install-libada \
+     maybe-install-libgnatvsn \
++    maybe-install-libgnatprj \
+     maybe-install-gnattools
+ 
+ .PHONY: install-target
+@@ -2797,6 +2831,7 @@
+     maybe-install-target-rda \
+     maybe-install-target-libada \
+     maybe-install-target-libgnatvsn \
++    maybe-install-target-libgnatprj \
+     maybe-install-target-libgomp
+ 
+ uninstall:
+@@ -43318,6 +43353,327 @@
+ 
+ 
+ 
++.PHONY: configure-libgnatprj maybe-configure-libgnatprj
++maybe-configure-libgnatprj:
++@if gcc-bootstrap
++configure-libgnatprj: stage_current
++@endif gcc-bootstrap
++@if libgnatprj
++maybe-configure-libgnatprj: configure-libgnatprj
++configure-libgnatprj: 
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	test ! -f $(HOST_SUBDIR)/libgnatprj/Makefile || exit 0; \
++	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libgnatprj ; \
++	$(HOST_EXPORTS) \
++	echo Configuring in $(HOST_SUBDIR)/libgnatprj; \
++	cd "$(HOST_SUBDIR)/libgnatprj" || exit 1; \
++	case $(srcdir) in \
++	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
++	  *) topdir=`echo $(HOST_SUBDIR)/libgnatprj/ | \
++		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
++	esac; \
++	srcdiroption="--srcdir=$${topdir}/libgnatprj"; \
++	libsrcdir="$$s/libgnatprj"; \
++	$(SHELL) $${libsrcdir}/configure \
++	  $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
++	  --target=${target_alias} $${srcdiroption}  \
++	  || exit 1
++@endif libgnatprj
++
++
++
++
++
++.PHONY: all-libgnatprj maybe-all-libgnatprj
++maybe-all-libgnatprj:
++@if gcc-bootstrap
++all-libgnatprj: stage_current
++@endif gcc-bootstrap
++@if libgnatprj
++TARGET-libgnatprj=all
++maybe-all-libgnatprj: all-libgnatprj
++all-libgnatprj: configure-libgnatprj
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(FLAGS_TO_PASS)  $(TARGET-libgnatprj))
++@endif libgnatprj
++
++
++
++
++.PHONY: check-libgnatprj maybe-check-libgnatprj
++maybe-check-libgnatprj:
++@if libgnatprj
++maybe-check-libgnatprj: check-libgnatprj
++
++check-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: install-libgnatprj maybe-install-libgnatprj
++maybe-install-libgnatprj:
++@if libgnatprj
++maybe-install-libgnatprj: install-libgnatprj
++
++install-libgnatprj: installdirs
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(FLAGS_TO_PASS)  install)
++
++@endif libgnatprj
++
++# Other targets (info, dvi, pdf, etc.)
++
++.PHONY: maybe-info-libgnatprj info-libgnatprj
++maybe-info-libgnatprj:
++@if libgnatprj
++maybe-info-libgnatprj: info-libgnatprj
++
++# libgnatprj doesn't support info.
++info-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-dvi-libgnatprj dvi-libgnatprj
++maybe-dvi-libgnatprj:
++@if libgnatprj
++maybe-dvi-libgnatprj: dvi-libgnatprj
++
++# libgnatprj doesn't support dvi.
++dvi-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-pdf-libgnatprj pdf-libgnatprj
++maybe-pdf-libgnatprj:
++@if libgnatprj
++maybe-pdf-libgnatprj: pdf-libgnatprj
++
++pdf-libgnatprj: \
++    configure-libgnatprj 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libgnatprj/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing pdf in libgnatprj" ; \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          pdf) \
++	  || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-html-libgnatprj html-libgnatprj
++maybe-html-libgnatprj:
++@if libgnatprj
++maybe-html-libgnatprj: html-libgnatprj
++
++# libgnatprj doesn't support html.
++html-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-TAGS-libgnatprj TAGS-libgnatprj
++maybe-TAGS-libgnatprj:
++@if libgnatprj
++maybe-TAGS-libgnatprj: TAGS-libgnatprj
++
++# libgnatprj doesn't support TAGS.
++TAGS-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-install-info-libgnatprj install-info-libgnatprj
++maybe-install-info-libgnatprj:
++@if libgnatprj
++maybe-install-info-libgnatprj: install-info-libgnatprj
++
++# libgnatprj doesn't support install-info.
++install-info-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-install-pdf-libgnatprj install-pdf-libgnatprj
++maybe-install-pdf-libgnatprj:
++@if libgnatprj
++maybe-install-pdf-libgnatprj: install-pdf-libgnatprj
++
++install-pdf-libgnatprj: \
++    configure-libgnatprj \
++    pdf-libgnatprj 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libgnatprj/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing install-pdf in libgnatprj" ; \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          install-pdf) \
++	  || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-install-html-libgnatprj install-html-libgnatprj
++maybe-install-html-libgnatprj:
++@if libgnatprj
++maybe-install-html-libgnatprj: install-html-libgnatprj
++
++install-html-libgnatprj: \
++    configure-libgnatprj \
++    html-libgnatprj 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libgnatprj/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing install-html in libgnatprj" ; \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          install-html) \
++	  || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-installcheck-libgnatprj installcheck-libgnatprj
++maybe-installcheck-libgnatprj:
++@if libgnatprj
++maybe-installcheck-libgnatprj: installcheck-libgnatprj
++
++# libgnatprj doesn't support installcheck.
++installcheck-libgnatprj:
++
++@endif libgnatprj
++
++.PHONY: maybe-mostlyclean-libgnatprj mostlyclean-libgnatprj
++maybe-mostlyclean-libgnatprj:
++@if libgnatprj
++maybe-mostlyclean-libgnatprj: mostlyclean-libgnatprj
++
++mostlyclean-libgnatprj: 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libgnatprj/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing mostlyclean in libgnatprj" ; \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          mostlyclean) \
++	  || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-clean-libgnatprj clean-libgnatprj
++maybe-clean-libgnatprj:
++@if libgnatprj
++maybe-clean-libgnatprj: clean-libgnatprj
++
++clean-libgnatprj: 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libgnatprj/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing clean in libgnatprj" ; \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          clean) \
++	  || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-distclean-libgnatprj distclean-libgnatprj
++maybe-distclean-libgnatprj:
++@if libgnatprj
++maybe-distclean-libgnatprj: distclean-libgnatprj
++
++distclean-libgnatprj: 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libgnatprj/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing distclean in libgnatprj" ; \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          distclean) \
++	  || exit 1
++
++@endif libgnatprj
++
++.PHONY: maybe-maintainer-clean-libgnatprj maintainer-clean-libgnatprj
++maybe-maintainer-clean-libgnatprj:
++@if libgnatprj
++maybe-maintainer-clean-libgnatprj: maintainer-clean-libgnatprj
++
++maintainer-clean-libgnatprj: 
++	@: $(MAKE); $(unstage)
++	@[ -f ./libgnatprj/Makefile ] || exit 0; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(HOST_EXPORTS) \
++	for flag in $(EXTRA_HOST_FLAGS) ; do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	echo "Doing maintainer-clean in libgnatprj" ; \
++	(cd $(HOST_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	          maintainer-clean) \
++	  || exit 1
++
++@endif libgnatprj
++
++
++
+ .PHONY: configure-gnattools maybe-configure-gnattools
+ maybe-configure-gnattools:
+ @if gcc-bootstrap
+@@ -53281,6 +53637,345 @@
+ 
+ 
+ 
++.PHONY: configure-target-libgnatprj maybe-configure-target-libgnatprj
++maybe-configure-target-libgnatprj:
++@if gcc-bootstrap
++configure-target-libgnatprj: stage_current
++@endif gcc-bootstrap
++@if target-libgnatprj
++maybe-configure-target-libgnatprj: configure-target-libgnatprj
++configure-target-libgnatprj: 
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	echo "Checking multilib configuration for libgnatprj..."; \
++	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgnatprj ; \
++	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libgnatprj/multilib.tmp 2> /dev/null ; \
++	if test -r $(TARGET_SUBDIR)/libgnatprj/multilib.out; then \
++	  if cmp -s $(TARGET_SUBDIR)/libgnatprj/multilib.tmp $(TARGET_SUBDIR)/libgnatprj/multilib.out; then \
++	    rm -f $(TARGET_SUBDIR)/libgnatprj/multilib.tmp; \
++	  else \
++	    rm -f $(TARGET_SUBDIR)/libgnatprj/Makefile; \
++	    mv $(TARGET_SUBDIR)/libgnatprj/multilib.tmp $(TARGET_SUBDIR)/libgnatprj/multilib.out; \
++	  fi; \
++	else \
++	  mv $(TARGET_SUBDIR)/libgnatprj/multilib.tmp $(TARGET_SUBDIR)/libgnatprj/multilib.out; \
++	fi; \
++	test ! -f $(TARGET_SUBDIR)/libgnatprj/Makefile || exit 0; \
++	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgnatprj ; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo Configuring in $(TARGET_SUBDIR)/libgnatprj; \
++	cd "$(TARGET_SUBDIR)/libgnatprj" || exit 1; \
++	case $(srcdir) in \
++	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
++	  *) topdir=`echo $(TARGET_SUBDIR)/libgnatprj/ | \
++		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
++	esac; \
++	srcdiroption="--srcdir=$${topdir}/libgnatprj"; \
++	libsrcdir="$$s/libgnatprj"; \
++	rm -f no-such-file || : ; \
++	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
++	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
++	  --target=${target_alias} $${srcdiroption}  \
++	  || exit 1
++@endif target-libgnatprj
++
++
++
++
++
++.PHONY: all-target-libgnatprj maybe-all-target-libgnatprj
++maybe-all-target-libgnatprj:
++@if gcc-bootstrap
++all-target-libgnatprj: stage_current
++@endif gcc-bootstrap
++@if target-libgnatprj
++TARGET-target-libgnatprj=all
++maybe-all-target-libgnatprj: all-target-libgnatprj
++all-target-libgnatprj: configure-target-libgnatprj
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  $(TARGET-target-libgnatprj))
++@endif target-libgnatprj
++
++
++
++
++
++.PHONY: check-target-libgnatprj maybe-check-target-libgnatprj
++maybe-check-target-libgnatprj:
++@if target-libgnatprj
++maybe-check-target-libgnatprj: check-target-libgnatprj
++
++# Dummy target for uncheckable module.
++check-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: install-target-libgnatprj maybe-install-target-libgnatprj
++maybe-install-target-libgnatprj:
++@if target-libgnatprj
++maybe-install-target-libgnatprj: install-target-libgnatprj
++
++install-target-libgnatprj: installdirs
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
++
++@endif target-libgnatprj
++
++# Other targets (info, dvi, pdf, etc.)
++
++.PHONY: maybe-info-target-libgnatprj info-target-libgnatprj
++maybe-info-target-libgnatprj:
++@if target-libgnatprj
++maybe-info-target-libgnatprj: info-target-libgnatprj
++
++# libgnatprj doesn't support info.
++info-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-dvi-target-libgnatprj dvi-target-libgnatprj
++maybe-dvi-target-libgnatprj:
++@if target-libgnatprj
++maybe-dvi-target-libgnatprj: dvi-target-libgnatprj
++
++# libgnatprj doesn't support dvi.
++dvi-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-pdf-target-libgnatprj pdf-target-libgnatprj
++maybe-pdf-target-libgnatprj:
++@if target-libgnatprj
++maybe-pdf-target-libgnatprj: pdf-target-libgnatprj
++
++pdf-target-libgnatprj: \
++    configure-target-libgnatprj 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing pdf in $(TARGET_SUBDIR)/libgnatprj" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           pdf) \
++	  || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-html-target-libgnatprj html-target-libgnatprj
++maybe-html-target-libgnatprj:
++@if target-libgnatprj
++maybe-html-target-libgnatprj: html-target-libgnatprj
++
++# libgnatprj doesn't support html.
++html-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-TAGS-target-libgnatprj TAGS-target-libgnatprj
++maybe-TAGS-target-libgnatprj:
++@if target-libgnatprj
++maybe-TAGS-target-libgnatprj: TAGS-target-libgnatprj
++
++# libgnatprj doesn't support TAGS.
++TAGS-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-install-info-target-libgnatprj install-info-target-libgnatprj
++maybe-install-info-target-libgnatprj:
++@if target-libgnatprj
++maybe-install-info-target-libgnatprj: install-info-target-libgnatprj
++
++# libgnatprj doesn't support install-info.
++install-info-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-install-pdf-target-libgnatprj install-pdf-target-libgnatprj
++maybe-install-pdf-target-libgnatprj:
++@if target-libgnatprj
++maybe-install-pdf-target-libgnatprj: install-pdf-target-libgnatprj
++
++install-pdf-target-libgnatprj: \
++    configure-target-libgnatprj \
++    pdf-target-libgnatprj 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing install-pdf in $(TARGET_SUBDIR)/libgnatprj" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           install-pdf) \
++	  || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-install-html-target-libgnatprj install-html-target-libgnatprj
++maybe-install-html-target-libgnatprj:
++@if target-libgnatprj
++maybe-install-html-target-libgnatprj: install-html-target-libgnatprj
++
++install-html-target-libgnatprj: \
++    configure-target-libgnatprj \
++    html-target-libgnatprj 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing install-html in $(TARGET_SUBDIR)/libgnatprj" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           install-html) \
++	  || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-installcheck-target-libgnatprj installcheck-target-libgnatprj
++maybe-installcheck-target-libgnatprj:
++@if target-libgnatprj
++maybe-installcheck-target-libgnatprj: installcheck-target-libgnatprj
++
++# libgnatprj doesn't support installcheck.
++installcheck-target-libgnatprj:
++
++@endif target-libgnatprj
++
++.PHONY: maybe-mostlyclean-target-libgnatprj mostlyclean-target-libgnatprj
++maybe-mostlyclean-target-libgnatprj:
++@if target-libgnatprj
++maybe-mostlyclean-target-libgnatprj: mostlyclean-target-libgnatprj
++
++mostlyclean-target-libgnatprj: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libgnatprj" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           mostlyclean) \
++	  || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-clean-target-libgnatprj clean-target-libgnatprj
++maybe-clean-target-libgnatprj:
++@if target-libgnatprj
++maybe-clean-target-libgnatprj: clean-target-libgnatprj
++
++clean-target-libgnatprj: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing clean in $(TARGET_SUBDIR)/libgnatprj" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           clean) \
++	  || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-distclean-target-libgnatprj distclean-target-libgnatprj
++maybe-distclean-target-libgnatprj:
++@if target-libgnatprj
++maybe-distclean-target-libgnatprj: distclean-target-libgnatprj
++
++distclean-target-libgnatprj: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing distclean in $(TARGET_SUBDIR)/libgnatprj" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           distclean) \
++	  || exit 1
++
++@endif target-libgnatprj
++
++.PHONY: maybe-maintainer-clean-target-libgnatprj maintainer-clean-target-libgnatprj
++maybe-maintainer-clean-target-libgnatprj:
++@if target-libgnatprj
++maybe-maintainer-clean-target-libgnatprj: maintainer-clean-target-libgnatprj
++
++maintainer-clean-target-libgnatprj: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libgnatprj/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libgnatprj" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libgnatprj && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           maintainer-clean) \
++	  || exit 1
++
++@endif target-libgnatprj
++
++
++
++
++
+ .PHONY: configure-target-libgomp maybe-configure-target-libgomp
+ maybe-configure-target-libgomp:
+ @if gcc-bootstrap
+@@ -56116,6 +56811,7 @@
+ configure-target-rda: stage_last
+ configure-target-libada: stage_last
+ configure-target-libgnatvsn: stage_last
++configure-target-libgnatprj: stage_last
+ configure-target-libgomp: stage_last
+ @endif gcc-bootstrap
+ 
+@@ -56141,6 +56837,7 @@
+ configure-target-rda: maybe-all-gcc
+ configure-target-libada: maybe-all-gcc
+ configure-target-libgnatvsn: maybe-all-gcc
++configure-target-libgnatprj: maybe-all-gcc
+ configure-target-libgomp: maybe-all-gcc
+ @endif gcc-no-bootstrap
+ 
+@@ -56426,7 +57123,10 @@
+ all-fixincludes: maybe-all-libiberty
+ all-gnattools: maybe-all-libada
+ all-gnattools: maybe-all-libgnatvsn
++all-gnattools: maybe-all-libgnatprj
+ all-libgnatvsn: maybe-all-libada
++all-libgnatprj: maybe-all-libada
++all-libgnatprj: maybe-all-libgnatvsn
+ configure-mpfr: maybe-all-gmp
+ 
+ configure-stage1-mpfr: maybe-all-stage1-gmp
+@@ -56988,6 +57688,7 @@
+ configure-target-rda: maybe-all-target-libgcc
+ configure-target-libada: maybe-all-target-libgcc
+ configure-target-libgnatvsn: maybe-all-target-libgcc
++configure-target-libgnatprj: maybe-all-target-libgcc
+ configure-target-libgomp: maybe-all-target-libgcc
+ @endif gcc-no-bootstrap
+ 
+@@ -57032,6 +57733,8 @@
+ 
+ configure-target-libgnatvsn: maybe-all-target-newlib maybe-all-target-libgloss
+ 
++configure-target-libgnatprj: maybe-all-target-newlib maybe-all-target-libgloss
++
+ configure-target-libgomp: maybe-all-target-newlib maybe-all-target-libgloss
+ 
+ 
+Index: b/src/configure.ac
+===================================================================
+--- a/src/configure.ac
++++ b/src/configure.ac
+@@ -158,7 +158,7 @@
+ 
+ # these libraries are used by various programs built for the host environment
+ #
+-host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr ppl cloog libiconv libada libgnatvsn"
++host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr ppl cloog libiconv libada libgnatvsn libgnatprj"
+ 
+ # these tools are built for the host environment
+ # Note, the powerpc-eabi build depends on sim occurring before gdb in order to
+@@ -190,7 +190,8 @@
+ 		${libgcj} \
+ 		target-libobjc \
+ 		target-libada \
+-		target-libgnatvsn"
++		target-libgnatvsn \
++		target-libgnatprj"
+ 
+ # these tools are built using the target libraries, and are intended to
+ # run only in the target environment
+@@ -272,7 +273,7 @@
+ 
+ # Similarly, some are only suitable for cross toolchains.
+ # Remove these if host=target.
+-cross_only="target-libgloss target-newlib target-opcodes target-libada target-libgnatvsn"
++cross_only="target-libgloss target-newlib target-opcodes target-libada target-libgnatvsn target-libgnatprj"
+ 
+ case $is_cross_compiler in
+   no) skipdirs="${skipdirs} ${cross_only}" ;;
+@@ -381,7 +382,7 @@
+ ENABLE_LIBADA=$enableval,
+ ENABLE_LIBADA=yes)
+ if test "${ENABLE_LIBADA}" != "yes" ; then
+-  noconfigdirs="$noconfigdirs libgnatvsn gnattools"
++  noconfigdirs="$noconfigdirs libgnatvsn libgnatprj gnattools"
+ fi
+ 
+ AC_ARG_ENABLE(libssp,
+Index: b/src/libgnatprj/configure.ac
+===================================================================
+--- /dev/null
++++ b/src/libgnatprj/configure.ac
+@@ -0,0 +1,148 @@
++# Configure script for libada.
++#   Copyright 2003, 2004 Free Software Foundation, Inc.
++#
++# This file is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++# General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++AC_INIT
++AC_PREREQ([2.59])
++
++AC_CONFIG_SRCDIR([Makefile.in])
++
++# Start of actual configure tests
++
++AC_PROG_INSTALL
++
++AC_CANONICAL_BUILD
++AC_CANONICAL_HOST
++AC_CANONICAL_TARGET
++
++sinclude(../config/acx.m4)
++ACX_NONCANONICAL_TARGET
++
++# Need to pass this down for now :-P
++AC_PROG_LN_S
++
++# Determine x_ada_cflags
++case $host in
++  hppa*) x_ada_cflags=-mdisable-indexing ;;
++  *) x_ada_cflags= ;;
++esac
++AC_SUBST([x_ada_cflags])
++
++# Determine what to build for 'gnattools'
++if test $build = $target ; then
++  # Note that build=target is almost certainly the wrong test; FIXME
++  default_gnattools_target="gnattools-native"
++else
++  default_gnattools_target="gnattools-cross"
++fi
++AC_SUBST([default_gnattools_target])
++
++# Target-specific stuff (defaults)
++TOOLS_TARGET_PAIRS=
++AC_SUBST(TOOLS_TARGET_PAIRS)
++
++# Per-target case statement
++# ---/----------------------
++case "${target}" in
++  alpha*-dec-vx*) # Unlike all other Vxworks
++    ;;
++  m68k*-wrs-vx* \
++  | powerpc*-wrs-vxworks \
++  | sparc*-wrs-vx* \
++  | *86-wrs-vxworks \
++  | xscale*-wrs-vx* \
++  | xscale*-wrs-coff \
++  | mips*-wrs-vx*)
++    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
++    ;;
++  sparc-sun-solaris*)
++    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
++    ;;
++  *86-*-solaris2*)
++    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
++    ;;
++  *86-*-linux* \
++  | arm*-*-linux* \
++  | powerpc*-*-linux* \
++  | *ia64-*-linux* \
++  | alpha*-*-linux* \
++  | sparc*-*-linux* \
++  | hppa*-*-linux* \
++  | mips*-*-linux* \
++  | *x86_64-*-linux* \
++  | *86-*-kfreebsd*-gnu \
++  | *x86_64-*-kfreebsd*-gnu )
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++    indepsw.adb<indepsw-gnu.adb"
++    ;;
++  s390*-*-linux*)
++    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
++    ;;
++  *86-*-freebsd*)
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++    indepsw.adb<indepsw-gnu.adb"
++    ;;
++  mips-sgi-irix*)
++    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-irix.adb"
++    ;;
++  hppa*-hp-hpux10*) # Unlike hpux11
++    ;;
++  hppa*-hp-hpux11*)
++    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
++    ;;
++  *-ibm-aix*)
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
++    indepsw.adb<indepsw-aix.adb"
++    ;;
++  alpha*-dec-osf*)
++    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-tru64.adb"
++    ;;
++  alpha*-dec-vms* | alpha*-dec-openvms* | alpha*-dec-vms* \
++  | alpha*-hp-vms* | alpha*-hp-openvms* | alpha*-hp-vms*)
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-specific-vms-alpha.adb \
++    symbols.adb<symbols-vms.adb \
++    symbols-processing.adb<symbols-processing-vms-alpha.adb"
++    ;;
++  ia64*-dec-vms* | ia64*-dec-openvms* | ia64*-dec-vms* \
++  | ia64*-hp-vms* | ia64*-hp-openvms* | ia64*-hp-vms*)
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-vms-ia64.adb \
++    symbols.adb<symbols-vms.adb \
++    symbols-processing.adb<symbols-processing-vms-ia64.adb"
++    ;;
++  *-*-cygwin32* | *-*-mingw32* | *-*-pe)
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-specific-mingw.adb \
++    indepsw.adb<indepsw-mingw.adb"
++    ;;
++  powerpc-*-darwin*)
++    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
++    ;;
++  *-*-lynxos)
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
++    indepsw.adb<indepsw-gnu.adb"
++    ;;
++esac
++
++# Output: create a Makefile.
++AC_CONFIG_FILES([Makefile])
++
++AC_OUTPUT
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/sh4-multilib.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/sh4-multilib.diff
@@ -0,0 +1,23 @@
+# DP: Fix multilib (m4/m4-nofpu) for sh4-linux
+
+---
+ gcc/config.gcc |    5 +++--
+ 1 files changed, 3 insertions(+), 2 deletions(-)
+
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -2119,11 +2119,12 @@ sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \
+ 	if test x${sh_multilibs} = x ; then
+ 		case ${target} in
+ 		sh64-superh-linux* | \
+-		sh[1234]*)	sh_multilibs=${sh_cpu_target} ;;
+ 		sh64* | sh5*)	sh_multilibs=m5-32media,m5-32media-nofpu,m5-compact,m5-compact-nofpu,m5-64media,m5-64media-nofpu ;;
+-		sh-superh-*)	sh_multilibs=m4,m4-single,m4-single-only,m4-nofpu ;;
++		sh-superh-* | \
++		sh4-*-linux*)	sh_multilibs=m4,m4-nofpu ;;
+ 		sh*-*-linux*)	sh_multilibs=m1,m3e,m4 ;;
+ 		sh*-*-netbsd*)	sh_multilibs=m3,m3e,m4 ;;
++		sh-superh-*)	sh_multilibs=m4,m4-single,m4-single-only,m4-nofpu ;;
+ 		*) sh_multilibs=m1,m2,m2e,m4,m4-single,m4-single-only,m2a,m2a-single ;;
+ 		esac
+ 		if test x$with_fp = xno; then
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/svn-updates.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/svn-updates.diff
@@ -0,0 +1,14 @@
+# DP: updates from the 4.4 branch upto 2012xxxx (r185107).
+
+last_updated()
+{
+	cat > ${dir}LAST_UPDATED <<EOF
+Thu Mar  8 20:16:31 CET 2012
+Thu Mar  8 19:16:31 UTC 2012 (revision 185107)
+EOF
+}
+
+svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_4_7_release svn://gcc.gnu.org/svn/gcc/branches/gcc-4_4-branch \
+	| sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
+	| awk '/^Index:.*\.(class|texi)/ {skip=1; next} /^Index:/ { skip=0 } skip==0'
+
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr47908.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr47908.diff
@@ -0,0 +1,51 @@
+# DP: Fix PR target/47908 with Attachment #24863 from Mikael Pettersson
+# DP: A fix is already included with gcc-4.6 MAIN.
+
+Index: gcc-4.4-4.4.6/src/gcc/config/m68k/m68k-protos.h
+===================================================================
+--- gcc-4.4-4.4.6.orig/src/gcc/config/m68k/m68k-protos.h	2011-09-01 19:57:54.000000000 +0000
++++ gcc-4.4-4.4.6/src/gcc/config/m68k/m68k-protos.h	2011-09-01 20:22:07.000000000 +0000
+@@ -96,6 +96,7 @@
+ extern bool m68k_use_return_insn (void);
+ extern void m68k_expand_epilogue (bool);
+ extern void override_options (void);
++extern void optimization_options (int, int);
+ extern const char *m68k_cpp_cpu_ident (const char *);
+ extern const char *m68k_cpp_cpu_family (const char *);
+ extern void init_68881_table (void);
+Index: gcc-4.4-4.4.6/src/gcc/config/m68k/m68k.c
+===================================================================
+--- gcc-4.4-4.4.6.orig/src/gcc/config/m68k/m68k.c	2011-09-01 19:57:54.000000000 +0000
++++ gcc-4.4-4.4.6/src/gcc/config/m68k/m68k.c	2011-09-01 20:22:07.000000000 +0000
+@@ -729,6 +729,17 @@
+     }
+ }
+ 
++void
++optimization_options (int level ATTRIBUTE_UNUSED, int size ATTRIBUTE_UNUSED)
++{
++  if (m68k_sched_cpu == CPU_UNKNOWN)
++    {
++      flag_schedule_insns = 0;
++      flag_schedule_insns_after_reload = 0;
++      flag_modulo_sched = 0;
++    }
++}
++
+ /* Generate a macro of the form __mPREFIX_cpu_NAME, where PREFIX is the
+    given argument and NAME is the argument passed to -mcpu.  Return NULL
+    if -mcpu was not passed.  */
+Index: gcc-4.4-4.4.6/src/gcc/config/m68k/m68k.h
+===================================================================
+--- gcc-4.4-4.4.6.orig/src/gcc/config/m68k/m68k.h	2011-09-01 19:57:54.000000000 +0000
++++ gcc-4.4-4.4.6/src/gcc/config/m68k/m68k.h	2011-09-01 20:22:07.000000000 +0000
+@@ -274,6 +274,9 @@
+ 
+ #define OVERRIDE_OPTIONS   override_options()
+ 
++#define OPTIMIZATION_OPTIONS(LEVEL,SIZE) \
++  optimization_options ((LEVEL), (SIZE))
++
+ /* These are meant to be redefined in the host dependent files */
+ #define SUBTARGET_OVERRIDE_OPTIONS
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr50090.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr50090.diff
@@ -0,0 +1,21 @@
+# DP: [ARM] PR target/50090: aliases in libgcc.a with default visibility.
+
+libgcc/
+	PR target/50090
+	* config/arm/bpabi-lib.h (RENAME_LIBRARY): Use a C-level alias
+	instead of an assembly one.
+
+--- a/src/gcc/config/arm/bpabi.h
++++ b/src/gcc/config/arm/bpabi.h
+@@ -28,9 +28,8 @@ #define RENAME_LIBRARY_SET ".set"
+ 
+ /* Make __aeabi_AEABI_NAME an alias for __GCC_NAME.  */
+ #define RENAME_LIBRARY(GCC_NAME, AEABI_NAME)		\
+-  __asm__ (".globl\t__aeabi_" #AEABI_NAME "\n"		\
+-	   RENAME_LIBRARY_SET "\t__aeabi_" #AEABI_NAME 	\
+-	     ", __" #GCC_NAME "\n");
++  typeof (__##GCC_NAME) __aeabi_##AEABI_NAME \
++    __attribute__((alias ("__" #GCC_NAME)));
+ 
+ /* Give some libgcc functions an additional __aeabi name.  */
+ #ifdef L_muldi3
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-hash-style-both.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-hash-style-both.diff
@@ -0,0 +1,164 @@
+# DP: Link using --hash-style=both (alpha, amd64, armel, ia64, i386, powerpc, ppc64, s390, sparc)
+
+2006-07-11  Jakub Jelinek  <jakub@redhat.com>
+
+	* config/i386/linux.h (LINK_SPEC): Add --hash-style=both.
+	* config/i386/linux64.h (LINK_SPEC): Likewise.
+	* config/rs6000/sysv4.h (LINK_OS_LINUX_SPEC): Likewise.
+	* config/rs6000/linux64.h (LINK_OS_LINUX_SPEC32,
+	LINK_OS_LINUX_SPEC64): Likewise.
+	* config/s390/linux.h (LINK_SPEC): Likewise.
+	* config/ia64/linux.h (LINK_SPEC): Likewise.
+	* config/sparc/linux.h (LINK_SPEC): Likewise.
+	* config/sparc/linux64.h (LINK_SPEC, LINK_ARCH32_SPEC,
+	LINK_ARCH64_SPEC): Likewise.
+	* config/alpha/linux-elf.h (LINK_SPEC): Likewise.
+
+2009-12-21  Matthias Klose  <doko@ubuntu.com>
+
+	* config/arm/linux-elf.h (LINK_SPEC): Add --hash-style=both.
+	
+---
+ gcc/config/alpha/linux-elf.h |    2 +-
+ gcc/config/i386/linux.h      |    2 +-
+ gcc/config/i386/linux64.h    |    2 +-
+ gcc/config/ia64/linux.h      |    2 +-
+ gcc/config/rs6000/linux64.h  |    4 ++--
+ gcc/config/rs6000/sysv4.h    |    2 +-
+ gcc/config/s390/linux.h      |    2 +-
+ gcc/config/sparc/linux.h     |    2 +-
+ gcc/config/sparc/linux64.h   |    6 +++---
+ 9 files changed, 12 insertions(+), 12 deletions(-)
+
+--- a/src/gcc/config/alpha/linux-elf.h
++++ b/src/gcc/config/alpha/linux-elf.h
+@@ -39,7 +39,7 @@ along with GCC; see the file COPYING3.  If not see
+ 
+ #define ELF_DYNAMIC_LINKER	LINUX_DYNAMIC_LINKER
+ 
+-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax}		\
++#define LINK_SPEC "-m elf64alpha --hash-style=both %{G*} %{relax:-relax}	\
+   %{O*:-O3} %{!O*:-O1}						\
+   %{shared:-shared}						\
+   %{!shared:							\
+--- a/src/gcc/config/i386/linux.h
++++ b/src/gcc/config/i386/linux.h
+@@ -113,7 +113,7 @@ along with GCC; see the file COPYING3.  If not see
+   { "dynamic_linker", LINUX_DYNAMIC_LINKER }
+ 
+ #undef	LINK_SPEC
+-#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
++#define LINK_SPEC "-m %(link_emulation) --hash-style=both %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+       %{!static: \
+--- a/src/gcc/config/i386/linux64.h
++++ b/src/gcc/config/i386/linux64.h
+@@ -70,7 +70,7 @@ along with GCC; see the file COPYING3.  If not see
+ #endif
+ 
+ #undef	LINK_SPEC
+-#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} \
++#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} --hash-style=both \
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
+--- a/src/gcc/config/ia64/linux.h
++++ b/src/gcc/config/ia64/linux.h
+@@ -40,7 +40,7 @@ do {						\
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
+ 
+ #undef LINK_SPEC
+-#define LINK_SPEC "\
++#define LINK_SPEC "--hash-style=both \
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
+--- a/src/gcc/config/rs6000/linux64.h
++++ b/src/gcc/config/rs6000/linux64.h
+@@ -352,11 +352,11 @@ extern int dot_symbols;
+   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
+ 
+ 
+-#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER32 "}}}"
+ 
+-#define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=both %{!shared: %{!static: \
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}}"
+ 
+--- a/src/gcc/config/rs6000/sysv4.h
++++ b/src/gcc/config/rs6000/sysv4.h
+@@ -906,7 +906,7 @@ SVR4_ASM_SPEC \
+ #define LINUX_DYNAMIC_LINKER \
+   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
+ 
+-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}"
+ 
+--- a/src/gcc/config/s390/linux.h
++++ b/src/gcc/config/s390/linux.h
+@@ -77,7 +77,7 @@ along with GCC; see the file COPYING3.  If not see
+ 
+ #undef  LINK_SPEC
+ #define LINK_SPEC \
+-  "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
++  "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=both \
+    %{shared:-shared} \
+    %{!shared: \
+       %{static:-static} \
+--- a/src/gcc/config/sparc/linux.h
++++ b/src/gcc/config/sparc/linux.h
+@@ -86,7 +86,7 @@ along with GCC; see the file COPYING3.  If not see
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+ 
+ #undef  LINK_SPEC
+-#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
++#define LINK_SPEC "-m elf32_sparc --hash-style=both -Y P,/usr/lib %{shared:-shared} \
+   %{!mno-relax:%{!r:-relax}} \
+   %{!shared: \
+     %{!ibcs: \
+--- a/src/gcc/config/sparc/linux64.h
++++ b/src/gcc/config/sparc/linux64.h
+@@ -121,7 +121,7 @@ along with GCC; see the file COPYING3.  If not see
+   { "link_arch_default", LINK_ARCH_DEFAULT_SPEC },	  \
+   { "link_arch",	 LINK_ARCH_SPEC },
+ 
+-#define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,%R/usr/lib %{shared:-shared} \
++#define LINK_ARCH32_SPEC "-m elf32_sparc --hash-style=both -Y P,%R/usr/lib %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+       %{!static: \
+@@ -130,7 +130,7 @@ along with GCC; see the file COPYING3.  If not see
+         %{static:-static}}} \
+ "
+ 
+-#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \
++#define LINK_ARCH64_SPEC "-m elf64_sparc --hash-style=both -Y P,%R/usr/lib64 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+       %{!static: \
+@@ -211,7 +211,7 @@ along with GCC; see the file COPYING3.  If not see
+ #else /* !SPARC_BI_ARCH */
+ 
+ #undef LINK_SPEC
+-#define LINK_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \
++#define LINK_SPEC "-m elf64_sparc --hash-style=both -Y P,%R/usr/lib64 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+       %{!static: \
+--- a/src/gcc/config/arm/linux-elf.h~	2009-02-20 16:20:38.000000000 +0100
++++ b/src/gcc/config/arm/linux-elf.h	2009-12-21 13:19:36.000000000 +0100
+@@ -72,6 +72,7 @@
+    %{rdynamic:-export-dynamic} \
+    %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "} \
+    -X \
++   --hash-style=both \
+    %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+    SUBTARGET_EXTRA_LINK_SPEC
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libjava-jnipath.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libjava-jnipath.diff
@@ -0,0 +1,121 @@
+# DP: - Add /usr/lib/jni and /usr/lib/<multiarch>/jni to java.library.path.
+# DP: - When running the i386 binaries on amd64, look in
+# DP: - /usr/lib32/gcj-x.y and /usr/lib32/jni instead.
+
+--- a/src/libjava/configure.ac
++++ b/src/libjava/configure.ac
+@@ -1488,6 +1488,9 @@
+ 
+ AC_C_BIGENDIAN
+ 
++MULTIARCH_DIR=$(dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null || true)
++AC_SUBST(MULTIARCH_DIR)
++
+ ZLIBS=
+ SYS_ZLIBS=
+ ZINCS=
+--- a/src/libjava/Makefile.am
++++ a/src/libjava/Makefile.am
+@@ -324,6 +324,7 @@
+ 	$(WARNINGS) \
+ 	-D_GNU_SOURCE \
+ 	-DPREFIX="\"$(prefix)\"" \
++	-DMULTIARCH_DIR="\"$(MULTIARCH_DIR)\"" \
+ 	-DTOOLEXECLIBDIR="\"$(toolexeclibdir)\"" \
+         -DJAVA_HOME="\"$(JAVA_HOME_DIR)\"" \
+         -DBOOT_CLASS_PATH="\"$(BOOT_CLASS_PATH_DIR)\"" \
+--- a/src/libjava/Makefile.in
++++ b/src/libjava/Makefile.in
+@@ -632,6 +632,7 @@
+ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+ MAKE = @MAKE@
+ MAKEINFO = @MAKEINFO@
++MULTIARCH_DIR = @MULTIARCH_DIR@
+ NATIVE_FALSE = @NATIVE_FALSE@
+ NATIVE_TRUE = @NATIVE_TRUE@
+ NEEDS_DATA_START_FALSE = @NEEDS_DATA_START_FALSE@
+@@ -1094,6 +1095,7 @@
+ 	$(WARNINGS) \
+ 	-D_GNU_SOURCE \
+ 	-DPREFIX="\"$(prefix)\"" \
++	-DMULTIARCH_DIR="\"$(MULTIARCH_DIR)\"" \
+ 	-DTOOLEXECLIBDIR="\"$(toolexeclibdir)\"" \
+         -DJAVA_HOME="\"$(JAVA_HOME_DIR)\"" \
+         -DBOOT_CLASS_PATH="\"$(BOOT_CLASS_PATH_DIR)\"" \
+--- a/src/libjava/gnu/classpath/natSystemProperties.cc
++++ b/src/libjava/gnu/classpath/natSystemProperties.cc
+@@ -141,6 +141,44 @@
+   return retval;
+ }
+ 
++static char*
++AppendJniLibdir (char *path, struct utsname *u)
++{
++  char* retval;
++  const char* jnilibdir = "/usr/lib/jni";
++#ifdef MULTIARCH_DIR
++  const char* jnilibdir2 = "/usr/lib/" MULTIARCH_DIR "/jni";
++  jsize len2 = strlen (jnilibdir2) + 2;
++#else
++  jsize len2 = 0;
++#endif
++
++#if defined(__linux__) && defined (__i386__)
++  if (! strcmp ("x86_64", u->machine))
++    jnilibdir = "/usr/lib32/jni";
++#endif
++
++  if (path)
++    {
++      jsize total = strlen (path)
++	+ (sizeof (PATH_SEPARATOR) - 1) + strlen (jnilibdir) +len2 + 1;
++      retval = (char*) _Jv_Malloc (total);
++      strcpy (retval, path);
++      strcat (retval, PATH_SEPARATOR);
++      strcat (retval, jnilibdir);
++    }
++  else
++    {
++      retval = (char*) _Jv_Malloc (strlen (jnilibdir) + len2 + 1);
++      strcpy (retval, jnilibdir);
++    }
++#ifdef MULTIARCH_DIR
++  strcat (retval, PATH_SEPARATOR);
++  strcat (retval, jnilibdir2);
++#endif
++  return retval;
++}
++
+ void
+ gnu::classpath::SystemProperties::insertSystemProperties (::java::util::Properties *newprops)
+ {
+@@ -373,8 +411,13 @@
+       // Prepend GCJ_VERSIONED_LIBDIR to the module load path so that
+       // libgcj will find its own JNI libraries, like libgtkpeer.so.
+       char* val = PrependVersionedLibdir (path);
+-      _Jv_SetDLLSearchPath (val);
++
++      // Append jnilibdir
++      char* val2 = AppendJniLibdir (val, &u);
++
++      _Jv_SetDLLSearchPath (val2);
+       _Jv_Free (val);
++      _Jv_Free (val2);
+     }
+   else
+     {
+@@ -382,9 +425,12 @@
+ #ifdef USE_LTDL
+       char *libpath = getenv (LTDL_SHLIBPATH_VAR);
+       char* val = _Jv_PrependVersionedLibdir (libpath);
+-      SET ("java.library.path", val);
+-      _Jv_SetDLLSearchPath (val);
++      // Append jnilibdir
++      char* val2 = AppendJniLibdir (val, &u);
++      SET ("java.library.path", val2);
++      _Jv_SetDLLSearchPath (val2);
+       _Jv_Free (val);
++      _Jv_Free (val2);
+ #else
+       SET ("java.library.path", "");
+ #endif
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-arm-implicit-it.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-arm-implicit-it.diff
@@ -0,0 +1,19 @@
+# DP: Pass -mimplicit-it=thumb if -mthumb to as on ARM.
+
+gcc/
+
+2010-07-09  Andrew Stubbs  <ams@codesourcery.com>
+
+	* config/arm/elf.h (ASM_SPEC): Pass -mimplicit-it=thumb if -mthumb.
+
+--- a/src/gcc/config/arm/elf.h	2008-07-14 20:01:42 +0000
++++ b/src/gcc/config/arm/elf.h	2010-07-09 12:18:59 +0000
+@@ -63,6 +63,7 @@
+ %{mthumb-interwork:-mthumb-interwork} \
+ %{msoft-float:-mfloat-abi=soft} %{mhard-float:-mfloat-abi=hard} \
+ %{mfloat-abi=*} %{mfpu=*} \
++%{mthumb:%{!-mimplicit-it=*:-mimplicit-it=thumb}} \
+ %(subtarget_extra_asm_spec)"
+ #endif
+ 
+
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-print-file-name.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-print-file-name.diff
@@ -0,0 +1,78 @@
+# DP: For -print-file-name, resolve . and .., and remove the subminor
+# DP: version number.
+
+--- a/src/gcc/gcc.c
++++ b/src/gcc/gcc.c
+@@ -6753,7 +6753,71 @@
+ 
+   if (print_file_name)
+     {
+-      printf ("%s\n", find_file (print_file_name));
++      const char *file_name = find_file (print_file_name);
++
++      /* Resolve . and .. in file_name, and remove the subminor version number */
++      if (file_name && *file_name == '/')
++	{
++	  char *buf = xstrdup (file_name);
++	  char *normalized = XNEWVEC (char, strlen (file_name) + 1);
++	  char *p = (char *) buf + 1;
++	  char *q = p, *end = buf + strlen (buf);
++	  char **paths;
++	  size_t n_paths = 0, i, j;
++
++	  while (p < end && *p == '/')
++	    p++;
++	  strncpy (normalized, buf, p - buf);
++	  normalized[p - buf] = '\0';
++
++	  for (q = p; q < end; q++)
++	    if (*q == '/')
++	      n_paths++;
++	  paths = XNEWVEC (char *, n_paths + 2);
++	  n_paths = 0;
++	  paths[n_paths++] = p;
++	  for (q = p; q < end; q++)
++	    if (*q == '/')
++	      {
++		*q++ = '\0';
++		while (q < end && *q == '/')
++		  q++;
++		if (q < end)
++		  paths[n_paths++] = q;
++	      }
++	  paths[n_paths] = NULL;
++
++	  for (i = 0, j = 0; i < n_paths; i++)
++	    {
++	      if (strcmp (paths[i], ".") == 0)
++		continue;
++	      else if (strcmp (paths[i], "..") == 0)
++		{
++		  if (j == 0)
++		      break;
++		  j--;
++		  continue;
++		}
++	      else if (strcmp (paths[i], DEFAULT_TARGET_VERSION) == 0)
++		paths[i][3] = '\0';
++	      paths[j++] = paths[i];
++	    }
++	  paths[j] = NULL;
++
++	  for (i = 0; paths[i]; i++)
++	    {
++	      strcat (normalized, paths[i]);
++	      if (paths[i + 1])
++		strcat (normalized, "/");
++	    }
++
++	  if (j > 0)
++	    {
++	      printf ("%s\n", normalized);
++	      return (0);
++	    }
++	}
++      printf ("%s\n", file_name);
+       return (0);
+     }
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr40521-revert-workaround.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr40521-revert-workaround.diff
@@ -0,0 +1,27 @@
+# DP: Revert the dwarf2cfi_asm workaround, obsoleted by PR debug/40521.
+
+Revert:
+
+2009-10-05  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+
+        * config/arm/arm.c (arm_override_options): Really initialize 
+        flag_dwarf2_cfi_asm to 0.
+
+Index: gcc/config/arm/arm.c
+===================================================================
+--- a/src/gcc/config/arm/arm.c	(revision 152450)
++++ b/src/gcc/config/arm/arm.c	(working copy)
+@@ -1651,13 +1651,6 @@
+         max_insns_skipped = 3;
+     }
+ 
+-  /* Ideally we would want to use CFI directives to generate
+-     debug info.  However this also creates the .eh_frame
+-     section, so disable them until GAS can handle
+-     this properly.  See PR40521. */
+-  if (TARGET_AAPCS_BASED)
+-    flag_dwarf2_cfi_asm = 0;
+-
+   /* Register global variables with the garbage collector.  */
+   arm_add_gc_roots ();
+ }
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-4.4.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-4.4.diff
@@ -0,0 +1,782 @@
+# DP: Patches the GCC Directory for D.
+
+--- a/src/gcc/cgraph.c	2008-11-16 22:31:58.000000000 +0000
++++ b/src/gcc/cgraph.c	2010-08-26 17:13:05.507131097 +0100
+@@ -451,6 +451,7 @@
+ cgraph_node (tree decl)
+ {
+   struct cgraph_node key, *node, **slot;
++  tree context;
+ 
+   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
+ 
+@@ -472,12 +473,16 @@
+   node = cgraph_create_node ();
+   node->decl = decl;
+   *slot = node;
+-  if (DECL_CONTEXT (decl) && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
++  if (!DECL_NO_STATIC_CHAIN (decl))
+     {
+-      node->origin = cgraph_node (DECL_CONTEXT (decl));
+-      node->next_nested = node->origin->nested;
+-      node->origin->nested = node;
+-      node->master_clone = node;
++      context = decl_function_context (decl);
++      if (context)
++	{
++	  node->origin = cgraph_node (context);
++	  node->next_nested = node->origin->nested;
++	  node->origin->nested = node;
++	  node->master_clone = node;
++	}
+     }
+   if (assembler_name_hash)
+     {
+--- a/src/gcc/cgraphunit.c	2010-03-31 14:23:17.000000000 +0100
++++ b/src/gcc/cgraphunit.c	2010-08-26 17:13:05.511130348 +0100
+@@ -1032,6 +1032,10 @@
+ static void
+ cgraph_expand_function (struct cgraph_node *node)
+ {
++  int save_flag_omit_frame_pointer = flag_omit_frame_pointer;
++  static int inited = 0;
++  static int orig_omit_frame_pointer;
++
+   tree decl = node->decl;
+ 
+   /* We ought to not compile any inline clones.  */
+@@ -1041,11 +1045,21 @@
+ 
+   gcc_assert (node->lowered);
+ 
++  if (!inited)
++    {
++      inited = 1;
++      orig_omit_frame_pointer = flag_omit_frame_pointer;
++    }
++  flag_omit_frame_pointer = orig_omit_frame_pointer ||
++      DECL_STRUCT_FUNCTION (decl)->naked;
++
+   /* Generate RTL for the body of DECL.  */
+   if (lang_hooks.callgraph.emit_associated_thunks)
+     lang_hooks.callgraph.emit_associated_thunks (decl);
+   tree_rest_of_compilation (decl);
+ 
++  flag_omit_frame_pointer = save_flag_omit_frame_pointer;
++
+   /* Make sure that BE didn't give up on compiling.  */
+   gcc_assert (TREE_ASM_WRITTEN (decl));
+   current_function_decl = NULL;
+--- a/src/gcc/config/i386/i386.c	2010-04-08 16:09:17.000000000 +0100
++++ b/src/gcc/config/i386/i386.c	2010-08-26 17:13:05.590134523 +0100
+@@ -7876,6 +7876,11 @@
+     frame->red_zone_size = 0;
+   frame->to_allocate -= frame->red_zone_size;
+   frame->stack_pointer_offset -= frame->red_zone_size;
++
++  if (cfun->naked)
++    /* As above, skip return address */
++    frame->stack_pointer_offset = UNITS_PER_WORD;
++
+ #if 0
+   fprintf (stderr, "\n");
+   fprintf (stderr, "size: %ld\n", (long)size);
+@@ -26792,7 +26797,7 @@
+ 	  output_set_got (tmp, NULL_RTX);
+ 
+ 	  xops[1] = tmp;
+-	  output_asm_insn ("mov{l}\t{%0@GOT(%1), %1|%1, %0@GOT[%1]}", xops);
++	  output_asm_insn ("mov{l}\t{%a0@GOT(%1), %1|%1, %a0@GOT[%1]}", xops);
+ 	  output_asm_insn ("jmp\t{*}%1", xops);
+ 	}
+     }
+--- a/src/gcc/config/rs6000/rs6000.c	2010-03-27 18:56:08.000000000 +0000
++++ b/src/gcc/config/rs6000/rs6000.c	2010-08-26 17:13:05.622134818 +0100
+@@ -17630,7 +17630,8 @@
+ 	 C is 0.  Fortran is 1.  Pascal is 2.  Ada is 3.  C++ is 9.
+ 	 Java is 13.  Objective-C is 14.  Objective-C++ isn't assigned
+ 	 a number, so for now use 9.  */
+-      if (! strcmp (language_string, "GNU C"))
++      if (! strcmp (language_string, "GNU C")
++	  || ! strcmp (language_string, "GNU D"))
+ 	i = 0;
+       else if (! strcmp (language_string, "GNU F77")
+ 	       || ! strcmp (language_string, "GNU Fortran"))
+--- a/src/gcc/dwarf2out.c	2010-02-10 15:09:06.000000000 +0000
++++ b/src/gcc/dwarf2out.c	2010-08-26 17:13:05.654133370 +0100
+@@ -6398,7 +6398,8 @@
+ 
+   return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_ObjC
+ 	  || lang == DW_LANG_C99
+-	  || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus);
++	  || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus
++	  || lang == DW_LANG_D);
+ }
+ 
+ /* Return TRUE if the language is C++.  */
+@@ -14506,6 +14507,8 @@
+     language = DW_LANG_ObjC;
+   else if (strcmp (language_string, "GNU Objective-C++") == 0)
+     language = DW_LANG_ObjC_plus_plus;
++  else if (strcmp (language_string, "GNU D") == 0)
++    language = DW_LANG_D;
+   else
+     language = DW_LANG_C89;
+ 
+@@ -15688,7 +15691,7 @@
+ 
+       /* For local statics lookup proper context die.  */
+       if (TREE_STATIC (decl) && decl_function_context (decl))
+-	context_die = lookup_decl_die (DECL_CONTEXT (decl));
++	context_die = lookup_decl_die (decl_function_context (decl));
+ 
+       /* If we are in terse mode, don't generate any DIEs to represent any
+ 	 variable declarations or definitions.  */
+--- a/src/gcc/except.c	2010-03-08 11:46:28.000000000 +0000
++++ b/src/gcc/except.c	2010-08-26 17:13:05.662141930 +0100
+@@ -200,7 +200,7 @@
+ 
+ typedef struct eh_region *eh_region;
+ 
+-struct call_site_record GTY(())
++struct call_site_record_d GTY(())
+ {
+   rtx landing_pad;
+   int action;
+@@ -3198,7 +3198,7 @@
+ {
+   call_site_record record;
+   
+-  record = GGC_NEW (struct call_site_record);
++  record = GGC_NEW (struct call_site_record_d);
+   record->landing_pad = landing_pad;
+   record->action = action;
+ 
+@@ -3399,7 +3399,7 @@
+ 
+   for (i = 0; i < n; ++i)
+     {
+-      struct call_site_record *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
++      struct call_site_record_d *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
+       size += size_of_uleb128 (cs->action);
+     }
+ 
+@@ -3415,7 +3415,7 @@
+ 
+   for (i = 0; i < n; ++i)
+     {
+-      struct call_site_record *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
++      struct call_site_record_d *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
+       size += size_of_uleb128 (INTVAL (cs->landing_pad));
+       size += size_of_uleb128 (cs->action);
+     }
+@@ -3432,7 +3432,7 @@
+ 
+   for (i = 0; i < n; ++i)
+     {
+-      struct call_site_record *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
++      struct call_site_record_d *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
+       char reg_start_lab[32];
+       char reg_end_lab[32];
+       char landing_pad_lab[32];
+@@ -3486,7 +3486,7 @@
+ 
+   for (i = 0; i < n; ++i)
+     {
+-      struct call_site_record *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
++      struct call_site_record_d *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
+ 
+       dw2_asm_output_data_uleb128 (INTVAL (cs->landing_pad),
+ 				   "region %d landing pad", i);
+--- a/src/gcc/expr.c	2010-03-08 11:46:28.000000000 +0000
++++ b/src/gcc/expr.c	2010-08-26 17:13:05.678130275 +0100
+@@ -9321,6 +9321,11 @@
+ 	 represent.  */
+       return const0_rtx;
+ 
++    case STATIC_CHAIN_EXPR:
++    case STATIC_CHAIN_DECL:
++      /* Lowered by tree-nested.c */
++      gcc_unreachable ();
++
+     case EXC_PTR_EXPR:
+       return get_exception_pointer ();
+ 
+--- a/src/gcc/function.c	2009-11-13 19:57:51.000000000 +0000
++++ b/src/gcc/function.c	2010-08-26 17:13:05.690132989 +0100
+@@ -3184,7 +3184,8 @@
+       FUNCTION_ARG_ADVANCE (all.args_so_far, data.promoted_mode,
+ 			    data.passed_type, data.named_arg);
+ 
+-      assign_parm_adjust_stack_rtl (&data);
++      if (!cfun->naked)
++	assign_parm_adjust_stack_rtl (&data);
+ 
+       if (assign_parm_setup_block_p (&data))
+ 	assign_parm_setup_block (&all, parm, &data);
+@@ -3199,7 +3200,8 @@
+ 
+   /* Output all parameter conversion instructions (possibly including calls)
+      now that all parameters have been copied out of hard registers.  */
+-  emit_insn (all.first_conversion_insn);
++  if (!cfun->naked)
++    emit_insn (all.first_conversion_insn);
+ 
+   /* Estimate reload stack alignment from scalar return mode.  */
+   if (SUPPORTS_STACK_ALIGNMENT)
+@@ -3351,6 +3353,9 @@
+   tree fnargs, parm;
+   gimple_seq stmts = NULL;
+ 
++  if (cfun->naked)
++    return NULL;
++
+   assign_parms_initialize_all (&all);
+   fnargs = assign_parms_augmented_arg_list (&all);
+ 
+@@ -4456,11 +4461,15 @@
+       tree parm = cfun->static_chain_decl;
+       rtx local = gen_reg_rtx (Pmode);
+ 
+-      set_decl_incoming_rtl (parm, static_chain_incoming_rtx, false);
+       SET_DECL_RTL (parm, local);
+       mark_reg_pointer (local, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))));
+ 
+-      emit_move_insn (local, static_chain_incoming_rtx);
++      if (!cfun->custom_static_chain)
++	{
++	  set_decl_incoming_rtl (parm, static_chain_incoming_rtx, false);
++	  emit_move_insn (local, static_chain_incoming_rtx);
++	}
++      /* else, the static chain will be set in the main body */
+     }
+ 
+   /* If the function receives a non-local goto, then store the
+@@ -4981,6 +4990,9 @@
+ #endif
+   edge_iterator ei;
+ 
++  if (cfun->naked)
++    return;
++
+   rtl_profile_for_bb (ENTRY_BLOCK_PTR);
+ #ifdef HAVE_prologue
+   if (HAVE_prologue)
+--- a/src/gcc/function.h	2009-09-23 15:58:58.000000000 +0100
++++ b/src/gcc/function.h	2010-08-26 17:13:05.694133708 +0100
+@@ -137,7 +137,7 @@
+   rtx x_forced_labels;
+ };
+ 
+-typedef struct call_site_record *call_site_record;
++typedef struct call_site_record_d *call_site_record;
+ DEF_VEC_P(call_site_record);
+ DEF_VEC_ALLOC_P(call_site_record, gc);
+ 
+@@ -175,12 +175,12 @@
+ struct gimple_df;
+ struct temp_slot;
+ typedef struct temp_slot *temp_slot_p;
+-struct call_site_record;
++struct call_site_record_d;
+ 
+ DEF_VEC_P(temp_slot_p);
+ DEF_VEC_ALLOC_P(temp_slot_p,gc);
+-struct ipa_opt_pass;
+-typedef struct ipa_opt_pass *ipa_opt_pass;
++struct ipa_opt_pass_d;
++typedef struct ipa_opt_pass_d *ipa_opt_pass;
+ 
+ DEF_VEC_P(ipa_opt_pass);
+ DEF_VEC_ALLOC_P(ipa_opt_pass,heap);
+@@ -600,6 +600,14 @@
+      adjusts one of its arguments and forwards to another
+      function.  */
+   unsigned int is_thunk : 1;
++
++  /* Nonzero if static chain is initialized by something other than
++     static_chain_incoming_rtx. */
++  unsigned int custom_static_chain : 1;
++
++  /* Nonzero if no code should be generated for prologues, copying
++     parameters, etc. */
++  unsigned int naked : 1;
+ };
+ 
+ /* If va_list_[gf]pr_size is set to this, it means we don't know how
+--- a/src/gcc/gcc.c	2010-01-09 00:05:06.000000000 +0000
++++ b/src/gcc/gcc.c	2010-08-26 17:13:39.034133274 +0100
+@@ -126,6 +126,9 @@
+ /* Flag set to nonzero if an @file argument has been supplied to gcc.  */
+ static bool at_file_supplied;
+ 
++/* Flag set by drivers needing Pthreads. */
++int need_pthreads;
++
+ /* Flag saying to pass the greatest exit code returned by a sub-process
+    to the calling program.  */
+ static int pass_exit_codes;
+@@ -373,6 +376,9 @@
+ static const char *version_compare_spec_function (int, const char **);
+ static const char *include_spec_function (int, const char **);
+ static const char *print_asm_header_spec_function (int, const char **);
++
++extern const char *d_all_sources_spec_function (int, const char **);
++extern const char *d_output_prefix_spec_function (int, const char **);
+ 
+ /* The Specs Language
+ 
+@@ -480,6 +486,7 @@
+ 	assembler has done its job.
+  %D	Dump out a -L option for each directory in startfile_prefixes.
+ 	If multilib_dir is set, extra entries are generated with it affixed.
++ %N     Output the currently selected multilib directory name
+  %l     process LINK_SPEC as a spec.
+  %L     process LIB_SPEC as a spec.
+  %G     process LIBGCC_SPEC as a spec.
+@@ -925,6 +932,8 @@
+ #endif
+ #endif
+ 
++#define GCC_SPEC_FORMAT_4 1
++
+ /* Record the mapping from file suffixes for compilation specs.  */
+ 
+ struct compiler
+@@ -1647,6 +1656,10 @@
+   { "version-compare",		version_compare_spec_function },
+   { "include",			include_spec_function },
+   { "print-asm-header",		print_asm_header_spec_function },
++#ifdef D_USE_EXTRA_SPEC_FUNCTIONS
++  { "d-all-sources",		d_all_sources_spec_function },
++  { "d-output-prefix",		d_output_prefix_spec_function },
++#endif
+ #ifdef EXTRA_SPEC_FUNCTIONS
+   EXTRA_SPEC_FUNCTIONS
+ #endif
+@@ -4022,6 +4035,9 @@
+ 	}
+     }
+ 
++  if (need_pthreads)
++      n_switches++;
++
+   if (save_temps_flag && use_pipes)
+     {
+       /* -save-temps overrides -pipe, so that temp files are produced */
+@@ -4332,6 +4348,18 @@
+       infiles[0].name   = "help-dummy";
+     }
+ 
++  if (need_pthreads)
++    {
++      switches[n_switches].part1 = "pthread";
++      switches[n_switches].args = 0;
++      switches[n_switches].live_cond = 0;
++      /* Do not print an error if there is not expansion for -pthread. */
++      switches[n_switches].validated = 1;
++      switches[n_switches].ordering = 0;
++
++      n_switches++;
++    }
++
+   switches[n_switches].part1 = 0;
+   infiles[n_infiles].name = 0;
+ }
+@@ -5337,6 +5365,17 @@
+ 	      return value;
+ 	    break;
+ 
++	  case 'N':
++	    if (multilib_dir)
++	      {
++		arg_going = 1;
++		obstack_grow (&obstack, "-fmultilib-dir=",
++			      strlen ("-fmultilib-dir="));
++		obstack_grow (&obstack, multilib_dir,
++			      strlen (multilib_dir));
++	      }
++	    break;
++
+ 	    /* Here we define characters other than letters and digits.  */
+ 
+ 	  case '{':
+--- a/src/gcc/gimple.c	2008-12-07 23:27:14.000000000 +0000
++++ b/src/gcc/gimple.c	2010-08-26 17:13:05.714129477 +0100
+@@ -2535,6 +2535,9 @@
+       || (SYM) == POLYNOMIAL_CHREC					    \
+       || (SYM) == DOT_PROD_EXPR						    \
+       || (SYM) == VEC_COND_EXPR						    \
++      || (SYM) == STATIC_CHAIN_DECL					    \
++      || (SYM) == STATIC_CHAIN_EXPR /* not sure if this is right...*/	    \
++      || (SYM) == VEC_COND_EXPR						    \
+       || (SYM) == REALIGN_LOAD_EXPR) ? GIMPLE_SINGLE_RHS		    \
+    : GIMPLE_INVALID_RHS),
+ #define END_OF_BASE_TREE_CODES (unsigned char) GIMPLE_INVALID_RHS,
+@@ -2615,7 +2618,10 @@
+ 	  || TREE_CODE (t) == WITH_SIZE_EXPR
+ 	  /* These are complex lvalues, but don't have addresses, so they
+ 	     go here.  */
+-	  || TREE_CODE (t) == BIT_FIELD_REF);
++	  || TREE_CODE (t) == BIT_FIELD_REF
++	  /* This is an lvalue because it will be replaced with the real
++	     static chain decl. */
++	  || TREE_CODE (t) == STATIC_CHAIN_DECL);
+ }
+ 
+ /*  Return true if T is a GIMPLE condition.  */
+@@ -2851,6 +2857,7 @@
+   return (TREE_CODE (t) == VAR_DECL
+ 	  || TREE_CODE (t) == PARM_DECL
+ 	  || TREE_CODE (t) == RESULT_DECL
++	  || TREE_CODE (t) == STATIC_CHAIN_DECL
+ 	  || TREE_CODE (t) == SSA_NAME);
+ }
+ 
+--- a/src/gcc/gimple.h	2009-05-18 11:13:43.000000000 +0100
++++ b/src/gcc/gimple.h	2010-08-26 17:13:05.722133148 +0100
+@@ -65,7 +65,7 @@
+     const_gimple __gs = (GS);						\
+     if (gimple_code (__gs) != (CODE))					\
+       gimple_check_failed (__gs, __FILE__, __LINE__, __FUNCTION__,	\
+-	  		   (CODE), 0);					\
++	  		   (CODE), ERROR_MARK);				\
+   } while (0)
+ #else  /* not ENABLE_GIMPLE_CHECKING  */
+ #define GIMPLE_CHECK(GS, CODE)			(void)0
+@@ -2216,7 +2216,7 @@
+ gimple_cond_code (const_gimple gs)
+ {
+   GIMPLE_CHECK (gs, GIMPLE_COND);
+-  return gs->gsbase.subcode;
++  return (enum tree_code) gs->gsbase.subcode;
+ }
+ 
+ 
+--- a/src/gcc/gimplify.c	2010-04-08 12:47:13.000000000 +0100
++++ b/src/gcc/gimplify.c	2010-08-26 17:13:05.734134534 +0100
+@@ -6447,6 +6447,12 @@
+ 	    }
+ 	  break;
+ 
++	case STATIC_CHAIN_EXPR:
++	  /* The argument is used as information only.  No need to gimplify */
++	case STATIC_CHAIN_DECL:
++	  ret = GS_ALL_DONE;
++	  break;
++
+ 	case TREE_LIST:
+ 	  gcc_unreachable ();
+ 
+--- a/src/gcc/ipa-cp.c	2009-12-27 22:39:58.000000000 +0000
++++ b/src/gcc/ipa-cp.c	2010-08-26 17:13:05.738152434 +0100
+@@ -1393,7 +1393,7 @@
+   return flag_ipa_cp;
+ }
+ 
+-struct ipa_opt_pass pass_ipa_cp = 
++struct ipa_opt_pass_d pass_ipa_cp = 
+ {
+  {
+   IPA_PASS,
+--- a/src/gcc/ipa-inline.c	2010-02-08 14:10:15.000000000 +0000
++++ b/src/gcc/ipa-inline.c	2010-08-26 17:13:05.742147425 +0100
+@@ -1753,7 +1753,7 @@
+   return todo | execute_fixup_cfg ();
+ }
+ 
+-struct ipa_opt_pass pass_ipa_inline = 
++struct ipa_opt_pass_d pass_ipa_inline = 
+ {
+  {
+   IPA_PASS,
+--- a/src/gcc/ipa-pure-const.c	2008-09-18 18:28:40.000000000 +0100
++++ b/src/gcc/ipa-pure-const.c	2010-08-26 17:13:05.746146816 +0100
+@@ -910,7 +910,7 @@
+ 	  && !(errorcount || sorrycount));
+ }
+ 
+-struct ipa_opt_pass pass_ipa_pure_const =
++struct ipa_opt_pass_d pass_ipa_pure_const =
+ {
+  {
+   IPA_PASS,
+--- a/src/gcc/ipa-reference.c	2008-09-18 18:28:40.000000000 +0100
++++ b/src/gcc/ipa-reference.c	2010-08-26 17:13:05.746146816 +0100
+@@ -1257,7 +1257,7 @@
+ 	  && !(errorcount || sorrycount));
+ }
+ 
+-struct ipa_opt_pass pass_ipa_reference =
++struct ipa_opt_pass_d pass_ipa_reference =
+ {
+  {
+   IPA_PASS,
+--- a/src/gcc/passes.c	2009-02-20 15:20:38.000000000 +0000
++++ b/src/gcc/passes.c	2010-08-26 17:13:05.750140201 +0100
+@@ -1146,14 +1146,14 @@
+ static void
+ add_ipa_transform_pass (void *data)
+ {
+-  struct ipa_opt_pass *ipa_pass = (struct ipa_opt_pass *) data;
++  struct ipa_opt_pass_d *ipa_pass = (struct ipa_opt_pass_d *) data;
+   VEC_safe_push (ipa_opt_pass, heap, cfun->ipa_transforms_to_apply, ipa_pass);
+ }
+ 
+ /* Execute summary generation for all of the passes in IPA_PASS.  */
+ 
+ static void
+-execute_ipa_summary_passes (struct ipa_opt_pass *ipa_pass)
++execute_ipa_summary_passes (struct ipa_opt_pass_d *ipa_pass)
+ {
+   while (ipa_pass)
+     {
+@@ -1167,7 +1167,7 @@
+ 	  ipa_pass->generate_summary ();
+ 	  pass_fini_dump_file (pass);
+ 	}
+-      ipa_pass = (struct ipa_opt_pass *)ipa_pass->pass.next;
++      ipa_pass = (struct ipa_opt_pass_d *)ipa_pass->pass.next;
+     }
+ }
+ 
+@@ -1175,7 +1175,7 @@
+ 
+ static void
+ execute_one_ipa_transform_pass (struct cgraph_node *node,
+-				struct ipa_opt_pass *ipa_pass)
++				struct ipa_opt_pass_d *ipa_pass)
+ {
+   struct opt_pass *pass = &ipa_pass->pass;
+   unsigned int todo_after = 0;
+@@ -1347,7 +1347,7 @@
+ 	    {
+ 	      if (!quiet_flag && !cfun)
+ 		fprintf (stderr, " <summary generate>");
+-	      execute_ipa_summary_passes ((struct ipa_opt_pass *) pass);
++	      execute_ipa_summary_passes ((struct ipa_opt_pass_d *) pass);
+ 	    }
+ 	  summaries_generated = true;
+ 	}
+--- a/src/gcc/system.h	2008-07-28 15:33:56.000000000 +0100
++++ b/src/gcc/system.h	2010-08-26 17:13:05.754132398 +0100
+@@ -786,6 +786,9 @@
+    change after the fact).  Beyond these uses, most other cases of
+    using this macro should be viewed with extreme caution.  */
+ 
++#ifdef __cplusplus
++#define CONST_CAST2(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X))
++#else
+ #if defined(__GNUC__) && GCC_VERSION > 4000
+ /* GCC 4.0.x has a bug where it may ICE on this expression,
+    so does GCC 3.4.x (PR17436).  */
+@@ -793,6 +796,7 @@
+ #else
+ #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((TOTYPE)(FROMTYPE)(X))
+ #endif
++#endif
+ #define CONST_CAST(TYPE,X) CONST_CAST2(TYPE, const TYPE, (X))
+ #define CONST_CAST_TREE(X) CONST_CAST(union tree_node *, (X))
+ #define CONST_CAST_RTX(X) CONST_CAST(struct rtx_def *, (X))
+--- a/src/gcc/tree.def	2009-02-20 15:20:38.000000000 +0000
++++ b/src/gcc/tree.def	2010-08-26 17:13:05.758136609 +0100
+@@ -554,6 +554,13 @@
+    arguments to the call.  */
+ DEFTREECODE (CALL_EXPR, "call_expr", tcc_vl_exp, 3)
+ 
++/* Operand 0 is the FUNC_DECL of the outer function for
++   which the static chain is to be computed. */
++DEFTREECODE (STATIC_CHAIN_EXPR, "static_chain_expr", tcc_expression, 1)
++    
++/* Represents a function's static chain.  It can be used as an lvalue. */
++DEFTREECODE (STATIC_CHAIN_DECL, "static_chain_decl", tcc_expression, 0)
++
+ /* Specify a value to compute along with its corresponding cleanup.
+    Operand 0 is the cleanup expression.
+    The cleanup is executed by the first enclosing CLEANUP_POINT_EXPR,
+--- a/src/gcc/tree-dump.c	2008-08-06 16:57:09.000000000 +0100
++++ b/src/gcc/tree-dump.c	2010-08-26 17:13:05.770134642 +0100
+@@ -639,6 +639,10 @@
+       }
+       break;
+ 
++    case STATIC_CHAIN_EXPR:
++      dump_child ("func", TREE_OPERAND (t, 0));
++      break;
++
+     case CONSTRUCTOR:
+       {
+ 	unsigned HOST_WIDE_INT cnt;
+--- a/src/gcc/tree-nested.c	2010-04-20 09:37:12.000000000 +0100
++++ b/src/gcc/tree-nested.c	2010-08-26 17:13:05.774146186 +0100
+@@ -714,6 +714,8 @@
+ 
+   if (info->context == target_context)
+     {
++      /* might be doing something wrong to need the following line.. */
++      get_frame_type (info);
+       x = build_addr (info->frame_decl, target_context);
+     }
+   else
+@@ -1761,6 +1763,10 @@
+       if (DECL_NO_STATIC_CHAIN (decl))
+ 	break;
+ 
++      /* Don't use a trampoline for a static reference. */
++      if (TREE_STATIC (t))
++	break;
++
+       /* If we don't want a trampoline, then don't build one.  */
+       if (TREE_NO_TRAMPOLINE (t))
+ 	break;
+@@ -1908,6 +1914,25 @@
+       walk_body (convert_gimple_call, NULL, info, gimple_omp_body (stmt));
+       break;
+ 
++    case GIMPLE_ASSIGN:
++      /* Deal with static_chain_decl */
++      decl = gimple_op(stmt, 0);
++      if (TREE_CODE (decl) == STATIC_CHAIN_DECL)
++	{
++	  tree chain = get_chain_decl (info);
++	  gimple_assign_set_lhs (stmt, chain);
++	  break;
++	}
++      /* Deal with static_chain_expr */
++      decl = gimple_op(stmt, 1);
++      if (TREE_CODE (decl) == STATIC_CHAIN_EXPR)
++	{
++	  tree chain = get_static_chain (info, TREE_OPERAND (decl, 0), &wi->gsi);
++	  gimple_assign_set_rhs1 (stmt, chain);
++	  break;
++	}
++      /* FALLTHRU */
++
+     default:
+       /* Keep looking for other operands.  */
+       *handled_ops_p = false;
+@@ -2054,8 +2079,38 @@
+       gimple bind;
+       annotate_all_with_location (stmt_list, DECL_SOURCE_LOCATION (context));
+       bind = gimple_seq_first_stmt (gimple_body (context));
+-      gimple_seq_add_seq (&stmt_list, gimple_bind_body (bind));
+-      gimple_bind_set_body (bind, stmt_list);
++
++      if (DECL_STRUCT_FUNCTION (root->context)->custom_static_chain)
++	{
++	  /* This chicanery is needed to make sure the GIMPLE initialization
++	     statements are in the right order
++
++	     CHAIN.3 = D.1614;
++	     FRAME.0.__chain = CHAIN.3;
++	     FRAME.0.m = m;
++	   */
++	  gimple_stmt_iterator gsi =
++	      gsi_start (gimple_bind_body (bind));
++	  int found = 0;
++	  while (!gsi_end_p (gsi))
++	    {
++	      gimple g = gsi_stmt (gsi);
++	      if (gimple_code (g) == GIMPLE_ASSIGN &&
++		  gimple_op (g, 0) == root->chain_decl)
++		{
++		  gsi_insert_seq_after (& gsi, stmt_list, GSI_SAME_STMT);
++		  found = 1;
++		  break;
++		}
++	      gsi_next (& gsi);
++	    }
++	  gcc_assert (found);
++	}
++      else
++	{
++	  gimple_seq_add_seq (&stmt_list, gimple_bind_body (bind));
++	  gimple_bind_set_body (bind, stmt_list);
++	}
+     }
+ 
+   /* If a chain_decl was created, then it needs to be registered with
+--- a/src/gcc/tree-pass.h	2009-02-20 15:20:38.000000000 +0000
++++ b/src/gcc/tree-pass.h	2010-08-26 17:13:05.774146186 +0100
+@@ -157,7 +157,7 @@
+ 
+ /* Description of IPA pass with generate summary, write, execute, read and
+    transform stages.  */
+-struct ipa_opt_pass
++struct ipa_opt_pass_d
+ {
+   struct opt_pass pass;
+ 
+@@ -390,10 +390,10 @@
+ extern struct gimple_opt_pass pass_reset_cc_flags;
+ 
+ /* IPA Passes */
+-extern struct ipa_opt_pass pass_ipa_inline;
+-extern struct ipa_opt_pass pass_ipa_cp;
+-extern struct ipa_opt_pass pass_ipa_reference;
+-extern struct ipa_opt_pass pass_ipa_pure_const;
++extern struct ipa_opt_pass_d pass_ipa_inline;
++extern struct ipa_opt_pass_d pass_ipa_cp;
++extern struct ipa_opt_pass_d pass_ipa_reference;
++extern struct ipa_opt_pass_d pass_ipa_pure_const;
+ 
+ extern struct simple_ipa_opt_pass pass_ipa_matrix_reorg;
+ extern struct simple_ipa_opt_pass pass_ipa_early_inline;
+--- a/src/gcc/tree-pretty-print.c	2009-02-18 21:03:05.000000000 +0000
++++ b/src/gcc/tree-pretty-print.c	2010-08-26 17:13:05.778131469 +0100
+@@ -1216,6 +1216,16 @@
+ 	pp_string (buffer, " [tail call]");
+       break;
+ 
++    case STATIC_CHAIN_EXPR:
++      pp_string (buffer, "<<static chain of ");
++      dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
++      pp_string (buffer, ">>");
++      break;
++
++    case STATIC_CHAIN_DECL:
++      pp_string (buffer, "<<static chain decl>>");
++      break;
++
+     case WITH_CLEANUP_EXPR:
+       NIY;
+       break;
+--- a/src/gcc/tree-sra.c	2010-04-18 16:56:32.000000000 +0100
++++ b/src/gcc/tree-sra.c	2010-08-26 17:13:05.786133185 +0100
+@@ -263,6 +263,8 @@
+     case RECORD_TYPE:
+       {
+ 	bool saw_one_field = false;
++	tree last_offset = size_zero_node;
++	tree cmp;
+ 
+ 	for (t = TYPE_FIELDS (type); t ; t = TREE_CHAIN (t))
+ 	  if (TREE_CODE (t) == FIELD_DECL)
+@@ -274,6 +276,12 @@
+ 		      != TYPE_PRECISION (TREE_TYPE (t))))
+ 		goto fail;
+ 
++	      /* Reject aliased fields created by GDC for anonymous unions. */
++	      cmp = fold_binary_to_constant (LE_EXPR, boolean_type_node,
++					     DECL_FIELD_OFFSET (t), last_offset);
++	      if (cmp == NULL_TREE || tree_expr_nonzero_p (cmp))
++		goto fail;
++
+ 	      saw_one_field = true;
+ 	    }
+ 
+--- a/src/gcc/tree-ssa.c	2009-08-03 20:27:32.000000000 +0100
++++ b/src/gcc/tree-ssa.c	2010-08-26 17:13:05.790130062 +0100
+@@ -1094,8 +1094,10 @@
+       && TYPE_CANONICAL (inner_type) == TYPE_CANONICAL (outer_type))
+     return true;
+ 
+-  /* Changes in machine mode are never useless conversions.  */
+-  if (TYPE_MODE (inner_type) != TYPE_MODE (outer_type))
++  /* Changes in machine mode are never useless conversions unless we
++     deal with aggregate types in which case we defer to later checks.  */
++  if (TYPE_MODE (inner_type) != TYPE_MODE (outer_type)
++      && !AGGREGATE_TYPE_P (inner_type))
+     return false;
+ 
+   /* If both the inner and outer types are integral types, then the
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-multiarch-fsf.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-multiarch-fsf.diff
@@ -0,0 +1,78 @@
+# DP: gcc-multiarch, differing parts in FSF/Linaro
+
+Index: b/src/gcc/genmultilib
+===================================================================
+--- a/src/gcc/genmultilib
++++ b/src/gcc/genmultilib
+@@ -73,6 +73,8 @@
+ # the os directory names are used exclusively.  Use the mapping when
+ # there is no one-to-one equivalence between GCC levels and the OS.
+ 
++# The optional eight argument is the multiarch name.
++
+ # The last option should be "yes" if multilibs are enabled.  If it is not
+ # "yes", all GCC multilib dir names will be ".".
+ 
+@@ -121,7 +123,8 @@
+ extra=$5
+ exclusions=$6
+ osdirnames=$7
+-enable_multilib=$8
++multiarch=$8
++enable_multilib=$9
+ 
+ echo "static const char *const multilib_raw[] = {"
+ 
+@@ -222,6 +225,9 @@
+ # names.
+ toosdirnames=
+ defaultosdirname=
++if [ -n "${multiarch}" ]; then
++  defaultosdirname=:.:${multiarch}
++fi
+ if [ -n "${osdirnames}" ]; then
+   set x ${osdirnames}
+   shift
+@@ -229,6 +235,9 @@
+     case "$1" in
+       .=*)
+         defaultosdirname=`echo $1 | sed 's|^.=|:|'`
++	if [ -n "${multiarch}" ]; then
++	  defaultosdirname=${defaultosdirname}:${multiarch}
++	fi
+ 	shift
+ 	;;
+       *=*)
+@@ -314,13 +323,13 @@
+     dirout=`echo ${combo} | sed -e 's/=/-/g'`
+   fi
+   # Remove the leading and trailing slashes.
+-  dirout=`echo ${dirout} | sed -e 's|^/||' -e 's|/$||g'`
++  dirout=`echo ${dirout} | sed -e 's|^/||' -e 's|/*:/*|:|' -e 's|/$||g'`
+ 
+   # Use the OS directory names rather than the option names.
+   if [ -n "${toosdirnames}" ]; then
+     osdirout=`echo ${combo} | sed ${toosdirnames}`
+     # Remove the leading and trailing slashes.
+-    osdirout=`echo ${osdirout} | sed -e 's|^/||' -e 's|/$||g'`
++    osdirout=`echo ${osdirout} | sed -e 's|^/||' -e 's|/*:/*|:|' -e 's|/$||g'`
+     if [ "x${enable_multilib}" != xyes ]; then
+       dirout=".:${osdirout}"
+       disable_multilib=yes
+Index: b/src/gcc/Makefile.in
+===================================================================
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -1743,10 +1743,11 @@
+ 	    "$(MULTILIB_EXTRA_OPTS)" \
+ 	    "$(MULTILIB_EXCLUSIONS)" \
+ 	    "$(MULTILIB_OSDIRNAMES)" \
++	    "$(MULTIARCH_DIRNAME)" \
+ 	    "@enable_multilib@" \
+ 	    > tmp-mlib.h; \
+ 	else \
+-	  $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' no \
++	  $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' "$(MULTIARCH_DIRNAME)" no \
+ 	    > tmp-mlib.h; \
+ 	fi
+ 	$(SHELL) $(srcdir)/../move-if-change tmp-mlib.h multilib.h
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-libphobos-std-format.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-libphobos-std-format.diff
@@ -0,0 +1,19 @@
+# DP: Replace assert by FormatError on untested archs.
+
+--- a/src/gcc/d/phobos/std/format.d	2010-08-19 13:59:09.000000000 +0100
++++ b/src/gcc/d/phobos/std/format.d	2010-08-23 11:04:26.685788730 +0100
+@@ -963,13 +963,9 @@
+                         // Structs are pass-by-reference in V4 ABI
+                         s = tis.xtoString(va_arg!(void*)(argptr));
+                     }
+-                    else version(X86_64)
+-                    {
+-                        throw new FormatError("cannot portably format a struct on this target");
+-                    }
+                     else
+                     {
+-                        static assert(0, "unimplemented");
++                        throw new FormatError("cannot portably format a struct on this target");
+                     }
+                 }
+                 else
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-fix-build-kbsd.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-fix-build-kbsd.diff
@@ -0,0 +1,39 @@
+# DP: Fix gdc build on k*bsd*-gnu, update configure and target-ver-syms.sh
+# DP: to build k*bsd*-gnu architectures as a freebsd
+
+--- a/src/gcc/d/phobos/configure	2010-07-15 12:05:38.000000000 +0100
++++ b/src/gcc/d/phobos/configure	2010-08-23 10:29:11.885790413 +0100
+@@ -5817,7 +5817,7 @@
+ 	    d_gc_stack=GC_Use_Stack_Fixed
+ 	    d_gc_data="$d_gc_data GC_Use_Data_Dyld"
+ 	    ;;
+-  *freebsd*)D_GC_MODULES="$D_GC_MODULES internal/gc/gc_freebsd.o"
++  freebsd*|k*bsd*-gnu)D_GC_MODULES="$D_GC_MODULES internal/gc/gc_freebsd.o"
+ 	    d_gc_stack=GC_Use_Stack_FreeBSD
+ 	    d_gc_data="$d_gc_data GC_Use_Data_Fixed"
+ 	    	    ;;
+--- a/src/gcc/d/target-ver-syms.sh	2010-07-15 12:05:39.000000000 +0100
++++ b/src/gcc/d/target-ver-syms.sh	2010-08-23 10:30:11.877793587 +0100
+@@ -29,7 +29,8 @@
+ cygwin*) d_os_versym=cygwin ; d_unix=1 ;;
+ darwin*) d_os_versym=darwin ; d_unix=1 ;;
+ elf*) ;;
+-*freebsd*) d_os_versym=freebsd ; d_unix=1 ;;
++freebsd*) d_os_versym=freebsd ; d_unix=1 ;;
++k*bsd*-gnu) d_os_versym=freebsd ; d_unix=1 ;;
+ linux*) d_os_versym=linux ; d_unix=1 ;; 
+ mingw32*) d_os_versym=Win32; d_windows=1 ;;
+ pe*)    case "$target" in
+--- a/src/gcc/ggc-page.c	2008-07-28 15:33:56.000000000 +0100
++++ b/src/gcc/ggc-page.c	2010-08-23 10:35:54.197796263 +0100
+@@ -1313,6 +1313,10 @@
+   unsigned bit, word;
+   unsigned long mask;
+ 
++  /* FIXME: why could this happen on kbsd64 targets? */
++  if (!p || !ggc_allocated_p (p))
++      return 1;
++
+   /* Look up the page on which the object is alloced.  If the object
+      wasn't allocated by the collector, we'll probably die.  */
+   entry = lookup_page_table_entry (p);
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-unwind-debug-hook.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-unwind-debug-hook.diff
@@ -0,0 +1,55 @@
+# DP: Install a hook _Unwind_DebugHook, called during unwinding. Intended as
+# DP: a hook for a debugger to intercept exceptions. CFA is the CFA of the
+# DP: target frame.  HANDLER is the PC to which control will be transferred.
+
+2010-04-27  Jakub Jelinek  <jakub@redhat.com>
+
+	* unwind-dw2.c (_Unwind_DebugHook): Add used attribute.
+
+2009-05-27  Tom Tromey  <tromey@redhat.com>
+
+	* unwind-dw2.c (_Unwind_DebugHook): New function.
+	(uw_install_context): Call _Unwind_DebugHook.
+
+--- a/src/gcc/unwind-dw2.c	(revision 147933)
++++ b/src/gcc/unwind-dw2.c	(revision 147934)
+@@ -1473,18 +1473,32 @@ uw_init_context_1 (struct _Unwind_Contex
+   context->ra = __builtin_extract_return_addr (outer_ra);
+ }
+ 
++static void _Unwind_DebugHook (void *, void *)
++  __attribute__ ((__noinline__, __used__));
++
++/* This function is called during unwinding.  It is intended as a hook
++   for a debugger to intercept exceptions.  CFA is the CFA of the
++   target frame.  HANDLER is the PC to which control will be
++   transferred.  */
++static void
++_Unwind_DebugHook (void *cfa __attribute__ ((__unused__)),
++		   void *handler __attribute__ ((__unused__)))
++{
++  asm ("");
++}
+ 
+ /* Install TARGET into CURRENT so that we can return to it.  This is a
+    macro because __builtin_eh_return must be invoked in the context of
+    our caller.  */
+ 
+-#define uw_install_context(CURRENT, TARGET)				 \
+-  do									 \
+-    {									 \
+-      long offset = uw_install_context_1 ((CURRENT), (TARGET));		 \
+-      void *handler = __builtin_frob_return_addr ((TARGET)->ra);	 \
+-      __builtin_eh_return (offset, handler);				 \
+-    }									 \
++#define uw_install_context(CURRENT, TARGET)				\
++  do									\
++    {									\
++      long offset = uw_install_context_1 ((CURRENT), (TARGET));		\
++      void *handler = __builtin_frob_return_addr ((TARGET)->ra);	\
++      _Unwind_DebugHook ((TARGET)->cfa, handler);			\
++      __builtin_eh_return (offset, handler);				\
++    }									\
+   while (0)
+ 
+ static long
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/svn-updates-linaro.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/svn-updates-linaro.diff
@@ -0,0 +1,14 @@
+# DP: updates from the 4.4 branch upto 2011xxxx (r164607).
+
+last_updated()
+{
+	cat > ${dir}LAST_UPDATED <<EOF
+Fri Oct  1 13:13:02 CEST 2010
+Fri Oct  1 11:13:02 UTC 2010 (revision 164874)
+EOF
+}
+
+svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_4-branch@163945 svn://gcc.gnu.org/svn/gcc/branches/gcc-4_4-branch \
+	| sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
+	| awk '/^Index:.*\.(class|texi)/ {skip=1; next} /^Index:/ { skip=0 } skip==0'
+
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-arm-eabi.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-arm-eabi.diff
@@ -0,0 +1,378 @@
+# DP: Add preliminary Ada support for ARM/EABI to gcc-4.4 (sjlj only).
+
+gcc/ada/
+
+2010-01-11  Mikael Pettersson  <mikpe@it.uu.se>
+
+	* gcc-interface/Makefile.in: Add arm*-*-linux-gnueabi.
+	* system-linux-armeb.ads, system-linux-armel.ads: New files.
+
+Index: gcc/ada/gcc-interface/Makefile.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Makefile.in	(revision
++++ b/src/gcc/ada/gcc-interface/Makefile.in	(working
+@@ -1,5 +1,5 @@
+ # Makefile for GNU Ada Compiler (GNAT).
+-#   Copyright (C) 1994-2009 Free Software Foundation, Inc.
++#   Copyright (C) 1994-2010 Free Software Foundation, Inc.
+ 
+ #This file is part of GCC.
+ 
+@@ -1533,6 +1533,41 @@
+   LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+ 
++ifeq ($(strip $(filter-out arm% linux-gnueabi,$(arch) $(osys)-$(word 4,$(targ)))),)
++  LIBGNAT_TARGET_PAIRS = \
++  a-intnam.ads<a-intnam-linux.ads \
++  s-inmaop.adb<s-inmaop-posix.adb \
++  s-intman.adb<s-intman-posix.adb \
++  s-linux.ads<s-linux.ads \
++  s-osinte.adb<s-osinte-posix.adb \
++  s-osinte.ads<s-osinte-linux.ads \
++  s-osprim.adb<s-osprim-posix.adb \
++  s-taprop.adb<s-taprop-linux.adb \
++  s-tasinf.ads<s-tasinf-linux.ads \
++  s-tasinf.adb<s-tasinf-linux.adb \
++  s-taspri.ads<s-taspri-posix-noaltstack.ads \
++  s-tpopsp.adb<s-tpopsp-posix-foreign.adb
++
++  ifeq ($(strip $(filter-out arm%b,$(arch))),)
++    LIBGNAT_TARGET_PAIRS += \
++    system.ads<system-linux-armeb.ads
++  else
++    LIBGNAT_TARGET_PAIRS += \
++    system.ads<system-linux-armel.ads
++  endif
++
++  TOOLS_TARGET_PAIRS =  \
++    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++    indepsw.adb<indepsw-gnu.adb
++
++  EXTRA_GNATRTL_TASKING_OBJS=s-linux.o
++  EH_MECHANISM=
++  THREADSLIB = -lpthread
++  GNATLIB_SHARED = gnatlib-shared-dual
++  GMEM_LIB = gmemlib
++  LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
+ ifeq ($(strip $(filter-out sparc% linux%,$(arch) $(osys))),)
+   LIBGNAT_TARGET_PAIRS_COMMON = \
+   a-intnam.ads<a-intnam-linux.ads \
+Index: gcc/ada/system-linux-armel.ads
+===================================================================
+--- a/src/gcc/ada/system-linux-armel.ads	(revision
++++ b/src/gcc/ada/system-linux-armel.ads	(revision
+@@ -0,0 +1,153 @@
++------------------------------------------------------------------------------
++--                                                                          --
++--                        GNAT RUN-TIME COMPONENTS                          --
++--                                                                          --
++--                               S Y S T E M                                --
++--                                                                          --
++--                                 S p e c                                  --
++--                        (GNU-Linux/ARMEL Version)                         --
++--                                                                          --
++--          Copyright (C) 1992-2010, Free Software Foundation, Inc.         --
++--                                                                          --
++-- This specification is derived from the Ada Reference Manual for use with --
++-- GNAT. The copyright notice above, and the license provisions that follow --
++-- apply solely to the  contents of the part following the private keyword. --
++--                                                                          --
++-- GNAT is free software;  you can  redistribute it  and/or modify it under --
++-- terms of the  GNU General Public License as published  by the Free Soft- --
++-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
++-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
++-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
++-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
++--                                                                          --
++-- As a special exception under Section 7 of GPL version 3, you are granted --
++-- additional permissions described in the GCC Runtime Library Exception,   --
++-- version 3.1, as published by the Free Software Foundation.               --
++--                                                                          --
++-- You should have received a copy of the GNU General Public License and    --
++-- a copy of the GCC Runtime Library Exception along with this program;     --
++-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
++-- <http://www.gnu.org/licenses/>.                                          --
++--                                                                          --
++-- GNAT was originally developed  by the GNAT team at  New York University. --
++-- Extensive contributions were provided by Ada Core Technologies Inc.      --
++--                                                                          --
++------------------------------------------------------------------------------
++
++package System is
++   pragma Pure;
++   --  Note that we take advantage of the implementation permission to make
++   --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
++   --  2005, this is Pure in any case (AI-362).
++
++   type Name is (SYSTEM_NAME_GNAT);
++   System_Name : constant Name := SYSTEM_NAME_GNAT;
++
++   --  System-Dependent Named Numbers
++
++   Min_Int               : constant := Long_Long_Integer'First;
++   Max_Int               : constant := Long_Long_Integer'Last;
++
++   Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
++   Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
++
++   Max_Base_Digits       : constant := Long_Long_Float'Digits;
++   Max_Digits            : constant := Long_Long_Float'Digits;
++
++   Max_Mantissa          : constant := 63;
++   Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
++
++   Tick                  : constant := 0.000_001;
++
++   --  Storage-related Declarations
++
++   type Address is private;
++   pragma Preelaborable_Initialization (Address);
++   Null_Address : constant Address;
++
++   Storage_Unit : constant := 8;
++   Word_Size    : constant := 32;
++   Memory_Size  : constant := 2 ** 32;
++
++   --  Address comparison
++
++   function "<"  (Left, Right : Address) return Boolean;
++   function "<=" (Left, Right : Address) return Boolean;
++   function ">"  (Left, Right : Address) return Boolean;
++   function ">=" (Left, Right : Address) return Boolean;
++   function "="  (Left, Right : Address) return Boolean;
++
++   pragma Import (Intrinsic, "<");
++   pragma Import (Intrinsic, "<=");
++   pragma Import (Intrinsic, ">");
++   pragma Import (Intrinsic, ">=");
++   pragma Import (Intrinsic, "=");
++
++   --  Other System-Dependent Declarations
++
++   type Bit_Order is (High_Order_First, Low_Order_First);
++   Default_Bit_Order : constant Bit_Order := Low_Order_First;
++   pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
++
++   --  Priority-related Declarations (RM D.1)
++
++   --  0 .. 98 corresponds to the system priority range 1 .. 99.
++   --
++   --  If the scheduling policy is SCHED_FIFO or SCHED_RR the runtime makes use
++   --  of the entire range provided by the system.
++   --
++   --  If the scheduling policy is SCHED_OTHER the only valid system priority
++   --  is 1 and other values are simply ignored.
++
++   Max_Priority           : constant Positive := 97;
++   Max_Interrupt_Priority : constant Positive := 98;
++
++   subtype Any_Priority       is Integer      range  0 .. 98;
++   subtype Priority           is Any_Priority range  0 .. 97;
++   subtype Interrupt_Priority is Any_Priority range 98 .. 98;
++
++   Default_Priority : constant Priority := 48;
++
++private
++
++   type Address is mod Memory_Size;
++   Null_Address : constant Address := 0;
++
++   --------------------------------------
++   -- System Implementation Parameters --
++   --------------------------------------
++
++   --  These parameters provide information about the target that is used
++   --  by the compiler. They are in the private part of System, where they
++   --  can be accessed using the special circuitry in the Targparm unit
++   --  whose source should be consulted for more detailed descriptions
++   --  of the individual switch values.
++
++   Backend_Divide_Checks     : constant Boolean := False;
++   Backend_Overflow_Checks   : constant Boolean := False;
++   Command_Line_Args         : constant Boolean := True;
++   Configurable_Run_Time     : constant Boolean := False;
++   Denorm                    : constant Boolean := True;
++   Duration_32_Bits          : constant Boolean := False;
++   Exit_Status_Supported     : constant Boolean := True;
++   Fractional_Fixed_Ops      : constant Boolean := False;
++   Frontend_Layout           : constant Boolean := False;
++   Machine_Overflows         : constant Boolean := False;
++   Machine_Rounds            : constant Boolean := True;
++   Preallocated_Stacks       : constant Boolean := False;
++   Signed_Zeros              : constant Boolean := True;
++   Stack_Check_Default       : constant Boolean := False;
++   Stack_Check_Probes        : constant Boolean := True;
++   Stack_Check_Limits        : constant Boolean := False;
++   Support_64_Bit_Divides    : constant Boolean := True;
++   Support_Aggregates        : constant Boolean := True;
++   Support_Composite_Assign  : constant Boolean := True;
++   Support_Composite_Compare : constant Boolean := True;
++   Support_Long_Shifts       : constant Boolean := True;
++   Always_Compatible_Rep     : constant Boolean := False;
++   Suppress_Standard_Library : constant Boolean := False;
++   Use_Ada_Main_Program_Name : constant Boolean := False;
++   ZCX_By_Default            : constant Boolean := False;
++   GCC_ZCX_Support           : constant Boolean := False;
++
++end System;
+Index: gcc/ada/system-linux-armeb.ads
+===================================================================
+--- a/src/gcc/ada/system-linux-armeb.ads	(revision
++++ b/src/gcc/ada/system-linux-armeb.ads	(revision
+@@ -0,0 +1,153 @@
++------------------------------------------------------------------------------
++--                                                                          --
++--                        GNAT RUN-TIME COMPONENTS                          --
++--                                                                          --
++--                               S Y S T E M                                --
++--                                                                          --
++--                                 S p e c                                  --
++--                        (GNU-Linux/ARMEB Version)                         --
++--                                                                          --
++--          Copyright (C) 1992-2010, Free Software Foundation, Inc.         --
++--                                                                          --
++-- This specification is derived from the Ada Reference Manual for use with --
++-- GNAT. The copyright notice above, and the license provisions that follow --
++-- apply solely to the  contents of the part following the private keyword. --
++--                                                                          --
++-- GNAT is free software;  you can  redistribute it  and/or modify it under --
++-- terms of the  GNU General Public License as published  by the Free Soft- --
++-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
++-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
++-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
++-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
++--                                                                          --
++-- As a special exception under Section 7 of GPL version 3, you are granted --
++-- additional permissions described in the GCC Runtime Library Exception,   --
++-- version 3.1, as published by the Free Software Foundation.               --
++--                                                                          --
++-- You should have received a copy of the GNU General Public License and    --
++-- a copy of the GCC Runtime Library Exception along with this program;     --
++-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
++-- <http://www.gnu.org/licenses/>.                                          --
++--                                                                          --
++-- GNAT was originally developed  by the GNAT team at  New York University. --
++-- Extensive contributions were provided by Ada Core Technologies Inc.      --
++--                                                                          --
++------------------------------------------------------------------------------
++
++package System is
++   pragma Pure;
++   --  Note that we take advantage of the implementation permission to make
++   --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
++   --  2005, this is Pure in any case (AI-362).
++
++   type Name is (SYSTEM_NAME_GNAT);
++   System_Name : constant Name := SYSTEM_NAME_GNAT;
++
++   --  System-Dependent Named Numbers
++
++   Min_Int               : constant := Long_Long_Integer'First;
++   Max_Int               : constant := Long_Long_Integer'Last;
++
++   Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
++   Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
++
++   Max_Base_Digits       : constant := Long_Long_Float'Digits;
++   Max_Digits            : constant := Long_Long_Float'Digits;
++
++   Max_Mantissa          : constant := 63;
++   Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
++
++   Tick                  : constant := 0.000_001;
++
++   --  Storage-related Declarations
++
++   type Address is private;
++   pragma Preelaborable_Initialization (Address);
++   Null_Address : constant Address;
++
++   Storage_Unit : constant := 8;
++   Word_Size    : constant := 32;
++   Memory_Size  : constant := 2 ** 32;
++
++   --  Address comparison
++
++   function "<"  (Left, Right : Address) return Boolean;
++   function "<=" (Left, Right : Address) return Boolean;
++   function ">"  (Left, Right : Address) return Boolean;
++   function ">=" (Left, Right : Address) return Boolean;
++   function "="  (Left, Right : Address) return Boolean;
++
++   pragma Import (Intrinsic, "<");
++   pragma Import (Intrinsic, "<=");
++   pragma Import (Intrinsic, ">");
++   pragma Import (Intrinsic, ">=");
++   pragma Import (Intrinsic, "=");
++
++   --  Other System-Dependent Declarations
++
++   type Bit_Order is (High_Order_First, Low_Order_First);
++   Default_Bit_Order : constant Bit_Order := High_Order_First;
++   pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
++
++   --  Priority-related Declarations (RM D.1)
++
++   --  0 .. 98 corresponds to the system priority range 1 .. 99.
++   --
++   --  If the scheduling policy is SCHED_FIFO or SCHED_RR the runtime makes use
++   --  of the entire range provided by the system.
++   --
++   --  If the scheduling policy is SCHED_OTHER the only valid system priority
++   --  is 1 and other values are simply ignored.
++
++   Max_Priority           : constant Positive := 97;
++   Max_Interrupt_Priority : constant Positive := 98;
++
++   subtype Any_Priority       is Integer      range  0 .. 98;
++   subtype Priority           is Any_Priority range  0 .. 97;
++   subtype Interrupt_Priority is Any_Priority range 98 .. 98;
++
++   Default_Priority : constant Priority := 48;
++
++private
++
++   type Address is mod Memory_Size;
++   Null_Address : constant Address := 0;
++
++   --------------------------------------
++   -- System Implementation Parameters --
++   --------------------------------------
++
++   --  These parameters provide information about the target that is used
++   --  by the compiler. They are in the private part of System, where they
++   --  can be accessed using the special circuitry in the Targparm unit
++   --  whose source should be consulted for more detailed descriptions
++   --  of the individual switch values.
++
++   Backend_Divide_Checks     : constant Boolean := False;
++   Backend_Overflow_Checks   : constant Boolean := False;
++   Command_Line_Args         : constant Boolean := True;
++   Configurable_Run_Time     : constant Boolean := False;
++   Denorm                    : constant Boolean := True;
++   Duration_32_Bits          : constant Boolean := False;
++   Exit_Status_Supported     : constant Boolean := True;
++   Fractional_Fixed_Ops      : constant Boolean := False;
++   Frontend_Layout           : constant Boolean := False;
++   Machine_Overflows         : constant Boolean := False;
++   Machine_Rounds            : constant Boolean := True;
++   Preallocated_Stacks       : constant Boolean := False;
++   Signed_Zeros              : constant Boolean := True;
++   Stack_Check_Default       : constant Boolean := False;
++   Stack_Check_Probes        : constant Boolean := True;
++   Stack_Check_Limits        : constant Boolean := False;
++   Support_64_Bit_Divides    : constant Boolean := True;
++   Support_Aggregates        : constant Boolean := True;
++   Support_Composite_Assign  : constant Boolean := True;
++   Support_Composite_Compare : constant Boolean := True;
++   Support_Long_Shifts       : constant Boolean := True;
++   Always_Compatible_Rep     : constant Boolean := False;
++   Suppress_Standard_Library : constant Boolean := False;
++   Use_Ada_Main_Program_Name : constant Boolean := False;
++   ZCX_By_Default            : constant Boolean := False;
++   GCC_ZCX_Support           : constant Boolean := False;
++
++end System;
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/boehm-gc-nocheck.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/boehm-gc-nocheck.diff
@@ -0,0 +1,18 @@
+# DP: Disable running the boehm-gc testsuite. Hangs the buildd at least on hppa.
+
+---
+ boehm-gc/Makefile.in |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+--- a/src/boehm-gc/Makefile.in
++++ b/src/boehm-gc/Makefile.in
+@@ -684,7 +684,8 @@ check-TESTS: $(TESTS)
+ 	  test "$$failed" -eq 0; \
+ 	else :; fi
+ check-am: $(check_PROGRAMS)
+-	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
++	: # $(MAKE) $(AM_MAKEFLAGS) check-TESTS
++	@echo target $@ disabled for Debian build.
+ check: check-recursive
+ all-am: Makefile $(LTLIBRARIES) all-multi
+ installdirs: installdirs-recursive
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gold-and-ld-doc.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gold-and-ld-doc.diff
@@ -0,0 +1,35 @@
+# DP: Enable both gold and ld in a single toolchain (documentation).
+# DP: New option -fuse-ld=ld.bfd, -fuse-ld=gold.
+
+Index: gcc/doc/invoke.texi
+===================================================================
+--- a/src/gcc/doc/invoke.texi	(revision
++++ b/src/gcc/doc/invoke.texi	(working
+@@ -376,7 +376,7 @@
+ -funit-at-a-time -funroll-all-loops -funroll-loops @gol
+ -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol
+ -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb @gol
+--fwhole-program @gol
++-fwhole-program -fuse-ld @gol
+ --param @var{name}=@var{value}
+ -O  -O0  -O1  -O2  -O3  -Os}
+ 
+@@ -6734,6 +6734,18 @@
+ 
+ This option is not supported for Fortran programs.
+ 
++@item -fuse-ld=gold
++Use the @command{gold} linker instead of the default linker.
++This option is only necessary if GCC has been configured with
++@option{--enable-gold=both} or @option{--enable-gold=both/ld}.
++Note: Backported for Debian/Ubuntu from GCC 4.5.
++
++@item -fuse-ld=bfd
++Use the @command{ld.bfd} linker instead of the default linker.
++This option is only necessary if GCC has been configured with
++@option{--enable-gold=both/gold}.
++Note: Backported for Debian/Ubuntu from GCC 4.5.
++
+ @item -fcprop-registers
+ @opindex fcprop-registers
+ After register allocation and post-register allocation instruction splitting,
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libjava-subdir.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libjava-subdir.diff
@@ -0,0 +1,221 @@
+# DP: - Set the libjava sublibdir to /usr/lib/gcj-4.4
+# DP: - Set the default libgcj database dir to /var/lib/gcj-4.4
+
+---
+ gcc/java/Make-lang.in             |    5 +++--
+ libjava/Makefile.am               |    9 +++++----
+ libjava/Makefile.in               |    9 +++++----
+ libjava/classpath/configure.ac    |    2 +-
+ libjava/configure.ac              |    7 ++++++-
+ libjava/testsuite/Makefile.am     |    7 ++++---
+ libjava/testsuite/Makefile.in     |    7 ++++---
+ libjava/testsuite/lib/libjava.exp |    1 +
+ 8 files changed, 29 insertions(+), 18 deletions(-)
+
+--- a/src/gcc/java/Make-lang.in
++++ b/src/gcc/java/Make-lang.in
+@@ -320,12 +320,13 @@ java/jcf-io.o: java/jcf-io.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+ 	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(ZLIBINC) \
+ 		$(srcdir)/java/jcf-io.c $(OUTPUT_OPTION)
+ 
++short_version := $(shell echo $(version) | sed -r 's/([0-9]+\.[0-9]+).*/\1/')
+ # jcf-path.o needs a -D.
+ java/jcf-path.o: java/jcf-path.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+   java/jcf.h
+ 	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+-	  -DLIBGCJ_ZIP_FILE='"$(datadir)/java/libgcj-$(version).jar"' \
+-	  -DDEFAULT_TARGET_VERSION=\"$(version)\" \
++	  -DLIBGCJ_ZIP_FILE='"$(datadir)/java/libgcj-$(short_version).jar"' \
++	  -DDEFAULT_TARGET_VERSION=\"$(short_version)\" \
+ 	  $(srcdir)/java/jcf-path.c $(OUTPUT_OPTION)
+ 
+ TEXI_JAVA_FILES = java/gcj.texi $(gcc_docdir)/include/fdl.texi		\
+--- a/src/libjava/Makefile.am
++++ b/src/libjava/Makefile.am
+@@ -5,7 +5,8 @@ AUTOMAKE_OPTIONS = foreign subdir-objects
+ ACLOCAL_AMFLAGS = -I . -I .. -I ../config -I libltdl
+ 
+ # May be used by various substitution variables.
+-gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
++gcc_full_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
++gcc_version := $(shell sed -r 's/([0-9]+\.[0-9]+).*/\1/' $(top_srcdir)/../gcc/BASE-VER)
+ 
+ SUBDIRS = $(DIRLTDL) gcj include classpath
+ if TESTSUBDIR
+@@ -34,9 +35,9 @@ write_entries_to_file = $(shell rm -f $(2) || :) $(shell touch $(2)) \
+ target_noncanonical = @target_noncanonical@
+ 
+ # This is required by TL_AC_GXX_INCLUDE_DIR.
+-libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)
++libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_full_version)
+ 
+-libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version)
++libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_full_version)
+ 
+ ##
+ ## What gets installed, and where.
+@@ -166,7 +167,7 @@ AM_CXXFLAGS = \
+ 	-DGCJ_VERSIONED_LIBDIR="\"$(dbexecdir)\"" \
+ 	-DPATH_SEPARATOR="\"$(CLASSPATH_SEPARATOR)\"" \
+ 	-DECJ_JAR_FILE="\"$(ECJ_JAR)\"" \
+-	-DLIBGCJ_DEFAULT_DATABASE="\"$(dbexecdir)/$(db_name)\"" \
++	-DLIBGCJ_DEFAULT_DATABASE="\"/var/lib/gcj-4.4/$(db_name)\"" \
+ 	-DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\""
+ 
+ AM_GCJFLAGS = \
+--- a/src/libjava/Makefile.in
++++ b/src/libjava/Makefile.in
+@@ -887,7 +887,8 @@ AUTOMAKE_OPTIONS = foreign subdir-objects
+ ACLOCAL_AMFLAGS = -I . -I .. -I ../config -I libltdl
+ 
+ # May be used by various substitution variables.
+-gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
++gcc_full_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
++gcc_version := $(shell sed -r 's/([0-9]+\.[0-9]+).*/\1/' $(top_srcdir)/../gcc/BASE-VER)
+ SUBDIRS = $(DIRLTDL) gcj include classpath $(am__append_1)
+ 
+ # write_entries_to_file - writes each entry in a list
+@@ -908,8 +909,8 @@ write_entries_to_file = $(shell rm -f $(2) || :) $(shell touch $(2)) \
+ 
+ 
+ # This is required by TL_AC_GXX_INCLUDE_DIR.
+-libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)
+-libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version)
++libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_full_version)
++libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_full_version)
+ toolexeclib_LTLIBRARIES = libgcj.la libgij.la libgcj-tools.la \
+ 	$(am__append_2) $(am__append_3)
+ toolexecmainlib_DATA = libgcj.spec
+@@ -963,7 +964,7 @@ AM_CXXFLAGS = \
+ 	-DGCJ_VERSIONED_LIBDIR="\"$(dbexecdir)\"" \
+ 	-DPATH_SEPARATOR="\"$(CLASSPATH_SEPARATOR)\"" \
+ 	-DECJ_JAR_FILE="\"$(ECJ_JAR)\"" \
+-	-DLIBGCJ_DEFAULT_DATABASE="\"$(dbexecdir)/$(db_name)\"" \
++	-DLIBGCJ_DEFAULT_DATABASE="\"/var/lib/gcj-4.4/$(db_name)\"" \
+ 	-DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\""
+ 
+ AM_GCJFLAGS = \
+--- a/src/libjava/classpath/configure.ac
++++ b/src/libjava/classpath/configure.ac
+@@ -328,7 +328,7 @@ AC_ARG_WITH([native-libdir],
+ 	     nativeexeclibdir=${withval}
+ 	    ],
+ 	    [
+-	     nativeexeclibdir='${toolexeclibdir}/gcj-'`cat ${srcdir}/../../gcc/BASE-VER`-`awk -F: '/^[[^#]].*:/ { print $1 }' ${srcdir}/../libtool-version`
++	     nativeexeclibdir='${toolexeclibdir}/gcj-'`sed -r 's/([[0-9]]+\.[[0-9]]+).*/\1/' ${srcdir}/../../gcc/BASE-VER`-`awk -F: '/^[[^#]].*:/ { print $1 }' ${srcdir}/../libtool-version`
+ 	    ])
+ 
+ AC_SUBST(nativeexeclibdir)
+--- a/src/libjava/configure.ac
++++ b/src/libjava/configure.ac
+@@ -572,6 +572,9 @@ AC_ARG_WITH(java-home,
+   AS_HELP_STRING([--with-java-home=DIRECTORY],
+                  [value of java.home system property]),
+ 		 [JAVA_HOME="${withval}"], [JAVA_HOME=""])
++if test -n "$with_multisubdir"; then
++  JAVA_HOME=`echo $JAVA_HOME | sed "s,/usr/lib/,/usr/lib$with_multisubdir/,"`
++fi
+ AM_CONDITIONAL(JAVA_HOME_SET, test ! -z "$JAVA_HOME")
+ AC_SUBST(JAVA_HOME)
+ 
+@@ -1467,6 +1470,7 @@ case ${version_specific_libs} in
+     multi_os_directory=`$CC -print-multi-os-directory`
+     case $multi_os_directory in
+       .) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
++      ../lib*) toolexeclibdir='$(subst /lib/../lib,/lib,'$toolexecmainlibdir/$multi_os_directory')' ;;
+       *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
+     esac
+     ;;
+@@ -1477,6 +1481,7 @@ AC_SUBST(toolexeclibdir)
+ 
+ # Determine gcj and libgcj version number.
+ gcjversion=`cat "$srcdir/../gcc/BASE-VER"`
++short_version=`sed -r 's/([[0-9]]+\.[[0-9]]+).*/\1/' $srcdir/../gcc/BASE-VER`
+ libgcj_soversion=`awk -F: '/^[[^#]].*:/ { print $1 }' $srcdir/libtool-version`
+ GCJVERSION=$gcjversion
+ AC_SUBST(GCJVERSION)
+@@ -1484,7 +1489,7 @@ AC_DEFINE_UNQUOTED(GCJVERSION, "$GCJVERSION", [Short GCJ version ID])
+ 
+ # Determine where the standard .db file and GNU Classpath JNI
+ # libraries are found.
+-gcjsubdir=gcj-$gcjversion-$libgcj_soversion
++gcjsubdir=gcj-$short_version-$libgcj_soversion
+ multi_os_directory=`$CC -print-multi-os-directory`
+ case $multi_os_directory in
+   .)
+--- a/src/libjava/testsuite/Makefile.am
++++ b/src/libjava/testsuite/Makefile.am
+@@ -4,6 +4,7 @@ AUTOMAKE_OPTIONS = foreign dejagnu
+ 
+ # May be used by various substitution variables.
+ gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
++gcc_short_version := $(shell sed -r 's/([0-9]+\.[0-9]+).*/\1/' $(top_srcdir)/../gcc/BASE-VER)
+ 
+ # autoconf2.13's target_alias
+ target_noncanonical = @target_noncanonical@
+@@ -59,11 +60,11 @@ if JAVA_MAINTAINER_MODE
+ 	  rm -rf $$testtmpdir; $(mkdir_p) $$testtmpdir; \
+ 	  if test -n "$$testdep"; then \
+ 	    $(GCJ) -C -g -w --encoding=UTF-8 -bootclasspath \
+-	      $(top_builddir)/libgcj-$(gcc_version).jar::$$testtmpdir \
++	      $(top_builddir)/libgcj-$(gcc_short_version).jar::$$testtmpdir \
+ 	      -d $$testtmpdir $(srcdir)/$$testdep || exit; \
+ 	  fi; \
+ 	  $(GCJ) -C -g -w --encoding=UTF-8 -bootclasspath \
+-	    $(top_builddir)/libgcj-$(gcc_version).jar:$$testtmpdir \
++	    $(top_builddir)/libgcj-$(gcc_short_version).jar:$$testtmpdir \
+ 	    -d $$testtmpdir $(srcdir)/$$test || exit; \
+ 	  case "$$test" in \
+ 	    libjava.loader/dummy.java) \
+@@ -75,7 +76,7 @@ if JAVA_MAINTAINER_MODE
+ 	  esac; \
+ 	  if test -n "$$genheader"; then \
+ 	    $(MYGCJH) $$genheader $$testtmpdir/*.class \
+-	      -bootclasspath $(top_builddir)/libgcj-$(gcc_version).jar \
++	      -bootclasspath $(top_builddir)/libgcj-$(gcc_short_version).jar \
+ 	      -d $$testtmpdir/ || exit; \
+ 	    mv $$testtmpdir/*.h $(srcdir)/`dirname $$test`/ 2>/dev/null; \
+ 	  fi; \
+--- a/src/libjava/testsuite/Makefile.in
++++ b/src/libjava/testsuite/Makefile.in
+@@ -373,6 +373,7 @@ AUTOMAKE_OPTIONS = foreign dejagnu
+ 
+ # May be used by various substitution variables.
+ gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
++gcc_short_version := $(shell sed -r 's/([0-9]+\.[0-9]+).*/\1/' $(top_srcdir)/../gcc/BASE-VER)
+ 
+ # Setup the testing framework, if you have one
+ EXPECT = `if [ -f $(top_builddir)/../expect/expect ] ; then \
+@@ -620,11 +621,11 @@ compile-tests:
+ @JAVA_MAINTAINER_MODE_TRUE@	  rm -rf $$testtmpdir; $(mkdir_p) $$testtmpdir; \
+ @JAVA_MAINTAINER_MODE_TRUE@	  if test -n "$$testdep"; then \
+ @JAVA_MAINTAINER_MODE_TRUE@	    $(GCJ) -C -g -w --encoding=UTF-8 -bootclasspath \
+-@JAVA_MAINTAINER_MODE_TRUE@	      $(top_builddir)/libgcj-$(gcc_version).jar::$$testtmpdir \
++@JAVA_MAINTAINER_MODE_TRUE@	      $(top_builddir)/libgcj-$(gcc_short_version).jar::$$testtmpdir \
+ @JAVA_MAINTAINER_MODE_TRUE@	      -d $$testtmpdir $(srcdir)/$$testdep || exit; \
+ @JAVA_MAINTAINER_MODE_TRUE@	  fi; \
+ @JAVA_MAINTAINER_MODE_TRUE@	  $(GCJ) -C -g -w --encoding=UTF-8 -bootclasspath \
+-@JAVA_MAINTAINER_MODE_TRUE@	    $(top_builddir)/libgcj-$(gcc_version).jar:$$testtmpdir \
++@JAVA_MAINTAINER_MODE_TRUE@	    $(top_builddir)/libgcj-$(gcc_short_version).jar:$$testtmpdir \
+ @JAVA_MAINTAINER_MODE_TRUE@	    -d $$testtmpdir $(srcdir)/$$test || exit; \
+ @JAVA_MAINTAINER_MODE_TRUE@	  case "$$test" in \
+ @JAVA_MAINTAINER_MODE_TRUE@	    libjava.loader/dummy.java) \
+@@ -636,7 +637,7 @@ compile-tests:
+ @JAVA_MAINTAINER_MODE_TRUE@	  esac; \
+ @JAVA_MAINTAINER_MODE_TRUE@	  if test -n "$$genheader"; then \
+ @JAVA_MAINTAINER_MODE_TRUE@	    $(MYGCJH) $$genheader $$testtmpdir/*.class \
+-@JAVA_MAINTAINER_MODE_TRUE@	      -bootclasspath $(top_builddir)/libgcj-$(gcc_version).jar \
++@JAVA_MAINTAINER_MODE_TRUE@	      -bootclasspath $(top_builddir)/libgcj-$(gcc_short_version).jar \
+ @JAVA_MAINTAINER_MODE_TRUE@	      -d $$testtmpdir/ || exit; \
+ @JAVA_MAINTAINER_MODE_TRUE@	    mv $$testtmpdir/*.h $(srcdir)/`dirname $$test`/ 2>/dev/null; \
+ @JAVA_MAINTAINER_MODE_TRUE@	  fi; \
+--- a/src/libjava/testsuite/lib/libjava.exp
++++ b/src/libjava/testsuite/lib/libjava.exp
+@@ -169,6 +169,7 @@ proc libjava_init { args } {
+     set text [eval exec "$GCJ_UNDER_TEST -B$specdir -v 2>@ stdout"]
+     regexp " version \[^\n\r\]*" $text version
+     set libjava_version [lindex $version 1]
++    set libjava_version "4.4"
+ 
+     verbose "version: $libjava_version"
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/armhf-triplet-backport.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/armhf-triplet-backport.diff
@@ -0,0 +1,105 @@
+# DP: add support for arm-linux-*eabi* triplets; useful for armhf
+
+--- a/src/configure.ac	2011-03-18 19:10:48.804622758 +0000
++++ b/src/configure.ac	2011-03-18 19:11:18.324622793 +0000
+@@ -592,7 +592,7 @@
+     noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+     libgloss_dir=arm
+     ;;
+-  arm*-*-linux-gnueabi)
++  arm*-*-linux-*eabi*)
+     noconfigdirs="$noconfigdirs target-qthreads"
+     case ${with_newlib} in
+       no) noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+--- a/src/gcc/ada/gcc-interface/Makefile.in	2011-03-18 19:11:37.296622753 +0000
++++ b/src/gcc/ada/gcc-interface/Makefile.in	2011-03-18 19:11:52.964621827 +0000
+@@ -1857,7 +1857,7 @@
+   LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+ 
+-ifeq ($(strip $(filter-out arm% linux-gnueabi,$(arch) $(osys)-$(word 4,$(targ)))),)
++ifeq ($(strip $(filter-out arm%-linux,$(arch)-$(osys)) $(if $(findstring eabi,$(word 4,$(targ))),,$(word 4,$(targ)))),)
+   LIBGNAT_TARGET_PAIRS = \
+   a-intnam.ads<a-intnam-linux.ads \
+   s-inmaop.adb<s-inmaop-posix.adb \
+--- a/src/gcc/config.gcc	2011-03-18 19:12:05.128622749 +0000
++++ b/src/gcc/config.gcc	2011-03-18 19:12:52.960622752 +0000
+@@ -736,7 +736,7 @@
+ 	esac
+ 	tmake_file="${tmake_file} t-linux arm/t-arm"
+ 	case ${target} in
+-	arm*-*-linux-*eabi)
++	arm*-*-linux-*eabi*)
+ 	    tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
+ 	    tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi t-slibgcc-libgcc"
+   	    # The BPABI long long divmod functions return a 128-bit value in
+@@ -757,7 +757,7 @@
+ 	tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/linux-gas.h arm/uclinux-elf.h glibc-stdint.h"
+ 	tmake_file="arm/t-arm arm/t-arm-elf"
+ 	case ${target} in
+-	arm*-*-uclinux*eabi)
++	arm*-*-uclinux*eabi*)
+ 	    tm_file="$tm_file arm/bpabi.h arm/uclinux-eabi.h"
+ 	    tmake_file="$tmake_file arm/t-bpabi"
+   	    # The BPABI long long divmod functions return a 128-bit value in
+--- a/src/gcc/testsuite/lib/target-supports.exp	2011-03-18 19:13:48.604622749 +0000
++++ b/src/gcc/testsuite/lib/target-supports.exp	2011-03-18 19:14:24.132622629 +0000
+@@ -2593,7 +2593,7 @@
+ 	     || [istarget i?86-*-*]
+ 	     || [istarget x86_64-*-*]
+ 	     || [istarget alpha*-*-*] 
+-	     || [istarget arm*-*-linux-gnueabi] 
++	     || [istarget arm*-*-linux-*eabi*] 
+ 	     || [istarget s390*-*-*] 
+ 	     || [istarget powerpc*-*-*]
+ 	     || [istarget sparc64-*-*]
+@@ -2622,7 +2622,7 @@
+ 	     || [istarget i?86-*-*]
+ 	     || [istarget x86_64-*-*]
+ 	     || [istarget alpha*-*-*] 
+-	     || [istarget arm*-*-linux-gnueabi] 
++	     || [istarget arm*-*-linux-*eabi*] 
+ 	     || [istarget s390*-*-*] 
+ 	     || [istarget powerpc*-*-*]
+ 	     || [istarget sparc64-*-*]
+--- a/src/libjava/configure.ac	2011-03-18 19:14:37.464622750 +0000
++++ b/src/libjava/configure.ac	2011-03-18 19:15:00.780622755 +0000
+@@ -920,7 +920,7 @@
+     # on Darwin -single_module speeds up loading of the dynamic libraries.
+     extra_ldflags_libjava=-Wl,-single_module
+     ;;
+-arm*linux*eabi)
++arm*-*-linux-*eabi*)
+     # Some of the ARM unwinder code is actually in libstdc++.  We
+     # could in principle replicate it in libgcj, but it's better to
+     # have a dependency on libstdc++.
+--- a/src/libstdc++-v3/configure.host	2011-03-18 19:15:16.288622758 +0000
++++ b/src/libstdc++-v3/configure.host	2011-03-18 19:15:30.932622217 +0000
+@@ -325,7 +325,7 @@
+         fi
+     esac
+     case "${host}" in
+-      arm*-*-linux-*eabi)
++      arm*-*-linux-*eabi*)
+ 	port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver"
+ 	;;
+     esac
+--- a/src/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc	2011-03-18 19:15:43.204622783 +0000
++++ b/src/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc	2011-03-18 19:16:06.324622740 +0000
+@@ -1,5 +1,5 @@
+ // { dg-options "-std=gnu++0x -funsigned-char -fshort-enums" }
+-// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux*eabi } }
++// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux-*eabi* } }
+ 
+ // 2007-05-03  Benjamin Kosnik  <bkoz@redhat.com>
+ //
+--- a/src/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc	2011-03-18 19:16:31.144622761 +0000
++++ b/src/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc	2011-03-18 19:16:41.420622950 +0000
+@@ -1,5 +1,5 @@
+ // { dg-options "-std=gnu++0x -funsigned-char -fshort-enums" }
+-// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux*eabi } }
++// { dg-options "-std=gnu++0x -funsigned-char -fshort-enums -Wl,--no-enum-size-warning" { target arm*-*-linux-*eabi* } }
+ 
+ // 2007-05-03  Benjamin Kosnik  <bkoz@redhat.com>
+ //
+
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-java-align-data.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-java-align-data.diff
@@ -0,0 +1,14 @@
+# DP: java: Align data in .rodata.jutf8.* sections, taken from the trunk.
+
+http://gcc.gnu.org/ml/java-patches/2010-q3/msg00014.html
+
+--- a/src/gcc/java/class.c
++++ b/src/gcc/java/class.c
+@@ -972,6 +972,7 @@
+   TREE_READONLY (decl) = 1;
+   TREE_THIS_VOLATILE (decl) = 0;
+   DECL_INITIAL (decl) = cinit;
++  DECL_USER_ALIGN (decl) = 1;
+ 
+   if (HAVE_GAS_SHF_MERGE)
+     {
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-m68k-support-for-tls-backport.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-m68k-support-for-tls-backport.diff
@@ -0,0 +1,1393 @@
+# DP: M68K TLS support, backport from the 4.5 branch.
+
+This is not the original patch from the repo -- it has been backported to gcc-4.4 and the ChangeLog updates commented out. Compare with:
+http://git.infradead.org/gcc.git/commitdiff_plain/888c30d77dc1f47cea8339119f7322832fe7575a
+
+See also:
+http://gcc.gnu.org/viewcvs?view=revision&revision=147654
+
+The calls.c changes in Maxim's submission to the gcc-patches mailing list have not yet been committed.
+
+From: mkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Mon, 18 May 2009 07:54:44 +0000 (+0000)
+Subject: 	M68K TLS support.
+X-Git-Url: http://git.infradead.org/gcc.git/commitdiff_plain/888c30d77dc1f47cea8339119f7322832fe7575a
+
+	M68K TLS support.
+	* configure.ac (m68k-*-*): Check if binutils support TLS.
+	* configure: Regenerate.
+	* config/m68k/predicates.md (symbolic_operand): Extend comment.
+	* config/m68k/constraints.md (Cu): New constraint.
+	* config/m68k/m68k.md (UNSPEC_GOTOFF): Remove.
+	(UNSPEC_RELOC16, UNSPEC_RELOC32): New constants.
+	(movsi): Handle TLS symbols.
+	(addsi3_5200): Handle XTLS symbols, indent.
+	* config/m68k/m68k-protos.h (m68k_legitimize_tls_address): Declare.
+	(m68k_tls_reference_p): Declare.
+	(m68k_legitimize_address): Declare.
+	(m68k_unwrap_symbol): Declare.
+	* config/m68k/m68k.opt (mxtls): New option.
+	* config/m68k/m68k.c (ggc.h): Include.
+	(m68k_output_dwarf_dtprel): Implement hook.
+	(TARGET_HAVE_TLS, TARGET_ASM_OUTPUT_DWARF_DTPREL): Define.
+	(m68k_expand_prologue): Load GOT pointer when function needs it.
+	(m68k_illegitimate_symbolic_constant_p): Handle TLS symbols.
+	(m68k_legitimate_constant_address_p): Same.
+	(m68k_decompose_address): Handle TLS references.
+	(m68k_get_gp): New static function.
+	(enum m68k_reloc): New contants.
+	(TLS_RELOC_P): New macro.
+	(m68k_wrap_symbol): New static function.
+	(m68k_unwrap_symbol): New function.
+	(m68k_final_prescan_insn_1): New static function.
+	(m68k_final_prescan_insn): New function.
+	(m68k_move_to_reg, m68k_wrap_symbol_into_got_ref): New static
+	functions.
+	(legitimize_pic_address): Handle TLS references..
+	(m68k_tls_get_addr, m68k_get_tls_get_addr)
+	(m68k_libcall_value_in_a0_p)
+	(m68k_call_tls_get_addr, m68k_read_tp, m68k_get_m68k_read_tp)
+	(m68k_call_m68k_read_tp): Helper variables and functions for ...
+	(m68k_legitimize_tls_address): Handle TLS references.
+	(m68k_tls_symbol_p, m68k_tls_reference_p_1, m68k_tls_reference_p):
+	New functions.
+	(m68k_legitimize_address): Handle TLS symbols.
+	(m68k_get_reloc_decoration): New static function.
+	(m68k_output_addr_const_extra): Handle UNSPEC_RELOC16 and
+	UNSPEC_RELOC32.
+	(m68k_output_dwarf_dtprel): Implement hook.
+	(print_operand_address): Handle UNSPEC_RELOC16 adn UNSPEC_RELOC32.
+	(m68k_libcall_value): Return result in A0 instead of D0 when asked by
+	m68k_call_* routines.
+	(sched_attr_op_type): Handle TLS symbols.
+	(gt-m68k.h): Include.
+	* config/m68k/m68k.h (FINAL_PRESCAN_INSN): Define.
+	(LEGITIMATE_PIC_OPERAND_P): Support TLS.
+
+	* gcc.target/m68k/tls-ie.c: New test.
+	* gcc.target/m68k/tls-le.c: New test.
+	* gcc.target/m68k/tls-gd.c: New test.
+	* gcc.target/m68k/tls-ld.c: New test.
+	* gcc.target/m68k/tls-ie-xgot.c: New test.
+	* gcc.target/m68k/tls-le-xtls.c: New test.
+	* gcc.target/m68k/tls-gd-xgot.c: New test.
+	* gcc.target/m68k/tls-ld-xgot.c: New test.
+	* gcc.target/m68k/tls-ld-xtls.c: New test.
+	* gcc.target/m68k/tls-ld-xgot-xtls.c: New test.
+
+
+git-svn-id: svn://gcc.gnu.org/svn/gcc/trunk@147654 138bc75d-0d04-0410-961f-82ee72b054a4
+---
+
+#diff --git a/gcc/ChangeLog b/gcc/ChangeLog
+#index 1aa8d01..372df6b 100644
+#--- a/gcc/ChangeLog
+#+++ b/gcc/ChangeLog
+#@@ -1,3 +1,56 @@
+#+2009-05-18  Maxim Kuvyrkov  <maxim@codesourcery.com>
+#+
+#+	M68K TLS support.
+#+	* configure.ac (m68k-*-*): Check if binutils support TLS.
+#+	* configure: Regenerate.
+#+	* config/m68k/predicates.md (symbolic_operand): Extend comment.
+#+	* config/m68k/constraints.md (Cu): New constraint.
+#+	* config/m68k/m68k.md (UNSPEC_GOTOFF): Remove.
+#+	(UNSPEC_RELOC16, UNSPEC_RELOC32): New constants.
+#+	(movsi): Handle TLS symbols.
+#+	(addsi3_5200): Handle XTLS symbols, indent.
+#+	* config/m68k/m68k-protos.h (m68k_legitimize_tls_address): Declare.
+#+	(m68k_tls_reference_p): Declare.
+#+	(m68k_legitimize_address): Declare.
+#+	(m68k_unwrap_symbol): Declare.
+#+	* config/m68k/m68k.opt (mxtls): New option.
+#+	* config/m68k/m68k.c (ggc.h): Include.
+#+	(m68k_output_dwarf_dtprel): Implement hook.
+#+	(TARGET_HAVE_TLS, TARGET_ASM_OUTPUT_DWARF_DTPREL): Define.
+#+	(m68k_expand_prologue): Load GOT pointer when function needs it.
+#+	(m68k_illegitimate_symbolic_constant_p): Handle TLS symbols.
+#+	(m68k_legitimate_constant_address_p): Same.
+#+	(m68k_decompose_address): Handle TLS references.
+#+	(m68k_get_gp): New static function.
+#+	(enum m68k_reloc): New contants.
+#+	(TLS_RELOC_P): New macro.
+#+	(m68k_wrap_symbol): New static function.
+#+	(m68k_unwrap_symbol): New function.
+#+	(m68k_final_prescan_insn_1): New static function.
+#+	(m68k_final_prescan_insn): New function.
+#+	(m68k_move_to_reg, m68k_wrap_symbol_into_got_ref): New static
+#+	functions.
+#+	(legitimize_pic_address): Handle TLS references..
+#+	(m68k_tls_get_addr, m68k_get_tls_get_addr)
+#+	(m68k_libcall_value_in_a0_p)
+#+	(m68k_call_tls_get_addr, m68k_read_tp, m68k_get_m68k_read_tp)
+#+	(m68k_call_m68k_read_tp): Helper variables and functions for ...
+#+	(m68k_legitimize_tls_address): Handle TLS references.
+#+	(m68k_tls_symbol_p, m68k_tls_reference_p_1, m68k_tls_reference_p):
+#+	New functions.
+#+	(m68k_legitimize_address): Handle TLS symbols.
+#+	(m68k_get_reloc_decoration): New static function.
+#+	(m68k_output_addr_const_extra): Handle UNSPEC_RELOC16 and
+#+	UNSPEC_RELOC32.
+#+	(m68k_output_dwarf_dtprel): Implement hook.
+#+	(print_operand_address): Handle UNSPEC_RELOC16 adn UNSPEC_RELOC32.
+#+	(m68k_libcall_value): Return result in A0 instead of D0 when asked by
+#+	m68k_call_* routines.
+#+	(sched_attr_op_type): Handle TLS symbols.
+#+	(gt-m68k.h): Include.
+#+	* config/m68k/m68k.h (FINAL_PRESCAN_INSN): Define.
+#+	(LEGITIMATE_PIC_OPERAND_P): Support TLS.
+#+
+# 2009-05-18  Martin Jambor  <mjambor@suse.cz>
+# 
+# 	* ipa-prop.c (ipa_check_stmt_modifications): Removed.
+diff --git a/gcc/config/m68k/constraints.md b/gcc/config/m68k/constraints.md
+index 8be4237..a4885cd 100644
+--- a/src/gcc/config/m68k/constraints.md
++++ b/src/gcc/config/m68k/constraints.md
+@@ -129,6 +129,11 @@
+   (and (match_code "const_int")
+        (match_test "ival < -0x8000 || ival > 0x7FFF")))
+ 
++(define_constraint "Cu"
++  "16-bit offset for wrapped symbols"
++  (and (match_code "const")
++       (match_test "m68k_unwrap_symbol (op, false) != op")))
++
+ (define_constraint "CQ"
+   "Integers valid for mvq."
+   (and (match_code "const_int")
+diff --git a/gcc/config/m68k/m68k-protos.h b/gcc/config/m68k/m68k-protos.h
+index 1b91709..08f8a91 100644
+--- a/src/gcc/config/m68k/m68k-protos.h
++++ b/src/gcc/config/m68k/m68k-protos.h
+@@ -59,13 +59,20 @@ extern bool m68k_illegitimate_symbolic_constant_p (rtx);
+ extern bool m68k_matches_q_p (rtx);
+ extern bool m68k_matches_u_p (rtx);
+ extern rtx legitimize_pic_address (rtx, enum machine_mode, rtx);
++extern rtx m68k_legitimize_tls_address (rtx);
++extern bool m68k_tls_reference_p (rtx, bool);
+ extern int valid_dbcc_comparison_p_2 (rtx, enum machine_mode);
+ extern rtx m68k_libcall_value (enum machine_mode);
+ extern rtx m68k_function_value (const_tree, const_tree);
+ extern int emit_move_sequence (rtx *, enum machine_mode, rtx);
+ extern bool m68k_movem_pattern_p (rtx, rtx, HOST_WIDE_INT, bool);
+ extern const char *m68k_output_movem (rtx *, rtx, HOST_WIDE_INT, bool);
++extern void m68k_final_prescan_insn (rtx, rtx *, int);
+ 
++/* Functions from m68k.c used in constraints.md.  */
++extern rtx m68k_unwrap_symbol (rtx, bool);
++
++/* Functions from m68k.c used in genattrtab.  */
+ #ifdef HAVE_ATTR_cpu
+ extern enum attr_cpu m68k_sched_cpu;
+ extern enum attr_mac m68k_sched_mac;
+diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c
+index 3e46302..c5a668a 100644
+--- a/src/gcc/config/m68k/m68k.c
++++ b/src/gcc/config/m68k/m68k.c
+@@ -46,6 +46,7 @@ along with GCC; see the file COPYING3.  If not see
+ /* ??? Need to add a dependency between m68k.o and sched-int.h.  */
+ #include "sched-int.h"
+ #include "insn-codes.h"
++#include "ggc.h"
+ 
+ enum reg_class regno_reg_class[] =
+ {
+@@ -144,6 +145,7 @@ static tree m68k_handle_fndecl_attribute (tree *node, tree name,
+ #if M68K_HONOR_TARGET_STRICT_ALIGNMENT
+ static bool m68k_return_in_memory (const_tree, const_tree);
+ #endif
++static void m68k_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
+ 
+ 
+ /* Specify the identification number of the library being built */
+@@ -249,5 +252,13 @@ const char *m68k_library_id_string = "_current_shared_library_a5_offset_";
+ #define TARGET_RETURN_IN_MEMORY m68k_return_in_memory
+ #endif
++
++#ifdef HAVE_AS_TLS
++#undef TARGET_HAVE_TLS
++#define TARGET_HAVE_TLS (true)
++
++#undef TARGET_ASM_OUTPUT_DWARF_DTPREL
++#define TARGET_ASM_OUTPUT_DWARF_DTPREL m68k_output_dwarf_dtprel
++#endif
+ 
+ static const struct attribute_spec m68k_attribute_table[] =
+ {
+@@ -1149,8 +1160,7 @@ m68k_expand_prologue (void)
+ 			    current_frame.reg_mask, true, true));
+     }
+ 
+-  if (flag_pic
+-      && !TARGET_SEP_DATA
++  if (!TARGET_SEP_DATA
+       && crtl->uses_pic_offset_table)
+     insn = emit_insn (gen_load_got (pic_offset_table_rtx));
+ }
+@@ -1853,7 +1866,7 @@ m68k_illegitimate_symbolic_constant_p (rtx x)
+ 	  && !offset_within_block_p (base, INTVAL (offset)))
+ 	return true;
+     }
+-  return false;
++  return m68k_tls_reference_p (x, false);
+ }
+ 
+ /* Return true if X is a legitimate constant address that can reach
+@@ -1881,7 +1894,7 @@ m68k_legitimate_constant_address_p (rtx x, unsigned int reach, bool strict_p)
+ 	return false;
+     }
+ 
+-  return true;
++  return !m68k_tls_reference_p (x, false);
+ }
+ 
+ /* Return true if X is a LABEL_REF for a jump table.  Assume that unplaced
+@@ -1948,15 +1961,17 @@ m68k_decompose_address (enum machine_mode mode, rtx x,
+   /* Check for GOT loads.  These are (bd,An,Xn) addresses if
+      TARGET_68020 && flag_pic == 2, otherwise they are (d16,An)
+      addresses.  */
+-  if (flag_pic
+-      && GET_CODE (x) == PLUS
+-      && XEXP (x, 0) == pic_offset_table_rtx
+-      && (GET_CODE (XEXP (x, 1)) == SYMBOL_REF
+-	  || GET_CODE (XEXP (x, 1)) == LABEL_REF))
++  if (GET_CODE (x) == PLUS
++      && XEXP (x, 0) == pic_offset_table_rtx)
+     {
+-      address->base = XEXP (x, 0);
+-      address->offset = XEXP (x, 1);
+-      return true;
++      /* As we are processing a PLUS, do not unwrap RELOC32 symbols --
++	 they are invalid in this context.  */
++      if (m68k_unwrap_symbol (XEXP (x, 1), false) != XEXP (x, 1))
++	{
++	  address->base = XEXP (x, 0);
++	  address->offset = XEXP (x, 1);
++	  return true;
++	}
+     }
+ 
+   /* The ColdFire FPU only accepts addressing modes 2-5.  */
+@@ -2101,6 +2116,243 @@ m68k_matches_u_p (rtx x)
+ 	  && !address.index);
+ }
+ 
++/* Return GOT pointer.  */
++
++static rtx
++m68k_get_gp (void)
++{
++  if (pic_offset_table_rtx == NULL_RTX)
++    pic_offset_table_rtx = gen_rtx_REG (Pmode, PIC_REG);
++
++  crtl->uses_pic_offset_table = 1;
++
++  return pic_offset_table_rtx;
++}
++
++/* M68K relocations, used to distinguish GOT and TLS relocations in UNSPEC
++   wrappers.  */
++enum m68k_reloc { RELOC_GOT, RELOC_TLSGD, RELOC_TLSLDM, RELOC_TLSLDO,
++		  RELOC_TLSIE, RELOC_TLSLE };
++
++#define TLS_RELOC_P(RELOC) ((RELOC) != RELOC_GOT)
++
++/* Wrap symbol X into unspec representing relocation RELOC.
++   BASE_REG - register that should be added to the result.
++   TEMP_REG - if non-null, temporary register.  */
++
++static rtx
++m68k_wrap_symbol (rtx x, enum m68k_reloc reloc, rtx base_reg, rtx temp_reg)
++{
++  bool use_x_p;
++
++  use_x_p = (base_reg == pic_offset_table_rtx) ? TARGET_XGOT : TARGET_XTLS;
++
++  if (TARGET_COLDFIRE && use_x_p)
++    /* When compiling with -mx{got, tls} switch the code will look like this:
++
++       move.l <X>@<RELOC>,<TEMP_REG>
++       add.l <BASE_REG>,<TEMP_REG>  */
++    {
++      /* Wrap X in UNSPEC_??? to tip m68k_output_addr_const_extra
++	 to put @RELOC after reference.  */
++      x = gen_rtx_UNSPEC (Pmode, gen_rtvec (2, x, GEN_INT (reloc)),
++			  UNSPEC_RELOC32);
++      x = gen_rtx_CONST (Pmode, x);
++
++      if (temp_reg == NULL)
++	{
++	  gcc_assert (can_create_pseudo_p ());
++	  temp_reg = gen_reg_rtx (Pmode);
++	}
++
++      emit_move_insn (temp_reg, x);
++      emit_insn (gen_addsi3 (temp_reg, temp_reg, base_reg));
++      x = temp_reg;
++    }
++  else
++    {
++      x = gen_rtx_UNSPEC (Pmode, gen_rtvec (2, x, GEN_INT (reloc)),
++			  UNSPEC_RELOC16);
++      x = gen_rtx_CONST (Pmode, x);
++
++      x = gen_rtx_PLUS (Pmode, base_reg, x);
++    }
++
++  return x;
++}
++
++/* Helper for m68k_unwrap_symbol.
++   Also, if unwrapping was successful (that is if (ORIG != <return value>)),
++   sets *RELOC_PTR to relocation type for the symbol.  */
++
++static rtx
++m68k_unwrap_symbol_1 (rtx orig, bool unwrap_reloc32_p,
++		      enum m68k_reloc *reloc_ptr)
++{
++  if (GET_CODE (orig) == CONST)
++    {
++      rtx x;
++      enum m68k_reloc dummy;
++
++      x = XEXP (orig, 0);
++
++      if (reloc_ptr == NULL)
++	reloc_ptr = &dummy;
++
++      /* Handle an addend.  */
++      if ((GET_CODE (x) == PLUS || GET_CODE (x) == MINUS)
++	  && CONST_INT_P (XEXP (x, 1)))
++	x = XEXP (x, 0);
++
++      if (GET_CODE (x) == UNSPEC)
++	{
++	  switch (XINT (x, 1))
++	    {
++	    case UNSPEC_RELOC16:
++	      orig = XVECEXP (x, 0, 0);
++	      *reloc_ptr = (enum m68k_reloc) INTVAL (XVECEXP (x, 0, 1));
++	      break;
++
++	    case UNSPEC_RELOC32:
++	      if (unwrap_reloc32_p)
++		{
++		  orig = XVECEXP (x, 0, 0);
++		  *reloc_ptr = (enum m68k_reloc) INTVAL (XVECEXP (x, 0, 1));
++		}
++	      break;
++
++	    default:
++	      break;
++	    }
++	}
++    }
++
++  return orig;
++}
++
++/* Unwrap symbol from UNSPEC_RELOC16 and, if unwrap_reloc32_p,
++   UNSPEC_RELOC32 wrappers.  */
++
++rtx
++m68k_unwrap_symbol (rtx orig, bool unwrap_reloc32_p)
++{
++  return m68k_unwrap_symbol_1 (orig, unwrap_reloc32_p, NULL);
++}
++
++/* Helper for m68k_final_prescan_insn.  */
++
++static int
++m68k_final_prescan_insn_1 (rtx *x_ptr, void *data ATTRIBUTE_UNUSED)
++{
++  rtx x = *x_ptr;
++
++  if (m68k_unwrap_symbol (x, true) != x)
++    /* For rationale of the below, see comment in m68k_final_prescan_insn.  */
++    {
++      rtx plus;
++
++      gcc_assert (GET_CODE (x) == CONST);
++      plus = XEXP (x, 0);
++
++      if (GET_CODE (plus) == PLUS || GET_CODE (plus) == MINUS)
++	{
++	  rtx unspec;
++	  rtx addend;
++
++	  unspec = XEXP (plus, 0);
++	  gcc_assert (GET_CODE (unspec) == UNSPEC);
++	  addend = XEXP (plus, 1);
++	  gcc_assert (CONST_INT_P (addend));
++
++	  /* We now have all the pieces, rearrange them.  */
++
++	  /* Move symbol to plus.  */
++	  XEXP (plus, 0) = XVECEXP (unspec, 0, 0);
++
++	  /* Move plus inside unspec.  */
++	  XVECEXP (unspec, 0, 0) = plus;
++
++	  /* Move unspec to top level of const.  */
++	  XEXP (x, 0) = unspec;
++	}
++
++      return -1;
++    }
++
++  return 0;
++}
++
++/* Prescan insn before outputing assembler for it.  */
++
++void
++m68k_final_prescan_insn (rtx insn ATTRIBUTE_UNUSED,
++			 rtx *operands, int n_operands)
++{
++  int i;
++
++  /* Combine and, possibly, other optimizations may do good job
++     converting
++       (const (unspec [(symbol)]))
++     into
++       (const (plus (unspec [(symbol)])
++                    (const_int N))).
++     The problem with this is emitting @TLS or @GOT decorations.
++     The decoration is emitted when processing (unspec), so the
++     result would be "#symbol@TLSLE+N" instead of "#symbol+N@TLSLE".
++
++     It seems that the easiest solution to this is to convert such
++     operands to
++       (const (unspec [(plus (symbol)
++                             (const_int N))])).
++     Note, that the top level of operand remains intact, so we don't have
++     to patch up anything outside of the operand.  */
++
++  for (i = 0; i < n_operands; ++i)
++    {
++      rtx op;
++
++      op = operands[i];
++
++      for_each_rtx (&op, m68k_final_prescan_insn_1, NULL);
++    }
++}
++
++/* Move X to a register and add REG_EQUAL note pointing to ORIG.
++   If REG is non-null, use it; generate new pseudo otherwise.  */
++
++static rtx
++m68k_move_to_reg (rtx x, rtx orig, rtx reg)
++{
++  rtx insn;
++
++  if (reg == NULL_RTX)
++    {
++      gcc_assert (can_create_pseudo_p ());
++      reg = gen_reg_rtx (Pmode);
++    }
++
++  insn = emit_move_insn (reg, x);
++  /* Put a REG_EQUAL note on this insn, so that it can be optimized
++     by loop.  */
++  set_unique_reg_note (insn, REG_EQUAL, orig);
++
++  return reg;
++}
++
++/* Does the same as m68k_wrap_symbol, but returns a memory reference to
++   GOT slot.  */
++
++static rtx
++m68k_wrap_symbol_into_got_ref (rtx x, enum m68k_reloc reloc, rtx temp_reg)
++{
++  x = m68k_wrap_symbol (x, reloc, m68k_get_gp (), temp_reg);
++
++  x = gen_rtx_MEM (Pmode, x);
++  MEM_READONLY_P (x) = 1;
++
++  return x;
++}
++
+ /* Legitimize PIC addresses.  If the address is already
+    position-independent, we return ORIG.  Newly generated
+    position-independent addresses go to REG.  If we need more
+@@ -2152,42 +2404,15 @@ legitimize_pic_address (rtx orig, enum machine_mode mode ATTRIBUTE_UNUSED,
+     {
+       gcc_assert (reg);
+ 
+-      if (TARGET_COLDFIRE && TARGET_XGOT)
+-	/* When compiling with -mxgot switch the code for the above
+-	   example will look like this:
+-
+-	   movel a5, a0
+-	   addl _foo@GOT, a0
+-	   movel a0@, a0
+-	   movel #12345, a0@  */
+-	{
+-	  rtx pic_offset;
+-
+-	  /* Wrap ORIG in UNSPEC_GOTOFF to tip m68k_output_addr_const_extra
+-	     to put @GOT after reference.  */
+-	  pic_offset = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, orig),
+-				       UNSPEC_GOTOFF);
+-	  pic_offset = gen_rtx_CONST (Pmode, pic_offset);
+-	  emit_move_insn (reg, pic_offset);
+-	  emit_insn (gen_addsi3 (reg, reg, pic_offset_table_rtx));
+-	  pic_ref = gen_rtx_MEM (Pmode, reg);
+-	}
+-      else
+-	pic_ref = gen_rtx_MEM (Pmode,
+-			       gen_rtx_PLUS (Pmode,
+-					     pic_offset_table_rtx, orig));
+-      crtl->uses_pic_offset_table = 1;
+-      MEM_READONLY_P (pic_ref) = 1;
+-      emit_move_insn (reg, pic_ref);
+-      return reg;
++      pic_ref = m68k_wrap_symbol_into_got_ref (orig, RELOC_GOT, reg);
++      pic_ref = m68k_move_to_reg (pic_ref, orig, reg);
+     }
+   else if (GET_CODE (orig) == CONST)
+     {
+       rtx base;
+ 
+       /* Make sure this has not already been legitimized.  */
+-      if (GET_CODE (XEXP (orig, 0)) == PLUS
+-	  && XEXP (XEXP (orig, 0), 0) == pic_offset_table_rtx)
++      if (m68k_unwrap_symbol (orig, true) != orig)
+ 	return orig;
+ 
+       gcc_assert (reg);
+@@ -2200,13 +2425,244 @@ legitimize_pic_address (rtx orig, enum machine_mode mode ATTRIBUTE_UNUSED,
+ 				     base == reg ? 0 : reg);
+ 
+       if (GET_CODE (orig) == CONST_INT)
+-	return plus_constant (base, INTVAL (orig));
+-      pic_ref = gen_rtx_PLUS (Pmode, base, orig);
+-      /* Likewise, should we set special REG_NOTEs here?  */
++	pic_ref = plus_constant (base, INTVAL (orig));
++      else
++	pic_ref = gen_rtx_PLUS (Pmode, base, orig);
+     }
++
+   return pic_ref;
+ }
+ 
++/* The __tls_get_addr symbol.  */
++static GTY(()) rtx m68k_tls_get_addr;
++
++/* Return SYMBOL_REF for __tls_get_addr.  */
++
++static rtx
++m68k_get_tls_get_addr (void)
++{
++  if (m68k_tls_get_addr == NULL_RTX)
++    m68k_tls_get_addr = init_one_libfunc ("__tls_get_addr");
++
++  return m68k_tls_get_addr;
++}
++
++/* Return libcall result in A0 instead of usual D0.  */
++static bool m68k_libcall_value_in_a0_p = false;
++
++/* Emit instruction sequence that calls __tls_get_addr.  X is
++   the TLS symbol we are referencing and RELOC is the symbol type to use
++   (either TLSGD or TLSLDM).  EQV is the REG_EQUAL note for the sequence
++   emitted.  A pseudo register with result of __tls_get_addr call is
++   returned.  */
++
++static rtx
++m68k_call_tls_get_addr (rtx x, rtx eqv, enum m68k_reloc reloc)
++{
++  rtx a0;
++  rtx insns;
++  rtx dest;
++
++  /* Emit the call sequence.  */
++  start_sequence ();
++
++  /* FIXME: Unfortunately, emit_library_call_value does not
++     consider (plus (%a5) (const (unspec))) to be a good enough
++     operand for push, so it forces it into a register.  The bad
++     thing about this is that combiner, due to copy propagation and other
++     optimizations, sometimes can not later fix this.  As a consequence,
++     additional register may be allocated resulting in a spill.
++     For reference, see args processing loops in
++     calls.c:emit_library_call_value_1.
++     For testcase, see gcc.target/m68k/tls-{gd, ld}.c  */
++  x = m68k_wrap_symbol (x, reloc, m68k_get_gp (), NULL_RTX);
++
++  /* __tls_get_addr() is not a libcall, but emitting a libcall_value
++     is the simpliest way of generating a call.  The difference between
++     __tls_get_addr() and libcall is that the result is returned in D0
++     instead of A0.  To workaround this, we use m68k_libcall_value_in_a0_p
++     which temporarily switches returning the result to A0.  */ 
++
++  m68k_libcall_value_in_a0_p = true;
++  a0 = emit_library_call_value (m68k_get_tls_get_addr (), NULL_RTX, LCT_PURE,
++				Pmode, 1, x, Pmode);
++  m68k_libcall_value_in_a0_p = false;
++  
++  insns = get_insns ();
++  end_sequence ();
++
++  gcc_assert (can_create_pseudo_p ());
++  dest = gen_reg_rtx (Pmode);
++  emit_libcall_block (insns, dest, a0, eqv);
++
++  return dest;
++}
++
++/* The __tls_get_addr symbol.  */
++static GTY(()) rtx m68k_read_tp;
++
++/* Return SYMBOL_REF for __m68k_read_tp.  */
++
++static rtx
++m68k_get_m68k_read_tp (void)
++{
++  if (m68k_read_tp == NULL_RTX)
++    m68k_read_tp = init_one_libfunc ("__m68k_read_tp");
++
++  return m68k_read_tp;
++}
++
++/* Emit instruction sequence that calls __m68k_read_tp.
++   A pseudo register with result of __m68k_read_tp call is returned.  */
++
++static rtx 
++m68k_call_m68k_read_tp (void)
++{
++  rtx a0;
++  rtx eqv;
++  rtx insns;
++  rtx dest;
++
++  start_sequence ();
++
++  /* __m68k_read_tp() is not a libcall, but emitting a libcall_value
++     is the simpliest way of generating a call.  The difference between
++     __m68k_read_tp() and libcall is that the result is returned in D0
++     instead of A0.  To workaround this, we use m68k_libcall_value_in_a0_p
++     which temporarily switches returning the result to A0.  */ 
++
++  /* Emit the call sequence.  */
++  m68k_libcall_value_in_a0_p = true;
++  a0 = emit_library_call_value (m68k_get_m68k_read_tp (), NULL_RTX, LCT_PURE,
++				Pmode, 0);
++  m68k_libcall_value_in_a0_p = false;
++  insns = get_insns ();
++  end_sequence ();
++
++  /* Attach a unique REG_EQUIV, to allow the RTL optimizers to
++     share the m68k_read_tp result with other IE/LE model accesses.  */
++  eqv = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, const1_rtx), UNSPEC_RELOC32);
++
++  gcc_assert (can_create_pseudo_p ());
++  dest = gen_reg_rtx (Pmode);
++  emit_libcall_block (insns, dest, a0, eqv);
++
++  return dest;
++}
++
++/* Return a legitimized address for accessing TLS SYMBOL_REF X.
++   For explanations on instructions sequences see TLS/NPTL ABI for m68k and
++   ColdFire.  */
++
++rtx
++m68k_legitimize_tls_address (rtx orig)
++{
++  switch (SYMBOL_REF_TLS_MODEL (orig))
++    {
++    case TLS_MODEL_GLOBAL_DYNAMIC:
++      orig = m68k_call_tls_get_addr (orig, orig, RELOC_TLSGD);
++      break;
++
++    case TLS_MODEL_LOCAL_DYNAMIC:
++      {
++	rtx eqv;
++	rtx a0;
++	rtx x;
++ 
++	/* Attach a unique REG_EQUIV, to allow the RTL optimizers to
++	   share the LDM result with other LD model accesses.  */
++	eqv = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, const0_rtx),
++			      UNSPEC_RELOC32);
++
++	a0 = m68k_call_tls_get_addr (orig, eqv, RELOC_TLSLDM);
++
++	x = m68k_wrap_symbol (orig, RELOC_TLSLDO, a0, NULL_RTX);
++
++	if (can_create_pseudo_p ())
++	  x = m68k_move_to_reg (x, orig, NULL_RTX);
++
++	orig = x;
++	break;
++      }
++
++    case TLS_MODEL_INITIAL_EXEC:
++      {
++	rtx a0;
++	rtx x;
++
++	a0 = m68k_call_m68k_read_tp ();
++
++	x = m68k_wrap_symbol_into_got_ref (orig, RELOC_TLSIE, NULL_RTX);
++	x = gen_rtx_PLUS (Pmode, x, a0);
++
++	if (can_create_pseudo_p ())
++	  x = m68k_move_to_reg (x, orig, NULL_RTX);
++
++	orig = x;
++	break;
++      }
++
++    case TLS_MODEL_LOCAL_EXEC:
++      {
++	rtx a0;
++	rtx x;
++
++	a0 = m68k_call_m68k_read_tp ();
++
++	x = m68k_wrap_symbol (orig, RELOC_TLSLE, a0, NULL_RTX);
++
++	if (can_create_pseudo_p ())
++	  x = m68k_move_to_reg (x, orig, NULL_RTX);
++
++	orig = x;
++	break;
++      }
++
++    default:
++      gcc_unreachable ();
++    }
++
++  return orig;
++}
++
++
++/* Helper for m68k_tls_referenced_p.  */
++
++static int
++m68k_tls_reference_p_1 (rtx *x_ptr, void *data ATTRIBUTE_UNUSED)
++{
++  /* Note: this is not the same as m68k_tls_symbol_p.  */
++  if (GET_CODE (*x_ptr) == SYMBOL_REF)
++    return SYMBOL_REF_TLS_MODEL (*x_ptr) != 0 ? 1 : 0;
++
++  /* Don't recurse into legitimate TLS references.  */
++  if (m68k_tls_reference_p (*x_ptr, true))
++    return -1;
++
++  return 0;
++}
++
++/* If !LEGITIMATE_P, return true if X is a TLS symbol reference,
++   though illegitimate one.
++   If LEGITIMATE_P, return true if X is a legitimate TLS symbol reference.  */
++
++bool
++m68k_tls_reference_p (rtx x, bool legitimate_p)
++{
++  if (!TARGET_HAVE_TLS)
++    return false;
++
++  if (!legitimate_p)
++    return for_each_rtx (&x, m68k_tls_reference_p_1, NULL) == 1 ? true : false;
++  else
++    {
++      enum m68k_reloc reloc = RELOC_GOT;
++
++      return (m68k_unwrap_symbol_1 (x, true, &reloc) != x
++	      && TLS_RELOC_P (reloc));
++    }
++}
++
+ 
+ 
+ #define USE_MOVQ(i)	((unsigned) ((i) + 128) <= 255)
+@@ -3999,18 +4468,92 @@ print_operand (FILE *file, rtx op, int letter)
+     }
+ }
+ 
++/* Return string for TLS relocation RELOC.  */
++
++static const char *
++m68k_get_reloc_decoration (enum m68k_reloc reloc)
++{
++  /* To my knowledge, !MOTOROLA assemblers don't support TLS.  */
++  gcc_assert (MOTOROLA || reloc == RELOC_GOT);
++
++  switch (reloc)
++    {
++    case RELOC_GOT:
++      if (MOTOROLA)
++	{
++	  if (flag_pic == 1 && TARGET_68020)
++	    return "@GOT.w";
++	  else
++	    return "@GOT";
++	}
++      else
++	{
++	  if (TARGET_68020)
++	    {
++	      switch (flag_pic)
++		{
++		case 1:
++		  return ":w";
++		case 2:
++		  return ":l";
++		default:
++		  return "";
++		}
++	    }
++	}
++
++    case RELOC_TLSGD:
++      return "@TLSGD";
++
++    case RELOC_TLSLDM:
++      return "@TLSLDM";
++
++    case RELOC_TLSLDO:
++      return "@TLSLDO";
++
++    case RELOC_TLSIE:
++      return "@TLSIE";
++
++    case RELOC_TLSLE:
++      return "@TLSLE";
++
++    default:
++      gcc_unreachable ();
++    }
++}
++
+ /* m68k implementation of OUTPUT_ADDR_CONST_EXTRA.  */
+ 
+ bool
+ m68k_output_addr_const_extra (FILE *file, rtx x)
+ {
+-  if (GET_CODE (x) != UNSPEC || XINT (x, 1) != UNSPEC_GOTOFF)
+-    return false;
++  if (GET_CODE (x) == UNSPEC)
++    {
++      switch (XINT (x, 1))
++	{
++	case UNSPEC_RELOC16:
++	case UNSPEC_RELOC32:
++	  output_addr_const (file, XVECEXP (x, 0, 0));
++	  fputs (m68k_get_reloc_decoration (INTVAL (XVECEXP (x, 0, 1))), file);
++	  return true;
+ 
+-  output_addr_const (file, XVECEXP (x, 0, 0));
+-  /* ??? What is the non-MOTOROLA syntax?  */
+-  fputs ("@GOT", file);
+-  return true;
++	default:
++	  break;
++	}
++    }
++
++  return false;
++}
++
++/* M68K implementation of TARGET_ASM_OUTPUT_DWARF_DTPREL.  */
++
++static void
++m68k_output_dwarf_dtprel (FILE *file, int size, rtx x)
++{
++  gcc_assert (size == 4);
++  fputs ("\t.long\t", file);
++  output_addr_const (file, x);
++  fputs ("@TLSLDO+0x8000", file);
+ }
+ 
+ 
+@@ -4100,15 +4643,8 @@ print_operand_address (FILE *file, rtx addr)
+ 	  else
+ 	    {
+ 	      if (address.offset)
+-		{
+-		  output_addr_const (file, address.offset);
+-		  if (flag_pic && address.base == pic_offset_table_rtx)
+-		    {
+-		      fprintf (file, "@GOT");
+-		      if (flag_pic == 1 && TARGET_68020)
+-			fprintf (file, ".w");
+-		    }
+-		}
++		output_addr_const (file, address.offset);
++
+ 	      putc ('(', file);
+ 	      if (address.base)
+ 		fputs (M68K_REGNAME (REGNO (address.base)), file);
+@@ -4141,19 +4677,7 @@ print_operand_address (FILE *file, rtx addr)
+ 		    fputs (M68K_REGNAME (REGNO (address.base)), file);
+ 		  fprintf (file, "@(");
+ 		  if (address.offset)
+-		    {
+-		      output_addr_const (file, address.offset);
+-		      if (address.base == pic_offset_table_rtx && TARGET_68020)
+-			switch (flag_pic)
+-			  {
+-			  case 1:
+-			    fprintf (file, ":w"); break;
+-			  case 2:
+-			    fprintf (file, ":l"); break;
+-			  default:
+-			    break;
+-			  }
+-		    }
++		    output_addr_const (file, address.offset);
+ 		}
+ 	      /* Print the ",index" component, if any.  */
+ 	      if (address.index)
+@@ -4641,7 +5165,8 @@ m68k_libcall_value (enum machine_mode mode)
+   default:
+     break;
+   }
+-  return gen_rtx_REG (mode, D0_REG);
++
++  return gen_rtx_REG (mode, m68k_libcall_value_in_a0_p ? A0_REG : D0_REG);
+ }
+ 
+ rtx
+@@ -4907,9 +5432,8 @@ sched_attr_op_type (rtx insn, bool opx_p, bool address_p)
+ 	  return OP_TYPE_IMM_L;
+ 
+ 	default:
+-	  if (GET_CODE (op) == SYMBOL_REF)
+-	    /* ??? Just a guess.  Probably we can guess better using length
+-	       attribute of the instructions.  */
++	  if (symbolic_operand (m68k_unwrap_symbol (op, false), VOIDmode))
++	    /* Just a guess.  */
+ 	    return OP_TYPE_IMM_W;
+ 
+ 	  return OP_TYPE_IMM_L;
+@@ -5854,3 +6378,5 @@ m68k_sched_indexed_address_bypass_p (rtx pro, rtx con)
+       return 0;
+     }
+ }
++
++#include "gt-m68k.h"
+diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h
+index e91ab00..2d3b592 100644
+--- a/src/gcc/config/m68k/m68k.h
++++ b/src/gcc/config/m68k/m68k.h
+@@ -750,7 +750,8 @@ __transfer_from_trampoline ()					\
+ 
+ #define LEGITIMATE_PIC_OPERAND_P(X)				\
+   (!symbolic_operand (X, VOIDmode)				\
+-   || (TARGET_PCREL && REG_STRICT_P))
++   || (TARGET_PCREL && REG_STRICT_P)				\
++   || m68k_tls_reference_p (X, true))
+ 
+ #define REG_OK_FOR_BASE_P(X) \
+   m68k_legitimate_base_reg_p (X, REG_STRICT_P)
+@@ -967,6 +968,9 @@ do { if (cc_prev_status.flags & CC_IN_68881)			\
+   assemble_name ((FILE), (NAME)),		\
+   fprintf ((FILE), ",%u\n", (int)(ROUNDED)))
+ 
++#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \
++  m68k_final_prescan_insn (INSN, OPVEC, NOPERANDS)
++
+ /* On the 68000, we use several CODE characters:
+    '.' for dot needed in Motorola-style opcode names.
+    '-' for an operand pushing on the stack:
+diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md
+index 33058fa..037bb37 100644
+--- a/src/gcc/config/m68k/m68k.md
++++ b/src/gcc/config/m68k/m68k.md
+@@ -116,7 +116,8 @@
+    (UNSPEC_GOT 3)
+    (UNSPEC_IB 4)
+    (UNSPEC_TIE 5)
+-   (UNSPEC_GOTOFF 6)
++   (UNSPEC_RELOC16 6)
++   (UNSPEC_RELOC32 7)
+   ])
+ 
+ ;; UNSPEC_VOLATILE usage:
+@@ -869,7 +870,41 @@
+ {
+   rtx tmp, base, offset;
+ 
+-  if (flag_pic && !TARGET_PCREL && symbolic_operand (operands[1], SImode))
++  /* Recognize the case where operand[1] is a reference to thread-local
++     data and load its address to a register.  */
++  if (!TARGET_PCREL && m68k_tls_reference_p (operands[1], false))
++    {
++      rtx tmp = operands[1];
++      rtx addend = NULL;
++
++      if (GET_CODE (tmp) == CONST && GET_CODE (XEXP (tmp, 0)) == PLUS)
++        {
++          addend = XEXP (XEXP (tmp, 0), 1);
++          tmp = XEXP (XEXP (tmp, 0), 0);
++        }
++
++      gcc_assert (GET_CODE (tmp) == SYMBOL_REF);
++      gcc_assert (SYMBOL_REF_TLS_MODEL (tmp) != 0);
++
++      tmp = m68k_legitimize_tls_address (tmp);
++
++      if (addend)
++        {
++	  if (!REG_P (tmp))
++	    {
++	      rtx reg;
++
++	      reg = gen_reg_rtx (Pmode);
++	      emit_move_insn (reg, tmp);
++	      tmp = reg;
++	    }
++
++          tmp = gen_rtx_PLUS (SImode, tmp, addend);
++	}
++
++      operands[1] = tmp;
++    }
++  else if (flag_pic && !TARGET_PCREL && symbolic_operand (operands[1], SImode))
+     {
+       /* The source is an address which requires PIC relocation.
+          Call legitimize_pic_address with the source, mode, and a relocation
+@@ -2428,9 +2463,9 @@
+   "* return output_addsi3 (operands);")
+ 
+ (define_insn_and_split "*addsi3_5200"
+-  [(set (match_operand:SI 0 "nonimmediate_operand"         "=mr,mr,a,m,r,  ?a, ?a,?a,?a")
+-	(plus:SI (match_operand:SI 1 "general_operand"     "%0, 0, 0,0,0,   a,  a, r, a")
+-		 (match_operand:SI 2 "general_src_operand" " I, L, J,d,mrKi,Cj, r, a, J")))]
++  [(set (match_operand:SI 0 "nonimmediate_operand"         "=mr,mr,a,  m,r,  ?a, ?a,?a,?a")
++	(plus:SI (match_operand:SI 1 "general_operand"     "%0, 0, 0,  0,0,   a,  a, r, a")
++		 (match_operand:SI 2 "general_src_operand" " I, L, JCu,d,mrKi,Cj, r, a, JCu")))]
+   "TARGET_COLDFIRE"
+ {
+   switch (which_alternative)
+@@ -2472,9 +2507,9 @@
+ 	(plus:SI (match_dup 0)
+ 		 (match_dup 1)))]
+   ""
+-  [(set_attr "type" "aluq_l,aluq_l,lea,alu_l,alu_l,*,lea,lea,lea")
+-   (set_attr "opy" "2,2,*,2,2,*,*,*,*")
+-   (set_attr "opy_type" "*,*,mem5,*,*,*,mem6,mem6,mem5")])
++  [(set_attr "type"     "aluq_l,aluq_l,lea, alu_l,alu_l,*,lea, lea, lea")
++   (set_attr "opy"      "2,     2,     *,   2,    2,    *,*,   *,   *")
++   (set_attr "opy_type" "*,     *,     mem5,*,    *,    *,mem6,mem6,mem5")])
+ 
+ (define_insn ""
+   [(set (match_operand:SI 0 "nonimmediate_operand" "=a")
+diff --git a/gcc/config/m68k/m68k.opt b/gcc/config/m68k/m68k.opt
+index b0d3b3c..d5aa9fa 100644
+--- a/src/gcc/config/m68k/m68k.opt
++++ b/src/gcc/config/m68k/m68k.opt
+@@ -182,3 +182,7 @@ Tune for the specified target CPU or architecture
+ mxgot
+ Target Report Mask(XGOT)
+ Support more than 8192 GOT entries on ColdFire
++
++mxtls
++Target Report Mask(XTLS)
++Support TLS segment larger than 64K
+diff --git a/gcc/config/m68k/predicates.md b/gcc/config/m68k/predicates.md
+index 417989f..6ca261f 100644
+--- a/src/gcc/config/m68k/predicates.md
++++ b/src/gcc/config/m68k/predicates.md
+@@ -135,7 +135,9 @@
+   (match_code "sign_extend,zero_extend"))
+ 
+ ;; Returns true if OP is either a symbol reference or a sum of a
+-;; symbol reference and a constant.
++;; symbol reference and a constant.  This predicate is for "raw"
++;; symbol references not yet processed by legitimize*_address,
++;; hence we do not handle UNSPEC_{XGOT, TLS, XTLS} here.
+ 
+ (define_predicate "symbolic_operand"
+   (match_code "symbol_ref,label_ref,const")
+diff --git a/gcc/configure b/gcc/configure
+index 6033f33..4bab41d 100755
+--- a/src/gcc/configure
++++ b/src/gcc/configure
+@@ -21984,6 +21984,22 @@ x:
+ 	tls_first_minor=16
+ 	tls_as_opt='-32 --fatal-warnings'
+ 	;;
++  m68k-*-*)
++    conftest_s='
++	.section .tdata,"awT",@progbits
++x:
++	.word 2
++	.text
++foo:
++	move.l x@TLSGD(%a5),%a0
++	move.l x@TLSLDM(%a5),%a0
++	move.l x@TLSLDO(%a5),%a0
++	move.l x@TLSIE(%a5),%a0
++	move.l x@TLSLE(%a5),%a0'
++	tls_first_major=2
++	tls_first_minor=19
++	tls_as_opt='--fatal-warnings'
++	;;
+   powerpc-*-*)
+     conftest_s='
+ 	.section ".tdata","awT",@progbits
+diff --git a/gcc/configure.ac b/gcc/configure.ac
+index 5f9276c..80f9422 100644
+--- a/src/gcc/configure.ac
++++ b/src/gcc/configure.ac
+@@ -2570,6 +2570,22 @@ x:
+ 	tls_first_minor=16
+ 	tls_as_opt='-32 --fatal-warnings'
+ 	;;
++  m68k-*-*)
++    conftest_s='
++	.section .tdata,"awT",@progbits
++x:
++	.word 2
++	.text
++foo:
++	move.l x@TLSGD(%a5),%a0
++	move.l x@TLSLDM(%a5),%a0
++	move.l x@TLSLDO(%a5),%a0
++	move.l x@TLSIE(%a5),%a0
++	move.l x@TLSLE(%a5),%a0'
++	tls_first_major=2
++	tls_first_minor=19
++	tls_as_opt='--fatal-warnings'
++	;;
+   powerpc-*-*)
+     conftest_s='
+ 	.section ".tdata","awT",@progbits
+#diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
+#index 545fb82..994360b 100644
+#--- a/gcc/testsuite/ChangeLog
+#+++ b/gcc/testsuite/ChangeLog
+#@@ -1,3 +1,16 @@
+#+2009-05-18  Maxim Kuvyrkov  <maxim@codesourcery.com>
+#+
+#+	* gcc.target/m68k/tls-ie.c: New test.
+#+	* gcc.target/m68k/tls-le.c: New test.
+#+	* gcc.target/m68k/tls-gd.c: New test.
+#+	* gcc.target/m68k/tls-ld.c: New test.
+#+	* gcc.target/m68k/tls-ie-xgot.c: New test.
+#+	* gcc.target/m68k/tls-le-xtls.c: New test.
+#+	* gcc.target/m68k/tls-gd-xgot.c: New test.
+#+	* gcc.target/m68k/tls-ld-xgot.c: New test.
+#+	* gcc.target/m68k/tls-ld-xtls.c: New test.
+#+	* gcc.target/m68k/tls-ld-xgot-xtls.c: New test.
+#+
+# 2009-05-18  Martin Jambor  <mjambor@suse.cz>
+# 
+# 	* gcc.dg/ipa/modif-1.c: Do not check for unmodified int parameter.
+diff --git a/gcc/testsuite/gcc.target/m68k/tls-gd-xgot.c b/gcc/testsuite/gcc.target/m68k/tls-gd-xgot.c
+new file mode 100644
+index 0000000..2a4900b
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-gd-xgot.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -fpic -mxgot" } */
++/* { dg-final { scan-assembler "#foo@TLSGD,\%\[ad\]\[0-7\]" } } */
++/* { dg-final { scan-assembler "bsr.l __tls_get_addr@PLTPC" } } */
++
++extern int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+diff --git a/gcc/testsuite/gcc.target/m68k/tls-gd.c b/gcc/testsuite/gcc.target/m68k/tls-gd.c
+new file mode 100644
+index 0000000..2b69fbd
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-gd.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -fpic" } */
++/* { dg-final { scan-assembler "foo@TLSGD\\(\%a5\\)" } } */
++/* { dg-final { scan-assembler "bsr.l __tls_get_addr@PLTPC" } } */
++
++extern int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+diff --git a/gcc/testsuite/gcc.target/m68k/tls-ie-xgot.c b/gcc/testsuite/gcc.target/m68k/tls-ie-xgot.c
+new file mode 100644
+index 0000000..d3fbfda
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-ie-xgot.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -mxgot" } */
++/* { dg-final { scan-assembler "jsr __m68k_read_tp" } } */
++/* { dg-final { scan-assembler "#foo@TLSIE,\%\[ad\]\[0-7\]" } } */
++
++extern int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+diff --git a/gcc/testsuite/gcc.target/m68k/tls-ie.c b/gcc/testsuite/gcc.target/m68k/tls-ie.c
+new file mode 100644
+index 0000000..2661f9f
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-ie.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2" } */
++/* { dg-final { scan-assembler "jsr __m68k_read_tp" } } */
++/* { dg-final { scan-assembler "foo@TLSIE\\(\%a5\\)" } } */
++
++extern int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+diff --git a/gcc/testsuite/gcc.target/m68k/tls-ld-xgot-xtls.c b/gcc/testsuite/gcc.target/m68k/tls-ld-xgot-xtls.c
+new file mode 100644
+index 0000000..4817de0
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-ld-xgot-xtls.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -fpic -mxgot -mxtls" } */
++/* { dg-final { scan-assembler "#foo@TLSLDM,\%\[ad\]\[0-7\]" } } */
++/* { dg-final { scan-assembler "bsr.l __tls_get_addr@PLTPC" } } */
++/* { dg-final { scan-assembler "#foo@TLSLDO,\%\[ad\]\[0-7\]" } } */
++
++static int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+diff --git a/gcc/testsuite/gcc.target/m68k/tls-ld-xgot.c b/gcc/testsuite/gcc.target/m68k/tls-ld-xgot.c
+new file mode 100644
+index 0000000..f95f719
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-ld-xgot.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -fpic -mxgot" } */
++/* { dg-final { scan-assembler "#foo@TLSLDM,\%\[ad\]\[0-7\]" } } */
++/* { dg-final { scan-assembler "bsr.l __tls_get_addr@PLTPC" } } */
++/* { dg-final { scan-assembler "lea \\(foo@TLSLDO,\%a0\\)" } } */
++
++static int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+diff --git a/gcc/testsuite/gcc.target/m68k/tls-ld-xtls.c b/gcc/testsuite/gcc.target/m68k/tls-ld-xtls.c
+new file mode 100644
+index 0000000..1bc3eaf
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-ld-xtls.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -fpic -mxtls" } */
++/* { dg-final { scan-assembler "foo@TLSLDM\\(\%a5\\)" } } */
++/* { dg-final { scan-assembler "bsr.l __tls_get_addr@PLTPC" } } */
++/* { dg-final { scan-assembler "#foo@TLSLDO,\%\[ad\]\[0-7\]" } } */
++
++static int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+diff --git a/gcc/testsuite/gcc.target/m68k/tls-ld.c b/gcc/testsuite/gcc.target/m68k/tls-ld.c
+new file mode 100644
+index 0000000..556a117
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-ld.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -fpic" } */
++/* { dg-final { scan-assembler "foo@TLSLDM\\(\%a5\\)" } } */
++/* { dg-final { scan-assembler "bsr.l __tls_get_addr@PLTPC" } } */
++/* { dg-final { scan-assembler "lea \\(foo@TLSLDO,\%a0\\)" } } */
++
++static int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+diff --git a/gcc/testsuite/gcc.target/m68k/tls-le-xtls.c b/gcc/testsuite/gcc.target/m68k/tls-le-xtls.c
+new file mode 100644
+index 0000000..9006115
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-le-xtls.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -mxtls" } */
++/* { dg-final { scan-assembler "jsr __m68k_read_tp" } } */
++/* { dg-final { scan-assembler "#foo@TLSLE,\%\[ad\]\[0-7\]" } } */
++
++static int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+diff --git a/gcc/testsuite/gcc.target/m68k/tls-le.c b/gcc/testsuite/gcc.target/m68k/tls-le.c
+new file mode 100644
+index 0000000..1c0eab2
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-le.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2" } */
++/* { dg-final { scan-assembler "jsr __m68k_read_tp" } } */
++/* { dg-final { scan-assembler "lea \\(foo@TLSLE,\%a0\\)" } } */
++
++static int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+diff -pruN gcc-4.4.4/gcc/config/m68k/m68k.h gcc-4.4.4-ft/gcc/config/m68k/m68k.h
+--- a/src/gcc/config/m68k/m68k.h	2010-06-16 12:44:04.855797367 +1000
++++ b/src/gcc/config/m68k/m68k.h	2010-06-16 12:30:52.000000000 +1000
+@@ -778,7 +778,10 @@ __transfer_from_trampoline ()					\
+ #define COPY_ONCE(Y) if (!copied) { Y = copy_rtx (Y); copied = ch = 1; }
+ #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN)   \
+ { register int ch = (X) != (OLDX);					\
+-  if (GET_CODE (X) == PLUS)						\
++  if (HAVE_AS_TLS && (GET_CODE (X) == SYMBOL_REF) &&			\
++      (SYMBOL_REF_TLS_MODEL (X) != 0))					\
++    m68k_legitimize_tls_address (X);					\
++  else if (GET_CODE (X) == PLUS)					\
+     { int copied = 0;							\
+       if (GET_CODE (XEXP (X, 0)) == MULT)				\
+ 	{ COPY_ONCE (X); XEXP (X, 0) = force_operand (XEXP (X, 0), 0);}	\
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-ice-apport.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-ice-apport.diff
@@ -0,0 +1,25 @@
+# DP: Report an ICE to apport (if apport is available
+# DP: and the environment variable GCC_NOAPPORT is not set)
+
+---
+ gcc/gcc.c |    9 +++++++++
+ 1 files changed, 9 insertions(+), 0 deletions(-)
+
+--- a/src/gcc/gcc.c
++++ b/src/gcc/gcc.c
+@@ -6325,6 +6325,15 @@ retry_ice (const char *prog, const char **argv)
+ 	    {
+ 	      notice ("Preprocessed source stored into %s file, please attach this to your bugreport.\n",
+ 		      temp_filenames[attempt * 2]);
++	      if (!getenv ("GCC_NOAPPORT")
++		  && !access ("/usr/share/apport/gcc_ice_hook", R_OK | X_OK))
++		{
++		  char *cmd = XNEWVEC (char, 50 + strlen (temp_filenames[attempt * 2]) + strlen (new_argv[0]));
++		  sprintf (cmd, "/usr/share/apport/gcc_ice_hook %s %s",
++			   new_argv[0], temp_filenames[attempt * 2]);
++		  system (cmd);
++		  free (cmd);
++		}
+ 	      /* Make sure it is not deleted.  */
+ 	      free (temp_filenames[attempt * 2]);
+ 	      temp_filenames[attempt * 2] = NULL;
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr40816.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr40816.diff
@@ -0,0 +1,31 @@
+# DP: Fix PR java/40816, taken from the gcc-4_5-branch
+
+libjava/
+
+2010-02-24  Andrew Haley  <aph@redhat.com>
+
+	PR java/40816
+	* include/jni_md.h: jboolean is an unsigned type.
+
+Index: libjava/include/jni_md.h
+===================================================================
+--- a/src/libjava/include/jni_md.h	(revision 157046)
++++ b/src/libjava/include/jni_md.h	(revision 157047)
+@@ -78,7 +78,7 @@
+ typedef int    jshort __attribute__((__mode__(__HI__)));
+ typedef int    jint   __attribute__((__mode__(__SI__)));
+ typedef int    jlong  __attribute__((__mode__(__DI__)));
+-typedef int    jboolean __attribute__((__mode__(__QI__)));
++typedef unsigned int   jboolean __attribute__((__mode__(__QI__)));
+ typedef unsigned short jchar __attribute__((__mode__(__HI__)));
+ typedef float  jfloat;
+ typedef double jdouble;
+@@ -99,7 +99,7 @@
+ typedef float jfloat;
+ typedef double jdouble;
+ typedef jint jsize;
+-typedef int8_t jboolean;
++typedef uint8_t jboolean;
+ typedef uint16_t jchar;
+ 
+ #  else /* JV_HAVE_INTTYPES_H */
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/link-libs.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/link-libs.diff
@@ -0,0 +1,170 @@
+#DP: Link libraries with -01.
+
+---
+ gcc/config/t-slibgcc-elf-ver |    1 +
+ libffi/Makefile.am           |    2 +-
+ libffi/Makefile.in           |    2 +-
+ libgfortran/Makefile.am      |    2 +-
+ libgfortran/Makefile.in      |    2 +-
+ libjava/Makefile.am          |    2 +-
+ libjava/Makefile.in          |    2 +-
+ libmudflap/Makefile.am       |    4 ++--
+ libmudflap/Makefile.in       |    4 ++--
+ libobjc/Makefile.in          |    2 ++
+ libstdc++-v3/src/Makefile.am |    1 +
+ libstdc++-v3/src/Makefile.in |    1 +
+ 12 files changed, 15 insertions(+), 10 deletions(-)
+
+--- a/src/gcc/config/t-slibgcc-elf-ver
++++ b/src/gcc/config/t-slibgcc-elf-ver
+@@ -14,6 +14,7 @@ SHLIB_LC = -lc
+ SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
+ 	-Wl,--soname=$(SHLIB_SONAME) \
+ 	-Wl,--version-script=$(SHLIB_MAP) \
++	-Wl,-O1 \
+ 	-o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \
+ 	$(SHLIB_OBJS) $(SHLIB_LC) && \
+ 	rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
+--- a/src/libffi/Makefile.am
++++ b/src/libffi/Makefile.am
+@@ -158,7 +158,7 @@ AM_CFLAGS = -Wall -g -fexceptions
+ 
+ LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
+ 
+-libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS)
++libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -Wl,-O1
+ 
+ AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
+ AM_CCASFLAGS = $(AM_CPPFLAGS)
+--- a/src/libffi/Makefile.in
++++ b/src/libffi/Makefile.in
+@@ -455,7 +455,7 @@ libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
+ nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
+ AM_CFLAGS = -Wall -g -fexceptions
+ LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
+-libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS)
++libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -Wl,-O1
+ AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
+ AM_CCASFLAGS = $(AM_CPPFLAGS)
+ all: fficonfig.h
+--- a/src/libgfortran/Makefile.am
++++ b/src/libgfortran/Makefile.am
+@@ -17,7 +17,7 @@ LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
+ 
+ toolexeclib_LTLIBRARIES = libgfortran.la
+ libgfortran_la_LINK = $(LINK)
+-libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -lm $(extra_ldflags_libgfortran) $(version_arg)
++libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -lm $(extra_ldflags_libgfortran) $(version_arg) -Wl,-O1
+ 
+ myexeclib_LTLIBRARIES = libgfortranbegin.la
+ myexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)
+--- a/src/libgfortran/Makefile.in
++++ b/src/libgfortran/Makefile.in
+@@ -953,7 +953,7 @@ gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
+ LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
+ toolexeclib_LTLIBRARIES = libgfortran.la
+ libgfortran_la_LINK = $(LINK)
+-libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -lm $(extra_ldflags_libgfortran) $(version_arg)
++libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -lm $(extra_ldflags_libgfortran) $(version_arg) -Wl,-O1
+ myexeclib_LTLIBRARIES = libgfortranbegin.la
+ myexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)
+ libgfortranbegin_la_SOURCES = fmain.c
+--- a/src/libjava/Makefile.am
++++ b/src/libjava/Makefile.am
+@@ -134,7 +134,7 @@ GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) \
+ GCJ_FOR_ECJX = @GCJ_FOR_ECJX@
+ GCJ_FOR_ECJX_LINK = $(GCJ_FOR_ECJX) -o $@
+ LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) \
+-          $(LTLDFLAGS) $(extra_ldflags_libjava) $(extra_ldflags) -o $@
++          $(LTLDFLAGS) $(extra_ldflags_libjava) $(extra_ldflags) -Wl,-O1 -o $@
+ CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+ 	$(CXXFLAGS) $(AM_LDFLAGS) $(LTLDFLAGS) -o $@
+ 
+--- a/src/libjava/Makefile.in
++++ b/src/libjava/Makefile.in
+@@ -938,7 +938,7 @@ GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) \
+ 
+ GCJ_FOR_ECJX_LINK = $(GCJ_FOR_ECJX) -o $@
+ LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) \
+-          $(LTLDFLAGS) $(extra_ldflags_libjava) $(extra_ldflags) -o $@
++          $(LTLDFLAGS) $(extra_ldflags_libjava) $(extra_ldflags) -Wl,-O1 -o $@
+ 
+ CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+ 	$(CXXFLAGS) $(AM_LDFLAGS) $(LTLDFLAGS) -o $@
+--- a/src/libmudflap/Makefile.am
++++ b/src/libmudflap/Makefile.am
+@@ -34,7 +34,7 @@ libmudflap_la_SOURCES = \
+ 	mf-hooks2.c
+ libmudflap_la_LIBADD = 
+ libmudflap_la_DEPENDENCIES = $(libmudflap_la_LIBADD)
+-libmudflap_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
++libmudflap_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -Wl,-O1
+ 
+ 
+ libmudflapth_la_SOURCES = \
+@@ -46,7 +46,7 @@ libmudflapth_la_SOURCES = \
+ libmudflapth_la_CFLAGS = -DLIBMUDFLAPTH
+ libmudflapth_la_LIBADD =
+ libmudflapth_la_DEPENDENCIES = $(libmudflapth_la_LIBADD)
+-libmudflapth_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
++libmudflapth_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -Wl,-O1
+ 
+ 
+ # XXX hack alert
+--- a/src/libmudflap/Makefile.in
++++ b/src/libmudflap/Makefile.in
+@@ -269,7 +269,7 @@ libmudflap_la_SOURCES = \
+ 
+ libmudflap_la_LIBADD = 
+ libmudflap_la_DEPENDENCIES = $(libmudflap_la_LIBADD)
+-libmudflap_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
++libmudflap_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -Wl,-O1
+ libmudflapth_la_SOURCES = \
+ 	mf-runtime.c \
+ 	mf-heuristics.c \
+@@ -280,7 +280,7 @@ libmudflapth_la_SOURCES = \
+ libmudflapth_la_CFLAGS = -DLIBMUDFLAPTH
+ libmudflapth_la_LIBADD = 
+ libmudflapth_la_DEPENDENCIES = $(libmudflapth_la_LIBADD)
+-libmudflapth_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
++libmudflapth_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -Wl,-O1
+ 
+ # XXX hack alert
+ # From libffi/Makefile.am
+--- a/src/libobjc/Makefile.in
++++ b/src/libobjc/Makefile.in
+@@ -283,12 +283,14 @@ LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
+ libobjc$(libsuffix).la: $(OBJS)
+ 	$(LIBTOOL_LINK) $(CC) -o $@ $(OBJS) \
+ 		-rpath $(toolexeclibdir) \
++		-Wl,-O1 \
+ 		-version-info $(LIBOBJC_VERSION) $(extra_ldflags_libobjc) \
+ 		$(LTLDFLAGS)
+ 
+ libobjc_gc$(libsuffix).la: $(OBJS_GC)
+ 	$(LIBTOOL_LINK) $(CC) -o $@ $(OBJS_GC) $(OBJC_BOEHM_GC_LIBS) \
+ 		-rpath $(toolexeclibdir) \
++		-Wl,-O1 \
+ 		-version-info $(LIBOBJC_GC_VERSION) $(extra_ldflags_libobjc) \
+ 		$(LTLDFLAGS)
+ 
+--- a/src/libstdc++-v3/src/Makefile.am
++++ b/src/libstdc++-v3/src/Makefile.am
+@@ -207,6 +207,7 @@ libstdc___la_DEPENDENCIES = \
+ 	$(top_builddir)/libsupc++/libsupc++convenience.la
+ 
+ libstdc___la_LDFLAGS = \
++	-Wl,-O1 \
+ 	-version-info $(libtool_VERSION) ${version_arg} -lm 
+ 
+ # Use special rules for the deprecated source files so that they find
+--- a/src/libstdc++-v3/src/Makefile.in
++++ b/src/libstdc++-v3/src/Makefile.in
+@@ -454,6 +454,7 @@ libstdc___la_DEPENDENCIES = \
+ 	$(top_builddir)/libsupc++/libsupc++convenience.la
+ 
+ libstdc___la_LDFLAGS = \
++	-Wl,-O1 \
+ 	-version-info $(libtool_VERSION) ${version_arg} -lm 
+ 
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/cell-branch-doc.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/cell-branch-doc.diff
@@ -0,0 +1,253 @@
+# DP: Updates from the cell-4_4-branch (documentation) up to 20100518
+
+Index: gcc/doc/extend.texi
+===================================================================
+--- a/src/gcc/doc/extend.texi	(.../gcc-4_4-branch)
++++ b/src/gcc/doc/extend.texi	(.../cell-4_4-branch)
+@@ -38,6 +38,7 @@
+ * Decimal Float::       Decimal Floating Types. 
+ * Hex Floats::          Hexadecimal floating-point constants.
+ * Fixed-Point::         Fixed-Point Types.
++* Named Address Spaces::Named address spaces.
+ * Zero Length::         Zero-length arrays.
+ * Variable Length::     Arrays whose length is computed at run time.
+ * Empty Structures::    Structures with no members.
+@@ -1147,6 +1148,31 @@
+ 
+ Fixed-point types are supported by the DWARF2 debug information format.
+ 
++@node Named Address Spaces
++@section Named address spaces
++@cindex named address spaces
++
++As an extension, the GNU C compiler supports named address spaces as
++defined in the N1275 draft of ISO/IEC DTR 18037.  Support for named
++address spaces in GCC will evolve as the draft technical report changes.
++Calling conventions for any target might also change.  At present, only
++the SPU target supports other address spaces.  On the SPU target, for
++example, variables may be declared as belonging to another address space
++by qualifying the type with the @code{__ea} address space identifier:
++
++@smallexample
++extern int __ea i;
++@end smallexample
++
++When the variable @code{i} is accessed, the compiler will generate
++special code to access this variable.  It may use runtime library
++support, or generate special machine instructions to access that address
++space.
++
++The @code{__ea} identifier may be used exactly like any other C type
++qualifier (e.g., @code{const} or @code{volatile}).  See the N1275
++document for more details.
++
+ @node Zero Length
+ @section Arrays of Length Zero
+ @cindex arrays of length zero
+@@ -5700,7 +5726,7 @@
+ 
+ The types defined in this manner can be used with a subset of normal C
+ operations.  Currently, GCC will allow using the following operators
+-on these types: @code{+, -, *, /, unary minus, ^, |, &, ~}@.
++on these types: @code{+, -, *, /, unary minus, ^, |, &, ~, %}@.
+ 
+ The operations behave like C++ @code{valarrays}.  Addition is defined as
+ the addition of the corresponding elements of the operands.  For
+Index: gcc/doc/tm.texi
+===================================================================
+--- a/src/gcc/doc/tm.texi	(.../gcc-4_4-branch)
++++ b/src/gcc/doc/tm.texi	(.../cell-4_4-branch)
+@@ -55,6 +55,7 @@
+ * MIPS Coprocessors::   MIPS coprocessor support and how to customize it.
+ * PCH Target::          Validity checking for precompiled headers.
+ * C++ ABI::             Controlling C++ ABI changes.
++* Named Address Spaces:: Adding support for named address spaces
+ * Misc::                Everything else.
+ @end menu
+ 
+@@ -9622,6 +9623,105 @@
+ visibility or perform any other required target modifications).
+ @end deftypefn
+ 
++@node Named Address Spaces
++@section Adding support for named address spaces
++@cindex named address spaces
++
++The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275
++standards committee, @cite{Programming Languages - C - Extensions to
++support embedded processors}, specifies a syntax for embedded
++processors to specify alternate address spaces.  You can configure a
++GCC port to support section 5.1 of the draft report to add support for
++address spaces other than the default address space.  These address
++spaces are new keywords that are similar to the @code{volatile} and
++@code{const} type attributes.
++
++Pointers to named address spaces can a a different size than
++pointers to the generic address space.
++
++For example, the SPU port uses the @code{__ea} address space to refer
++to memory in the host processor, rather than memory local to the SPU
++processor.  Access to memory in the @code{__ea} address space involves
++issuing DMA operations to move data between the host processor and the
++local processor memory address space.  Pointers in the @code{__ea}
++address space are either 32 bits or 64 bits based on the
++@option{-mea32} or @option{-mea64} switches (native SPU pointers are
++always 32 bits).
++
++Internally, address spaces are represented as a small integer in the
++range 0 to 15 with address space 0 being reserved for the generic
++address space.
++
++@defmac TARGET_ADDR_SPACE_KEYWORDS
++A list of @code{ADDR_SPACE_KEYWORD} macros to define each named
++address keyword.  The @code{ADDR_SPACE_KEYWORD} macro takes two
++arguments, the keyword string and the number of the named address
++space.  For example, the SPU port uses the following to declare
++@code{__ea} as the keyword for named address space #1:
++@smallexample
++#define ADDR_SPACE_EA 1
++#define TARGET_ADDR_SPACE_KEYWORDS ADDR_SPACE_KEYWORD ("__ea", ADDR_SPACE_EA)
++@end smallexample
++@end defmac
++
++@deftypefn {Target Hook} {enum machine_mode} TARGET_ADDR_SPACE_POINTER_MODE (addr_space_t @var{address_space})
++Define this to return the machine mode to use for pointers to
++@var{address_space} if the target supports named address spaces.
++The default version of this hook returns @code{ptr_mode} for the
++generic address space only.
++@end deftypefn
++
++@deftypefn {Target Hook} {enum machine_mode} TARGET_ADDR_SPACE_ADDRESS_MODE (addr_space_t @var{address_space})
++Define this to return the machine mode to use for addresses in
++@var{address_space} if the target supports named address spaces.
++The default version of this hook returns @code{Pmode} for the
++generic address space only.
++@end deftypefn
++
++@deftypefn {Target Hook} bool TARGET_ADDR_SPACE_VALID_POINTER_MODE (enum machine_mode @var{mode}, addr_space_t @var{as})
++Define this to return nonzero if the port can handle pointers
++with machine mode @var{mode} to address space @var{as}.  This target
++hook is the same as the @code{TARGET_VALID_POINTER_MODE} target hook,
++except that it includes explicit named address space support.  The default
++version of this hook returns true for the modes returned by either the
++@code{TARGET_ADDR_SPACE_POINTER_MODE} or @code{TARGET_ADDR_SPACE_ADDRESS_MODE}
++target hooks for the given address space.
++@end deftypefn
++
++@deftypefn {Target Hook} {bool} TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P (enum machine_mode @var{mode}, rtx @var{exp}, bool @var{strict}, addr_space_t @var{as})
++Define this to return true if @var{exp} is a valid address for mode
++@var{mode} in the named address space @var{as}.  The @var{strict}
++parameter says whether strict addressing is in effect after reload has
++finished.  This target hook is the same as the
++@code{TARGET_LEGITIMATE_ADDRESS_P} target hook, except that it includes
++explicit named address space support.
++@end deftypefn
++
++@deftypefn {Target Hook} {rtx} TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx @var{x}, rtx @var{oldx}, enum machine_mode @var{mode}, addr_space_t @var{as})
++Define this to modify an invalid address @var{x} to be a valid address
++with mode @var{mode} in the named address space @var{as}.  This target
++hook is the same as the @code{TARGET_LEGITIMIZE_ADDRESS} target hook,
++except that it includes explicit named address space support.
++@end deftypefn
++
++@deftypefn {Target Hook} {bool} TARGET_ADDR_SPACE_SUBSET_P (addr_space_t @var{superset}, addr_space_t @var{subset})
++Define this to return whether the @var{subset} named address space is
++contained within the @var{superset} named address space.  Pointers to
++a named address space that is a subset of another named address space
++will be converted automatically without a cast if used together in
++arithmetic operations.  Pointers to a superset address space can be
++converted to pointers to a subset address space via explict casts.
++@end deftypefn
++
++@deftypefn {Target Hook} {rtx} TARGET_ADDR_SPACE_CONVERT (rtx @var{op}, tree @var{from_type}, tree @var{to_type})
++Define this to convert the pointer expression represented by the RTL
++@var{op} with type @var{from_type} that points to a named address
++space to a new pointer expression with type @var{to_type} that points
++to a different named address space.  When this hook it called, it is
++guaranteed that one of the two address spaces is a subset of the other,
++as determined by the @code{TARGET_ADDR_SPACE_SUBSET_P} target hook.
++@end deftypefn
++
+ @node Misc
+ @section Miscellaneous Parameters
+ @cindex parameters, miscellaneous
+Index: gcc/doc/invoke.texi
+===================================================================
+--- a/src/gcc/doc/invoke.texi	(.../gcc-4_4-branch)
++++ b/src/gcc/doc/invoke.texi	(.../cell-4_4-branch)
+@@ -800,7 +800,11 @@
+ -msafe-dma -munsafe-dma @gol
+ -mbranch-hints @gol
+ -msmall-mem -mlarge-mem -mstdmain @gol
+--mfixed-range=@var{register-range}}
++-mfixed-range=@var{register-range} @gol
++-mea32 -mea64 @gol
++-maddress-space-conversion -mno-address-space-conversion @gol
++-mcache-size=@var{cache-size} @gol
++-matomic-updates -mno-atomic-updates}
+ 
+ @emph{System V Options}
+ @gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
+@@ -15258,6 +15262,46 @@
+ two registers separated by a dash.  Multiple register ranges can be
+ specified separated by a comma.
+ 
++@item -mea32
++@itemx -mea64
++@opindex mea32
++@opindex mea64
++Compile code assuming that pointers to the PPU address space accessed
++via the @code{__ea} named address space qualifier are either 32 or 64
++bits wide.  The default is 32 bits.  As this is an ABI changing option,
++all object code in an executable must be compiled with the same setting.
++
++@item -maddress-space-conversion
++@itemx -mno-address-space-conversion
++@opindex maddress-space-conversion
++@opindex mno-address-space-conversion
++Allow/disallow treating the @code{__ea} address space as superset
++of the generic address space.  This enables explicit type casts
++between @code{__ea} and generic pointer as well as implicit
++conversions of generic pointers to @code{__ea} pointers.  The
++default is to allow address space pointer conversions.
++
++@item -mcache-size=@var{cache-size}
++@opindex mcache-size
++This option controls the version of libgcc that the compiler links to an
++executable and selects a software-managed cache for accessing variables
++in the @code{__ea} address space with a particular cache size.  Possible
++options for @var{cache-size} are @samp{8}, @samp{16}, @samp{32}, @samp{64}
++and @samp{128}.  The default cache size is 64KB.
++
++@item -matomic-updates
++@itemx -mno-atomic-updates
++@opindex matomic-updates
++@opindex mno-atomic-updates
++This option controls the version of libgcc that the compiler links to an
++executable and selects whether atomic updates to the software-managed
++cache of PPU-side variables are used.  If you use atomic updates, changes
++to a PPU variable from SPU code using the @code{__ea} named address space
++qualifier will not interfere with changes to other PPU variables residing
++in the same cache line from PPU code.  If you do not use atomic updates,
++such interference may occur; however, writing back cache lines will be
++more efficient.  The default behavior is to use atomic updates.
++
+ @item -mdual-nops
+ @itemx -mdual-nops=@var{n}
+ @opindex mdual-nops
+Index: gcc/doc/rtl.texi
+===================================================================
+--- a/src/gcc/doc/rtl.texi	(.../gcc-4_4-branch)
++++ b/src/gcc/doc/rtl.texi	(.../cell-4_4-branch)
+@@ -420,6 +420,11 @@
+ @findex MEM_ALIGN
+ @item MEM_ALIGN (@var{x})
+ The known alignment in bits of the memory reference.
++
++@findex MEM_ADDR_SPACE
++@item MEM_ADDR_SPACE (@var{x})
++The address space of the memory reference.  This will commonly be zero
++for the generic address space.
+ @end table
+ 
+ @item REG
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr25509.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr25509.diff
@@ -0,0 +1,68 @@
+# DP: Backport of PR c/25509, new option -Wno-unused-result
+
+gcc/
+
+2009-07-10  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+	PR 25509
+	PR 40614
+	* c.opt (Wunused-result): New.
+	* doc/invoke.texi: Document it.
+	* c-common.c (c_warn_unused_result): Use it.
+
+gcc/testsuite/
+
+2009-07-10  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+	PR 25509
+	PR 40614
+	* g++.dg/warn/unused-result1-Werror.c: New.
+
+Index: gcc/testsuite/g++.dg/warn/unused-result1-Werror.c
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/warn/unused-result1-Werror.c	(revision 0)
++++ b/src/gcc/testsuite/g++.dg/warn/unused-result1-Werror.c	(revision 0)
+@@ -0,0 +1,10 @@
++// PR 40614
++// { dg-options "-Werror=unused-result" }
++class QByteArray {
++public:
++  QByteArray(const QByteArray &);
++};
++class QString {
++  QByteArray toLocal8Bit() const __attribute__ ((warn_unused_result));
++  void fooWarnHere() const { toLocal8Bit(); } // { dg-error "ignoring" }
++};
+Index: gcc/c.opt
+===================================================================
+--- a/src/gcc/c.opt	(revision 149591)
++++ b/src/gcc/c.opt	(working copy)
+@@ -476,6 +476,10 @@
+ C ObjC C++ ObjC++ Warning
+ Warn about macros defined in the main file that are not used
+ 
++Wunused-result
++C ObjC C++ ObjC++ Var(warn_unused_result) Init(1) Warning
++Warn if a caller of a function, marked with attribute warn_unused_result, does not use its return value
++
+ Wvariadic-macros
+ C ObjC C++ ObjC++ Warning
+ Do not warn about using variadic macros when -pedantic
+Index: gcc/c-common.c
+===================================================================
+--- a/src/gcc/c-common.c	(revision 149591)
++++ b/src/gcc/c-common.c	(working copy)
+@@ -7567,11 +7567,11 @@
+ 	      location_t loc = gimple_location (g);
+ 
+ 	      if (fdecl)
+-		warning (0, "%Hignoring return value of %qD, "
++		warning (OPT_Wunused_result, "%Hignoring return value of %qD, "
+ 			 "declared with attribute warn_unused_result",
+ 			 &loc, fdecl);
+ 	      else
+-		warning (0, "%Hignoring return value of function "
++		warning (OPT_Wunused_result, "%Hignoring return value of function "
+ 			 "declared with attribute warn_unused_result",
+ 			 &loc);
+ 	    }
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/linux-atomic-builtin-expect.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/linux-atomic-builtin-expect.diff
@@ -0,0 +1,43 @@
+# DP: [ARM] Provide __builtin_expect() hints in linux-atomic.c (backport)
+
+2010-09-01  Marcus Shawcroft  <marcus.shawcroft@arm.com>
+
+	* config/arm/linux-atomic.c (__sync_val_compare_and_swap_4): Insert __builtin_expect().
+	(SUBWORD_VAL_CAS): Likewise.
+
+--- a/src/gcc/config/arm/linux-atomic.c
++++ b/src/gcc/config/arm/linux-atomic.c
+@@ -155,12 +155,12 @@ __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
+     {
+       actual_oldval = *ptr;
+ 
+-      if (oldval != actual_oldval)
++      if (__builtin_expect (oldval != actual_oldval, 0))
+ 	return actual_oldval;
+ 
+       fail = __kernel_cmpxchg (actual_oldval, newval, ptr);
+   
+-      if (!fail)
++      if (__builtin_expect (!fail, 1))
+         return oldval;
+     }
+ }
+@@ -180,7 +180,8 @@ __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
+       {									\
+ 	actual_oldval = *wordptr;					\
+ 									\
+-	if (((actual_oldval & mask) >> shift) != (unsigned int) oldval)	\
++	if (__builtin_expect (((actual_oldval & mask) >> shift) !=      \
++                              (unsigned int) oldval, 0))                \
+           return (actual_oldval & mask) >> shift;			\
+ 									\
+ 	actual_newval = (actual_oldval & ~mask)				\
+@@ -189,7 +190,7 @@ __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
+ 	fail = __kernel_cmpxchg (actual_oldval, actual_newval,		\
+ 				 wordptr);				\
+ 									\
+-	if (!fail)							\
++      if (__builtin_expect (!fail, 1))                                  \
+           return oldval;						\
+       }									\
+   }
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/powerpc_remove_many.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/powerpc_remove_many.diff
@@ -0,0 +1,33 @@
+# DP: Subject: [PATCH] remove -many on __SPE__ target
+# DP: this helps to to detect opcodes which are not part of the current
+# DP: CPU because without -many gas won't touch them. This currently could
+# DP: break the kernel build as the 603 on steroids cpus use performance
+# DP: counter opcodes which are not available on the steroid less 603 core.
+
+Index: gcc-4.4.5/src/gcc/config/rs6000/rs6000.h
+===================================================================
+--- gcc-4.4.5.orig/src/gcc/config/rs6000/rs6000.h	2009-04-10 01:23:07.000000000 +0200
++++ gcc-4.4.5/src/gcc/config/rs6000/rs6000.h	2011-02-13 17:57:17.000000000 +0100
+@@ -83,6 +83,12 @@
+ #define ASM_CPU_POWER7_SPEC "-mpower4 -maltivec"
+ #endif
+ 
++#ifndef __SPE__
++#define ASM_CPU_SPU_MANY_NOT_SPE "-many"
++#else
++#define ASM_CPU_SPU_MANY_NOT_SPE
++#endif
++
+ /* Common ASM definitions used by ASM_SPEC among the various targets
+    for handling -mcpu=xxx switches.  */
+ #define ASM_CPU_SPEC \
+@@ -147,7 +153,8 @@
+ %{mcpu=e300c3: -me300} \
+ %{mcpu=e500mc: -me500mc} \
+ %{maltivec: -maltivec} \
+--many"
++" \
++ASM_CPU_SPU_MANY_NOT_SPE
+ 
+ #define CPP_DEFAULT_SPEC ""
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/note-gnu-stack.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/note-gnu-stack.diff
@@ -0,0 +1,200 @@
+# DP: Add .note.GNU-stack sections for gcc's crt files, libffi and boehm-gc
+# DP: Taken from FC.
+
+gcc/
+
+2004-09-20  Jakub Jelinek  <jakub@redhat.com>
+
+	* config/rs6000/ppc-asm.h: Add .note.GNU-stack section also
+	on ppc64-linux.
+
+	* config/ia64/lib1funcs.asm: Add .note.GNU-stack section on
+	ia64-linux.
+	* config/ia64/crtbegin.asm: Likewise.
+	* config/ia64/crtend.asm: Likewise.
+	* config/ia64/crti.asm: Likewise.
+	* config/ia64/crtn.asm: Likewise.
+
+2004-05-14  Jakub Jelinek  <jakub@redhat.com>
+
+	* config/ia64/linux.h (TARGET_ASM_FILE_END): Define.
+
+boehm-gc/
+
+2005-02-08  Jakub Jelinek  <jakub@redhat.com>
+
+	* ia64_save_regs_in_stack.s: Moved to...
+	* ia64_save_regs_in_stack.S: ... this.  Add .note.GNU-stack
+	on Linux.
+
+libffi/
+
+2007-05-11  Daniel Jacobowitz  <dan@debian.org>
+
+	* src/arm/sysv.S: Fix ARM comment marker.
+
+2005-02-08  Jakub Jelinek  <jakub@redhat.com>
+
+	* src/alpha/osf.S: Add .note.GNU-stack on Linux.
+	* src/s390/sysv.S: Likewise.
+	* src/powerpc/linux64.S: Likewise.
+	* src/powerpc/linux64_closure.S: Likewise.
+	* src/powerpc/ppc_closure.S: Likewise.
+	* src/powerpc/sysv.S: Likewise.
+	* src/x86/unix64.S: Likewise.
+	* src/x86/sysv.S: Likewise.
+	* src/sparc/v8.S: Likewise.
+	* src/sparc/v9.S: Likewise.
+	* src/m68k/sysv.S: Likewise.
+	* src/ia64/unix.S: Likewise.
+	* src/arm/sysv.S: Likewise.
+
+---
+ boehm-gc/ia64_save_regs_in_stack.s   |   12 ------------
+ gcc/config/ia64/crtbegin.asm         |    4 ++++
+ gcc/config/ia64/crtend.asm           |    4 ++++
+ gcc/config/ia64/crti.asm             |    4 ++++
+ gcc/config/ia64/crtn.asm             |    4 ++++
+ gcc/config/ia64/lib1funcs.asm        |    4 ++++
+ gcc/config/ia64/linux.h              |    2 ++
+ gcc/config/rs6000/ppc-asm.h          |    2 +-
+ libffi/src/ia64/unix.S               |    4 ++++
+ libffi/src/powerpc/linux64.S         |    4 ++++
+ libffi/src/powerpc/linux64_closure.S |    4 ++++
+ 11 files changed, 35 insertions(+), 13 deletions(-)
+
+--- a/src/boehm-gc/ia64_save_regs_in_stack.s
++++ b/src/boehm-gc/ia64_save_regs_in_stack.s
+@@ -1,12 +0,0 @@
+-        .text
+-        .align 16
+-        .global GC_save_regs_in_stack
+-        .proc GC_save_regs_in_stack
+-GC_save_regs_in_stack:
+-        .body
+-        flushrs
+-        ;;
+-        mov r8=ar.bsp
+-        br.ret.sptk.few rp
+-        .endp GC_save_regs_in_stack
+-
+--- a/src/boehm-gc/ia64_save_regs_in_stack.S
++++ b/src/boehm-gc/ia64_save_regs_in_stack.S
+@@ -0,0 +1,15 @@
++        .text
++        .align 16
++        .global GC_save_regs_in_stack
++        .proc GC_save_regs_in_stack
++GC_save_regs_in_stack:
++        .body
++        flushrs
++        ;;
++        mov r8=ar.bsp
++        br.ret.sptk.few rp
++        .endp GC_save_regs_in_stack
++
++#ifdef __linux__
++	.section .note.GNU-stack,"",@progbits
++#endif
+--- a/src/gcc/config/ia64/crtbegin.asm
++++ b/src/gcc/config/ia64/crtbegin.asm
+@@ -255,3 +255,7 @@ __do_jv_register_classes:
+ .weak __cxa_finalize
+ #endif
+ .weak _Jv_RegisterClasses
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/gcc/config/ia64/crtend.asm
++++ b/src/gcc/config/ia64/crtend.asm
+@@ -122,3 +122,7 @@ __do_global_ctors_aux:
+ 
+ 	br.ret.sptk.many rp
+ 	.endp __do_global_ctors_aux
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/gcc/config/ia64/crti.asm
++++ b/src/gcc/config/ia64/crti.asm
+@@ -62,3 +62,7 @@ _fini:
+ 	.body
+ 
+ # end of crti.asm
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/gcc/config/ia64/crtn.asm
++++ b/src/gcc/config/ia64/crtn.asm
+@@ -52,3 +52,7 @@
+ 	br.ret.sptk.many b0
+ 
+ # end of crtn.asm
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/gcc/config/ia64/lib1funcs.asm
++++ b/src/gcc/config/ia64/lib1funcs.asm
+@@ -796,3 +796,7 @@ __floattitf:
+ 	.endp __floattitf
+ #endif
+ #endif
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/gcc/config/ia64/linux.h
++++ b/src/gcc/config/ia64/linux.h
+@@ -5,6 +5,8 @@
+ 
+ #define TARGET_VERSION fprintf (stderr, " (IA-64) Linux");
+ 
++#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
++
+ /* This is for -profile to use -lc_p instead of -lc.  */
+ #undef CC1_SPEC
+ #define CC1_SPEC "%{profile:-p} %{G*}"
+--- a/src/gcc/config/rs6000/ppc-asm.h
++++ b/src/gcc/config/rs6000/ppc-asm.h
+@@ -172,7 +172,7 @@ GLUE(.L,name): \
+ 	.size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name)
+ #endif
+ 
+-#if defined __linux__ && !defined __powerpc64__
++#if defined __linux__
+ 	.section .note.GNU-stack
+ 	.previous
+ #endif
+--- a/src/libffi/src/ia64/unix.S
++++ b/src/libffi/src/ia64/unix.S
+@@ -553,3 +553,7 @@ ffi_closure_unix:
+ 	data8	@pcrel(.Lld_hfa_float)		// FFI_IA64_TYPE_HFA_FLOAT
+ 	data8	@pcrel(.Lld_hfa_double)		// FFI_IA64_TYPE_HFA_DOUBLE
+ 	data8	@pcrel(.Lld_hfa_ldouble)	// FFI_IA64_TYPE_HFA_LDOUBLE
++
++#if defined __ELF__ && defined __linux__
++	.section	.note.GNU-stack,"",@progbits
++#endif
+--- a/src/libffi/src/powerpc/linux64.S
++++ b/src/libffi/src/powerpc/linux64.S
+@@ -179,3 +179,7 @@ ffi_call_LINUX64:
+ 	.align 3
+ .LEFDE1:
+ #endif
++
++#if defined __ELF__ && defined __linux__
++	.section	.note.GNU-stack,"",@progbits
++#endif
+--- a/src/libffi/src/powerpc/linux64_closure.S
++++ b/src/libffi/src/powerpc/linux64_closure.S
+@@ -204,3 +204,7 @@ ffi_closure_LINUX64:
+ 	.align 3
+ .LEFDE1:
+ #endif
++
++#if defined __ELF__ && defined __linux__
++	.section	.note.GNU-stack,"",@progbits
++#endif
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/sh4-scheduling.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/sh4-scheduling.diff
@@ -0,0 +1,31 @@
+# DP: sh4 scheduling fix
+
+2009-05-12  Kaz Kojima  <kkojima@gcc.gnu.org>
+
+	* config/sh/sh.h (OVERRIDE_OPTIONS): Clear flag_schedule_insns
+	unless -fschedule-insns is specified.
+
+--- a/src/gcc/config/sh/sh.h	2009-05-12 22:06:55.000000000 +0900
++++ b/src/gcc/config/sh/sh.h	2009-05-12 22:07:10.000000000 +0900
+@@ -709,8 +709,9 @@ do {									\
+       /* Never run scheduling before reload, since that can		\
+ 	 break global alloc, and generates slower code anyway due	\
+ 	 to the pressure on R0.  */					\
+-      /* Enable sched1 for SH4; ready queue will be reordered by	\
+-	 the target hooks when pressure is high. We can not do this for \
++      /* Enable sched1 for SH4 if the user explicitly requests.		\
++	 When sched1 is enabled, the ready queue will be reordered by	\
++	 the target hooks if pressure is high.  We can not do this for	\
+ 	 PIC, SH3 and lower as they give spill failures for R0.  */	\
+       if (!TARGET_HARD_SH4 || flag_pic)					\
+         flag_schedule_insns = 0;		 			\
+@@ -725,6 +726,8 @@ do {									\
+ 	    warning (0, "ignoring -fschedule-insns because of exception handling bug");	\
+ 	  flag_schedule_insns = 0;		 			\
+ 	}								\
++      else if (flag_schedule_insns == 2)				\
++	flag_schedule_insns = 0;		 			\
+     }									\
+ 									\
+   if (align_loops == 0)							\
+
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/mips-fix-loongson2f-nop.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/mips-fix-loongson2f-nop.diff
@@ -0,0 +1,13 @@
+# DP: On mips, pass -mfix-loongson2f-nop to as, if -mno-fix-loongson2f-nop
+# DP: is not passed.
+
+--- a/src/gcc/config/mips/mips.h~	2009-02-20 16:20:38.000000000 +0100
++++ b/src/gcc/config/mips/mips.h	2010-04-17 19:59:38.033585306 +0200
+@@ -1152,6 +1152,7 @@
+ %{mshared} %{mno-shared} \
+ %{msym32} %{mno-sym32} \
+ %{mtune=*} %{v} \
++%{!mno-fix-loongson2f-nop:-mfix-loongson2f-nop} \
+ %(subtarget_asm_spec)"
+ 
+ /* Extra switches sometimes passed to the linker.  */
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/boehm-gc-getnprocs.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/boehm-gc-getnprocs.diff
@@ -0,0 +1,18 @@
+# DP: boehm-gc/pthread_support.c (GC_get_nprocs): Use sysconf as fallback.
+
+---
+ boehm-gc/pthread_support.c |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+--- a/src/boehm-gc/pthread_support.c
++++ b/src/boehm-gc/pthread_support.c
+@@ -724,7 +724,8 @@ int GC_get_nprocs()
+     f = open("/proc/stat", O_RDONLY);
+     if (f < 0 || (len = STAT_READ(f, stat_buf, STAT_BUF_SIZE)) < 100) {
+ 	WARN("Couldn't read /proc/stat\n", 0);
+-	return -1;
++	/* Fallback to sysconf after the warning */
++	return sysconf(_SC_NPROCESSORS_ONLN);
+     }
+     for (i = 0; i < len - 100; ++i) {
+         if (stat_buf[i] == '\n' && stat_buf[i+1] == 'c'
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcj-use-atomic-builtins.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcj-use-atomic-builtins.diff
@@ -0,0 +1,94 @@
+# DP: gcj: add option -fuse-atomic-builtins
+
+gcc/java/
+
+2009-08-12  Andrew Haley  <aph@redhat.com>
+
+	* builtins.c (compareAndSwapInt_builtin): Use
+	flag_use_atomic_builtins.
+	(compareAndSwapLong_builtin): Likewise.
+	(compareAndSwapObject_builtin): Likewise.
+	* jvspec.c: Add flag_use_atomic_builtins.
+	* gcj.texi: Likewise.
+	* java-tree.h: Likewise.
+	* lang.opt: Likewise.
+
+Index: gcc/java/builtins.c
+===================================================================
+--- a/src/gcc/java/builtins.c	(revision 155104)
++++ b/src/gcc/java/builtins.c	(working copy)
+@@ -305,7 +305,8 @@
+ {
+   enum machine_mode mode = TYPE_MODE (int_type_node);
+   if (sync_compare_and_swap_cc[mode] != CODE_FOR_nothing 
+-      || sync_compare_and_swap[mode] != CODE_FOR_nothing)
++      || sync_compare_and_swap[mode] != CODE_FOR_nothing
++      || flag_use_atomic_builtins)
+     {
+       tree addr, stmt;
+       UNMARSHAL5 (orig_call);
+@@ -325,7 +326,12 @@
+ {
+   enum machine_mode mode = TYPE_MODE (long_type_node);
+   if (sync_compare_and_swap_cc[mode] != CODE_FOR_nothing 
+-      || sync_compare_and_swap[mode] != CODE_FOR_nothing)
++      || sync_compare_and_swap[mode] != CODE_FOR_nothing
++      || (GET_MODE_SIZE (mode) <= GET_MODE_SIZE (word_mode)
++	  && flag_use_atomic_builtins))
++    /* We don't trust flag_use_atomic_builtins for multi-word
++       compareAndSwap.  Some machines such as ARM have atomic libfuncs
++       but not the multi-word versions.  */
+     {
+       tree addr, stmt;
+       UNMARSHAL5 (orig_call);
+@@ -344,7 +350,8 @@
+ {
+   enum machine_mode mode = TYPE_MODE (ptr_type_node);
+   if (sync_compare_and_swap_cc[mode] != CODE_FOR_nothing 
+-      || sync_compare_and_swap[mode] != CODE_FOR_nothing)
++      || sync_compare_and_swap[mode] != CODE_FOR_nothing
++      || flag_use_atomic_builtins)
+   {
+     tree addr, stmt;
+     int builtin;
+Index: gcc/java/jvspec.c
+===================================================================
+--- a/src/gcc/java/jvspec.c	(revision 155104)
++++ b/src/gcc/java/jvspec.c	(working copy)
+@@ -73,6 +73,7 @@
+ 		   %<fclasspath* %<fCLASSPATH* %<fbootclasspath*\
+ 		   %<fextdirs*\
+ 		   %<fuse-divide-subroutine %<fno-use-divide-subroutine\
++		   %<fuse-atomic-builtins %<fno-use-atomic-builtins\
+ 		   %<fcheck-references %<fno-check-references\
+ 		   %<ffilelist-file %<fsaw-java-file %<fsource* %<ftarget*\
+ 		   %{f*} -fdollars-in-identifiers\
+Index: gcc/java/lang.opt
+===================================================================
+--- a/src/gcc/java/lang.opt	(revision 155104)
++++ b/src/gcc/java/lang.opt	(working copy)
+@@ -192,6 +192,10 @@
+ Java Var(flag_use_divide_subroutine) Init(1)
+ Call a library routine to do integer divisions
+ 
++fuse-atomic-builtins
++Java Var(flag_use_atomic_builtins) Init(0)
++Generate code for built-in atomic operations
++
+ fbootstrap-classes
+ Java Var(flag_bootstrap_classes)
+ Generated should be loaded by bootstrap loader
+Index: gcc/java/java-tree.h
+===================================================================
+--- a/src/gcc/java/java-tree.h	(revision 155104)
++++ b/src/gcc/java/java-tree.h	(working copy)
+@@ -145,6 +145,9 @@
+ /* When nonzero, call a library routine to do integer divisions. */
+ extern int flag_use_divide_subroutine;
+ 
++/* When nonzero, use atomic builtins. */
++extern int flag_use_atomic_builtins;
++
+ /* When nonzero, generate code for the Boehm GC.  */
+ extern int flag_use_boehm_gc;
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr39491.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr39491.diff
@@ -0,0 +1,132 @@
+# DP: Proposed patch for PR libstdc++/39491.
+
+2009-04-16  Benjamin Kosnik  <bkoz@redhat.com>
+
+	* src/math_stubs_long_double.cc (__signbitl): Add for hppa linux only.
+
+Index: a/src/libstdc++-v3/src/math_stubs_long_double.cc
+===================================================================
+--- a/src/libstdc++-v3/src/math_stubs_long_double.cc	(revision 146216)
++++ b/src/libstdc++-v3/src/math_stubs_long_double.cc	(working copy)
+@@ -213,4 +221,111 @@
+     return tanh((double) x);
+   }
+ #endif
++
++  // From libmath/signbitl.c
++  // XXX ABI mistakenly exported
++#if defined (__hppa__) && defined (__linux__)
++# include <endian.h>
++# include <float.h>
++
++typedef unsigned int U_int32_t __attribute ((mode (SI)));
++typedef int Int32_t __attribute ((mode (SI)));
++typedef unsigned int U_int64_t __attribute ((mode (DI)));
++typedef int Int64_t __attribute ((mode (DI)));
++
++#if BYTE_ORDER == BIG_ENDIAN
++typedef union
++{
++  long double value;
++  struct
++  {
++    unsigned int sign_exponent:16;
++    unsigned int empty:16;
++    U_int32_t msw;
++    U_int32_t lsw;
++  } parts;
++} ieee_long_double_shape_type;
++#endif
++#if BYTE_ORDER == LITTLE_ENDIAN
++typedef union
++{
++  long double value;
++  struct
++  {
++    U_int32_t lsw;
++    U_int32_t msw;
++    unsigned int sign_exponent:16;
++    unsigned int empty:16;
++  } parts;
++} ieee_long_double_shape_type;
++#endif
++
++/* Get int from the exponent of a long double.  */
++#define GET_LDOUBLE_EXP(exp,d)                                  \
++do {                                                            \
++  ieee_long_double_shape_type ge_u;                             \
++  ge_u.value = (d);                                             \
++  (exp) = ge_u.parts.sign_exponent;                             \
++} while (0)
++
++#if BYTE_ORDER == BIG_ENDIAN
++typedef union
++{
++  long double value;
++  struct
++  {
++    U_int64_t msw;
++    U_int64_t lsw;
++  } parts64;
++  struct
++  {
++    U_int32_t w0, w1, w2, w3;
++  } parts32;
++} ieee_quad_double_shape_type;
++#endif
++
++#if BYTE_ORDER == LITTLE_ENDIAN
++typedef union
++{
++  long double value;
++  struct
++  {
++    U_int64_t lsw;
++    U_int64_t msw;
++  } parts64;
++  struct
++  {
++    U_int32_t w3, w2, w1, w0;
++  } parts32;
++} ieee_quad_double_shape_type;
++#endif
++
++/* Get most significant 64 bit int from a quad long double.  */
++#define GET_LDOUBLE_MSW64(msw,d)				\
++do {								\
++  ieee_quad_double_shape_type qw_u;				\
++  qw_u.value = (d);						\
++  (msw) = qw_u.parts64.msw;					\
++} while (0)
++
++int
++__signbitl (long double x)
++{
++#if LDBL_MANT_DIG == 113
++  Int64_t msw;
++
++  GET_LDOUBLE_MSW64 (msw, x);
++  return msw < 0;
++#else
++  Int32_t e;
++
++  GET_LDOUBLE_EXP (e, x);
++  return e & 0x8000;
++#endif
++}
++#endif
++
++#ifndef _GLIBCXX_HAVE___SIGNBITL
++
++#endif
+ } // extern "C"
+--- a/src/libstdc++-v3/config/abi/pre/gnu.ver~	2009-04-10 01:23:07.000000000 +0200
++++ b/src/libstdc++-v3/config/abi/pre/gnu.ver	2009-04-21 16:24:24.000000000 +0200
+@@ -635,6 +635,7 @@
+     sqrtf;
+     sqrtl;
+     copysignf;
++    __signbitl;
+ 
+    # GLIBCXX_ABI compatibility only.
+     # std::string
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libjava-armel-unwind.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libjava-armel-unwind.diff
@@ -0,0 +1,19 @@
+# DP: On armel, apply kludge to fix unwinder infinitely looping 'til it runs out
+# DP: of memory (http://gcc.gnu.org/ml/java/2008-06/msg00010.html).
+
+---
+ libjava/stacktrace.cc |    3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+--- a/src/libjava/stacktrace.cc
++++ b/src/libjava/stacktrace.cc
+@@ -115,6 +115,9 @@ _Jv_StackTrace::UnwindTraceFn (struct _Unwind_Context *context, void *state_ptr)
+   // Check if the trace buffer needs to be extended.
+   if (pos == state->length)
+     {
++      // http://gcc.gnu.org/ml/java/2008-06/msg00010.html
++      return _URC_END_OF_STACK;
++
+       int newLength = state->length * 2;
+       void *newFrames = _Jv_AllocBytes (newLength * sizeof(_Jv_StackFrame));
+       memcpy (newFrames, state->frames, state->length * sizeof(_Jv_StackFrame));      
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-nobiarch-check.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-nobiarch-check.diff
@@ -0,0 +1,20 @@
+# DP: For biarch builds, disable the gnat testsuite for the non-default
+# architecture (no biarch support in gnat yet).
+
+Index: b/src/gcc/Makefile.in
+===================================================================
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -4510,7 +4510,11 @@
+ 	if [ -f $${rootme}/../expect/expect ] ; then  \
+ 	   TCL_LIBRARY=`cd .. ; cd $${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \
+ 	    export TCL_LIBRARY ; fi ; \
+-	$(RUNTEST) --tool $* $(RUNTESTFLAGS))
++	if [ "$*" = gnat ]; then \
++	  runtestflags="`echo '$(RUNTESTFLAGS)' | sed 's/,-m[36][24]//;s/,-mabi=n32//'`"; \
++	  case "$$runtestflags" in *\\{\\}) runtestflags=; esac; \
++	fi; \
++	$(RUNTEST) --tool $* $$runtestflags)
+ 
+ $(patsubst %,%-subtargets,$(filter-out $(lang_checks_parallelized),$(lang_checks))): check-%-subtargets:
+ 	@echo check-$*
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-pr26885.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-pr26885.diff
@@ -0,0 +1,35 @@
+# DP: Update Make-lang.in for pr26885: use $(GCC_OBJS) instead of gcc.o.
+
+--- a/src/gcc/d/Make-lang.in	2010-08-22 22:21:10.000000000 +0100
++++ b/src/gcc/d/Make-lang.in	2010-08-23 10:49:36.782814757 +0100
+@@ -48,7 +48,7 @@
+ # into the C++ rule, but that needs a little bit of work
+ # to do the right thing within all.cross.
+ D_DRIVER_NAME = gdc
+-D_DRIVER_OBJS = d/d-spec.o d/d-gcc.o version.o prefix.o intl.o
++D_DRIVER_OBJS = d/d-spec.o version.o prefix.o intl.o
+ D_COMPILER_NAME = cc1d
+ 
+ D_INSTALL_NAME = $(shell echo $(D_DRIVER_NAME)|sed '$(program_transform_name)')
+@@ -176,9 +176,9 @@
+ ALL_DMD_COMPILER_FLAGS = $(ALL_CFLAGS) $(ALL_CPPFLAGS) -Id -I$(srcdir)/$(D_dmd_srcdir) -I$(srcdir)/d $(D_EXTRA_DEFINES) $(D_CC_FLAGS)
+ 
+ # Create the compiler driver for D.
+-$(D_DRIVER_NAME)$(exeext): $(D_DRIVER_OBJS) $(EXTRA_GCC_OBJS) $(LIBDEPS)
++$(D_DRIVER_NAME)$(exeext): $(GCC_OBJS) $(D_DRIVER_OBJS) $(EXTRA_GCC_OBJS) $(LIBDEPS)
+ 	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
+-	$(D_DRIVER_OBJS) $(EXTRA_GCC_OBJS) $(LIBS)
++	$(GCC_OBJS) $(D_DRIVER_OBJS) $(EXTRA_GCC_OBJS) $(LIBS)
+ 
+ # Create a version of the g++ driver which calls the cross-compiler.
+ $(D_DRIVER_NAME)-cross$(exeext): $(D_DRIVER_NAME)$(exeext)
+@@ -262,8 +262,7 @@
+     D_GLUE_OBJS += d/d-c-stubs.cglue.o
+     D_BORROWED_C_OBJS += stub-objc.o prefix.o $(C_TARGET_OBJS)
+     D_BORROWED_C_OBJS += gimplify.o tree-iterator.o
+-    D_EXTRA_LIBS += $(GMPLIBS)
+-    D_DRIVER_OBJS += opts-common.o gcc-options.o
++    D_EXTRA_LIBS += $(BACKENDLIBS)
+   endif
+ endif
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-libphobos-build.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-libphobos-build.diff
@@ -0,0 +1,657 @@
+# DP: Setup gcc build system for libphobos.
+
+--- a/src/configure	2009-04-25 05:10:29.000000000 +0100
++++ b/src/configure	2010-08-23 11:41:36.661791965 +0100
+@@ -1918,6 +1918,7 @@
+ 		target-boehm-gc \
+ 		${libgcj} \
+ 		target-libobjc \
++		target-libphobos \
+ 		target-libada"
+ 
+ # these tools are built using the target libraries, and are intended to
+--- a/src/configure.ac	2009-04-25 05:10:29.000000000 +0100
++++ b/src/configure.ac	2010-08-23 11:41:36.685787193 +0100
+@@ -189,6 +189,7 @@
+ 		target-boehm-gc \
+ 		${libgcj} \
+ 		target-libobjc \
++		target-libphobos \
+ 		target-libada"
+ 
+ # these tools are built using the target libraries, and are intended to
+--- a/src/Makefile.def	2009-04-25 05:10:29.000000000 +0100
++++ b/src/Makefile.def	2010-08-23 11:41:36.685787193 +0100
+@@ -163,6 +163,7 @@
+ target_modules = { module= rda; };
+ target_modules = { module= libada; };
+ target_modules = { module= libgomp; lib_path=.libs; };
++target_modules = { module= libphobos; };
+ 
+ // These are (some of) the make targets to be done in each subdirectory.
+ // Not all; these are the ones which don't have special options.
+--- a/src/Makefile.in	2009-04-25 05:10:29.000000000 +0100
++++ b/src/Makefile.in	2010-08-23 11:41:36.765787034 +0100
+@@ -769,7 +769,8 @@
+     maybe-configure-target-qthreads \
+     maybe-configure-target-rda \
+     maybe-configure-target-libada \
+-    maybe-configure-target-libgomp
++    maybe-configure-target-libgomp \
++    maybe-configure-target-libphobos
+ 
+ # The target built for a native non-bootstrap build.
+ .PHONY: all
+@@ -933,6 +934,7 @@
+ all-target: maybe-all-target-rda
+ all-target: maybe-all-target-libada
+ all-target: maybe-all-target-libgomp
++all-target: maybe-all-target-libphobos
+ 
+ # Do a target for all the subdirectories.  A ``make do-X'' will do a
+ # ``make X'' in all subdirectories (because, in general, there is a
+@@ -1048,6 +1050,7 @@
+ info-target: maybe-info-target-rda
+ info-target: maybe-info-target-libada
+ info-target: maybe-info-target-libgomp
++info-target: maybe-info-target-libphobos
+ 
+ .PHONY: do-dvi
+ do-dvi:
+@@ -1158,6 +1161,7 @@
+ dvi-target: maybe-dvi-target-rda
+ dvi-target: maybe-dvi-target-libada
+ dvi-target: maybe-dvi-target-libgomp
++dvi-target: maybe-dvi-target-libphobos
+ 
+ .PHONY: do-pdf
+ do-pdf:
+@@ -1268,6 +1272,7 @@
+ pdf-target: maybe-pdf-target-rda
+ pdf-target: maybe-pdf-target-libada
+ pdf-target: maybe-pdf-target-libgomp
++pdf-target: maybe-pdf-target-libphobos
+ 
+ .PHONY: do-html
+ do-html:
+@@ -1378,6 +1383,7 @@
+ html-target: maybe-html-target-rda
+ html-target: maybe-html-target-libada
+ html-target: maybe-html-target-libgomp
++html-target: maybe-html-target-libphobos
+ 
+ .PHONY: do-TAGS
+ do-TAGS:
+@@ -1488,6 +1494,7 @@
+ TAGS-target: maybe-TAGS-target-rda
+ TAGS-target: maybe-TAGS-target-libada
+ TAGS-target: maybe-TAGS-target-libgomp
++TAGS-target: maybe-TAGS-target-libphobos
+ 
+ .PHONY: do-install-info
+ do-install-info:
+@@ -1598,6 +1605,7 @@
+ install-info-target: maybe-install-info-target-rda
+ install-info-target: maybe-install-info-target-libada
+ install-info-target: maybe-install-info-target-libgomp
++install-info-target: maybe-install-info-target-libphobos
+ 
+ .PHONY: do-install-pdf
+ do-install-pdf:
+@@ -1708,6 +1716,7 @@
+ install-pdf-target: maybe-install-pdf-target-rda
+ install-pdf-target: maybe-install-pdf-target-libada
+ install-pdf-target: maybe-install-pdf-target-libgomp
++install-pdf-target: maybe-install-pdf-target-libphobos
+ 
+ .PHONY: do-install-html
+ do-install-html:
+@@ -1818,6 +1827,7 @@
+ install-html-target: maybe-install-html-target-rda
+ install-html-target: maybe-install-html-target-libada
+ install-html-target: maybe-install-html-target-libgomp
++install-html-target: maybe-install-html-target-libphobos
+ 
+ .PHONY: do-installcheck
+ do-installcheck:
+@@ -1928,6 +1938,7 @@
+ installcheck-target: maybe-installcheck-target-rda
+ installcheck-target: maybe-installcheck-target-libada
+ installcheck-target: maybe-installcheck-target-libgomp
++installcheck-target: maybe-installcheck-target-libphobos
+ 
+ .PHONY: do-mostlyclean
+ do-mostlyclean:
+@@ -2038,6 +2049,7 @@
+ mostlyclean-target: maybe-mostlyclean-target-rda
+ mostlyclean-target: maybe-mostlyclean-target-libada
+ mostlyclean-target: maybe-mostlyclean-target-libgomp
++mostlyclean-target: maybe-mostlyclean-target-libphobos
+ 
+ .PHONY: do-clean
+ do-clean:
+@@ -2148,6 +2160,7 @@
+ clean-target: maybe-clean-target-rda
+ clean-target: maybe-clean-target-libada
+ clean-target: maybe-clean-target-libgomp
++clean-target: maybe-clean-target-libphobos
+ 
+ .PHONY: do-distclean
+ do-distclean:
+@@ -2258,6 +2271,7 @@
+ distclean-target: maybe-distclean-target-rda
+ distclean-target: maybe-distclean-target-libada
+ distclean-target: maybe-distclean-target-libgomp
++distclean-target: maybe-distclean-target-libphobos
+ 
+ .PHONY: do-maintainer-clean
+ do-maintainer-clean:
+@@ -2368,6 +2382,7 @@
+ maintainer-clean-target: maybe-maintainer-clean-target-rda
+ maintainer-clean-target: maybe-maintainer-clean-target-libada
+ maintainer-clean-target: maybe-maintainer-clean-target-libgomp
++maintainer-clean-target: maybe-maintainer-clean-target-libphobos
+ 
+ 
+ # Here are the targets which correspond to the do-X targets.
+@@ -2531,7 +2546,8 @@
+     maybe-check-target-qthreads \
+     maybe-check-target-rda \
+     maybe-check-target-libada \
+-    maybe-check-target-libgomp
++    maybe-check-target-libgomp \
++    maybe-check-target-libphobos
+ 
+ do-check:
+ 	@: $(MAKE); $(unstage)
+@@ -2744,7 +2760,8 @@
+     maybe-install-target-qthreads \
+     maybe-install-target-rda \
+     maybe-install-target-libada \
+-    maybe-install-target-libgomp
++    maybe-install-target-libgomp \
++    maybe-install-target-libphobos
+ 
+ uninstall:
+ 	@echo "the uninstall target is not supported in this tree"
+@@ -52903,6 +52920,447 @@
+ 
+ 
+ 
++
++
++.PHONY: configure-target-libphobos maybe-configure-target-libphobos
++maybe-configure-target-libphobos:
++@if gcc-bootstrap
++configure-target-libphobos: stage_current
++@endif gcc-bootstrap
++@if target-libphobos
++maybe-configure-target-libphobos: configure-target-libphobos
++configure-target-libphobos: 
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	echo "Checking multilib configuration for libphobos..."; \
++	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos ; \
++	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libphobos/multilib.tmp 2> /dev/null ; \
++	if test -r $(TARGET_SUBDIR)/libphobos/multilib.out; then \
++	  if cmp -s $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; then \
++	    rm -f $(TARGET_SUBDIR)/libphobos/multilib.tmp; \
++	  else \
++	    rm -f $(TARGET_SUBDIR)/libphobos/Makefile; \
++	    mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
++	  fi; \
++	else \
++	  mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
++	fi; \
++	test ! -f $(TARGET_SUBDIR)/libphobos/Makefile || exit 0; \
++	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos ; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo Configuring in $(TARGET_SUBDIR)/libphobos; \
++	cd "$(TARGET_SUBDIR)/libphobos" || exit 1; \
++	case $(srcdir) in \
++	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
++	  *) topdir=`echo $(TARGET_SUBDIR)/libphobos/ | \
++		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
++	esac; \
++	srcdiroption="--srcdir=$${topdir}/libphobos"; \
++	libsrcdir="$$s/libphobos"; \
++	rm -f no-such-file || : ; \
++	CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
++	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
++	  --target=${target_alias} $${srcdiroption}  \
++	  || exit 1
++@endif target-libphobos
++
++
++
++
++
++.PHONY: all-target-libphobos maybe-all-target-libphobos
++maybe-all-target-libphobos:
++@if gcc-bootstrap
++all-target-libphobos: stage_current
++@endif gcc-bootstrap
++@if target-libphobos
++TARGET-target-libphobos=all
++maybe-all-target-libphobos: all-target-libphobos
++all-target-libphobos: configure-target-libphobos
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS)  \
++		$(TARGET-target-libphobos))
++@endif target-libphobos
++
++
++
++
++
++.PHONY: check-target-libphobos maybe-check-target-libphobos
++maybe-check-target-libphobos:
++@if target-libphobos
++maybe-check-target-libphobos: check-target-libphobos
++
++check-target-libphobos:
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
++
++@endif target-libphobos
++
++.PHONY: install-target-libphobos maybe-install-target-libphobos
++maybe-install-target-libphobos:
++@if target-libphobos
++maybe-install-target-libphobos: install-target-libphobos
++
++install-target-libphobos: installdirs
++	@: $(MAKE); $(unstage)
++	@r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
++
++@endif target-libphobos
++
++# Other targets (info, dvi, pdf, etc.)
++
++.PHONY: maybe-info-target-libphobos info-target-libphobos
++maybe-info-target-libphobos:
++@if target-libphobos
++maybe-info-target-libphobos: info-target-libphobos
++
++info-target-libphobos: \
++    configure-target-libphobos 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing info in $(TARGET_SUBDIR)/libphobos" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           info) \
++	  || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-dvi-target-libphobos dvi-target-libphobos
++maybe-dvi-target-libphobos:
++@if target-libphobos
++maybe-dvi-target-libphobos: dvi-target-libphobos
++
++dvi-target-libphobos: \
++    configure-target-libphobos 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing dvi in $(TARGET_SUBDIR)/libphobos" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           dvi) \
++	  || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-pdf-target-libphobos pdf-target-libphobos
++maybe-pdf-target-libphobos:
++@if target-libphobos
++maybe-pdf-target-libphobos: pdf-target-libphobos
++
++pdf-target-libphobos: \
++    configure-target-libphobos 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing pdf in $(TARGET_SUBDIR)/libphobos" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           pdf) \
++	  || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-html-target-libphobos html-target-libphobos
++maybe-html-target-libphobos:
++@if target-libphobos
++maybe-html-target-libphobos: html-target-libphobos
++
++html-target-libphobos: \
++    configure-target-libphobos 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing html in $(TARGET_SUBDIR)/libphobos" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           html) \
++	  || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-TAGS-target-libphobos TAGS-target-libphobos
++maybe-TAGS-target-libphobos:
++@if target-libphobos
++maybe-TAGS-target-libphobos: TAGS-target-libphobos
++
++TAGS-target-libphobos: \
++    configure-target-libphobos 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing TAGS in $(TARGET_SUBDIR)/libphobos" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           TAGS) \
++	  || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-install-info-target-libphobos install-info-target-libphobos
++maybe-install-info-target-libphobos:
++@if target-libphobos
++maybe-install-info-target-libphobos: install-info-target-libphobos
++
++install-info-target-libphobos: \
++    configure-target-libphobos \
++    info-target-libphobos 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing install-info in $(TARGET_SUBDIR)/libphobos" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           install-info) \
++	  || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-install-pdf-target-libphobos install-pdf-target-libphobos
++maybe-install-pdf-target-libphobos:
++@if target-libphobos
++maybe-install-pdf-target-libphobos: install-pdf-target-libphobos
++
++install-pdf-target-libphobos: \
++    configure-target-libphobos \
++    pdf-target-libphobos 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing install-pdf in $(TARGET_SUBDIR)/libphobos" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           install-pdf) \
++	  || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-install-html-target-libphobos install-html-target-libphobos
++maybe-install-html-target-libphobos:
++@if target-libphobos
++maybe-install-html-target-libphobos: install-html-target-libphobos
++
++install-html-target-libphobos: \
++    configure-target-libphobos \
++    html-target-libphobos 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing install-html in $(TARGET_SUBDIR)/libphobos" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           install-html) \
++	  || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-installcheck-target-libphobos installcheck-target-libphobos
++maybe-installcheck-target-libphobos:
++@if target-libphobos
++maybe-installcheck-target-libphobos: installcheck-target-libphobos
++
++installcheck-target-libphobos: \
++    configure-target-libphobos 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing installcheck in $(TARGET_SUBDIR)/libphobos" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           installcheck) \
++	  || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-mostlyclean-target-libphobos mostlyclean-target-libphobos
++maybe-mostlyclean-target-libphobos:
++@if target-libphobos
++maybe-mostlyclean-target-libphobos: mostlyclean-target-libphobos
++
++mostlyclean-target-libphobos: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libphobos" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           mostlyclean) \
++	  || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-clean-target-libphobos clean-target-libphobos
++maybe-clean-target-libphobos:
++@if target-libphobos
++maybe-clean-target-libphobos: clean-target-libphobos
++
++clean-target-libphobos: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing clean in $(TARGET_SUBDIR)/libphobos" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           clean) \
++	  || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-distclean-target-libphobos distclean-target-libphobos
++maybe-distclean-target-libphobos:
++@if target-libphobos
++maybe-distclean-target-libphobos: distclean-target-libphobos
++
++distclean-target-libphobos: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing distclean in $(TARGET_SUBDIR)/libphobos" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           distclean) \
++	  || exit 1
++
++@endif target-libphobos
++
++.PHONY: maybe-maintainer-clean-target-libphobos maintainer-clean-target-libphobos
++maybe-maintainer-clean-target-libphobos:
++@if target-libphobos
++maybe-maintainer-clean-target-libphobos: maintainer-clean-target-libphobos
++
++maintainer-clean-target-libphobos: 
++	@: $(MAKE); $(unstage)
++	@[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0 ; \
++	r=`${PWD_COMMAND}`; export r; \
++	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
++	$(NORMAL_TARGET_EXPORTS) \
++	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libphobos" ; \
++	for flag in $(EXTRA_TARGET_FLAGS); do \
++	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
++	done; \
++	(cd $(TARGET_SUBDIR)/libphobos && \
++	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
++	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
++	          "RANLIB=$${RANLIB}" \
++	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
++	           maintainer-clean) \
++	  || exit 1
++
++@endif target-libphobos
++
++
+ # ----------
+ # GCC module
+ # ----------
+@@ -55298,6 +55756,7 @@
+ configure-target-rda: stage_last
+ configure-target-libada: stage_last
+ configure-target-libgomp: stage_last
++configure-target-libphobos: stage_last
+ @endif gcc-bootstrap
+ 
+ @if gcc-no-bootstrap
+@@ -55322,6 +55781,7 @@
+ configure-target-rda: maybe-all-gcc
+ configure-target-libada: maybe-all-gcc
+ configure-target-libgomp: maybe-all-gcc
++configure-target-libphobos: maybe-all-gcc
+ @endif gcc-no-bootstrap
+ 
+ 
+@@ -56166,6 +56626,7 @@
+ configure-target-rda: maybe-all-target-libgcc
+ configure-target-libada: maybe-all-target-libgcc
+ configure-target-libgomp: maybe-all-target-libgcc
++configure-target-libphobos: maybe-all-target-libgcc
+ @endif gcc-no-bootstrap
+ 
+ 
+@@ -56209,6 +56670,8 @@
+ 
+ configure-target-libgomp: maybe-all-target-newlib maybe-all-target-libgloss
+ 
++configure-target-libphobos: maybe-all-target-newlib maybe-all-target-libgloss
++
+ 
+ CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@
+ GDB_TK = @GDB_TK@
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-sjlj.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-sjlj.diff
@@ -0,0 +1,712 @@
+# DP: There are two exception mechanisms to choose from: zero-cost and
+# DP: setjump/longjump.  The Ada run-time library uses either of them
+# DP: but not both.  Build both versions of the run-time library.
+
+# This patch changes the way the upstream Makefiles build the run-time
+# library.  Before the patch: libada/Makefile calls gcc/ada/Makefile,
+# which builds the "rts" subdirectory containing symbolic links to
+# most source files, and modified copies of a few source files (to
+# take target dependencies into account, and also to select the
+# exception handling mechanism in system.ads).  Then, gcc/ada/Makefile
+# calls itself recursively but in the "rts" subdirectory and builds
+# libgnat.a and libgnarl.a (and a couple other libraries:
+# libgccprefix.a, libgmem.a).  Upon return from this recursive call,
+# it deletes the source and object files from "rts", reconstructs the
+# source files, and builds libgnat.so and libgnarl.so by calling
+# itself recursively a second time in the "rts" directory.
+
+# Furthermore, gcc/ada/Makefile disables parallel makes, so building
+# the static and then shared versions of the RTS is entirely
+# sequential even on SMP systems.
+
+# As a consequence of the above, building the SJLJ version of the
+# library would overwrite the ZCX version.  Thus it is necessary to
+# manually save the previous version of the library before building the
+# second one.
+
+# After the patch: libada/Makefile calls gcc/ada/Makefile, which
+# builds the source directory (named gnatlib-sources instead of rts),
+# containing the symbolic links and target-dependent files.
+
+# In a second step, libada/Makefile calls gcc/ada/Makefile again to
+# build the targets gnatlib-shared-zcx, gnatlib-static-zcx and
+# gnatlib-static-sjlj (we could also build gnatlib-shared-sjlj, but
+# that triggers compiler errors on PowerPC).
+
+# Each of these three targets copies the source directory "rts" into a
+# new directory named rts-shared-zcx, rts-static-zcx or
+# rts-static-sjlj.  In the new directory, they change the value of
+# System.ZCX_By_Default, and then they call gcc/ada/Makefile
+# recursively in the new directory to build the library.
+
+# gcc/ada/Makefile.in has a .NOTPARALLEL directive preventing it from
+# launching commands in parallel.  However, libada/Makefile has no
+# such directive and can invoke up to three instances of
+# gcc/ada/Makefile.in in parallel.  This is okay because each of them
+# runs in a different directory.
+
+# This patch also updates libgnat{vsn,prj}/Makefile and
+# gnattools/Makefile to look for the shared ZCX version of the library
+# in the appropriate directory, rather than just "rts", and updates
+# the "make install" and binary targets as well.
+
+Index: b/src/libada/Makefile.in
+===================================================================
+--- a/src/libada/Makefile.in
++++ b/src/libada/Makefile.in
+@@ -16,7 +16,8 @@
+ # <http://www.gnu.org/licenses/>.
+ 
+ # Default target; must be first.
+-all: gnatlib
++GNATLIB = gnatlib-static-zcx gnatlib-static-sjlj gnatlib-shared-zcx
++all: $(GNATLIB)
+ 	$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE)
+ 
+ .PHONY: all install
+@@ -94,26 +95,29 @@
+         "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)"
+ 
+ # Rules to build gnatlib.
+-.PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared oscons
+-gnatlib: @default_gnatlib_target@
++.PHONY: $(GNATLIB) oscons
+ 
+-gnatlib-plain: oscons $(GCC_DIR)/ada/Makefile
+-	test -f stamp-libada || \
+-	$(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) gnatlib \
+-	&& touch stamp-libada
+-	-rm -rf adainclude
+-	-rm -rf adalib
+-	$(LN_S) $(ADA_RTS_DIR) adainclude
+-	$(LN_S) $(ADA_RTS_DIR) adalib
+-
+-gnatlib-sjlj gnatlib-zcx gnatlib-shared: oscons $(GCC_DIR)/ada/Makefile
+-	test -f stamp-libada || \
+-	$(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) $@ \
+-	&& touch stamp-libada
+-	-rm -rf adainclude
+-	-rm -rf adalib
+-	$(LN_S) $(ADA_RTS_DIR) adainclude
+-	$(LN_S) $(ADA_RTS_DIR) adalib
++$(GCC_DIR)/ada/gnatlib-sources-sjlj/a-except.ads:
++	$(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) \
++	  EH_MECHANISM="" \
++	  gnatlib-sources-sjlj/a-except.ads
++
++$(GCC_DIR)/ada/gnatlib-sources-zcx/a-except.ads:
++	$(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) \
++	  EH_MECHANISM="-gcc" \
++	  gnatlib-sources-zcx/a-except.ads
++
++
++$(GNATLIB): oscons $(GCC_DIR)/ada/Makefile \
++$(GCC_DIR)/ada/gnatlib-sources-zcx/a-except.ads \
++$(GCC_DIR)/ada/gnatlib-sources-sjlj/a-except.ads
++	$(MAKE) -C $(GCC_DIR)/ada $(FLAGS_TO_PASS) \
++	  GNATLIBFLAGS="$(GNATLIBFLAGS)" \
++	  GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
++	  TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
++	  THREAD_KIND="$(THREAD_KIND)" \
++	  TRACE="$(TRACE)" \
++	  $@
+ 
+ oscons:
+ 	$(MAKE) -C $(GCC_DIR) $(LIBADA_FLAGS_TO_PASS) ada/s-oscons.ads
+Index: b/src/gcc/ada/gcc-interface/Makefile.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -1819,51 +1819,75 @@
+  a-[a-o]*.adb a-[p-z]*.adb a-[a-o]*.ads a-[p-z]*.ads g-*.ad? i-*.ad? \
+  s-[a-o]*.adb s-[p-z]*.adb s-[a-o]*.ads s-[p-z]*.ads
+ 
+-../stamp-gnatlib-$(RTSDIR):
+-	@if [ ! -f stamp-gnatlib-$(RTSDIR) ] ; \
+-	then \
+-	  $(ECHO) You must first build the GNAT library: make gnatlib; \
+-	  false; \
+-	else \
+-	  true; \
+-	fi
++libgnat = libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
++libgnat-sjlj = libgnat$(hyphen)sjlj$(hyphen)$(LIBRARY_VERSION)$(soext)
+ 
+-install-gnatlib: ../stamp-gnatlib-$(RTSDIR)
++install-gnatlib: rts-static-zcx/libgnat$(arext) rts-static-sjlj/libgnat$(arext)
++install-gnatlib: rts-shared-zcx/$(libgnat)
+ #	Create the directory before deleting it, in case the directory is
+ #	a list of directories (as it may be on VMS). This ensures we are
+ #	deleting the right one.
+-	-$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
+-	-$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
+-	$(RMDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
+-	$(RMDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
+-	-$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
+-	-$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
+-	for file in $(RTSDIR)/*.ali; do \
+-	    $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
++	-$(MKDIR) $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR)
++	-$(MKDIR) $(DESTDIR)$(ADA_NATIVE_INCLUDE_DIR)
++	$(RMDIR) $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR)
++	$(RMDIR) $(DESTDIR)$(ADA_NATIVE_INCLUDE_DIR)
++	-$(MKDIR) $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR)
++	-$(MKDIR) $(DESTDIR)$(ADA_NATIVE_INCLUDE_DIR)
++
++	-$(MKDIR) $(DESTDIR)$(ADA_SJLJ_RTL_OBJ_DIR)
++	-$(MKDIR) $(DESTDIR)$(ADA_SJLJ_INCLUDE_DIR)
++	$(RMDIR) $(DESTDIR)$(ADA_SJLJ_RTL_OBJ_DIR)
++	$(RMDIR) $(DESTDIR)$(ADA_SJLJ_INCLUDE_DIR)
++	-$(MKDIR) $(DESTDIR)$(ADA_SJLJ_RTL_OBJ_DIR)
++	-$(MKDIR) $(DESTDIR)$(ADA_SJLJ_INCLUDE_DIR)
++
++	for file in rts-shared-zcx/*.ali; do \
++	$(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR); \
++	done
++	for file in rts-static-sjlj/*.ali; do \
++	$(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_SJLJ_RTL_OBJ_DIR); \
++	done
++
++	-cd rts-static-zcx; for file in *$(arext);do \
++	$(INSTALL_DATA) $$file $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR); \
++	$(RANLIB_FOR_TARGET) $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR)/$$file; \
+ 	done
+-	-cd $(RTSDIR); for file in *$(arext);do \
+-	    $(INSTALL_DATA) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
+-	    $(RANLIB_FOR_TARGET) $(DESTDIR)$(ADA_RTL_OBJ_DIR)/$$file; \
++	-cd rts-static-sjlj; for file in *$(arext);do \
++	$(INSTALL_DATA) $$file $(DESTDIR)$(ADA_SJLJ_RTL_OBJ_DIR); \
++	$(RANLIB_FOR_TARGET) $(DESTDIR)$(ADA_SJLJ_RTL_OBJ_DIR)/$$file; \
+ 	done
++
++	-$(foreach file, $(EXTRA_ADALIB_FILES), \
++	    $(INSTALL_DATA_DATE) rts-static-zcx/$(file) $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR) && \
++	) true
+ 	-$(foreach file, $(EXTRA_ADALIB_FILES), \
+-	    $(INSTALL_DATA_DATE) $(RTSDIR)/$(file) $(DESTDIR)$(ADA_RTL_OBJ_DIR) && \
++	    $(INSTALL_DATA_DATE) rts-static-sjlj/$(file) $(DESTDIR)$(ADA_SJLJ_RTL_OBJ_DIR) && \
+ 	) true
+ #     Install the shared libraries, if any, using $(INSTALL) instead
+ #     of $(INSTALL_DATA). The latter may force a mode inappropriate
+ #     for shared libraries on some targets, e.g. on HP-UX where the x
+ #     permission is required.
+ 	for file in gnat gnarl; do \
+-	   if [ -f $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) ]; then \
+-	      $(INSTALL) $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
+-			 $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
++	   if [ -f rts-shared-zcx/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).1 ]; then \
++	      $(INSTALL) rts-shared-zcx/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
++			 $(DESTDIR)$(ADA_NATIVE_RTL_OBJ_DIR); \
+ 	   fi; \
+ 	done
+ # This copy must be done preserving the date on the original file.
+-	for file in $(RTSDIR)/*.ad?; do \
+-	    $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_INCLUDE_DIR); \
++	for file in rts-shared-zcx/*.adb rts-shared-zcx/*.ads; do \
++	    $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_NATIVE_INCLUDE_DIR); \
+ 	done
+-	cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.adb
+-	cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.ads
++	$(CHMOD) u=rw,go=r $(DESTDIR)$(ADA_NATIVE_INCLUDE_DIR)/*.adb
++	$(CHMOD) u=rw,go=r $(DESTDIR)$(ADA_NATIVE_INCLUDE_DIR)/*.ads
++	for file in rts-static-sjlj/*.adb rts-static-sjlj/*.ads; do \
++	    $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_SJLJ_INCLUDE_DIR); \
++	done
++	$(CHMOD) u=rw,go=r $(DESTDIR)$(ADA_SJLJ_INCLUDE_DIR)/*.adb
++	$(CHMOD) u=rw,go=r $(DESTDIR)$(ADA_SJLJ_INCLUDE_DIR)/*.ads
++
++	(cd $(DESTDIR)$(libsubdir); \
++	ln -s rts-native/adainclude adainclude; \
++	ln -s rts-native/adalib     adalib;)
+ 
+ # NOTE: The $(foreach ...) commands assume ";" is the valid separator between
+ #       successive target commands. Although the Gnu make documentation
+@@ -1874,26 +1898,33 @@
+ 
+ # GNULLI Begin ###########################################################
+ 
+-../stamp-gnatlib1-$(RTSDIR): Makefile
+-	$(RMDIR) $(RTSDIR)
+-	$(MKDIR) $(RTSDIR)
+-	$(CHMOD) u+w $(RTSDIR)
++replace_zcx_by_default=\
++'s/ZCX_By_Default.*/ZCX_By_Default            : constant Boolean := $(zcx_by_default);/'
++
++gnatlib-sources-zcx/a-except.ads: dir=$(dir $@)
++gnatlib-sources-zcx/a-except.ads: zcx_by_default=True
++
++gnatlib-sources-sjlj/a-except.ads: dir=$(dir $@)
++gnatlib-sources-sjlj/a-except.ads: zcx_by_default=False
++
++gnatlib-sources-zcx/a-except.ads gnatlib-sources-sjlj/a-except.ads:
++	$(MKDIR) $(dir)
++	$(CHMOD) u+w $(dir)
+ # Copy target independent sources
+ 	$(foreach f,$(ADA_INCLUDE_SRCS) $(LIBGNAT_SRCS), \
+-	  $(LN_S) $(fsrcpfx)ada/$(f) $(RTSDIR) ;) true
++	  $(LN_S) $(fsrcpfx)ada/$(f) $(dir) ;) true
+ # Remove files to be replaced by target dependent sources
+ 	$(RM) $(foreach PAIR,$(LIBGNAT_TARGET_PAIRS), \
+-	                $(RTSDIR)/$(word 1,$(subst <, ,$(PAIR))))
+-	$(RM) $(RTSDIR)/*-*-*.ads $(RTSDIR)/*-*-*.adb
++	                $(dir)/$(word 1,$(subst <, ,$(PAIR))))
++	$(RM) $(dir)/*-*-*.ads $(dir)/*-*-*.adb
+ # Copy new target dependent sources
+ 	$(foreach PAIR,$(LIBGNAT_TARGET_PAIRS), \
+ 	          $(LN_S) $(fsrcpfx)ada/$(word 2,$(subst <, ,$(PAIR))) \
+-	                $(RTSDIR)/$(word 1,$(subst <, ,$(PAIR)));)
++	                $(dir)/$(word 1,$(subst <, ,$(PAIR)));)
++	sed -e $(replace_zcx_by_default) $(dir)/system.ads > $(dir)/s.ads
+ # Copy generated target dependent sources
+-	$(RM) $(RTSDIR)/s-oscons.ads
+-	(cd $(RTSDIR); $(LN_S) ../s-oscons.ads s-oscons.ads)
+-	$(RM) ../stamp-gnatlib-$(RTSDIR)
+-	touch ../stamp-gnatlib1-$(RTSDIR)
++	$(RM) $(dir)/s-oscons.ads
++	(cd $(dir); $(LN_S) ../s-oscons.ads s-oscons.ads)
+ 
+ # GNULLI End #############################################################
+ 
+@@ -1903,57 +1934,60 @@
+ # Example: cd $(RTSDIR); ar rc libfoo.a $(LONG_LIST_OF_OBJS)
+ # is guaranteed to overflow the buffer.
+ 
+-gnatlib: ../stamp-gnatlib1-$(RTSDIR)
+-	$(MAKE) -C $(RTSDIR) \
++%/libgnat$(arext): build_dir = $(dir $@)
++%/libgnat$(arext): libgnarl = $(subst libgnat,libgnarl,$@)
++%/libgnat$(arext): libgnala = $(subst libgnat,libgnala,$@)
++%/libgnat$(arext): %
++	$(MAKE) -C $(build_dir) \
+ 		CC="`echo \"$(GCC_FOR_TARGET)\" \
+ 		| sed -e 's,^\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
+-	        INCLUDES="$(INCLUDES_FOR_SUBDIR) -I./../.." \
+-                CFLAGS="$(GNATLIBCFLAGS_FOR_C)" \
+-	        FORCE_DEBUG_ADAFLAGS="$(FORCE_DEBUG_ADAFLAGS)" \
++		INCLUDES="$(INCLUDES_FOR_SUBDIR) -I./../.." \
++		CFLAGS="$(GNATLIBCFLAGS_FOR_C)" \
+ 		srcdir=$(fsrcdir) \
+-	        -f ../Makefile $(LIBGNAT_OBJS)
+-	$(MAKE) -C $(RTSDIR) \
++		-f ../Makefile $(LIBGNAT_OBJS)
++	$(MAKE) -C $(build_dir) \
+ 		CC="`echo \"$(GCC_FOR_TARGET)\" \
+ 		| sed -e 's,^\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
+-	        ADA_INCLUDES="" \
+-                CFLAGS="$(GNATLIBCFLAGS)" \
+-	        ADAFLAGS="$(GNATLIBFLAGS)" \
+-	        FORCE_DEBUG_ADAFLAGS="$(FORCE_DEBUG_ADAFLAGS)" \
++		ADA_INCLUDES="" \
++		CFLAGS="$(GNATLIBCFLAGS)" \
++		ADAFLAGS="$(GNATLIBFLAGS)" \
+ 		srcdir=$(fsrcdir) \
+-	        -f ../Makefile \
+-	        $(GNATRTL_OBJS)
+-	$(RM) $(RTSDIR)/libgnat$(arext) $(RTSDIR)/libgnarl$(arext)
+-	$(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgnat$(arext) \
+-	   $(addprefix $(RTSDIR)/,$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) g-trasym.o convert_addresses.o)
++		-f ../Makefile \
++		$(GNATRTL_OBJS)
++	$(RM) $@ $(libgnarl)
++	$(AR_FOR_TARGET) $(AR_FLAGS) $@ \
++	   $(addprefix $(build_dir),$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) g-trasym.o convert_addresses.o)
+         ifneq ($(PREFIX_OBJS),)
+-		$(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgccprefix$(arext) \
++		$(AR_FOR_TARGET) $(AR_FLAGS) $(build_dir)libgccprefix$(arext) \
+ 		  $(PREFIX_OBJS);
+-		$(RANLIB_FOR_TARGET) $(RTSDIR)/libgccprefix$(arext)
++		$(RANLIB_FOR_TARGET) $(build_dir)libgccprefix$(arext)
+         endif
+-	$(RANLIB_FOR_TARGET) $(RTSDIR)/libgnat$(arext)
+-	$(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgnarl$(arext) \
+-	   $(addprefix $(RTSDIR)/,$(GNATRTL_TASKING_OBJS))
+-	$(RANLIB_FOR_TARGET) $(RTSDIR)/libgnarl$(arext)
+-	$(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgnala$(arext) \
+-	   $(addprefix $(RTSDIR)/,$(GNATRTL_LINEARALGEBRA_OBJS))
+-	$(RANLIB_FOR_TARGET) $(RTSDIR)/libgnala$(arext)
++	$(RANLIB_FOR_TARGET) $@
++	$(AR_FOR_TARGET) $(AR_FLAGS) $(libgnarl) \
++	   $(addprefix $(build_dir),$(GNATRTL_TASKING_OBJS))
++	$(RANLIB_FOR_TARGET) $(libgnarl)
++	$(AR_FOR_TARGET) $(AR_FLAGS) $(libgnala) \
++	   $(addprefix $(build_dir),$(GNATRTL_LINEARALGEBRA_OBJS))
++	$(RANLIB_FOR_TARGET) $(libgnala)
+         ifeq ($(GMEM_LIB),gmemlib)
+-		$(AR_FOR_TARGET) $(AR_FLAGS) $(RTSDIR)/libgmem$(arext) \
+-		  $(RTSDIR)/memtrack.o
+-		$(RANLIB_FOR_TARGET) $(RTSDIR)/libgmem$(arext)
++		$(AR_FOR_TARGET) $(AR_FLAGS) $(build_dir)libgmem$(arext) \
++		  $(build_dir)memtrack.o
++		$(RANLIB_FOR_TARGET) $(build_dir)libgmem$(arext)
+         endif
+-	touch ../stamp-gnatlib-$(RTSDIR)
+ 
+ # Warning: this target assumes that LIBRARY_VERSION has been set correctly.
+-gnatlib-shared-default: ../stamp-gnatlib1-$(RTSDIR)
+-	$(MAKE) -C $(RTSDIR) \
++%/$(libgnat) %/$(libgnat-sjlj): build_dir = $(dir $@)
++%/$(libgnat) %/$(libgnat-sjlj): libgnarl = $(notdir $(subst libgnat,libgnarl,$@))
++%/$(libgnat) %/$(libgnat-sjlj): libgnala = $(notdir $(subst libgnat,libgnala,$@))
++%/$(libgnat) %/$(libgnat-sjlj): %
++	$(MAKE) -C $(build_dir) \
+ 		CC="`echo \"$(GCC_FOR_TARGET)\" \
+ 		| sed -e 's,^\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
+ 	        INCLUDES="$(INCLUDES_FOR_SUBDIR) -I./../.." \
+                 CFLAGS="$(GNATLIBCFLAGS_FOR_C)" \
+ 		srcdir=$(fsrcdir) \
+ 	        -f ../Makefile $(LIBGNAT_OBJS)
+-	$(MAKE) -C $(RTSDIR) \
++	$(MAKE) -C $(build_dir) \
+ 		CC="`echo \"$(GCC_FOR_TARGET)\" \
+ 		| sed -e 's,^\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
+ 	        ADA_INCLUDES="" \
+@@ -1963,154 +1997,56 @@
+ 		srcdir=$(fsrcdir) \
+ 	        -f ../Makefile \
+ 	        $(GNATRTL_OBJS)
+-	$(RM) $(RTSDIR)/libgna*$(soext) $(RTSDIR)/libgna*$(soext).1
+-	cd $(RTSDIR); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
++	$(RM) $(build_dir)/libgna*$(soext) $(build_dir)/libgna*$(soext).1
++	cd $(build_dir); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
+ 		$(TARGET_LIBGCC2_CFLAGS) \
+-		-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
++		-o $(notdir $@).1 \
+ 		$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
+ 		g-trasym.o convert_addresses.o \
+-		$(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
++		$(SO_OPTS)$(notdir $@).1 \
+ 		$(MISCLIB) -lm
+-	cd $(RTSDIR); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
++	cd $(build_dir); $(LN_S) $(notdir $@).1 $(notdir $@)
++	cd $(build_dir); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
+ 		$(TARGET_LIBGCC2_CFLAGS) \
+-		-o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
++		-o $(libgnarl).1 \
+ 		$(GNATRTL_TASKING_OBJS) \
+-		$(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext).1 \
++		$(SO_OPTS)$(libgnarl).1 \
+ 		$(THREADSLIB)
+-	cd $(RTSDIR); for lib in gnat gnarl; do \
+-		l=lib$${lib}$(hyphen)$(LIBRARY_VERSION)$(soext); \
+-		$(LN_S) $$l.1 $$l; \
+-	done
+-# Delete the object files, lest they be linked statically into the tools
+-# executables.  Only the .ali, .a and .so files must remain.
+-	rm -f $(RTSDIR)/*.o
+-	$(CHMOD) a-wx $(RTSDIR)/*.ali
+-
+-gnatlib-shared-dual:
+-	$(MAKE) $(FLAGS_TO_PASS) \
+-             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+-	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+-	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+-	     MULTISUBDIR="$(MULTISUBDIR)" \
+-	     THREAD_KIND="$(THREAD_KIND)" \
+-             gnatlib
+-	$(RM) $(RTSDIR)/*.o $(RTSDIR)/*.ali
+-	$(MAKE) $(FLAGS_TO_PASS) \
+-             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+-	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+-	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+-	     MULTISUBDIR="$(MULTISUBDIR)" \
+-	     THREAD_KIND="$(THREAD_KIND)" \
+-             gnatlib-shared-default
+-
+-gnatlib-shared-dual-win32:
+-	$(MAKE) $(FLAGS_TO_PASS) \
+-             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+-	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+-	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+-	     MULTISUBDIR="$(MULTISUBDIR)" \
+-	     THREAD_KIND="$(THREAD_KIND)" \
+-             gnatlib
+-	$(RM) $(RTSDIR)/*.o $(RTSDIR)/*.ali
+-	$(MAKE) $(FLAGS_TO_PASS) \
+-             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+-	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
+-	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+-	     MULTISUBDIR="$(MULTISUBDIR)" \
+-	     THREAD_KIND="$(THREAD_KIND)" \
+-             gnatlib-shared-win32
+-
+-# ??? we need to add the option to support auto-import of arrays/records to
+-# the GNATLIBFLAGS when this will be supported by GNAT. At this point we will
+-# use the gnatlib-shared-dual-win32 target to build the GNAT runtimes on
+-# Windows.
+-gnatlib-shared-win32:
+-	$(MAKE) $(FLAGS_TO_PASS) \
+-             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+-	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
+-	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+-	     MULTISUBDIR="$(MULTISUBDIR)" \
+-	     THREAD_KIND="$(THREAD_KIND)" \
+-             gnatlib
+-	$(RM) $(RTSDIR)/libgna*$(soext)
+-	cd $(RTSDIR); ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
+-		-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+-		$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
+-		$(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) $(MISCLIB)
+-	cd $(RTSDIR); ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
+-		-o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+-		$(GNATRTL_TASKING_OBJS) \
+-		$(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+-		$(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
+-
+-gnatlib-shared-darwin:
+-	$(MAKE) $(FLAGS_TO_PASS) \
+-	     GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+-	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS) \
+-	                    -fno-common" \
+-	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C) -fno-common" \
+-	     MULTISUBDIR="$(MULTISUBDIR)" \
+-	     THREAD_KIND="$(THREAD_KIND)" \
+-	     gnatlib
+-	$(RM) $(RTSDIR)/libgnat$(soext) $(RTSDIR)/libgnarl$(soext)
+-	cd $(RTSDIR); ../../xgcc -B../../ -dynamiclib $(TARGET_LIBGCC2_CFLAGS) \
+-		-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+-		$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
+-		$(SO_OPTS) \
+-		$(MISCLIB) -lm
+-	cd $(RTSDIR); ../../xgcc -B../../ -dynamiclib $(TARGET_LIBGCC2_CFLAGS) \
+-		-o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+-		$(GNATRTL_TASKING_OBJS) \
+-		$(SO_OPTS) \
+-		$(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
+-	cd $(RTSDIR); $(LN_S) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+-		libgnat$(soext)
+-	cd $(RTSDIR); $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+-		libgnarl$(soext)
++	cd $(build_dir); $(LN_S) $(libgnarl).1 $(libgnarl)
++# TODO: enable building the shared libgnala
++ifeq (libgnala-shared-enabled,yes)
++	cd $(build_dir); ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
++		$(TARGET_LIBGCC2_CFLAGS) \
++		-o $(libgnala).1 \
++		$(GNATRTL_LINEARALGEBRA_OBJS) \
++		$(SO_OPTS)$(libgnala).1
++	cd $(build_dir); $(LN_S) $(libgnala).1 $(libgnala)
++endif
+ 
+-gnatlib-shared-vms:
+-	$(MAKE) $(FLAGS_TO_PASS) \
+-             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+-	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+-	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+-	     MULTISUBDIR="$(MULTISUBDIR)" \
+-	     THREAD_KIND="$(THREAD_KIND)" \
+-             gnatlib
+-	$(RM) $(RTSDIR)/libgna*$(soext)
+-	cd $(RTSDIR) && \
+-	../../gnatsym -s SYMVEC_$$$$.opt \
+-	$(LIBGNAT_OBJS) $(GNATRTL_NONTASKING_OBJS) && \
+-	../../xgcc -g -B../../ -shared -shared-libgcc \
+-	   -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) libgnat.a \
+-	   sys\$$library:trace.exe \
+-	   --for-linker=/noinform \
+-	   --for-linker=SYMVEC_$$$$.opt \
+-	   --for-linker=gsmatch=equal,$(GSMATCH_VERSION)
+-	cd $(RTSDIR) && \
+-	../../gnatsym -s SYMVEC_$$$$.opt \
+-	$(GNATRTL_TASKING_OBJS) && \
+-	../../xgcc -g -B../../ -shared -shared-libgcc \
+-	   -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+-	   libgnarl.a libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+-	   sys\$$library:trace.exe \
+-	   --for-linker=/noinform \
+-	   --for-linker=SYMVEC_$$$$.opt \
+-	   --for-linker=gsmatch=equal,$(GSMATCH_VERSION)
++gnatlib-shared-dual: gnatlib-static-zcx gnatlib-static-sjlj gnatlib-shared-zcx
+ 
+-gnatlib-shared:
++gnatlib-shared-zcx: rts = $(subst gnatlib,rts,$@)
++gnatlib-shared-zcx: gnatlib-sources-zcx/a-except.ads
++	if [ ! -d $(rts) ] ; then \
++	    cp -a gnatlib-sources-zcx $(rts); \
++	    $(MV) $(rts)/s.ads $(rts)/system.ads; \
++	fi
+ 	$(MAKE) $(FLAGS_TO_PASS) \
++	     EH_MECHANISM="-gcc" \
+              GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+ 	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+ 	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+ 	     MULTISUBDIR="$(MULTISUBDIR)" \
+ 	     THREAD_KIND="$(THREAD_KIND)" \
+ 	     TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
+-             $(GNATLIB_SHARED)
++             $(rts)/$(libgnat)
+ 
+-gnatlib-sjlj:
+-	$(MAKE) $(FLAGS_TO_PASS) EH_MECHANISM="" ../stamp-gnatlib1-$(RTSDIR)
+-	sed -e 's/ZCX_By_Default.*/ZCX_By_Default            : constant Boolean := False;/' $(RTSDIR)/system.ads > $(RTSDIR)/s.ads
+-	$(MV) $(RTSDIR)/s.ads $(RTSDIR)/system.ads
++gnatlib-static-sjlj: rts = $(subst gnatlib,rts,$@)
++gnatlib-static-sjlj: gnatlib-sources-sjlj/a-except.ads
++	if [ ! -d $(rts) ] ; then \
++	    cp -a gnatlib-sources-sjlj $(rts); \
++	    $(MV) $(rts)/s.ads $(rts)/system.ads; \
++	fi
+ 	$(MAKE) $(FLAGS_TO_PASS) \
+ 	     EH_MECHANISM="" \
+ 	     GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+@@ -2118,12 +2054,15 @@
+ 	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+ 	     MULTISUBDIR="$(MULTISUBDIR)" \
+ 	     THREAD_KIND="$(THREAD_KIND)" \
+-	     TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" gnatlib
++	     TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
++	     $(rts)/libgnat$(arext)
+ 
+-gnatlib-zcx:
+-	$(MAKE) $(FLAGS_TO_PASS) EH_MECHANISM="-gcc" ../stamp-gnatlib1-$(RTSDIR)
+-	sed -e 's/ZCX_By_Default.*/ZCX_By_Default            : constant Boolean := True;/' $(RTSDIR)/system.ads > $(RTSDIR)/s.ads
+-	$(MV) $(RTSDIR)/s.ads $(RTSDIR)/system.ads
++gnatlib-static-zcx: rts = $(subst gnatlib,rts,$@)
++gnatlib-static-zcx: gnatlib-sources-zcx/a-except.ads
++	if [ ! -d $(rts) ] ; then \
++	    cp -a gnatlib-sources-zcx $(rts); \
++	    $(MV) $(rts)/s.ads $(rts)/system.ads; \
++	fi
+ 	$(MAKE) $(FLAGS_TO_PASS) \
+ 	     EH_MECHANISM="-gcc" \
+ 	     GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+@@ -2131,7 +2070,8 @@
+ 	     GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
+ 	     MULTISUBDIR="$(MULTISUBDIR)" \
+ 	     THREAD_KIND="$(THREAD_KIND)" \
+-	     TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" gnatlib
++	     TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
++	     $(rts)/libgnat$(arext)
+ 
+ # .s files for cross-building
+ gnat-cross: force
+@@ -2139,6 +2079,10 @@
+ 
+ ADA_INCLUDE_DIR = $(libsubdir)/adainclude
+ ADA_RTL_OBJ_DIR = $(libsubdir)/adalib
++ADA_NATIVE_INCLUDE_DIR = $(libsubdir)/rts-native/adainclude
++ADA_NATIVE_RTL_OBJ_DIR = $(libsubdir)/rts-native/adalib
++ADA_SJLJ_INCLUDE_DIR = $(libsubdir)/rts-sjlj/adainclude
++ADA_SJLJ_RTL_OBJ_DIR = $(libsubdir)/rts-sjlj/adalib
+ 
+ # force no sibling call optimization on s-traceb.o so the number of stack
+ # frames to be skipped when computing a call chain is not modified by
+Index: b/src/gnattools/Makefile.in
+===================================================================
+--- a/src/gnattools/Makefile.in
++++ b/src/gnattools/Makefile.in
+@@ -35,12 +35,13 @@
+ LN_S=@LN_S@
+ target_noncanonical=@target_noncanonical@
+ 
++RTS=../gcc/ada/rts-shared-zcx
+ CFLAGS=-O2 -Wall
+ ADA_CFLAGS=-O2 -gnatn
+-ADA_INCLUDES=-nostdinc -I- -I. -I../gcc/ada/rts -I../libgnatvsn -I../libgnatprj
++ADA_INCLUDES=-nostdinc -I- -I. -I$(RTS) -I../libgnatvsn -I../libgnatprj
+ LIB_VERSION=$(strip $(shell grep ' Library_Version :' \
+               ../libgnatvsn/gnatvsn.ads | sed -e 's/.*"\(.*\)".*/\1/'))
+-ADA_LIBS := -L../gcc/ada/rts -lgnat-$(LIB_VERSION)
++ADA_LIBS := -L$(RTS) -lgnat-$(LIB_VERSION)
+ ADA_LIBS += -L../libgnatvsn -lgnatvsn
+ ADA_LIBS += -L../libgnatprj -lgnatprj
+ 
+@@ -109,6 +110,7 @@
+ 
+ .PHONY: gnattools gnattools-native gnattools-cross regnattools
+ gnattools: @default_gnattools_target@
++	(cd $(RTS); if [ -d obj ]; then mv obj/* .; rmdir obj; fi)
+ 
+ BODIES := $(foreach f,$(OBJECTS),$(wildcard $(patsubst %.o,@srcdir@/../gcc/ada/%.adb,$(f))))
+ SPECS  := $(foreach f,$(OBJECTS),$(wildcard $(patsubst %.o,@srcdir@/../gcc/ada/%.ads,$(f))))
+@@ -119,9 +121,12 @@
+ 	for file in $(BODIES) $(SPECS); do \
+ 	   $(LN_S) -f $$file .; \
+ 	done
++# Move the RTS object files away lest they be linked statically into the
++# tools.  Only the .ali, .a and .so files must remain.
++	(cd $(RTS); mkdir obj; mv *.o obj; chmod a-wx *.ali)
+ 	touch $@
+ 
+-gnattools-native: ../gcc/ada/rts/libgnat-$(LIB_VERSION).so
++gnattools-native: $(RTS)/libgnat-$(LIB_VERSION).so
+ gnattools-native: ../libgnatvsn/libgnatvsn.so
+ gnattools-native: stamp-gnattools-sources
+ gnattools-native: $(TOOLS)
+@@ -137,7 +142,7 @@
+ 	$(GCC) -o $@ $^ \
+ 	   ../libgnatprj/libgnatprj.a \
+ 	   ../libgnatvsn/libgnatvsn.a \
+-	   ../gcc/ada/rts/libgnat.a \
++	   ../gcc/ada/rts-static-zcx/libgnat.a \
+ 	   ../libiberty/libiberty.a
+ 
+ gnatlink: $(GNATLINK_OBJS) b_gnatl.o
+@@ -155,7 +160,7 @@
+ 	$(GCC) -o $@ $(ADA_CFLAGS) $^ \
+ 	   ../libgnatprj/libgnatprj.a \
+ 	   ../libgnatvsn/libgnatvsn.a \
+-	   ../gcc/ada/rts/libgnat.a \
++	   ../gcc/ada/rts-static-zcx/libgnat.a \
+ 	   ../libiberty/libiberty.a
+ 
+ gnatmake: $(GNATMAKE_OBJS) b_gnatm.o
+Index: b/src/libgnatprj/Makefile.in
+===================================================================
+--- a/src/libgnatprj/Makefile.in
++++ b/src/libgnatprj/Makefile.in
+@@ -25,7 +25,8 @@
+                  @srcdir@/../gcc/ada/gnatvsn.ads | \
+ 	         sed -e 's/.*"\(.*\)".*/\1/'))
+ GCC:=../gcc/xgcc -B../gcc/
+-LIBGNAT_JUST_BUILT := -nostdinc -I../gcc/ada/rts
++RTS:=../gcc/ada/rts-shared-zcx
++LIBGNAT_JUST_BUILT := -nostdinc -I$(RTS)
+ LIBGNATVSN := -I../libgnatvsn
+ CFLAGS := -g -O2
+ ADAFLAGS := -g -O2 -gnatn
+@@ -70,7 +71,7 @@
+ libgnatprj.so.$(LIB_VERSION): $(addprefix obj-shared/,$(OBJECTS))
+ 	: # Make libgnatprj.so
+ 	$(GCC) -o $@ -shared -fPIC -Wl,--soname,$@ $^ \
+-	   -L../gcc/ada/rts -lgnat-$(LIB_VERSION) \
++	   -L$(RTS) -lgnat-$(LIB_VERSION) \
+ 	   -L../libgnatvsn -lgnatvsn
+ 	$(LN_S) -f libgnatprj.so.$(LIB_VERSION) libgnatprj.so
+ 	chmod a=r obj-shared/*.ali
+Index: b/src/libgnatvsn/Makefile.in
+===================================================================
+--- a/src/libgnatvsn/Makefile.in
++++ b/src/libgnatvsn/Makefile.in
+@@ -25,7 +25,8 @@
+                  @srcdir@/../gcc/ada/gnatvsn.ads | \
+ 	         sed -e 's/.*"\(.*\)".*/\1/'))
+ GCC:=../gcc/xgcc -B../gcc/
+-LIBGNAT_JUST_BUILT := -nostdinc -I../gcc/ada/rts
++RTS:=../gcc/ada/rts-shared-zcx
++LIBGNAT_JUST_BUILT := -nostdinc -I$(RTS)
+ CFLAGS := -g -O2 -gnatn
+ BASEVER := $(shell cat @srcdir@/../gcc/BASE-VER)
+ DEVPHASE := $(shell cat @srcdir@/../gcc/DEV-PHASE)
+@@ -64,7 +65,7 @@
+ libgnatvsn.so.$(LIB_VERSION): $(addprefix obj-shared/,$(OBJECTS))
+ 	: # Make libgnatvsn.so
+ 	$(GCC) -o $@ -shared -fPIC -Wl,--soname,$@ $^ \
+-	   -L../gcc/ada/rts -lgnat-$(LIB_VERSION)
++	   -L$(RTS) -lgnat-$(LIB_VERSION)
+ 	ln -s libgnatvsn.so.$(LIB_VERSION) libgnatvsn.so
+ 	chmod a=r obj-shared/*.ali
+ # Make the .ali files, but not the .o files, visible to the gnat tools.
+Index: b/src/gcc/ada/gcc-interface/Make-lang.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Make-lang.in
++++ b/src/gcc/ada/gcc-interface/Make-lang.in
+@@ -69,7 +69,8 @@
+ 	"ADA_FOR_TARGET=$(ADA_FOR_TARGET)"	\
+ 	"INSTALL=$(INSTALL)" 			\
+ 	"INSTALL_DATA=$(INSTALL_DATA)"		\
+-	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)"
++	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)"	\
++	"GCC_FOR_TARGET=$(GCC_FOR_TARGET)"
+ 
+ # Say how to compile Ada programs.
+ .SUFFIXES: .ada .adb .ads
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr41848.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr41848.diff
@@ -0,0 +1,54 @@
+# DP: Fix PR objc/41848 - workaround ObjC and -fsection-anchors.
+
+--- a/src/gcc/objc/lang-specs.h	(revision 153702)
++++ b/src/gcc/objc/lang-specs.h	(working copy)
+@@ -26,29 +26,33 @@ along with GCC; see the file COPYING3.  
+   {"@objective-c",
+      "%{E|M|MM:cc1obj -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}\
+           %(cpp_options) %(cpp_debug_options)}\
++        %{fsection-anchors: %eGNU Objective C can't use -fsection-anchors} \
+       %{!E:%{!M:%{!MM:\
+ 	%{traditional|ftraditional|traditional-cpp:\
+ %eGNU Objective C no longer supports traditional compilation}\
+ 	%{save-temps|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps:%b.mi} %{!save-temps:%g.mi} \n\
+-	    cc1obj -fpreprocessed %{save-temps:%b.mi} %{!save-temps:%g.mi} %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}\
++           cc1obj -fpreprocessed -fno-section-anchors %{save-temps:%b.mi} %{!save-temps:%g.mi} %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}\
+ 	%{!save-temps:%{!no-integrated-cpp:\
+-	    cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}}\
++	    cc1obj %(cpp_unique_options) -fno-section-anchors %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}}\
+         %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+   {".mi", "@objc-cpp-output", 0, 0, 0},
+   {"@objc-cpp-output",
+-     "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
+-			     %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
++     "%{!M:%{!MM:%{!E:cc1obj -fno-section-anchors -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++			     %{!fsyntax-only:%(invoke_as)}}}}   \
++    %{fsection-anchors: %eGNU Objective C can't use -fsection-anchors} ", 0, 0, 0},
+   {"@objective-c-header",
+      "%{E|M|MM:cc1obj -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}\
+           %(cpp_options) %(cpp_debug_options)}\
++        %{fsection-anchors: %eGNU Objective C can't use -fsection-anchors} \
+       %{!E:%{!M:%{!MM:\
+ 	%{traditional|ftraditional|traditional-cpp:\
+ %eGNU Objective C no longer supports traditional compilation}\
+ 	%{save-temps|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps:%b.mi} %{!save-temps:%g.mi} \n\
+-	    cc1obj -fpreprocessed %b.mi %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++	    cc1obj -fpreprocessed %b.mi %(cc1_options) -fno-section-anchors %{print-objc-runtime-info} %{gen-decls}\
+                         -o %g.s %{!o*:--output-pch=%i.gch}\
+                         %W{o*:--output-pch=%*}%V}\
++        %{fsection-anchors: %eGNU Objective C can't use -fsection-anchors} \
+ 	%{!save-temps:%{!no-integrated-cpp:\
+-	    cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++	    cc1obj %(cpp_unique_options) -fno-section-anchors %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
+                         -o %g.s %{!o*:--output-pch=%i.gch}\
+                         %W{o*:--output-pch=%*}%V}}}}}", 0, 0, 0},
+--- a/src/gcc/testsuite/objc/execute/forward-1.x	(revision 153702)
++++ b/src/gcc/testsuite/objc/execute/forward-1.x	(working copy)
+@@ -6,6 +6,7 @@ load_lib target-supports.exp
+ 
+ if { ([istarget x86_64-*-linux*] && [check_effective_target_lp64] )
+      || [istarget powerpc*-*-linux*]
++     || [istarget arm*]
+      || [istarget powerpc*-*-aix*]
+      || [istarget s390*-*-*-linux*]
+      || [istarget sh4-*-linux*]
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-polyorb-dsa.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-polyorb-dsa.diff
@@ -0,0 +1,228 @@
+# DP: - backport support for PolyORB_DSA version 3 from the trunk.
+
+Index: b/src/gcc/ada/rtsfind.adb
+===================================================================
+--- a/src/gcc/ada/rtsfind.adb
++++ b/src/gcc/ada/rtsfind.adb
+@@ -298,6 +298,9 @@
+          elsif U_Id in Ada_Streams_Child then
+             Name_Buffer (12) := '.';
+ 
++         elsif U_Id in Ada_Strings_Child then
++            Name_Buffer (12) := '.';
++
+          elsif U_Id in Ada_Text_IO_Child then
+             Name_Buffer (12) := '.';
+ 
+Index: b/src/gcc/ada/rtsfind.ads
+===================================================================
+--- a/src/gcc/ada/rtsfind.ads
++++ b/src/gcc/ada/rtsfind.ads
+@@ -62,6 +62,9 @@
+    --    Names of the form Ada_Streams_xxx are second level children
+    --    of Ada.Streams.
+ 
++   --    Names of the form Ada_Strings_xxx are second level children
++   --    of Ada.Strings.
++
+    --    Names of the form Ada_Text_IO_xxx are second level children
+    --    of Ada.Text_IO.
+ 
+@@ -121,6 +124,7 @@
+       Ada_Interrupts,
+       Ada_Real_Time,
+       Ada_Streams,
++      Ada_Strings,
+       Ada_Tags,
+       Ada_Task_Identification,
+       Ada_Task_Termination,
+@@ -150,6 +154,10 @@
+ 
+       Ada_Streams_Stream_IO,
+ 
++      --  Children of Ada.Strings
++
++      Ada_Strings_Unbounded,
++
+       --  Children of Ada.Text_IO (for Text_IO_Kludge)
+ 
+       Ada_Text_IO_Decimal_IO,
+@@ -401,6 +409,11 @@
+ 
+    subtype Ada_Streams_Child is Ada_Child
+      range Ada_Streams_Stream_IO .. Ada_Streams_Stream_IO;
++   --  Range of values for children of Ada.Streams
++
++   subtype Ada_Strings_Child is Ada_Child
++     range Ada_Strings_Unbounded .. Ada_Strings_Unbounded;
++   --  Range of values for children of Ada.Strings
+ 
+    subtype Ada_Text_IO_Child is Ada_Child
+      range Ada_Text_IO_Decimal_IO .. Ada_Text_IO_Modular_IO;
+@@ -526,6 +539,8 @@
+ 
+      RE_Stream_Access,                   -- Ada.Streams.Stream_IO
+ 
++     RE_Unbounded_String,                -- Ada.Strings.Unbounded
++
+      RE_Access_Level,                    -- Ada.Tags
+      RE_Address_Array,                   -- Ada.Tags
+      RE_Addr_Ptr,                        -- Ada.Tags
+@@ -1203,6 +1218,7 @@
+      RE_TA_WWC,                          -- System.Partition_Interface
+      RE_TA_String,                       -- System.Partition_Interface
+      RE_TA_ObjRef,                       -- System.Partition_Interface
++     RE_TA_Std_String,                   -- System.Partition_Interface
+      RE_TA_TC,                           -- System.Partition_Interface
+ 
+      RE_TC_Alias,                        -- System.Partition_Interface
+@@ -1680,6 +1696,8 @@
+ 
+      RE_Stream_Access                    => Ada_Streams_Stream_IO,
+ 
++     RE_Unbounded_String                 => Ada_Strings_Unbounded,
++
+      RE_Access_Level                     => Ada_Tags,
+      RE_Address_Array                    => Ada_Tags,
+      RE_Addr_Ptr                         => Ada_Tags,
+@@ -2348,6 +2366,7 @@
+      RE_TA_WWC                           => System_Partition_Interface,
+      RE_TA_String                        => System_Partition_Interface,
+      RE_TA_ObjRef                        => System_Partition_Interface,
++     RE_TA_Std_String                    => System_Partition_Interface,
+      RE_TA_TC                            => System_Partition_Interface,
+ 
+      RE_TC_Alias                         => System_Partition_Interface,
+Index: b/src/gcc/ada/exp_dist.adb
+===================================================================
+--- a/src/gcc/ada/exp_dist.adb
++++ b/src/gcc/ada/exp_dist.adb
+@@ -6,7 +6,7 @@
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+---          Copyright (C) 1992-2008, Free Software Foundation, Inc.         --
++--          Copyright (C) 1992-2009, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+@@ -6638,13 +6638,13 @@
+                                  Make_Function_Call (Loc,
+                                    Name =>
+                                      New_Occurrence_Of
+-                                       (RTE (RE_TA_String), Loc),
++                                       (RTE (RE_TA_Std_String), Loc),
+                                    Parameter_Associations => New_List (
+                                      Make_String_Literal (Loc, Name_String))),
+                                  Make_Function_Call (Loc,
+                                    Name =>
+                                      New_Occurrence_Of
+-                                       (RTE (RE_TA_String), Loc),
++                                       (RTE (RE_TA_Std_String), Loc),
+                                    Parameter_Associations => New_List (
+                                      Make_String_Literal (Loc,
+                                        Strval => Repo_Id_String))))))))))));
+@@ -8447,7 +8447,7 @@
+             elsif U_Type = RTE (RE_Long_Long_Unsigned) then
+                Lib_RE := RE_FA_LLU;
+ 
+-            elsif U_Type = Standard_String then
++            elsif Is_RTE (U_Type, RE_Unbounded_String) then
+                Lib_RE := RE_FA_String;
+ 
+             --  Special DSA types
+@@ -8944,7 +8944,11 @@
+                         for J in 1 .. Ndim loop
+                            Lnam := New_External_Name ('L', J);
+                            Hnam := New_External_Name ('H', J);
+-                           Indt := Etype (Indx);
++
++                           --  Note, for empty arrays bounds may be out of
++                           --  the range of Etype (Indx).
++
++                           Indt := Base_Type (Etype (Indx));
+ 
+                            Append_To (Decls,
+                              Make_Object_Declaration (Loc,
+@@ -9217,6 +9221,7 @@
+ 
+             Typ     : Entity_Id := Etype (N);
+             U_Type  : Entity_Id;
++            C_Type  : Entity_Id;
+             Fnam    : Entity_Id := Empty;
+             Lib_RE  : RE_Id := RE_Null;
+ 
+@@ -9312,7 +9317,7 @@
+             elsif U_Type = RTE (RE_Long_Long_Unsigned) then
+                Lib_RE := RE_TA_LLU;
+ 
+-            elsif U_Type = Standard_String then
++            elsif Is_RTE (U_Type, RE_Unbounded_String) then
+                Lib_RE := RE_TA_String;
+ 
+             --  Special DSA types
+@@ -9345,11 +9350,23 @@
+                Fnam := RTE (Lib_RE);
+             end if;
+ 
++            --  If Fnam is already analyzed, find the proper expected type,
++            --  else we have a newly constructed To_Any function and we know
++            --  that the expected type of its parameter is U_Type.
++
++            if Ekind (Fnam) = E_Function
++                 and then Present (First_Formal (Fnam))
++            then
++               C_Type := Etype (First_Formal (Fnam));
++            else
++               C_Type := U_Type;
++            end if;
++
+             return
+                 Make_Function_Call (Loc,
+                   Name                   => New_Occurrence_Of (Fnam, Loc),
+                   Parameter_Associations =>
+-                    New_List (Unchecked_Convert_To (U_Type, N)));
++                    New_List (OK_Convert_To (C_Type, N)));
+          end Build_To_Any_Call;
+ 
+          ---------------------------
+@@ -10084,7 +10101,7 @@
+                elsif U_Type = RTE (RE_Long_Long_Unsigned) then
+                   Lib_RE := RE_TC_LLU;
+ 
+-               elsif U_Type = Standard_String then
++               elsif Is_RTE (U_Type, RE_Unbounded_String) then
+                   Lib_RE := RE_TC_String;
+ 
+                --  Special DSA types
+@@ -10184,7 +10201,7 @@
+             begin
+                Append_To (Parameter_List,
+                  Make_Function_Call (Loc,
+-                   Name => New_Occurrence_Of (RTE (RE_TA_String), Loc),
++                   Name => New_Occurrence_Of (RTE (RE_TA_Std_String), Loc),
+                    Parameter_Associations => New_List (
+                      Make_String_Literal (Loc, S))));
+             end Add_String_Parameter;
+Index: b/src/gcc/ada/exp_dist.ads
+===================================================================
+--- a/src/gcc/ada/exp_dist.ads
++++ b/src/gcc/ada/exp_dist.ads
+@@ -6,7 +6,7 @@
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+---          Copyright (C) 1992-2008, Free Software Foundation, Inc.         --
++--          Copyright (C) 1992-2009, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+@@ -35,7 +35,7 @@
+    PCS_Version_Number : constant array (PCS_Names) of Int :=
+                           (Name_No_DSA      => 1,
+                            Name_GARLIC_DSA  => 1,
+-                           Name_PolyORB_DSA => 2);
++                           Name_PolyORB_DSA => 3);
+    --  PCS interface version. This is used to check for consistency between the
+    --  compiler used to generate distribution stubs and the PCS implementation.
+    --  It must be incremented whenever a change is made to the generated code
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-gnatvsn.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-gnatvsn.diff
@@ -0,0 +1,23 @@
+# DP: proposed patch for PR ada/27194.
+
+--- a/src/gcc/gnatvsn.adb.orig	2005-07-01 03:29:17.000000000 +0200
++++ b/src/gcc/ada/gnatvsn.adb	2006-04-18 10:00:05.100002000 +0200
+@@ -54,12 +54,13 @@
+    ---/----------------------
+ 
+    function Gnat_Version_String return String is
+-      NUL_Pos : Positive := 1;
++      NUL_Pos : Positive := Version_String'Last;
+    begin
+-      loop
+-         exit when Version_String (NUL_Pos) = ASCII.NUL;
+-
+-         NUL_Pos := NUL_Pos + 1;
++      for J in Version_String'Range loop
++         if Version_String (J) = ASCII.NUL then
++            NUL_Pos := J;
++            exit;
++         end if;
+       end loop;
+ 
+       return Version_String (1 .. NUL_Pos - 1);
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-gcc-name.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-gcc-name.diff
@@ -0,0 +1,112 @@
+# DP: use gcc-4.4 instead of gcc as the command name.
+
+Index: b/src/gcc/ada/comperr.adb
+===================================================================
+--- a/src/gcc/ada/comperr.adb
++++ b/src/gcc/ada/comperr.adb
+@@ -356,7 +356,7 @@
+                End_Line;
+ 
+                Write_Str
+-                 ("| Include the exact gcc or gnatmake command " &
++                 ("| Include the exact gcc-4.4 or gnatmake command " &
+                   "that you entered.");
+                End_Line;
+ 
+Index: b/src/gcc/ada/gnatlink.adb
+===================================================================
+--- a/src/gcc/ada/gnatlink.adb
++++ b/src/gcc/ada/gnatlink.adb
+@@ -137,7 +137,7 @@
+    --  This table collects the arguments to be passed to compile the binder
+    --  generated file.
+ 
+-   Gcc : String_Access := Program_Name ("gcc", "gnatlink");
++   Gcc : String_Access := Program_Name ("gcc-4.4", "gnatlink");
+ 
+    Read_Mode : constant String := "r" & ASCII.NUL;
+ 
+@@ -1411,7 +1411,8 @@
+       end if;
+ 
+       Write_Line ("  --GCC=comp Use comp as the compiler");
+-      Write_Line ("  --LINK=nam Use 'nam' for the linking rather than 'gcc'");
++      Write_Line ("  --LINK=nam Use 'nam' for the linking rather " &
++                  "than 'gcc-4.4'");
+       Write_Eol;
+       Write_Line ("  [non-Ada-objects]  list of non Ada object files");
+       Write_Line ("  [linker-options]   other options for the linker");
+Index: b/src/gcc/ada/make.adb
+===================================================================
+--- a/src/gcc/ada/make.adb
++++ b/src/gcc/ada/make.adb
+@@ -670,7 +670,7 @@
+    -- Compiler, Binder & Linker Data and Subprograms --
+    ----------------------------------------------------
+ 
+-   Gcc      : String_Access := Program_Name ("gcc", "gnatmake");
++   Gcc      : String_Access := Program_Name ("gcc-4.4", "gnatmake");
+    Gnatbind : String_Access := Program_Name ("gnatbind", "gnatmake");
+    Gnatlink : String_Access := Program_Name ("gnatlink", "gnatmake");
+    --  Default compiler, binder, linker programs
+Index: b/src/gcc/ada/gnatchop.adb
+===================================================================
+--- a/src/gcc/ada/gnatchop.adb
++++ b/src/gcc/ada/gnatchop.adb
+@@ -44,7 +44,7 @@
+    Config_File_Name : constant String_Access := new String'("gnat.adc");
+    --  The name of the file holding the GNAT configuration pragmas
+ 
+-   Gcc : String_Access := new String'("gcc");
++   Gcc : String_Access := new String'("gcc-4.4");
+    --  May be modified by switch --GCC=
+ 
+    Gcc_Set : Boolean := False;
+Index: b/src/gcc/ada/mdll-utl.adb
+===================================================================
+--- a/src/gcc/ada/mdll-utl.adb
++++ b/src/gcc/ada/mdll-utl.adb
+@@ -39,7 +39,7 @@
+    Dlltool_Name  : constant String := "dlltool";
+    Dlltool_Exec  : OS_Lib.String_Access;
+ 
+-   Gcc_Name      : constant String := "gcc";
++   Gcc_Name      : constant String := "gcc-4.4";
+    Gcc_Exec      : OS_Lib.String_Access;
+ 
+    Gnatbind_Name : constant String := "gnatbind";
+@@ -212,7 +212,7 @@
+          end;
+       end if;
+ 
+-      Print_Command ("gcc", Arguments (1 .. A));
++      Print_Command ("gcc-4.4", Arguments (1 .. A));
+ 
+       OS_Lib.Spawn (Gcc_Exec.all, Arguments (1 .. A), Success);
+ 
+Index: b/src/gcc/ada/mlib-utl.adb
+===================================================================
+--- a/src/gcc/ada/mlib-utl.adb
++++ b/src/gcc/ada/mlib-utl.adb
+@@ -412,7 +412,7 @@
+       if Driver_Name = No_Name then
+          if Gcc_Exec = null then
+             if Gcc_Name = null then
+-               Gcc_Name := Osint.Program_Name ("gcc", "gnatmake");
++               Gcc_Name := Osint.Program_Name ("gcc-4.4", "gnatmake");
+             end if;
+ 
+             Gcc_Exec := Locate_Exec_On_Path (Gcc_Name.all);
+Index: b/src/gcc/ada/prj-makr.adb
+===================================================================
+--- a/src/gcc/ada/prj-makr.adb
++++ b/src/gcc/ada/prj-makr.adb
+@@ -109,7 +109,7 @@
+ 
+    procedure Dup2 (Old_Fd, New_Fd : File_Descriptor);
+ 
+-   Gcc      : constant String := "gcc";
++   Gcc      : constant String := "gcc-4.4";
+    Gcc_Path : String_Access := null;
+ 
+    Non_Empty_Node : constant Project_Node_Id := 1;
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/svn-doc-updates.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/svn-doc-updates.diff
@@ -0,0 +1,6 @@
+# DP: updates from the 4.4 branch upto 2010xxxx (documentation).
+
+svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_4_5_release svn://gcc.gnu.org/svn/gcc/branches/gcc-4_4-branch \
+	| sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
+	| awk '/^Index:.*\.texi/ {skip=0; print; next} /^Index:/ {skip=1; next} skip==0'
+
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/deb-protoize.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/deb-protoize.diff
@@ -0,0 +1,34 @@
+# DP: build protoize/unprotoize binaries
+
+---
+ gcc/Makefile.in |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -125,7 +125,7 @@ SUBDIRS =@subdirs@ build
+ 
+ # Selection of languages to be made.
+ CONFIG_LANGUAGES = @all_selected_languages@
+-LANGUAGES = c gcov$(exeext) gcov-dump$(exeext) $(CONFIG_LANGUAGES)
++LANGUAGES = c proto gcov$(exeext) gcov-dump$(exeext) $(CONFIG_LANGUAGES)
+ 
+ # Default values for variables overridden in Makefile fragments.
+ # CFLAGS is for the user to override to, e.g., do a cross build with -O2.
+@@ -3501,14 +3501,14 @@ unprotoize$(exeext): unprotoize.o $(PROTO_OBJS) $(LIBDEPS)
+ protoize.o: protoize.c $(srcdir)/../include/getopt.h $(CONFIG_H) $(SYSTEM_H) \
+    coretypes.h $(TM_H) Makefile version.h cppdefault.h intl.h
+ 	(SHLIB_LINK='$(SHLIB_LINK)'; \
+-	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) \
++	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) -Wno-error \
+ 	  $(DRIVER_DEFINES) \
+ 	  $(srcdir)/protoize.c $(OUTPUT_OPTION))
+ 
+ unprotoize.o: protoize.c $(srcdir)/../include/getopt.h $(CONFIG_H) \
+     $(SYSTEM_H) coretypes.h $(TM_H) Makefile version.h cppdefault.h intl.h
+ 	(SHLIB_LINK='$(SHLIB_LINK)'; \
+-	$(CC) -c -DUNPROTOIZE $(ALL_CFLAGS) $(ALL_CPPFLAGS) \
++	$(CC) -c -DUNPROTOIZE $(ALL_CFLAGS) $(ALL_CPPFLAGS) -Wno-error \
+ 	  $(DRIVER_DEFINES) \
+ 	  $(srcdir)/protoize.c $(OUTPUT_OPTION))
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-default-fortify-source.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-default-fortify-source.diff
@@ -0,0 +1,32 @@
+# DP: Turn on -D_FORTIFY_SOURCE=2 by default for C, C++, ObjC, ObjC++.
+
+---
+ gcc/doc/invoke.texi |    6 ++++++
+ gcc/gcc.c           |    1 +
+ 2 files changed, 7 insertions(+), 0 deletions(-)
+
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -5415,6 +5415,12 @@ also turns on the following optimization flags:
+ Please note the warning under @option{-fgcse} about
+ invoking @option{-O2} on programs that use computed gotos.
+ 
++NOTE: In Ubuntu 8.10 and later versions, @option{-D_FORTIFY_SOURCE=2} is
++set by default, and is activated when @option{-O} is set to 2 or higher.
++This enables additional compile-time and run-time checks for several libc
++functions.  To disable, specify either @option{-U_FORTIFY_SOURCE} or
++@option{-D_FORTIFY_SOURCE=0}.
++
+ @item -O3
+ @opindex O3
+ Optimize yet more.  @option{-O3} turns on all optimizations specified
+--- a/src/gcc/gcc.c
++++ b/src/gcc/gcc.c
+@@ -810,6 +810,7 @@ static const char *cpp_unique_options =
+  %{H} %C %{D*&U*&A*} %{i*} %Z %i\
+  %{fmudflap:-D_MUDFLAP -include mf-runtime.h}\
+  %{fmudflapth:-D_MUDFLAP -D_MUDFLAPTH -include mf-runtime.h}\
++ %{!D_FORTIFY_SOURCE:%{!D_FORTIFY_SOURCE=*:%{!U_FORTIFY_SOURCE:-D_FORTIFY_SOURCE=2}}}\
+  %{E|M|MM:%W{o*}}";
+ 
+ /* This contains cpp options which are common with cc1_options and are passed
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/cross-fixes.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/cross-fixes.diff
@@ -0,0 +1,90 @@
+# DP: Fix the linker error when creating an xcc for ia64
+
+---
+ gcc/config/alpha/linux-unwind.h |    3 +++
+ gcc/config/ia64/fde-glibc.c     |    3 +++
+ gcc/config/ia64/unwind-ia64.c   |    3 ++-
+ gcc/unwind-compat.c             |    2 ++
+ gcc/unwind-generic.h            |    2 ++
+ 6 files changed, 14 insertions(+), 1 deletions(-)
+
+--- a/src/gcc/config/alpha/linux-unwind.h
++++ b/src/gcc/config/alpha/linux-unwind.h
+@@ -29,6 +29,7 @@ Boston, MA 02110-1301, USA.  */
+ /* Do code reading to identify a signal frame, and set the frame
+    state data appropriately.  See unwind-dw2.c for the structs.  */
+ 
++#ifndef inhibit_libc
+ #include <signal.h>
+ #include <sys/ucontext.h>
+ 
+@@ -80,3 +81,5 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
+   fs->retaddr_column = 64;
+   return _URC_NO_REASON;
+ }
++
++#endif
+--- a/src/gcc/config/ia64/fde-glibc.c
++++ b/src/gcc/config/ia64/fde-glibc.c
+@@ -31,6 +31,7 @@
+ #ifndef _GNU_SOURCE
+ #define _GNU_SOURCE 1
+ #endif
++#ifndef inhibit_libc
+ #include "config.h"
+ #include <stddef.h>
+ #include <stdlib.h>
+@@ -162,3 +163,5 @@ _Unwind_FindTableEntry (void *pc, unsigned long *segment_base,
+ 
+   return data.ret;
+ }
++
++#endif
+--- a/src/gcc/config/ia64/unwind-ia64.c
++++ b/src/gcc/config/ia64/unwind-ia64.c
+@@ -27,6 +27,7 @@
+    This exception does not however invalidate any other reasons why
+    the executable file might be covered by the GNU General Public License.  */
+ 
++#ifndef inhibit_libc
+ #include "tconfig.h"
+ #include "tsystem.h"
+ #include "coretypes.h"
+@@ -2417,3 +2417,4 @@ alias (_Unwind_SetIP);
+ #endif
+ 
+ #endif
++#endif
+--- a/src/gcc/unwind-compat.c
++++ b/src/gcc/unwind-compat.c
+@@ -29,6 +29,7 @@
+    02110-1301, USA.  */
+ 
+ #if defined (USE_GAS_SYMVER) && defined (USE_LIBUNWIND_EXCEPTIONS)
++#ifndef inhibit_libc
+ #include "tconfig.h"
+ #include "tsystem.h"
+ #include "unwind.h"
+@@ -213,3 +214,4 @@ _Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr val)
+ }
+ symver (_Unwind_SetIP, GCC_3.0);
+ #endif
++#endif
+--- a/src/gcc/unwind-generic.h
++++ b/src/gcc/unwind-generic.h
+@@ -214,6 +214,7 @@ _Unwind_SjLj_Resume_or_Rethrow (struct _Unwind_Exception *);
+    compatible with the standard ABI for IA-64, we inline these.  */
+ 
+ #ifdef __ia64__
++#ifndef inhibit_libc
+ #include <stdlib.h>
+ 
+ static inline _Unwind_Ptr
+@@ -232,6 +233,7 @@ _Unwind_GetTextRelBase (struct _Unwind_Context *_C __attribute__ ((__unused__)))
+ 
+ /* @@@ Retrieve the Backing Store Pointer of the given context.  */
+ extern _Unwind_Word _Unwind_GetBSP (struct _Unwind_Context *);
++#endif
+ #else
+ extern _Unwind_Ptr _Unwind_GetDataRelBase (struct _Unwind_Context *);
+ extern _Unwind_Ptr _Unwind_GetTextRelBase (struct _Unwind_Context *);
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-no-add-needed.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-no-add-needed.diff
@@ -0,0 +1,54 @@
+# DP: On linux targets pass --no-add-needed to the linker.
+
+2010-02-08  Roland McGrath  <roland@redhat.com>
+
+	* config/rs6000/sysv4.h (LINK_EH_SPEC): Pass --no-add-needed to the
+	linker.
+	* config/linux.h (LINK_EH_SPEC): Likewise.
+	* config/alpha/elf.h (LINK_EH_SPEC): Likewise.
+	* config/ia64/linux.h (LINK_EH_SPEC): Likewise.
+
+--- ./src/gcc/config/rs6000/sysv4.h~	2009-11-30 16:45:56.000000000 +0100
++++ ./src/gcc/config/rs6000/sysv4.h	2010-04-06 02:32:08.172356816 +0200
+@@ -916,7 +916,7 @@
+   %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}"
+ 
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+-# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++# define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
+ #endif
+ 
+ #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \
+--- ./src/gcc/config/alpha/elf.h~	2009-04-28 12:24:19.000000000 +0200
++++ ./src/gcc/config/alpha/elf.h	2010-04-06 02:31:02.014836042 +0200
+@@ -423,7 +423,7 @@
+    I imagine that other systems will catch up.  In the meantime, it
+    doesn't harm to make sure that the data exists to be used later.  */
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
+ #endif
+ 
+ /* A C statement (sans semicolon) to output to the stdio stream STREAM
+--- ./src/gcc/config/ia64/linux.h~	2009-04-22 10:23:06.000000000 +0200
++++ ./src/gcc/config/ia64/linux.h	2010-04-06 02:33:05.044835760 +0200
+@@ -80,7 +80,7 @@
+    Signalize that because we have fde-glibc, we don't need all C shared libs
+    linked against -lgcc_s.  */
+ #undef LINK_EH_SPEC
+-#define LINK_EH_SPEC ""
++#define LINK_EH_SPEC "--no-add-needed "
+ 
+ #define MD_UNWIND_SUPPORT "config/ia64/linux-unwind.h"
+ 
+--- ./src/gcc/config/linux.h~	2009-04-12 01:39:59.000000000 +0200
++++ ./src/gcc/config/linux.h	2010-04-06 02:32:19.391087422 +0200
+@@ -89,7 +89,7 @@
+     } while (0)
+ 
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
+ #endif
+ 
+ /* Define this so we can compile MS code for use with WINE.  */
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libmudflap-no-testsuite.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libmudflap-no-testsuite.diff
@@ -0,0 +1,12 @@
+# DP: don't run the libmudflap testsuite on hppa; times out on the buildd
+
+--- a/src/libmudflap/testsuite/Makefile.in~	2010-04-02 20:18:06.000000000 +0200
++++ b/src/libmudflap/testsuite/Makefile.in	2011-03-12 14:54:04.143056313 +0100
+@@ -242,6 +242,7 @@
+ 
+ 
+ check-DEJAGNU: site.exp
++	case "$(target)" in hppa*) exit 0;; esac; \
+ 	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
+ 	EXPECT=$(EXPECT); export EXPECT; \
+ 	runtest=$(RUNTEST); \
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/arm-boehm-gc-locks.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/arm-boehm-gc-locks.diff
@@ -0,0 +1,26 @@
+# DP: Fix boehm-gc build on ARM --with-mode=thumb
+
+--- a/src/boehm-gc/include/private/gc_locks.h	(revision 155048)
++++ b/src/boehm-gc/include/private/gc_locks.h	(working copy)
+@@ -207,6 +207,12 @@
+ #       define GC_CLEAR_DEFINED
+ #    endif /* ALPHA */
+ #    ifdef ARM32
++#     define GC_TEST_AND_SET_DEFINED
++#     if (__GNUC__>4)||((__GNUC__==4)&&(__GNUC_MINOR__>=4)) && defined(__ARM_EABI__)
++#       define GC_CLEAR_DEFINED
++#       define GC_test_and_set(addr) __sync_lock_test_and_set (addr, 1)
++#       define GC_clear(addr) __sync_lock_release (addr)
++#     else
+         inline static int GC_test_and_set(volatile unsigned int *addr) {
+           int oldval;
+           /* SWP on ARM is very similar to XCHG on x86.  Doesn't lock the
+@@ -219,7 +225,7 @@
+ 			     : "memory");
+           return oldval;
+         }
+-#       define GC_TEST_AND_SET_DEFINED
++#     endif
+ #    endif /* ARM32 */
+ #    ifdef CRIS
+         inline static int GC_test_and_set(volatile unsigned int *addr) {
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-arm-earlyclobbers.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-arm-earlyclobbers.diff
@@ -0,0 +1,40 @@
+# DP: Fix earlyclobbers on some arm.md DImode shifts.
+
+gcc/
+
+2010-09-12  Bernd Schmidt  <bernds@codesourcery.com>
+
+	* config/arm/arm.md (arm_ashldi3_1bit, arm_ashrdi3_1bit,
+	arm_lshrdi3_1bit): Put earlyclobber on the right alternative.
+
+Index: gcc/config/arm/arm.md
+===================================================================
+--- a/src/gcc/config/arm/arm.md	(revision 164231)
++++ b/src/gcc/config/arm/arm.md	(revision 164232)
+@@ -3322,7 +3322,7 @@
+ )
+ 
+ (define_insn "arm_ashldi3_1bit"
+-  [(set (match_operand:DI            0 "s_register_operand" "=&r,r")
++  [(set (match_operand:DI            0 "s_register_operand" "=r,&r")
+         (ashift:DI (match_operand:DI 1 "s_register_operand" "0,r")
+                    (const_int 1)))
+    (clobber (reg:CC CC_REGNUM))]
+@@ -3381,7 +3381,7 @@
+ )
+ 
+ (define_insn "arm_ashrdi3_1bit"
+-  [(set (match_operand:DI              0 "s_register_operand" "=&r,r")
++  [(set (match_operand:DI              0 "s_register_operand" "=r,&r")
+         (ashiftrt:DI (match_operand:DI 1 "s_register_operand" "0,r")
+                      (const_int 1)))
+    (clobber (reg:CC CC_REGNUM))]
+@@ -3438,7 +3438,7 @@
+ )
+ 
+ (define_insn "arm_lshrdi3_1bit"
+-  [(set (match_operand:DI              0 "s_register_operand" "=&r,r")
++  [(set (match_operand:DI              0 "s_register_operand" "=r,&r")
+         (lshiftrt:DI (match_operand:DI 1 "s_register_operand" "0,r")
+                      (const_int 1)))
+    (clobber (reg:CC CC_REGNUM))]
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-system-root.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-system-root.diff
@@ -0,0 +1,17 @@
+# DP: Avoid include paths starting with a double slash
+
+--- a/src/gcc/configure.ac
++++ b/src/gcc/configure.ac
+@@ -751,8 +751,10 @@
+  yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_noncanonical}/sys-root' ;;
+  *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
+  esac
+-   
+- TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
++
++ if test "x$TARGET_SYSTEM_ROOT" != x/; then
++  TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
++ fi
+  CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
+ 	
+  if test "x$prefix" = xNONE; then
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/cross-biarch.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/cross-biarch.diff
@@ -0,0 +1,79 @@
+# DP: Fix the location of target's libs in cross-build for biarch
+
+---
+
+--- a/src/config-ml.in	2010-08-24 01:48:38.000000000 -0400
++++ b/src/config-ml.in	2010-08-24 03:56:12.000000000 -0400
+@@ -540,7 +540,12 @@
+ 	    else \
+ 	      if [ -d ../$${dir}/$${lib} ]; then \
+ 		flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
+-		if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \
++		libsuffix_="$${dir}"; \
++		if [ "$${dir}" = "n32" ]; then libsuffix_=32; fi; \
++		if (cd ../$${dir}/$${lib}; $(MAKE) $(subst \
++				-B$(build_tooldir)/lib/, \
++				-B$(build_tooldir)/lib$${libsuffix_}/, \
++				$(FLAGS_TO_PASS)) \
+ 				CFLAGS="$(CFLAGS) $${flags}" \
+ 				CCASFLAGS="$(CCASFLAGS) $${flags}" \
+ 				FCFLAGS="$(FCFLAGS) $${flags}" \
+@@ -791,6 +796,13 @@
+ 	GCJ_=$GCJ' '
+ 	GFORTRAN_=$GFORTRAN' '
+     else
++	if [ "${ml_dir}" = "." ]; then
++		FILTER_="s!X\\(.*\\)!\\1!p"
++	elif [ "${ml_dir}" = "n32" ]; then # mips n32 -> lib32
++		FILTER_="s!X\\(.*\\)/!\\132/!p"
++	else
++		FILTER_="s!X\\(.*\\)/!\\1${ml_dir}/!p"
++	fi
+ 	# Create a regular expression that matches any string as long
+ 	# as ML_POPDIR.
+ 	popdir_rx=`echo "${ML_POPDIR}" | sed 's,.,.,g'`
+@@ -799,6 +811,8 @@
+ 	  case $arg in
+ 	  -[BIL]"${ML_POPDIR}"/*)
+ 	    CC_="${CC_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\1/p"`' ' ;;
++	  -B*/lib/)
++	    CC_="${CC_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;;
+ 	  "${ML_POPDIR}"/*)
+ 	    CC_="${CC_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ 	  *)
+@@ -811,6 +825,8 @@
+ 	  case $arg in
+ 	  -[BIL]"${ML_POPDIR}"/*)
+ 	    CXX_="${CXX_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
++	  -B*/lib/)
++	    CXX_="${CXX_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;;
+ 	  "${ML_POPDIR}"/*)
+ 	    CXX_="${CXX_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ 	  *)
+@@ -823,6 +839,8 @@
+ 	  case $arg in
+ 	  -[BIL]"${ML_POPDIR}"/*)
+ 	    F77_="${F77_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
++	  -B*/lib/)
++	    F77_="${F77_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;;
+ 	  "${ML_POPDIR}"/*)
+ 	    F77_="${F77_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ 	  *)
+@@ -835,6 +853,8 @@
+ 	  case $arg in
+ 	  -[BIL]"${ML_POPDIR}"/*)
+ 	    GCJ_="${GCJ_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
++	  -B*/lib/)
++	    GCJ_="${GCJ_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;;
+ 	  "${ML_POPDIR}"/*)
+ 	    GCJ_="${GCJ_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ 	  *)
+@@ -847,6 +867,8 @@
+ 	  case $arg in
+ 	  -[BIL]"${ML_POPDIR}"/*)
+ 	    GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
++	  -B*/lib/)
++	    GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "$FILTER_"`' ' ;;
+ 	  "${ML_POPDIR}"/*)
+ 	    GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ 	  *)
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/m68k-multilib.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/m68k-multilib.diff
@@ -0,0 +1,16 @@
+# DP: Select which multiarch/multilib targets to build.
+# DP: Apparently, cpu32 and fidoa (the other two) aren't
+# DP: classical m68k-linux targets, plus they trouble us.
+
+--- a/src/gcc/config/m68k/t-linux	2010-11-03 21:30:58.000000000 +0000
++++ b/src/gcc/config/m68k/t-linux	2010-11-03 21:31:38.000000000 +0000
+@@ -3,6 +3,9 @@ EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o
+ # Only include multilibs for CPUs with an MMU.
+ M68K_MLIB_CPU += && match(FLAGS, "FL_MMU")
+ 
++# Limit to "classical" 680x0 CPUs with FPU and all bells and whistles.
++M68K_MLIB_CPU += && match(MLIB, "^68")
++
+ # This rule uses MULTILIB_MATCHES to generate a definition of
+ # SYSROOT_SUFFIX_SPEC.
+ sysroot-suffix.h: $(srcdir)/config/m68k/print-sysroot-suffix.sh
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libjava-multiarch-linaro.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libjava-multiarch-linaro.diff
@@ -0,0 +1,69 @@
+# DP: Install libjava libraries to multiarch location
+
+Index: b/src/libjava/classpath/m4/acinclude.m4
+===================================================================
+--- a/src/libjava/classpath/m4/acinclude.m4
++++ b/src/libjava/classpath/m4/acinclude.m4
+@@ -282,6 +282,10 @@
+ 	.) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
+ 	*) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
+       esac
++      multiarch=`$CC -print-multiarch`
++      if test -n "$multiarch"; then
++        toolexeclibdir=${libdir}/${multiarch}
++      fi
+       ;;
+   esac
+   AC_SUBST(toolexecdir)
+Index: b/src/libjava/configure.ac
+===================================================================
+--- a/src/libjava/configure.ac
++++ b/src/libjava/configure.ac
+@@ -1503,6 +1503,10 @@
+       ../lib*) toolexeclibdir='$(subst /lib/../lib,/lib,'$toolexecmainlibdir/$multi_os_directory')' ;;
+       *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
+     esac
++    multiarch=`$CC -print-multiarch`
++    if test -n "$multiarch"; then
++        toolexeclibdir=$toolexecmainlibdir/$multiarch
++    fi
+     ;;
+ esac
+ AC_SUBST(toolexecdir)
+@@ -1529,6 +1533,10 @@
+    dbexecdir='$(toolexeclibdir)/'$multi_os_directory/$gcjsubdir
+    ;;
+ esac
++multiarch=`$CC -print-multiarch`
++if test -n "$multiarch"; then
++    dbexecdir='$(libdir)/'$multiarch/$gcjsubdir
++fi
+ AC_SUBST(dbexecdir)
+ AC_SUBST(gcjsubdir)
+ 
+Index: b/src/libjava/Makefile.am
+===================================================================
+--- a/src/libjava/Makefile.am
++++ b/src/libjava/Makefile.am
+@@ -168,7 +168,7 @@
+ 	-DGCJ_VERSIONED_LIBDIR="\"$(dbexecdir)\"" \
+ 	-DPATH_SEPARATOR="\"$(CLASSPATH_SEPARATOR)\"" \
+ 	-DECJ_JAR_FILE="\"$(ECJ_JAR)\"" \
+-	-DLIBGCJ_DEFAULT_DATABASE="\"/var/lib/gcj-4.4/$(db_name)\"" \
++	-DLIBGCJ_DEFAULT_DATABASE="\"/var/lib/$(MULTIARCH_DIR)/gcj-4.4/$(db_name)\"" \
+ 	-DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\""
+ 
+ AM_GCJFLAGS = \
+Index: b/src/libjava/Makefile.in
+===================================================================
+--- a/src/libjava/Makefile.in
++++ b/src/libjava/Makefile.in
+@@ -877,7 +877,7 @@
+ 	-DGCJ_VERSIONED_LIBDIR="\"$(dbexecdir)\"" \
+ 	-DPATH_SEPARATOR="\"$(CLASSPATH_SEPARATOR)\"" \
+ 	-DECJ_JAR_FILE="\"$(ECJ_JAR)\"" \
+-	-DLIBGCJ_DEFAULT_DATABASE="\"/var/lib/gcj-4.4/$(db_name)\"" \
++	-DLIBGCJ_DEFAULT_DATABASE="\"/var/lib/$(MULTIARCH_DIR)/gcj-4.4/$(db_name)\"" \
+ 	-DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\""
+ 
+ AM_GCJFLAGS = \
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/arm-unbreak-eabi-armv4t.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/arm-unbreak-eabi-armv4t.diff
@@ -0,0 +1,17 @@
+# DP: Fix armv4t build on ARM
+
+---
+ gcc/config/arm/linux-eabi.h |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+--- a/src/gcc/config/arm/linux-eabi.h
++++ b/src/gcc/config/arm/linux-eabi.h
+@@ -44,7 +44,7 @@
+    The ARM10TDMI core is the default for armv5t, so set
+    SUBTARGET_CPU_DEFAULT to achieve this.  */
+ #undef  SUBTARGET_CPU_DEFAULT
+-#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi
++#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9tdmi
+ 
+ /* TARGET_BIG_ENDIAN_DEFAULT is set in
+    config.gcc for big endian configurations.  */
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/kbsd-gnu-ada.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/kbsd-gnu-ada.diff
@@ -0,0 +1,236 @@
+2009-08-17  Aurelien Jarno  <aurelien@aurel32.net>
+
+	* gcc-interface/Makefile.in: Add Ada support for 
+	GNU/kFreeBSD x86_64.
+	* system-freebsd-x86_64.ads: New file based on 
+	system-freebsd-x86.ads.
+
+2009-08-01  Aurelien Jarno  <aurelien@aurel32.net>
+
+	* s-osinte-kfreebsd-gnu.ads (SA_ONSTACK): New constant.
+	(stack_t): New record type.
+	(sigaltstack): New imported function.
+	(Alternate_Stack): New imported variable.
+	(Alternate_Stack_Size): New constant.
+
+--- a/src/gcc/ada/s-osinte-kfreebsd-gnu.ads
++++ b/src/gcc/ada/s-osinte-kfreebsd-gnu.ads
+@@ -188,6 +188,7 @@
+    SIG_IGN : constant := 1;
+ 
+    SA_SIGINFO : constant := 16#0040#;
++   SA_ONSTACK : constant := 16#0001#;
+ 
+    function sigaction
+      (sig  : Signal;
+@@ -280,6 +281,24 @@
+    -- Stack --
+    -----------
+ 
++   type stack_t is record
++      ss_sp    : System.Address;
++      ss_size  : size_t;
++      ss_flags : int;
++   end record;
++   pragma Convention (C, stack_t);
++
++   function sigaltstack
++     (ss  : not null access stack_t;
++      oss : access stack_t) return int;
++   pragma Import (C, sigaltstack, "sigaltstack");
++
++   Alternate_Stack : aliased System.Address;
++   --  This is a dummy definition, never used (Alternate_Stack_Size is null)
++
++   Alternate_Stack_Size : constant := 0;
++   --  No alternate signal stack is used on this platform
++
+    function Get_Stack_Base (thread : pthread_t) return Address;
+    pragma Inline (Get_Stack_Base);
+    --  This is a dummy procedure to share some GNULLI files
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -907,6 +907,35 @@
+   LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+ 
++ifeq ($(strip $(filter-out x86_64 kfreebsd%,$(arch) $(osys))),)
++  LIBGNAT_TARGET_PAIRS = \
++  a-intnam.ads<a-intnam-freebsd.ads \
++  a-numaux.adb<a-numaux-x86.adb \
++  a-numaux.ads<a-numaux-x86.ads \
++  s-inmaop.adb<s-inmaop-posix.adb \
++  s-intman.adb<s-intman-posix.adb \
++  s-osinte.adb<s-osinte-posix.adb \
++  s-osinte.ads<s-osinte-kfreebsd-gnu.ads \
++  s-osprim.adb<s-osprim-posix.adb \
++  s-taprop.adb<s-taprop-linux.adb \
++  s-tasinf.ads<s-tasinf-linux.ads \
++  s-tasinf.adb<s-tasinf-linux.adb \
++  s-taspri.ads<s-taspri-posix.ads \
++  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
++  system.ads<system-freebsd-x86_64.ads
++
++  TOOLS_TARGET_PAIRS =  \
++    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++    indepsw.adb<indepsw-gnu.adb
++
++  EH_MECHANISM=-gcc
++  THREADSLIB = -lpthread
++  GNATLIB_SHARED = gnatlib-shared-dual
++  GMEM_LIB = gmemlib
++  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
++  LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
+ ifeq ($(strip $(filter-out %86 freebsd%,$(arch) $(osys))),)
+   LIBGNAT_TARGET_PAIRS = \
+   a-intnam.ads<a-intnam-freebsd.ads \
+--- a/src/gcc/ada/system-freebsd-x86_64.ads
++++ b/src/gcc/ada/system-freebsd-x86_64.ads
+@@ -0,0 +1,145 @@
++------------------------------------------------------------------------------
++--                                                                          --
++--                        GNAT RUN-TIME COMPONENTS                          --
++--                                                                          --
++--                               S Y S T E M                                --
++--                                                                          --
++--                                 S p e c                                  --
++--                          (FreeBSD/x86 Version)                           --
++--                                                                          --
++--          Copyright (C) 1992-2009, Free Software Foundation, Inc.         --
++--                                                                          --
++-- This specification is derived from the Ada Reference Manual for use with --
++-- GNAT. The copyright notice above, and the license provisions that follow --
++-- apply solely to the  contents of the part following the private keyword. --
++--                                                                          --
++-- GNAT is free software;  you can  redistribute it  and/or modify it under --
++-- terms of the  GNU General Public License as published  by the Free Soft- --
++-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
++-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
++-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
++-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
++--                                                                          --
++-- As a special exception under Section 7 of GPL version 3, you are granted --
++-- additional permissions described in the GCC Runtime Library Exception,   --
++-- version 3.1, as published by the Free Software Foundation.               --
++--                                                                          --
++-- You should have received a copy of the GNU General Public License and    --
++-- a copy of the GCC Runtime Library Exception along with this program;     --
++-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
++-- <http://www.gnu.org/licenses/>.                                          --
++--                                                                          --
++-- GNAT was originally developed  by the GNAT team at  New York University. --
++-- Extensive contributions were provided by Ada Core Technologies Inc.      --
++--                                                                          --
++------------------------------------------------------------------------------
++
++package System is
++   pragma Pure;
++   --  Note that we take advantage of the implementation permission to make
++   --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
++   --  2005, this is Pure in any case (AI-362).
++
++   type Name is (SYSTEM_NAME_GNAT);
++   System_Name : constant Name := SYSTEM_NAME_GNAT;
++
++   --  System-Dependent Named Numbers
++
++   Min_Int               : constant := Long_Long_Integer'First;
++   Max_Int               : constant := Long_Long_Integer'Last;
++
++   Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
++   Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
++
++   Max_Base_Digits       : constant := Long_Long_Float'Digits;
++   Max_Digits            : constant := Long_Long_Float'Digits;
++
++   Max_Mantissa          : constant := 63;
++   Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
++
++   Tick                  : constant := 0.000_001;
++
++   --  Storage-related Declarations
++
++   type Address is private;
++   pragma Preelaborable_Initialization (Address);
++   Null_Address : constant Address;
++
++   Storage_Unit : constant := 8;
++   Word_Size    : constant := 64;
++   Memory_Size  : constant := 2 ** 64;
++
++   --  Address comparison
++
++   function "<"  (Left, Right : Address) return Boolean;
++   function "<=" (Left, Right : Address) return Boolean;
++   function ">"  (Left, Right : Address) return Boolean;
++   function ">=" (Left, Right : Address) return Boolean;
++   function "="  (Left, Right : Address) return Boolean;
++
++   pragma Import (Intrinsic, "<");
++   pragma Import (Intrinsic, "<=");
++   pragma Import (Intrinsic, ">");
++   pragma Import (Intrinsic, ">=");
++   pragma Import (Intrinsic, "=");
++
++   --  Other System-Dependent Declarations
++
++   type Bit_Order is (High_Order_First, Low_Order_First);
++   Default_Bit_Order : constant Bit_Order := Low_Order_First;
++   pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
++
++   --  Priority-related Declarations (RM D.1)
++
++   Max_Priority           : constant Positive := 30;
++   Max_Interrupt_Priority : constant Positive := 31;
++
++   subtype Any_Priority       is Integer      range  0 .. 31;
++   subtype Priority           is Any_Priority range  0 .. 30;
++   subtype Interrupt_Priority is Any_Priority range 31 .. 31;
++
++   Default_Priority : constant Priority := 15;
++
++private
++
++   type Address is mod Memory_Size;
++   Null_Address : constant Address := 0;
++
++   --------------------------------------
++   -- System Implementation Parameters --
++   --------------------------------------
++
++   --  These parameters provide information about the target that is used
++   --  by the compiler. They are in the private part of System, where they
++   --  can be accessed using the special circuitry in the Targparm unit
++   --  whose source should be consulted for more detailed descriptions
++   --  of the individual switch values.
++
++   Backend_Divide_Checks     : constant Boolean := False;
++   Backend_Overflow_Checks   : constant Boolean := False;
++   Command_Line_Args         : constant Boolean := True;
++   Configurable_Run_Time     : constant Boolean := False;
++   Denorm                    : constant Boolean := True;
++   Duration_32_Bits          : constant Boolean := False;
++   Exit_Status_Supported     : constant Boolean := True;
++   Fractional_Fixed_Ops      : constant Boolean := False;
++   Frontend_Layout           : constant Boolean := False;
++   Machine_Overflows         : constant Boolean := False;
++   Machine_Rounds            : constant Boolean := True;
++   Preallocated_Stacks       : constant Boolean := False;
++   Signed_Zeros              : constant Boolean := True;
++   Stack_Check_Default       : constant Boolean := False;
++   Stack_Check_Probes        : constant Boolean := True;
++   Stack_Check_Limits        : constant Boolean := False;
++   Support_64_Bit_Divides    : constant Boolean := True;
++   Support_Aggregates        : constant Boolean := True;
++   Support_Composite_Assign  : constant Boolean := True;
++   Support_Composite_Compare : constant Boolean := True;
++   Support_Long_Shifts       : constant Boolean := True;
++   Always_Compatible_Rep     : constant Boolean := False;
++   Suppress_Standard_Library : constant Boolean := False;
++   Use_Ada_Main_Program_Name : constant Boolean := False;
++   ZCX_By_Default            : constant Boolean := True;
++   GCC_ZCX_Support           : constant Boolean := True;
++
++end System;
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-acats.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-acats.diff
@@ -0,0 +1,158 @@
+# DP: - When running the ACATS, look for the gnat tools in their new
+# DP:   directory (build/gnattools), and for the shared libraries in
+# DP:   build/gcc/ada/rts-shared-zcx, build/libgnatvsn and build/libgnatprj.
+
+Index: b/src/gcc/testsuite/ada/acats/run_acats
+===================================================================
+--- a/src/gcc/testsuite/ada/acats/run_acats
++++ b/src/gcc/testsuite/ada/acats/run_acats
+@@ -20,51 +20,28 @@
+     return 1
+ }
+ 
++echo '#!/bin/sh' > host_gnatchop
++echo exec /usr/bin/gnatchop '$*' >> host_gnatchop
++
++chmod +x host_gnatchop
++
++echo '#!/bin/sh' > host_gnatmake
++echo echo '$PATH' '$*' >> host_gnatmake
++echo exec /usr/bin/gnatmake '$*' >> host_gnatmake
++
++chmod +x host_gnatmake
++
+ # Set up environment to use the Ada compiler from the object tree
+ 
+-host_gnatchop=`which gnatchop`
+-host_gnatmake=`which gnatmake`
+ ROOT=`${PWDCMD-pwd}`
+ BASE=`cd $ROOT/../../..; ${PWDCMD-pwd}`
+-
+ PATH=$BASE:$ROOT:$PATH
+-ADA_INCLUDE_PATH=$BASE/ada/rts
+-LD_LIBRARY_PATH=$ADA_INCLUDE_PATH:$BASE:$LD_LIBRARY_PATH
+-ADA_OBJECTS_PATH=$ADA_INCLUDE_PATH
+-
+-if [ ! -d $ADA_INCLUDE_PATH ]; then
+-   echo gnatlib missing, exiting.
+-   exit 1
+-fi
+-
+-if [ ! -f $BASE/gnatchop ]; then
+-   echo gnattools missing, exiting.
+-   exit 1
+-fi
+-
+-if [ ! -f $BASE/gnatmake ]; then
+-   echo gnattools missing, exiting.
+-   exit 1
+-fi
+-
++GNATTOOLS=`cd $BASE/../gnattools; ${PWDCMD-pwd}`
++LIBGNATVSN=`cd $BASE/../libgnatvsn; ${PWDCMD-pwd}`
++LIBGNATPRJ=`cd $BASE/../libgnatprj; ${PWDCMD-pwd}`
+ GCC_DRIVER="$BASE/xgcc"
+ GCC="$BASE/xgcc -B$BASE/"
+ export PATH ADA_INCLUDE_PATH ADA_OBJECTS_PATH GCC_DRIVER GCC LD_LIBRARY_PATH
+-
+-echo '#!/bin/sh' > host_gnatchop
+-echo PATH=`dirname $host_gnatchop`:'$PATH' >> host_gnatchop
+-echo unset ADA_INCLUDE_PATH ADA_OBJECTS_PATH GCC_EXEC_PREFIX >> host_gnatchop
+-echo export PATH >> host_gnatchop
+-echo exec gnatchop '"$@"' >> host_gnatchop
+-
+-chmod +x host_gnatchop
+-
+-echo '#!/bin/sh' > host_gnatmake
+-echo PATH=`dirname $host_gnatmake`:'$PATH' >> host_gnatmake
+-echo unset ADA_INCLUDE_PATH ADA_OBJECTS_PATH GCC_EXEC_PREFIX >> host_gnatmake
+-echo export PATH >> host_gnatmake
+-echo exec gnatmake '"$@"' >> host_gnatmake
+-
+-chmod +x host_gnatmake
++export GNATTOOLS LIBGNATVSN LIBGNATPRJ
+ 
+ exec $testdir/run_all.sh ${1+"$@"}
+Index: b/src/gcc/testsuite/ada/acats/run_all.sh
+===================================================================
+--- a/src/gcc/testsuite/ada/acats/run_all.sh
++++ b/src/gcc/testsuite/ada/acats/run_all.sh
+@@ -12,6 +12,10 @@
+ gccflags="-O2"
+ gnatflags="-gnatws"
+ 
++RTS=`cd $GNATTOOLS/../gcc/ada/rts-shared-zcx; ${PWDCMD-pwd}`
++LD_LIBRARY_PATH=$RTS:$LIBGNATVSN:$LIBGNATPRJ
++export LD_LIBRARY_PATH
++
+ target_run () {
+ $*
+ }
+@@ -48,15 +52,25 @@
+ fi
+ 
+ target_gnatchop () {
+-  gnatchop --GCC="$GCC_DRIVER" $*
++  display ADA_INCLUDE_PATH=$GNATTOOLS/../../src/gcc/ada $GNATTOOLS/gnatchop --GCC="$GCC_DRIVER" $*
++  ADA_INCLUDE_PATH=$GNATTOOLS/../../src/gcc/ada $GNATTOOLS/gnatchop --GCC="$GCC_DRIVER" $*
+ }
+ 
+ target_gnatmake () {
+-  echo gnatmake --GCC=\"$GCC\" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC=\"$GCC\"
+-  gnatmake --GCC="$GCC" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC="$GCC"
++  RTS="$GNATTOOLS/../gcc/ada/rts-shared-zcx"
++  EXTERNAL_OBJECTS="$EXTERNAL_OBJECTS $RTS/adaint.o $RTS/sysdep.o $RTS/init.o"
++  display $GNATTOOLS/gnatmake -I- -I$RTS -I. \
++      --GCC=\"$GCC\" --GNATBIND="$GNATTOOLS/gnatbind" \
++      --GNATLINK="$GNATTOOLS/gnatlink" $gnatflags $gccflags $* \
++      -bargs -static -largs $EXTERNAL_OBJECTS --GCC=\"$GCC -I- -I$RTS -I.\"
++  $GNATTOOLS/gnatmake -I- -I$RTS -I. \
++      --GCC="$GCC" --GNATBIND="$GNATTOOLS/gnatbind" \
++      --GNATLINK="$GNATTOOLS/gnatlink" $gnatflags $gccflags $* \
++      -bargs -static -largs $EXTERNAL_OBJECTS --GCC="$GCC -I- -I$RTS -I."
+ }
+ 
+ target_gcc () {
++  display $GCC $gccflags $*
+   $GCC $gccflags $*
+ }
+ 
+@@ -84,8 +98,8 @@
+ display `$GCC -v 2>&1`
+ display host=`gcc -dumpmachine`
+ display target=$target
+-display `type gnatmake`
+-gnatls -v >> $dir/acats.log
++display `type $GNATTOOLS/gnatmake`
++$GNATTOOLS/gnatls -I- -I$RTS -v >> $dir/acats.log
+ display ""
+ 
+ display "		=== acats support ==="
+Index: b/src/gcc/testsuite/lib/gnat.exp
+===================================================================
+--- a/src/gcc/testsuite/lib/gnat.exp
++++ b/src/gcc/testsuite/lib/gnat.exp
+@@ -91,13 +91,7 @@
+ 
+     if { $gnat_initialized == 1 } { return }
+ 
+-    if ![info exists GNAT_UNDER_TEST] then {
+-	if [info exists TOOL_EXECUTABLE] {
+-	    set GNAT_UNDER_TEST "$TOOL_EXECUTABLE"
+-	} else {
+-	    set GNAT_UNDER_TEST "[local_find_gnatmake]"
+-	}
+-    }
++    set GNAT_UNDER_TEST "$rootme/../gnattools/gnatmake -I$rootme/ada/rts-shared-zcx --GCC=$rootme/xgcc --GNATBIND=$rootme/../gnattools/gnatbind --GNATLINK=$rootme/../gnattools/gnatlink -cargs -B$rootme -largs --GCC=$rootme/xgcc -B$rootme -margs"
+ 
+     if ![info exists tmpdir] then {
+ 	set tmpdir /tmp
+@@ -154,7 +148,7 @@
+ 	setenv ADA_OBJECTS_PATH "$rtsdir/adainclude"
+     }
+ 
+-    set ld_library_path ".:${gnat_libgcc_s_path}"
++    set ld_library_path ".:${gnat_libgcc_s_path}:${rootme}/ada/rts-shared-zcx:${rootme}/libgnatvsn:${rootme}/libgnatprj"
+     lappend options "compiler=$GNAT_UNDER_TEST -q -f"
+     lappend options "timeout=[timeout_value]"
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr37053.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr37053.diff
@@ -0,0 +1,57 @@
+# DP: Work around PR middle-end/37053 by backporting a trunk commit
+# DP: Combine with pr41064.diff to avoid regressions!
+
+gcc/
+
+2009-08-10  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
+
+	PR target/37053
+	* reload1.c (reload_as_needed): Use cancel_changes to completely
+	undo a failed replacement attempt.
+
+Index: trunk/gcc/reload1.c
+===================================================================
+--- a/src/gcc/reload1.c	(revision 150625)
++++ b/src/gcc/reload1.c	(revision 150626)
+@@ -4304,31 +4304,25 @@
+ 			    continue;
+ 			  if (n == 1)
+ 			    {
+-			      n = validate_replace_rtx (reload_reg,
+-							gen_rtx_fmt_e (code,
+-								       mode,
+-								       reload_reg),
+-							p);
++			      rtx replace_reg
++				= gen_rtx_fmt_e (code, mode, reload_reg);
+ 
++			      validate_replace_rtx_group (reload_reg,
++							  replace_reg, p);
++			      n = verify_changes (0);
++
+ 			      /* We must also verify that the constraints
+ 				 are met after the replacement.  */
+ 			      extract_insn (p);
+ 			      if (n)
+ 				n = constrain_operands (1);
+-			      else
+-				break;
+ 
+ 			      /* If the constraints were not met, then
+-				 undo the replacement.  */
++				 undo the replacement, else confirm it.  */
+ 			      if (!n)
+-				{
+-				  validate_replace_rtx (gen_rtx_fmt_e (code,
+-								       mode,
+-								       reload_reg),
+-							reload_reg, p);
+-				  break;
+-				}
+-
++				cancel_changes (0);
++			      else
++				confirm_change_group ();
+ 			    }
+ 			  break;
+ 			}
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-hg-updates.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-hg-updates.diff
@@ -0,0 +1,609 @@
+# DP: HG updates from the gdc branch up to 20100912.
+
+--- a/src/gcc/d/d-codegen.cc
++++ b/src/gcc/d/d-codegen.cc
+@@ -696,7 +696,10 @@
+ 	    build2/*_binary_op*/ (MULT_EXPR, TREE_TYPE(size_exp), intop,  // the type here may be wrong %%
+ 		convert (TREE_TYPE (intop), size_exp)));
+ 	intop = fold(intop);
+-    }    
++    }
++
++    if (result_type_node == error_mark_node)
++	return result_type_node; // else we'll ICE.
+ 
+     if ( integer_zerop(intop) )
+ 	return ptr_node;
+@@ -1673,6 +1676,9 @@
+ tree
+ IRState::darrayPtrRef(tree exp)
+ {
++    if (exp == error_mark_node)
++	return exp; // else we'll ICE.
++
+     // Get the backend type for the array and pick out the array data
+     // pointer field (assumed to be the second field.)
+     tree ptr_field = TREE_CHAIN( TYPE_FIELDS( TREE_TYPE( exp )));
+@@ -1683,6 +1689,9 @@
+ tree
+ IRState::darrayLenRef(tree exp)
+ {
++    if (exp == error_mark_node)
++	return exp; // else we'll ICE.
++
+     // Get the backend type for the array and pick out the array length
+     // field (assumed to be the first field.)
+     tree len_field = TYPE_FIELDS( TREE_TYPE( exp ));
+@@ -2462,7 +2471,8 @@
+     }
+ #else
+ # if HOST_BITS_PER_WIDE_INT == 32
+-    tree tree_value = build_int_cst_type(type, value & 0xffffffff);
++    tree tree_value = build_int_cst_wide_type(type, value & 0xffffffff,
++					      (value >> 32) & 0xffffffff);
+ # elif HOST_BITS_PER_WIDE_INT == 64
+     tree tree_value = build_int_cst_type(type, value);
+ # else
+@@ -2541,11 +2551,32 @@
+ 
+ 	if (func != outer_func)
+ 	{
++	    Dsymbol * this_func = func;
++	    Dsymbol * parent_sym = nested_sym->toParent2();
+ 	    if (!func->vthis) // if no frame pointer for this function
+ 	    {
+ 		nested_func->error("is a nested function and cannot be accessed from %s", func->toChars());
+ 		return d_null_pointer;
+ 	    }
++	    /* Search for frame pointer, make sure we can reach it,
++	       else we'll ICE later in tree-ssa.  */
++	    while (nested_func != this_func)
++	    {
++		FuncDeclaration * fndecl;
++		if ( (fndecl = this_func->isFuncDeclaration()) )
++		{
++		    if (parent_sym == fndecl->toParent2())
++			break;
++		    assert(fndecl->isNested() || fndecl->vthis);
++		}
++		else
++		{
++		    func->error("cannot get frame pointer to %s", nested_sym->toChars());
++		    return d_null_pointer;
++		}
++		this_func = this_func->toParent2();
++		assert(this_func);
++	    }
+ 	}
+     }
+     else
+@@ -3140,6 +3171,7 @@
+ {
+     Flow * f = beginFlow(stmt);
+     f->condition = t_cond;
++    f->kind = level_switch;
+ }
+ 
+ void
+@@ -3188,12 +3220,14 @@
+ IRState::startTry(Statement * stmt)
+ {
+     beginFlow(stmt);
++    currentFlow()->kind = level_try;
+ }
+ 
+ void
+ IRState::startCatches()
+ {
+     currentFlow()->tryBody = popStatementList();
++    currentFlow()->kind = level_catch;
+     pushStatementList();
+ }
+ 
+@@ -3229,6 +3263,7 @@
+ IRState::startFinally()
+ {
+     currentFlow()->tryBody = popStatementList();
++    currentFlow()->kind = level_finally;
+     pushStatementList();
+ }
+ 
+@@ -3252,9 +3287,9 @@
+ IRState::doJump(Statement * stmt, tree t_label)
+ {
+     if (stmt)
+-	g.ofile->doLineNote( stmt->loc );
++	g.ofile->doLineNote(stmt->loc);
+     addExp(build1(GOTO_EXPR, void_type_node, t_label));
+-    TREE_USED(t_label) = 1;
++    D_LABEL_IS_USED(t_label) = 1;
+ }
+ 
+ tree
+@@ -3285,6 +3320,104 @@
+ #endif
+ }
+ 
++
++void
++IRState::checkSwitchCase(Statement * stmt, int default_flag)
++{
++    Flow * flow = currentFlow();
++
++    assert(flow);
++    if (flow->kind != level_switch && flow->kind != level_block)
++    {
++	stmt->error("%s cannot be in different try block level from switch",
++		    default_flag ? "default" : "case");
++    }
++}
++
++void
++IRState::checkGoto(Statement * stmt, LabelDsymbol * label)
++{
++    Statement * curBlock = NULL;
++    unsigned curLevel = loops.dim;
++    int found = 0;
++
++    if (curLevel)
++	curBlock = currentFlow()->statement;
++
++    for (unsigned i = 0; i < Labels.dim; i++)
++    {
++	Label * linfo = (Label *)Labels.data[i];
++	assert(linfo);
++
++	if (label == linfo->label)
++	{
++	    // No need checking for finally, should have already been handled.
++	    if (linfo->kind == level_try &&
++		curLevel <= linfo->level && curBlock != linfo->block)
++	    {
++		stmt->error("cannot goto into try block");
++	    }
++	    // %% doc: It is illegal for goto to be used to skip initializations,
++	    // %%      so this should include all gotos into catches...
++	    if (linfo->kind == level_catch && curBlock != linfo->block)
++		stmt->error("cannot goto into catch block");
++
++	    found = 1;
++	    break;
++	}
++    }
++#if V1
++    // Push forward referenced gotos.
++    if (! found)
++    {
++	if (! label->statement->fwdrefs)
++	    label->statement->fwdrefs = new Array();
++	label->statement->fwdrefs->push(getLabelBlock(label, stmt));
++    }
++#endif
++}
++
++void
++IRState::checkPreviousGoto(Array * refs)
++{
++    Statement * stmt;
++
++    for (unsigned i = 0; i < refs->dim; i++)
++    {
++	Label * ref = (Label *)refs->data[i];
++	int found = 0;
++
++	assert(ref && ref->from);
++	stmt = ref->from;
++
++	for (unsigned i = 0; i < Labels.dim; i++)
++	{
++	    Label * linfo = (Label *)Labels.data[i];
++	    assert(linfo);
++
++	    if (ref->label == linfo->label)
++	    {
++		// No need checking for finally, should have already been handled.
++		if (linfo->kind == level_try &&
++		    ref->level <= linfo->level && ref->block != linfo->block)
++		{
++		    stmt->error("cannot goto into try block");
++		}
++		// %% doc: It is illegal for goto to be used to skip initializations,
++		// %%      so this should include all gotos into catches...
++		if (linfo->kind == level_catch &&
++		    (ref->block != linfo->block || ref->kind != linfo->kind))
++		    stmt->error("cannot goto into catch block");
++
++		found = 1;
++		break;
++	    }
++	}
++	assert(found);
++    }
++}
++
++
+ WrappedExp::WrappedExp(Loc loc, enum TOK op, tree exp_node, Type * type)
+     : Expression(loc, op, sizeof(WrappedExp))
+ {
+--- a/src/gcc/d/d-codegen.h
++++ b/src/gcc/d/d-codegen.h
+@@ -527,6 +527,13 @@
+     void doExp(Expression * e) { doExp(e->toElem(this)); } // %% should handle volatile...?
+     void doAsm(tree insn_tmpl, tree outputs, tree inputs, tree clobbers);
+ 
++    // ** Goto/Label statement evaluation
++
++    void pushLabel(LabelDsymbol * l) { Labels.push(getLabelBlock(l)); }
++    void checkSwitchCase(Statement * stmt, int default_flag = 0);
++    void checkGoto(Statement * stmt, LabelDsymbol * label);
++    void checkPreviousGoto(Array * refs);
++
+     // ** Callback statement evalutation
+ 
+     static Array stmtExprList;
+--- a/src/gcc/d/d-glue.cc
++++ b/src/gcc/d/d-glue.cc
+@@ -1557,7 +1557,7 @@
+ 		return irs->var(var_decl);
+ 	    }
+ 	} else {
+-	    // error below
++	    error("%s is not a field, but a %s", var->toChars(), var->kind());
+ 	}
+ 	break;
+     default:
+@@ -1960,17 +1960,20 @@
+ 			   STATIC_CHAIN_EXPR created here will never be
+ 			   translated. Use a null pointer for the link in
+ 			   this case. */
+-			if (
++			if (fd_outer->vthis) {
+ #if V2
+-			    fd_outer->closureVars.dim ||
+-			    irs->getFrameInfo(fd_outer)->creates_closure
++			    if (fd_outer->closureVars.dim ||
++				irs->getFrameInfo(fd_outer)->creates_closure)
+ #else
+-			    fd_outer->nestedFrameRef
++			    if(fd_outer->nestedFrameRef)
+ #endif
+-			    )
+-			    vthis_value = irs->getFrameForNestedClass(class_decl); // %% V2: rec_type->class_type
+-			else
++				vthis_value = irs->getFrameForNestedClass(class_decl); // %% V2: rec_type->class_type
++			    else
++				vthis_value = irs->var(fd_outer->vthis);
++			}
++			else {
+ 			    vthis_value = d_null_pointer;
++			}
+ 		    } else {
+ 			assert(0);
+ 		    }
+@@ -3681,27 +3684,28 @@
+ LabelStatement::toIR(IRState* irs)
+ {
+     FuncDeclaration * func = irs->func;
+-#if 0
+-    LabelDsymbol * label = fwdrefs ? func->returnLabel : func->searchLabel(ident);
+-#else
+-    LabelDsymbol * label = isReturnLabel ? func->returnLabel : func->searchLabel(ident);
+-#endif
+-    tree t = irs->getLabelTree( label );
++    LabelDsymbol * label = irs->isReturnLabel(ident) ? func->returnLabel : func->searchLabel(ident);
++    tree t_label;
+ 
+-    if (t) {
+-	TREE_USED(t) = 1;
+-	irs->doLabel(t);
++    if ( (t_label = irs->getLabelTree(label)) )
++    {
++	irs->pushLabel(label);
++	irs->doLabel(t_label);
+ 	if (label->asmLabelNum)
+ 	    d_expand_priv_asm_label(irs, label->asmLabelNum);
+ 
+-#if 0
+-	if (fwdrefs && func->fensure)
+-#else
+-	if (isReturnLabel && func->fensure)
+-#endif
++	if (irs->isReturnLabel(ident) && func->fensure)
+ 	    func->fensure->toIR(irs);
+ 	else if (statement)
+ 	    statement->toIR(irs);
++#if V1
++	if (fwdrefs)
++	{
++	    irs->checkPreviousGoto(fwdrefs);
++	    delete fwdrefs;
++	    fwdrefs = NULL;
++	}
++#endif
+     }
+     // else, there was an error
+ }
+@@ -3709,15 +3713,19 @@
+ void
+ GotoStatement::toIR(IRState* irs)
+ {
++    tree t_label;
++
+     g.ofile->setLoc(loc); /* This makes the 'undefined label' error show up on the correct line...
+ 			     The extra doLineNote in doJump shouldn't cause a problem. */
+-
+-    if (tf != label->statement->tf)
++    if (!label->statement)
++	error("label %s is undefined", label->toChars());
++    else if (tf != label->statement->tf)
+ 	error("cannot goto forward out of or into finally block");
++    else
++	irs->checkGoto(this, label);
+ 
+-    tree t = irs->getLabelTree( label );
+-    if (t)
+-	irs->doJump(this, t);
++    if ( (t_label = irs->getLabelTree(label)) )
++	irs->doJump(this, t_label);
+     // else, there was an error
+ }
+ 
+@@ -3989,9 +3997,7 @@
+ void
+ DefaultStatement::toIR(IRState * irs)
+ {
+-    if(! irs->currentFlow()->condition )
+-	error("default cannot be in different try block level from switch");
+-
++    irs->checkSwitchCase(this, 1);
+     irs->doCase(NULL_TREE, cblock);
+     if (statement)
+ 	statement->toIR( irs );
+@@ -4001,13 +4007,13 @@
+ CaseStatement::toIR(IRState * irs)
+ {
+     tree case_value;
+-    if(! irs->currentFlow()->condition )
+-	error("case cannot be in different try block level from switch");
+ 
+     if ( exp->type->isscalar() )
+ 	case_value = exp->toElem(irs);
+     else
+ 	case_value = irs->integerConstant(index, Type::tint32);
++
++    irs->checkSwitchCase(this);
+     irs->doCase(case_value, cblock);
+     if (statement)
+ 	statement->toIR( irs );
+--- a/src/gcc/d/d-irstate.cc
++++ b/src/gcc/d/d-irstate.cc
+@@ -204,17 +204,17 @@
+ tree
+ IRBase::getLabelTree(LabelDsymbol * label)
+ {
+-    if (! label->statement) {
+-	error("undefined label %s", label->ident->string); // %% ident okay?
++    if (! label->statement)
+ 	return NULL_TREE;
+-    }
+-    
+-    if (! label->statement->lblock) {
++
++    if (! label->statement->lblock)
++    {
+ 	tree label_decl = build_decl (LABEL_DECL, get_identifier(label->ident->string), void_type_node);
+ 
+-	assert(func != 0);    
++	assert(func != 0);
+ 	DECL_CONTEXT( label_decl ) = getLocalContext();
+ 	DECL_MODE( label_decl ) = VOIDmode; // Not sure why or if this is needed
++	D_LABEL_IS_USED( label_decl ) = 1;
+ 	// Not setting this doesn't seem to cause problems (unlike VAR_DECLs)
+ 	if (label->statement->loc.filename)
+ 	    g.ofile->setDeclLoc( label_decl, label->statement->loc ); // %% label->loc okay?
+@@ -223,6 +223,36 @@
+     return label->statement->lblock;
+ }
+ 
++IRBase::Label *
++IRBase::getLabelBlock(LabelDsymbol * label, Statement * from)
++{
++    Label * l = new Label;
++    l->block = NULL;
++    l->from = NULL;
++    l->kind = level_block;
++    l->level = 0;
++
++    for (int i = loops.dim - 1; i >= 0; i--)
++    {
++	Flow * flow = (Flow *)loops.data[i];
++
++	if (flow->kind != level_block &&
++	    flow->kind != level_switch)
++	{
++	    l->block = flow->statement;
++	    l->kind  = flow->kind;
++	    l->level = i + 1;
++	    break;
++	}
++    }
++    if (from)
++	l->from = from;
++
++    l->label = label;
++    return l;
++}
++
++
+ IRBase::Flow *
+ IRBase::getLoopForLabel(Identifier * ident, bool want_continue)
+ {
+@@ -266,6 +296,7 @@
+     
+     flow->statement = stmt;
+     flow->loop = loop;
++    flow->kind = level_block;
+     flow->exitLabel = NULL;
+     flow->overrideContinueLabel = NULL;
+     
+@@ -301,6 +332,7 @@
+     Flow * flow = new Flow;
+     
+     flow->statement = stmt;
++    flow->kind = level_block;
+     flow->exitLabel = NULL_TREE;
+     flow->condition = NULL_TREE;
+     flow->trueBranch = NULL_TREE;
+@@ -332,9 +364,8 @@
+        This makes auto-vectorization possible in conditional loops.
+        The only excemption to this is in LabelStatement::toIR, in which
+        all computed labels are marked regardless.  */
+-    if(TREE_USED(t_label)) {
++    if(D_LABEL_IS_USED(t_label))
+ 	addExp(build1(LABEL_EXPR, void_type_node, t_label));
+-    }
+ }
+ 
+ #endif
+--- a/src/gcc/d/d-irstate.h
++++ b/src/gcc/d/d-irstate.h
+@@ -71,37 +71,55 @@
+     tree popStatementList();
+ #endif
+     
++    // ** Scope kinds.
++
++    /* The kinds of levels we recognize. */
++    typedef enum LevelKind {
++	level_block = 0,    /* An ordinary block scope. */
++	level_switch,	    /* A switch-block */
++	level_try,	    /* A try-block. */
++	level_catch,	    /* A catch-block. */
++	level_finally,	    /* A finally-block. */
++    } LevelKind;
++
+     // ** Labels
+ 
++    typedef struct
++    {
++	LabelDsymbol * label;
++	Statement * block;
++	Statement * from;
++	LevelKind kind;
++	unsigned level;
++    } Label;
++
++    Array Labels; // of Label.
++
+     // It is only valid to call this while the function in which the label is defined
+     // is being compiled.
+-    tree getLabelTree(LabelDsymbol * label);
+-
++    tree    getLabelTree(LabelDsymbol * label);
++    Label * getLabelBlock(LabelDsymbol * label, Statement * from = NULL);
++    bool    isReturnLabel(Identifier * ident) {
++	return func->returnLabel ? ident == func->returnLabel->ident : 0;
++    }
+ 
+     // ** Loops (and case statements)
+ #if D_GCC_VER < 40
+     typedef struct
+     {
+ 	Statement * statement;
++	LevelKind   kind;
+ 	// expand_start_case doesn't return a nesting structure, so
+ 	// we have to generate our own label for 'break'
+ 	nesting * loop;
+ 	tree      exitLabel;
+ 	tree      overrideContinueLabel;
+-	// Copied for information purposes. Not actually used.
+-	union {
+-	    struct {
+-		tree continueLabel;
+-	    };
+-	    struct {
+-		tree condition;
+-	    };
+-	};
+     } Flow;
+ #else
+     typedef struct
+     {
+ 	Statement * statement;
++	LevelKind   kind;
+ 	tree exitLabel;
+ 	union {
+ 	    struct {
+--- a/src/gcc/d/d-lang.h
++++ b/src/gcc/d/d-lang.h
+@@ -91,6 +91,9 @@
+ /* True if the function has been marked "naked". */
+ #define D_DECL_NO_FRAME_POINTER(NODE) (DECL_LANG_FLAG_2(NODE))
+ 
++/* True if the label has been computed, or used by the frontend. */
++#define D_LABEL_IS_USED(NODE) (DECL_LANG_FLAG_3(NODE))
++
+ /* The D front-end does not use the 'binding level' system for a symbol table,
+    It is only needed to get debugging information for local variables and
+    otherwise support the backend. */
+--- a/src/gcc/d/dmd/func.c
++++ b/src/gcc/d/dmd/func.c
+@@ -1047,7 +1047,6 @@
+             if (fensure)
+             {   returnLabel = new LabelDsymbol(Id::returnLabel);
+                 LabelStatement *ls = new LabelStatement(0, Id::returnLabel, fensure);
+-                ls->isReturnLabel = 1; //Temporary, see Issue #54
+                 returnLabel->statement = ls;
+             }
+             sc2 = sc2->pop();
+--- a/src/gcc/d/dmd/impcnvgen.c
++++ b/src/gcc/d/dmd/impcnvgen.c
+@@ -388,8 +388,8 @@
+     Y(Tint64, Tdchar)
+     Y(Tuns64, Tdchar)
+ 
+-    Y(Tint64, Tuns64)
+-    Y(Tuns64, Tint64)
++//    Y(Tint64, Tuns64)
++//    Y(Tuns64, Tint64)
+ 
+     for (i = 0; i < TMAX; i++)
+         for (j = 0; j < TMAX; j++)
+--- a/src/gcc/d/dmd/statement.c
++++ b/src/gcc/d/dmd/statement.c
+@@ -3912,11 +3912,12 @@
+                 error("catch at %s hides catch at %s", sj, si);
+         }
+     }
+-
++#ifndef IN_GCC
+     if (!body || body->isEmpty())
+     {
+         return NULL;
+     }
++#endif
+     return this;
+ }
+ 
+@@ -4352,8 +4353,7 @@
+     this->statement = statement;
+     this->tf = NULL;
+     this->lblock = NULL;
+-    //this->fwdrefs = NULL; //See Issue #54
+-    this->isReturnLabel = 0;
++    this->fwdrefs = NULL;
+ }
+ 
+ Statement *LabelStatement::syntaxCopy()
+--- a/src/gcc/d/dmd/statement.h
++++ b/src/gcc/d/dmd/statement.h
+@@ -792,8 +792,7 @@
+     TryFinallyStatement *tf;
+     block *lblock;              // back end
+ 
+-    //Array *fwdrefs;             // forward references to this LabelStatement //See Issue #54
+-    int isReturnLabel;
++    Array *fwdrefs;             // forward references to this LabelStatement
+ 
+     LabelStatement(Loc loc, Identifier *ident, Statement *statement);
+     Statement *syntaxCopy();
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/sh4-mode-switching.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/sh4-mode-switching.diff
@@ -0,0 +1,20 @@
+# DP: Fix PR target/41993, [sh] ICE in create_pre_exit, at mode-switching.c
+
+--- a/arc/gcc/mode-switching.c	2009-11-24 09:50:59.000000000 +0900
++++ b/src/gcc/mode-switching.c	2009-11-24 09:51:02.000000000 +0900
+@@ -325,7 +325,14 @@
+ 		    else
+ 		      break;
+ 		    if (copy_start >= FIRST_PSEUDO_REGISTER)
+-		      break;
++			{
++				if (!optimize)
++				{
++					last_insn = return_copy;
++					continue;
++				}
++				break;
++			}
+ 		    copy_num
+ 		      = hard_regno_nregs[copy_start][GET_MODE (copy_reg)];
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/alpha-ieee.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/alpha-ieee.diff
@@ -0,0 +1,21 @@
+# DP: #212912
+# DP: on alpha-linux, make -mieee default and add -mieee-disable switch
+# DP: to turn default off
+
+---
+ gcc/config/alpha/alpha.c |    4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+--- a/src/gcc/config/alpha/alpha.c
++++ b/src/gcc/config/alpha/alpha.c
+@@ -281,6 +281,10 @@ override_options (void)
+ 
+   int i;
+ 
++  /* If not -ffinite-math-only, enable -mieee*/
++  if (!flag_finite_math_only)
++    target_flags |= MASK_IEEE|MASK_IEEE_CONFORMANT;
++
+   /* Unicos/Mk doesn't have shared libraries.  */
+   if (TARGET_ABI_UNICOSMK && flag_pic)
+     {
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libjava-fixed-symlinks.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libjava-fixed-symlinks.diff
@@ -0,0 +1,24 @@
+# DP: Remove unneed '..' elements from symlinks in JAVA_HOME
+
+--- a/src/libjava/Makefile.am.orig	2009-04-28 12:24:21.000000000 +0200
++++ b/src/libjava/Makefile.am	2009-05-16 12:32:53.000000000 +0200
+@@ -580,7 +580,7 @@
+ 	$(mkinstalldirs) $(DESTDIR)$(SDK_INCLUDE_DIR)/$(OS)
+ 	relative() { \
+ 	  $(PERL) -e 'use File::Spec; \
+-	    print File::Spec->abs2rel($$ARGV[0], $$ARGV[1])' $$1 $$2; \
++	    print File::Spec->abs2rel($$ARGV[0], $$ARGV[1])' $$1 $$2 | sed -r 's,(bin|lib)[^/]*/\.\./,,'; \
+ 	}; \
+ 	RELATIVE=$$(relative $(DESTDIR)$(bindir) $(DESTDIR)$(SDK_BIN_DIR)); \
+ 	ln -sf $$RELATIVE/`echo gij | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
+--- a/src/libjava/Makefile.in.orig	2009-05-12 10:51:35.000000000 +0200
++++ b/src/libjava/Makefile.in	2009-05-16 12:34:13.000000000 +0200
+@@ -12433,7 +12433,7 @@
+ @CREATE_JAVA_HOME_TRUE@	$(mkinstalldirs) $(DESTDIR)$(SDK_INCLUDE_DIR)/$(OS)
+ @CREATE_JAVA_HOME_TRUE@	relative() { \
+ @CREATE_JAVA_HOME_TRUE@	  $(PERL) -e 'use File::Spec; \
+-@CREATE_JAVA_HOME_TRUE@	    print File::Spec->abs2rel($$ARGV[0], $$ARGV[1])' $$1 $$2; \
++@CREATE_JAVA_HOME_TRUE@	    print File::Spec->abs2rel($$ARGV[0], $$ARGV[1])' $$1 $$2 | sed -r 's,(bin|lib)[^/]*/\.\./,,'; \
+ @CREATE_JAVA_HOME_TRUE@	}; \
+ @CREATE_JAVA_HOME_TRUE@	RELATIVE=$$(relative $(DESTDIR)$(bindir) $(DESTDIR)$(SDK_BIN_DIR)); \
+ @CREATE_JAVA_HOME_TRUE@	ln -sf $$RELATIVE/`echo gij | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-multilib64-multiarch.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-multilib64-multiarch.diff
@@ -0,0 +1,46 @@
+# DP: Use lib instead of lib64 as the 64bit system dir on biarch
+# DP: architectures defaulting to 64bit.
+
+--- a/src/gcc/config/s390/t-linux64
++++ b/src/gcc/config/s390/t-linux64
+@@ -1,7 +1,7 @@
+ MULTILIB_OPTIONS = m64/m31
+ MULTILIB_DIRNAMES = 64 32
+ MULTILIB_OSDIRNAMES = ../lib64 ../lib
+-MULTILIB_OSDIRNAMES = ../lib64:s390x-linux-gnu ../lib:s390-linux-gnu
++MULTILIB_OSDIRNAMES = ../lib:s390x-linux-gnu ../lib32:s390-linux-gnu
+ 
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+--- a/src/gcc/config/rs6000/t-linux64
++++ b/src/gcc/config/rs6000/t-linux64
+@@ -34,7 +34,7 @@
+ MULTILIB_OPTIONS        = m64/m32
+ MULTILIB_DIRNAMES       = 64 32
+ MULTILIB_EXTRA_OPTS     = fPIC mstrict-align
+-MULTILIB_OSDIRNAMES	= ../lib64:powerpc64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):powerpc-linux-gnu
++MULTILIB_OSDIRNAMES	= ../lib:powerpc64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):powerpc-linux-gnu
+ MULTILIB_MATCHES        = $(MULTILIB_MATCHES_FLOAT)
+ 
+ softfp_wrap_start := '\#ifndef __powerpc64__'
+--- a/src/gcc/config/sparc/t-linux64
++++ b/src/gcc/config/sparc/t-linux64
+@@ -1,6 +1,6 @@
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32
+-MULTILIB_OSDIRNAMES = ../lib64:sparc64-linux-gnu ../lib:sparc-linux-gnu
++MULTILIB_OSDIRNAMES = ../lib:sparc64-linux-gnu ../lib32:sparc-linux-gnu
+ 
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+--- a/src/gcc/config/i386/t-linux64
++++ b/src/gcc/config/i386/t-linux64
+@@ -25,7 +25,7 @@
+ 
+ MULTILIB_OPTIONS = m64/m32
+ MULTILIB_DIRNAMES = 64 32 
+-MULTILIB_OSDIRNAMES = ../lib64:x86_64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):i386-linux-gnu
++MULTILIB_OSDIRNAMES = ../lib:x86_64-linux-gnu $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib):i386-linux-gnu
+ 
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/alpha-ieee-doc.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/alpha-ieee-doc.diff
@@ -0,0 +1,24 @@
+# DP: #212912
+# DP: on alpha-linux, make -mieee default and add -mieee-disable switch
+# DP: to turn default off (doc patch)
+
+---
+ gcc/doc/invoke.texi |    7 +++++++
+ 1 files changed, 7 insertions(+), 0 deletions(-)
+
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -9980,6 +9980,13 @@ able to correctly support denormalized numbers and exceptional IEEE
+ values such as not-a-number and plus/minus infinity.  Other Alpha
+ compilers call this option @option{-ieee_with_no_inexact}.
+ 
++DEBIAN SPECIFIC: This option is on by default, unless
++@option{-ffinite-math-only} (which is part of the @option{-ffast-math}
++set) is specified, because the software functions in the GNU libc math
++libraries generate denormalized numbers, NaNs, and infs (all of which
++will cause a programs to SIGFPE when it attempts to use the results without
++@option{-mieee}).
++
+ @item -mieee-with-inexact
+ @opindex mieee-with-inexact
+ This is like @option{-mieee} except the generated code also maintains
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-textdomain.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-textdomain.diff
@@ -0,0 +1,90 @@
+# DP: Set gettext's domain and textdomain to the versioned package name.
+
+---
+ gcc/Makefile.in    |    4 ++--
+ gcc/intl.c         |    4 ++--
+ libcpp/Makefile.in |    8 +++++---
+ libcpp/init.c      |    2 +-
+ libcpp/system.h    |    2 +-
+ 5 files changed, 11 insertions(+), 9 deletions(-)
+
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -4792,8 +4792,8 @@ install-po:
+ 	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+ 	  echo $(mkinstalldirs) $(DESTDIR)$$dir; \
+ 	  $(mkinstalldirs) $(DESTDIR)$$dir || exit 1; \
+-	  echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc.mo; \
+-	  $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc.mo; \
++	  echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc-4.4.mo; \
++	  $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc-4.4.mo; \
+ 	done
+ 
+ # Rule for regenerating the message template (gcc.pot).
+--- a/src/gcc/intl.c
++++ b/src/gcc/intl.c
+@@ -51,8 +51,8 @@ gcc_init_libintl (void)
+   setlocale (LC_ALL, "");
+ #endif
+ 
+-  (void) bindtextdomain ("gcc", LOCALEDIR);
+-  (void) textdomain ("gcc");
++  (void) bindtextdomain ("gcc-4.4", LOCALEDIR);
++  (void) textdomain ("gcc-4.4");
+ 
+   /* Opening quotation mark.  */
+   open_quote = _("`");
+--- a/src/libcpp/Makefile.in
++++ b/src/libcpp/Makefile.in
+@@ -47,6 +47,7 @@ LDFLAGS = @LDFLAGS@
+ LIBICONV = @LIBICONV@
+ LIBINTL = @LIBINTL@
+ PACKAGE = @PACKAGE@
++PACKAGE_SUFFIX = -4.4
+ RANLIB = @RANLIB@
+ SHELL = @SHELL@
+ USED_CATALOGS = @USED_CATALOGS@
+@@ -67,8 +68,9 @@ depcomp = $(SHELL) $(srcdir)/../depcomp
+ 
+ INCLUDES = -I$(srcdir) -I. -I$(srcdir)/../include @INCINTL@ \
+ 	-I$(srcdir)/include
++DEBCPPFLAGS += -DPACKAGE_SUFFIX=\"$(strip $(PACKAGE_SUFFIX))\"
+ 
+-ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS)
++ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS) $(DEBCPPFLAGS)
+ 
+ libcpp_a_OBJS = charset.o directives.o directives-only.o errors.o \
+ 	expr.o files.o identifiers.o init.o lex.o line-map.o macro.o \
+@@ -158,8 +160,8 @@ install-strip install: all installdirs
+ 	  else continue; \
+ 	  fi; \
+ 	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+-	  echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
+-	  $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
++	  echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE)$(PACKAGE_SUFFIX).mo; \
++	  $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE)$(PACKAGE_SUFFIX).mo; \
+ 	done
+ 
+ mostlyclean:
+--- a/src/libcpp/init.c
++++ b/src/libcpp/init.c
+@@ -132,7 +132,7 @@ init_library (void)
+       init_trigraph_map ();
+ 
+ #ifdef ENABLE_NLS
+-       (void) bindtextdomain (PACKAGE, LOCALEDIR);
++       (void) bindtextdomain (PACKAGE PACKAGE_SUFFIX, LOCALEDIR);
+ #endif
+     }
+ }
+--- a/src/libcpp/system.h
++++ b/src/libcpp/system.h
+@@ -260,7 +260,7 @@ extern int errno;
+ #endif
+ 
+ #ifndef _
+-# define _(msgid) dgettext (PACKAGE, msgid)
++# define _(msgid) dgettext (PACKAGE PACKAGE_SUFFIX, msgid)
+ #endif
+ 
+ #ifndef N_
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-fix-build-arm.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-fix-build-arm.diff
@@ -0,0 +1,38 @@
+# DP: Fix build on arm/armel.
+
+--- a/src/gcc/config/arm/arm-c.c	2007-11-05 17:13:46.000000000 +0000
++++ b/src/gcc/config/arm/arm-c.c	2010-08-29 11:42:36.503460693 +0100
+@@ -15,7 +15,7 @@
+ {
+   /* Tag_ABI_PCS_wchar_t.  */
+   asm_fprintf (asm_out_file, "\t.eabi_attribute 18, %d\n",
+-	       (int)(TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT));
++	       (int)(WCHAR_TYPE_SIZE / BITS_PER_UNIT));
+ }
+ 
+ 
+--- a/src/gcc/d/d-gcc-includes.h	2010-08-19 12:30:20.000000000 +0100
++++ b/src/gcc/d/d-gcc-includes.h	2010-08-23 10:44:15.709788361 +0100
+@@ -32,7 +32,11 @@
+ 
+ // hack needed to prevent inclusion of the generated insn-flags.h
+ // which defines some inline functions that use C prototypes....
++// because some archs depend on this header for EH routines,
++// only do this if EH_RETURN_HANDLER_RTX is already defined.
++#ifdef EH_RETURN_HANDLER_RTX
+ #define GCC_INSN_FLAGS_H
++#endif
+ 
+ // Conflicting definitions between stdio.h and libiberty.h over the throw()
+ #define HAVE_DECL_ASPRINTF 1
+--- a/src/gcc/d/phobos/gcc/deh.d	2010-08-19 13:59:09.000000000 +0100
++++ b/src/gcc/d/phobos/gcc/deh.d	2010-08-23 10:42:05.882821950 +0100
+@@ -254,7 +254,7 @@
+     ubyte *p;
+     ubyte *action_record;
+     //int handler_switch_value;
+-    _Unwind_Ptr /*landing_pad, */ip;
++    _Unwind_Ptr landing_pad, ip;
+     Phase1Info phase1;
+ 
+     static if (Use_ARM_EABI_Unwinder)
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr41302.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr41302.diff
@@ -0,0 +1,119 @@
+From: mkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Wed, 4 Nov 2009 09:57:55 +0000 (+0000)
+Subject: 2009-11-04  Maxim Kuvyrkov  <maxim@codesourcery.com>
+X-Git-Url: http://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;a=commitdiff_plain;h=d09fd72c630c4886367f1977cdb366aa82950e32
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@153890 138bc75d-0d04-0410-961f-82ee72b054a4
+---
+
+gcc/
+
+2010-10-14  Thorsten Glaser  <tg@debian.org>
+
+	Backport from mainline
+	2009-11-04  Maxim Kuvyrkov  <maxim@codesourcery.com>
+
+	PR target/41302
+	* config/m68k/m68k.c (m68k_reg_present_p): New static function.
+	(m68k_ok_for_sibcall_p): Handle different result return locations.
+
+gcc/testsuite/
+
+2010-10-14  Thorsten Glaser  <tg@debian.org>
+
+	Backport from mainline
+	2009-11-04  Carlos O'Donell  <carlos@codesourcery.com>
+
+	PR target/41302
+	* gcc.target/m68k/pr41302.c: New test.
+
+--- a/src/gcc/config/m68k/m68k.c	2010-10-14 15:23:42.000000000 +0000
++++ b/src/gcc/config/m68k/m68k.c	2010-10-14 16:43:31.000000000 +0000
+@@ -1383,6 +1383,30 @@ flags_in_68881 (void)
+   return cc_status.flags & CC_IN_68881;
+ }
+ 
++/* Return true if PARALLEL contains register REGNO.  */
++static bool
++m68k_reg_present_p (const_rtx parallel, unsigned int regno)
++{
++  int i;
++
++  if (REG_P (parallel) && REGNO (parallel) == regno)
++    return true;
++
++  if (GET_CODE (parallel) != PARALLEL)
++    return false;
++
++  for (i = 0; i < XVECLEN (parallel, 0); ++i)
++    {
++      const_rtx x;
++
++      x = XEXP (XVECEXP (parallel, 0, i), 0);
++      if (REG_P (x) && REGNO (x) == regno)
++	return true;
++    }
++
++  return false;
++}
++
+ /* Implement TARGET_FUNCTION_OK_FOR_SIBCALL_P.  */
+ 
+ static bool
+@@ -1395,6 +1419,26 @@ m68k_ok_for_sibcall_p (tree decl, tree e
+   if (CALL_EXPR_STATIC_CHAIN (exp))
+     return false;
+ 
++  if (!VOID_TYPE_P (TREE_TYPE (DECL_RESULT (cfun->decl))))
++    {
++      /* Check that the return value locations are the same.  For
++	 example that we aren't returning a value from the sibling in
++	 a D0 register but then need to transfer it to a A0 register.  */
++      rtx cfun_value;
++      rtx call_value;
++
++      cfun_value = FUNCTION_VALUE (TREE_TYPE (DECL_RESULT (cfun->decl)),
++				   cfun->decl);
++      call_value = FUNCTION_VALUE (TREE_TYPE (exp), decl);
++
++      /* Check that the values are equal or that the result the callee
++	 function returns is superset of what the current function returns.  */
++      if (!(rtx_equal_p (cfun_value, call_value)
++	    || (REG_P (cfun_value)
++		&& m68k_reg_present_p (call_value, REGNO (cfun_value)))))
++	return false;
++    }
++
+   kind = m68k_get_function_kind (current_function_decl);
+   if (kind == m68k_fk_normal_function)
+     /* We can always sibcall from a normal function, because it's
+@@ -5091,6 +5135,9 @@ m68k_libcall_value (enum machine_mode mo
+   return gen_rtx_REG (mode, m68k_libcall_value_in_a0_p ? A0_REG : D0_REG);
+ }
+ 
++/* Location in which function value is returned.
++   NOTE: Due to differences in ABIs, don't call this function directly,
++   use FUNCTION_VALUE instead.  */
+ rtx
+ m68k_function_value (const_tree valtype, const_tree func ATTRIBUTE_UNUSED)
+ {
+diff --git a/gcc/testsuite/gcc.target/m68k/pr41302.c b/gcc/testsuite/gcc.target/m68k/pr41302.c
+new file mode 100644
+index 0000000..8e1c310
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/m68k/pr41302.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-final { scan-assembler "move.l \%d0,\%a0" { target *linux* } } } */
++
++struct pts {
++  int c;
++};
++
++unsigned int bar (struct pts *a, int b);
++
++struct pts * foo (struct pts *a, int b)
++{
++  return (struct pts *) bar (a, b);
++}
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-multiarch-linaro.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-multiarch-linaro.diff
@@ -0,0 +1,78 @@
+# DP: gcc-multiarch, differing parts in FSF/Linaro
+
+Index: b/src/gcc/genmultilib
+===================================================================
+--- a/src/gcc/genmultilib
++++ b/src/gcc/genmultilib
+@@ -87,6 +87,8 @@
+ #   "be mbig-endian mthumb;",
+ #   "thumb !mbig-endian mthumb;",
+ 
++# The optional ninth argument is the multiarch name.
++
+ # The last option should be "yes" if multilibs are enabled.  If it is not
+ # "yes", all GCC multilib dir names will be ".".
+ 
+@@ -136,7 +138,8 @@
+ exclusions=$6
+ osdirnames=$7
+ aliases=$8
+-enable_multilib=$9
++multiarch=$9
++enable_multilib=${10}
+ 
+ echo "static const char *const multilib_raw[] = {"
+ 
+@@ -269,6 +272,9 @@
+ # names.
+ toosdirnames=
+ defaultosdirname=
++if [ -n "${multiarch}" ]; then
++  defaultosdirname=:.:${multiarch}
++fi
+ if [ -n "${osdirnames}" ]; then
+   set x ${osdirnames}
+   shift
+@@ -276,6 +282,9 @@
+     case "$1" in
+       .=*)
+         defaultosdirname=`echo $1 | sed 's|^.=|:|'`
++	if [ -n "${multiarch}" ]; then
++	  defaultosdirname=${defaultosdirname}:${multiarch}
++	fi
+ 	shift
+ 	;;
+       *=*)
+@@ -361,13 +370,13 @@
+     dirout=`echo ${combo} | sed -e 's/=/-/g'`
+   fi
+   # Remove the leading and trailing slashes.
+-  dirout=`echo ${dirout} | sed -e 's|^/||' -e 's|/$||g'`
++  dirout=`echo ${dirout} | sed -e 's|^/||' -e 's|/*:/*|:|' -e 's|/$||g'`
+ 
+   # Use the OS directory names rather than the option names.
+   if [ -n "${toosdirnames}" ]; then
+     osdirout=`echo ${combo} | sed ${toosdirnames}`
+     # Remove the leading and trailing slashes.
+-    osdirout=`echo ${osdirout} | sed -e 's|^/||' -e 's|/$||g'`
++    osdirout=`echo ${osdirout} | sed -e 's|^/||' -e 's|/*:/*|:|' -e 's|/$||g'`
+     if [ "x${enable_multilib}" != xyes ]; then
+       dirout=".:${osdirout}"
+       disable_multilib=yes
+Index: b/src/gcc/Makefile.in
+===================================================================
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -1751,10 +1751,11 @@
+ 	    "$(MULTILIB_EXCLUSIONS)" \
+ 	    "$(MULTILIB_OSDIRNAMES)" \
+ 	    "$(MULTILIB_ALIASES)" \
++	    "$(MULTIARCH_DIRNAME)" \
+ 	    "@enable_multilib@" \
+ 	    > tmp-mlib.h; \
+ 	else \
+-	  $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' '' no \
++	  $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' '' "$(MULTIARCH_DIRNAME)" no \
+ 	    > tmp-mlib.h; \
+ 	fi
+ 	$(SHELL) $(srcdir)/../move-if-change tmp-mlib.h multilib.h
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-stack_chk_fail-check.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-stack_chk_fail-check.diff
@@ -0,0 +1,15 @@
+# DP: Fix __stack_chk_fail check for cross builds configured --with-headers
+
+--- a/src/gcc/configure.ac~	2009-10-21 16:35:50.000000000 +0200
++++ b/src/gcc/configure.ac	2009-10-21 16:48:14.000000000 +0200
+@@ -3594,7 +3594,9 @@
+     case "$target" in
+        *-*-linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu)
+       if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
+-	if test "x$with_sysroot" = x; then
++	if test "x$with_headers" != x; then
++	  glibc_header_dir=$with_headers
++	elif test "x$with_sysroot" = x; then
+ 	  glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
+ 	elif test "x$with_build_sysroot" != "x"; then
+ 	  glibc_header_dir="${with_build_sysroot}/usr/include"
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gdc-4.4-linaro.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gdc-4.4-linaro.diff
@@ -0,0 +1,786 @@
+# DP: Patches the GCC Directory for D.
+
+--- a/src/gcc/cgraph.c	2008-11-16 22:31:58.000000000 +0000
++++ b/src/gcc/cgraph.c	2010-08-26 17:13:05.507131097 +0100
+@@ -451,6 +451,7 @@
+ cgraph_node (tree decl)
+ {
+   struct cgraph_node key, *node, **slot;
++  tree context;
+ 
+   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
+ 
+@@ -472,14 +473,18 @@
+   node = cgraph_create_node ();
+   node->decl = decl;
+   *slot = node;
+-  if (DECL_CONTEXT (decl) && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
++  if (!DECL_NO_STATIC_CHAIN (decl))
+     {
+-      node->origin = cgraph_node (DECL_CONTEXT (decl));
+-      node->origin->ever_was_nested = 1;
+-      node->next_nested = node->origin->nested;
+-      node->origin->nested = node;
+-      node->master_clone = node;
+-      node->ever_was_nested = 1;
++      context = decl_function_context (decl);
++      if (context)
++	{
++	  node->origin = cgraph_node (context);
++	  node->origin->ever_was_nested = 1;
++	  node->next_nested = node->origin->nested;
++	  node->origin->nested = node;
++	  node->master_clone = node;
++	  node->ever_was_nested = 1;
++	}
+     }
+   if (assembler_name_hash)
+     {
+--- a/src/gcc/cgraphunit.c	2010-03-31 14:23:17.000000000 +0100
++++ b/src/gcc/cgraphunit.c	2010-08-26 17:13:05.511130348 +0100
+@@ -1032,6 +1032,10 @@
+ static void
+ cgraph_expand_function (struct cgraph_node *node)
+ {
++  int save_flag_omit_frame_pointer = flag_omit_frame_pointer;
++  static int inited = 0;
++  static int orig_omit_frame_pointer;
++
+   tree decl = node->decl;
+ 
+   /* We ought to not compile any inline clones.  */
+@@ -1041,11 +1045,21 @@
+ 
+   gcc_assert (node->lowered);
+ 
++  if (!inited)
++    {
++      inited = 1;
++      orig_omit_frame_pointer = flag_omit_frame_pointer;
++    }
++  flag_omit_frame_pointer = orig_omit_frame_pointer ||
++      DECL_STRUCT_FUNCTION (decl)->naked;
++
+   /* Generate RTL for the body of DECL.  */
+   if (lang_hooks.callgraph.emit_associated_thunks)
+     lang_hooks.callgraph.emit_associated_thunks (decl);
+   tree_rest_of_compilation (decl);
+ 
++  flag_omit_frame_pointer = save_flag_omit_frame_pointer;
++
+   /* Make sure that BE didn't give up on compiling.  */
+   gcc_assert (TREE_ASM_WRITTEN (decl));
+   current_function_decl = NULL;
+--- a/src/gcc/config/i386/i386.c	2010-04-08 16:09:17.000000000 +0100
++++ b/src/gcc/config/i386/i386.c	2010-08-26 17:13:05.590134523 +0100
+@@ -7876,6 +7876,11 @@
+     frame->red_zone_size = 0;
+   frame->to_allocate -= frame->red_zone_size;
+   frame->stack_pointer_offset -= frame->red_zone_size;
++
++  if (cfun->naked)
++    /* As above, skip return address */
++    frame->stack_pointer_offset = UNITS_PER_WORD;
++
+ #if 0
+   fprintf (stderr, "\n");
+   fprintf (stderr, "size: %ld\n", (long)size);
+@@ -26792,7 +26797,7 @@
+ 	  output_set_got (tmp, NULL_RTX);
+ 
+ 	  xops[1] = tmp;
+-	  output_asm_insn ("mov{l}\t{%0@GOT(%1), %1|%1, %0@GOT[%1]}", xops);
++	  output_asm_insn ("mov{l}\t{%a0@GOT(%1), %1|%1, %a0@GOT[%1]}", xops);
+ 	  output_asm_insn ("jmp\t{*}%1", xops);
+ 	}
+     }
+--- a/src/gcc/config/rs6000/rs6000.c	2010-03-27 18:56:08.000000000 +0000
++++ b/src/gcc/config/rs6000/rs6000.c	2010-08-26 17:13:05.622134818 +0100
+@@ -17630,7 +17630,8 @@
+ 	 C is 0.  Fortran is 1.  Pascal is 2.  Ada is 3.  C++ is 9.
+ 	 Java is 13.  Objective-C is 14.  Objective-C++ isn't assigned
+ 	 a number, so for now use 9.  */
+-      if (! strcmp (language_string, "GNU C"))
++      if (! strcmp (language_string, "GNU C")
++	  || ! strcmp (language_string, "GNU D"))
+ 	i = 0;
+       else if (! strcmp (language_string, "GNU F77")
+ 	       || ! strcmp (language_string, "GNU Fortran"))
+--- a/src/gcc/dwarf2out.c	2010-02-10 15:09:06.000000000 +0000
++++ b/src/gcc/dwarf2out.c	2010-08-26 17:13:05.654133370 +0100
+@@ -6398,7 +6398,8 @@
+ 
+   return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_ObjC
+ 	  || lang == DW_LANG_C99
+-	  || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus);
++	  || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus
++	  || lang == DW_LANG_D);
+ }
+ 
+ /* Return TRUE if the language is C++.  */
+@@ -14506,6 +14507,8 @@
+     language = DW_LANG_ObjC;
+   else if (strcmp (language_string, "GNU Objective-C++") == 0)
+     language = DW_LANG_ObjC_plus_plus;
++  else if (strcmp (language_string, "GNU D") == 0)
++    language = DW_LANG_D;
+   else
+     language = DW_LANG_C89;
+ 
+@@ -15688,7 +15691,7 @@
+ 
+       /* For local statics lookup proper context die.  */
+       if (TREE_STATIC (decl) && decl_function_context (decl))
+-	context_die = lookup_decl_die (DECL_CONTEXT (decl));
++	context_die = lookup_decl_die (decl_function_context (decl));
+ 
+       /* If we are in terse mode, don't generate any DIEs to represent any
+ 	 variable declarations or definitions.  */
+--- a/src/gcc/except.c	2010-03-08 11:46:28.000000000 +0000
++++ b/src/gcc/except.c	2010-08-26 17:13:05.662141930 +0100
+@@ -200,7 +200,7 @@
+ 
+ typedef struct eh_region *eh_region;
+ 
+-struct call_site_record GTY(())
++struct call_site_record_d GTY(())
+ {
+   rtx landing_pad;
+   int action;
+@@ -3198,7 +3198,7 @@
+ {
+   call_site_record record;
+   
+-  record = GGC_NEW (struct call_site_record);
++  record = GGC_NEW (struct call_site_record_d);
+   record->landing_pad = landing_pad;
+   record->action = action;
+ 
+@@ -3399,7 +3399,7 @@
+ 
+   for (i = 0; i < n; ++i)
+     {
+-      struct call_site_record *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
++      struct call_site_record_d *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
+       size += size_of_uleb128 (cs->action);
+     }
+ 
+@@ -3415,7 +3415,7 @@
+ 
+   for (i = 0; i < n; ++i)
+     {
+-      struct call_site_record *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
++      struct call_site_record_d *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
+       size += size_of_uleb128 (INTVAL (cs->landing_pad));
+       size += size_of_uleb128 (cs->action);
+     }
+@@ -3432,7 +3432,7 @@
+ 
+   for (i = 0; i < n; ++i)
+     {
+-      struct call_site_record *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
++      struct call_site_record_d *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
+       char reg_start_lab[32];
+       char reg_end_lab[32];
+       char landing_pad_lab[32];
+@@ -3486,7 +3486,7 @@
+ 
+   for (i = 0; i < n; ++i)
+     {
+-      struct call_site_record *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
++      struct call_site_record_d *cs = VEC_index (call_site_record, crtl->eh.call_site_record, i);
+ 
+       dw2_asm_output_data_uleb128 (INTVAL (cs->landing_pad),
+ 				   "region %d landing pad", i);
+--- a/src/gcc/expr.c	2010-03-08 11:46:28.000000000 +0000
++++ b/src/gcc/expr.c	2010-08-26 17:13:05.678130275 +0100
+@@ -9321,6 +9321,11 @@
+ 	 represent.  */
+       return const0_rtx;
+ 
++    case STATIC_CHAIN_EXPR:
++    case STATIC_CHAIN_DECL:
++      /* Lowered by tree-nested.c */
++      gcc_unreachable ();
++
+     case EXC_PTR_EXPR:
+       return get_exception_pointer ();
+ 
+--- a/src/gcc/function.c	2009-11-13 19:57:51.000000000 +0000
++++ b/src/gcc/function.c	2010-08-26 17:13:05.690132989 +0100
+@@ -3184,7 +3184,8 @@
+       FUNCTION_ARG_ADVANCE (all.args_so_far, data.promoted_mode,
+ 			    data.passed_type, data.named_arg);
+ 
+-      assign_parm_adjust_stack_rtl (&data);
++      if (!cfun->naked)
++	assign_parm_adjust_stack_rtl (&data);
+ 
+       if (assign_parm_setup_block_p (&data))
+ 	assign_parm_setup_block (&all, parm, &data);
+@@ -3199,7 +3200,8 @@
+ 
+   /* Output all parameter conversion instructions (possibly including calls)
+      now that all parameters have been copied out of hard registers.  */
+-  emit_insn (all.first_conversion_insn);
++  if (!cfun->naked)
++    emit_insn (all.first_conversion_insn);
+ 
+   /* Estimate reload stack alignment from scalar return mode.  */
+   if (SUPPORTS_STACK_ALIGNMENT)
+@@ -3351,6 +3353,9 @@
+   tree fnargs, parm;
+   gimple_seq stmts = NULL;
+ 
++  if (cfun->naked)
++    return NULL;
++
+   assign_parms_initialize_all (&all);
+   fnargs = assign_parms_augmented_arg_list (&all);
+ 
+@@ -4456,11 +4461,15 @@
+       tree parm = cfun->static_chain_decl;
+       rtx local = gen_reg_rtx (Pmode);
+ 
+-      set_decl_incoming_rtl (parm, static_chain_incoming_rtx, false);
+       SET_DECL_RTL (parm, local);
+       mark_reg_pointer (local, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))));
+ 
+-      emit_move_insn (local, static_chain_incoming_rtx);
++      if (!cfun->custom_static_chain)
++	{
++	  set_decl_incoming_rtl (parm, static_chain_incoming_rtx, false);
++	  emit_move_insn (local, static_chain_incoming_rtx);
++	}
++      /* else, the static chain will be set in the main body */
+     }
+ 
+   /* If the function receives a non-local goto, then store the
+@@ -4981,6 +4990,9 @@
+ #endif
+   edge_iterator ei;
+ 
++  if (cfun->naked)
++    return;
++
+   rtl_profile_for_bb (ENTRY_BLOCK_PTR);
+ #ifdef HAVE_prologue
+   if (HAVE_prologue)
+--- a/src/gcc/function.h	2009-09-23 15:58:58.000000000 +0100
++++ b/src/gcc/function.h	2010-08-26 17:13:05.694133708 +0100
+@@ -137,7 +137,7 @@
+   rtx x_forced_labels;
+ };
+ 
+-typedef struct call_site_record *call_site_record;
++typedef struct call_site_record_d *call_site_record;
+ DEF_VEC_P(call_site_record);
+ DEF_VEC_ALLOC_P(call_site_record, gc);
+ 
+@@ -175,12 +175,12 @@
+ struct gimple_df;
+ struct temp_slot;
+ typedef struct temp_slot *temp_slot_p;
+-struct call_site_record;
++struct call_site_record_d;
+ 
+ DEF_VEC_P(temp_slot_p);
+ DEF_VEC_ALLOC_P(temp_slot_p,gc);
+-struct ipa_opt_pass;
+-typedef struct ipa_opt_pass *ipa_opt_pass;
++struct ipa_opt_pass_d;
++typedef struct ipa_opt_pass_d *ipa_opt_pass;
+ 
+ DEF_VEC_P(ipa_opt_pass);
+ DEF_VEC_ALLOC_P(ipa_opt_pass,heap);
+@@ -600,6 +600,14 @@
+      adjusts one of its arguments and forwards to another
+      function.  */
+   unsigned int is_thunk : 1;
++
++  /* Nonzero if static chain is initialized by something other than
++     static_chain_incoming_rtx. */
++  unsigned int custom_static_chain : 1;
++
++  /* Nonzero if no code should be generated for prologues, copying
++     parameters, etc. */
++  unsigned int naked : 1;
+ };
+ 
+ /* If va_list_[gf]pr_size is set to this, it means we don't know how
+--- a/src/gcc/gcc.c	2010-01-09 00:05:06.000000000 +0000
++++ b/src/gcc/gcc.c	2010-08-26 17:13:39.034133274 +0100
+@@ -126,6 +126,9 @@
+ /* Flag set to nonzero if an @file argument has been supplied to gcc.  */
+ static bool at_file_supplied;
+ 
++/* Flag set by drivers needing Pthreads. */
++int need_pthreads;
++
+ /* Flag saying to pass the greatest exit code returned by a sub-process
+    to the calling program.  */
+ static int pass_exit_codes;
+@@ -373,6 +376,9 @@
+ static const char *version_compare_spec_function (int, const char **);
+ static const char *include_spec_function (int, const char **);
+ static const char *print_asm_header_spec_function (int, const char **);
++
++extern const char *d_all_sources_spec_function (int, const char **);
++extern const char *d_output_prefix_spec_function (int, const char **);
+ 
+ /* The Specs Language
+ 
+@@ -480,6 +486,7 @@
+ 	assembler has done its job.
+  %D	Dump out a -L option for each directory in startfile_prefixes.
+ 	If multilib_dir is set, extra entries are generated with it affixed.
++ %N     Output the currently selected multilib directory name
+  %l     process LINK_SPEC as a spec.
+  %L     process LIB_SPEC as a spec.
+  %G     process LIBGCC_SPEC as a spec.
+@@ -925,6 +932,8 @@
+ #endif
+ #endif
+ 
++#define GCC_SPEC_FORMAT_4 1
++
+ /* Record the mapping from file suffixes for compilation specs.  */
+ 
+ struct compiler
+@@ -1647,6 +1656,10 @@
+   { "version-compare",		version_compare_spec_function },
+   { "include",			include_spec_function },
+   { "print-asm-header",		print_asm_header_spec_function },
++#ifdef D_USE_EXTRA_SPEC_FUNCTIONS
++  { "d-all-sources",		d_all_sources_spec_function },
++  { "d-output-prefix",		d_output_prefix_spec_function },
++#endif
+ #ifdef EXTRA_SPEC_FUNCTIONS
+   EXTRA_SPEC_FUNCTIONS
+ #endif
+@@ -4022,6 +4035,9 @@
+ 	}
+     }
+ 
++  if (need_pthreads)
++      n_switches++;
++
+   if (save_temps_flag && use_pipes)
+     {
+       /* -save-temps overrides -pipe, so that temp files are produced */
+@@ -4332,6 +4348,18 @@
+       infiles[0].name   = "help-dummy";
+     }
+ 
++  if (need_pthreads)
++    {
++      switches[n_switches].part1 = "pthread";
++      switches[n_switches].args = 0;
++      switches[n_switches].live_cond = 0;
++      /* Do not print an error if there is not expansion for -pthread. */
++      switches[n_switches].validated = 1;
++      switches[n_switches].ordering = 0;
++
++      n_switches++;
++    }
++
+   switches[n_switches].part1 = 0;
+   infiles[n_infiles].name = 0;
+ }
+@@ -5337,6 +5365,17 @@
+ 	      return value;
+ 	    break;
+ 
++	  case 'N':
++	    if (multilib_dir)
++	      {
++		arg_going = 1;
++		obstack_grow (&obstack, "-fmultilib-dir=",
++			      strlen ("-fmultilib-dir="));
++		obstack_grow (&obstack, multilib_dir,
++			      strlen (multilib_dir));
++	      }
++	    break;
++
+ 	    /* Here we define characters other than letters and digits.  */
+ 
+ 	  case '{':
+--- a/src/gcc/gimple.c	2008-12-07 23:27:14.000000000 +0000
++++ b/src/gcc/gimple.c	2010-08-26 17:13:05.714129477 +0100
+@@ -2535,6 +2535,9 @@
+       || (SYM) == POLYNOMIAL_CHREC					    \
+       || (SYM) == DOT_PROD_EXPR						    \
+       || (SYM) == VEC_COND_EXPR						    \
++      || (SYM) == STATIC_CHAIN_DECL					    \
++      || (SYM) == STATIC_CHAIN_EXPR /* not sure if this is right...*/	    \
++      || (SYM) == VEC_COND_EXPR						    \
+       || (SYM) == REALIGN_LOAD_EXPR) ? GIMPLE_SINGLE_RHS		    \
+    : GIMPLE_INVALID_RHS),
+ #define END_OF_BASE_TREE_CODES (unsigned char) GIMPLE_INVALID_RHS,
+@@ -2615,7 +2618,10 @@
+ 	  || TREE_CODE (t) == WITH_SIZE_EXPR
+ 	  /* These are complex lvalues, but don't have addresses, so they
+ 	     go here.  */
+-	  || TREE_CODE (t) == BIT_FIELD_REF);
++	  || TREE_CODE (t) == BIT_FIELD_REF
++	  /* This is an lvalue because it will be replaced with the real
++	     static chain decl. */
++	  || TREE_CODE (t) == STATIC_CHAIN_DECL);
+ }
+ 
+ /*  Return true if T is a GIMPLE condition.  */
+@@ -2851,6 +2857,7 @@
+   return (TREE_CODE (t) == VAR_DECL
+ 	  || TREE_CODE (t) == PARM_DECL
+ 	  || TREE_CODE (t) == RESULT_DECL
++	  || TREE_CODE (t) == STATIC_CHAIN_DECL
+ 	  || TREE_CODE (t) == SSA_NAME);
+ }
+ 
+--- a/src/gcc/gimple.h	2009-05-18 11:13:43.000000000 +0100
++++ b/src/gcc/gimple.h	2010-08-26 17:13:05.722133148 +0100
+@@ -65,7 +65,7 @@
+     const_gimple __gs = (GS);						\
+     if (gimple_code (__gs) != (CODE))					\
+       gimple_check_failed (__gs, __FILE__, __LINE__, __FUNCTION__,	\
+-	  		   (CODE), 0);					\
++	  		   (CODE), ERROR_MARK);				\
+   } while (0)
+ #else  /* not ENABLE_GIMPLE_CHECKING  */
+ #define GIMPLE_CHECK(GS, CODE)			(void)0
+@@ -2216,7 +2216,7 @@
+ gimple_cond_code (const_gimple gs)
+ {
+   GIMPLE_CHECK (gs, GIMPLE_COND);
+-  return gs->gsbase.subcode;
++  return (enum tree_code) gs->gsbase.subcode;
+ }
+ 
+ 
+--- a/src/gcc/gimplify.c	2010-04-08 12:47:13.000000000 +0100
++++ b/src/gcc/gimplify.c	2010-08-26 17:13:05.734134534 +0100
+@@ -6447,6 +6447,12 @@
+ 	    }
+ 	  break;
+ 
++	case STATIC_CHAIN_EXPR:
++	  /* The argument is used as information only.  No need to gimplify */
++	case STATIC_CHAIN_DECL:
++	  ret = GS_ALL_DONE;
++	  break;
++
+ 	case TREE_LIST:
+ 	  gcc_unreachable ();
+ 
+--- a/src/gcc/ipa-cp.c	2009-12-27 22:39:58.000000000 +0000
++++ b/src/gcc/ipa-cp.c	2010-08-26 17:13:05.738152434 +0100
+@@ -1393,7 +1393,7 @@
+   return flag_ipa_cp;
+ }
+ 
+-struct ipa_opt_pass pass_ipa_cp = 
++struct ipa_opt_pass_d pass_ipa_cp = 
+ {
+  {
+   IPA_PASS,
+--- a/src/gcc/ipa-inline.c	2010-02-08 14:10:15.000000000 +0000
++++ b/src/gcc/ipa-inline.c	2010-08-26 17:13:05.742147425 +0100
+@@ -1753,7 +1753,7 @@
+   return todo | execute_fixup_cfg ();
+ }
+ 
+-struct ipa_opt_pass pass_ipa_inline = 
++struct ipa_opt_pass_d pass_ipa_inline = 
+ {
+  {
+   IPA_PASS,
+--- a/src/gcc/ipa-pure-const.c	2008-09-18 18:28:40.000000000 +0100
++++ b/src/gcc/ipa-pure-const.c	2010-08-26 17:13:05.746146816 +0100
+@@ -910,7 +910,7 @@
+ 	  && !(errorcount || sorrycount));
+ }
+ 
+-struct ipa_opt_pass pass_ipa_pure_const =
++struct ipa_opt_pass_d pass_ipa_pure_const =
+ {
+  {
+   IPA_PASS,
+--- a/src/gcc/ipa-reference.c	2008-09-18 18:28:40.000000000 +0100
++++ b/src/gcc/ipa-reference.c	2010-08-26 17:13:05.746146816 +0100
+@@ -1257,7 +1257,7 @@
+ 	  && !(errorcount || sorrycount));
+ }
+ 
+-struct ipa_opt_pass pass_ipa_reference =
++struct ipa_opt_pass_d pass_ipa_reference =
+ {
+  {
+   IPA_PASS,
+--- a/src/gcc/passes.c	2009-02-20 15:20:38.000000000 +0000
++++ b/src/gcc/passes.c	2010-08-26 17:13:05.750140201 +0100
+@@ -1146,14 +1146,14 @@
+ static void
+ add_ipa_transform_pass (void *data)
+ {
+-  struct ipa_opt_pass *ipa_pass = (struct ipa_opt_pass *) data;
++  struct ipa_opt_pass_d *ipa_pass = (struct ipa_opt_pass_d *) data;
+   VEC_safe_push (ipa_opt_pass, heap, cfun->ipa_transforms_to_apply, ipa_pass);
+ }
+ 
+ /* Execute summary generation for all of the passes in IPA_PASS.  */
+ 
+ static void
+-execute_ipa_summary_passes (struct ipa_opt_pass *ipa_pass)
++execute_ipa_summary_passes (struct ipa_opt_pass_d *ipa_pass)
+ {
+   while (ipa_pass)
+     {
+@@ -1167,7 +1167,7 @@
+ 	  ipa_pass->generate_summary ();
+ 	  pass_fini_dump_file (pass);
+ 	}
+-      ipa_pass = (struct ipa_opt_pass *)ipa_pass->pass.next;
++      ipa_pass = (struct ipa_opt_pass_d *)ipa_pass->pass.next;
+     }
+ }
+ 
+@@ -1175,7 +1175,7 @@
+ 
+ static void
+ execute_one_ipa_transform_pass (struct cgraph_node *node,
+-				struct ipa_opt_pass *ipa_pass)
++				struct ipa_opt_pass_d *ipa_pass)
+ {
+   struct opt_pass *pass = &ipa_pass->pass;
+   unsigned int todo_after = 0;
+@@ -1347,7 +1347,7 @@
+ 	    {
+ 	      if (!quiet_flag && !cfun)
+ 		fprintf (stderr, " <summary generate>");
+-	      execute_ipa_summary_passes ((struct ipa_opt_pass *) pass);
++	      execute_ipa_summary_passes ((struct ipa_opt_pass_d *) pass);
+ 	    }
+ 	  summaries_generated = true;
+ 	}
+--- a/src/gcc/system.h	2008-07-28 15:33:56.000000000 +0100
++++ b/src/gcc/system.h	2010-08-26 17:13:05.754132398 +0100
+@@ -786,6 +786,9 @@
+    change after the fact).  Beyond these uses, most other cases of
+    using this macro should be viewed with extreme caution.  */
+ 
++#ifdef __cplusplus
++#define CONST_CAST2(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X))
++#else
+ #if defined(__GNUC__) && GCC_VERSION > 4000
+ /* GCC 4.0.x has a bug where it may ICE on this expression,
+    so does GCC 3.4.x (PR17436).  */
+@@ -793,6 +796,7 @@
+ #else
+ #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((TOTYPE)(FROMTYPE)(X))
+ #endif
++#endif
+ #define CONST_CAST(TYPE,X) CONST_CAST2(TYPE, const TYPE, (X))
+ #define CONST_CAST_TREE(X) CONST_CAST(union tree_node *, (X))
+ #define CONST_CAST_RTX(X) CONST_CAST(struct rtx_def *, (X))
+--- a/src/gcc/tree.def	2009-02-20 15:20:38.000000000 +0000
++++ b/src/gcc/tree.def	2010-08-26 17:13:05.758136609 +0100
+@@ -554,6 +554,13 @@
+    arguments to the call.  */
+ DEFTREECODE (CALL_EXPR, "call_expr", tcc_vl_exp, 3)
+ 
++/* Operand 0 is the FUNC_DECL of the outer function for
++   which the static chain is to be computed. */
++DEFTREECODE (STATIC_CHAIN_EXPR, "static_chain_expr", tcc_expression, 1)
++    
++/* Represents a function's static chain.  It can be used as an lvalue. */
++DEFTREECODE (STATIC_CHAIN_DECL, "static_chain_decl", tcc_expression, 0)
++
+ /* Specify a value to compute along with its corresponding cleanup.
+    Operand 0 is the cleanup expression.
+    The cleanup is executed by the first enclosing CLEANUP_POINT_EXPR,
+--- a/src/gcc/tree-dump.c	2008-08-06 16:57:09.000000000 +0100
++++ b/src/gcc/tree-dump.c	2010-08-26 17:13:05.770134642 +0100
+@@ -639,6 +639,10 @@
+       }
+       break;
+ 
++    case STATIC_CHAIN_EXPR:
++      dump_child ("func", TREE_OPERAND (t, 0));
++      break;
++
+     case CONSTRUCTOR:
+       {
+ 	unsigned HOST_WIDE_INT cnt;
+--- a/src/gcc/tree-nested.c	2010-04-20 09:37:12.000000000 +0100
++++ b/src/gcc/tree-nested.c	2010-08-26 17:13:05.774146186 +0100
+@@ -714,6 +714,8 @@
+ 
+   if (info->context == target_context)
+     {
++      /* might be doing something wrong to need the following line.. */
++      get_frame_type (info);
+       x = build_addr (info->frame_decl, target_context);
+     }
+   else
+@@ -1761,6 +1763,10 @@
+       if (DECL_NO_STATIC_CHAIN (decl))
+ 	break;
+ 
++      /* Don't use a trampoline for a static reference. */
++      if (TREE_STATIC (t))
++	break;
++
+       /* If we don't want a trampoline, then don't build one.  */
+       if (TREE_NO_TRAMPOLINE (t))
+ 	break;
+@@ -1908,6 +1914,25 @@
+       walk_body (convert_gimple_call, NULL, info, gimple_omp_body (stmt));
+       break;
+ 
++    case GIMPLE_ASSIGN:
++      /* Deal with static_chain_decl */
++      decl = gimple_op(stmt, 0);
++      if (TREE_CODE (decl) == STATIC_CHAIN_DECL)
++	{
++	  tree chain = get_chain_decl (info);
++	  gimple_assign_set_lhs (stmt, chain);
++	  break;
++	}
++      /* Deal with static_chain_expr */
++      decl = gimple_op(stmt, 1);
++      if (TREE_CODE (decl) == STATIC_CHAIN_EXPR)
++	{
++	  tree chain = get_static_chain (info, TREE_OPERAND (decl, 0), &wi->gsi);
++	  gimple_assign_set_rhs1 (stmt, chain);
++	  break;
++	}
++      /* FALLTHRU */
++
+     default:
+       /* Keep looking for other operands.  */
+       *handled_ops_p = false;
+@@ -2054,8 +2079,38 @@
+       gimple bind;
+       annotate_all_with_location (stmt_list, DECL_SOURCE_LOCATION (context));
+       bind = gimple_seq_first_stmt (gimple_body (context));
+-      gimple_seq_add_seq (&stmt_list, gimple_bind_body (bind));
+-      gimple_bind_set_body (bind, stmt_list);
++
++      if (DECL_STRUCT_FUNCTION (root->context)->custom_static_chain)
++	{
++	  /* This chicanery is needed to make sure the GIMPLE initialization
++	     statements are in the right order
++
++	     CHAIN.3 = D.1614;
++	     FRAME.0.__chain = CHAIN.3;
++	     FRAME.0.m = m;
++	   */
++	  gimple_stmt_iterator gsi =
++	      gsi_start (gimple_bind_body (bind));
++	  int found = 0;
++	  while (!gsi_end_p (gsi))
++	    {
++	      gimple g = gsi_stmt (gsi);
++	      if (gimple_code (g) == GIMPLE_ASSIGN &&
++		  gimple_op (g, 0) == root->chain_decl)
++		{
++		  gsi_insert_seq_after (& gsi, stmt_list, GSI_SAME_STMT);
++		  found = 1;
++		  break;
++		}
++	      gsi_next (& gsi);
++	    }
++	  gcc_assert (found);
++	}
++      else
++	{
++	  gimple_seq_add_seq (&stmt_list, gimple_bind_body (bind));
++	  gimple_bind_set_body (bind, stmt_list);
++	}
+     }
+ 
+   /* If a chain_decl was created, then it needs to be registered with
+--- a/src/gcc/tree-pass.h	2009-02-20 15:20:38.000000000 +0000
++++ b/src/gcc/tree-pass.h	2010-08-26 17:13:05.774146186 +0100
+@@ -157,7 +157,7 @@
+ 
+ /* Description of IPA pass with generate summary, write, execute, read and
+    transform stages.  */
+-struct ipa_opt_pass
++struct ipa_opt_pass_d
+ {
+   struct opt_pass pass;
+ 
+@@ -390,10 +390,10 @@
+ extern struct gimple_opt_pass pass_reset_cc_flags;
+ 
+ /* IPA Passes */
+-extern struct ipa_opt_pass pass_ipa_inline;
+-extern struct ipa_opt_pass pass_ipa_cp;
+-extern struct ipa_opt_pass pass_ipa_reference;
+-extern struct ipa_opt_pass pass_ipa_pure_const;
++extern struct ipa_opt_pass_d pass_ipa_inline;
++extern struct ipa_opt_pass_d pass_ipa_cp;
++extern struct ipa_opt_pass_d pass_ipa_reference;
++extern struct ipa_opt_pass_d pass_ipa_pure_const;
+ 
+ extern struct simple_ipa_opt_pass pass_ipa_matrix_reorg;
+ extern struct simple_ipa_opt_pass pass_ipa_early_inline;
+--- a/src/gcc/tree-pretty-print.c	2009-02-18 21:03:05.000000000 +0000
++++ b/src/gcc/tree-pretty-print.c	2010-08-26 17:13:05.778131469 +0100
+@@ -1216,6 +1216,16 @@
+ 	pp_string (buffer, " [tail call]");
+       break;
+ 
++    case STATIC_CHAIN_EXPR:
++      pp_string (buffer, "<<static chain of ");
++      dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
++      pp_string (buffer, ">>");
++      break;
++
++    case STATIC_CHAIN_DECL:
++      pp_string (buffer, "<<static chain decl>>");
++      break;
++
+     case WITH_CLEANUP_EXPR:
+       NIY;
+       break;
+--- a/src/gcc/tree-sra.c	2010-04-18 16:56:32.000000000 +0100
++++ b/src/gcc/tree-sra.c	2010-08-26 17:13:05.786133185 +0100
+@@ -263,6 +263,8 @@
+     case RECORD_TYPE:
+       {
+ 	bool saw_one_field = false;
++	tree last_offset = size_zero_node;
++	tree cmp;
+ 
+ 	for (t = TYPE_FIELDS (type); t ; t = TREE_CHAIN (t))
+ 	  if (TREE_CODE (t) == FIELD_DECL)
+@@ -274,6 +276,12 @@
+ 		      != TYPE_PRECISION (TREE_TYPE (t))))
+ 		goto fail;
+ 
++	      /* Reject aliased fields created by GDC for anonymous unions. */
++	      cmp = fold_binary_to_constant (LE_EXPR, boolean_type_node,
++					     DECL_FIELD_OFFSET (t), last_offset);
++	      if (cmp == NULL_TREE || tree_expr_nonzero_p (cmp))
++		goto fail;
++
+ 	      saw_one_field = true;
+ 	    }
+ 
+--- a/src/gcc/tree-ssa.c	2009-08-03 20:27:32.000000000 +0100
++++ b/src/gcc/tree-ssa.c	2010-08-26 17:13:05.790130062 +0100
+@@ -1094,8 +1094,10 @@
+       && TYPE_CANONICAL (inner_type) == TYPE_CANONICAL (outer_type))
+     return true;
+ 
+-  /* Changes in machine mode are never useless conversions.  */
+-  if (TYPE_MODE (inner_type) != TYPE_MODE (outer_type))
++  /* Changes in machine mode are never useless conversions unless we
++     deal with aggregate types in which case we defer to later checks.  */
++  if (TYPE_MODE (inner_type) != TYPE_MODE (outer_type)
++      && !AGGREGATE_TYPE_P (inner_type))
+     return false;
+ 
+   /* If both the inner and outer types are integral types, then the
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libjava-sjlj.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libjava-sjlj.diff
@@ -0,0 +1,38 @@
+# DP: Don't try to use _Unwind_Backtrace on SJLJ targets.
+# DP: See bug #387875, #388505, GCC PR 29206.
+
+---
+ libjava/sysdep/generic/backtrace.h |   17 +++++++++++++++++
+ 1 files changed, 17 insertions(+), 0 deletions(-)
+
+--- a/src/libjava/sysdep/generic/backtrace.h
++++ b/src/libjava/sysdep/generic/backtrace.h
+@@ -13,6 +13,20 @@ details.  */
+ 
+ #include <java-stack.h>
+ 
++#ifdef SJLJ_EXCEPTIONS
++
++#undef _Unwind_GetIPInfo
++#define _Unwind_GetIPInfo(ctx,ip_before_insn) \
++  (abort (), (void) (ctx), *ip_before_insn = 1, 0)
++
++#undef _Unwind_GetRegionStart
++#define _Unwind_GetRegionStart(ctx) \
++  (abort (), (void) (ctx), 0)
++
++#undef _Unwind_Backtrace
++#define _Unwind_Backtrace(trace_fn,state_ptr) \
++  (fallback_backtrace (trace_fn, state_ptr))
++
+ /* Unwind through the call stack calling TRACE_FN with STATE for every stack
+    frame.  Returns the reason why the unwinding was stopped.  */
+ _Unwind_Reason_Code
+@@ -20,4 +34,7 @@ fallback_backtrace (_Unwind_Trace_Fn, _Jv_UnwindState *)
+ {
+   return _URC_NO_REASON;
+ }
++
++#endif /* SJLJ_EXCEPTIONS */
++
+ #endif
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/mudflap-nocheck.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/mudflap-nocheck.diff
@@ -0,0 +1,17 @@
+# DP: Disable running the libmudflap testsuite. Getting killed on alpha.
+
+---
+ libmudflap/testsuite/Makefile.in |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+--- a/src/libmudflap/testsuite/Makefile.in
++++ b/src/libmudflap/testsuite/Makefile.in
+@@ -246,6 +246,8 @@ CTAGS:
+ 
+ 
+ check-DEJAGNU: site.exp
++	@echo target $@ disabled for Debian build.
++check-DEJAGNU-disabled: site.exp
+ 	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
+ 	EXPECT=$(EXPECT); export EXPECT; \
+ 	runtest=$(RUNTEST); \
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-default-relro.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-default-relro.diff
@@ -0,0 +1,29 @@
+# DP: Turn on -Wl,-z,relro by default.
+
+---
+ gcc/doc/invoke.texi |    3 +++
+ gcc/gcc.c           |    1 +
+ 2 files changed, 4 insertions(+), 0 deletions(-)
+
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -8082,6 +8082,9 @@ For example, @samp{-Wl,-Map,output.map} passes @samp{-Map output.map} to the
+ linker.  When using the GNU linker, you can also get the same effect with
+ @samp{-Wl,-Map=output.map}.
+ 
++NOTE: In Ubuntu 8.10 and later versions, for LDFLAGS, the option
++@option{-Wl,-z,relro} is used.  To disable, use @option{-Wl,-z,norelro}.
++
+ @item -u @var{symbol}
+ @opindex u
+ Pretend the symbol @var{symbol} is undefined, to force linking of
+--- a/src/gcc/gcc.c~	2010-03-21 09:32:25.000000000 +0100
++++ b/src/gcc/gcc.c	2010-03-21 09:34:26.434838978 +0100
+@@ -749,6 +749,7 @@
+     %{fuse-ld=gold:-use-gold} \
+     %{fuse-ld=bfd:-use-ld}" \
+     "%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
++    -z relro\
+     %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
+     %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
+     %{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)} %(mflib)\
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-linaro-doc.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-linaro-doc.diff
@@ -0,0 +1,1617 @@
+# DP: Changes for the Linaro 4.4-2011.01-0 release (documentation).
+
+--- a/src/INSTALL/configure.html
++++ b/src/INSTALL/configure.html
+@@ -423,6 +423,46 @@
+ 
+      </dl>
+ 
++     <br><dt><code>--with-multilib-list=</code><var>list</var><dt><code>--without-multilib-list</code><dd>Specify what multilibs to build. 
++Currently only implemented for sh*-*-*.
++
++     <p><var>list</var> is a comma separated list of CPU names.  These must be of the
++form <code>sh*</code> or <code>m*</code> (in which case they match the compiler option
++for that processor).  The list should not contain any endian options -
++these are handled by <samp><span class="option">--with-endian</span></samp>.
++
++     <p>If <var>list</var> is empty, then there will be no multilibs for extra
++processors.  The multilib for the secondary endian remains enabled.
++
++     <p>As a special case, if an entry in the list starts with a <code>!</code>
++(exclamation point), then it is added to the list of excluded multilibs. 
++Entries of this sort should be compatible with &lsquo;<samp><span class="samp">MULTILIB_EXCLUDES</span></samp>&rsquo;
++(once the leading <code>!</code> has been stripped).
++
++     <p>If <samp><span class="option">--with-multilib-list</span></samp> is not given, then a default set of
++multilibs is selected based on the value of <samp><span class="option">--target</span></samp>.  This is
++usually the complete set of libraries, but some targets imply a more
++specialized subset.
++
++     <p>Example 1: to configure a compiler for SH4A only, but supporting both
++endians, with little endian being the default:
++     <pre class="smallexample">          --with-cpu=sh4a --with-endian=little,big --with-multilib-list=
++</pre>
++     <p>Example 2: to configure a compiler for both SH4A and SH4AL-DSP, but with
++only little endian SH4AL:
++     <pre class="smallexample">          --with-cpu=sh4a --with-endian=little,big --with-multilib-list=sh4al,!mb/m4al
++</pre>
++     <br><dt><code>--with-endian=</code><var>endians</var><dd>Specify what endians to use. 
++Currently only implemented for sh*-*-*.
++
++     <p><var>endians</var> may be one of the following:
++          <dl>
++<dt><code>big</code><dd>Use big endian exclusively. 
++<br><dt><code>little</code><dd>Use little endian exclusively. 
++<br><dt><code>big,little</code><dd>Use big endian by default.  Provide a multilib for little endian. 
++<br><dt><code>little,big</code><dd>Use little endian by default.  Provide a multilib for big endian. 
++</dl>
++
+      <br><dt><code>--enable-threads</code><dd>Specify that the target
+ supports threads.  This affects the Objective-C compiler and runtime
+ library, and exception handling for other languages like C++ and Java. 
+@@ -764,6 +804,9 @@
+ 128-bit <code>long double</code> when built against GNU C Library 2.4 and later,
+ 64-bit <code>long double</code> otherwise.
+ 
++     <br><dt><code>--enable-fdpic</code><dd>On SH uClinux systems, generate ELF FDPIC code rather than code
++expected to be postprocessed into the FLT binary format.
++
+      <br><dt><code>--with-gmp=</code><var>pathname</var><dt><code>--with-gmp-include=</code><var>pathname</var><dt><code>--with-gmp-lib=</code><var>pathname</var><dt><code>--with-mpfr=</code><var>pathname</var><dt><code>--with-mpfr-include=</code><var>pathname</var><dt><code>--with-mpfr-lib=</code><var>pathname</var><dd>If you do not have GMP (the GNU Multiple Precision library) and the
+ MPFR Libraries installed in a standard location and you want to build
+ GCC, you can explicitly specify the directory where they are installed
+--- a/src/gcc/doc/arm-neon-intrinsics.texi
++++ b/src/gcc/doc/arm-neon-intrinsics.texi
+@@ -43,20 +43,18 @@
+ 
+ 
+ @itemize @bullet
+-@item uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)
+-@*@emph{Form of expected instruction(s):} @code{vadd.i64 @var{d0}, @var{d0}, @var{d0}}
++@item float32x2_t vadd_f32 (float32x2_t, float32x2_t)
++@*@emph{Form of expected instruction(s):} @code{vadd.f32 @var{d0}, @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+-@item int64x1_t vadd_s64 (int64x1_t, int64x1_t)
+-@*@emph{Form of expected instruction(s):} @code{vadd.i64 @var{d0}, @var{d0}, @var{d0}}
++@item uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)
+ @end itemize
+ 
+ 
+ @itemize @bullet
+-@item float32x2_t vadd_f32 (float32x2_t, float32x2_t)
+-@*@emph{Form of expected instruction(s):} @code{vadd.f32 @var{d0}, @var{d0}, @var{d0}}
++@item int64x1_t vadd_s64 (int64x1_t, int64x1_t)
+ @end itemize
+ 
+ 
+@@ -1013,20 +1011,18 @@
+ 
+ 
+ @itemize @bullet
+-@item uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)
+-@*@emph{Form of expected instruction(s):} @code{vsub.i64 @var{d0}, @var{d0}, @var{d0}}
++@item float32x2_t vsub_f32 (float32x2_t, float32x2_t)
++@*@emph{Form of expected instruction(s):} @code{vsub.f32 @var{d0}, @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+-@item int64x1_t vsub_s64 (int64x1_t, int64x1_t)
+-@*@emph{Form of expected instruction(s):} @code{vsub.i64 @var{d0}, @var{d0}, @var{d0}}
++@item uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)
+ @end itemize
+ 
+ 
+ @itemize @bullet
+-@item float32x2_t vsub_f32 (float32x2_t, float32x2_t)
+-@*@emph{Form of expected instruction(s):} @code{vsub.f32 @var{d0}, @var{d0}, @var{d0}}
++@item int64x1_t vsub_s64 (int64x1_t, int64x1_t)
+ @end itemize
+ 
+ 
+@@ -4696,7 +4692,7 @@
+ 
+ @itemize @bullet
+ @item uint32_t vget_lane_u32 (uint32x2_t, const int)
+-@*@emph{Form of expected instruction(s):} @code{vmov.u32 @var{r0}, @var{d0}[@var{0}]}
++@*@emph{Form of expected instruction(s):} @code{vmov.32 @var{r0}, @var{d0}[@var{0}]}
+ @end itemize
+ 
+ 
+@@ -4714,7 +4710,7 @@
+ 
+ @itemize @bullet
+ @item int32_t vget_lane_s32 (int32x2_t, const int)
+-@*@emph{Form of expected instruction(s):} @code{vmov.s32 @var{r0}, @var{d0}[@var{0}]}
++@*@emph{Form of expected instruction(s):} @code{vmov.32 @var{r0}, @var{d0}[@var{0}]}
+ @end itemize
+ 
+ 
+@@ -4732,7 +4728,7 @@
+ 
+ @itemize @bullet
+ @item float32_t vget_lane_f32 (float32x2_t, const int)
+-@*@emph{Form of expected instruction(s):} @code{vmov.f32 @var{r0}, @var{d0}[@var{0}]}
++@*@emph{Form of expected instruction(s):} @code{vmov.32 @var{r0}, @var{d0}[@var{0}]}
+ @end itemize
+ 
+ 
+@@ -4750,19 +4746,17 @@
+ 
+ @itemize @bullet
+ @item uint64_t vget_lane_u64 (uint64x1_t, const int)
+-@*@emph{Form of expected instruction(s):} @code{vmov @var{r0}, @var{r0}, @var{d0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+ @item int64_t vget_lane_s64 (int64x1_t, const int)
+-@*@emph{Form of expected instruction(s):} @code{vmov @var{r0}, @var{r0}, @var{d0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+ @item uint32_t vgetq_lane_u32 (uint32x4_t, const int)
+-@*@emph{Form of expected instruction(s):} @code{vmov.u32 @var{r0}, @var{d0}[@var{0}]}
++@*@emph{Form of expected instruction(s):} @code{vmov.32 @var{r0}, @var{d0}[@var{0}]}
+ @end itemize
+ 
+ 
+@@ -4780,7 +4774,7 @@
+ 
+ @itemize @bullet
+ @item int32_t vgetq_lane_s32 (int32x4_t, const int)
+-@*@emph{Form of expected instruction(s):} @code{vmov.s32 @var{r0}, @var{d0}[@var{0}]}
++@*@emph{Form of expected instruction(s):} @code{vmov.32 @var{r0}, @var{d0}[@var{0}]}
+ @end itemize
+ 
+ 
+@@ -4798,7 +4792,7 @@
+ 
+ @itemize @bullet
+ @item float32_t vgetq_lane_f32 (float32x4_t, const int)
+-@*@emph{Form of expected instruction(s):} @code{vmov.f32 @var{r0}, @var{d0}[@var{0}]}
++@*@emph{Form of expected instruction(s):} @code{vmov.32 @var{r0}, @var{d0}[@var{0}]}
+ @end itemize
+ 
+ 
+@@ -4886,13 +4880,11 @@
+ 
+ @itemize @bullet
+ @item uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int)
+-@*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{r0}, @var{r0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+ @item int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int)
+-@*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{r0}, @var{r0}}
+ @end itemize
+ 
+ 
+@@ -5081,13 +5073,11 @@
+ 
+ @itemize @bullet
+ @item uint64x1_t vdup_n_u64 (uint64_t)
+-@*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{r0}, @var{r0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+ @item int64x1_t vdup_n_s64 (int64_t)
+-@*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{r0}, @var{r0}}
+ @end itemize
+ 
+ 
+@@ -5147,13 +5137,11 @@
+ 
+ @itemize @bullet
+ @item uint64x2_t vdupq_n_u64 (uint64_t)
+-@*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{r0}, @var{r0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+ @item int64x2_t vdupq_n_s64 (int64_t)
+-@*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{r0}, @var{r0}}
+ @end itemize
+ 
+ 
+@@ -5213,13 +5201,11 @@
+ 
+ @itemize @bullet
+ @item uint64x1_t vmov_n_u64 (uint64_t)
+-@*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{r0}, @var{r0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+ @item int64x1_t vmov_n_s64 (int64_t)
+-@*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{r0}, @var{r0}}
+ @end itemize
+ 
+ 
+@@ -5279,13 +5265,11 @@
+ 
+ @itemize @bullet
+ @item uint64x2_t vmovq_n_u64 (uint64_t)
+-@*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{r0}, @var{r0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+ @item int64x2_t vmovq_n_s64 (int64_t)
+-@*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{r0}, @var{r0}}
+ @end itemize
+ 
+ 
+@@ -5572,32 +5556,30 @@
+ 
+ 
+ @itemize @bullet
+-@item uint64x1_t vget_low_u64 (uint64x2_t)
++@item float32x2_t vget_low_f32 (float32x4_t)
+ @*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+-@item int64x1_t vget_low_s64 (int64x2_t)
++@item poly16x4_t vget_low_p16 (poly16x8_t)
+ @*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+-@item float32x2_t vget_low_f32 (float32x4_t)
++@item poly8x8_t vget_low_p8 (poly8x16_t)
+ @*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+-@item poly16x4_t vget_low_p16 (poly16x8_t)
+-@*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{d0}}
++@item uint64x1_t vget_low_u64 (uint64x2_t)
+ @end itemize
+ 
+ 
+ @itemize @bullet
+-@item poly8x8_t vget_low_p8 (poly8x16_t)
+-@*@emph{Form of expected instruction(s):} @code{vmov @var{d0}, @var{d0}}
++@item int64x1_t vget_low_s64 (int64x2_t)
+ @end itemize
+ 
+ 
+@@ -9727,13 +9709,11 @@
+ 
+ @itemize @bullet
+ @item uint64x1_t vand_u64 (uint64x1_t, uint64x1_t)
+-@*@emph{Form of expected instruction(s):} @code{vand @var{d0}, @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+ @item int64x1_t vand_s64 (int64x1_t, int64x1_t)
+-@*@emph{Form of expected instruction(s):} @code{vand @var{d0}, @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+@@ -9827,13 +9807,11 @@
+ 
+ @itemize @bullet
+ @item uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t)
+-@*@emph{Form of expected instruction(s):} @code{vorr @var{d0}, @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+ @item int64x1_t vorr_s64 (int64x1_t, int64x1_t)
+-@*@emph{Form of expected instruction(s):} @code{vorr @var{d0}, @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+@@ -9927,13 +9905,11 @@
+ 
+ @itemize @bullet
+ @item uint64x1_t veor_u64 (uint64x1_t, uint64x1_t)
+-@*@emph{Form of expected instruction(s):} @code{veor @var{d0}, @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+ @item int64x1_t veor_s64 (int64x1_t, int64x1_t)
+-@*@emph{Form of expected instruction(s):} @code{veor @var{d0}, @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+@@ -10027,13 +10003,11 @@
+ 
+ @itemize @bullet
+ @item uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t)
+-@*@emph{Form of expected instruction(s):} @code{vbic @var{d0}, @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+ @item int64x1_t vbic_s64 (int64x1_t, int64x1_t)
+-@*@emph{Form of expected instruction(s):} @code{vbic @var{d0}, @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+@@ -10127,13 +10101,11 @@
+ 
+ @itemize @bullet
+ @item uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t)
+-@*@emph{Form of expected instruction(s):} @code{vorn @var{d0}, @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+ @itemize @bullet
+ @item int64x1_t vorn_s64 (int64x1_t, int64x1_t)
+-@*@emph{Form of expected instruction(s):} @code{vorn @var{d0}, @var{d0}, @var{d0}}
+ @end itemize
+ 
+ 
+--- a/src/gcc/doc/extend.texi
++++ b/src/gcc/doc/extend.texi
+@@ -35,6 +35,7 @@
+ * Long Long::           Double-word integers---@code{long long int}.
+ * Complex::             Data types for complex numbers.
+ * Floating Types::      Additional Floating Types.
++* Half-Precision::      Half-Precision Floating Point.
+ * Decimal Float::       Decimal Floating Types. 
+ * Hex Floats::          Hexadecimal floating-point constants.
+ * Fixed-Point::         Fixed-Point Types.
+@@ -916,6 +917,56 @@
+ Not all targets support additional floating point types.  @code{__float80}
+ and @code{__float128} types are supported on i386, x86_64 and ia64 targets.
+ 
++@node Half-Precision
++@section Half-Precision Floating Point
++@cindex half-precision floating point
++@cindex @code{__fp16} data type
++
++On ARM targets, GCC supports half-precision (16-bit) floating point via
++the @code{__fp16} type.  You must enable this type explicitly 
++with the @option{-mfp16-format} command-line option in order to use it.
++
++ARM supports two incompatible representations for half-precision
++floating-point values.  You must choose one of the representations and
++use it consistently in your program.
++
++Specifying @option{-mfp16-format=ieee} selects the IEEE 754-2008 format.
++This format can represent normalized values in the range of @math{2^{-14}} to 65504.
++There are 11 bits of significand precision, approximately 3
++decimal digits.
++
++Specifying @option{-mfp16-format=alternative} selects the ARM
++alternative format.  This representation is similar to the IEEE
++format, but does not support infinities or NaNs.  Instead, the range
++of exponents is extended, so that this format can represent normalized
++values in the range of @math{2^{-14}} to 131008.
++
++The @code{__fp16} type is a storage format only.  For purposes
++of arithmetic and other operations, @code{__fp16} values in C or C++
++expressions are automatically promoted to @code{float}.  In addition,
++you cannot declare a function with a return value or parameters 
++of type @code{__fp16}.
++
++Note that conversions from @code{double} to @code{__fp16}
++involve an intermediate conversion to @code{float}.  Because
++of rounding, this can sometimes produce a different result than a
++direct conversion.
++
++ARM provides hardware support for conversions between 
++@code{__fp16} and @code{float} values
++as an extension to VFP and NEON (Advanced SIMD).  GCC generates
++code using these hardware instructions if you compile with
++options to select an FPU that provides them; 
++for example, @option{-mfpu=neon-fp16 -mfloat-abi=softfp},
++in addition to the @option{-mfp16-format} option to select
++a half-precision format.  
++
++Language-level support for the @code{__fp16} data type is
++independent of whether GCC generates code using hardware floating-point
++instructions.  In cases where hardware support is not specified, GCC
++implements conversions between @code{__fp16} and @code{float} values
++as library calls.
++
+ @node Decimal Float
+ @section Decimal Floating Types
+ @cindex decimal floating types
+@@ -2397,7 +2448,7 @@
+ 
+ @item interrupt
+ @cindex interrupt handler functions
+-Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k,
++Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, MIPS
+ and Xstormy16 ports to indicate that the specified function is an
+ interrupt handler.  The compiler will generate function entry and exit
+ sequences suitable for use in an interrupt handler when this attribute
+@@ -2420,6 +2471,42 @@
+ On ARMv7-M the interrupt type is ignored, and the attribute means the function
+ may be called with a word aligned stack pointer.
+ 
++On MIPS targets, you can use the following attributes to modify the behavior
++of an interrupt handler:
++@table @code
++@item use_shadow_register_set
++@cindex @code{use_shadow_register_set} attribute
++Assume that the handler uses a shadow register set, instead of
++the main general-purpose registers.
++
++@item keep_interrupts_masked
++@cindex @code{keep_interrupts_masked} attribute
++Keep interrupts masked for the whole function.  Without this attribute,
++GCC tries to reenable interrupts for as much of the function as it can.
++
++@item use_debug_exception_return
++@cindex @code{use_debug_exception_return} attribute
++Return using the @code{deret} instruction.  Interrupt handlers that don't
++have this attribute return using @code{eret} instead.
++@end table
++
++You can use any combination of these attributes, as shown below:
++@smallexample
++void __attribute__ ((interrupt)) v0 ();
++void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
++void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
++void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
++void __attribute__ ((interrupt, use_shadow_register_set,
++		     keep_interrupts_masked)) v4 ();
++void __attribute__ ((interrupt, use_shadow_register_set,
++		     use_debug_exception_return)) v5 ();
++void __attribute__ ((interrupt, keep_interrupts_masked,
++		     use_debug_exception_return)) v6 ();
++void __attribute__ ((interrupt, use_shadow_register_set,
++		     keep_interrupts_masked,
++		     use_debug_exception_return)) v7 ();
++@end smallexample
++
+ @item interrupt_handler
+ @cindex interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors
+ Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, and SH to
+@@ -2518,6 +2605,25 @@
+ may interact badly with some GCC extensions such as @code{__builtin_apply}
+ (@pxref{Constructing Calls}).
+ 
++@item micromips/nomicromips
++@cindex @code{micromips} attribute
++@cindex @code{nomicromips} attribute
++
++On MIPS targets, you can use the @code{micromips} and @code{nomicromips}
++function attributes to locally select or turn off microMIPS code generation.
++A function with the @code{micromips} attribute is emitted as microMIPS code,
++while microMIPS code generation is disabled for functions with the
++@code{nomicromips} attribute.  These attributes override the
++@option{-mmicromips} and @option{-mno-micromips} options on the command line
++(@pxref{MIPS Options}).
++
++When compiling files containing mixed microMIPS and non-microMIPS code, the
++preprocessor symbol @code{__mips_micromips} reflects the setting on the
++command line,
++not that within individual functions.  Mixed microMIPS and non-microMIPS code
++may interact badly with some GCC extensions such as @code{__builtin_apply}
++(@pxref{Constructing Calls}).
++
+ @item model (@var{model-name})
+ @cindex function addressability on the M32R/D
+ @cindex variable addressability on the IA-64
+--- a/src/gcc/doc/fragments.texi
++++ b/src/gcc/doc/fragments.texi
+@@ -143,6 +143,22 @@
+ *mthumb/*mhard-float*
+ @end smallexample
+ 
++@findex MULTILIB_ALIASES
++@item MULTILIB_ALIASES
++Sometimes it is desirable to support a large set of multilib options, but
++only build libraries for a subset of those multilibs.  The remaining
++combinations use a sutiable alternative multilb.  In that case, set
++@code{MULTILIB_ALIASES} to a list of the form @samp{realname=aliasname}.
++
++For example, consider a little-endian ARM toolchain with big-endian and
++Thumb multilibs.  If a big-endian Thumb multilib is not wanted, then
++setting @code{MULTILIB_ALIASES} to @samp{mbig-endian=mbig-endian/mthumb} 
++makes this combination use the big-endian ARM libraries instead.
++
++If the multilib is instead excluded by setting @code{MULTILIB_EXCEPTIONS}
++then big-endian Thumb code uses the default multilib as none of the
++remaining multilibs match.
++
+ @findex MULTILIB_EXTRA_OPTS
+ @item MULTILIB_EXTRA_OPTS
+ Sometimes it is desirable that when building multiple versions of
+--- a/src/gcc/doc/install.texi
++++ b/src/gcc/doc/install.texi
+@@ -988,6 +988,57 @@
+ 
+ @end table
+ 
++@item --with-multilib-list=@var{list}
++@itemx --without-multilib-list
++Specify what multilibs to build.
++Currently only implemented for sh*-*-*.
++
++@var{list} is a comma separated list of CPU names.  These must be of the
++form @code{sh*} or @code{m*} (in which case they match the compiler option
++for that processor).  The list should not contain any endian options -
++these are handled by @option{--with-endian}.
++
++If @var{list} is empty, then there will be no multilibs for extra
++processors.  The multilib for the secondary endian remains enabled.
++
++As a special case, if an entry in the list starts with a @code{!}
++(exclamation point), then it is added to the list of excluded multilibs.
++Entries of this sort should be compatible with @samp{MULTILIB_EXCLUDES}
++(once the leading @code{!} has been stripped).
++
++If @option{--with-multilib-list} is not given, then a default set of
++multilibs is selected based on the value of @option{--target}.  This is
++usually the complete set of libraries, but some targets imply a more
++specialized subset.
++
++Example 1: to configure a compiler for SH4A only, but supporting both
++endians, with little endian being the default:
++@smallexample
++--with-cpu=sh4a --with-endian=little,big --with-multilib-list=
++@end smallexample
++
++Example 2: to configure a compiler for both SH4A and SH4AL-DSP, but with
++only little endian SH4AL:
++@smallexample
++--with-cpu=sh4a --with-endian=little,big --with-multilib-list=sh4al,!mb/m4al
++@end smallexample
++
++@item --with-endian=@var{endians}
++Specify what endians to use.
++Currently only implemented for sh*-*-*.
++
++@var{endians} may be one of the following:
++@table @code
++@item big
++Use big endian exclusively.
++@item little
++Use little endian exclusively.
++@item big,little
++Use big endian by default.  Provide a multilib for little endian.
++@item little,big
++Use little endian by default.  Provide a multilib for big endian.
++@end table
++
+ @item --enable-threads
+ Specify that the target
+ supports threads.  This affects the Objective-C compiler and runtime
+@@ -1436,6 +1487,10 @@
+ 128-bit @code{long double} when built against GNU C Library 2.4 and later,
+ 64-bit @code{long double} otherwise.
+ 
++@item --enable-fdpic
++On SH uClinux systems, generate ELF FDPIC code rather than code
++expected to be postprocessed into the FLT binary format.
++
+ @item --with-gmp=@var{pathname}
+ @itemx --with-gmp-include=@var{pathname}
+ @itemx --with-gmp-lib=@var{pathname}
+--- a/src/gcc/doc/invoke.texi
++++ b/src/gcc/doc/invoke.texi
+@@ -251,6 +251,7 @@
+ -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded @gol
+ -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format @gol
+ -Wpointer-arith  -Wno-pointer-to-int-cast @gol
++-Wno-poison-system-directories @gol
+ -Wredundant-decls @gol
+ -Wreturn-type  -Wsequence-point  -Wshadow @gol
+ -Wsign-compare  -Wsign-conversion  -Wstack-protector @gol
+@@ -321,7 +322,7 @@
+ @item Optimization Options
+ @xref{Optimize Options,,Options that Control Optimization}.
+ @gccoptlist{
+--falign-functions[=@var{n}] -falign-jumps[=@var{n}] @gol
++-falign-arrays -falign-functions[=@var{n}] -falign-jumps[=@var{n}] @gol
+ -falign-labels[=@var{n}] -falign-loops[=@var{n}] -fassociative-math @gol
+ -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize @gol
+ -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves @gol
+@@ -438,8 +439,11 @@
+ -msched-prolog  -mno-sched-prolog @gol
+ -mlittle-endian  -mbig-endian  -mwords-little-endian @gol
+ -mfloat-abi=@var{name}  -msoft-float  -mhard-float  -mfpe @gol
++-mfp16-format=@var{name}
+ -mthumb-interwork  -mno-thumb-interwork @gol
++-mfix-janus-2cc @gol
+ -mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
++-mmarvell-div @gol
+ -mstructure-size-boundary=@var{n} @gol
+ -mabort-on-noreturn @gol
+ -mlong-calls  -mno-long-calls @gol
+@@ -452,6 +456,7 @@
+ -mtpcs-frame  -mtpcs-leaf-frame @gol
+ -mcaller-super-interworking  -mcallee-super-interworking @gol
+ -mtp=@var{name} @gol
++-mlow-irq-latency @gol
+ -mword-relocations @gol
+ -mfix-cortex-m3-ldrd}
+ 
+@@ -574,7 +579,7 @@
+ -mno-wide-multiply  -mrtd  -malign-double @gol
+ -mpreferred-stack-boundary=@var{num}
+ -mincoming-stack-boundary=@var{num}
+--mcld -mcx16 -msahf -mrecip @gol
++-mcld -mcx16 -msahf -mmovbe -mrecip @gol
+ -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx @gol
+ -maes -mpclmul @gol
+ -msse4a -m3dnow -mpopcnt -mabm -msse5 @gol
+@@ -584,7 +589,7 @@
+ -m96bit-long-double  -mregparm=@var{num}  -msseregparm @gol
+ -mveclibabi=@var{type} -mpc32 -mpc64 -mpc80 -mstackrealign @gol
+ -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs @gol
+--mcmodel=@var{code-model} @gol
++-mcmodel=@var{code-model} -mabi=@var{name} @gol
+ -m32  -m64 -mlarge-data-threshold=@var{num} @gol
+ -mfused-madd -mno-fused-madd -msse2avx}
+ 
+@@ -652,12 +657,13 @@
+ @gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
+ -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2 @gol
+ -mips64  -mips64r2 @gol
+--mips16  -mno-mips16  -mflip-mips16 @gol
++-mips16  -mips16e  -mno-mips16  -mflip-mips16 @gol
+ -minterlink-mips16  -mno-interlink-mips16 @gol
+ -mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
+ -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot @gol
+ -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float @gol
+ -msingle-float  -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2 @gol
++-mmicromips -mno-micromips -mmcu -mmno-mcu @gol
+ -mfpu=@var{fpu-type} @gol
+ -msmartmips  -mno-smartmips @gol
+ -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx @gol
+@@ -673,6 +679,7 @@
+ -mcheck-zero-division  -mno-check-zero-division @gol
+ -mdivide-traps  -mdivide-breaks @gol
+ -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
++-mjals -mno-jals @gol
+ -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp @gol
+ -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
+ -mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120 @gol
+@@ -778,12 +785,12 @@
+ -m5-32media  -m5-32media-nofpu @gol
+ -m5-compact  -m5-compact-nofpu @gol
+ -mb  -ml  -mdalign  -mrelax @gol
+--mbigtable  -mfmovd  -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
++-mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
+ -mieee  -mbitops  -misize  -minline-ic_invalidate -mpadstruct  -mspace @gol
+ -mprefergot  -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
+ -mdivsi3_libfunc=@var{name} -mfixed-range=@var{register-range} @gol
+ -madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
+--minvalid-symbols}
++-minvalid-symbols  -mfdpic}
+ 
+ @emph{SPARC Options}
+ @gccoptlist{-mcpu=@var{cpu-type} @gol
+@@ -1189,8 +1196,8 @@
+ option.
+ 
+ @item @var{language}
+-This will display the options supported for @var{language}, where 
+-@var{language} is the name of one of the languages supported in this 
++This will display the options supported for @var{language}, where
++@var{language} is the name of one of the languages supported in this
+ version of GCC.
+ 
+ @item @samp{common}
+@@ -1390,7 +1397,7 @@
+ @opindex std
+ Determine the language standard. @xref{Standards,,Language Standards
+ Supported by GCC}, for details of these standard versions.  This option
+-is currently only supported when compiling C or C++. 
++is currently only supported when compiling C or C++.
+ 
+ The compiler can accept several base standards, such as @samp{c89} or
+ @samp{c++98}, and GNU dialects of those standards, such as
+@@ -2816,21 +2823,21 @@
+ A pointer is compared against integer zero with @samp{<}, @samp{<=},
+ @samp{>}, or @samp{>=}.
+ 
+-@item 
++@item
+ (C++ only) An enumerator and a non-enumerator both appear in a
+ conditional expression.
+ 
+-@item 
++@item
+ (C++ only) Ambiguous virtual bases.
+ 
+-@item 
++@item
+ (C++ only) Subscripting an array which has been declared @samp{register}.
+ 
+-@item 
++@item
+ (C++ only) Taking the address of a variable which has been declared
+ @samp{register}.
+ 
+-@item 
++@item
+ (C++ only) A base class is not initialized in a derived class' copy
+ constructor.
+ 
+@@ -3366,9 +3373,9 @@
+ 
+ Level 1: Most aggressive, quick, least accurate.
+ Possibly useful when higher levels
+-do not warn but -fstrict-aliasing still breaks the code, as it has very few 
++do not warn but -fstrict-aliasing still breaks the code, as it has very few
+ false negatives.  However, it has many false positives.
+-Warns for all pointer conversions between possibly incompatible types, 
++Warns for all pointer conversions between possibly incompatible types,
+ even if never dereferenced.  Runs in the frontend only.
+ 
+ Level 2: Aggressive, quick, not too precise.
+@@ -3377,12 +3384,12 @@
+ Unlike level 1, it only warns when an address is taken.  Warns about
+ incomplete types.  Runs in the frontend only.
+ 
+-Level 3 (default for @option{-Wstrict-aliasing}): 
+-Should have very few false positives and few false 
++Level 3 (default for @option{-Wstrict-aliasing}):
++Should have very few false positives and few false
+ negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
+ Takes care of the common punn+dereference pattern in the frontend:
+ @code{*(int*)&some_float}.
+-If optimization is enabled, it also runs in the backend, where it deals 
++If optimization is enabled, it also runs in the backend, where it deals
+ with multiple statement cases using flow-sensitive points-to information.
+ Only warns when the converted pointer is dereferenced.
+ Does not warn about incomplete types.
+@@ -3469,6 +3476,14 @@
+ option will @emph{not} warn about unknown pragmas in system
+ headers---for that, @option{-Wunknown-pragmas} must also be used.
+ 
++@item -Wno-poison-system-directories
++@opindex Wno-poison-system-directories
++Do not warn for @option{-I} or @option{-L} options using system
++directories such as @file{/usr/include} when cross compiling.  This
++option is intended for use in chroot environments when such
++directories contain the correct headers and libraries for the target
++system rather than the host.
++
+ @item -Wfloat-equal
+ @opindex Wfloat-equal
+ @opindex Wno-float-equal
+@@ -4563,7 +4578,7 @@
+ 
+ @item -fdbg-cnt=@var{counter-value-list}
+ @opindex fdbg-cnt
+-Set the internal debug counter upperbound. @var{counter-value-list} 
++Set the internal debug counter upperbound. @var{counter-value-list}
+ is a comma-separated list of @var{name}:@var{value} pairs
+ which sets the upperbound of each debug counter @var{name} to @var{value}.
+ All debug counters have the initial upperbound of @var{UINT_MAX},
+@@ -4643,7 +4658,7 @@
+ @opindex fdump-rtl-ce3
+ @option{-fdump-rtl-ce1}, @option{-fdump-rtl-ce2}, and
+ @option{-fdump-rtl-ce3} enable dumping after the three
+-if conversion passes. 
++if conversion passes.
+ 
+ @itemx -fdump-rtl-cprop_hardreg
+ @opindex fdump-rtl-cprop_hardreg
+@@ -4772,7 +4787,7 @@
+ 
+ @item -fdump-rtl-seqabstr
+ @opindex fdump-rtl-seqabstr
+-Dump after common sequence discovery. 
++Dump after common sequence discovery.
+ 
+ @item -fdump-rtl-shorten
+ @opindex fdump-rtl-shorten
+@@ -5345,7 +5360,13 @@
+ each of them.
+ 
+ Not all optimizations are controlled directly by a flag.  Only
+-optimizations that have a flag are listed.
++optimizations that have a flag are listed in this section.
++
++Depending on the target and how GCC was configured, a slightly different
++set of optimizations may be enabled at each @option{-O} level than
++those listed here.  You can invoke GCC with @samp{-Q --help=optimizers}
++to find out the exact set of optimizations that are enabled at each level.
++@xref{Overall Options}, for examples.
+ 
+ @table @gcctabopt
+ @item -O
+@@ -5949,7 +5970,7 @@
+ by allowing other instructions to be issued until the result of the load
+ or floating point instruction is required.
+ 
+-Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
++Enabled at levels @option{-O2}, @option{-O3}.
+ 
+ @item -fschedule-insns2
+ @opindex fschedule-insns2
+@@ -6054,8 +6075,8 @@
+ 
+ @item -fsel-sched-pipelining
+ @opindex fsel-sched-pipelining
+-Enable software pipelining of innermost loops during selective scheduling.  
+-This option has no effect until one of @option{-fselective-scheduling} or 
++Enable software pipelining of innermost loops during selective scheduling.
++This option has no effect until one of @option{-fselective-scheduling} or
+ @option{-fselective-scheduling2} is turned on.
+ 
+ @item -fsel-sched-pipelining-outer-loops
+@@ -6119,9 +6140,9 @@
+ 
+ @item -fipa-struct-reorg
+ @opindex fipa-struct-reorg
+-Perform structure reorganization optimization, that change C-like structures 
+-layout in order to better utilize spatial locality.  This transformation is 
+-effective for programs containing arrays of structures.  Available in two 
++Perform structure reorganization optimization, that change C-like structures
++layout in order to better utilize spatial locality.  This transformation is
++effective for programs containing arrays of structures.  Available in two
+ compilation modes: profile-based (enabled with @option{-fprofile-generate})
+ or static (which uses built-in heuristics).  Require @option{-fipa-type-escape}
+ to provide the safety of this transformation.  It works only in whole program
+@@ -6140,7 +6161,7 @@
+ @opindex fipa-cp
+ Perform interprocedural constant propagation.
+ This optimization analyzes the program to determine when values passed
+-to functions are constants and then optimizes accordingly.  
++to functions are constants and then optimizes accordingly.
+ This optimization can substantially increase performance
+ if the application has constants passed to functions.
+ This flag is enabled by default at @option{-O2}, @option{-Os} and @option{-O3}.
+@@ -6164,10 +6185,9 @@
+ of the matrix. The second optimization is matrix transposing that
+ attempts to change the order of the matrix's dimensions in order to
+ improve cache locality.
+-Both optimizations need the @option{-fwhole-program} flag. 
++Both optimizations need the @option{-fwhole-program} flag.
+ Transposing is enabled only if profiling information is available.
+ 
+-
+ @item -ftree-sink
+ @opindex ftree-sink
+ Perform forward store motion  on trees.  This flag is
+@@ -6191,9 +6211,9 @@
+ 
+ @item -ftree-builtin-call-dce
+ @opindex ftree-builtin-call-dce
+-Perform conditional dead code elimination (DCE) for calls to builtin functions 
+-that may set @code{errno} but are otherwise side-effect free.  This flag is 
+-enabled by default at @option{-O2} and higher if @option{-Os} is not also 
++Perform conditional dead code elimination (DCE) for calls to builtin functions
++that may set @code{errno} but are otherwise side-effect free.  This flag is
++enabled by default at @option{-O2} and higher if @option{-Os} is not also
+ specified.
+ 
+ @item -ftree-dominator-opts
+@@ -6258,8 +6278,8 @@
+ 
+ @item -floop-strip-mine
+ Perform loop strip mining transformations on loops.  Strip mining
+-splits a loop into two nested loops.  The outer loop has strides 
+-equal to the strip size and the inner loop has strides of the 
++splits a loop into two nested loops.  The outer loop has strides
++equal to the strip size and the inner loop has strides of the
+ original loop within a strip.  For example, given a loop like:
+ @smallexample
+ DO I = 1, N
+@@ -6621,6 +6641,14 @@
+ The @option{-fstrict-overflow} option is enabled at levels
+ @option{-O2}, @option{-O3}, @option{-Os}.
+ 
++@item -falign-arrays
++@opindex falign-arrays
++Set the minimum alignment for array variables to be the largest power
++of two less than or equal to their total storage size, or the biggest
++alignment used on the machine, whichever is smaller.  This option may be
++helpful when compiling legacy code that uses type punning on arrays that
++does not strictly conform to the C standard.
++
+ @item -falign-functions
+ @itemx -falign-functions=@var{n}
+ @opindex falign-functions
+@@ -6756,7 +6784,7 @@
+ Set the directory to search the profile data files in to @var{path}.
+ This option affects only the profile data generated by
+ @option{-fprofile-generate}, @option{-ftest-coverage}, @option{-fprofile-arcs}
+-and used by @option{-fprofile-use} and @option{-fbranch-probabilities} 
++and used by @option{-fprofile-use} and @option{-fbranch-probabilities}
+ and its related options.
+ By default, GCC will use the current directory as @var{path}
+ thus the profile data file will appear in the same directory as the object file.
+@@ -7185,6 +7213,21 @@
+ 
+ Not all targets support this option.
+ 
++@item -fremove-local-statics
++@opindex fremove-local-statics
++Converts function-local static variables to automatic variables when it
++is safe to do so.  This transformation can reduce the number of
++instructions executed due to automatic variables being cheaper to
++read/write than static variables.
++
++@item -fpromote-loop-indices
++@opindex fpromote-loop-indices
++Converts loop indices that have a type shorter than the word size to
++word-sized quantities.  This transformation can reduce the overhead
++associated with sign/zero-extension and truncation of such variables.
++Using @option{-funsafe-loop-optimizations} with this option may result
++in more effective optimization.
++
+ @item --param @var{name}=@var{value}
+ @opindex param
+ In some places, GCC uses various constants to control the amount of
+@@ -7218,8 +7261,8 @@
+ The threshold ratio (as a percentage) between a structure frequency
+ and the frequency of the hottest structure in the program.  This parameter
+ is used by struct-reorg optimization enabled by @option{-fipa-struct-reorg}.
+-We say that if the ratio of a structure frequency, calculated by profiling, 
+-to the hottest structure frequency in the program is less than this 
++We say that if the ratio of a structure frequency, calculated by profiling,
++to the hottest structure frequency in the program is less than this
+ parameter, then structure reorganization is not applied to this structure.
+ The default is 10.
+ 
+@@ -7692,8 +7735,8 @@
+ The default value is 50.
+ 
+ @item selsched-max-sched-times
+-The maximum number of times that an instruction will be scheduled during 
+-selective scheduling.  This is the limit on the number of iterations 
++The maximum number of times that an instruction will be scheduled during
++selective scheduling.  This is the limit on the number of iterations
+ through which the instruction may be pipelined.  The default value is 2.
+ 
+ @item selsched-max-insns-to-rename
+@@ -8065,7 +8108,7 @@
+ @cindex linker script
+ Use @var{script} as the linker script.  This option is supported by most
+ systems using the GNU linker.  On some targets, such as bare-board
+-targets without an operating system, the @option{-T} option may be required 
++targets without an operating system, the @option{-T} option may be required
+ when linking to avoid references to undefined symbols.
+ 
+ @item -Xlinker @var{option}
+@@ -8081,7 +8124,7 @@
+ @option{-Xlinker "-assert definitions"}, because this passes the entire
+ string as a single argument, which is not what the linker expects.
+ 
+-When using the GNU linker, it is usually more convenient to pass 
++When using the GNU linker, it is usually more convenient to pass
+ arguments to linker options using the @option{@var{option}=@var{value}}
+ syntax than as separate arguments.  For example, you can specify
+ @samp{-Xlinker -Map=output.map} rather than
+@@ -8092,7 +8135,7 @@
+ @opindex Wl
+ Pass @var{option} as an option to the linker.  If @var{option} contains
+ commas, it is split into multiple options at the commas.  You can use this
+-syntax to pass an argument to the option.  
++syntax to pass an argument to the option.
+ For example, @samp{-Wl,-Map,output.map} passes @samp{-Map output.map} to the
+ linker.  When using the GNU linker, you can also get the same effect with
+ @samp{-Wl,-Map=output.map}.
+@@ -8740,6 +8783,12 @@
+ @code{,}, @code{!}, @code{|}, and @code{*} as needed.
+ 
+ 
++@item -mlow-irq-latency
++@opindex mlow-irq-latency
++Avoid instructions with high interrupt latency when generating
++code.  This can increase code size and reduce performance.
++The option is off by default.
++
+ @end table
+ 
+ The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
+@@ -9019,11 +9068,6 @@
+ @samp{hard} allows generation of floating-point instructions 
+ and uses FPU-specific calling conventions.
+ 
+-Using @option{-mfloat-abi=hard} with VFP coprocessors is not supported.
+-Use @option{-mfloat-abi=softfp} with the appropriate @option{-mfpu} option
+-to allow the compiler to generate code that makes use of the hardware
+-floating-point capabilities for these CPUs.
+-
+ The default depends on the specific target configuration.  Note that
+ the hard-float and soft-float ABIs are not link-compatible; you must
+ compile your entire program with the same ABI, and link with a
+@@ -9077,10 +9121,10 @@
+ @samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
+ @samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
+ @samp{arm1156t2-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
+-@samp{cortex-a8}, @samp{cortex-a9},
+-@samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-m3},
+-@samp{cortex-m1},
+-@samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
++@samp{cortex-a5}, @samp{cortex-a8}, @samp{cortex-a9},
++@samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-m4}, @samp{cortex-m3},
++@samp{cortex-m1}, @samp{cortex-m0},
++@samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}, @samp{marvell-f}.
+ 
+ @item -mtune=@var{name}
+ @opindex mtune
+@@ -9114,14 +9158,26 @@
+ @opindex mfp
+ This specifies what floating point hardware (or hardware emulation) is
+ available on the target.  Permissible names are: @samp{fpa}, @samp{fpe2},
+-@samp{fpe3}, @samp{maverick}, @samp{vfp}, @samp{vfpv3}, @samp{vfpv3-d16} and
+-@samp{neon}.  @option{-mfp} and @option{-mfpe}
++@samp{fpe3}, @samp{maverick}, @samp{vfp}, @samp{vfpv3}, @samp{vfpv3-fp16},
++@samp{vfpv3-d16}, @samp{vfpv3-d16-fp16}, @samp{vfpv4}, @samp{vfpv4-d16}, @samp{neon}, @samp{neon-fp16} and @samp{neon-vfpv4}.
++@option{-mfp} and @option{-mfpe}
+ are synonyms for @option{-mfpu}=@samp{fpe}@var{number}, for compatibility
+ with older versions of GCC@.
+ 
+ If @option{-msoft-float} is specified this specifies the format of
+ floating point values.
+ 
++@item -mfp16-format=@var{name}
++@opindex mfp16-format
++Specify the format of the @code{__fp16} half-precision floating-point type.
++Permissible names are @samp{none}, @samp{ieee}, and @samp{alternative}; 
++the default is @samp{none}, in which case the @code{__fp16} type is not 
++defined.  @xref{Half-Precision}, for more information.
++
++@item -mmarvell-div
++@opindex mmarvell-div
++Generate hardware integer division instructions supported by some Marvell cores.
++
+ @item -mstructure-size-boundary=@var{n}
+ @opindex mstructure-size-boundary
+ The size of all structures and unions will be rounded up to a multiple
+@@ -9225,6 +9281,10 @@
+ mixed 16/32-bit Thumb-2 instructions based on the @option{-mcpu=@var{name}}
+ and @option{-march=@var{name}} options.
+ 
++@item -mfix-janus-2cc
++@opindex mfix-janus-2cc
++Work around hardware errata for Avalent Janus 2CC cores.
++
+ @item -mtpcs-frame
+ @opindex mtpcs-frame
+ Generate a stack frame that is compliant with the Thumb Procedure Call
+@@ -9513,7 +9573,7 @@
+ and link scripts will be used to support Core B. This option
+ defines @code{__BFIN_COREB}. When this option is used, coreb_main
+ should be used instead of main. It must be used with
+-@option{-mmulticore}. 
++@option{-mmulticore}.
+ 
+ @item -msdram
+ @opindex msdram
+@@ -10980,6 +11040,9 @@
+ @item core2
+ Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
+ instruction set support.
++@item atom
++Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
++instruction set support.
+ @item k6
+ AMD K6 CPU with MMX instruction set support.
+ @item k6-2, k6-3
+@@ -11247,7 +11310,7 @@
+ libraries assume that extended precision (80 bit) floating-point operations
+ are enabled by default; routines in such libraries could suffer significant
+ loss of accuracy, typically through so-called "catastrophic cancellation",
+-when this option is used to set the precision to less than extended precision. 
++when this option is used to set the precision to less than extended precision.
+ 
+ @item -mstackrealign
+ @opindex mstackrealign
+@@ -11379,6 +11442,11 @@
+ In 64-bit mode, SAHF instruction is used to optimize @code{fmod}, @code{drem}
+ or @code{remainder} built-in functions: see @ref{Other Builtins} for details.
+ 
++@item -mmovbe
++@opindex mmovbe
++This option will enable GCC to use movbe instruction to implement
++@code{__builtin_bswap32} and @code{__builtin_bswap64}.
++
+ @item -mrecip
+ @opindex mrecip
+ This option will enable GCC to use RCPSS and RSQRTSS instructions (and their
+@@ -11415,6 +11483,16 @@
+ @option{-funsafe-math-optimizations} have to be enabled. A SVML or ACML ABI
+ compatible library will have to be specified at link time.
+ 
++@item -mabi=@var{name}
++@opindex mabi
++Generate code for the specified calling convention.  Permissible values
++are: @samp{sysv} for the ABI used on GNU/Linux and other systems and
++@samp{ms} for the Microsoft ABI.  The default is to use the Microsoft
++ABI when targeting Windows.  On all other systems, the default is the
++SYSV ABI.  You can control this behavior for a specific function by
++using the function attribute @samp{ms_abi}/@samp{sysv_abi}.
++@xref{Function Attributes}.
++
+ @item -mpush-args
+ @itemx -mno-push-args
+ @opindex mpush-args
+@@ -11612,6 +11690,15 @@
+ specifies that a GUI application is to be generated by
+ instructing the linker to set the PE header subsystem type
+ appropriately.
++
++@item -mpe-aligned-commons
++@opindex mpe-aligned-commons
++This option is available for Cygwin and MinGW targets.  It
++specifies that the GNU extension to the PE file format that
++permits the correct alignment of COMMON variables should be
++used when generating code.  It will be enabled by default if
++GCC detects that the target assembler found during configuration
++supports the feature.
+ @end table
+ 
+ See also under @ref{i386 and x86-64 Options} for standard options.
+@@ -12068,7 +12155,7 @@
+ 
+ @multitable @columnfractions 0.20 0.80
+ @item @strong{Family} @tab @strong{@samp{-mcpu} arguments}
+-@item @samp{51qe} @tab @samp{51qe}
++@item @samp{51} @tab @samp{51} @samp{51ac} @samp{51cn} @samp{51em} @samp{51qe}
+ @item @samp{5206} @tab @samp{5202} @samp{5204} @samp{5206}
+ @item @samp{5206e} @tab @samp{5206e}
+ @item @samp{5208} @tab @samp{5207} @samp{5208}
+@@ -12077,6 +12164,7 @@
+ @item @samp{5216} @tab @samp{5214} @samp{5216}
+ @item @samp{52235} @tab @samp{52230} @samp{52231} @samp{52232} @samp{52233} @samp{52234} @samp{52235}
+ @item @samp{5225} @tab @samp{5224} @samp{5225}
++@item @samp{52259} @tab @samp{52252} @samp{52254} @samp{52255} @samp{52256} @samp{52258} @samp{52259}
+ @item @samp{5235} @tab @samp{5232} @samp{5233} @samp{5234} @samp{5235} @samp{523x}
+ @item @samp{5249} @tab @samp{5249}
+ @item @samp{5250} @tab @samp{5250}
+@@ -12084,6 +12172,7 @@
+ @item @samp{5272} @tab @samp{5272}
+ @item @samp{5275} @tab @samp{5274} @samp{5275}
+ @item @samp{5282} @tab @samp{5280} @samp{5281} @samp{5282} @samp{528x}
++@item @samp{53017} @tab @samp{53011} @samp{53012} @samp{53013} @samp{53014} @samp{53015} @samp{53016} @samp{53017}
+ @item @samp{5307} @tab @samp{5307}
+ @item @samp{5329} @tab @samp{5327} @samp{5328} @samp{5329} @samp{532x}
+ @item @samp{5373} @tab @samp{5372} @samp{5373} @samp{537x}
+@@ -12583,8 +12672,9 @@
+ @samp{24kec}, @samp{24kef2_1}, @samp{24kef1_1},
+ @samp{34kc}, @samp{34kf2_1}, @samp{34kf1_1},
+ @samp{74kc}, @samp{74kf2_1}, @samp{74kf1_1}, @samp{74kf3_2},
++@samp{1004kc}, @samp{1004kf2_1}, @samp{1004kf1_1},
+ @samp{loongson2e}, @samp{loongson2f},
+-@samp{m4k},
++@samp{m4k}, @samp{m14k},
+ @samp{octeon},
+ @samp{orion},
+ @samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
+@@ -12682,11 +12772,14 @@
+ Equivalent to @samp{-march=mips64r2}.
+ 
+ @item -mips16
++@itemx -mips16e
+ @itemx -mno-mips16
+ @opindex mips16
++@opindex mips16e
+ @opindex mno-mips16
+ Generate (do not generate) MIPS16 code.  If GCC is targetting a
+ MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE@.
++@option{-mips16e} is a deprecated alias for @option{-mips16}.
+ 
+ MIPS16 code generation can also be controlled on a per-function basis
+ by means of @code{mips16} and @code{nomips16} attributes.  
+@@ -12702,13 +12795,14 @@
+ @itemx -mno-interlink-mips16
+ @opindex minterlink-mips16
+ @opindex mno-interlink-mips16
+-Require (do not require) that non-MIPS16 code be link-compatible with
+-MIPS16 code.
++Require (do not require) that non-MIPS16/non-microMIPS code be link-compatible
++with MIPS16/microMIPS code.
+ 
+-For example, non-MIPS16 code cannot jump directly to MIPS16 code;
++For example, non-MIPS16/non-microMIPS code cannot jump directly to
++MIPS16/microMIPS code;
+ it must either use a call or an indirect jump.  @option{-minterlink-mips16}
+ therefore disables direct jumps unless GCC knows that the target of the
+-jump is not MIPS16.
++jump is not MIPS16/non microMIPS.
+ 
+ @item -mabi=32
+ @itemx -mabi=o64
+@@ -12911,12 +13005,29 @@
+ Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
+ The option @option{-mips3d} implies @option{-mpaired-single}.
+ 
++@item -mmicromips
++@itemx -mno-micromips
++@opindex mmicromips
++@opindex mno-mmicromips
++Generate (do not generate) microMIPS code.  If GCC is targetting a
++MIPS32 or MIPS64 architecture, it will make use of the microMIPS ASE@.
++
++MicroMIPS code generation can also be controlled on a per-function basis
++by means of @code{micromips} and @code{nomicromips} attributes.
++@xref{Function Attributes}, for more information.
++
+ @item -mmt
+ @itemx -mno-mt
+ @opindex mmt
+ @opindex mno-mt
+ Use (do not use) MT Multithreading instructions.
+ 
++@item -mmcu
++@itemx -mno-mcu
++@opindex mmcu
++@opindex mno-mcu
++Use (do not use) the MIPS MCU ASE instructions.
++
+ @item -mlong64
+ @opindex mlong64
+ Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
+@@ -13112,6 +13223,16 @@
+ This option has no effect on abicalls code.  The default is
+ @option{-mno-long-calls}.
+ 
++@item -mjals
++@itemx -mno-jals
++@opindex mjals
++@opindex mno-jals
++Generate (do not generate) the @code{jals} instruction for microMIPS
++by recognizing that the branch delay slot instruction can be 16 bits.
++This implies that the funciton call cannot switch the current mode
++during the linking stage, because we don't have the @code{jalxs}
++instruction that supports 16-bit branch delay slot instructions.
++
+ @item -mmad
+ @itemx -mno-mad
+ @opindex mmad
+@@ -14033,8 +14154,8 @@
+ @itemx -mdouble-float
+ @opindex msingle-float
+ @opindex mdouble-float
+-Generate code for single or double-precision floating point operations. 
+-@option{-mdouble-float} implies @option{-msingle-float}. 
++Generate code for single or double-precision floating point operations.
++@option{-mdouble-float} implies @option{-msingle-float}.
+ 
+ @item -msimple-fpu
+ @opindex msimple-fpu
+@@ -14042,7 +14163,7 @@
+ 
+ @item -mfpu
+ @opindex mfpu
+-Specify type of floating point unit.  Valid values are @var{sp_lite} 
++Specify type of floating point unit.  Valid values are @var{sp_lite}
+ (equivalent to -msingle-float -msimple-fpu), @var{dp_lite} (equivalent
+ to -mdouble-float -msimple-fpu), @var{sp_full} (equivalent to -msingle-float),
+ and @var{dp_full} (equivalent to -mdouble-float).
+@@ -14678,7 +14799,7 @@
+ 
+ @item -mel
+ @opindex mel
+-Compile code for little endian mode. 
++Compile code for little endian mode.
+ 
+ @item -mnhwloop
+ @opindex mnhwloop
+@@ -14690,7 +14811,7 @@
+ 
+ @item -mmac
+ @opindex mmac
+-Enable the use of multiply-accumulate instructions. Disabled by default. 
++Enable the use of multiply-accumulate instructions. Disabled by default.
+ 
+ @item -mscore5
+ @opindex mscore5
+@@ -14807,7 +14928,8 @@
+ 
+ @item -mfmovd
+ @opindex mfmovd
+-Enable the use of the instruction @code{fmovd}.
++Enable the use of the instruction @code{fmovd}.  Check @option{-mdalign} for
++alignment constraints.
+ 
+ @item -mhitachi
+ @opindex mhitachi
+@@ -14982,6 +15104,11 @@
+ This option is only meaningful when @option{-mno-pt-fixed} is in effect.
+ It will then prevent cross-basic-block cse, hoisting and most scheduling
+ of symbol loads.  The default is @option{-mno-invalid-symbols}.
++
++@item -mfdpic
++@opindex fdpic
++Generate code using the FDPIC ABI for uClinux, as documented at
++@w{@uref{http://www.codesourcery.com/public/docs/sh-fdpic/sh-fdpic-abi.txt}}.
+ @end table
+ 
+ @node SPARC Options
+@@ -15343,7 +15470,7 @@
+ @opindex mhint-max-distance
+ The encoding of the branch hint instruction limits the hint to be within
+ 256 instructions of the branch it is effecting.  By default, GCC makes
+-sure it is within 125. 
++sure it is within 125.
+ 
+ @item -msafe-hints
+ @opindex msafe-hints
+@@ -15810,19 +15937,19 @@
+ In C code, controls the placement of uninitialized global variables.
+ Unix C compilers have traditionally permitted multiple definitions of
+ such variables in different compilation units by placing the variables
+-in a common block.  
+-This is the behavior specified by @option{-fcommon}, and is the default 
+-for GCC on most targets.  
++in a common block.
++This is the behavior specified by @option{-fcommon}, and is the default
++for GCC on most targets.
+ On the other hand, this behavior is not required by ISO C, and on some
+ targets may carry a speed or code size penalty on variable references.
+-The @option{-fno-common} option specifies that the compiler should place 
++The @option{-fno-common} option specifies that the compiler should place
+ uninitialized global variables in the data section of the object file,
+ rather than generating them as common blocks.
+-This has the effect that if the same variable is declared 
++This has the effect that if the same variable is declared
+ (without @code{extern}) in two different compilations,
+ you will get a multiple-definition error when you link them.
+-In this case, you must compile with @option{-fcommon} instead.  
+-Compiling with @option{-fno-common} is useful on targets for which 
++In this case, you must compile with @option{-fcommon} instead.
++Compiling with @option{-fno-common} is useful on targets for which
+ it provides better performance, or if you wish to verify that the
+ program will work on other systems which always treat uninitialized
+ variable declarations this way.
+--- a/src/gcc/doc/md.texi
++++ b/src/gcc/doc/md.texi
+@@ -2574,6 +2574,9 @@
+ 
+ @item R
+ An address that can be used in a non-macro load or store.
++
++@item YC
++For MIPS, it is the same as the constraint @code{R}.  For microMIPS, it matches an address within a 12-bit offset that can be used for microMIPS @code{ll}, @code{sc}, etc.
+ @end table
+ 
+ @item Motorola 680x0---@file{config/m68k/constraints.md}
+@@ -7504,6 +7507,11 @@
+ recognize complicated bypasses, e.g.@: when the consumer is only an address
+ of insn @samp{store} (not a stored value).
+ 
++If there are more one bypass with the same output and input insns, the
++chosen bypass is the first bypass with a guard in description whose
++guard function returns nonzero.  If there is no such bypass, then
++bypass without the guard function is chosen.
++
+ @findex exclusion_set
+ @findex presence_set
+ @findex final_presence_set
+--- a/src/gcc/doc/tm.texi
++++ b/src/gcc/doc/tm.texi
+@@ -2472,6 +2472,15 @@
+ added to another register (as well as added to a displacement).
+ @end defmac
+ 
++@defmac MODE_INDEX_REG_CLASS (@var{mode})
++This is a variation of the @code{INDEX_REG_CLASS} macro which allows
++the selection of an index register in a mode dependent manner.  It can
++return @code{NO_REGS} for modes that do not support any form of index
++register.  If @var{mode} is @code{VOIDmode} then the macro should
++return a class of registers that is suitable for all addresses in
++which an index register of some form is allowed.
++@end defmac
++
+ @defmac REGNO_OK_FOR_BASE_P (@var{num})
+ A C expression which is nonzero if register number @var{num} is
+ suitable for use as a base register in operand addresses.  It may be
+@@ -2531,6 +2540,14 @@
+ only if neither labeling works.
+ @end defmac
+ 
++@defmac REGNO_MODE_OK_FOR_INDEX_P (@var{num}, @var{mode})
++A C expression that is just like @code{REGNO_OK_FOR_INDEX_P}, except
++that the expression may examine the mode of the memory reference
++in @var{mode}.  If @var{mode} is @code{VOIDmode}, the macro should
++return true if @var{x} is suitable for all modes in which some
++form of index register is allowed.
++@end defmac
++
+ @defmac PREFERRED_RELOAD_CLASS (@var{x}, @var{class})
+ A C expression that places additional restrictions on the register class
+ to use when it is necessary to copy value @var{x} into a register in class
+@@ -3266,7 +3283,8 @@
+ @code{INCOMING_FRAME_SP_OFFSET}.  Which is unfortunately not usable
+ during virtual register instantiation.
+ 
+-The default value for this macro is @code{FIRST_PARM_OFFSET (fundecl)},
++The default value for this macro is
++@code{FIRST_PARM_OFFSET (fundecl) + crtl->args.pretend_args_size},
+ which is correct for most machines; in general, the arguments are found
+ immediately before the stack frame.  Note that this is not the case on
+ some targets that save registers into the caller's frame, such as SPARC
+@@ -4332,6 +4350,18 @@
+ compiled.
+ @end defmac
+ 
++@deftypefn {Target Hook} rtx TARGET_LIBCALL_VALUE (enum machine_mode
++@var{mode}, rtx @var{fun})
++Define this hook if the back-end needs to know the name of the libcall
++function in order to determine where the result should be returned.  
++
++The mode of the result is given by @var{mode} and the name of the called
++library function is given by @var{fun}.  The hook should return an RTX 
++representing the place where the library function result will be returned.
++
++If this hook is not defined, then LIBCALL_VALUE will be used.
++@end deftypefn
++
+ @defmac FUNCTION_VALUE_REGNO_P (@var{regno})
+ A C expression that is nonzero if @var{regno} is the number of a hard
+ register in which the values of called function may come back.
+@@ -6851,8 +6881,9 @@
+ @end defmac
+ 
+ @defmac PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
+-Define this macro if the register defined by
+-@code{PIC_OFFSET_TABLE_REGNUM} is clobbered by calls.  Do not define
++A C expression that is nonzero if the register defined by
++@code{PIC_OFFSET_TABLE_REGNUM} is clobbered by calls.  If not defined,
++the default is zero.  Do not define
+ this macro if @code{PIC_OFFSET_TABLE_REGNUM} is not defined.
+ @end defmac
+ 
+@@ -7250,7 +7281,14 @@
+ A C statement (sans semicolon) to output to the stdio stream
+ @var{stream} the assembler definition of a common-label named
+ @var{name} whose size is @var{size} bytes.  The variable @var{rounded}
+-is the size rounded up to whatever alignment the caller wants.
++is the size rounded up to whatever alignment the caller wants.  It is
++possible that @var{size} may be zero, for instance if a struct with no
++other member than a zero-length array is defined.  In this case, the
++backend must output a symbol definition that allocates at least one
++byte, both so that the address of the resulting object does not compare
++equal to any other, and because some object formats cannot even express
++the concept of a zero-sized common symbol, as that is how they represent
++an ordinary undefined external.
+ 
+ Use the expression @code{assemble_name (@var{stream}, @var{name})} to
+ output the name itself; before and after that, output the additional
+@@ -8107,6 +8145,22 @@
+ to registers using alternate names.
+ @end defmac
+ 
++@defmac OVERLAPPING_REGISTER_NAMES
++If defined, a C initializer for an array of structures containing a
++name, a register number and a count of the number of consecutive
++machine registers the name overlaps.  This macro defines additional
++names for hard registers, thus allowing the @code{asm} option in
++declarations to refer to registers using alternate names.  Unlike
++@code{ADDITIONAL_REGISTER_NAMES}, this macro should be used when the
++register name implies multiple underlying registers.
++
++This macro should be used when it is important that a clobber in an
++@code{asm} statement clobbers all the underlying values implied by the
++register name.  For example, on ARM, clobbering the double-precision
++VFP register ``d0'' implies clobbering both single-precision registers
++``s0'' and ``s1''.
++@end defmac
++
+ @defmac ASM_OUTPUT_OPCODE (@var{stream}, @var{ptr})
+ Define this macro if you are using an unusual assembler that
+ requires different names for the machine instructions.
+@@ -8156,6 +8210,19 @@
+ If this macro is not defined, it is equivalent to a null statement.
+ @end defmac
+ 
++@deftypefn {Target Hook} void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *@var{FILE}, rtx @var{insn}, rtx *@var{opvec}, int @var{noperands})
++If defined, this target hook is a function which is executed just after the
++output of assembler code for @var{insn}, to change the mode of the assembler
++if necessary.
++
++Here the argument @var{opvec} is the vector containing the operands
++extracted from @var{insn}, and @var{noperands} is the number of
++elements of the vector which contain meaningful data for this insn.
++The contents of this vector are what was used to convert the insn
++template into assembler code, so you can change the assembler mode
++by checking the contents of the vector.
++@end deftypefn
++
+ @defmac PRINT_OPERAND (@var{stream}, @var{x}, @var{code})
+ A C compound statement to output to stdio stream @var{stream} the
+ assembler syntax for an instruction operand @var{x}.  @var{x} is an
+@@ -10426,6 +10493,18 @@
+ passed along.
+ @end deftypefn
+ 
++@deftypefn {Target Hook} int TARGET_COMMUTATIVE_OPERAND_PRECEDENCE (const_rtx @var{op}, int @var{value})
++This target hook returns a value indicating whether @var{OP}, an operand of
++a commutative operation, is preferred as the first or second operand.
++The higher the value, the stronger the preference for being the first operand.
++Negative values are used to indicate a preference for the first operand
++and positive values for the second operand.  Usually the hook will return
++@var{VALUE}, which is the default precedence for @var{OP}
++(see @file{rtlanal.c}:@code{commutative_operand_precedence()}), but sometimes
++backends may wish certain operands to appear at the right places within
++instructions.
++@end deftypefn
++
+ @deftypefn {Target Hook} void TARGET_SET_CURRENT_FUNCTION (tree @var{decl})
+ The compiler invokes this hook whenever it changes its current function 
+ context (@code{cfun}).  You can define this function if
+@@ -10622,6 +10701,38 @@
+ the front end.
+ @end deftypefn
+ 
++@deftypefn {Target Hook} {const char *} TARGET_INVALID_PARAMETER_TYPE (tree @var{type})
++If defined, this macro returns the diagnostic message when it is
++invalid for functions to include parameters of type @var{type}, 
++or @code{NULL} if validity should be determined by
++the front end.  This is currently used only by the C and C++ front ends.
++@end deftypefn
++
++@deftypefn {Target Hook} {const char *} TARGET_INVALID_RETURN_TYPE (tree @var{type})
++If defined, this macro returns the diagnostic message when it is
++invalid for functions to have return type @var{type}, 
++or @code{NULL} if validity should be determined by
++the front end.  This is currently used only by the C and C++ front ends.
++@end deftypefn
++
++@deftypefn {Target Hook} {tree} TARGET_PROMOTED_TYPE (tree @var{type})
++If defined, this target hook returns the type to which values of 
++@var{type} should be promoted when they appear in expressions, 
++analogous to the integer promotions, or @code{NULL_TREE} to use the
++front end's normal promotion rules.  This hook is useful when there are
++target-specific types with special promotion rules.
++This is currently used only by the C and C++ front ends.
++@end deftypefn
++
++@deftypefn {Target Hook} {tree} TARGET_CONVERT_TO_TYPE (tree @var{type}, tree @var{expr})
++If defined, this hook returns the result of converting @var{expr} to 
++@var{type}.  It should return the converted expression, 
++or @code{NULL_TREE} to apply the front end's normal conversion rules.
++This hook is useful when there are target-specific types with special 
++conversion rules.
++This is currently used only by the C and C++ front ends.
++@end deftypefn
++
+ @defmac TARGET_USE_JCR_SECTION
+ This macro determines whether to use the JCR section to register Java
+ classes. By default, TARGET_USE_JCR_SECTION is defined to 1 if both
+--- a/src/gcc/java/gcj.texi
++++ b/src/gcc/java/gcj.texi
+@@ -607,6 +607,13 @@
+ accessing an object via a reference.  On other systems you won't need
+ this because null pointer accesses are caught automatically by the
+ processor.
++
++@item -fuse-atomic-builtins
++On some systems, gcc can generate code for built-in atomic operations.
++Use this option to force gcj to use these builtins when compiling Java
++code.  Where this capability is present it should be automatically
++detected, so you won't usually need to use this option.
++
+ @end table
+ 
+ @c man end
+--- a/src/libgomp/libgomp.texi
++++ b/src/libgomp/libgomp.texi
+@@ -94,7 +94,7 @@
+                                How you can copy and share this manual.
+ * Funding::                    How to help assure continued work for free 
+                                software.
+-* Index::                      Index of this documentation.
++* Library Index::              Index of this documentation.
+ @end menu
+ 
+ 
+@@ -1713,8 +1713,8 @@
+ @c Index
+ @c ---------------------------------------------------------------------
+ 
+-@node Index
+-@unnumbered Index
++@node Library Index
++@unnumbered Library Index
+ 
+ @printindex cp
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-lfs.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-lfs.diff
@@ -0,0 +1,96 @@
+# DP: Check for large file support (backport from 4.6).
+
+gcc/
+
+2010-11-02  Ian Lance Taylor  <iant@google.com>
+
+	* configure.ac: Use AC_SYS_LARGEFILE.
+	* configure: Rebuild.
+	* config.in: Rebuild.
+
+2010-11-11  Paolo Bonzini  <bonzini@gnu.org>
+
+	* Makefile.in (gengtype-lex.c): Include bconfig.h first.
+
+libcpp/
+
+2010-11-02  Ian Lance Taylor  <iant@google.com>
+
+	* configure.ac: Use AC_SYS_LARGEFILE.
+	* configure: Rebuild.
+	* config.in: Rebuild.
+
+ 
+--- a/src/gcc/configure.ac
++++ b/src/gcc/configure.ac
+@@ -303,6 +303,8 @@
+ AC_PROG_CPP
+ AC_C_INLINE
+ 
++AC_SYS_LARGEFILE
++
+ # sizeof(char) is 1 by definition.
+ AC_CHECK_SIZEOF(void *)
+ AC_CHECK_SIZEOF(short)
+--- a/src/gcc/config.in
++++ b/src/gcc/config.in
+@@ -1546,6 +1546,18 @@
+ #endif
+ 
+ 
++/* Number of bits in a file offset, on hosts where this is settable. */
++#ifndef USED_FOR_TARGET
++#undef _FILE_OFFSET_BITS
++#endif
++
++
++/* Define for large files, on AIX-style hosts. */
++#ifndef USED_FOR_TARGET
++#undef _LARGE_FILES
++#endif
++
++
+ /* Define to 1 if on MINIX. */
+ #ifndef USED_FOR_TARGET
+ #undef _MINIX
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -3457,7 +3457,11 @@
+ 
+ # Generated source files for gengtype.
+ gengtype-lex.c : gengtype-lex.l
+-	-$(FLEX) $(FLEXFLAGS) -o$@ $<
++	-$(FLEX) $(FLEXFLAGS) -o$@ $< && { \
++	  echo '#include "bconfig.h"' > $@.tmp; \
++	  cat $@ >> $@.tmp; \
++	  mv $@.tmp $@; \
++	}
+ 
+ #
+ # Remake internationalization support.
+--- a/src/libcpp/configure.ac
++++ b/src/libcpp/configure.ac
+@@ -13,6 +13,8 @@
+ AC_PROG_CC
+ AC_PROG_RANLIB
+ 
++AC_SYS_LARGEFILE
++
+ MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing
+ AC_CHECK_PROGS([ACLOCAL], [aclocal], [$MISSING aclocal])
+ AC_CHECK_PROGS([AUTOCONF], [autoconf], [$MISSING autoconf])
+--- a/src/libcpp/config.in
++++ b/src/libcpp/config.in
+@@ -266,6 +266,12 @@
+ /* Define to 1 if your <sys/time.h> declares `struct tm'. */
+ #undef TM_IN_SYS_TIME
+ 
++/* Number of bits in a file offset, on hosts where this is settable. */
++#undef _FILE_OFFSET_BITS
++
++/* Define for large files, on AIX-style hosts. */
++#undef _LARGE_FILES
++
+ /* Define to empty if `const' does not conform to ANSI C. */
+ #undef const
+ 
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-pascal-lang.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-pascal-lang.diff
@@ -0,0 +1,711 @@
+# DP: Add pascal options and specs for the gcc driver.
+
+---
+ gcc/p/lang-specs.h |   46 ++++
+ gcc/p/lang.opt     |  635 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ gcc/p/p-version.h  |    7 +
+ 3 files changed, 688 insertions(+), 0 deletions(-)
+ create mode 100644 gcc/p/lang-specs.h
+ create mode 100644 gcc/p/lang.opt
+ create mode 100644 gcc/p/p-version.h
+
+new file mode 100644
+--- /dev/null
++++ b/src/gcc/p/lang-specs.h
+@@ -0,0 +1,46 @@
++/*Definitions for specs for Pascal.
++
++  Copyright (C) 1997-2006 Free Software Foundation, Inc.
++
++  Authors: Peter Gerwinski <peter@gerwinski.de>
++           Frank Heckenbach <frank@pascal.gnu.de>
++
++  This file is part of GNU Pascal.
++
++  GNU Pascal is free software; you can redistribute it and/or modify
++  it under the terms of the GNU General Public License as published
++  by the Free Software Foundation; either version 2, or (at your
++  option) any later version.
++
++  GNU Pascal is distributed in the hope that it will be useful, but
++  WITHOUT ANY WARRANTY; without even the implied warranty of
++  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++  General Public License for more details.
++
++  You should have received a copy of the GNU General Public License
++  along with GNU Pascal; see the file COPYING. If not, write to the
++  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
++  02111-1307, USA. */
++
++#include "p/p-version.h"
++
++/* This is the contribution to the `default_compilers' array for Pascal. */
++  {".pas", "@Pascal", 0},
++  {".p", "@Pascal", 0},
++  {".pp", "@Pascal", 0},
++  {".dpr", "@Pascal", 0},
++  {"@Pascal",
++    "gpc1 %{E:-E %{!M:%(cpp_unique_options) %1 %{m*} %{f*&W*&pedantic*} %{w} "
++    "%(cpp_debug_options) %{O*}}}"
++    "%{M:%(cpp_unique_options) %1 %{m*} %{f*&W*&pedantic*} %{w}" 
++    "%(cpp_debug_options) %{O*}}"
++    "%{!E:%{!M:%{save-temps:-E %(cpp_unique_options) %1 %{m*} "
++    "%{f*&W*&pedantic*} %{w}  %{O*} -o %b.i \n\
++     gpc1 -fpreprocessed %b.i} %{!save-temps:%(cpp_unique_options)} \
++     %(cc1_options)\
++    %{!famtmpfile*:%eInternal GPC problem: internal option `--amtmpfile' not given}\
++    %{!fsyntax-only:%(invoke_as)}}}", 0},
++  {"@Preprocessed-Pascal",
++   "%{!M:%{!MM:%{!E:gpc1 -fpreprocessed %i %(cc1_options)\
++    %{!famtmpfile*:%eInternal GPC problem: internal option `--amtmpfile' not given}\
++    %{!fsyntax-only:%(invoke_as)} }}}", 0},
+new file mode 100644
+--- /dev/null
++++ b/src/gcc/p/lang.opt
+@@ -0,0 +1,635 @@
++; This file was generated automatically by mk-lang_opt.
++; DO NOT CHANGE THIS FILE MANUALLY!
++;
++; Options for the Pascal front end.
++; Copyright (C) 2004-2006 Free Software Foundation, Inc.
++;
++; This file is part of GNU Pascal.
++;
++; GNU Pascal is free software; you can redistribute it and/or modify
++; it under the terms of the GNU General Public License as published by
++; the Free Software Foundation; either version 2, or (at your option)
++; any later version.
++;
++; GNU Pascal is distributed in the hope that it will be useful,
++; but WITHOUT ANY WARRANTY; without even the implied warranty of
++; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++; GNU General Public License for more details.
++;
++; You should have received a copy of the GNU General Public License
++; along with GNU Pascal; see the file COPYING.  If not, write to the
++; Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
++; 02111-1307, USA.
++
++; See c.opt for a description of this file's format.
++
++; Please try to keep this file in ASCII collating order.
++
++Language
++Pascal
++
++A
++Pascal
++Ignored
++
++D
++Pascal Joined Separate
++-D<macro>[=<val>]       Define a <macro> with <val> as its value.  If just <macro> is given, <val> is taken to be 1
++
++E
++Pascal
++Preprocess only
++
++H
++Pascal
++Print the name of include files as they are used
++
++I
++Pascal Joined Separate
++-I <dir>        Add <dir> to the end of the main include path.
++
++M
++Pascal
++Generate make dependencies
++
++MM
++Pascal
++Like -M but ignore system header files
++
++P
++Pascal
++Do not generate #line directives
++
++U
++Pascal Joined Separate
++-U<macro>       Undefine <macro>
++
++Wabsolute
++Pascal
++Warn about variables at absolute adresses and `absolute' variable with non-constant addresses (default)
++
++Wall
++Pascal
++
++
++Wcomment
++Pascal
++
++
++Wdynamic-arrays
++Pascal
++Warn about arrays whose size is determined at run time (including array slices)
++
++Werror
++Pascal
++
++
++Wfloat-equal
++Pascal
++Warn about `=' and `<>' comparisons of real numbers
++
++Widentifier-case
++Pascal
++Warn about an identifier written with varying case
++
++Widentifier-case-local
++Pascal
++Warn about an identifier written with varying case within one program/module/unit
++
++Wimplicit-abstract
++Pascal
++Warn when an object type not declared `abstract' contains an abstract method (default)
++
++Wimplicit-io
++Pascal
++Warn when `Input' or `Output' are used implicitly
++
++Winherited-abstract
++Pascal
++Warn when an abstract object type inherits from a non-abstract one (default)
++
++Winterface-file-name
++Pascal
++Warn when a unit/module interface differs from the file name
++
++Wlocal-external
++Pascal
++Warn about local `external' declarations
++
++Wmissing-declarations
++Pascal
++
++
++Wmissing-prototypes
++Pascal
++
++
++Wmixed-comments
++Pascal
++Warn about mixed comments like `{ ... *)'
++
++Wnear-far
++Pascal
++Warn about use of useless `near' or `far' directives (default)
++
++Wnested-comments
++Pascal
++Warn about nested comments like `{ { } }'
++
++Wobject-assignment
++Pascal
++Warn when when assigning objects or declaring them as value parameters or function results (default)
++
++Wpointer-arith
++Pascal
++
++
++Wsemicolon
++Pascal
++Warn about a semicolon after `then', `else' or `do' (default)
++
++Wtyped-const
++Pascal
++Warn about misuse of typed constants as initialized variables (default)
++
++Wundef
++Pascal
++
++
++Wunderscore
++Pascal
++Warn about double/leading/trailing underscores in identifiers
++
++Wwarnings
++Pascal
++Enable warnings (same as `{$W+}')
++
++Wwrite-strings
++Pascal
++
++
++famtmpfile=
++Pascal Joined RejectNegative
++(Internal switch used for automake)
++
++fassertions
++Pascal
++Enable assertion checking (default)
++
++fautobuild
++Pascal
++Automatically compile all units/modules/`{$L ...}' files and link the object files provided
++
++fautolink
++Pascal
++Automatically link object files provided by units/modules or `{$L ...}' (default)
++
++fautomake
++Pascal
++Automatically compile changed units/modules/`{$L ...}' files and link the object files provided
++
++fautomake-g++=
++Pascal Joined RejectNegative
++Set the C++ compiler invoked by automake
++
++fautomake-gcc=
++Pascal Joined RejectNegative
++Set the C compiler invoked by automake
++
++fautomake-gpc=
++Pascal Joined RejectNegative
++Set the Pascal compiler invoked by automake
++
++fbig-endian
++Pascal RejectNegative
++Tell GPC that the system is big-endian (for those targets where it can vary)
++
++fborland-objects
++Pascal RejectNegative
++Choose Borland object model
++
++fborland-pascal
++Pascal RejectNegative
++Try to emulate Borland Pascal, version 7.0
++
++fcase-value-checking
++Pascal
++Cause a runtime error if a `case' matches no branch (default in ISO Pascal modes)
++
++fcidefine=
++Pascal Joined RejectNegative
++Define a case-insensitive macro
++
++fclassic-pascal
++Pascal RejectNegative
++Reject anything besides ISO 7185 Pascal
++
++fclassic-pascal-level-0
++Pascal RejectNegative
++Reject conformant arrays and anything besides ISO 7185 Pascal
++
++fcsdefine=
++Pascal Joined RejectNegative
++Define a case-sensitive macro
++
++fcstrings-as-strings
++Pascal
++Treat CStrings as strings
++
++fdebug-automake
++Pascal RejectNegative
++(For GPC developers.) Give additional information about the actions of automake
++
++fdebug-gpi
++Pascal RejectNegative
++(For GPC developers.) Show what is written to and read from GPI files (huge output!)
++
++fdebug-source
++Pascal
++Output the source while it is processed to standard error
++
++fdebug-tree=
++Pascal Joined RejectNegative
++(For GPC developers.) Show the internal representation of a given tree node (name or address)
++
++fdelphi
++Pascal RejectNegative
++Try to emulate Borland Pascal, version 7.0, with some Delphi extensions
++
++fdelphi-comments
++Pascal
++Allow Delphi style `//' comments (default)
++
++fdelphi-method-shadowing
++Pascal
++Redefining methods silently shadows old definition (default in `--delphi')
++
++fdisable-debug-info
++Pascal RejectNegative
++Inhibit `-g' options (temporary work-around, this option may disappear in the future)
++
++fdisable-default-paths
++Pascal RejectNegative
++Do not add a default path to the unit and object path
++
++fdisable-keyword=
++Pascal Joined RejectNegative
++Disable a keyword, independently of dialect defaults
++
++fdisable-predefined-identifier=
++Pascal Joined RejectNegative
++Disable a predefined identifier, independently of dialect defaults
++
++fdouble-quoted-strings
++Pascal
++Allow strings enclosed in \"\" (default)
++
++fenable-keyword=
++Pascal Joined RejectNegative
++Enable a keyword, independently of dialect defaults
++
++fenable-predefined-identifier=
++Pascal Joined RejectNegative
++Enable a predefined identifier, independently of dialect defaults
++
++fexact-compare-strings
++Pascal
++Do not blank-pad strings for comparisons
++
++fexecutable-file-name
++Pascal RejectNegative
++Derive output file name from main source file name
++
++fexecutable-file-name=
++Pascal Joined RejectNegative
++Specify the name of the output file
++
++fexecutable-path
++Pascal
++`--no-executable-path': Create the executable file in the directory where the main source is (default)
++
++fexecutable-path=
++Pascal Joined RejectNegative
++Path where to create the executable file
++
++fextended-pascal
++Pascal RejectNegative
++Reject anything besides ISO 10206 Extended Pascal
++
++fextended-syntax
++Pascal
++same as `--ignore-function-results --pointer-arithmetic --cstrings-as-strings -Wno-absolute' (same as `{$X+}')
++
++ffield-widths
++Pascal
++Use default field widths in write statements
++
++ffield-widths=
++Pascal Joined RejectNegative
++Specify as a colon-separated list the default field widths in write statements for Integer, Real, Boolean, LongInt, LongReal
++
++fgnu-objects
++Pascal RejectNegative
++Reset object model to default state
++
++fgnu-pascal
++Pascal RejectNegative
++Undo the effect of previous dialect options, allow all features again
++
++fgpc-main=
++Pascal Joined RejectNegative
++External name for the program's entry point (default: `main')
++
++fgpi-destination-path=
++Pascal Joined RejectNegative
++(Internal switch used for automake)
++
++fignore-function-results
++Pascal
++Do not complain when a function is called like a procedure
++
++fignore-garbage-after-dot
++Pascal
++Ignore anything after the terminating `.' (default in `--borland-pascal')
++
++fignore-packed
++Pascal
++Ignore `packed' in the source code (default in `--borland-pascal')
++
++fimplementation-only
++Pascal RejectNegative
++Do not produce a GPI file; only compile the implementation part
++
++fimplicit-result
++Pascal
++Enable implicit `Result' for functions (default only in `--delphi')
++
++finit-modules=
++Pascal Joined RejectNegative
++Initialize the named modules in addition to those imported regularly; kind of a kludge
++
++finterface-only
++Pascal RejectNegative
++Compile only the interface part of a unit/module and exit (creates `.gpi' file, no `.o' file)
++
++fio-checking
++Pascal
++Check I/O operations automatically (same as `{$I+}') (default)
++
++fiso-goto-restrictions
++Pascal
++Do not allow jumps into structured instructions (default)
++
++flittle-endian
++Pascal RejectNegative
++Tell GPC that the system is little-endian (for those targets where it can vary)
++
++flongjmp-all-nonlocal-labels
++Pascal
++Use `longjmp' for all nonlocal labels (default for Darwin/PPC)
++
++fmac-objects
++Pascal RejectNegative
++Choose Mac object model
++
++fmac-pascal
++Pascal RejectNegative
++Support (some features of) traditional Macintosh Pascal compilers
++
++fmacros
++Pascal
++Expand macros (default except with `--ucsd-pascal', `--borland-pascal' or `--delphi')
++
++fmaximum-field-alignment=
++Pascal Joined RejectNegative
++Set the maximum field alignment in bits if `pack-struct' is in effect
++
++fmethods-always-virtual
++Pascal
++Make all methods virtual (default in `--mac-pascal')
++
++fmixed-comments
++Pascal
++Allow comments like `{ ... *)' as required in ISO Pascal (default in ISO 7185/10206 Pascal mode)
++
++fnested-comments
++Pascal
++Allow nested comments like `{ { } }' and `(* (* *) *)'
++
++fnonlocal-exit
++Pascal
++Allow non-local `Exit' statements (default in `--ucsd-pascal' and `--mac-pascal')
++
++fobject-checking
++Pascal
++Check for valid objects on virtual method calls (default)
++
++fobject-destination-path
++Pascal
++`--no-object-destination-path': Create additional object files (e.g. of C files, not Pascal units) in the current directory (default)
++
++fobject-destination-path=
++Pascal Joined RejectNegative
++Path where to create additional object files (e.g. of C files, not Pascal units)
++
++fobject-pascal
++Pascal RejectNegative
++Reject anything besides (the implemented parts of) ANSI draft Object Pascal
++
++fobject-path
++Pascal
++`--no-object-path': Forget about directories where to look for additional object (and source) files
++
++fobject-path=
++Pascal Joined RejectNegative
++Directories where to look for additional object (and source) files
++
++fobjects-are-references
++Pascal
++Turn objects into references (default in `--mac-pascal')
++
++fobjects-require-override
++Pascal
++Require override directive for objects (default in `--mac-pascal')
++
++fooe-objects
++Pascal RejectNegative
++Choose OOE object model
++
++fpascal-sc
++Pascal RejectNegative
++Be strict about the implemented Pascal-SC extensions
++
++fpedantic
++Pascal
++Reject everything not allowed in some dialect, e.g. redefinition of its keywords
++
++fpointer-arithmetic
++Pascal
++Enable pointer arithmetic
++
++fpointer-checking
++Pascal
++Validate pointers before dereferencing
++
++fpointer-checking-user-defined
++Pascal
++Use user-defined procedure for validating pointers
++
++fpreprocessed
++Pascal RejectNegative
++Treat the input file as already preprocessed
++
++fprint-needed-options
++Pascal RejectNegative
++Print the needed options
++
++fprogress-bar
++Pascal
++Output number of processed lines while compiling
++
++fprogress-messages
++Pascal
++Output source file names and line numbers while compiling
++
++fpropagate-units
++Pascal
++Automalically export all imported identifiers from a unit
++
++frange-and-object-checking
++Pascal
++Same as `--range-checking --object-checking', same as `{$R+}'
++
++frange-checking
++Pascal
++Do automatic range checks (default)
++
++fread-base-specifier
++Pascal
++In read statements, allow input base specifier `n#' (default)
++
++fread-hex
++Pascal
++In read statements, allow hexadecimal input with `$' (default)
++
++fread-white-space
++Pascal
++In read statements, require whitespace after numbers
++
++fsetlimit=
++Pascal Joined RejectNegative
++Define the range for `set of Integer' etc.
++
++fshort-circuit
++Pascal
++Guarantee short-circuit Boolean evaluation (default; same as `{$B-}')
++
++fstack-checking
++Pascal
++Enable stack checking (same as `{$S+}')
++
++fstandard-pascal
++Pascal RejectNegative
++Synonym for `--classic-pascal'
++
++fstandard-pascal-level-0
++Pascal RejectNegative
++Synonym for `--classic-pascal-level-0'
++
++fsun-pascal
++Pascal RejectNegative
++Support (a few features of) Sun Pascal
++
++ftransparent-file-names
++Pascal
++Derive external file names from variable names
++
++ftruncate-strings
++Pascal
++Truncate strings being assigned to other strings of too short capacity
++
++ftyped-address
++Pascal
++Make the result of the address operator typed (same as `{$T+}', default)
++
++fucsd-pascal
++Pascal RejectNegative
++Try to emulate UCSD Pascal
++
++funit-destination-path
++Pascal
++`--no-unit-destination-path': Create object and GPI files of Pascal units in the current directory (default)
++
++funit-destination-path=
++Pascal Joined RejectNegative
++Path where to create object and GPI files of Pascal units
++
++funit-path
++Pascal
++`--no-unit-path': Forget about directories where to look for unit/module sources
++
++funit-path=
++Pascal Joined RejectNegative
++Directories where to look for unit/module sources
++
++fuses=
++Pascal Joined RejectNegative
++Add an implicit `uses' clause
++
++fvax-pascal
++Pascal RejectNegative
++Support (a few features of) VAX Pascal
++
++fwrite-capital-exponent
++Pascal
++Write real exponents with a capital `E'
++
++fwrite-clip-strings
++Pascal
++In write statements, truncate strings exceeding their field width (`Write (SomeLongString : 3)')
++
++fwrite-real-blank
++Pascal
++Output a blank in front of positive reals in exponential form (default)
++
++idirafter
++Pascal Joined Separate
++`-idirafter <dir>'    Add <dir> to the end of the system include path
++
++imacros
++Pascal Joined Separate
++-imacros <file> Accept definition of macros in <file>
++
++include
++Pascal Joined Separate
++-include <file> Include the contents of <file> before other files
++
++iprefix
++Pascal Joined Separate
++-iprefix <path> Specify <path> as a prefix for next two options
++
++isystem
++Pascal Joined Separate
++-isystem <dir>  Add <dir> to the start of the system include path
++
++iwithprefix
++Pascal Joined Separate
++-iwithprefix <dir>      Add <dir> to the end of the system include path
++
++iwithprefixbefore
++Pascal Joined Separate
++-iwithprefixbefore <dir>        Add <dir> to the end of the main include path
++
++nostdinc
++Pascal
++Do not search standard system include directories (those specified with -isystem will still be used)
++
++remap
++Pascal
++Remap file names when including files
++
++v
++Pascal
++Enable verbose output
++
++; This comment is to ensure we retain the blank line above.
+new file mode 100644
+--- /dev/null
++++ b/src/gcc/p/p-version.h
+@@ -0,0 +1,7 @@
++/* Generated automatically by the Makefile.
++   DO NOT CHANGE THIS FILE MANUALLY! */
++
++#define GPC_MAJOR "2"
++#define GPC_MINOR "1"
++#define GPC_VERSION_STRING "20060325"
++#define GPC_RELEASE_STRING GPC_VERSION_STRING
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-library-project-files-soname.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-library-project-files-soname.diff
@@ -0,0 +1,77 @@
+# DP: - in project files, use the exact Library_Version provided, if any, as
+# DP:   the soname of libraries; do not strip minor version numbers
+# DP:   (PR ada/40025).
+
+Index: b/src/gcc/ada/mlib-tgt-specific-linux.adb
+===================================================================
+--- a/src/gcc/ada/mlib-tgt-specific-linux.adb
++++ b/src/gcc/ada/mlib-tgt-specific-linux.adb
+@@ -50,6 +50,8 @@
+ 
+    function Is_Archive_Ext (Ext : String) return Boolean;
+ 
++   function Library_Major_Minor_Id_Supported return Boolean;
++
+    ---------------------------
+    -- Build_Dynamic_Library --
+    ---------------------------
+@@ -142,7 +144,18 @@
+       return Ext = ".a" or else Ext = ".so";
+    end Is_Archive_Ext;
+ 
++   --------------------------------------
++   -- Library_Major_Minor_Id_Supported --
++   --------------------------------------
++
++   function Library_Major_Minor_Id_Supported return Boolean is
++   begin
++      return False;
++   end Library_Major_Minor_Id_Supported;
++
+ begin
+    Build_Dynamic_Library_Ptr := Build_Dynamic_Library'Access;
+    Is_Archive_Ext_Ptr := Is_Archive_Ext'Access;
++   Library_Major_Minor_Id_Supported_Ptr :=
++                                Library_Major_Minor_Id_Supported'Access;
+ end MLib.Tgt.Specific;
+Index: b/src/gcc/ada/mlib.adb
+===================================================================
+--- a/src/gcc/ada/mlib.adb
++++ b/src/gcc/ada/mlib.adb
+@@ -31,6 +31,7 @@
+ with Opt;
+ with Output; use Output;
+ 
++with Mlib.Tgt;
+ with MLib.Utl; use MLib.Utl;
+ 
+ with Prj.Com;
+@@ -384,7 +385,7 @@
+    -- Major_Id_Name --
+    -------------------
+ 
+-   function Major_Id_Name
++   function Major_Id_Name_If_Supported
+      (Lib_Filename : String;
+       Lib_Version  : String)
+       return String
+@@ -438,6 +439,19 @@
+       else
+          return "";
+       end if;
++   end Major_Id_Name_If_Supported;
++
++   function Major_Id_Name
++     (Lib_Filename : String;
++      Lib_Version  : String)
++      return String
++   is
++   begin
++      if Mlib.Tgt.Library_Major_Minor_Id_Supported then
++         return Major_Id_Name_If_Supported (Lib_Filename, Lib_Version);
++      else
++         return "";
++      end if;
+    end Major_Id_Name;
+ 
+ --  Package elaboration
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-d-lang.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-d-lang.diff
@@ -0,0 +1,252 @@
+# DP: Add D options and specs for the gcc driver.
+
+---
+ gcc/d/lang-specs.h |   60 +++++++++++++++++
+ gcc/d/lang.opt     |  176 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 236 insertions(+), 0 deletions(-)
+ create mode 100644 gcc/d/lang-specs.h
+ create mode 100644 gcc/d/lang.opt
+
+new file mode 100644
+--- /dev/null
++++ b/src/gcc/d/lang.opt	2010-08-19 19:00:10.000000000 +0100
+@@ -0,0 +1,176 @@
++; GDC -- D front-end for GCC
++; Copyright (C) 2004 David Friedman
++;   
++; This program is free software; you can redistribute it and/or modify
++; it under the terms of the GNU General Public License as published by
++; the Free Software Foundation; either version 2 of the License, or
++; (at your option) any later version.
++; 
++; This program is distributed in the hope that it will be useful,
++; but WITHOUT ANY WARRANTY; without even the implied warranty of
++; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++; GNU General Public License for more details.
++; 
++; You should have received a copy of the GNU General Public License
++; along with this program; if not, write to the Free Software
++; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++
++; This is used in GCC 3.4+
++
++Language
++D
++
++I
++D Joined Separate
++-I <dir>	Add <dir> to the end of the main include path.
++
++J
++D Joined Separate
++-J <dir>	Add <dir> to the end of the string import path.
++
++fdeprecated
++D
++Allow use of deprecated features
++
++fassert
++D
++Generate runtime code for assert()'s
++
++frelease
++D
++Compile release version
++
++funittest
++D
++Compile in unittest code
++
++fversion=
++D Joined RejectNegative
++-fversion=<level|ident> Compile in version code >= <level> or identified by <ident>
++
++fdebug=
++D Joined RejectNegative
++-fdebug,-fdebug=<level>,-fdebug=<ident> Compile in debug code, code <= level, or code identified by ident
++
++fdebug
++D
++Compile in debug code
++
++fdebug-c
++D
++With -g, generate C debug information for debugger compatibility
++
++fdeps=
++D Joined RejectNegative
++-fdeps=<filename> Write module dependencies to filename
++
++fd-verbose
++D
++Print information about D language processing to stdout
++
++fd-version=1
++D RejectNegative
++Compile as D language version 1
++
++femit-templates=
++D Joined RejectNegative
++-femit-templates=[normal|private|all|none|auto]	Control template emission
++
++femit-templates
++D
++-femit-templates Emit templates code and data even if the linker cannot merge multiple copies
++
++nostdinc
++D
++Do not search standard system include directories
++
++fonly=
++D Joined RejectNegative
++Process all modules specified on the command line, but only generate code for the module specified by the argument.
++
++fod=
++D Joined RejectNegative
++-fod=<directory> Specify the object output directory. Note: this is actually a driver option; the backend ignores it.
++
++fop
++D
++Specify that the source file's parent directories should be appended to the object output directory. Note: this is actually a driver option; the backend ignores it.
++
++fignore-unknown-pragmas
++D
++Ignore unsupported pragmas
++
++fintfc
++Generate D interface files
++
++fintfc-dir=
++D Joined RejectNegative
++-fintfc-dir=<dir> Write D interface files to directory <dir>
++
++fintfc-file=
++D Joined RejectNegative
++-fintfc-file=<filename> Write D interface file to <filename>
++
++fdoc
++D
++Generate documentation
++
++fdoc-dir=
++D Joined RejectNegative
++-fdoc-dir=<docdir> Write documentation file to docdir directory
++
++fdoc-file=
++D Joined RejectNegative
++-fdoc-file=<filename> Write documentation file to filename
++
++fdoc-inc=
++D Joined RejectNegative
++-fdoc-inc=<filename> Include a Ddoc macro file
++
++fmultilib-dir=
++D Joined RejectNegative
++-fmultilib-dir=<dir> Select header multilib subdirectory
++
++Wsign-compare
++D
++Warn about signed-unsigned comparisons
++
++fdump-source
++D RejectNegative
++Dump decoded UTF-8 text and source from HTML
++
++fbuiltin
++D
++Recognize built-in functions
++
++funsigned-char
++D
++Make \"char\" unsigned by default (silently ignored in D)
++
++fsigned-char
++D
++Make \"char\" signed by default (silently ignored in D)
++
++iprefix
++D Joined Separate
++-iprefix <path>	Specify <path> as a prefix for next two options
++
++isysroot
++D Joined Separate
++-isysroot <dir>	Set <dir> to be the system root directory
++
++isystem
++D Joined Separate
++-isystem <dir>	Add <dir> to the start of the system include path
++
++Wall
++D
++Enable most warning messages
++
++Werror
++D
++Error out the compiler on warnings
++
++fXf=
++D Joined RejectNegative
++-fXf=<filename> Write JSON file to <filename>
+--- /dev/null
++++ b/src/gcc/d/lang-specs.h	2010-08-01 14:45:55.000000000 +0100
+@@ -0,0 +1,60 @@
++/* GDC -- D front-end for GCC
++   Copyright (C) 2004 David Friedman
++   
++   This program is free software; you can redistribute it and/or modify
++   it under the terms of the GNU General Public License as published by
++   the Free Software Foundation; either version 2 of the License, or
++   (at your option) any later version.
++ 
++   This program is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++   GNU General Public License for more details.
++ 
++   You should have received a copy of the GNU General Public License
++   along with this program; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++*/
++
++#ifndef D_D_SPEC
++#define D_D_SPEC 0
++#endif
++
++/* %{!M} probably doesn't make sense because we would need
++   to do that -- -MD and -MMD doesn't sound like a plan for D.... */
++
++/* %(d_options) ? */
++
++#if GCC_SPEC_FORMAT_4
++#define D_D_SPEC_REST 0, 1, 0
++#else
++#define D_D_SPEC_REST 0
++#endif
++
++#if D_DRIVER_ONLY
++#define D_USE_EXTRA_SPEC_FUNCTIONS 1
++{".html", "@d", D_D_SPEC_REST },
++{".HTML", "@d", D_D_SPEC_REST },
++{".htm", "@d", D_D_SPEC_REST },
++{".HTM", "@d", D_D_SPEC_REST },
++{".xhtml", "@d", D_D_SPEC_REST },
++{".XHTML", "@d", D_D_SPEC_REST },
++{".d", "@d", D_D_SPEC_REST },
++{".D", "@d", D_D_SPEC_REST },
++{".dd", "@d", D_D_SPEC_REST },
++{".DD", "@d", D_D_SPEC_REST },
++{".di", "@d", D_D_SPEC_REST },
++{".DI", "@d", D_D_SPEC_REST },
++{"@d",
++     "%{!E:cc1d %i %:d-all-sources() %(cc1_options) %(cc1d) %I %N %{nostdinc*} %{+e*} %{I*} %{J*}\
++      %{M} %{MM} %{!fsyntax-only:%(invoke_as)}}", D_D_SPEC_REST },
++#else
++{".d", "@d", D_D_SPEC_REST },
++{".D", "@d", D_D_SPEC_REST },
++{".di", "@d", D_D_SPEC_REST },
++{".DI", "@d", D_D_SPEC_REST },
++{"@d",
++     "%{!E:cc1d %i %(cc1_options) %(cc1d) %I %N %{nostdinc*} %{+e*} %{I*} %{J*}\
++      %{M} %{MM} %{!fsyntax-only:%(invoke_as)}}", D_D_SPEC_REST },
++#endif
++
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr25509-doc.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr25509-doc.diff
@@ -0,0 +1,47 @@
+# DP: Backport of PR c/25509, new option -Wno-unused-result (documentation)
+
+gcc/
+
+2009-07-10  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+	PR 25509
+	PR 40614
+	* c.opt (Wunused-result): New.
+	* doc/invoke.texi: Document it.
+	* c-common.c (c_warn_unused_result): Use it.
+
+gcc/testsuite/
+
+2009-07-10  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+	PR 25509
+	PR 40614
+	* g++.dg/warn/unused-result1-Werror.c: New.
+
+Index: gcc/doc/invoke.texi
+===================================================================
+--- a/src/gcc/doc/invoke.texi	(revision 149591)
++++ b/src/gcc/doc/invoke.texi	(working copy)
+@@ -260,7 +260,7 @@
+ -Wsystem-headers  -Wtrigraphs  -Wtype-limits  -Wundef  -Wuninitialized @gol
+ -Wunknown-pragmas  -Wno-pragmas -Wunreachable-code @gol
+ -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter @gol
+--Wunused-value  -Wunused-variable @gol
++-Wno-unused-result -Wunused-value  -Wunused-variable @gol
+ -Wvariadic-macros -Wvla @gol
+ -Wvolatile-register-var  -Wwrite-strings}
+ 
+@@ -3193,6 +3193,13 @@
+ To suppress this warning use the @samp{unused} attribute
+ (@pxref{Variable Attributes}).
+ 
++@item -Wno-unused-result
++@opindex Wunused-result
++@opindex Wno-unused-result
++Do not warn if a caller of a function marked with attribute
++@code{warn_unused_result} (@pxref{Variable Attributes}) does not use
++its return value. The default is @option{-Wunused-result}.
++
+ @item -Wunused-variable
+ @opindex Wunused-variable
+ @opindex Wno-unused-variable
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/cell-branch-linaro.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/cell-branch-linaro.diff
@@ -0,0 +1,9096 @@
+diff -urNp gcc-4.4.4.orig/ChangeLog.cell gcc-4.4.4/ChangeLog.cell
+--- a/src/ChangeLog.cell	1970-01-01
++++ b/src/ChangeLog.cell	2010-06-30
+@@ -0,0 +1,651 @@
++2010-05-17  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Update to gcc-4_4-branch revision 159486.
++
++2010-04-07  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Update to gcc-4_4-branch revision 158036.
++
++2009-12-07  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-05-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	* c-typeck.c (build_binary_op): Allow % on integal vectors.
++	* doc/extend.texi (Vector Extension): Document that % is allowed too.
++
++gcc/cp/
++	2009-05-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	* typeck.c (build_binary_op): Allow % on integal vectors.
++
++gcc/testsuite/
++	2009-05-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	* gcc.dg/vector-4.c: New testcase.
++	* gcc.dg/simd-1b.c: % is now allowed for integer vectors.
++	* g++.dg/ext/vector16.C: New testcase.
++
++2009-12-07  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-04-22  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR C/31499
++	* c-typeck.c (process_init_element): Treat VECTOR_TYPE like ARRAY_TYPE
++	and RECORD_TYPE/UNION_TYPE.  When outputing the actual element and the
++	value is a VECTOR_CST, the element type is the element type of the
++	vector.
++
++gcc/testsuite/
++	2009-04-22  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR C/31499
++	* gcc.dg/vector-init-1.c: New testcase.
++	* gcc.dg/vector-init-2.c: New testcase.
++
++2009-12-07  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Update to gcc-4_4-branch revision 155038.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-12-03  Ken Werner  <ken.werner@de.ibm.com>
++
++	* config/spu/spu-elf.h (STARTFILE_SPEC): Add support for gprof
++	startup files.
++	* config/spu/spu-protos.h (spu_function_profiler): Add prototype.
++	* config/spu/spu.c (spu_function_profiler): New function.
++	* config/spu/spu.h (FUNCTION_PROFILER): Invoke
++	spu_function_profiler.
++	(NO_PROFILE_COUNTERS): Define.
++	(PROFILE_BEFORE_PROLOGUE): Likewise.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-12-02  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	PR middle-end/42224
++	* tree.h (int_or_pointer_precision): Remove.
++	* tree.c (int_or_pointer_precision): Remove.
++	(integer_pow2p): Use TYPE_PRECISION instead.
++	(tree_log2): Likewise.
++	(tree_floor_log2): Likewise.
++	(signed_or_unsigned_type_for): Likewise.
++	* fold-const.c (fit_double_type): Likewise.
++	* varasm.c (initializer_constant_valid_p): Likewise.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-11-17  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	PR tree-optimization/41857
++	* tree-ssa-address.c (move_hint_to_base): Use void pointer to
++	TYPE's address space instead of pointer to TYPE.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-11-17  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* reload.c (find_reloads_address): Fix typo.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-11-02  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	PR tree-optimization/41857
++	* tree-flow.h (rewrite_use_address): Add BASE_HINT argument.
++	* tree-ssa-loop-ivopts.c (rewrite_use_address): Pass base hint
++	to create_mem_ref.
++	* tree-ssa-address.c (move_hint_to_base): New function.
++	(most_expensive_mult_to_index): Add TYPE argument.  Use mode and
++	address space associated with TYPE.
++	(addr_to_parts): Add TYPE and BASE_HINT arguments.  Pass TYPE to
++	most_expensive_mult_to_index.  Call move_hint_to_base.
++	(create_mem_ref): Add BASE_HINT argument.  Pass BASE_HINT and
++	TYPE to addr_to_parts.
++
++gcc/testsuite/
++	2009-11-02  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	PR tree-optimization/41857
++	* gcc.target/spu/ea/pr41857.c: New file.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/testsuite/
++	2009-10-26  Ben Elliston  <bje@au.ibm.com>
++		    Michael Meissner  <meissner@linux.vnet.ibm.com>
++		    Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* gcc.target/spu/ea/ea.exp: New file.
++	* gcc.target/spu/ea/cache1.c: Likewise.
++	* gcc.target/spu/ea/cast1.c: Likewise.
++	* gcc.target/spu/ea/cast2.c: Likewise.
++	* gcc.target/spu/ea/compile1.c: Likewise.
++	* gcc.target/spu/ea/compile2.c: Likewise.
++	* gcc.target/spu/ea/cppdefine.c: Likewise.
++	* gcc.target/spu/ea/errors1.c: Likewise.
++	* gcc.target/spu/ea/errors2.c: Likewise.
++	* gcc.target/spu/ea/execute1.c: Likewise.
++	* gcc.target/spu/ea/execute2.c: Likewise.
++	* gcc.target/spu/ea/execute3.c: Likewise.
++	* gcc.target/spu/ea/ops1.c: Likewise.
++	* gcc.target/spu/ea/ops2.c: Likewise.
++	* gcc.target/spu/ea/options1.c: Likewise.
++	* gcc.target/spu/ea/test-sizes.c: Likewise.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-10-26  Ben Elliston  <bje@au.ibm.com>
++		    Michael Meissner  <meissner@linux.vnet.ibm.com>
++		    Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* config.gcc (spu-*-elf*): Add spu_cache.h to extra_headers.
++	* config/spu/spu_cache.h: New file.
++
++	* config/spu/cachemgr.c: New file.
++	* config/spu/cache.S: New file.
++
++	* config/spu/spu.h (ASM_OUTPUT_SYMBOL_REF): Define.
++	(ADDR_SPACE_EA): Define.
++	(TARGET_ADDR_SPACE_KEYWORDS): Define.
++	* config/spu/spu.c (EAmode): New macro.
++	(TARGET_ADDR_SPACE_POINTER_MODE): Define.
++	(TARGET_ADDR_SPACE_ADDRESS_MODE): Likewise.
++	(TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P): Likewise.
++	(TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS): Likewise.
++	(TARGET_ADDR_SPACE_SUBSET_P): Likewise.
++	(TARGET_ADDR_SPACE_CONVERT): Likewise.
++	(TARGET_ASM_SELECT_SECTION): Likewise.
++	(TARGET_ASM_UNIQUE_SECTION): Likewise.
++	(TARGET_ASM_UNALIGNED_SI_OP): Likewise.
++	(TARGET_ASM_ALIGNED_DI_OP): Likewise.
++	(ea_symbol_ref): New function.
++	(spu_legitimate_constant_p): Handle __ea qualified addresses.
++	(spu_legitimate_address): Likewise.
++	(spu_addr_space_legitimate_address_p): New function.
++	(spu_addr_space_legitimize_address): Likewise.
++	(cache_fetch): New global.
++	(cache_fetch_dirty): Likewise.
++	(ea_alias_set): Likewise.
++	(ea_load_store): New function.
++	(ea_load_store_inline): Likewise.
++	(expand_ea_mem): Likewise.
++	(spu_expand_mov): Handle __ea qualified memory references.
++	(spu_addr_space_pointer_mode): New function.
++	(spu_addr_space_address_mode): Likewise.
++	(spu_addr_space_subset_p): Likewise.
++	(spu_addr_space_convert): Likewise.
++	(spu_section_type_flags): Handle "._ea" section.
++	(spu_select_section): New function.
++	(spu_unique_section): Likewise.
++	* config/spu/spu-c.c (spu_cpu_cpp_builtins): Support __EA32__
++	and __EA64__ predefined macros.
++	* config/spu/spu-elf.h (LIB_SPEC): Handle -mcache-size= and
++	-matomic-updates switches.
++
++	* config/spu/t-spu-elf (MULTILIB_OPTIONS): Define.
++	(EXTRA_MULTILIB_PARTS): Add libgcc_cachemgr.a,
++	libgcc_cachemgr_nonatomic.a, libgcc_cache8k.a, libgcc_cache16k.a,
++	libgcc_cache32k.a, libgcc_cache64k.a, libgcc_cache128k.a.
++	($(T)cachemgr.o, $(T)cachemgr_nonatomic.o): New target.
++	($(T)cache8k.o, $(T)cache16k.o, $(T)cache32k.o, $(T)cache64k.o,
++	$(T)cache128k.o): Likewise.
++	($(T)libgcc_%.a): Likewise.
++
++	* config/spu/spu.h (TARGET_DEFAULT): Add MASK_ADDRESS_SPACE_CONVERSION.
++	* config/spu/spu.opt (-mea32/-mea64): Add switches.
++	(-maddress-space-conversion): Likewise.
++	(-mcache-size=): Likewise.
++	(-matomic-updates): Likewise.
++	* doc/invoke.texi (-mea32/-mea64): Document.
++	(-maddress-space-conversion): Likewise.
++	(-mcache-size=): Likewise.
++	(-matomic-updates): Likewise.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-10-26  Ben Elliston  <bje@au.ibm.com>
++		    Michael Meissner  <meissner@linux.vnet.ibm.com>
++		    Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* doc/tm.texi (TARGET_ADDR_SPACE_KEYWORDS): Document.
++
++	* c-common.c (c_common_reswords): If TARGET_ADDR_SPACE_KEYWORDS is
++	defined, add the named address space keywords.
++	(c_addr_space_name): New function.
++	(complete_array_type): Preserve named address space.
++	(handle_mode_attribute): Use targetm.addr_space.valid_pointer_mode
++	instead of targetm.valid_pointer_mode.
++
++	* c-common.h (enum rid): Add RID_ADDR_SPACE_0 .. RID_ADDR_SPACE_15,
++	RID_FIRST_ADDR_SPACE and RID_LAST_ADDR_SPACE.
++	(ADDR_SPACE_KEYWORD): New macro.
++	(c_addr_space_name): Add prototype.
++
++	* c-tree.h (struct c_declspecs): Add address_space member.
++	(declspecs_add_addrspace): Add prototype.
++
++	* c-pretty-print.c (pp_c_type_qualifier_list): Handle address spaces.
++
++	* c-parser.c (c_parse_init): Add assertion.
++	(typedef enum c_id_kind): Add C_ID_ADDRSPACE.
++	(c_lex_one_token): Handle address space keywords.
++	(c_token_starts_typename): Likewise.
++	(c_token_starts_declspecs): Likewise.
++	(c_parser_declspecs): Likewise.
++	(c_parser_postfix_expression_after_paren_type): Diagnose compound
++	literal within function qualified with named address space.
++
++	* c-decl.c (diagnose_mismatched_decls): Diagnose conflicting named
++	address space qualifiers.
++	(shadow_tag_warned): Warn about useless address space qualifiers.
++	(quals_from_declspecs): Handle address space qualifiers.
++	(grokdeclarator): Likewise.
++	(build_null_declspecs): Likewise.
++	(declspecs_add_addrspace): New function.
++
++	* c-typeck.c (addr_space_superset): New function.
++	(qualify_type): Handle named address spaces.
++	(composite_type): Likewise.
++	(common_pointer_type): Likewise.
++	(comp_target_types): Likewise.
++	(build_conditional_expr): Likewise.
++	(build_c_cast): Likewise.
++	(convert_for_assignment): Likewise.
++	(build_binary_op): Likewise.
++	(pointer_diff): Handle named address spaces.  Use intermediate
++	integer type of sufficient size if required.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-10-26  Ben Elliston  <bje@au.ibm.com>
++		    Michael Meissner  <meissner@linux.vnet.ibm.com>
++		    Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* doc/tm.texi (TARGET_ADDR_SPACE_POINTER_MODE): Document.
++	(TARGET_ADDR_SPACE_ADDRESS_MODE): Likewise.
++	(TARGET_ADDR_SPACE_VALID_POINTER_MODE): Likewise.
++
++	* target.h (struct target_def): Add pointer_mode, address_mode,
++	and valid_pointer_mode to addr_space substructure.
++	* target-def.h (TARGET_ADDR_SPACE_POINTER_MODE): Define.
++	(TARGET_ADDR_SPACE_ADDRESS_MODE): Likewise.
++	(TARGET_ADDR_SPACE_VALID_POINTER_MODE): Likewise.
++	(TARGET_ADDR_SPACE_HOOKS): Add them.
++	* targhooks.c (target_default_pointer_address_modes_p): New function.
++	* target.h (target_default_pointer_address_modes_p): Add prototype.
++	* targhooks.c (default_addr_space_pointer_mode): New function.
++	(default_addr_space_address_mode): Likewise.
++	(default_addr_space_valid_pointer_mode): Likewise.
++	* targhooks.h (default_addr_space_pointer_mode): Add prototype.
++	(default_addr_space_address_mode): Likewise.
++	(default_addr_space_valid_pointer_mode): Likewise.
++	* output.h (default_valid_pointer_mode): Move to ...
++	* targhooks.h (default_valid_pointer_mode): ... here.
++	* varasm.c (default_valid_pointer_mode): Move to ...
++	* targhooks.c (default_valid_pointer_mode): ... here.
++
++	* varasm.c (output_constant): Use targetm.addr_space.valid_pointer_mode
++	instead of targetm.valid_pointer_mode.
++
++	* fold-const.c (fit_double_type): Use int_or_pointer_precision.
++	* tree.c (integer_pow2p): Likewise.
++	(tree_log2): Likewise.
++	(tree_floor_log2): Likewise.
++	(signed_or_unsigned_type_for): Support pointer type of different size.
++	(int_or_pointer_precision): New function.
++	* tree.h (int_or_pointer_precision): Add prototype.
++	* stor-layout.c (layout_type): Set TYPE_PRECISION for offset types.
++	* varasm.c (initializer_constant_valid_p): Use TYPE_PRECISION of
++	incoming pointer type instead of POINTER_SIZE.
++
++	* tree.c (build_pointer_type): Use appropriate pointer mode
++	instead of ptr_mode.
++	(build_reference_type): Likewise.
++	* expr.c (store_expr): Likewise.
++	(expand_expr_addr_expr): Likewise.
++	* cfgexpand.c (expand_debug_expr): Likewise.
++	
++	* auto-inc-dec.c: Include "target.h".
++	(try_merge): Use appropriate address mode instead of Pmode.
++	(find_inc): Likewise.
++	* combine.c (find_split_point): Likewise.
++	* cselib.c (cselib_record_sets): Likewise.
++	* dse.c (replace_inc_dec): Likewise.
++	(canon_address): Likewise.
++	(count_uses): Likewise.
++	(add_uses): Likewise.
++	(add_stores): Likewise.
++	* emit-rtl.c: Include "target.h".
++	(adjust_address_1): Use appropriate address mode instead of Pmode.
++	(offset_address): Likewise.
++	* explow.c (break_out_memory_refs): Likewise.
++	(memory_address_addr_space): Likewise.
++	(promote_mode): Likewise.
++	* expr.c (move_by_pieces): Likewise.
++	(emit_block_move_via_loop): Likewise.
++	(store_by_pieces): Likewise.
++	(store_by_pieces_1): Likewise.
++	(expand_assignment): Likewise.
++	(store_constructor): Likewise.
++	(expand_expr_addr_expr): Likewise.
++	(expand_expr_real_1): Likewise.
++	* cfgexpand.c (expand_debug_expr): Likewise.
++	* ifcvt.c (noce_try_cmove_arith): Likewise.
++	* regrename.c (kill_autoinc_value): Likewise.
++	* regmove.c (try_auto_increment): Likewise.
++	* reload.c (find_reloads): Likewise.
++	(find_reloads_address): Likewise.
++	(find_reloads_address_1): Likewise.
++	* sched-deps.c: Include "target.h".
++	(sched_analyze_1): Use appropriate address mode instead of Pmode.
++	(sched_analyze_2): Likewise.
++	* sel-sched-dump.c: Include "target.h".
++	(debug_mem_addr_value): Use appropriate address mode instead of Pmode.
++	* stor-layout.c (layout_type): Likewise.
++	* tree-ssa-loop-ivopts.c (produce_memory_decl_rtl): Likewise.
++	(multiplier_allowed_in_address_p): Likewise.
++	(get_address_cost): Likewise.
++	* varasm.c (make_decl_rtl): Likewise.
++	
++	* expr.c (expand_assignment): Always convert offsets to appropriate
++	address mode.
++	(store_expr): Likewise.
++	(store_constructor): Likewise.
++	(expand_expr_real_1): Likewise.
++
++	* reload.h (form_sum): Add MODE argument.
++	* reload.c (form_sum): Add MODE argument, use it instead of Pmode.
++	Update recursive calls.
++	(subst_indexed_address): Update calls to form_sum.
++	
++	* tree-flow.h (addr_for_mem_ref): Add ADDRSPACE argument.
++	* tree-ssa-address.c: Include "target.h".
++	(templates): Replace by ...
++	(mem_addr_template_list): ... this new vector.
++	(TEMPL_IDX): Handle address space numbers.
++	(gen_addr_rtx): Add address mode argument, use it instead of Pmode.
++	(addr_for_mem_ref): Add ADDRSPACE argument.  Use per-address-space
++	instead of global cache.  Update call to gen_addr_rtx.
++	(valid_mem_ref_p): Update call to addr_for_mem_ref.
++	* expr.c (expand_expr_real_1): Update call to addr_for_mem_ref.
++	
++	* rtl.h (convert_memory_address_addr_space): Add prototype.
++	(convert_memory_address): Define as macro.
++	* explow.c (convert_memory_address): Rename to ...
++	(convert_memory_address_addr_space): ... this.  Add ADDRSPACE argument.
++	Use appropriate pointer and address modes instead of ptr_mode / Pmode.
++	Update recursive calls.
++	(memory_address_addr_space): Call convert_memory_address_addr_space.
++	* expmed.c (make_tree): Likewise.
++	* expr.c (expand_assignment): Likewise.
++	(expand_expr_addr_expr_1): Likewise.  Also, add ADDRSPACE argument.
++	(expand_expr_addr_expr): Likewise.  Also, update call.
++
++	* alias.c (find_base_value): Guard pointer size optimizations.
++	(find_base_term): Likewise.
++	* rtlanal.c (nonzero_bits1): Likewise.
++	(num_sign_bit_copies1): Likewise.
++	* simplify-rtx.c (simplify_unary_operation_1): Likewise.
++
++	* Makefile.in (tree-ssa-address.o): Add $(TARGET_H) dependency.
++	(emit-rtl.o): Likewise.
++	(auto-inc-dec.o): Likewise.
++	(sched-deps.o): Likewise.
++
++	2009-08-24  Olivier Hainque  <hainque@adacore.com>
++
++	* convert.c (convert_to_integer): Don't assume an input pointer is
++	POINTER_SIZE wide.  Fetch from the type instead.
++
++	2009-07-27  Olivier Hainque  <hainque@adacore.com>
++		    Douglas B Rupp  <rupp@gnat.com>
++
++	* convert.c (convert_to_pointer): Don't assume the target
++	pointer type is POINTER_SIZE long. Fetch its precision instead.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-10-26  Ben Elliston  <bje@au.ibm.com>
++		    Michael Meissner  <meissner@linux.vnet.ibm.com>
++		    Ulrich Weigand  <uweigand@de.ibm.com>
++
++	* doc/extend.texi (Named Address Spaces): New section.
++	* coretypes.h (addr_space_t): New type.
++	(ADDR_SPACE_GENERIC): New define.
++	(ADDR_SPACE_GENERIC_P): New macro.
++
++	* doc/tm.texi (Named Address Spaces): New section.
++	(TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P): Document.
++	(TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS): Document.
++	(TARGET_ADDR_SPACE_SUBSET_P): Document.
++	(TARGET_ADDR_SPACE_CONVERT): Document.
++	* target.h (struct gcc_target): Add addr_space substructure.
++	* target-def.h (TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P): Define.
++	(TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS): Likewise.
++	(TARGET_ADDR_SPACE_SUBSET_P): Likewise.
++	(TARGET_ADDR_SPACE_CONVERT): Likewise.
++	(TARGET_ADDR_SPACE_HOOKS): Likewise.
++	(TARGET_INITIALIZER): Initialize addr_space hooks.
++	* targhooks.c (default_addr_space_legitimate_address_p): New function.
++	(default_addr_space_legitimize_address): Likewise.
++	(default_addr_space_subset_p): Likewise.
++	(default_addr_space_convert): Likewise.
++	* targhooks.h (default_addr_space_legitimate_address_p): Add prototype.
++	(default_addr_space_legitimize_address): Likewise.
++	(default_addr_space_subset_p): Likewise.
++	(default_addr_space_convert): Likewise.
++
++	* doc/rtl.texi (MEM_ADDR_SPACE): Document.
++	* rtl.h (mem_attrs): Add ADDRSPACE memory attribute.
++	(MEM_ADDR_SPACE): New macro.
++	* emit-rtl.c (get_mem_attrs): Add ADDRSPACE argument and set
++	address space memory attribute.
++	(mem_attrs_htab_hash): Handle address space memory attribute.
++	(mem_attrs_htab_eq): Likewise.
++	(set_mem_attributes_minus_bitpos): Likewise.
++	(set_mem_attrs_from_reg): Likewise.
++	(set_mem_alias_set): Likewise.
++	(set_mem_align): Likewise.
++	(set_mem_expr): Likewise.
++	(set_mem_offset): Likewise.
++	(set_mem_size): Likewise.
++	(adjust_address_1): Likewise.
++	(offset_address): Likewise.
++	(widen_memoy_address): Likewise.
++	(get_spill_slot_decl): Likewise.
++	(set_mem_attrs_for_spill): Likewise.
++	(set_mem_addr_space): New function.
++	* emit-rtl.h (set_mem_addr_space): Add prototype.
++	* print-rtl.c (print_rtx): Print address space memory attribute.
++	* expr.c (expand_expr_real_1): Set address space memory attribute
++	of generated MEM RTXes as appropriate.
++	* tree-ssa-loop-ivopts.c (produce_memory_decl_rtl): Likewise.
++
++	* tree.h (struct tree_base): Add address_space bitfield.  Reduce
++	size of "spare" bitfield.
++	(TYPE_ADDR_SPACE): New macro.
++	(ENCODE_QUAL_ADDR_SPACE): Likewise.
++	(DECODE_QUAL_ADDR_SPACE): Likewise.
++	(CLEAR_QUAL_ADDR_SPACE): Likewise.
++	(KEEP_QUAL_ADDR_SPACE): Likewise.
++	(TYPE_QUALS): Encode type address space.
++	(TYPE_QUALS_NO_ADDR_SPACE): New macro.
++	* tree.c (set_type_quals): Set type address space.
++	(build_array_type): Inherit array address space from element type.
++	* print-tree.c (print_node_brief): Print type address space.
++	(print_node): Likewise.
++	* tree-pretty-print.c (dump_generic_node): Likewise.
++
++	* explow.c (memory_address): Rename to ...
++	(memory_address_addr_space): ... this.  Add ADDRSPACE argument.
++	Use address-space aware variants of memory address routines.
++	* recog.c (memory_address_p): Rename to ...
++	(memory_address_addr_space_p): ... this.  Add ADDSPACE argument.
++	Use address-space aware variants of memory address routines.
++	(offsettable_address_p): Rename to ...
++	(offsettable_address_addr_space_p): ... this.  Add ADDRSPACE argument.
++	Use address-space aware variants of memory address routines.
++	* reload.c (strict_memory_address_p): Rename to ...
++	(strict_memory_address_addr_space_p): ... this.  Add ADDSPACE argument.
++	Use address-space aware variants of memory address routines.
++	(maybe_memory_address_p): Rename to ...
++	(maybe_memory_address_addr_space_p): ... this.  Add ADDSPACE argument.
++	Use address-space aware variants of memory address routines.
++	* expr.h (memory_address_addr_space): Add prototype.
++	(memory_address): Define as macro.
++	* recog.h (memory_address_addr_space_p): Add prototype.
++	(memory_address_p): Define as macro.
++	(offsettable_address_addr_space_p): Add prototype.
++	(offsettable_address_p): Define as macro.
++	(strict_memory_address_addr_space_p): Add prototype.
++	(strict_memory_address_p): Define as macro.
++
++	* combine.c (find_split_point): Use address-space aware variants
++	of memory address routines.
++	* emit-rtl.c (operand_subword): Likewise.
++	(change_address_1): Likewise.
++	(adjust_address_1): Likewise.
++	(offset_address): Likewise.
++	* expr.c (emit_move_insn): Likewise.
++	(expand_expr_real_1): Likewise.
++	* recog.c (verify_changes): Likewise.
++	(general_operand): Likewise.
++	(offsettable_memref_p): Likewise.
++	(offsettable_nonstrict_memref_p): Likewise.
++	(constrain_operands): Likewise.
++	* reload.c (get_secondary_mem): Likewise.
++	(find_reloads_toplev): Likewise.
++	(find_reloads_address): Likewise.
++	(find_reloads_subreg_address): Likewise.
++	* reload1.c (reload): Likewise.
++	* rtlhooks.c (gen_lowpart_if_possible): Likewise.
++	* rtl.h (address_cost): Add ADDRSPACE argument.
++	* rtlanal.c (address_cost): Add ADDRSPACE argument.  Use address-space
++	aware variant of memory address routines.
++	* tree-ssa-loop-ivopts.c (computation_cost): Update address_cost call.
++	* fwprop.c (should_replace_address): Add ADDRSPACE argument.
++	Use address-space aware variant of memory address routines.
++	(propagate_rtx_1): Update call to should_replace_address.
++	* tree-flow.h (multiplier_allowed_in_address_p): Add ADDRSPACE
++	argument.
++	* tree-ssa-loop-ivopts.c (multiplier_allowed_in_address_p): Add
++	ADDRSPACE argument.  Use per-address-space instead of global cache.
++	Use address-space aware variant of memory address routines.
++	(get_address_cost): Likewise.
++	(get_computation_cost_at): Update calls.
++	* tree-ssa-address.c (valid_mem_ref_p): Add ADDRSPACE argument.
++	Use address-space aware variant of memory address routines.
++	(create_mem_ref_raw): Update call to valid_mem_ref_p.
++	(most_expensive_mult_to_index): Update call to
++	multiplier_allowed_in_address_p.
++
++	* dwarf2out.c (modified_type_die): Output DW_AT_address_class
++	attribute to indicate named address spaces.
++
++	* varasm.c (get_variable_section): DECLs in named address spaces
++	cannot be "common".
++
++	* reload.c (find_reloads_address): Do not use LEGITIMIZE_RELOAD_ADDRESS
++	for addresses in a non-generic address space.
++
++	* expr.c (emit_block_move_hints): Do not use libcalls for
++	memory in non-generic address spaces.
++	(clear_storage_hints): Likewise.
++	(expand_assignment): Likewise.
++
++	* fold-const.c (operand_equal_p): Expressions refering to different
++	address spaces are not equivalent.
++
++	* rtl.c (rtx_equal_p_cb): MEMs refering to different address
++	spaces are not equivalent.
++	(rtx_equal_p): Likewise.
++	* cse.c (exp_equiv_p): Likewise.
++	* jump.c (rtx_renumbered_equal_p): Likewise.
++	* reload.c (operands_match_p): Likewise.
++
++	* alias.c (nonoverlapping_memrefs_p): MEMs refering to different
++	address spaces may alias.
++	(true_dependence): Likewise.
++	(canon_true_dependence): Likewise.
++	(write_dependence_p): Likewise.
++
++	* dse.c (canon_address): Handle named address spaces.
++	* ifcvt.c (noce_try_cmove_arith): Likewise.
++
++	* tree.def (ADDR_SPACE_CONVERT_EXPR): New tree code.
++	* expr.c (expand_expr_real_1): Expand ADDR_SPACE_CONVERT_EXPR.
++	* convert.c (convert_to_pointer): Generate ADDR_SPACE_CONVERT_EXPR
++	to handle conversions between different address spaces.
++	* fold-const.c (fold_convert_loc): Likewise.
++	(fold_unary_loc): Handle ADDR_SPACE_CONVERT_EXPR.
++	* tree-pretty-print.c (dump_generic_node): Likewise.
++	* gimple-pretty-print.c (dump_unary_rhs): Likewise.
++	* tree-cfg.c (verify_gimple_assign_unary): Likewise.
++	* tree-inline.c (estimate_operator_cost): Likewise.
++	* tree-ssa.c (useless_type_conversion_p): Conversions between pointers
++	to different address spaces are not useless.
++	(useless_type_conversion_p_1): Likewise.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++gcc/
++	2009-08-14  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* c-lex.c (c_lex_with_flags): Increase size of local variable
++	to avoid memory clobber.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	Backport from mainline:
++
++libgfortran/
++	2009-04-17  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* configure.ac: Test for -ffunction-sections -fdata-sections and
++	set SECTION_FLAGS accordingly.
++	* configure: Regenerate.
++
++	* Makefile.am: Add SECTION_FLAGS to AM_CFLAGS.
++	* Makefile.in: Regenerate.
++
++2009-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* Created "cell-4_4-branch".
+diff -urNp gcc-4.4.4.orig/gcc/alias.c gcc-4.4.4/gcc/alias.c
+--- a/src/gcc/alias.c	2010-06-30
++++ b/src/gcc/alias.c	2010-06-30
+@@ -1000,6 +1000,11 @@ find_base_value (rtx src)
+       return 0;
+ 
+     case TRUNCATE:
++      /* As we do not know which address space the pointer is refering to, we can
++	 handle this only if the target does not support different pointer or
++	 address modes depending on the address space.  */
++      if (!target_default_pointer_address_modes_p ())
++	break;
+       if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode))
+ 	break;
+       /* Fall through.  */
+@@ -1014,6 +1019,12 @@ find_base_value (rtx src)
+ 
+     case ZERO_EXTEND:
+     case SIGN_EXTEND:	/* used for NT/Alpha pointers */
++      /* As we do not know which address space the pointer is refering to, we can
++	 handle this only if the target does not support different pointer or
++	 address modes depending on the address space.  */
++      if (!target_default_pointer_address_modes_p ())
++	break;
++
+       {
+ 	rtx temp = find_base_value (XEXP (src, 0));
+ 
+@@ -1406,6 +1417,11 @@ find_base_term (rtx x)
+       return REG_BASE_VALUE (x);
+ 
+     case TRUNCATE:
++      /* As we do not know which address space the pointer is refering to, we can
++	 handle this only if the target does not support different pointer or
++	 address modes depending on the address space.  */
++      if (!target_default_pointer_address_modes_p ())
++	return 0;
+       if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (Pmode))
+ 	return 0;
+       /* Fall through.  */
+@@ -1420,6 +1436,12 @@ find_base_term (rtx x)
+ 
+     case ZERO_EXTEND:
+     case SIGN_EXTEND:	/* Used for Alpha/NT pointers */
++      /* As we do not know which address space the pointer is refering to, we can
++	 handle this only if the target does not support different pointer or
++	 address modes depending on the address space.  */
++      if (!target_default_pointer_address_modes_p ())
++	return 0;
++
+       {
+ 	rtx temp = find_base_term (XEXP (x, 0));
+ 
+@@ -2120,6 +2142,13 @@ nonoverlapping_memrefs_p (const_rtx x, c
+       && ! rtx_equal_p (rtlx, rtly))
+     return 1;
+ 
++  /* If we have MEMs refering to different address spaces (which can
++     potentially overlap), we cannot easily tell from the addresses
++     whether the references overlap.  */
++  if (MEM_P (rtlx) && MEM_P (rtly)
++      && MEM_ADDR_SPACE (rtlx) != MEM_ADDR_SPACE (rtly))
++    return 0;
++
+   /* Get the base and offsets of both decls.  If either is a register, we
+      know both are and are the same, so use that as the base.  The only
+      we can avoid overlap is if we can deduce that they are nonoverlapping
+@@ -2211,6 +2240,12 @@ true_dependence (const_rtx mem, enum mac
+   if (nonoverlapping_memrefs_p (mem, x))
+     return 0;
+ 
++  /* If we have MEMs refering to different address spaces (which can
++     potentially overlap), we cannot easily tell from the addresses
++     whether the references overlap.  */
++  if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
++    return 1;
++
+   if (mem_mode == VOIDmode)
+     mem_mode = GET_MODE (mem);
+ 
+@@ -2296,6 +2331,12 @@ canon_true_dependence (const_rtx mem, en
+   if (nonoverlapping_memrefs_p (x, mem))
+     return 0;
+ 
++  /* If we have MEMs refering to different address spaces (which can
++     potentially overlap), we cannot easily tell from the addresses
++     whether the references overlap.  */
++  if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
++    return 1;
++
+   if (! x_addr)
+     {
+       x_addr = XEXP (x, 0);
+@@ -2366,6 +2407,12 @@ write_dependence_p (const_rtx mem, const
+   if (nonoverlapping_memrefs_p (x, mem))
+     return 0;
+ 
++  /* If we have MEMs refering to different address spaces (which can
++     potentially overlap), we cannot easily tell from the addresses
++     whether the references overlap.  */
++  if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
++    return 1;
++
+   x_addr = XEXP (x, 0);
+   mem_addr = XEXP (mem, 0);
+   if (!((GET_CODE (x_addr) == VALUE
+diff -urNp gcc-4.4.4.orig/gcc/auto-inc-dec.c gcc-4.4.4/gcc/auto-inc-dec.c
+--- a/src/gcc/auto-inc-dec.c	2009-02-20
++++ b/src/gcc/auto-inc-dec.c	2010-06-30
+@@ -40,6 +40,7 @@ along with GCC; see the file COPYING3.  
+ #include "tree-pass.h"
+ #include "df.h"
+ #include "dbgcnt.h"
++#include "target.h"
+ 
+ /* This pass was originally removed from flow.c. However there is
+    almost nothing that remains of that code.
+@@ -651,6 +652,7 @@ try_merge (void)
+   /* The width of the mem being accessed.  */
+   int size = GET_MODE_SIZE (GET_MODE (mem));
+   rtx last_insn = NULL;
++  enum machine_mode reg_mode = GET_MODE (inc_reg);
+ 
+   switch (inc_insn.form)
+     {
+@@ -705,33 +707,33 @@ try_merge (void)
+     case SIMPLE_PRE_INC:     /* ++size  */
+       if (dump_file)
+ 	fprintf (dump_file, "trying SIMPLE_PRE_INC\n");
+-      return attempt_change (gen_rtx_PRE_INC (Pmode, inc_reg), inc_reg);
++      return attempt_change (gen_rtx_PRE_INC (reg_mode, inc_reg), inc_reg);
+       break;
+       
+     case SIMPLE_POST_INC:    /* size++  */
+       if (dump_file)
+ 	fprintf (dump_file, "trying SIMPLE_POST_INC\n");
+-      return attempt_change (gen_rtx_POST_INC (Pmode, inc_reg), inc_reg);
++      return attempt_change (gen_rtx_POST_INC (reg_mode, inc_reg), inc_reg);
+       break;
+       
+     case SIMPLE_PRE_DEC:     /* --size  */
+       if (dump_file)
+ 	fprintf (dump_file, "trying SIMPLE_PRE_DEC\n");
+-      return attempt_change (gen_rtx_PRE_DEC (Pmode, inc_reg), inc_reg);
++      return attempt_change (gen_rtx_PRE_DEC (reg_mode, inc_reg), inc_reg);
+       break;
+       
+     case SIMPLE_POST_DEC:    /* size--  */
+       if (dump_file)
+ 	fprintf (dump_file, "trying SIMPLE_POST_DEC\n");
+-      return attempt_change (gen_rtx_POST_DEC (Pmode, inc_reg), inc_reg);
++      return attempt_change (gen_rtx_POST_DEC (reg_mode, inc_reg), inc_reg);
+       break;
+       
+     case DISP_PRE:           /* ++con   */
+       if (dump_file)
+ 	fprintf (dump_file, "trying DISP_PRE\n");
+-      return attempt_change (gen_rtx_PRE_MODIFY (Pmode, 
++      return attempt_change (gen_rtx_PRE_MODIFY (reg_mode,
+ 						 inc_reg,
+-						 gen_rtx_PLUS (Pmode,
++						 gen_rtx_PLUS (reg_mode,
+ 							       inc_reg,
+ 							       inc_insn.reg1)),
+ 			     inc_reg);
+@@ -740,9 +742,9 @@ try_merge (void)
+     case DISP_POST:          /* con++   */
+       if (dump_file)
+ 	fprintf (dump_file, "trying POST_DISP\n");
+-      return attempt_change (gen_rtx_POST_MODIFY (Pmode,
++      return attempt_change (gen_rtx_POST_MODIFY (reg_mode,
+ 						  inc_reg,
+-						  gen_rtx_PLUS (Pmode,
++						  gen_rtx_PLUS (reg_mode,
+ 								inc_reg,
+ 								inc_insn.reg1)),
+ 			     inc_reg);
+@@ -751,9 +753,9 @@ try_merge (void)
+     case REG_PRE:            /* ++reg   */
+       if (dump_file)
+ 	fprintf (dump_file, "trying PRE_REG\n");
+-      return attempt_change (gen_rtx_PRE_MODIFY (Pmode, 
++      return attempt_change (gen_rtx_PRE_MODIFY (reg_mode,
+ 						 inc_reg,
+-						 gen_rtx_PLUS (Pmode,
++						 gen_rtx_PLUS (reg_mode,
+ 							       inc_reg,
+ 							       inc_insn.reg1)),
+ 			     inc_reg);
+@@ -762,9 +764,9 @@ try_merge (void)
+     case REG_POST:            /* reg++   */
+       if (dump_file)
+ 	fprintf (dump_file, "trying POST_REG\n");
+-      return attempt_change (gen_rtx_POST_MODIFY (Pmode, 
++      return attempt_change (gen_rtx_POST_MODIFY (reg_mode,
+ 						  inc_reg,
+-						  gen_rtx_PLUS (Pmode,
++						  gen_rtx_PLUS (reg_mode,
+ 								inc_reg,
+ 								inc_insn.reg1)),
+ 			     inc_reg);
+@@ -1127,7 +1129,9 @@ find_inc (bool first_try)
+ 		     we are going to increment the result of the add insn.
+ 		     For this trick to be correct, the result reg of
+ 		     the inc must be a valid addressing reg.  */
+-		  if (GET_MODE (inc_insn.reg_res) != Pmode)
++		  addr_space_t as = MEM_ADDR_SPACE (*mem_insn.mem_loc);
++		  if (GET_MODE (inc_insn.reg_res)
++		      != targetm.addr_space.address_mode (as))
+ 		    {
+ 		      if (dump_file)
+ 			fprintf (dump_file, "base reg mode failure.\n");
+@@ -1176,7 +1180,9 @@ find_inc (bool first_try)
+ 	{
+ 	  /* For this trick to be correct, the result reg of the inc
+ 	     must be a valid addressing reg.  */
+-	  if (GET_MODE (inc_insn.reg_res) != Pmode)
++	  addr_space_t as = MEM_ADDR_SPACE (*mem_insn.mem_loc);
++	  if (GET_MODE (inc_insn.reg_res)
++	      != targetm.addr_space.address_mode (as))
+ 	    {
+ 	      if (dump_file)
+ 		fprintf (dump_file, "base reg mode failure.\n");
+diff -urNp gcc-4.4.4.orig/gcc/c-common.c gcc-4.4.4/gcc/c-common.c
+--- a/src/gcc/c-common.c	2010-06-30
++++ b/src/gcc/c-common.c	2010-06-30
+@@ -754,6 +754,11 @@ const struct c_common_resword c_common_r
+   { "inout",		RID_INOUT,		D_OBJC },
+   { "oneway",		RID_ONEWAY,		D_OBJC },
+   { "out",		RID_OUT,		D_OBJC },
++
++#ifdef TARGET_ADDR_SPACE_KEYWORDS
++  /* Any address space keywords recognized by the target.  */
++  TARGET_ADDR_SPACE_KEYWORDS,
++#endif
+ };
+ 
+ const unsigned int num_c_common_reswords =
+@@ -882,6 +887,19 @@ const struct attribute_spec c_common_for
+   { NULL,                     0, 0, false, false, false, NULL }
+ };
+ 
++/* Return identifier for address space AS.  */
++const char *
++c_addr_space_name (addr_space_t as)
++{
++  unsigned int i;
++
++  for (i = 0; i < num_c_common_reswords; i++)
++    if (c_common_reswords[i].rid == RID_FIRST_ADDR_SPACE + as)
++      return c_common_reswords[i].word;
++
++  gcc_unreachable ();
++}
++
+ /* Push current bindings for the function name VAR_DECLS.  */
+ 
+ void
+@@ -5781,9 +5799,10 @@ handle_mode_attribute (tree *node, tree 
+ 
+       if (POINTER_TYPE_P (type))
+ 	{
++	  addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (type));
+ 	  tree (*fn)(tree, enum machine_mode, bool);
+ 
+-	  if (!targetm.valid_pointer_mode (mode))
++	  if (!targetm.addr_space.valid_pointer_mode (mode, as))
+ 	    {
+ 	      error ("invalid pointer mode %qs", p);
+ 	      return NULL_TREE;
+@@ -7874,7 +7893,7 @@ complete_array_type (tree *ptype, tree i
+   if (quals == 0)
+     unqual_elt = elt;
+   else
+-    unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
++    unqual_elt = c_build_qualified_type (elt, KEEP_QUAL_ADDR_SPACE (quals));
+ 
+   /* Using build_distinct_type_copy and modifying things afterward instead
+      of using build_array_type to create a new type preserves all of the
+diff -urNp gcc-4.4.4.orig/gcc/c-common.h gcc-4.4.4/gcc/c-common.h
+--- a/src/gcc/c-common.h	2010-06-30
++++ b/src/gcc/c-common.h	2010-06-30
+@@ -119,6 +119,30 @@ enum rid
+   RID_AT_INTERFACE,
+   RID_AT_IMPLEMENTATION,
+ 
++  /* Named address support, mapping the keyword to a particular named address
++     number.  Named address space 0 is reserved for the generic address.  If
++     there are more than 254 named addresses, the addr_space_t type will need
++     to be grown from an unsigned char to unsigned short.  */
++  RID_ADDR_SPACE_0,		/* generic address */
++  RID_ADDR_SPACE_1,
++  RID_ADDR_SPACE_2,
++  RID_ADDR_SPACE_3,
++  RID_ADDR_SPACE_4,
++  RID_ADDR_SPACE_5,
++  RID_ADDR_SPACE_6,
++  RID_ADDR_SPACE_7,
++  RID_ADDR_SPACE_8,
++  RID_ADDR_SPACE_9,
++  RID_ADDR_SPACE_10,
++  RID_ADDR_SPACE_11,
++  RID_ADDR_SPACE_12,
++  RID_ADDR_SPACE_13,
++  RID_ADDR_SPACE_14,
++  RID_ADDR_SPACE_15,
++
++  RID_FIRST_ADDR_SPACE = RID_ADDR_SPACE_0,
++  RID_LAST_ADDR_SPACE = RID_ADDR_SPACE_15,
++
+   RID_MAX,
+ 
+   RID_FIRST_MODIFIER = RID_STATIC,
+@@ -228,6 +252,10 @@ struct c_common_resword
+ #define D_CXX_OBJC	0x100	/* In Objective C, and C++, but not C.  */
+ #define D_CXXWARN	0x200	/* In C warn with -Wcxx-compat.  */
+ 
++/* Macro for backends to define named address keywords.  */
++#define ADDR_SPACE_KEYWORD(STRING, VALUE) \
++  { STRING, RID_FIRST_ADDR_SPACE + (VALUE), D_CONLY | D_EXT }
++
+ /* The reserved keyword table.  */
+ extern const struct c_common_resword c_common_reswords[];
+ 
+@@ -690,6 +718,7 @@ extern const struct attribute_spec c_com
+ 
+ extern tree (*make_fname_decl) (tree, int);
+ 
++extern const char *c_addr_space_name (addr_space_t as);
+ extern tree identifier_global_value (tree);
+ extern void record_builtin_type (enum rid, const char *, tree);
+ extern tree build_void_list_node (void);
+diff -urNp gcc-4.4.4.orig/gcc/c-decl.c gcc-4.4.4/gcc/c-decl.c
+--- a/src/gcc/c-decl.c	2010-06-30
++++ b/src/gcc/c-decl.c	2010-06-30
+@@ -1249,8 +1249,35 @@ diagnose_mismatched_decls (tree newdecl,
+ 	}
+       else
+ 	{
+-	  if (TYPE_QUALS (newtype) != TYPE_QUALS (oldtype))
+-	    error ("conflicting type qualifiers for %q+D", newdecl);
++	  int new_quals = TYPE_QUALS (newtype);
++	  int old_quals = TYPE_QUALS (oldtype);
++
++	  if (new_quals != old_quals)
++	    {
++	      addr_space_t new_addr = DECODE_QUAL_ADDR_SPACE (new_quals);
++	      addr_space_t old_addr = DECODE_QUAL_ADDR_SPACE (old_quals);
++	      if (new_addr != old_addr)
++		{
++		  if (ADDR_SPACE_GENERIC_P (new_addr))
++		    error ("conflicting named address spaces (generic vs %s) "
++			   "for %q+D",
++			   c_addr_space_name (old_addr), newdecl);
++		  else if (ADDR_SPACE_GENERIC_P (old_addr))
++		    error ("conflicting named address spaces (%s vs generic) "
++			   "for %q+D",
++			   c_addr_space_name (new_addr), newdecl);
++		  else
++		    error ("conflicting named address spaces (%s vs %s) "
++			   "for %q+D",
++			   c_addr_space_name (new_addr),
++			   c_addr_space_name (old_addr),
++			   newdecl);
++		}
++
++	      if (CLEAR_QUAL_ADDR_SPACE (new_quals)
++		  != CLEAR_QUAL_ADDR_SPACE (old_quals))
++		error ("conflicting type qualifiers for %q+D", newdecl);
++	    }
+ 	  else
+ 	    error ("conflicting types for %q+D", newdecl);
+ 	  diagnose_arglist_conflict (newdecl, olddecl, newtype, oldtype);
+@@ -2922,7 +2949,8 @@ shadow_tag_warned (const struct c_declsp
+ 	  else if (!declspecs->tag_defined_p
+ 		   && (declspecs->const_p
+ 		       || declspecs->volatile_p
+-		       || declspecs->restrict_p))
++		       || declspecs->restrict_p
++		       || declspecs->address_space))
+ 	    {
+ 	      if (warned != 1)
+ 		pedwarn (input_location, 0,
+@@ -2993,7 +3021,8 @@ shadow_tag_warned (const struct c_declsp
+ 
+   if (!warned && !in_system_header && (declspecs->const_p
+ 				       || declspecs->volatile_p
+-				       || declspecs->restrict_p))
++				       || declspecs->restrict_p
++				       || declspecs->address_space))
+     {
+       warning (0, "useless type qualifier in empty declaration");
+       warned = 2;
+@@ -3016,7 +3045,8 @@ quals_from_declspecs (const struct c_dec
+ {
+   int quals = ((specs->const_p ? TYPE_QUAL_CONST : 0)
+ 	       | (specs->volatile_p ? TYPE_QUAL_VOLATILE : 0)
+-	       | (specs->restrict_p ? TYPE_QUAL_RESTRICT : 0));
++	       | (specs->restrict_p ? TYPE_QUAL_RESTRICT : 0)
++	       | (ENCODE_QUAL_ADDR_SPACE (specs->address_space)));
+   gcc_assert (!specs->type
+ 	      && !specs->decl_attr
+ 	      && specs->typespec_word == cts_none
+@@ -4002,6 +4032,7 @@ grokdeclarator (const struct c_declarato
+   bool bitfield = width != NULL;
+   tree element_type;
+   struct c_arg_info *arg_info = 0;
++  addr_space_t as1, as2, address_space;
+   const char *errmsg;
+ 
+   if (decl_context == FUNCDEF)
+@@ -4103,6 +4134,10 @@ grokdeclarator (const struct c_declarato
+   constp = declspecs->const_p + TYPE_READONLY (element_type);
+   restrictp = declspecs->restrict_p + TYPE_RESTRICT (element_type);
+   volatilep = declspecs->volatile_p + TYPE_VOLATILE (element_type);
++  as1 = declspecs->address_space;
++  as2 = TYPE_ADDR_SPACE (element_type);
++  address_space = ADDR_SPACE_GENERIC_P (as1)? as2 : as1;
++
+   if (pedantic && !flag_isoc99)
+     {
+       if (constp > 1)
+@@ -4112,11 +4147,17 @@ grokdeclarator (const struct c_declarato
+       if (volatilep > 1)
+ 	pedwarn (input_location, OPT_pedantic, "duplicate %<volatile%>");
+     }
++
++  if (!ADDR_SPACE_GENERIC_P (as1) && !ADDR_SPACE_GENERIC_P (as2) && as1 != as2)
++    error ("conflicting named address spaces (%s vs %s)",
++	   c_addr_space_name (as1), c_addr_space_name (as2));
++
+   if (!flag_gen_aux_info && (TYPE_QUALS (element_type)))
+     type = TYPE_MAIN_VARIANT (type);
+   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
+ 		| (restrictp ? TYPE_QUAL_RESTRICT : 0)
+-		| (volatilep ? TYPE_QUAL_VOLATILE : 0));
++		| (volatilep ? TYPE_QUAL_VOLATILE : 0)
++		| ENCODE_QUAL_ADDR_SPACE (address_space));
+ 
+   /* Warn about storage classes that are invalid for certain
+      kinds of declarations (parameters, typenames, etc.).  */
+@@ -4460,7 +4501,14 @@ grokdeclarator (const struct c_declarato
+ 	       it, but here we want to make sure we don't ever
+ 	       modify the shared type, so we gcc_assert (itype)
+ 	       below.  */
+-	      type = build_array_type (type, itype);
++	      {
++		addr_space_t as = DECODE_QUAL_ADDR_SPACE (type_quals);
++		if (!ADDR_SPACE_GENERIC_P (as) && as != TYPE_ADDR_SPACE (type))
++		  type = build_qualified_type (type,
++					       ENCODE_QUAL_ADDR_SPACE (as));
++
++		type = build_array_type (type, itype);
++	      }
+ 
+ 	    if (type != error_mark_node)
+ 	      {
+@@ -4656,6 +4704,59 @@ grokdeclarator (const struct c_declarato
+   /* Now TYPE has the actual type, apart from any qualifiers in
+      TYPE_QUALS.  */
+ 
++  /* Warn about address space used for things other than static memory or
++     pointers.  */
++  address_space = DECODE_QUAL_ADDR_SPACE (type_quals);
++  if (!ADDR_SPACE_GENERIC_P (address_space))
++    {
++      if (decl_context == NORMAL)
++	{
++	  switch (storage_class)
++	    {
++	    case csc_auto:
++	      error ("%qs combined with %<auto%> qualifier for %qs",
++		     c_addr_space_name (address_space), name);
++	      break;
++	    case csc_register:
++	      error ("%qs combined with %<register%> qualifier for %qs",
++		     c_addr_space_name (address_space), name);
++	      break;
++	    case csc_none:
++	      if (current_function_scope)
++		{
++		  error ("%qs specified for auto variable %qs",
++			 c_addr_space_name (address_space), name);
++		  break;
++		}
++	      break;
++	    case csc_static:
++	    case csc_extern:
++	    case csc_typedef:
++	      break;
++	    default:
++	      gcc_unreachable ();
++	    }
++	}
++      else if (decl_context == PARM && TREE_CODE (type) != ARRAY_TYPE)
++	{
++	  if (orig_name)
++	    error ("%qs specified for parameter %qs",
++		   c_addr_space_name (address_space), name);
++	  else
++	    error ("%qs specified for unnamed parameter",
++		   c_addr_space_name (address_space));
++	}
++      else if (decl_context == FIELD)
++	{
++	  if (orig_name)
++	    error ("%qs specified for structure field %qs",
++		   c_addr_space_name (address_space), name);
++	  else
++	    error ("%qs specified for structure field",
++		   c_addr_space_name (address_space));
++	}
++    }
++
+   /* Check the type and width of a bit-field.  */
+   if (bitfield)
+     check_bitfield_type_and_width (&type, width, orig_name);
+@@ -7188,9 +7289,29 @@ build_null_declspecs (void)
+   ret->volatile_p = false;
+   ret->restrict_p = false;
+   ret->saturating_p = false;
++  ret->address_space = ADDR_SPACE_GENERIC;
+   return ret;
+ }
+ 
++/* Add the address space ADDRSPACE to the declaration specifiers
++   SPECS, returning SPECS.  */
++
++struct c_declspecs *
++declspecs_add_addrspace (struct c_declspecs *specs, addr_space_t as)
++{
++  specs->non_sc_seen_p = true;
++  specs->declspecs_seen_p = true;
++
++  if (!ADDR_SPACE_GENERIC_P (specs->address_space)
++      && specs->address_space != as)
++    error ("incompatible address space qualifiers %qs and %qs",
++	   c_addr_space_name (as),
++	   c_addr_space_name (specs->address_space));
++  else
++    specs->address_space = as;
++  return specs;
++}
++
+ /* Add the type qualifier QUAL to the declaration specifiers SPECS,
+    returning SPECS.  */
+ 
+diff -urNp gcc-4.4.4.orig/gcc/c-lex.c gcc-4.4.4/gcc/c-lex.c
+--- a/src/gcc/c-lex.c	2008-08-21
++++ b/src/gcc/c-lex.c	2010-06-30
+@@ -390,7 +390,7 @@ c_lex_with_flags (tree *value, location_
+     case CPP_HASH:
+     case CPP_PASTE:
+       {
+-	unsigned char name[4];
++	unsigned char name[8];
+ 
+ 	*cpp_spell_token (parse_in, tok, name, true) = 0;
+ 
+diff -urNp gcc-4.4.4.orig/gcc/combine.c gcc-4.4.4/gcc/combine.c
+--- a/src/gcc/combine.c	2010-03-22
++++ b/src/gcc/combine.c	2010-06-30
+@@ -3890,9 +3890,12 @@ find_split_point (rtx *loc, rtx insn)
+       if (GET_CODE (XEXP (x, 0)) == CONST
+ 	  || GET_CODE (XEXP (x, 0)) == SYMBOL_REF)
+ 	{
++	  enum machine_mode address_mode
++	    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (x));
++
+ 	  SUBST (XEXP (x, 0),
+-		 gen_rtx_LO_SUM (Pmode,
+-				 gen_rtx_HIGH (Pmode, XEXP (x, 0)),
++		 gen_rtx_LO_SUM (address_mode,
++				 gen_rtx_HIGH (address_mode, XEXP (x, 0)),
+ 				 XEXP (x, 0)));
+ 	  return &XEXP (XEXP (x, 0), 0);
+ 	}
+@@ -3905,7 +3908,8 @@ find_split_point (rtx *loc, rtx insn)
+ 	 it will not remain in the result.  */
+       if (GET_CODE (XEXP (x, 0)) == PLUS
+ 	  && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
+-	  && ! memory_address_p (GET_MODE (x), XEXP (x, 0)))
++	  && ! memory_address_addr_space_p (GET_MODE (x), XEXP (x, 0),
++					    MEM_ADDR_SPACE (x)))
+ 	{
+ 	  rtx reg = regno_reg_rtx[FIRST_PSEUDO_REGISTER];
+ 	  rtx seq = combine_split_insns (gen_rtx_SET (VOIDmode, reg,
+@@ -3928,8 +3932,9 @@ find_split_point (rtx *loc, rtx insn)
+ 	      && NONJUMP_INSN_P (NEXT_INSN (seq))
+ 	      && GET_CODE (PATTERN (NEXT_INSN (seq))) == SET
+ 	      && SET_DEST (PATTERN (NEXT_INSN (seq))) == reg
+-	      && memory_address_p (GET_MODE (x),
+-				   SET_SRC (PATTERN (NEXT_INSN (seq)))))
++	      && memory_address_addr_space_p
++		   (GET_MODE (x), SET_SRC (PATTERN (NEXT_INSN (seq))),
++		    MEM_ADDR_SPACE (x)))
+ 	    {
+ 	      rtx src1 = SET_SRC (PATTERN (seq));
+ 	      rtx src2 = SET_SRC (PATTERN (NEXT_INSN (seq)));
+@@ -3968,7 +3973,8 @@ find_split_point (rtx *loc, rtx insn)
+       /* If we have a PLUS whose first operand is complex, try computing it
+          separately by making a split there.  */
+       if (GET_CODE (XEXP (x, 0)) == PLUS
+-          && ! memory_address_p (GET_MODE (x), XEXP (x, 0))
++          && ! memory_address_addr_space_p (GET_MODE (x), XEXP (x, 0),
++					    MEM_ADDR_SPACE (x))
+           && ! OBJECT_P (XEXP (XEXP (x, 0), 0))
+           && ! (GET_CODE (XEXP (XEXP (x, 0), 0)) == SUBREG
+                 && OBJECT_P (SUBREG_REG (XEXP (XEXP (x, 0), 0)))))
+diff -urNp gcc-4.4.4.orig/gcc/config/spu/cachemgr.c gcc-4.4.4/gcc/config/spu/cachemgr.c
+--- a/src/gcc/config/spu/cachemgr.c	1970-01-01
++++ b/src/gcc/config/spu/cachemgr.c	2010-06-30
+@@ -0,0 +1,438 @@
++/* Copyright (C) 2008, 2009 Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 3, or (at your option) any later
++version.
++
++GCC is distributed in the hope that it will be useful, but WITHOUT ANY
++WARRANTY; without even the implied warranty of MERCHANTABILITY or
++FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++for more details.
++
++Under Section 7 of GPL version 3, you are granted additional
++permissions described in the GCC Runtime Library Exception, version
++3.1, as published by the Free Software Foundation.
++
++You should have received a copy of the GNU General Public License and
++a copy of the GCC Runtime Library Exception along with this program;
++see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
++<http://www.gnu.org/licenses/>.  */
++
++#include <spu_mfcio.h>
++#include <spu_internals.h>
++#include <spu_intrinsics.h>
++#include <spu_cache.h>
++
++extern unsigned long long __ea_local_store;
++extern char __cache_tag_array_size;
++
++#define LINE_SIZE 128
++#define TAG_MASK (LINE_SIZE - 1)
++
++#define WAYS 4
++#define SET_MASK ((int) &__cache_tag_array_size - LINE_SIZE)
++
++#define CACHE_LINES ((int) &__cache_tag_array_size /		\
++		     sizeof (struct __cache_tag_array) * WAYS)
++
++struct __cache_tag_array
++{
++  unsigned int tag_lo[WAYS];
++  unsigned int tag_hi[WAYS];
++  void *base[WAYS];
++  int reserved[WAYS];
++  vector unsigned short dirty_bits[WAYS];
++};
++
++extern struct __cache_tag_array __cache_tag_array[];
++extern char __cache[];
++
++/* In order to make the code seem a little cleaner, and to avoid having
++   64/32 bit ifdefs all over the place, we use macros.  */
++
++#ifdef __EA64__
++typedef unsigned long long addr;
++
++#define CHECK_TAG(_entry, _way, _tag)			\
++  ((_entry)->tag_lo[(_way)] == ((_tag) & 0xFFFFFFFF)	\
++   && (_entry)->tag_hi[(_way)] == ((_tag) >> 32))
++
++#define GET_TAG(_entry, _way) \
++  ((unsigned long long)(_entry)->tag_hi[(_way)] << 32	\
++   | (unsigned long long)(_entry)->tag_lo[(_way)])
++
++#define SET_TAG(_entry, _way, _tag)			\
++  (_entry)->tag_lo[(_way)] = (_tag) & 0xFFFFFFFF;	\
++  (_entry)->tag_hi[(_way)] = (_tag) >> 32
++
++#else /*__EA32__*/
++typedef unsigned long addr;
++
++#define CHECK_TAG(_entry, _way, _tag)			\
++  ((_entry)->tag_lo[(_way)] == (_tag))
++
++#define GET_TAG(_entry, _way)				\
++  ((_entry)->tag_lo[(_way)])
++
++#define SET_TAG(_entry, _way, _tag)			\
++  (_entry)->tag_lo[(_way)] = (_tag)
++
++#endif
++
++/* In GET_ENTRY, we cast away the high 32 bits,
++   as the tag is only in the low 32.  */
++
++#define GET_ENTRY(_addr)						   \
++  ((struct __cache_tag_array *)						   \
++   si_to_uint (si_a (si_and (si_from_uint ((unsigned int) (addr) (_addr)), \
++			     si_from_uint (SET_MASK)),			   \
++	       si_from_uint ((unsigned int) __cache_tag_array))))
++
++#define GET_CACHE_LINE(_addr, _way) \
++  ((void *) (__cache + ((_addr) & SET_MASK) * WAYS) + ((_way) * LINE_SIZE));
++
++#define CHECK_DIRTY(_vec) (si_to_uint (si_orx ((qword) (_vec))))
++#define SET_EMPTY(_entry, _way) ((_entry)->tag_lo[(_way)] = 1)
++#define CHECK_EMPTY(_entry, _way) ((_entry)->tag_lo[(_way)] == 1)
++
++#define LS_FLAG 0x80000000
++#define SET_IS_LS(_entry, _way) ((_entry)->reserved[(_way)] |= LS_FLAG)
++#define CHECK_IS_LS(_entry, _way) ((_entry)->reserved[(_way)] & LS_FLAG)
++#define GET_LRU(_entry, _way) ((_entry)->reserved[(_way)] & ~LS_FLAG)
++
++static int dma_tag = 32;
++
++static void
++__cache_evict_entry (struct __cache_tag_array *entry, int way)
++{
++  addr tag = GET_TAG (entry, way);
++
++  if (CHECK_DIRTY (entry->dirty_bits[way]) && !CHECK_IS_LS (entry, way))
++    {
++#ifdef NONATOMIC
++      /* Non-atomic writes.  */
++      unsigned int oldmask, mach_stat;
++      char *line = ((void *) 0);
++
++      /* Enter critical section.  */
++      mach_stat = spu_readch (SPU_RdMachStat);
++      spu_idisable ();
++
++      /* Issue DMA request.  */
++      line = GET_CACHE_LINE (entry->tag_lo[way], way);
++      mfc_put (line, tag, LINE_SIZE, dma_tag, 0, 0);
++
++      /* Wait for DMA completion.  */
++      oldmask = mfc_read_tag_mask ();
++      mfc_write_tag_mask (1 << dma_tag);
++      mfc_read_tag_status_all ();
++      mfc_write_tag_mask (oldmask);
++
++      /* Leave critical section.  */
++      if (__builtin_expect (mach_stat & 1, 0))
++	spu_ienable ();
++#else
++      /* Allocate a buffer large enough that we know it has 128 bytes
++         that are 128 byte aligned (for DMA). */
++
++      char buffer[LINE_SIZE + 127];
++      qword *buf_ptr = (qword *) (((unsigned int) (buffer) + 127) & ~127);
++      qword *line = GET_CACHE_LINE (entry->tag_lo[way], way);
++      qword bits;
++      unsigned int mach_stat;
++
++      /* Enter critical section.  */
++      mach_stat = spu_readch (SPU_RdMachStat);
++      spu_idisable ();
++
++      do
++	{
++	  /* We atomically read the current memory into a buffer
++	     modify the dirty bytes in the buffer, and write it
++	     back. If writeback fails, loop and try again.  */
++
++	  mfc_getllar (buf_ptr, tag, 0, 0);
++	  mfc_read_atomic_status ();
++
++	  /* The method we're using to write 16 dirty bytes into
++	     the buffer at a time uses fsmb which in turn uses
++	     the least significant 16 bits of word 0, so we
++	     load the bits and rotate so that the first bit of
++	     the bitmap is in the first bit that fsmb will use.  */
++
++	  bits = (qword) entry->dirty_bits[way];
++	  bits = si_rotqbyi (bits, -2);
++
++	  /* Si_fsmb creates the mask of dirty bytes.
++	     Use selb to nab the appropriate bits.  */
++	  buf_ptr[0] = si_selb (buf_ptr[0], line[0], si_fsmb (bits));
++
++	  /* Rotate to next 16 byte section of cache.  */
++	  bits = si_rotqbyi (bits, 2);
++
++	  buf_ptr[1] = si_selb (buf_ptr[1], line[1], si_fsmb (bits));
++	  bits = si_rotqbyi (bits, 2);
++	  buf_ptr[2] = si_selb (buf_ptr[2], line[2], si_fsmb (bits));
++	  bits = si_rotqbyi (bits, 2);
++	  buf_ptr[3] = si_selb (buf_ptr[3], line[3], si_fsmb (bits));
++	  bits = si_rotqbyi (bits, 2);
++	  buf_ptr[4] = si_selb (buf_ptr[4], line[4], si_fsmb (bits));
++	  bits = si_rotqbyi (bits, 2);
++	  buf_ptr[5] = si_selb (buf_ptr[5], line[5], si_fsmb (bits));
++	  bits = si_rotqbyi (bits, 2);
++	  buf_ptr[6] = si_selb (buf_ptr[6], line[6], si_fsmb (bits));
++	  bits = si_rotqbyi (bits, 2);
++	  buf_ptr[7] = si_selb (buf_ptr[7], line[7], si_fsmb (bits));
++	  bits = si_rotqbyi (bits, 2);
++
++	  mfc_putllc (buf_ptr, tag, 0, 0);
++	}
++      while (mfc_read_atomic_status ());
++
++      /* Leave critical section.  */
++      if (__builtin_expect (mach_stat & 1, 0))
++	spu_ienable ();
++#endif
++    }
++
++  /* In any case, marking the lo tag with 1 which denotes empty.  */
++  SET_EMPTY (entry, way);
++  entry->dirty_bits[way] = (vector unsigned short) si_from_uint (0);
++}
++
++void
++__cache_evict (__ea void *ea)
++{
++  addr tag = (addr) ea & ~TAG_MASK;
++  struct __cache_tag_array *entry = GET_ENTRY (ea);
++  int i = 0;
++
++  /* Cycles through all the possible ways an address could be at
++     and evicts the way if found.  */
++
++  for (i = 0; i < WAYS; i++)
++    if (CHECK_TAG (entry, i, tag))
++      __cache_evict_entry (entry, i);
++}
++
++static void *
++__cache_fill (int way, addr tag)
++{
++  unsigned int oldmask, mach_stat;
++  char *line = ((void *) 0);
++
++  /* Reserve our DMA tag.  */
++  if (dma_tag == 32)
++    dma_tag = mfc_tag_reserve ();
++
++  /* Enter critical section.  */
++  mach_stat = spu_readch (SPU_RdMachStat);
++  spu_idisable ();
++
++  /* Issue DMA request.  */
++  line = GET_CACHE_LINE (tag, way);
++  mfc_get (line, tag, LINE_SIZE, dma_tag, 0, 0);
++
++  /* Wait for DMA completion.  */
++  oldmask = mfc_read_tag_mask ();
++  mfc_write_tag_mask (1 << dma_tag);
++  mfc_read_tag_status_all ();
++  mfc_write_tag_mask (oldmask);
++
++  /* Leave critical section.  */
++  if (__builtin_expect (mach_stat & 1, 0))
++    spu_ienable ();
++
++  return (void *) line;
++}
++
++static void
++__cache_miss (__ea void *ea, struct __cache_tag_array *entry, int way)
++{
++
++  addr tag = (addr) ea & ~TAG_MASK;
++  unsigned int lru = 0;
++  int i = 0;
++  int idx = 0;
++
++  /* If way > 4, then there are no empty slots, so we must evict
++     the least recently used entry. */
++  if (way >= 4)
++    {
++      for (i = 0; i < WAYS; i++)
++	{
++	  if (GET_LRU (entry, i) > lru)
++	    {
++	      lru = GET_LRU (entry, i);
++	      idx = i;
++	    }
++	}
++      __cache_evict_entry (entry, idx);
++      way = idx;
++    }
++
++  /* Set the empty entry's tag and fill it's cache line. */
++
++  SET_TAG (entry, way, tag);
++  entry->reserved[way] = 0;
++
++  /* Check if the address is just an effective address within the
++     SPU's local store. */
++
++  /* Because the LS is not 256k aligned, we can't do a nice and mask
++     here to compare, so we must check the whole range.  */
++
++  if ((addr) ea >= (addr) __ea_local_store
++      && (addr) ea < (addr) (__ea_local_store + 0x40000))
++    {
++      SET_IS_LS (entry, way);
++      entry->base[way] =
++	(void *) ((unsigned int) ((addr) ea -
++				  (addr) __ea_local_store) & ~0x7f);
++    }
++  else
++    {
++      entry->base[way] = __cache_fill (way, tag);
++    }
++}
++
++void *
++__cache_fetch_dirty (__ea void *ea, int n_bytes_dirty)
++{
++#ifdef __EA64__
++  unsigned int tag_hi;
++  qword etag_hi;
++#endif
++  unsigned int tag_lo;
++  struct __cache_tag_array *entry;
++
++  qword etag_lo;
++  qword equal;
++  qword bit_mask;
++  qword way;
++
++  /* This first chunk, we merely fill the pointer and tag.  */
++
++  entry = GET_ENTRY (ea);
++
++#ifndef __EA64__
++  tag_lo =
++    si_to_uint (si_andc
++		(si_shufb
++		 (si_from_uint ((addr) ea), si_from_uint (0),
++		  si_from_uint (0x00010203)), si_from_uint (TAG_MASK)));
++#else
++  tag_lo =
++    si_to_uint (si_andc
++		(si_shufb
++		 (si_from_ullong ((addr) ea), si_from_uint (0),
++		  si_from_uint (0x04050607)), si_from_uint (TAG_MASK)));
++
++  tag_hi =
++    si_to_uint (si_shufb
++		(si_from_ullong ((addr) ea), si_from_uint (0),
++		 si_from_uint (0x00010203)));
++#endif
++
++  /* Increment LRU in reserved bytes.  */
++  si_stqd (si_ai (si_lqd (si_from_ptr (entry), 48), 1),
++	   si_from_ptr (entry), 48);
++
++missreturn:
++  /* Check if the entry's lo_tag is equal to the address' lo_tag.  */
++  etag_lo = si_lqd (si_from_ptr (entry), 0);
++  equal = si_ceq (etag_lo, si_from_uint (tag_lo));
++#ifdef __EA64__
++  /* And the high tag too.  */
++  etag_hi = si_lqd (si_from_ptr (entry), 16);
++  equal = si_and (equal, (si_ceq (etag_hi, si_from_uint (tag_hi))));
++#endif
++
++  if ((si_to_uint (si_orx (equal)) == 0))
++    goto misshandler;
++
++  if (n_bytes_dirty)
++    {
++      /* way = 0x40,0x50,0x60,0x70 for each way, which is also the
++         offset of the appropriate dirty bits.  */
++      way = si_shli (si_clz (si_gbb (equal)), 2);
++
++      /* To create the bit_mask, we set it to all 1s (uint -1), then we
++         shift it over (128 - n_bytes_dirty) times.  */
++
++      bit_mask = si_from_uint (-1);
++
++      bit_mask =
++	si_shlqby (bit_mask, si_from_uint ((LINE_SIZE - n_bytes_dirty) / 8));
++
++      bit_mask =
++	si_shlqbi (bit_mask, si_from_uint ((LINE_SIZE - n_bytes_dirty) % 8));
++
++      /* Rotate it around to the correct offset.  */
++      bit_mask =
++	si_rotqby (bit_mask,
++		   si_from_uint (-1 * ((addr) ea & TAG_MASK) / 8));
++
++      bit_mask =
++	si_rotqbi (bit_mask,
++		   si_from_uint (-1 * ((addr) ea & TAG_MASK) % 8));
++
++      /* Update the dirty bits.  */
++      si_stqx (si_or (si_lqx (si_from_ptr (entry), way), bit_mask),
++	       si_from_ptr (entry), way);
++    };
++
++  /* We've definitely found the right entry, set LRU (reserved) to 0
++     maintaining the LS flag (MSB).  */
++
++  si_stqd (si_andc
++	   (si_lqd (si_from_ptr (entry), 48),
++	    si_and (equal, si_from_uint (~(LS_FLAG)))),
++	   si_from_ptr (entry), 48);
++
++  return (void *)
++    si_to_uint (si_a
++		(si_orx
++		 (si_and (si_lqd (si_from_ptr (entry), 32), equal)),
++		 si_from_uint (((unsigned int) (addr) ea) & TAG_MASK)));
++
++misshandler:
++  equal = si_ceqi (etag_lo, 1);
++  __cache_miss (ea, entry, (si_to_uint (si_clz (si_gbb (equal))) - 16) >> 2);
++  goto missreturn;
++}
++
++void *
++__cache_fetch (__ea void *ea)
++{
++  return __cache_fetch_dirty (ea, 0);
++}
++
++void
++__cache_touch (__ea void *ea __attribute__ ((unused)))
++{
++  /* NO-OP for now.  */
++}
++
++void __cache_flush (void) __attribute__ ((destructor));
++void
++__cache_flush (void)
++{
++  struct __cache_tag_array *entry = __cache_tag_array;
++  unsigned int i;
++  int j;
++
++  /* Cycle through each cache entry and evict all used ways.  */
++
++  for (i = 0; i < CACHE_LINES / WAYS; i++)
++    {
++      for (j = 0; j < WAYS; j++)
++	if (!CHECK_EMPTY (entry, j))
++	  __cache_evict_entry (entry, j);
++
++      entry++;
++    }
++}
+diff -urNp gcc-4.4.4.orig/gcc/config/spu/cache.S gcc-4.4.4/gcc/config/spu/cache.S
+--- a/src/gcc/config/spu/cache.S	1970-01-01
++++ b/src/gcc/config/spu/cache.S	2010-06-30
+@@ -0,0 +1,43 @@
++/* Copyright (C) 2008, 2009 Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 3, or (at your option) any later
++version.
++
++GCC is distributed in the hope that it will be useful, but WITHOUT ANY
++WARRANTY; without even the implied warranty of MERCHANTABILITY or
++FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++for more details.
++
++Under Section 7 of GPL version 3, you are granted additional
++permissions described in the GCC Runtime Library Exception, version
++3.1, as published by the Free Software Foundation.
++
++You should have received a copy of the GNU General Public License and
++a copy of the GCC Runtime Library Exception along with this program;
++see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
++<http://www.gnu.org/licenses/>.  */
++
++	.data
++	.p2align 7
++	.global __cache
++__cache:
++	.rept __CACHE_SIZE__ * 8
++	.fill 128
++	.endr
++
++	.p2align 7
++	.global __cache_tag_array
++__cache_tag_array:
++	.rept __CACHE_SIZE__ * 2
++	.long 1, 1, 1, 1
++	.fill 128-16
++	.endr
++__end_cache_tag_array:
++
++	.globl __cache_tag_array_size
++	.set __cache_tag_array_size, __end_cache_tag_array-__cache_tag_array
++
+diff -urNp gcc-4.4.4.orig/gcc/config/spu/spu.c gcc-4.4.4/gcc/config/spu/spu.c
+--- a/src/gcc/config/spu/spu.c	2009-12-04
++++ b/src/gcc/config/spu/spu.c	2010-06-30
+@@ -153,6 +153,8 @@ char regs_ever_allocated[FIRST_PSEUDO_RE
+ static void spu_init_builtins (void);
+ static unsigned char spu_scalar_mode_supported_p (enum machine_mode mode);
+ static unsigned char spu_vector_mode_supported_p (enum machine_mode mode);
++static bool spu_addr_space_legitimate_address_p (enum machine_mode, rtx,
++						 bool, addr_space_t);
+ static rtx adjust_operand (rtx op, HOST_WIDE_INT * start);
+ static rtx get_pic_reg (void);
+ static int need_to_save_reg (int regno, int saving);
+@@ -201,15 +203,23 @@ static void spu_init_libfuncs (void);
+ static bool spu_return_in_memory (const_tree type, const_tree fntype);
+ static void fix_range (const char *);
+ static void spu_encode_section_info (tree, rtx, int);
++static rtx spu_addr_space_legitimize_address (rtx, rtx, enum machine_mode,
++					      addr_space_t);
+ static tree spu_builtin_mul_widen_even (tree);
+ static tree spu_builtin_mul_widen_odd (tree);
+ static tree spu_builtin_mask_for_load (void);
+ static int spu_builtin_vectorization_cost (bool);
+ static bool spu_vector_alignment_reachable (const_tree, bool);
+ static tree spu_builtin_vec_perm (tree, tree *);
++static enum machine_mode spu_addr_space_pointer_mode (addr_space_t);
++static enum machine_mode spu_addr_space_address_mode (addr_space_t);
++static bool spu_addr_space_subset_p (addr_space_t, addr_space_t);
++static rtx spu_addr_space_convert (rtx, tree, tree);
+ static int spu_sms_res_mii (struct ddg *g);
+ static void asm_file_start (void);
+ static unsigned int spu_section_type_flags (tree, const char *, int);
++static section *spu_select_section (tree, int, unsigned HOST_WIDE_INT);
++static void spu_unique_section (tree, int);
+ static rtx spu_expand_load (rtx, rtx, rtx, int);
+ 
+ extern const char *reg_names[];
+@@ -269,9 +279,31 @@ spu_libgcc_cmp_return_mode (void);
+ static enum machine_mode
+ spu_libgcc_shift_count_mode (void);
+ 
++/* Pointer mode for __ea references.  */
++#define EAmode (spu_ea_model != 32 ? DImode : SImode)
++
+ 
+ /*  TARGET overrides.  */
+ 
++#undef TARGET_ADDR_SPACE_POINTER_MODE
++#define TARGET_ADDR_SPACE_POINTER_MODE spu_addr_space_pointer_mode
++
++#undef TARGET_ADDR_SPACE_ADDRESS_MODE
++#define TARGET_ADDR_SPACE_ADDRESS_MODE spu_addr_space_address_mode
++
++#undef TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P
++#define TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P \
++  spu_addr_space_legitimate_address_p
++
++#undef TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS
++#define TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS spu_addr_space_legitimize_address
++
++#undef TARGET_ADDR_SPACE_SUBSET_P
++#define TARGET_ADDR_SPACE_SUBSET_P spu_addr_space_subset_p
++
++#undef TARGET_ADDR_SPACE_CONVERT
++#define TARGET_ADDR_SPACE_CONVERT spu_addr_space_convert
++
+ #undef TARGET_INIT_BUILTINS
+ #define TARGET_INIT_BUILTINS spu_init_builtins
+ 
+@@ -281,6 +313,15 @@ spu_libgcc_shift_count_mode (void);
+ #undef TARGET_UNWIND_WORD_MODE
+ #define TARGET_UNWIND_WORD_MODE spu_unwind_word_mode
+ 
++/* The current assembler doesn't like .4byte foo@ppu, so use the normal .long
++   and .quad for the debugger.  When it is known that the assembler is fixed,
++   these can be removed.  */
++#undef TARGET_ASM_UNALIGNED_SI_OP
++#define TARGET_ASM_UNALIGNED_SI_OP	"\t.long\t"
++
++#undef TARGET_ASM_ALIGNED_DI_OP
++#define TARGET_ASM_ALIGNED_DI_OP	"\t.quad\t"
++
+ /* The .8byte directive doesn't seem to work well for a 32 bit
+    architecture. */
+ #undef TARGET_ASM_UNALIGNED_DI_OP
+@@ -398,6 +439,12 @@ const struct attribute_spec spu_attribut
+ #undef TARGET_SECTION_TYPE_FLAGS
+ #define TARGET_SECTION_TYPE_FLAGS spu_section_type_flags
+ 
++#undef TARGET_ASM_SELECT_SECTION
++#define TARGET_ASM_SELECT_SECTION  spu_select_section
++
++#undef TARGET_ASM_UNIQUE_SECTION
++#define TARGET_ASM_UNIQUE_SECTION  spu_unique_section
++
+ struct gcc_target targetm = TARGET_INITIALIZER;
+ 
+ void
+@@ -3606,6 +3653,29 @@ exp2_immediate_p (rtx op, enum machine_m
+   return FALSE;
+ }
+ 
++/* Return true if X is a SYMBOL_REF to an __ea qualified variable.  */
++
++static int
++ea_symbol_ref (rtx *px, void *data ATTRIBUTE_UNUSED)
++{
++  rtx x = *px;
++  tree decl;
++
++  if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == PLUS)
++    {
++      rtx plus = XEXP (x, 0);
++      rtx op0 = XEXP (plus, 0);
++      rtx op1 = XEXP (plus, 1);
++      if (GET_CODE (op1) == CONST_INT)
++	x = op0;
++    }
++
++  return (GET_CODE (x) == SYMBOL_REF
++ 	  && (decl = SYMBOL_REF_DECL (x)) != 0
++ 	  && TREE_CODE (decl) == VAR_DECL
++ 	  && TYPE_ADDR_SPACE (TREE_TYPE (decl)));
++}
++
+ /* We accept:
+    - any 32-bit constant (SImode, SFmode)
+    - any constant that can be generated with fsmbi (any mode)
+@@ -3617,6 +3687,12 @@ spu_legitimate_constant_p (rtx x)
+ {
+   if (GET_CODE (x) == HIGH)
+     x = XEXP (x, 0);
++
++  /* Reject any __ea qualified reference.  These can't appear in
++     instructions but must be forced to the constant pool.  */
++  if (for_each_rtx (&x, ea_symbol_ref, 0))
++    return 0;
++
+   /* V4SI with all identical symbols is valid. */
+   if (!flag_pic
+       && GET_MODE (x) == V4SImode
+@@ -3655,8 +3731,14 @@ spu_legitimate_address (enum machine_mod
+   switch (GET_CODE (x))
+     {
+     case LABEL_REF:
++      return !TARGET_LARGE_MEM;
++
+     case SYMBOL_REF:
+     case CONST:
++      /* Keep __ea references until reload so that spu_expand_mov can see them
++	 in MEMs.  */
++      if (ea_symbol_ref (&x, 0))
++	return !reload_in_progress && !reload_completed;
+       return !TARGET_LARGE_MEM;
+ 
+     case CONST_INT:
+@@ -3700,6 +3782,20 @@ spu_legitimate_address (enum machine_mod
+   return FALSE;
+ }
+ 
++/* Like spu_legitimate_address, except with named addresses.  */
++static bool
++spu_addr_space_legitimate_address_p (enum machine_mode mode, rtx x,
++				     bool reg_ok_strict, addr_space_t as)
++{
++  if (as == ADDR_SPACE_EA)
++    return (REG_P (x) && (GET_MODE (x) == EAmode));
++
++  else if (as != ADDR_SPACE_GENERIC)
++    gcc_unreachable ();
++
++  return spu_legitimate_address (mode, x, reg_ok_strict);
++}
++
+ /* When the address is reg + const_int, force the const_int into a
+    register.  */
+ rtx
+@@ -3733,6 +3829,23 @@ spu_legitimize_address (rtx x, rtx oldx 
+   return NULL_RTX;
+ }
+ 
++/* Like spu_legitimate_address, except with named address support.  */
++static rtx
++spu_addr_space_legitimize_address (rtx x, rtx oldx, enum machine_mode mode,
++				   addr_space_t as)
++{
++  rtx result;
++
++  if (as != ADDR_SPACE_GENERIC)
++    return x;
++
++  result = spu_legitimize_address (x, oldx, mode);
++  if (result)
++    return result;
++
++  return x;
++}
++
+ /* Handle an attribute requiring a FUNCTION_DECL; arguments as in
+    struct attribute_spec.handler.  */
+ static tree
+@@ -4233,6 +4346,233 @@ address_needs_split (rtx mem)
+   return 0;
+ }
+ 
++static GTY(()) rtx cache_fetch;		  /* __cache_fetch function */
++static GTY(()) rtx cache_fetch_dirty;	  /* __cache_fetch_dirty function */
++static alias_set_type ea_alias_set = -1;  /* alias set for __ea memory */
++
++/* MEM is known to be an __ea qualified memory access.  Emit a call to
++   fetch the ppu memory to local store, and return its address in local
++   store.  */
++
++static void
++ea_load_store (rtx mem, bool is_store, rtx ea_addr, rtx data_addr)
++{
++  if (is_store)
++    {
++      rtx ndirty = GEN_INT (GET_MODE_SIZE (GET_MODE (mem)));
++      if (!cache_fetch_dirty)
++	cache_fetch_dirty = init_one_libfunc ("__cache_fetch_dirty");
++      emit_library_call_value (cache_fetch_dirty, data_addr, LCT_NORMAL, Pmode,
++			       2, ea_addr, EAmode, ndirty, SImode);
++    }
++  else
++    {
++      if (!cache_fetch)
++	cache_fetch = init_one_libfunc ("__cache_fetch");
++      emit_library_call_value (cache_fetch, data_addr, LCT_NORMAL, Pmode,
++			       1, ea_addr, EAmode);
++    }
++}
++
++/* Like ea_load_store, but do the cache tag comparison and, for stores,
++   dirty bit marking, inline.
++
++   The cache control data structure is an array of
++
++   struct __cache_tag_array
++     {
++        unsigned int tag_lo[4];
++        unsigned int tag_hi[4];
++        void *data_pointer[4];
++        int reserved[4];
++        vector unsigned short dirty_bits[4];
++     }  */
++
++static void
++ea_load_store_inline (rtx mem, bool is_store, rtx ea_addr, rtx data_addr)
++{
++  rtx ea_addr_si;
++  HOST_WIDE_INT v;
++  rtx tag_size_sym = gen_rtx_SYMBOL_REF (Pmode, "__cache_tag_array_size");
++  rtx tag_arr_sym = gen_rtx_SYMBOL_REF (Pmode, "__cache_tag_array");
++  rtx index_mask = gen_reg_rtx (SImode);
++  rtx tag_arr = gen_reg_rtx (Pmode);
++  rtx splat_mask = gen_reg_rtx (TImode);
++  rtx splat = gen_reg_rtx (V4SImode);
++  rtx splat_hi = NULL_RTX;
++  rtx tag_index = gen_reg_rtx (Pmode);
++  rtx block_off = gen_reg_rtx (SImode);
++  rtx tag_addr = gen_reg_rtx (Pmode);
++  rtx tag = gen_reg_rtx (V4SImode);
++  rtx cache_tag = gen_reg_rtx (V4SImode);
++  rtx cache_tag_hi = NULL_RTX;
++  rtx cache_ptrs = gen_reg_rtx (TImode);
++  rtx cache_ptrs_si = gen_reg_rtx (SImode);
++  rtx tag_equal = gen_reg_rtx (V4SImode);
++  rtx tag_equal_hi = NULL_RTX;
++  rtx tag_eq_pack = gen_reg_rtx (V4SImode);
++  rtx tag_eq_pack_si = gen_reg_rtx (SImode);
++  rtx eq_index = gen_reg_rtx (SImode);
++  rtx bcomp, hit_label, hit_ref, cont_label, insn;
++
++  if (spu_ea_model != 32)
++    {
++      splat_hi = gen_reg_rtx (V4SImode);
++      cache_tag_hi = gen_reg_rtx (V4SImode);
++      tag_equal_hi = gen_reg_rtx (V4SImode);
++    }
++
++  emit_move_insn (index_mask, plus_constant (tag_size_sym, -128));
++  emit_move_insn (tag_arr, tag_arr_sym);
++  v = 0x0001020300010203LL;
++  emit_move_insn (splat_mask, immed_double_const (v, v, TImode));
++  ea_addr_si = ea_addr;
++  if (spu_ea_model != 32)
++    ea_addr_si = convert_to_mode (SImode, ea_addr, 1);
++
++  /* tag_index = ea_addr & (tag_array_size - 128)  */
++  emit_insn (gen_andsi3 (tag_index, ea_addr_si, index_mask));
++
++  /* splat ea_addr to all 4 slots.  */
++  emit_insn (gen_shufb (splat, ea_addr_si, ea_addr_si, splat_mask));
++  /* Similarly for high 32 bits of ea_addr.  */
++  if (spu_ea_model != 32)
++    emit_insn (gen_shufb (splat_hi, ea_addr, ea_addr, splat_mask));
++
++  /* block_off = ea_addr & 127  */
++  emit_insn (gen_andsi3 (block_off, ea_addr_si, spu_const (SImode, 127)));
++
++  /* tag_addr = tag_arr + tag_index  */
++  emit_insn (gen_addsi3 (tag_addr, tag_arr, tag_index));
++
++  /* Read cache tags.  */
++  emit_move_insn (cache_tag, gen_rtx_MEM (V4SImode, tag_addr));
++  if (spu_ea_model != 32)
++    emit_move_insn (cache_tag_hi, gen_rtx_MEM (V4SImode,
++					       plus_constant (tag_addr, 16)));
++
++  /* tag = ea_addr & -128  */
++  emit_insn (gen_andv4si3 (tag, splat, spu_const (V4SImode, -128)));
++
++  /* Read all four cache data pointers.  */
++  emit_move_insn (cache_ptrs, gen_rtx_MEM (TImode,
++					   plus_constant (tag_addr, 32)));
++
++  /* Compare tags.  */
++  emit_insn (gen_ceq_v4si (tag_equal, tag, cache_tag));
++  if (spu_ea_model != 32)
++    {
++      emit_insn (gen_ceq_v4si (tag_equal_hi, splat_hi, cache_tag_hi));
++      emit_insn (gen_andv4si3 (tag_equal, tag_equal, tag_equal_hi));
++    }
++
++  /* At most one of the tags compare equal, so tag_equal has one
++     32-bit slot set to all 1's, with the other slots all zero.
++     gbb picks off low bit from each byte in the 128-bit registers,
++     so tag_eq_pack is one of 0xf000, 0x0f00, 0x00f0, 0x000f, assuming
++     we have a hit.  */
++  emit_insn (gen_spu_gbb (tag_eq_pack, spu_gen_subreg (V16QImode, tag_equal)));
++  emit_insn (gen_spu_convert (tag_eq_pack_si, tag_eq_pack));
++
++  /* So counting leading zeros will set eq_index to 16, 20, 24 or 28.  */
++  emit_insn (gen_clzsi2 (eq_index, tag_eq_pack_si));
++
++  /* Allowing us to rotate the corresponding cache data pointer to slot0.
++     (rotating eq_index mod 16 bytes).  */
++  emit_insn (gen_rotqby_ti (cache_ptrs, cache_ptrs, eq_index));
++  emit_insn (gen_spu_convert (cache_ptrs_si, cache_ptrs));
++
++  /* Add block offset to form final data address.  */
++  emit_insn (gen_addsi3 (data_addr, cache_ptrs_si, block_off));
++
++  /* Check that we did hit.  */
++  hit_label = gen_label_rtx ();
++  hit_ref = gen_rtx_LABEL_REF (VOIDmode, hit_label);
++  bcomp = gen_rtx_NE (SImode, tag_eq_pack_si, const0_rtx);
++  insn = emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx,
++				      gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp,
++							    hit_ref, pc_rtx)));
++  /* Say that this branch is very likely to happen.  */
++  v = REG_BR_PROB_BASE - REG_BR_PROB_BASE / 100 - 1;
++  REG_NOTES (insn)
++    = gen_rtx_EXPR_LIST (REG_BR_PROB, GEN_INT (v), REG_NOTES (insn));
++
++  ea_load_store (mem, is_store, ea_addr, data_addr);
++  cont_label = gen_label_rtx ();
++  emit_jump_insn (gen_jump (cont_label));
++  emit_barrier ();
++
++  emit_label (hit_label);
++
++  if (is_store)
++    {
++      HOST_WIDE_INT v_hi;
++      rtx dirty_bits = gen_reg_rtx (TImode);
++      rtx dirty_off = gen_reg_rtx (SImode);
++      rtx dirty_128 = gen_reg_rtx (TImode);
++      rtx neg_block_off = gen_reg_rtx (SImode);
++
++      /* Set up mask with one dirty bit per byte of the mem we are
++	 writing, starting from top bit.  */
++      v_hi = v = -1;
++      v <<= (128 - GET_MODE_SIZE (GET_MODE (mem))) & 63;
++      if ((128 - GET_MODE_SIZE (GET_MODE (mem))) >= 64)
++	{
++	  v_hi = v;
++	  v = 0;
++	}
++      emit_move_insn (dirty_bits, immed_double_const (v, v_hi, TImode));
++
++      /* Form index into cache dirty_bits.  eq_index is one of
++	 0x10, 0x14, 0x18 or 0x1c.  Multiplying by 4 gives us
++	 0x40, 0x50, 0x60 or 0x70 which just happens to be the
++	 offset to each of the four dirty_bits elements.  */
++      emit_insn (gen_ashlsi3 (dirty_off, eq_index, spu_const (SImode, 2)));
++
++      emit_insn (gen_spu_lqx (dirty_128, tag_addr, dirty_off));
++
++      /* Rotate bit mask to proper bit.  */
++      emit_insn (gen_negsi2 (neg_block_off, block_off));
++      emit_insn (gen_rotqbybi_ti (dirty_bits, dirty_bits, neg_block_off));
++      emit_insn (gen_rotqbi_ti (dirty_bits, dirty_bits, neg_block_off));
++
++      /* Or in the new dirty bits.  */
++      emit_insn (gen_iorti3 (dirty_128, dirty_bits, dirty_128));
++
++      /* Store.  */
++      emit_insn (gen_spu_stqx (dirty_128, tag_addr, dirty_off));
++    }
++
++  emit_label (cont_label);
++}
++
++static rtx
++expand_ea_mem (rtx mem, bool is_store)
++{
++  rtx ea_addr;
++  rtx data_addr = gen_reg_rtx (Pmode);
++  rtx new_mem;
++
++  ea_addr = force_reg (EAmode, XEXP (mem, 0));
++  if (optimize_size || optimize == 0)
++    ea_load_store (mem, is_store, ea_addr, data_addr);
++  else
++    ea_load_store_inline (mem, is_store, ea_addr, data_addr);
++
++  if (ea_alias_set == -1)
++    ea_alias_set = new_alias_set ();
++
++  /* We generate a new MEM RTX to refer to the copy of the data
++     in the cache.  We do not copy memory attributes (except the
++     alignment) from the original MEM, as they may no longer apply
++     to the cache copy.  */
++  new_mem = gen_rtx_MEM (GET_MODE (mem), data_addr);
++  set_mem_alias_set (new_mem, ea_alias_set);
++  set_mem_align (new_mem, MIN (MEM_ALIGN (mem), 128 * 8));
++
++  return new_mem;
++}
++
+ int
+ spu_expand_mov (rtx * ops, enum machine_mode mode)
+ {
+@@ -4290,9 +4630,17 @@ spu_expand_mov (rtx * ops, enum machine_
+ 	}
+     }
+   if (MEM_P (ops[0]))
+-    return spu_split_store (ops);
++    {
++      if (MEM_ADDR_SPACE (ops[0]))
++	ops[0] = expand_ea_mem (ops[0], true);
++      return spu_split_store (ops);
++    }
+   if (MEM_P (ops[1]))
+-    return spu_split_load (ops);
++    {
++      if (MEM_ADDR_SPACE (ops[1]))
++	ops[1] = expand_ea_mem (ops[1], false);
++      return spu_split_load (ops);
++    }
+ 
+   return 0;
+ }
+@@ -6415,6 +6763,113 @@ spu_builtin_vec_perm (tree type, tree *m
+   return d->fndecl;
+ }
+ 
++/* Return the appropriate mode for a named address pointer.  */
++static enum machine_mode
++spu_addr_space_pointer_mode (addr_space_t addrspace)
++{
++  switch (addrspace)
++    {
++    case ADDR_SPACE_GENERIC:
++      return ptr_mode;
++    case ADDR_SPACE_EA:
++      return EAmode;
++    default:
++      gcc_unreachable ();
++    }
++}
++
++/* Return the appropriate mode for a named address address.  */
++static enum machine_mode
++spu_addr_space_address_mode (addr_space_t addrspace)
++{
++  switch (addrspace)
++    {
++    case ADDR_SPACE_GENERIC:
++      return Pmode;
++    case ADDR_SPACE_EA:
++      return EAmode;
++    default:
++      gcc_unreachable ();
++    }
++}
++
++/* Determine if one named address space is a subset of another.  */
++
++static bool
++spu_addr_space_subset_p (addr_space_t subset, addr_space_t superset)
++{
++  gcc_assert (subset == ADDR_SPACE_GENERIC || subset == ADDR_SPACE_EA);
++  gcc_assert (superset == ADDR_SPACE_GENERIC || superset == ADDR_SPACE_EA);
++
++  if (subset == superset)
++    return true;
++
++  /* If we have -mno-address-space-conversion, treat __ea and generic as not
++     being subsets but instead as disjoint address spaces.  */
++  else if (!TARGET_ADDRESS_SPACE_CONVERSION)
++    return false;
++
++  else
++    return (subset == ADDR_SPACE_GENERIC && superset == ADDR_SPACE_EA);
++}
++
++/* Convert from one address space to another.  */
++static rtx
++spu_addr_space_convert (rtx op, tree from_type, tree to_type)
++{
++  addr_space_t from_as = TYPE_ADDR_SPACE (TREE_TYPE (from_type));
++  addr_space_t to_as = TYPE_ADDR_SPACE (TREE_TYPE (to_type));
++
++  gcc_assert (from_as == ADDR_SPACE_GENERIC || from_as == ADDR_SPACE_EA);
++  gcc_assert (to_as == ADDR_SPACE_GENERIC || to_as == ADDR_SPACE_EA);
++
++  if (to_as == ADDR_SPACE_GENERIC && from_as == ADDR_SPACE_EA)
++    {
++      rtx result, ls;
++
++      ls = gen_const_mem (DImode,
++			  gen_rtx_SYMBOL_REF (Pmode, "__ea_local_store"));
++      set_mem_align (ls, 128);
++
++      result = gen_reg_rtx (Pmode);
++      ls = force_reg (Pmode, convert_modes (Pmode, DImode, ls, 1));
++      op = force_reg (Pmode, convert_modes (Pmode, EAmode, op, 1));
++      ls = emit_conditional_move (ls, NE, op, const0_rtx, Pmode,
++					  ls, const0_rtx, Pmode, 1);
++
++      emit_insn (gen_subsi3 (result, op, ls));
++
++      return result;
++    }
++
++  else if (to_as == ADDR_SPACE_EA && from_as == ADDR_SPACE_GENERIC)
++    {
++      rtx result, ls;
++
++      ls = gen_const_mem (DImode,
++			  gen_rtx_SYMBOL_REF (Pmode, "__ea_local_store"));
++      set_mem_align (ls, 128);
++
++      result = gen_reg_rtx (EAmode);
++      ls = force_reg (EAmode, convert_modes (EAmode, DImode, ls, 1));
++      op = force_reg (Pmode, op);
++      ls = emit_conditional_move (ls, NE, op, const0_rtx, Pmode,
++					  ls, const0_rtx, EAmode, 1);
++      op = force_reg (EAmode, convert_modes (EAmode, Pmode, op, 1));
++
++      if (EAmode == SImode)
++	emit_insn (gen_addsi3 (result, op, ls));
++      else
++	emit_insn (gen_adddi3 (result, op, ls));
++
++      return result;
++    }
++
++  else
++    gcc_unreachable ();
++}
++
++
+ /* Count the total number of instructions in each pipe and return the
+    maximum, which is used as the Minimum Iteration Interval (MII)
+    in the modulo scheduler.  get_pipe() will return -2, -1, 0, or 1.
+@@ -6507,9 +6962,46 @@ spu_section_type_flags (tree decl, const
+   /* .toe needs to have type @nobits.  */
+   if (strcmp (name, ".toe") == 0)
+     return SECTION_BSS;
++  /* Don't load _ea into the current address space.  */
++  if (strcmp (name, "._ea") == 0)
++    return SECTION_WRITE | SECTION_DEBUG;
+   return default_section_type_flags (decl, name, reloc);
+ }
+ 
++/* Implement targetm.select_section.  */
++static section *
++spu_select_section (tree decl, int reloc, unsigned HOST_WIDE_INT align)
++{
++  /* Variables and constants defined in the __ea address space
++     go into a special section named "._ea".  */
++  if (TREE_TYPE (decl) != error_mark_node
++      && TYPE_ADDR_SPACE (TREE_TYPE (decl)) == ADDR_SPACE_EA)
++    {
++      /* We might get called with string constants, but get_named_section
++	 doesn't like them as they are not DECLs.  Also, we need to set
++	 flags in that case.  */
++      if (!DECL_P (decl))
++	return get_section ("._ea", SECTION_WRITE | SECTION_DEBUG, NULL);
++
++      return get_named_section (decl, "._ea", reloc);
++    }
++
++  return default_elf_select_section (decl, reloc, align);
++}
++
++/* Implement targetm.unique_section.  */
++static void
++spu_unique_section (tree decl, int reloc)
++{
++  /* We don't support unique section names in the __ea address
++     space for now.  */
++  if (TREE_TYPE (decl) != error_mark_node
++      && TYPE_ADDR_SPACE (TREE_TYPE (decl)) != 0)
++    return;
++
++  default_unique_section (decl, reloc);
++}
++
+ /* Generate a constant or register which contains 2^SCALE.  We assume
+    the result is valid for MODE.  Currently, MODE must be V4SFmode and
+    SCALE must be SImode. */
+@@ -6558,5 +7050,12 @@ spu_split_convert (rtx ops[])
+     }
+ }
+ 
++void
++spu_function_profiler (FILE * file, int labelno)
++{
++  fprintf (file, "# profile\n");
++  fprintf (file, "brsl $75,  _mcount\n");
++}
++
+ #include "gt-spu.h"
+ 
+diff -urNp gcc-4.4.4.orig/gcc/config/spu/spu_cache.h gcc-4.4.4/gcc/config/spu/spu_cache.h
+--- a/src/gcc/config/spu/spu_cache.h	1970-01-01
++++ b/src/gcc/config/spu/spu_cache.h	2010-06-30
+@@ -0,0 +1,39 @@
++/* Copyright (C) 2008, 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   Under Section 7 of GPL version 3, you are granted additional
++   permissions described in the GCC Runtime Library Exception, version
++   3.1, as published by the Free Software Foundation.
++
++   You should have received a copy of the GNU General Public License and
++   a copy of the GCC Runtime Library Exception along with this program;
++   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#ifndef _SPU_CACHE_H
++#define _SPU_CACHE_H
++
++void *__cache_fetch_dirty (__ea void *ea, int n_bytes_dirty);
++void *__cache_fetch (__ea void *ea);
++void __cache_evict (__ea void *ea);
++void __cache_flush (void);
++void __cache_touch (__ea void *ea);
++
++#define cache_fetch_dirty(_ea, _n_bytes_dirty) \
++     __cache_fetch_dirty(_ea, _n_bytes_dirty)
++
++#define cache_fetch(_ea) __cache_fetch(_ea)
++#define cache_touch(_ea) __cache_touch(_ea)
++#define cache_evict(_ea) __cache_evict(_ea)
++#define cache_flush() __cache_flush()
++
++#endif
+diff -urNp gcc-4.4.4.orig/gcc/config/spu/spu-c.c gcc-4.4.4/gcc/config/spu/spu-c.c
+--- a/src/gcc/config/spu/spu-c.c	2010-02-19
++++ b/src/gcc/config/spu/spu-c.c	2010-06-30
+@@ -199,6 +199,17 @@ spu_cpu_cpp_builtins (struct cpp_reader 
+   if (spu_arch == PROCESSOR_CELLEDP)
+     builtin_define_std ("__SPU_EDP__");
+   builtin_define_std ("__vector=__attribute__((__spu_vector__))");
++  switch (spu_ea_model)
++    {
++    case 32:
++      builtin_define_std ("__EA32__");
++      break;
++    case 64:
++      builtin_define_std ("__EA64__");
++      break;
++    default:
++       gcc_unreachable ();
++    }
+ 
+   if (!flag_iso)
+     {
+diff -urNp gcc-4.4.4.orig/gcc/config/spu/spu-elf.h gcc-4.4.4/gcc/config/spu/spu-elf.h
+--- a/src/gcc/config/spu/spu-elf.h	2009-02-20
++++ b/src/gcc/config/spu/spu-elf.h	2010-06-30
+@@ -48,8 +48,9 @@
+    object constructed before entering `main'.  */
+ 
+ #undef  STARTFILE_SPEC 
+-#define STARTFILE_SPEC "%{mstdmain: crt2.o%s} %{!mstdmain: crt1.o%s} \
+-			crti.o%s crtbegin.o%s"
++#define STARTFILE_SPEC "%{mstdmain: %{pg|p:gcrt2.o%s;:crt2.o%s}}\
++                        %{!mstdmain: %{pg|p:gcrt1.o%s;:crt1.o%s}}\
++                        crti.o%s crtbegin.o%s"
+ 
+ #undef  ENDFILE_SPEC
+ #define ENDFILE_SPEC   "crtend.o%s crtn.o%s"
+@@ -68,8 +69,14 @@
+ 
+ #define LINK_SPEC "%{mlarge-mem: --defsym __stack=0xfffffff0 }"
+ 
+-#define LIB_SPEC \
+-	"-( %{!shared:%{g*:-lg}} -lc -lgloss -)"
++#define LIB_SPEC "-( %{!shared:%{g*:-lg}} -lc -lgloss -) \
++    %{mno-atomic-updates:-lgcc_cachemgr_nonatomic; :-lgcc_cachemgr} \
++    %{mcache-size=128:-lgcc_cache128k; \
++      mcache-size=64 :-lgcc_cache64k; \
++      mcache-size=32 :-lgcc_cache32k; \
++      mcache-size=16 :-lgcc_cache16k; \
++      mcache-size=8  :-lgcc_cache8k; \
++                     :-lgcc_cache64k}"
+ 
+ /* Turn off warnings in the assembler too. */
+ #undef ASM_SPEC
+diff -urNp gcc-4.4.4.orig/gcc/config/spu/spu.h gcc-4.4.4/gcc/config/spu/spu.h
+--- a/src/gcc/config/spu/spu.h	2010-06-30
++++ b/src/gcc/config/spu/spu.h	2010-06-30
+@@ -51,7 +51,7 @@ extern GTY(()) int spu_tune;
+ /* Default target_flags if no switches specified.  */
+ #ifndef TARGET_DEFAULT
+ #define TARGET_DEFAULT (MASK_ERROR_RELOC | MASK_SAFE_DMA | MASK_BRANCH_HINTS \
+-			| MASK_SAFE_HINTS)
++			| MASK_SAFE_HINTS | MASK_ADDRESS_SPACE_CONVERSION)
+ #endif
+ 
+ 
+@@ -396,9 +396,12 @@ targetm.resolve_overloaded_builtin = spu
+ 
+ /* Profiling */
+ 
+-/* Nothing, for now. */
+ #define FUNCTION_PROFILER(FILE, LABELNO)  \
+-   fprintf (FILE, "\t\n")
++  spu_function_profiler ((FILE), (LABELNO));
++
++#define NO_PROFILE_COUNTERS 1
++
++#define PROFILE_BEFORE_PROLOGUE 1
+ 
+ 
+ /* Trampolines */
+@@ -498,6 +501,17 @@ targetm.resolve_overloaded_builtin = spu
+ #define ASM_OUTPUT_LABELREF(FILE, NAME) \
+   asm_fprintf (FILE, "%U%s", default_strip_name_encoding (NAME))
+ 
++#define ASM_OUTPUT_SYMBOL_REF(FILE, X) \
++  do							\
++    {							\
++      tree decl;					\
++      assemble_name (FILE, XSTR ((X), 0));		\
++      if ((decl = SYMBOL_REF_DECL ((X))) != 0		\
++	  && TREE_CODE (decl) == VAR_DECL		\
++	  && TYPE_ADDR_SPACE (TREE_TYPE (decl)))	\
++	fputs ("@ppu", FILE);				\
++    } while (0)
++
+ 
+ /* Instruction Output */
+ #define REGISTER_NAMES \
+@@ -624,6 +638,13 @@ extern GTY(()) rtx spu_compare_op0;
+ extern GTY(()) rtx spu_compare_op1;
+ 
+ 
++/* Address spaces.  */
++#define ADDR_SPACE_EA	1
++
++/* Named address space keywords.  */
++#define TARGET_ADDR_SPACE_KEYWORDS ADDR_SPACE_KEYWORD ("__ea", ADDR_SPACE_EA)
++
++
+ /* Builtins.  */
+ 
+ enum spu_builtin_type
+diff -urNp gcc-4.4.4.orig/gcc/config/spu/spu.opt gcc-4.4.4/gcc/config/spu/spu.opt
+--- a/src/gcc/config/spu/spu.opt	2009-02-20
++++ b/src/gcc/config/spu/spu.opt	2010-06-30
+@@ -82,3 +82,24 @@ Generate code for given CPU
+ mtune=
+ Target RejectNegative Joined Var(spu_tune_string)
+ Schedule code for given CPU
++
++mea32
++Target Report RejectNegative Var(spu_ea_model,32) Init(32)
++Access variables in 32-bit PPU objects (default)
++
++mea64
++Target Report RejectNegative Var(spu_ea_model,64) VarExists
++Access variables in 64-bit PPU objects
++
++maddress-space-conversion
++Target Report Mask(ADDRESS_SPACE_CONVERSION)
++Allow conversions between __ea and generic pointers (default)
++
++mcache-size=
++Target Report RejectNegative Joined UInteger
++Size (in KB) of software data cache
++
++matomic-updates
++Target Report
++Atomically write back software data cache lines (default)
++
+diff -urNp gcc-4.4.4.orig/gcc/config/spu/spu-protos.h gcc-4.4.4/gcc/config/spu/spu-protos.h
+--- a/src/gcc/config/spu/spu-protos.h	2009-12-04
++++ b/src/gcc/config/spu/spu-protos.h	2010-06-30
+@@ -90,6 +90,7 @@ extern void spu_expand_sign_extend (rtx 
+ extern void spu_expand_vector_init (rtx target, rtx vals);
+ extern void spu_init_expanders (void);
+ extern void spu_split_convert (rtx *);
++extern void spu_function_profiler (FILE *, int);
+ 
+ /* spu-c.c */
+ extern tree spu_resolve_overloaded_builtin (tree fndecl, tree fnargs);
+diff -urNp gcc-4.4.4.orig/gcc/config/spu/t-spu-elf gcc-4.4.4/gcc/config/spu/t-spu-elf
+--- a/src/gcc/config/spu/t-spu-elf	2009-04-24
++++ b/src/gcc/config/spu/t-spu-elf	2010-06-30
+@@ -66,14 +66,39 @@ fp-bit.c: $(srcdir)/config/fp-bit.c $(sr
+ # Don't let CTOR_LIST end up in sdata section.
+ CRTSTUFF_T_CFLAGS =
+ 
+-#MULTILIB_OPTIONS=mlarge-mem/mtest-abi
+-#MULTILIB_DIRNAMES=large-mem test-abi
+-#MULTILIB_MATCHES=
++# Multi-lib support.
++MULTILIB_OPTIONS=mea64
+ 
+ # Neither gcc or newlib seem to have a standard way to generate multiple
+ # crt*.o files.  So we don't use the standard crt0.o name anymore.
+ 
+-EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o
++EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o libgcc_cachemgr.a libgcc_cachemgr_nonatomic.a \
++	libgcc_cache8k.a libgcc_cache16k.a libgcc_cache32k.a libgcc_cache64k.a libgcc_cache128k.a
++
++$(T)cachemgr.o: $(srcdir)/config/spu/cachemgr.c
++	$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(MULTILIB_CFLAGS) -c $< -o $@
++
++# Specialised rule to add a -D flag.
++$(T)cachemgr_nonatomic.o: $(srcdir)/config/spu/cachemgr.c
++	$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(MULTILIB_CFLAGS) -DNONATOMIC -c $< -o $@
++
++$(T)libgcc_%.a: $(T)%.o
++	$(AR_FOR_TARGET) -rcs $@ $<
++
++$(T)cache8k.o: $(srcdir)/config/spu/cache.S
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -D__CACHE_SIZE__=8 -o $@ -c $<
++
++$(T)cache16k.o: $(srcdir)/config/spu/cache.S
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -D__CACHE_SIZE__=16 -o $@ -c $<
++
++$(T)cache32k.o: $(srcdir)/config/spu/cache.S
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -D__CACHE_SIZE__=32 -o $@ -c $<
++
++$(T)cache64k.o: $(srcdir)/config/spu/cache.S
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -D__CACHE_SIZE__=64 -o $@ -c $<
++
++$(T)cache128k.o: $(srcdir)/config/spu/cache.S
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -D__CACHE_SIZE__=128 -o $@ -c $<
+ 
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+diff -urNp gcc-4.4.4.orig/gcc/config.gcc gcc-4.4.4/gcc/config.gcc
+--- a/src/gcc/config.gcc	2010-06-30
++++ b/src/gcc/config.gcc	2010-06-30
+@@ -2515,7 +2515,7 @@ sparc64-*-netbsd*)
+ spu-*-elf*)
+ 	tm_file="dbxelf.h elfos.h spu/spu-elf.h spu/spu.h"
+ 	tmake_file="spu/t-spu-elf"
+-	extra_headers="spu_intrinsics.h spu_internals.h vmx2spu.h spu_mfcio.h vec_types.h"
++	extra_headers="spu_intrinsics.h spu_internals.h vmx2spu.h spu_mfcio.h vec_types.h spu_cache.h"
+ 	extra_modes=spu/spu-modes.def
+ 	c_target_objs="${c_target_objs} spu-c.o"
+ 	cxx_target_objs="${cxx_target_objs} spu-c.o"
+diff -urNp gcc-4.4.4.orig/gcc/convert.c gcc-4.4.4/gcc/convert.c
+--- a/src/gcc/convert.c	2009-07-01
++++ b/src/gcc/convert.c	2010-06-30
+@@ -53,15 +53,35 @@ convert_to_pointer (tree type, tree expr
+     {
+     case POINTER_TYPE:
+     case REFERENCE_TYPE:
+-      return fold_build1 (NOP_EXPR, type, expr);
++      {
++	/* If the pointers point to different address spaces, conversion needs
++	   to be done via a ADDR_SPACE_CONVERT_EXPR instead of a NOP_EXPR.  */
++	addr_space_t to_as = TYPE_ADDR_SPACE (TREE_TYPE (type));
++	addr_space_t from_as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (expr)));
++
++	if (to_as == from_as)
++	  return fold_build1 (NOP_EXPR, type, expr);
++	else
++	  return fold_build1 (ADDR_SPACE_CONVERT_EXPR, type, expr);
++      }
+ 
+     case INTEGER_TYPE:
+     case ENUMERAL_TYPE:
+     case BOOLEAN_TYPE:
+-      if (TYPE_PRECISION (TREE_TYPE (expr)) != POINTER_SIZE)
+-	expr = fold_build1 (NOP_EXPR,
+-                            lang_hooks.types.type_for_size (POINTER_SIZE, 0),
+-			    expr);
++      {
++	/* If the input precision differs from the target pointer type
++	   precision, first convert the input expression to an integer type of
++	   the target precision.  Some targets, e.g. VMS, need several pointer
++	   sizes to coexist so the latter isn't necessarily POINTER_SIZE.  */
++	unsigned int pprec = TYPE_PRECISION (type);
++	unsigned int eprec = TYPE_PRECISION (TREE_TYPE (expr));
++
++	if (eprec != pprec)
++	  expr = fold_build1 (NOP_EXPR,
++			      lang_hooks.types.type_for_size (pprec, 0),
++			      expr);
++      }
++
+       return fold_build1 (CONVERT_EXPR, type, expr);
+ 
+ 
+@@ -488,10 +508,13 @@ convert_to_integer (tree type, tree expr
+       if (integer_zerop (expr))
+ 	return build_int_cst (type, 0);
+ 
+-      /* Convert to an unsigned integer of the correct width first,
+-	 and from there widen/truncate to the required type.  */
++      /* Convert to an unsigned integer of the correct width first, and from
++	 there widen/truncate to the required type.  Some targets support the
++	 coexistence of multiple valid pointer sizes, so fetch the one we need
++	 from the type.  */
+       expr = fold_build1 (CONVERT_EXPR,
+-			  lang_hooks.types.type_for_size (POINTER_SIZE, 0),
++			  lang_hooks.types.type_for_size
++			    (TYPE_PRECISION (intype), 0),
+ 			  expr);
+       return fold_convert (type, expr);
+ 
+diff -urNp gcc-4.4.4.orig/gcc/coretypes.h gcc-4.4.4/gcc/coretypes.h
+--- a/src/gcc/coretypes.h	2009-04-10
++++ b/src/gcc/coretypes.h	2010-06-30
+@@ -67,6 +67,13 @@ struct gimple_seq_node_d;
+ typedef struct gimple_seq_node_d *gimple_seq_node;
+ typedef const struct gimple_seq_node_d *const_gimple_seq_node;
+ 
++/* Address space number for named address space support.  */
++typedef unsigned char addr_space_t;
++
++/* The value of addr_space_t that represents the generic address space.  */
++#define ADDR_SPACE_GENERIC 0
++#define ADDR_SPACE_GENERIC_P(AS) ((AS) == ADDR_SPACE_GENERIC)
++
+ /* The major intermediate representations of GCC.  */
+ enum ir_type {
+   IR_GIMPLE,
+diff -urNp gcc-4.4.4.orig/gcc/cp/typeck.c gcc-4.4.4/gcc/cp/typeck.c
+--- a/src/gcc/cp/typeck.c	2010-06-30
++++ b/src/gcc/cp/typeck.c	2010-06-30
+@@ -3503,7 +3503,11 @@ cp_build_binary_op (location_t location,
+     case FLOOR_MOD_EXPR:
+       warn_for_div_by_zero (location, op1);
+ 
+-      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
++      if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
++	  && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
++	  && TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE)
++	common = 1;
++      else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
+ 	{
+ 	  /* Although it would be tempting to shorten always here, that loses
+ 	     on some targets, since the modulo instruction is undefined if the
+diff -urNp gcc-4.4.4.orig/gcc/c-parser.c gcc-4.4.4/gcc/c-parser.c
+--- a/src/gcc/c-parser.c	2009-06-23
++++ b/src/gcc/c-parser.c	2010-06-30
+@@ -70,6 +70,10 @@ c_parse_init (void)
+   tree id;
+   int mask = 0;
+ 
++  /* Make sure RID_MAX hasn't grown past the 8 bits used to hold the keyword in
++     the c_token structure.  */
++  gcc_assert (RID_MAX <= 255);
++
+   mask |= D_CXXONLY;
+   if (!flag_isoc99)
+     mask |= D_C99;
+@@ -130,6 +134,8 @@ typedef enum c_id_kind {
+   C_ID_TYPENAME,
+   /* An identifier declared as an Objective-C class name.  */
+   C_ID_CLASSNAME,
++  /* An address space identifier.  */
++  C_ID_ADDRSPACE,
+   /* Not an identifier.  */
+   C_ID_NONE
+ } c_id_kind;
+@@ -226,6 +232,13 @@ c_lex_one_token (c_parser *parser, c_tok
+ 			    "identifier %qs conflicts with C++ keyword",
+ 			    IDENTIFIER_POINTER (token->value));
+ 	      }
++	    else if (rid_code >= RID_FIRST_ADDR_SPACE
++		     && rid_code <= RID_LAST_ADDR_SPACE)
++	      {
++		token->id_kind = C_ID_ADDRSPACE;
++		token->keyword = rid_code;
++		break;
++	      }
+ 	    else if (c_dialect_objc ())
+ 	      {
+ 		if (!objc_is_reserved_word (token->value)
+@@ -352,6 +365,8 @@ c_token_starts_typename (c_token *token)
+ 	{
+ 	case C_ID_ID:
+ 	  return false;
++	case C_ID_ADDRSPACE:
++	  return true;
+ 	case C_ID_TYPENAME:
+ 	  return true;
+ 	case C_ID_CLASSNAME:
+@@ -422,6 +437,8 @@ c_token_starts_declspecs (c_token *token
+ 	{
+ 	case C_ID_ID:
+ 	  return false;
++	case C_ID_ADDRSPACE:
++	  return true;
+ 	case C_ID_TYPENAME:
+ 	  return true;
+ 	case C_ID_CLASSNAME:
+@@ -1391,6 +1408,7 @@ c_parser_asm_definition (c_parser *parse
+      const
+      restrict
+      volatile
++     address-space-qualifier
+ 
+    (restrict is new in C99.)
+ 
+@@ -1399,6 +1417,12 @@ c_parser_asm_definition (c_parser *parse
+    declaration-specifiers:
+      attributes declaration-specifiers[opt]
+ 
++   type-qualifier:
++     address-space
++
++   address-space:
++     identifier recognized by the target
++
+    storage-class-specifier:
+      __thread
+ 
+@@ -1438,6 +1462,17 @@ c_parser_declspecs (c_parser *parser, st
+ 	{
+ 	  tree value = c_parser_peek_token (parser)->value;
+ 	  c_id_kind kind = c_parser_peek_token (parser)->id_kind;
++
++	  if (kind == C_ID_ADDRSPACE)
++	    {
++	      addr_space_t as
++		= c_parser_peek_token (parser)->keyword - RID_FIRST_ADDR_SPACE;
++	      declspecs_add_addrspace (specs, as);
++	      c_parser_consume_token (parser);
++	      attrs_ok = true;
++	      continue;
++	    }
++
+ 	  /* This finishes the specifiers unless a type name is OK, it
+ 	     is declared as a type name and a type name hasn't yet
+ 	     been seen.  */
+@@ -5549,6 +5584,14 @@ c_parser_postfix_expression_after_paren_
+   finish_init ();
+   maybe_warn_string_init (type, init);
+ 
++  if (type != error_mark_node
++      && !ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (type))
++      && current_function_decl)
++    {
++      error ("compound literal qualified by address-space qualifier");
++      type = error_mark_node;
++    }
++
+   if (!flag_isoc99)
+     pedwarn (start_loc, OPT_pedantic, "ISO C90 forbids compound literals");
+   expr.value = build_compound_literal (type, init.value);
+diff -urNp gcc-4.4.4.orig/gcc/c-pretty-print.c gcc-4.4.4/gcc/c-pretty-print.c
+--- a/src/gcc/c-pretty-print.c	2009-01-09
++++ b/src/gcc/c-pretty-print.c	2010-06-30
+@@ -220,7 +220,11 @@ pp_c_space_for_pointer_operator (c_prett
+        const
+        restrict                              -- C99
+        __restrict__                          -- GNU C
+-       volatile    */
++       address-space-qualifier		     -- GNU C
++       volatile
++
++   address-space-qualifier:
++       identifier			     -- GNU C  */
+ 
+ void
+ pp_c_type_qualifier_list (c_pretty_printer *pp, tree t)
+@@ -240,6 +244,12 @@ pp_c_type_qualifier_list (c_pretty_print
+     pp_c_cv_qualifier (pp, "volatile");
+   if (qualifiers & TYPE_QUAL_RESTRICT)
+     pp_c_cv_qualifier (pp, flag_isoc99 ? "restrict" : "__restrict__");
++
++  if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (t)))
++    {
++      const char *as = c_addr_space_name (TYPE_ADDR_SPACE (t));
++      pp_c_identifier (pp, as);
++    }
+ }
+ 
+ /* pointer:
+diff -urNp gcc-4.4.4.orig/gcc/cse.c gcc-4.4.4/gcc/cse.c
+--- a/src/gcc/cse.c	2010-06-30
++++ b/src/gcc/cse.c	2010-06-30
+@@ -2435,6 +2435,10 @@ exp_equiv_p (const_rtx x, const_rtx y, i
+   if (GET_MODE (x) != GET_MODE (y))
+     return 0;
+ 
++  /* MEMs refering to different address space are not equivalent.  */
++  if (code == MEM && MEM_ADDR_SPACE (x) != MEM_ADDR_SPACE (y))
++    return 0;
++
+   switch (code)
+     {
+     case PC:
+diff -urNp gcc-4.4.4.orig/gcc/cselib.c gcc-4.4.4/gcc/cselib.c
+--- a/src/gcc/cselib.c	2009-04-27
++++ b/src/gcc/cselib.c	2010-06-30
+@@ -1689,7 +1689,13 @@ cselib_record_sets (rtx insn)
+ 	    src = gen_rtx_IF_THEN_ELSE (GET_MODE (dest), cond, src, dest);
+ 	  sets[i].src_elt = cselib_lookup (src, GET_MODE (dest), 1);
+ 	  if (MEM_P (dest))
+-	    sets[i].dest_addr_elt = cselib_lookup (XEXP (dest, 0), Pmode, 1);
++	    {
++	      enum machine_mode address_mode
++		= targetm.addr_space.address_mode (MEM_ADDR_SPACE (dest));
++
++	      sets[i].dest_addr_elt = cselib_lookup (XEXP (dest, 0),
++						     address_mode, 1);
++	    }
+ 	  else
+ 	    sets[i].dest_addr_elt = 0;
+ 	}
+diff -urNp gcc-4.4.4.orig/gcc/c-tree.h gcc-4.4.4/gcc/c-tree.h
+--- a/src/gcc/c-tree.h	2010-06-30
++++ b/src/gcc/c-tree.h	2010-06-30
+@@ -287,6 +287,8 @@ struct c_declspecs {
+   BOOL_BITFIELD restrict_p : 1;
+   /* Whether "_Sat" was specified.  */
+   BOOL_BITFIELD saturating_p : 1;
++  /* The address space that the declaration belongs to.  */
++  addr_space_t address_space;
+ };
+ 
+ /* The various kinds of declarators in C.  */
+@@ -517,6 +519,8 @@ extern struct c_declspecs *declspecs_add
+ 					       struct c_typespec);
+ extern struct c_declspecs *declspecs_add_scspec (struct c_declspecs *, tree);
+ extern struct c_declspecs *declspecs_add_attrs (struct c_declspecs *, tree);
++extern struct c_declspecs *declspecs_add_addrspace (struct c_declspecs *,
++						    addr_space_t);
+ extern struct c_declspecs *finish_declspecs (struct c_declspecs *);
+ 
+ /* in c-objc-common.c */
+diff -urNp gcc-4.4.4.orig/gcc/c-typeck.c gcc-4.4.4/gcc/c-typeck.c
+--- a/src/gcc/c-typeck.c	2010-06-30
++++ b/src/gcc/c-typeck.c	2010-06-30
+@@ -242,14 +242,55 @@ c_type_promotes_to (tree type)
+   return type;
+ }
+ 
++/* Return true if between two named address spaces, whether there is a superset
++   named address space that encompasses both address spaces.  If there is a
++   superset, return which address space is the superset.  */
++
++static bool
++addr_space_superset (addr_space_t as1, addr_space_t as2, addr_space_t *common)
++{
++  if (as1 == as2)
++    {
++      *common = as1;
++      return true;
++    }
++  else if (targetm.addr_space.subset_p (as1, as2))
++    {
++      *common = as2;
++      return true;
++    }
++  else if (targetm.addr_space.subset_p (as2, as1))
++    {
++      *common = as1;
++      return true;
++    }
++  else
++    return false;
++}
++
+ /* Return a variant of TYPE which has all the type qualifiers of LIKE
+    as well as those of TYPE.  */
+ 
+ static tree
+ qualify_type (tree type, tree like)
+ {
++  addr_space_t as_type = TYPE_ADDR_SPACE (type);
++  addr_space_t as_like = TYPE_ADDR_SPACE (like);
++  addr_space_t as_common;
++
++  /* If the two named address spaces are different, determine the common
++     superset address space.  If there isn't one, raise an error.  */
++  if (!addr_space_superset (as_type, as_like, &as_common))
++    {
++      as_common = as_type;
++      error ("%qT and %qT are in disjoint named address spaces",
++	     type, like);
++    }
++
+   return c_build_qualified_type (type,
+-				 TYPE_QUALS (type) | TYPE_QUALS (like));
++				 TYPE_QUALS_NO_ADDR_SPACE (type)
++				 | TYPE_QUALS_NO_ADDR_SPACE (like)
++				 | ENCODE_QUAL_ADDR_SPACE (as_common));
+ }
+ 
+ /* Return true iff the given tree T is a variable length array.  */
+@@ -329,7 +370,8 @@ composite_type (tree t1, tree t2)
+ 	bool t1_complete, t2_complete;
+ 
+ 	/* We should not have any type quals on arrays at all.  */
+-	gcc_assert (!TYPE_QUALS (t1) && !TYPE_QUALS (t2));
++	gcc_assert (!TYPE_QUALS_NO_ADDR_SPACE (t1)
++		    && !TYPE_QUALS_NO_ADDR_SPACE (t2));
+ 
+ 	t1_complete = COMPLETE_TYPE_P (t1);
+ 	t2_complete = COMPLETE_TYPE_P (t2);
+@@ -543,6 +585,8 @@ common_pointer_type (tree t1, tree t2)
+   tree pointed_to_2, mv2;
+   tree target;
+   unsigned target_quals;
++  addr_space_t as1, as2, as_common;
++  int quals1, quals2;
+ 
+   /* Save time if the two types are the same.  */
+ 
+@@ -574,10 +618,24 @@ common_pointer_type (tree t1, tree t2)
+   /* For function types do not merge const qualifiers, but drop them
+      if used inconsistently.  The middle-end uses these to mark const
+      and noreturn functions.  */
++  quals1 = TYPE_QUALS_NO_ADDR_SPACE (pointed_to_1);
++  quals2 = TYPE_QUALS_NO_ADDR_SPACE (pointed_to_2);
++
+   if (TREE_CODE (pointed_to_1) == FUNCTION_TYPE)
+-    target_quals = TYPE_QUALS (pointed_to_1) & TYPE_QUALS (pointed_to_2);
++    target_quals = (quals1 & quals2);
+   else
+-    target_quals = TYPE_QUALS (pointed_to_1) | TYPE_QUALS (pointed_to_2);
++    target_quals = (quals1 | quals2);
++
++  /* If the two named address spaces are different, determine the common
++     superset address space.  This is guaranteed to exist due to the
++     assumption that comp_target_type returned non-zero.  */
++  as1 = TYPE_ADDR_SPACE (pointed_to_1);
++  as2 = TYPE_ADDR_SPACE (pointed_to_2);
++  if (!addr_space_superset (as1, as2, &as_common))
++    gcc_unreachable ();
++
++  target_quals |= ENCODE_QUAL_ADDR_SPACE (as_common);
++
+   t1 = build_pointer_type (c_build_qualified_type (target, target_quals));
+   return build_type_attribute_variant (t1, attributes);
+ }
+@@ -1032,14 +1090,24 @@ comptypes_internal (const_tree type1, co
+   return attrval == 2 && val == 1 ? 2 : val;
+ }
+ 
+-/* Return 1 if TTL and TTR are pointers to types that are equivalent,
+-   ignoring their qualifiers.  */
++/* Return 1 if TTL and TTR are pointers to types that are equivalent, ignoring
++   their qualifiers, except for named address spaces.  If the pointers point to
++   different named addresses, then we must determine if one address space is a
++   subset of the other.  */
+ 
+ static int
+ comp_target_types (tree ttl, tree ttr)
+ {
+   int val;
+-  tree mvl, mvr;
++  tree mvl = TREE_TYPE (ttl);
++  tree mvr = TREE_TYPE (ttr);
++  addr_space_t asl = TYPE_ADDR_SPACE (mvl);
++  addr_space_t asr = TYPE_ADDR_SPACE (mvr);
++  addr_space_t as_common;
++
++  /* Fail if pointers point to incompatible address spaces.  */
++  if (!addr_space_superset (asl, asr, &as_common))
++    return 0;
+ 
+   /* Do not lose qualifiers on element types of array types that are
+      pointer targets by taking their TYPE_MAIN_VARIANT.  */
+@@ -2845,11 +2913,43 @@ static tree
+ pointer_diff (tree op0, tree op1)
+ {
+   tree restype = ptrdiff_type_node;
++  tree result, inttype;
+ 
++  addr_space_t as0 = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (op0)));
++  addr_space_t as1 = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (op1)));
+   tree target_type = TREE_TYPE (TREE_TYPE (op0));
+   tree con0, con1, lit0, lit1;
+   tree orig_op1 = op1;
+ 
++  /* If the operands point into different address spaces, we need to
++     explicitly convert them to pointers into the common address space
++     before we can subtract the numerical address values.  */
++  if (as0 != as1)
++    {
++      addr_space_t as_common;
++      tree common_type;
++
++      /* Determine the common superset address space.  This is guaranteed
++	 to exist because the caller verified that comp_target_types
++	 returned non-zero.  */
++      if (!addr_space_superset (as0, as1, &as_common))
++	gcc_unreachable ();
++
++      common_type = common_pointer_type (TREE_TYPE (op0), TREE_TYPE (op1));
++      op0 = convert (common_type, op0);
++      op1 = convert (common_type, op1);
++    }
++
++  /* Determine integer type to perform computations in.  This will usually
++     be the same as the result type (ptrdiff_t), but may need to be a wider
++     type if pointers for the address space are wider than ptrdiff_t.  */
++  if (TYPE_PRECISION (restype) < TYPE_PRECISION (TREE_TYPE (op0)))
++    inttype = lang_hooks.types.type_for_size
++		(TYPE_PRECISION (TREE_TYPE (op0)), 0);
++  else
++    inttype = restype;
++
++
+   if (TREE_CODE (target_type) == VOID_TYPE)
+     pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith, 
+ 	     "pointer of type %<void *%> used in subtraction");
+@@ -2907,8 +3007,8 @@ pointer_diff (tree op0, tree op1)
+      in case restype is a short type.  */
+ 
+   op0 = build_binary_op (input_location,
+-			 MINUS_EXPR, convert (restype, op0),
+-			 convert (restype, op1), 0);
++			 MINUS_EXPR, convert (inttype, op0),
++			 convert (inttype, op1), 0);
+   /* This generates an error if op1 is pointer to incomplete type.  */
+   if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
+     error ("arithmetic on pointer to an incomplete type");
+@@ -2917,7 +3017,10 @@ pointer_diff (tree op0, tree op1)
+   op1 = c_size_in_bytes (target_type);
+ 
+   /* Divide by the size, in easiest possible way.  */
+-  return fold_build2 (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
++  result = fold_build2 (EXACT_DIV_EXPR, inttype, op0, convert (inttype, op1));
++
++  /* Convert to final result type if necessary.  */
++  return convert (restype, result);
+ }
+ 
+ /* Construct and perhaps optimize a tree representation
+@@ -3532,12 +3635,22 @@ build_conditional_expr (tree ifexp, tree
+     }
+   else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
+     {
++      addr_space_t as1 = TYPE_ADDR_SPACE (TREE_TYPE (type1));
++      addr_space_t as2 = TYPE_ADDR_SPACE (TREE_TYPE (type2));
++      addr_space_t as_common;
++
+       if (comp_target_types (type1, type2))
+ 	result_type = common_pointer_type (type1, type2);
+       else if (null_pointer_constant_p (orig_op1))
+-	result_type = qualify_type (type2, type1);
++	result_type = type2;
+       else if (null_pointer_constant_p (orig_op2))
+-	result_type = qualify_type (type1, type2);
++	result_type = type1;
++      else if (!addr_space_superset (as1, as2, &as_common))
++	{
++	  error ("pointers to disjoint address spaces "
++		 "used in conditional expression");
++	  return error_mark_node;
++	}
+       else if (VOID_TYPE_P (TREE_TYPE (type1)))
+ 	{
+ 	  if (TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
+@@ -3558,10 +3671,13 @@ build_conditional_expr (tree ifexp, tree
+ 	}
+       else
+ 	{
++	  int qual = ENCODE_QUAL_ADDR_SPACE (as_common);
++
+ 	  if (!objc_ok)
+ 	    pedwarn (input_location, 0, 
+ 		     "pointer type mismatch in conditional expression");
+-	  result_type = build_pointer_type (void_type_node);
++	  result_type = build_pointer_type
++			  (build_qualified_type (void_type_node, qual));
+ 	}
+     }
+   else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
+@@ -3729,7 +3845,9 @@ build_c_cast (tree type, tree expr)
+ 
+       otype = TREE_TYPE (value);
+ 
+-      /* Optionally warn about potentially worrisome casts.  */
++      /* Optionally warn about potentially worrisome casts.
++	 Named address space qualifiers are handled below,
++	 because they result in different warnings.  */
+ 
+       if (warn_cast_qual
+ 	  && TREE_CODE (type) == POINTER_TYPE
+@@ -3755,9 +3873,11 @@ build_c_cast (tree type, tree expr)
+ 		 are added, not when they're taken away.  */
+ 	      if (TREE_CODE (in_otype) == FUNCTION_TYPE
+ 		  && TREE_CODE (in_type) == FUNCTION_TYPE)
+-		added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
++		added |= (TYPE_QUALS_NO_ADDR_SPACE (in_type)
++			  & ~TYPE_QUALS_NO_ADDR_SPACE (in_otype));
+ 	      else
+-		discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
++		discarded |= (TYPE_QUALS_NO_ADDR_SPACE (in_otype)
++			      & ~TYPE_QUALS_NO_ADDR_SPACE (in_type));
+ 	    }
+ 	  while (TREE_CODE (in_type) == POINTER_TYPE
+ 		 && TREE_CODE (in_otype) == POINTER_TYPE);
+@@ -3771,6 +3891,36 @@ build_c_cast (tree type, tree expr)
+ 	    warning (OPT_Wcast_qual, "cast discards qualifiers from pointer target type");
+ 	}
+ 
++      /* Warn about conversions between pointers to disjoint
++	 address spaces.  */
++      if (TREE_CODE (type) == POINTER_TYPE
++	  && TREE_CODE (otype) == POINTER_TYPE
++	  && !null_pointer_constant_p (value))
++	{
++	  addr_space_t as_to = TYPE_ADDR_SPACE (TREE_TYPE (type));
++	  addr_space_t as_from = TYPE_ADDR_SPACE (TREE_TYPE (otype));
++	  addr_space_t as_common;
++
++	  if (!addr_space_superset (as_to, as_from, &as_common))
++	    {
++	      if (ADDR_SPACE_GENERIC_P (as_from))
++		warning (0, "cast to %s address space pointer "
++			 "from disjoint generic address space pointer",
++			 c_addr_space_name (as_to));
++
++	      else if (ADDR_SPACE_GENERIC_P (as_to))
++		warning (0, "cast to generic address space pointer "
++			 "from disjoint %s address space pointer",
++			 c_addr_space_name (as_from));
++
++	      else
++		warning (0, "cast to %s address space pointer "
++			 "from disjoint %s address space pointer",
++			 c_addr_space_name (as_to),
++			 c_addr_space_name (as_from));
++	    }
++	}
++
+       /* Warn about possible alignment problems.  */
+       if (STRICT_ALIGNMENT
+ 	  && TREE_CODE (type) == POINTER_TYPE
+@@ -4232,7 +4382,8 @@ convert_for_assignment (tree type, tree 
+ 		     certain things, it is okay to use a const or volatile
+ 		     function where an ordinary one is wanted, but not
+ 		     vice-versa.  */
+-		  if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
++		  if (TYPE_QUALS_NO_ADDR_SPACE (ttl)
++		      & ~TYPE_QUALS_NO_ADDR_SPACE (ttr))
+ 		    WARN_FOR_ASSIGNMENT (input_location, 0,
+ 					 G_("passing argument %d of %qE "
+ 					    "makes qualified function "
+@@ -4246,7 +4397,8 @@ convert_for_assignment (tree type, tree 
+ 					 G_("return makes qualified function "
+ 					    "pointer from unqualified"));
+ 		}
+-	      else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
++	      else if (TYPE_QUALS_NO_ADDR_SPACE (ttr)
++		       & ~TYPE_QUALS_NO_ADDR_SPACE (ttl))
+ 		WARN_FOR_ASSIGNMENT (input_location, 0,
+ 				     G_("passing argument %d of %qE discards "
+ 					"qualifiers from pointer target type"),
+@@ -4279,6 +4431,8 @@ convert_for_assignment (tree type, tree 
+       tree mvr = ttr;
+       bool is_opaque_pointer;
+       int target_cmp = 0;   /* Cache comp_target_types () result.  */
++      addr_space_t asl;
++      addr_space_t asr;
+ 
+       if (TREE_CODE (mvl) != ARRAY_TYPE)
+ 	mvl = TYPE_MAIN_VARIANT (mvl);
+@@ -4298,6 +4452,36 @@ convert_for_assignment (tree type, tree 
+ 	warning (OPT_Wc___compat, "request for implicit conversion from "
+ 		 "%qT to %qT not permitted in C++", rhstype, type);
+ 
++      /* See if the pointers point to incompatible address spaces.  */
++      asl = TYPE_ADDR_SPACE (ttl);
++      asr = TYPE_ADDR_SPACE (ttr);
++      if (!null_pointer_constant_p (rhs)
++	  && asr != asl && !targetm.addr_space.subset_p (asr, asl))
++	{
++	  switch (errtype)
++	    {
++	    case ic_argpass:
++	      error ("passing argument %d of %qE from pointer to "
++		     "non-enclosed address space", parmnum, rname);
++	      break;
++	    case ic_assign:
++	      error ("assignment from pointer to "
++		     "non-enclosed address space");
++	      break;
++	    case ic_init:
++	      error ("initialization from pointer to "
++		     "non-enclosed address space");
++	      break;
++	    case ic_return:
++	      error ("return from pointer to "
++		     "non-enclosed address space");
++	      break;
++	    default:
++	      gcc_unreachable ();
++	    }
++	  return error_mark_node;
++	}
++
+       /* Check if the right-hand side has a format attribute but the
+ 	 left-hand side doesn't.  */
+       if (warn_missing_format_attribute
+@@ -4361,7 +4545,8 @@ convert_for_assignment (tree type, tree 
+ 	  else if (TREE_CODE (ttr) != FUNCTION_TYPE
+ 		   && TREE_CODE (ttl) != FUNCTION_TYPE)
+ 	    {
+-	      if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
++	      if (TYPE_QUALS_NO_ADDR_SPACE (ttr)
++		  & ~TYPE_QUALS_NO_ADDR_SPACE (ttl))
+ 		{
+ 		  /* Types differing only by the presence of the 'volatile'
+ 		     qualifier are acceptable if the 'volatile' has been added
+@@ -4401,7 +4586,8 @@ convert_for_assignment (tree type, tree 
+ 		 that say the function will not do certain things,
+ 		 it is okay to use a const or volatile function
+ 		 where an ordinary one is wanted, but not vice-versa.  */
+-	      if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
++	      if (TYPE_QUALS_NO_ADDR_SPACE (ttl)
++		  & ~TYPE_QUALS_NO_ADDR_SPACE (ttr))
+ 		WARN_FOR_ASSIGNMENT (input_location, 0,
+ 				     G_("passing argument %d of %qE makes "
+ 					"qualified function pointer "
+@@ -6710,7 +6896,8 @@ process_init_element (struct c_expr valu
+ 	   || TREE_CODE (constructor_type) == UNION_TYPE)
+ 	  && constructor_fields == 0)
+ 	process_init_element (pop_init_level (1), true);
+-      else if (TREE_CODE (constructor_type) == ARRAY_TYPE
++      else if ((TREE_CODE (constructor_type) == ARRAY_TYPE
++	        || TREE_CODE (constructor_type) == VECTOR_TYPE)
+ 	       && (constructor_max_index == 0
+ 		   || tree_int_cst_lt (constructor_max_index,
+ 				       constructor_index)))
+@@ -6771,7 +6958,7 @@ process_init_element (struct c_expr valu
+ 		   && value.value != error_mark_node
+ 		   && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
+ 		   && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
+-		       || fieldcode == UNION_TYPE))
++		       || fieldcode == UNION_TYPE || fieldcode == VECTOR_TYPE))
+ 	    {
+ 	      push_init_level (1);
+ 	      continue;
+@@ -6861,7 +7048,7 @@ process_init_element (struct c_expr valu
+ 		   && value.value != error_mark_node
+ 		   && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
+ 		   && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
+-		       || fieldcode == UNION_TYPE))
++		       || fieldcode == UNION_TYPE || fieldcode == VECTOR_TYPE))
+ 	    {
+ 	      push_init_level (1);
+ 	      continue;
+@@ -6901,7 +7088,7 @@ process_init_element (struct c_expr valu
+ 		   && value.value != error_mark_node
+ 		   && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
+ 		   && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
+-		       || eltcode == UNION_TYPE))
++		       || eltcode == UNION_TYPE || eltcode == VECTOR_TYPE))
+ 	    {
+ 	      push_init_level (1);
+ 	      continue;
+@@ -6949,8 +7136,12 @@ process_init_element (struct c_expr valu
+ 
+ 	  /* Now output the actual element.  */
+ 	  if (value.value)
+-	    output_init_element (value.value, strict_string,
+-				 elttype, constructor_index, 1, implicit);
++	    {
++	      if (TREE_CODE (value.value) == VECTOR_CST)
++		elttype = TYPE_MAIN_VARIANT (constructor_type);
++	      output_init_element (value.value, strict_string,
++				   elttype, constructor_index, 1, implicit);
++	    }
+ 
+ 	  constructor_index
+ 	    = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
+@@ -8209,7 +8400,11 @@ build_binary_op (location_t location, en
+     case FLOOR_MOD_EXPR:
+       warn_for_div_by_zero (location, op1);
+ 
+-      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
++      if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
++	  && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
++	  && TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE)
++	common = 1;
++      else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
+ 	{
+ 	  /* Although it would be tempting to shorten always here, that loses
+ 	     on some targets, since the modulo instruction is undefined if the
+@@ -8319,24 +8514,34 @@ build_binary_op (location_t location, en
+ 	{
+ 	  tree tt0 = TREE_TYPE (type0);
+ 	  tree tt1 = TREE_TYPE (type1);
++	  addr_space_t as0 = TYPE_ADDR_SPACE (tt0);
++	  addr_space_t as1 = TYPE_ADDR_SPACE (tt1);
++	  addr_space_t as_common = ADDR_SPACE_GENERIC;
++
+ 	  /* Anything compares with void *.  void * compares with anything.
+ 	     Otherwise, the targets must be compatible
+ 	     and both must be object or both incomplete.  */
+ 	  if (comp_target_types (type0, type1))
+ 	    result_type = common_pointer_type (type0, type1);
++	  else if (null_pointer_constant_p (orig_op0))
++	    result_type = type1;
++	  else if (null_pointer_constant_p (orig_op1))
++	    result_type = type0;
++	  else if (!addr_space_superset (as0, as1, &as_common))
++	    {
++	      error_at (location, "comparison of pointers to "
++			"disjoint address spaces");
++	      return error_mark_node;
++	    }
+ 	  else if (VOID_TYPE_P (tt0))
+ 	    {
+-	      /* op0 != orig_op0 detects the case of something
+-		 whose value is 0 but which isn't a valid null ptr const.  */
+-	      if (pedantic && !null_pointer_constant_p (orig_op0)
+-		  && TREE_CODE (tt1) == FUNCTION_TYPE)
++	      if (pedantic && TREE_CODE (tt1) == FUNCTION_TYPE)
+ 		pedwarn (location, OPT_pedantic, "ISO C forbids "
+ 			 "comparison of %<void *%> with function pointer");
+ 	    }
+ 	  else if (VOID_TYPE_P (tt1))
+ 	    {
+-	      if (pedantic && !null_pointer_constant_p (orig_op1)
+-		  && TREE_CODE (tt0) == FUNCTION_TYPE)
++	      if (pedantic && TREE_CODE (tt0) == FUNCTION_TYPE)
+ 		pedwarn (location, OPT_pedantic, "ISO C forbids "
+ 			 "comparison of %<void *%> with function pointer");
+ 	    }
+@@ -8347,7 +8552,11 @@ build_binary_op (location_t location, en
+ 		       "comparison of distinct pointer types lacks a cast");
+ 
+ 	  if (result_type == NULL_TREE)
+-	    result_type = ptr_type_node;
++	    {
++	      int qual = ENCODE_QUAL_ADDR_SPACE (as_common);
++	      result_type = build_pointer_type
++			      (build_qualified_type (void_type_node, qual));
++	    }
+ 	}
+       else if (code0 == POINTER_TYPE && null_pointer_constant_p (orig_op1))
+ 	{
+@@ -8391,6 +8600,10 @@ build_binary_op (location_t location, en
+ 	short_compare = 1;
+       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
+ 	{
++	  addr_space_t as0 = TYPE_ADDR_SPACE (TREE_TYPE (type0));
++	  addr_space_t as1 = TYPE_ADDR_SPACE (TREE_TYPE (type1));
++	  addr_space_t as_common;
++
+ 	  if (comp_target_types (type0, type1))
+ 	    {
+ 	      result_type = common_pointer_type (type0, type1);
+@@ -8402,9 +8615,17 @@ build_binary_op (location_t location, en
+ 		pedwarn (location, OPT_pedantic, "ISO C forbids "
+ 			 "ordered comparisons of pointers to functions");
+ 	    }
++	  else if (!addr_space_superset (as0, as1, &as_common))
++	    {
++	      error_at (location, "comparison of pointers to "
++			"disjoint address spaces");
++	      return error_mark_node;
++	    }
+ 	  else
+ 	    {
+-	      result_type = ptr_type_node;
++	      int qual = ENCODE_QUAL_ADDR_SPACE (as_common);
++	      result_type = build_pointer_type
++			      (build_qualified_type (void_type_node, qual));
+ 	      pedwarn (location, 0,
+ 		       "comparison of distinct pointer types lacks a cast");
+ 	    }
+diff -urNp gcc-4.4.4.orig/gcc/dse.c gcc-4.4.4/gcc/dse.c
+--- a/src/gcc/dse.c	2010-02-04
++++ b/src/gcc/dse.c	2010-06-30
+@@ -826,9 +826,9 @@ replace_inc_dec (rtx *r, void *d)
+     case POST_INC:
+       {
+ 	rtx r1 = XEXP (x, 0);
+-	rtx c = gen_int_mode (data->size, Pmode);
+-	emit_insn_before (gen_rtx_SET (Pmode, r1, 
+-				       gen_rtx_PLUS (Pmode, r1, c)),
++	rtx c = gen_int_mode (data->size, GET_MODE (r1));
++	emit_insn_before (gen_rtx_SET (VOIDmode, r1,
++				       gen_rtx_PLUS (GET_MODE (r1), r1, c)),
+ 			  data->insn);
+ 	return -1;
+       }
+@@ -837,9 +837,9 @@ replace_inc_dec (rtx *r, void *d)
+     case POST_DEC:
+       {
+ 	rtx r1 = XEXP (x, 0);
+-	rtx c = gen_int_mode (-data->size, Pmode);
+-	emit_insn_before (gen_rtx_SET (Pmode, r1, 
+-				       gen_rtx_PLUS (Pmode, r1, c)),
++	rtx c = gen_int_mode (-data->size, GET_MODE (r1));
++	emit_insn_before (gen_rtx_SET (VOIDmode, r1,
++				       gen_rtx_PLUS (GET_MODE (r1), r1, c)),
+ 			  data->insn);
+ 	return -1;
+       }
+@@ -851,7 +851,7 @@ replace_inc_dec (rtx *r, void *d)
+ 	   insn that contained it.  */
+ 	rtx add = XEXP (x, 0);
+ 	rtx r1 = XEXP (add, 0);
+-	emit_insn_before (gen_rtx_SET (Pmode, r1, add), data->insn);
++	emit_insn_before (gen_rtx_SET (VOIDmode, r1, add), data->insn);
+ 	return -1;
+       }
+ 
+@@ -1065,6 +1065,8 @@ canon_address (rtx mem,
+ 	       HOST_WIDE_INT *offset, 
+ 	       cselib_val **base)
+ {
++  enum machine_mode address_mode
++    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem));
+   rtx mem_address = XEXP (mem, 0);
+   rtx expanded_address, address;
+   int expanded;
+@@ -1104,7 +1106,7 @@ canon_address (rtx mem,
+ 
+   *alias_set_out = 0;
+ 
+-  cselib_lookup (mem_address, Pmode, 1);
++  cselib_lookup (mem_address, address_mode, 1);
+ 
+   if (dump_file)
+     {
+@@ -1170,7 +1172,8 @@ canon_address (rtx mem,
+ 	  address = XEXP (address, 0);
+ 	}
+ 
+-      if (const_or_frame_p (address))
++      if (ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (mem))
++	  && const_or_frame_p (address))
+ 	{
+ 	  group_info_t group = get_group_info (address);
+ 
+@@ -1183,7 +1186,7 @@ canon_address (rtx mem,
+ 	}
+     }
+ 
+-  *base = cselib_lookup (address, Pmode, true);
++  *base = cselib_lookup (address, address_mode, true);
+   *group_id = -1;
+ 
+   if (*base == NULL)
+diff -urNp gcc-4.4.4.orig/gcc/dwarf2out.c gcc-4.4.4/gcc/dwarf2out.c
+--- a/src/gcc/dwarf2out.c	2010-06-30
++++ b/src/gcc/dwarf2out.c	2010-06-30
+@@ -9610,6 +9610,9 @@ modified_type_die (tree type, int is_con
+       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
+ 		       simple_type_size_in_bits (type) / BITS_PER_UNIT);
+       item_type = TREE_TYPE (type);
++      if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
++	add_AT_unsigned (mod_type_die, DW_AT_address_class,
++			 TYPE_ADDR_SPACE (item_type));
+     }
+   else if (code == REFERENCE_TYPE)
+     {
+@@ -9617,6 +9620,9 @@ modified_type_die (tree type, int is_con
+       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
+ 		       simple_type_size_in_bits (type) / BITS_PER_UNIT);
+       item_type = TREE_TYPE (type);
++      if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
++	add_AT_unsigned (mod_type_die, DW_AT_address_class,
++			 TYPE_ADDR_SPACE (item_type));
+     }
+   else if (is_subrange_type (type))
+     {
+diff -urNp gcc-4.4.4.orig/gcc/emit-rtl.c gcc-4.4.4/gcc/emit-rtl.c
+--- a/src/gcc/emit-rtl.c	2009-07-11
++++ b/src/gcc/emit-rtl.c	2010-06-30
+@@ -58,6 +58,7 @@ along with GCC; see the file COPYING3.  
+ #include "langhooks.h"
+ #include "tree-pass.h"
+ #include "df.h"
++#include "target.h"
+ 
+ /* Commonly used modes.  */
+ 
+@@ -193,7 +194,7 @@ static rtx lookup_const_fixed (rtx);
+ static hashval_t mem_attrs_htab_hash (const void *);
+ static int mem_attrs_htab_eq (const void *, const void *);
+ static mem_attrs *get_mem_attrs (alias_set_type, tree, rtx, rtx, unsigned int,
+-				 enum machine_mode);
++				 addr_space_t, enum machine_mode);
+ static hashval_t reg_attrs_htab_hash (const void *);
+ static int reg_attrs_htab_eq (const void *, const void *);
+ static reg_attrs *get_reg_attrs (tree, int);
+@@ -293,6 +294,7 @@ mem_attrs_htab_hash (const void *x)
+   const mem_attrs *const p = (const mem_attrs *) x;
+ 
+   return (p->alias ^ (p->align * 1000)
++	  ^ (p->addrspace * 4000)
+ 	  ^ ((p->offset ? INTVAL (p->offset) : 0) * 50000)
+ 	  ^ ((p->size ? INTVAL (p->size) : 0) * 2500000)
+ 	  ^ (size_t) iterative_hash_expr (p->expr, 0));
+@@ -310,6 +312,7 @@ mem_attrs_htab_eq (const void *x, const 
+ 
+   return (p->alias == q->alias && p->offset == q->offset
+ 	  && p->size == q->size && p->align == q->align
++	  && p->addrspace == q->addrspace
+ 	  && (p->expr == q->expr
+ 	      || (p->expr != NULL_TREE && q->expr != NULL_TREE
+ 		  && operand_equal_p (p->expr, q->expr, 0))));
+@@ -321,7 +324,7 @@ mem_attrs_htab_eq (const void *x, const 
+ 
+ static mem_attrs *
+ get_mem_attrs (alias_set_type alias, tree expr, rtx offset, rtx size,
+-	       unsigned int align, enum machine_mode mode)
++	       unsigned int align, addr_space_t addrspace, enum machine_mode mode)
+ {
+   mem_attrs attrs;
+   void **slot;
+@@ -329,7 +332,7 @@ get_mem_attrs (alias_set_type alias, tre
+   /* If everything is the default, we can just return zero.
+      This must match what the corresponding MEM_* macros return when the
+      field is not present.  */
+-  if (alias == 0 && expr == 0 && offset == 0
++  if (alias == 0 && expr == 0 && offset == 0 && addrspace == 0
+       && (size == 0
+ 	  || (mode != BLKmode && GET_MODE_SIZE (mode) == INTVAL (size)))
+       && (STRICT_ALIGNMENT && mode != BLKmode
+@@ -341,6 +344,7 @@ get_mem_attrs (alias_set_type alias, tre
+   attrs.offset = offset;
+   attrs.size = size;
+   attrs.align = align;
++  attrs.addrspace = addrspace;
+ 
+   slot = htab_find_slot (mem_attrs_htab, &attrs, INSERT);
+   if (*slot == 0)
+@@ -1387,7 +1391,9 @@ operand_subword (rtx op, unsigned int of
+ 
+       else if (reload_completed)
+ 	{
+-	  if (! strict_memory_address_p (word_mode, XEXP (new_rtx, 0)))
++	  if (! strict_memory_address_addr_space_p (word_mode,
++						    XEXP (new_rtx, 0),
++						    MEM_ADDR_SPACE (op)))
+ 	    return 0;
+ 	}
+       else
+@@ -1842,7 +1848,8 @@ set_mem_attributes_minus_bitpos (rtx ref
+ 
+   /* Now set the attributes we computed above.  */
+   MEM_ATTRS (ref)
+-    = get_mem_attrs (alias, expr, offset, size, align, GET_MODE (ref));
++    = get_mem_attrs (alias, expr, offset, size, align,
++		     TYPE_ADDR_SPACE (type), GET_MODE (ref));
+ 
+   /* If this is already known to be a scalar or aggregate, we are done.  */
+   if (MEM_IN_STRUCT_P (ref) || MEM_SCALAR_P (ref))
+@@ -1870,7 +1877,8 @@ set_mem_attrs_from_reg (rtx mem, rtx reg
+   MEM_ATTRS (mem)
+     = get_mem_attrs (MEM_ALIAS_SET (mem), REG_EXPR (reg),
+ 		     GEN_INT (REG_OFFSET (reg)),
+-		     MEM_SIZE (mem), MEM_ALIGN (mem), GET_MODE (mem));
++		     MEM_SIZE (mem), MEM_ALIGN (mem),
++		     MEM_ADDR_SPACE (mem), GET_MODE (mem));
+ }
+ 
+ /* Set the alias set of MEM to SET.  */
+@@ -1885,7 +1893,17 @@ set_mem_alias_set (rtx mem, alias_set_ty
+ 
+   MEM_ATTRS (mem) = get_mem_attrs (set, MEM_EXPR (mem), MEM_OFFSET (mem),
+ 				   MEM_SIZE (mem), MEM_ALIGN (mem),
+-				   GET_MODE (mem));
++				   MEM_ADDR_SPACE (mem), GET_MODE (mem));
++}
++
++/* Set the address space of MEM to ADDRSPACE (target-defined).  */
++
++void
++set_mem_addr_space (rtx mem, addr_space_t addrspace)
++{
++  MEM_ATTRS (mem) = get_mem_attrs (MEM_ALIAS_SET (mem), MEM_EXPR (mem),
++				   MEM_OFFSET (mem), MEM_SIZE (mem),
++				   MEM_ALIGN (mem), addrspace, GET_MODE (mem));
+ }
+ 
+ /* Set the alignment of MEM to ALIGN bits.  */
+@@ -1895,7 +1913,7 @@ set_mem_align (rtx mem, unsigned int ali
+ {
+   MEM_ATTRS (mem) = get_mem_attrs (MEM_ALIAS_SET (mem), MEM_EXPR (mem),
+ 				   MEM_OFFSET (mem), MEM_SIZE (mem), align,
+-				   GET_MODE (mem));
++				   MEM_ADDR_SPACE (mem), GET_MODE (mem));
+ }
+ 
+ /* Set the expr for MEM to EXPR.  */
+@@ -1905,7 +1923,8 @@ set_mem_expr (rtx mem, tree expr)
+ {
+   MEM_ATTRS (mem)
+     = get_mem_attrs (MEM_ALIAS_SET (mem), expr, MEM_OFFSET (mem),
+-		     MEM_SIZE (mem), MEM_ALIGN (mem), GET_MODE (mem));
++		     MEM_SIZE (mem), MEM_ALIGN (mem),
++		     MEM_ADDR_SPACE (mem), GET_MODE (mem));
+ }
+ 
+ /* Set the offset of MEM to OFFSET.  */
+@@ -1915,7 +1934,7 @@ set_mem_offset (rtx mem, rtx offset)
+ {
+   MEM_ATTRS (mem) = get_mem_attrs (MEM_ALIAS_SET (mem), MEM_EXPR (mem),
+ 				   offset, MEM_SIZE (mem), MEM_ALIGN (mem),
+-				   GET_MODE (mem));
++				   MEM_ADDR_SPACE (mem), GET_MODE (mem));
+ }
+ 
+ /* Set the size of MEM to SIZE.  */
+@@ -1925,7 +1944,7 @@ set_mem_size (rtx mem, rtx size)
+ {
+   MEM_ATTRS (mem) = get_mem_attrs (MEM_ALIAS_SET (mem), MEM_EXPR (mem),
+ 				   MEM_OFFSET (mem), size, MEM_ALIGN (mem),
+-				   GET_MODE (mem));
++				   MEM_ADDR_SPACE (mem), GET_MODE (mem));
+ }
+ 
+ /* Return a memory reference like MEMREF, but with its mode changed to MODE
+@@ -1937,23 +1956,25 @@ set_mem_size (rtx mem, rtx size)
+ static rtx
+ change_address_1 (rtx memref, enum machine_mode mode, rtx addr, int validate)
+ {
++  addr_space_t as;
+   rtx new_rtx;
+ 
+   gcc_assert (MEM_P (memref));
++  as = MEM_ADDR_SPACE (memref);
+   if (mode == VOIDmode)
+     mode = GET_MODE (memref);
+   if (addr == 0)
+     addr = XEXP (memref, 0);
+   if (mode == GET_MODE (memref) && addr == XEXP (memref, 0)
+-      && (!validate || memory_address_p (mode, addr)))
++      && (!validate || memory_address_addr_space_p (mode, addr, as)))
+     return memref;
+ 
+   if (validate)
+     {
+       if (reload_in_progress || reload_completed)
+-	gcc_assert (memory_address_p (mode, addr));
++	gcc_assert (memory_address_addr_space_p (mode, addr, as));
+       else
+-	addr = memory_address (mode, addr);
++	addr = memory_address_addr_space (mode, addr, as);
+     }
+ 
+   if (rtx_equal_p (addr, XEXP (memref, 0)) && mode == GET_MODE (memref))
+@@ -1992,7 +2013,8 @@ change_address (rtx memref, enum machine
+     }
+ 
+   MEM_ATTRS (new_rtx)
+-    = get_mem_attrs (MEM_ALIAS_SET (memref), 0, 0, size, align, mmode);
++    = get_mem_attrs (MEM_ALIAS_SET (memref), 0, 0, size, align,
++		     MEM_ADDR_SPACE (memref), mmode);
+ 
+   return new_rtx;
+ }
+@@ -2012,11 +2034,13 @@ adjust_address_1 (rtx memref, enum machi
+   rtx memoffset = MEM_OFFSET (memref);
+   rtx size = 0;
+   unsigned int memalign = MEM_ALIGN (memref);
++  addr_space_t as = MEM_ADDR_SPACE (memref);
++  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
+   int pbits;
+ 
+   /* If there are no changes, just return the original memory reference.  */
+   if (mode == GET_MODE (memref) && !offset
+-      && (!validate || memory_address_p (mode, addr)))
++      && (!validate || memory_address_addr_space_p (mode, addr, as)))
+     return memref;
+ 
+   /* ??? Prefer to create garbage instead of creating shared rtl.
+@@ -2026,7 +2050,7 @@ adjust_address_1 (rtx memref, enum machi
+ 
+   /* Convert a possibly large offset to a signed value within the
+      range of the target address space.  */
+-  pbits = GET_MODE_BITSIZE (Pmode);
++  pbits = GET_MODE_BITSIZE (address_mode);
+   if (HOST_BITS_PER_WIDE_INT > pbits)
+     {
+       int shift = HOST_BITS_PER_WIDE_INT - pbits;
+@@ -2042,7 +2066,7 @@ adjust_address_1 (rtx memref, enum machi
+ 	  && offset >= 0
+ 	  && (unsigned HOST_WIDE_INT) offset
+ 	      < GET_MODE_ALIGNMENT (GET_MODE (memref)) / BITS_PER_UNIT)
+-	addr = gen_rtx_LO_SUM (Pmode, XEXP (addr, 0),
++	addr = gen_rtx_LO_SUM (address_mode, XEXP (addr, 0),
+ 			       plus_constant (XEXP (addr, 1), offset));
+       else
+ 	addr = plus_constant (addr, offset);
+@@ -2075,7 +2099,8 @@ adjust_address_1 (rtx memref, enum machi
+     size = plus_constant (MEM_SIZE (memref), -offset);
+ 
+   MEM_ATTRS (new_rtx) = get_mem_attrs (MEM_ALIAS_SET (memref), MEM_EXPR (memref),
+-				   memoffset, size, memalign, GET_MODE (new_rtx));
++				       memoffset, size, memalign, as,
++				       GET_MODE (new_rtx));
+ 
+   /* At some point, we should validate that this offset is within the object,
+      if all the appropriate values are known.  */
+@@ -2103,8 +2128,10 @@ rtx
+ offset_address (rtx memref, rtx offset, unsigned HOST_WIDE_INT pow2)
+ {
+   rtx new_rtx, addr = XEXP (memref, 0);
++  addr_space_t as = MEM_ADDR_SPACE (memref);
++  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
+ 
+-  new_rtx = simplify_gen_binary (PLUS, Pmode, addr, offset);
++  new_rtx = simplify_gen_binary (PLUS, address_mode, addr, offset);
+ 
+   /* At this point we don't know _why_ the address is invalid.  It
+      could have secondary memory references, multiplies or anything.
+@@ -2113,12 +2140,12 @@ offset_address (rtx memref, rtx offset, 
+      being able to recognize the magic around pic_offset_table_rtx.
+      This stuff is fragile, and is yet another example of why it is
+      bad to expose PIC machinery too early.  */
+-  if (! memory_address_p (GET_MODE (memref), new_rtx)
++  if (! memory_address_addr_space_p (GET_MODE (memref), new_rtx, as)
+       && GET_CODE (addr) == PLUS
+       && XEXP (addr, 0) == pic_offset_table_rtx)
+     {
+       addr = force_reg (GET_MODE (addr), addr);
+-      new_rtx = simplify_gen_binary (PLUS, Pmode, addr, offset);
++      new_rtx = simplify_gen_binary (PLUS, address_mode, addr, offset);
+     }
+ 
+   update_temp_slot_address (XEXP (memref, 0), new_rtx);
+@@ -2133,7 +2160,7 @@ offset_address (rtx memref, rtx offset, 
+   MEM_ATTRS (new_rtx)
+     = get_mem_attrs (MEM_ALIAS_SET (memref), MEM_EXPR (memref), 0, 0,
+ 		     MIN (MEM_ALIGN (memref), pow2 * BITS_PER_UNIT),
+-		     GET_MODE (new_rtx));
++		     as, GET_MODE (new_rtx));
+   return new_rtx;
+ }
+ 
+@@ -2237,7 +2264,8 @@ widen_memory_access (rtx memref, enum ma
+   /* ??? Maybe use get_alias_set on any remaining expression.  */
+ 
+   MEM_ATTRS (new_rtx) = get_mem_attrs (0, expr, memoffset, GEN_INT (size),
+-				   MEM_ALIGN (new_rtx), mode);
++				       MEM_ALIGN (new_rtx),
++				       MEM_ADDR_SPACE (new_rtx), mode);
+ 
+   return new_rtx;
+ }
+@@ -2264,7 +2292,7 @@ get_spill_slot_decl (bool force_build_p)
+   rd = gen_rtx_MEM (BLKmode, frame_pointer_rtx);
+   MEM_NOTRAP_P (rd) = 1;
+   MEM_ATTRS (rd) = get_mem_attrs (new_alias_set (), d, const0_rtx,
+-				  NULL_RTX, 0, BLKmode);
++				  NULL_RTX, 0, ADDR_SPACE_GENERIC, BLKmode);
+   SET_DECL_RTL (d, rd);
+ 
+   return d;
+@@ -2297,7 +2325,7 @@ set_mem_attrs_for_spill (rtx mem)
+ 
+   MEM_ATTRS (mem) = get_mem_attrs (alias, expr, offset,
+ 				   MEM_SIZE (mem), MEM_ALIGN (mem),
+-				   GET_MODE (mem));
++				   ADDR_SPACE_GENERIC, GET_MODE (mem));
+   MEM_NOTRAP_P (mem) = 1;
+ }
+ 
+diff -urNp gcc-4.4.4.orig/gcc/emit-rtl.h gcc-4.4.4/gcc/emit-rtl.h
+--- a/src/gcc/emit-rtl.h	2009-02-20
++++ b/src/gcc/emit-rtl.h	2010-06-30
+@@ -26,6 +26,9 @@ extern void set_mem_alias_set (rtx, alia
+ /* Set the alignment of MEM to ALIGN bits.  */
+ extern void set_mem_align (rtx, unsigned int);
+ 
++/* Set the address space of MEM to ADDRSPACE.  */
++extern void set_mem_addr_space (rtx, addr_space_t);
++
+ /* Set the expr for MEM to EXPR.  */
+ extern void set_mem_expr (rtx, tree);
+ 
+diff -urNp gcc-4.4.4.orig/gcc/explow.c gcc-4.4.4/gcc/explow.c
+--- a/src/gcc/explow.c	2010-06-30
++++ b/src/gcc/explow.c	2010-06-30
+@@ -306,27 +306,27 @@ break_out_memory_refs (rtx x)
+       rtx op1 = break_out_memory_refs (XEXP (x, 1));
+ 
+       if (op0 != XEXP (x, 0) || op1 != XEXP (x, 1))
+-	x = simplify_gen_binary (GET_CODE (x), Pmode, op0, op1);
++	x = simplify_gen_binary (GET_CODE (x), GET_MODE (x), op0, op1);
+     }
+ 
+   return x;
+ }
+ 
+-/* Given X, a memory address in ptr_mode, convert it to an address
+-   in Pmode, or vice versa (TO_MODE says which way).  We take advantage of
+-   the fact that pointers are not allowed to overflow by commuting arithmetic
+-   operations over conversions so that address arithmetic insns can be
+-   used.  */
++/* Given X, a memory address in address space AS' pointer mode, convert it to
++   an address in the address space's address mode, or vice versa (TO_MODE says
++   which way).  We take advantage of the fact that pointers are not allowed to
++   overflow by commuting arithmetic operations over conversions so that address
++   arithmetic insns can be used.  */
+ 
+ rtx
+-convert_memory_address (enum machine_mode to_mode ATTRIBUTE_UNUSED, 
+-			rtx x)
++convert_memory_address_addr_space (enum machine_mode to_mode ATTRIBUTE_UNUSED,
++				   rtx x, addr_space_t as ATTRIBUTE_UNUSED)
+ {
+ #ifndef POINTERS_EXTEND_UNSIGNED
+   gcc_assert (GET_MODE (x) == to_mode || GET_MODE (x) == VOIDmode);
+   return x;
+ #else /* defined(POINTERS_EXTEND_UNSIGNED) */
+-  enum machine_mode from_mode;
++  enum machine_mode pointer_mode, address_mode, from_mode;
+   rtx temp;
+   enum rtx_code code;
+ 
+@@ -334,7 +334,9 @@ convert_memory_address (enum machine_mod
+   if (GET_MODE (x) == to_mode)
+     return x;
+ 
+-  from_mode = to_mode == ptr_mode ? Pmode : ptr_mode;
++  pointer_mode = targetm.addr_space.pointer_mode (as);
++  address_mode = targetm.addr_space.address_mode (as);
++  from_mode = to_mode == pointer_mode ? address_mode : pointer_mode;
+ 
+   /* Here we handle some special cases.  If none of them apply, fall through
+      to the default case.  */
+@@ -375,7 +377,8 @@ convert_memory_address (enum machine_mod
+ 
+     case CONST:
+       return gen_rtx_CONST (to_mode,
+-			    convert_memory_address (to_mode, XEXP (x, 0)));
++			    convert_memory_address_addr_space
++			      (to_mode, XEXP (x, 0), as));
+       break;
+ 
+     case PLUS:
+@@ -389,10 +392,12 @@ convert_memory_address (enum machine_mod
+       if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode)
+ 	  || (GET_CODE (x) == PLUS
+ 	      && GET_CODE (XEXP (x, 1)) == CONST_INT
+-	      && (XEXP (x, 1) == convert_memory_address (to_mode, XEXP (x, 1))
++	      && (XEXP (x, 1) == convert_memory_address_addr_space
++				   (to_mode, XEXP (x, 1), as)
+                  || POINTERS_EXTEND_UNSIGNED < 0)))
+ 	return gen_rtx_fmt_ee (GET_CODE (x), to_mode,
+-			       convert_memory_address (to_mode, XEXP (x, 0)),
++			       convert_memory_address_addr_space
++				 (to_mode, XEXP (x, 0), as),
+ 			       XEXP (x, 1));
+       break;
+ 
+@@ -405,21 +410,22 @@ convert_memory_address (enum machine_mod
+ #endif /* defined(POINTERS_EXTEND_UNSIGNED) */
+ }
+ 
+-/* Return something equivalent to X but valid as a memory address
+-   for something of mode MODE.  When X is not itself valid, this
+-   works by copying X or subexpressions of it into registers.  */
++/* Return something equivalent to X but valid as a memory address for something
++   of mode MODE in the named address space AS.  When X is not itself valid,
++   this works by copying X or subexpressions of it into registers.  */
+ 
+ rtx
+-memory_address (enum machine_mode mode, rtx x)
++memory_address_addr_space (enum machine_mode mode, rtx x, addr_space_t as)
+ {
+   rtx oldx = x;
++  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
+ 
+-  x = convert_memory_address (Pmode, x);
++  x = convert_memory_address_addr_space (address_mode, x, as);
+ 
+   /* By passing constant addresses through registers
+      we get a chance to cse them.  */
+   if (! cse_not_expected && CONSTANT_P (x) && CONSTANT_ADDRESS_P (x))
+-    x = force_reg (Pmode, x);
++    x = force_reg (address_mode, x);
+ 
+   /* We get better cse by rejecting indirect addressing at this stage.
+      Let the combiner create indirect addresses where appropriate.
+@@ -431,12 +437,12 @@ memory_address (enum machine_mode mode, 
+ 	x = break_out_memory_refs (x);
+ 
+       /* At this point, any valid address is accepted.  */
+-      if (memory_address_p (mode, x))
++      if (memory_address_addr_space_p (mode, x, as))
+ 	goto done;
+ 
+       /* If it was valid before but breaking out memory refs invalidated it,
+ 	 use it the old way.  */
+-      if (memory_address_p (mode, oldx))
++      if (memory_address_addr_space_p (mode, oldx, as))
+ 	{
+ 	  x = oldx;
+ 	  goto done;
+@@ -446,7 +452,12 @@ memory_address (enum machine_mode mode, 
+ 	 in certain cases.  This is not necessary since the code
+ 	 below can handle all possible cases, but machine-dependent
+ 	 transformations can make better code.  */
+-      LEGITIMIZE_ADDRESS (x, oldx, mode, done);
++      {
++	rtx orig_x = x;
++	x = targetm.addr_space.legitimize_address (x, oldx, mode, as);
++	if (orig_x != x && memory_address_addr_space_p (mode, x, as))
++	  goto done;
++      }
+ 
+       /* PLUS and MULT can appear in special ways
+ 	 as the result of attempts to make an address usable for indexing.
+@@ -462,12 +473,12 @@ memory_address (enum machine_mode mode, 
+ 	  rtx constant_term = const0_rtx;
+ 	  rtx y = eliminate_constant_term (x, &constant_term);
+ 	  if (constant_term == const0_rtx
+-	      || ! memory_address_p (mode, y))
++	      || ! memory_address_addr_space_p (mode, y, as))
+ 	    x = force_operand (x, NULL_RTX);
+ 	  else
+ 	    {
+ 	      y = gen_rtx_PLUS (GET_MODE (x), copy_to_reg (y), constant_term);
+-	      if (! memory_address_p (mode, y))
++	      if (! memory_address_addr_space_p (mode, y, as))
+ 		x = force_operand (x, NULL_RTX);
+ 	      else
+ 		x = y;
+@@ -485,12 +496,12 @@ memory_address (enum machine_mode mode, 
+       /* Last resort: copy the value to a register, since
+ 	 the register is a valid address.  */
+       else
+-	x = force_reg (Pmode, x);
++	x = force_reg (address_mode, x);
+     }
+ 
+  done:
+ 
+-  gcc_assert (memory_address_p (mode, x));
++  gcc_assert (memory_address_addr_space_p (mode, x, as));
+   /* If we didn't change the address, we are done.  Otherwise, mark
+      a reg as a pointer if we have REG or REG + CONST_INT.  */
+   if (oldx == x)
+@@ -518,7 +529,8 @@ validize_mem (rtx ref)
+   if (!MEM_P (ref))
+     return ref;
+   ref = use_anchored_address (ref);
+-  if (memory_address_p (GET_MODE (ref), XEXP (ref, 0)))
++  if (memory_address_addr_space_p (GET_MODE (ref), XEXP (ref, 0),
++				   MEM_ADDR_SPACE (ref)))
+     return ref;
+ 
+   /* Don't alter REF itself, since that is probably a stack slot.  */
+@@ -789,7 +801,8 @@ promote_mode (const_tree type, enum mach
+ #ifdef POINTERS_EXTEND_UNSIGNED
+     case REFERENCE_TYPE:
+     case POINTER_TYPE:
+-      mode = Pmode;
++      mode = targetm.addr_space.address_mode
++	       (TYPE_ADDR_SPACE (TREE_TYPE (type)));
+       unsignedp = POINTERS_EXTEND_UNSIGNED;
+       break;
+ #endif
+diff -urNp gcc-4.4.4.orig/gcc/expmed.c gcc-4.4.4/gcc/expmed.c
+--- a/src/gcc/expmed.c	2010-06-30
++++ b/src/gcc/expmed.c	2010-06-30
+@@ -5081,10 +5081,11 @@ make_tree (tree type, rtx x)
+     default:
+       t = build_decl (VAR_DECL, NULL_TREE, type);
+ 
+-      /* If TYPE is a POINTER_TYPE, X might be Pmode with TYPE_MODE being
+-	 ptr_mode.  So convert.  */
++      /* If TYPE is a POINTER_TYPE, we might need to convert X from
++	 address mode to pointer mode.  */
+       if (POINTER_TYPE_P (type))
+-	x = convert_memory_address (TYPE_MODE (type), x);
++	x = convert_memory_address_addr_space
++	      (TYPE_MODE (type), x, TYPE_ADDR_SPACE (TREE_TYPE (type)));
+ 
+       /* Note that we do *not* use SET_DECL_RTL here, because we do not
+ 	 want set_decl_rtl to go adjusting REG_ATTRS for this temporary.  */
+diff -urNp gcc-4.4.4.orig/gcc/expr.c gcc-4.4.4/gcc/expr.c
+--- a/src/gcc/expr.c	2010-06-30
++++ b/src/gcc/expr.c	2010-06-30
+@@ -895,6 +895,8 @@ move_by_pieces (rtx to, rtx from, unsign
+ 		unsigned int align, int endp)
+ {
+   struct move_by_pieces data;
++  enum machine_mode to_addr_mode, from_addr_mode
++    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (from));
+   rtx to_addr, from_addr = XEXP (from, 0);
+   unsigned int max_size = MOVE_MAX_PIECES + 1;
+   enum machine_mode mode = VOIDmode, tmode;
+@@ -906,6 +908,7 @@ move_by_pieces (rtx to, rtx from, unsign
+   data.from_addr = from_addr;
+   if (to)
+     {
++      to_addr_mode = targetm.addr_space.address_mode (MEM_ADDR_SPACE (to));
+       to_addr = XEXP (to, 0);
+       data.to = to;
+       data.autinc_to
+@@ -916,6 +919,7 @@ move_by_pieces (rtx to, rtx from, unsign
+     }
+   else
+     {
++      to_addr_mode = VOIDmode;
+       to_addr = NULL_RTX;
+       data.to = NULL_RTX;
+       data.autinc_to = 1;
+@@ -951,32 +955,34 @@ move_by_pieces (rtx to, rtx from, unsign
+ 
+       if (USE_LOAD_PRE_DECREMENT (mode) && data.reverse && ! data.autinc_from)
+ 	{
+-	  data.from_addr = copy_addr_to_reg (plus_constant (from_addr, len));
++	  data.from_addr = copy_to_mode_reg (from_addr_mode,
++					     plus_constant (from_addr, len));
+ 	  data.autinc_from = 1;
+ 	  data.explicit_inc_from = -1;
+ 	}
+       if (USE_LOAD_POST_INCREMENT (mode) && ! data.autinc_from)
+ 	{
+-	  data.from_addr = copy_addr_to_reg (from_addr);
++	  data.from_addr = copy_to_mode_reg (from_addr_mode, from_addr);
+ 	  data.autinc_from = 1;
+ 	  data.explicit_inc_from = 1;
+ 	}
+       if (!data.autinc_from && CONSTANT_P (from_addr))
+-	data.from_addr = copy_addr_to_reg (from_addr);
++	data.from_addr = copy_to_mode_reg (from_addr_mode, from_addr);
+       if (USE_STORE_PRE_DECREMENT (mode) && data.reverse && ! data.autinc_to)
+ 	{
+-	  data.to_addr = copy_addr_to_reg (plus_constant (to_addr, len));
++	  data.to_addr = copy_to_mode_reg (to_addr_mode,
++					   plus_constant (to_addr, len));
+ 	  data.autinc_to = 1;
+ 	  data.explicit_inc_to = -1;
+ 	}
+       if (USE_STORE_POST_INCREMENT (mode) && ! data.reverse && ! data.autinc_to)
+ 	{
+-	  data.to_addr = copy_addr_to_reg (to_addr);
++	  data.to_addr = copy_to_mode_reg (to_addr_mode, to_addr);
+ 	  data.autinc_to = 1;
+ 	  data.explicit_inc_to = 1;
+ 	}
+       if (!data.autinc_to && CONSTANT_P (to_addr))
+-	data.to_addr = copy_addr_to_reg (to_addr);
++	data.to_addr = copy_to_mode_reg (to_addr_mode, to_addr);
+     }
+ 
+   tmode = mode_for_size (MOVE_MAX_PIECES * BITS_PER_UNIT, MODE_INT, 1);
+@@ -1031,7 +1037,8 @@ move_by_pieces (rtx to, rtx from, unsign
+ 	      if (HAVE_POST_INCREMENT && data.explicit_inc_to > 0)
+ 		emit_insn (gen_add2_insn (data.to_addr, constm1_rtx));
+ 	      else
+-		data.to_addr = copy_addr_to_reg (plus_constant (data.to_addr,
++		data.to_addr = copy_to_mode_reg (to_addr_mode,
++						 plus_constant (data.to_addr,
+ 								-1));
+ 	    }
+ 	  to1 = adjust_automodify_address (data.to, QImode, data.to_addr,
+@@ -1233,7 +1240,9 @@ emit_block_move_hints (rtx x, rtx y, rtx
+   else if (emit_block_move_via_movmem (x, y, size, align,
+ 				       expected_align, expected_size))
+     ;
+-  else if (may_use_call)
++  else if (may_use_call
++	   && ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (x))
++	   && ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (y)))
+     retval = emit_block_move_via_libcall (x, y, size,
+ 					  method == BLOCK_OP_TAILCALL);
+   else
+@@ -1484,6 +1493,10 @@ emit_block_move_via_loop (rtx x, rtx y, 
+ 			  unsigned int align ATTRIBUTE_UNUSED)
+ {
+   rtx cmp_label, top_label, iter, x_addr, y_addr, tmp;
++  enum machine_mode x_addr_mode
++    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (x));
++  enum machine_mode y_addr_mode
++    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (y));
+   enum machine_mode iter_mode;
+ 
+   iter_mode = GET_MODE (size);
+@@ -1503,9 +1516,13 @@ emit_block_move_via_loop (rtx x, rtx y, 
+   emit_jump (cmp_label);
+   emit_label (top_label);
+ 
+-  tmp = convert_modes (Pmode, iter_mode, iter, true);
+-  x_addr = gen_rtx_PLUS (Pmode, x_addr, tmp);
+-  y_addr = gen_rtx_PLUS (Pmode, y_addr, tmp);
++  tmp = convert_modes (x_addr_mode, iter_mode, iter, true);
++  x_addr = gen_rtx_PLUS (x_addr_mode, x_addr, tmp);
++
++  if (x_addr_mode != y_addr_mode)
++    tmp = convert_modes (y_addr_mode, iter_mode, iter, true);
++  y_addr = gen_rtx_PLUS (y_addr_mode, y_addr, tmp);
++
+   x = change_address (x, QImode, x_addr);
+   y = change_address (y, QImode, y_addr);
+ 
+@@ -2380,6 +2397,8 @@ store_by_pieces (rtx to, unsigned HOST_W
+ 		 rtx (*constfun) (void *, HOST_WIDE_INT, enum machine_mode),
+ 		 void *constfundata, unsigned int align, bool memsetp, int endp)
+ {
++  enum machine_mode to_addr_mode
++    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (to));
+   struct store_by_pieces data;
+ 
+   if (len == 0)
+@@ -2408,7 +2427,8 @@ store_by_pieces (rtx to, unsigned HOST_W
+ 	      if (HAVE_POST_INCREMENT && data.explicit_inc_to > 0)
+ 		emit_insn (gen_add2_insn (data.to_addr, constm1_rtx));
+ 	      else
+-		data.to_addr = copy_addr_to_reg (plus_constant (data.to_addr,
++		data.to_addr = copy_to_mode_reg (to_addr_mode,
++						 plus_constant (data.to_addr,
+ 								-1));
+ 	    }
+ 	  to1 = adjust_automodify_address (data.to, QImode, data.to_addr,
+@@ -2463,6 +2483,8 @@ static void
+ store_by_pieces_1 (struct store_by_pieces *data ATTRIBUTE_UNUSED,
+ 		   unsigned int align ATTRIBUTE_UNUSED)
+ {
++  enum machine_mode to_addr_mode
++    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (data->to));
+   rtx to_addr = XEXP (data->to, 0);
+   unsigned int max_size = STORE_MAX_PIECES + 1;
+   enum machine_mode mode = VOIDmode, tmode;
+@@ -2494,7 +2516,8 @@ store_by_pieces_1 (struct store_by_piece
+ 
+       if (USE_STORE_PRE_DECREMENT (mode) && data->reverse && ! data->autinc_to)
+ 	{
+-	  data->to_addr = copy_addr_to_reg (plus_constant (to_addr, data->len));
++	  data->to_addr = copy_to_mode_reg (to_addr_mode,
++					    plus_constant (to_addr, data->len));
+ 	  data->autinc_to = 1;
+ 	  data->explicit_inc_to = -1;
+ 	}
+@@ -2502,13 +2525,13 @@ store_by_pieces_1 (struct store_by_piece
+       if (USE_STORE_POST_INCREMENT (mode) && ! data->reverse
+ 	  && ! data->autinc_to)
+ 	{
+-	  data->to_addr = copy_addr_to_reg (to_addr);
++	  data->to_addr = copy_to_mode_reg (to_addr_mode, to_addr);
+ 	  data->autinc_to = 1;
+ 	  data->explicit_inc_to = 1;
+ 	}
+ 
+       if ( !data->autinc_to && CONSTANT_P (to_addr))
+-	data->to_addr = copy_addr_to_reg (to_addr);
++	data->to_addr = copy_to_mode_reg (to_addr_mode, to_addr);
+     }
+ 
+   tmode = mode_for_size (STORE_MAX_PIECES * BITS_PER_UNIT, MODE_INT, 1);
+@@ -2639,9 +2662,11 @@ clear_storage_hints (rtx object, rtx siz
+   else if (set_storage_via_setmem (object, size, const0_rtx, align,
+ 				   expected_align, expected_size))
+     ;
+-  else
++  else if (ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (object)))
+     return set_storage_via_libcall (object, size, const0_rtx,
+ 				    method == BLOCK_OP_TAILCALL);
++  else
++    gcc_unreachable ();
+ 
+   return NULL;
+ }
+@@ -3430,12 +3455,14 @@ emit_move_insn (rtx x, rtx y)
+   /* If X or Y are memory references, verify that their addresses are valid
+      for the machine.  */
+   if (MEM_P (x)
+-      && (! memory_address_p (GET_MODE (x), XEXP (x, 0))
++      && (! memory_address_addr_space_p (GET_MODE (x), XEXP (x, 0),
++					 MEM_ADDR_SPACE (x))
+ 	  && ! push_operand (x, GET_MODE (x))))
+     x = validize_mem (x);
+ 
+   if (MEM_P (y)
+-      && ! memory_address_p (GET_MODE (y), XEXP (y, 0)))
++      && ! memory_address_addr_space_p (GET_MODE (y), XEXP (y, 0),
++					MEM_ADDR_SPACE (y)))
+     y = validize_mem (y);
+ 
+   gcc_assert (mode != BLKmode);
+@@ -4206,6 +4233,7 @@ expand_assignment (tree to, tree from, b
+ 
+       if (offset != 0)
+ 	{
++	  enum machine_mode address_mode;
+ 	  rtx offset_rtx;
+ 
+ 	  if (!MEM_P (to_rtx))
+@@ -4218,13 +4246,10 @@ expand_assignment (tree to, tree from, b
+ 	    }
+ 
+ 	  offset_rtx = expand_expr (offset, NULL_RTX, VOIDmode, EXPAND_SUM);
+-#ifdef POINTERS_EXTEND_UNSIGNED
+-	  if (GET_MODE (offset_rtx) != Pmode)
+-	    offset_rtx = convert_to_mode (Pmode, offset_rtx, 0);
+-#else
+-	  if (GET_MODE (offset_rtx) != ptr_mode)
+-	    offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0);
+-#endif
++	  address_mode
++	    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (to_rtx));
++	  if (GET_MODE (offset_rtx) != address_mode)
++	    offset_rtx = convert_to_mode (address_mode, offset_rtx, 0);
+ 
+ 	  /* A constant address in TO_RTX can have VOIDmode, we must not try
+ 	     to call force_reg for that case.  Avoid that case.  */
+@@ -4327,7 +4352,10 @@ expand_assignment (tree to, tree from, b
+       else
+ 	{
+ 	  if (POINTER_TYPE_P (TREE_TYPE (to)))
+-	    value = convert_memory_address (GET_MODE (to_rtx), value);
++	    value = convert_memory_address_addr_space
++		      (GET_MODE (to_rtx), value,
++		       TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (to))));
++
+ 	  emit_move_insn (to_rtx, value);
+ 	}
+       preserve_temp_slots (to_rtx);
+@@ -4367,6 +4395,8 @@ expand_assignment (tree to, tree from, b
+      the place the value is being stored, use a safe function when copying
+      a value through a pointer into a structure value return block.  */
+   if (TREE_CODE (to) == RESULT_DECL && TREE_CODE (from) == INDIRECT_REF
++      && ADDR_SPACE_GENERIC_P
++	  (TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (from, 0)))))
+       && cfun->returns_struct
+       && !cfun->returns_pcc_struct)
+     {
+@@ -4729,6 +4759,11 @@ store_expr (tree exp, rtx target, int ca
+ 			      ? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL));
+ 	  else
+ 	    {
++	      enum machine_mode pointer_mode
++		= targetm.addr_space.pointer_mode (MEM_ADDR_SPACE (target));
++	      enum machine_mode address_mode
++		= targetm.addr_space.address_mode (MEM_ADDR_SPACE (target));
++
+ 	      /* Compute the size of the data to copy from the string.  */
+ 	      tree copy_size
+ 		= size_binop (MIN_EXPR,
+@@ -4741,14 +4776,14 @@ store_expr (tree exp, rtx target, int ca
+ 	      rtx label = 0;
+ 
+ 	      /* Copy that much.  */
+-	      copy_size_rtx = convert_to_mode (ptr_mode, copy_size_rtx,
++	      copy_size_rtx = convert_to_mode (pointer_mode, copy_size_rtx,
+ 					       TYPE_UNSIGNED (sizetype));
+ 	      emit_block_move (target, temp, copy_size_rtx,
+ 			       (call_param_p
+ 				? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL));
+ 
+ 	      /* Figure out how much is left in TARGET that we have to clear.
+-		 Do all calculations in ptr_mode.  */
++		 Do all calculations in pointer_mode.  */
+ 	      if (GET_CODE (copy_size_rtx) == CONST_INT)
+ 		{
+ 		  size = plus_constant (size, -INTVAL (copy_size_rtx));
+@@ -4761,11 +4796,10 @@ store_expr (tree exp, rtx target, int ca
+ 				       copy_size_rtx, NULL_RTX, 0,
+ 				       OPTAB_LIB_WIDEN);
+ 
+-#ifdef POINTERS_EXTEND_UNSIGNED
+-		  if (GET_MODE (copy_size_rtx) != Pmode)
+-		    copy_size_rtx = convert_to_mode (Pmode, copy_size_rtx,
++		  if (GET_MODE (copy_size_rtx) != address_mode)
++		    copy_size_rtx = convert_to_mode (address_mode,
++						     copy_size_rtx,
+ 						     TYPE_UNSIGNED (sizetype));
+-#endif
+ 
+ 		  target = offset_address (target, copy_size_rtx,
+ 					   highest_pow2_factor (copy_size));
+@@ -5255,6 +5289,7 @@ store_constructor (tree exp, rtx target,
+ 
+ 	    if (offset)
+ 	      {
++	        enum machine_mode address_mode;
+ 		rtx offset_rtx;
+ 
+ 		offset
+@@ -5265,13 +5300,10 @@ store_constructor (tree exp, rtx target,
+ 		offset_rtx = expand_normal (offset);
+ 		gcc_assert (MEM_P (to_rtx));
+ 
+-#ifdef POINTERS_EXTEND_UNSIGNED
+-		if (GET_MODE (offset_rtx) != Pmode)
+-		  offset_rtx = convert_to_mode (Pmode, offset_rtx, 0);
+-#else
+-		if (GET_MODE (offset_rtx) != ptr_mode)
+-		  offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0);
+-#endif
++		address_mode
++		  = targetm.addr_space.address_mode (MEM_ADDR_SPACE (to_rtx));
++		if (GET_MODE (offset_rtx) != address_mode)
++		  offset_rtx = convert_to_mode (address_mode, offset_rtx, 0);
+ 
+ 		to_rtx = offset_address (to_rtx, offset_rtx,
+ 					 highest_pow2_factor (offset));
+@@ -6779,7 +6811,7 @@ expand_expr_constant (tree exp, int defe
+ 
+ static rtx
+ expand_expr_addr_expr_1 (tree exp, rtx target, enum machine_mode tmode,
+-		         enum expand_modifier modifier)
++		         enum expand_modifier modifier, addr_space_t as)
+ {
+   rtx result, subtarget;
+   tree inner, offset;
+@@ -6806,7 +6838,7 @@ expand_expr_addr_expr_1 (tree exp, rtx t
+     case CONST_DECL:
+       /* Recurse and make the output_constant_def clause above handle this.  */
+       return expand_expr_addr_expr_1 (DECL_INITIAL (exp), target,
+-				      tmode, modifier);
++				      tmode, modifier, as);
+ 
+     case REALPART_EXPR:
+       /* The real part of the complex number is always first, therefore
+@@ -6895,7 +6927,7 @@ expand_expr_addr_expr_1 (tree exp, rtx t
+       TYPE_ALIGN (TREE_TYPE (inner)) = TYPE_ALIGN (TREE_TYPE (exp));
+       TYPE_USER_ALIGN (TREE_TYPE (inner)) = 1;
+     }
+-  result = expand_expr_addr_expr_1 (inner, subtarget, tmode, modifier);
++  result = expand_expr_addr_expr_1 (inner, subtarget, tmode, modifier, as);
+ 
+   if (offset)
+     {
+@@ -6907,8 +6939,8 @@ expand_expr_addr_expr_1 (tree exp, rtx t
+ 			 modifier == EXPAND_INITIALIZER
+ 			  ? EXPAND_INITIALIZER : EXPAND_NORMAL);
+ 
+-      result = convert_memory_address (tmode, result);
+-      tmp = convert_memory_address (tmode, tmp);
++      result = convert_memory_address_addr_space (tmode, result, as);
++      tmp = convert_memory_address_addr_space (tmode, tmp, as);
+ 
+       if (modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER)
+ 	result = gen_rtx_PLUS (tmode, result, tmp);
+@@ -6941,6 +6973,9 @@ static rtx
+ expand_expr_addr_expr (tree exp, rtx target, enum machine_mode tmode,
+ 		       enum expand_modifier modifier)
+ {
++  addr_space_t as = ADDR_SPACE_GENERIC;
++  enum machine_mode address_mode = Pmode;
++  enum machine_mode pointer_mode = ptr_mode;
+   enum machine_mode rmode;
+   rtx result;
+ 
+@@ -6948,14 +6983,21 @@ expand_expr_addr_expr (tree exp, rtx tar
+   if (tmode == VOIDmode)
+     tmode = TYPE_MODE (TREE_TYPE (exp));
+ 
++  if (POINTER_TYPE_P (TREE_TYPE (exp)))
++    {
++      as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)));
++      address_mode = targetm.addr_space.address_mode (as);
++      pointer_mode = targetm.addr_space.pointer_mode (as);
++    }
++
+   /* We can get called with some Weird Things if the user does silliness
+      like "(short) &a".  In that case, convert_memory_address won't do
+      the right thing, so ignore the given target mode.  */
+-  if (tmode != Pmode && tmode != ptr_mode)
+-    tmode = Pmode;
++  if (tmode != address_mode && tmode != pointer_mode)
++    tmode = address_mode;
+ 
+   result = expand_expr_addr_expr_1 (TREE_OPERAND (exp, 0), target,
+-				    tmode, modifier);
++				    tmode, modifier, as);
+ 
+   /* Despite expand_expr claims concerning ignoring TMODE when not
+      strictly convenient, stuff breaks if we don't honor it.  Note
+@@ -6964,7 +7006,7 @@ expand_expr_addr_expr (tree exp, rtx tar
+   if (rmode == VOIDmode)
+     rmode = tmode;
+   if (rmode != tmode)
+-    result = convert_memory_address (tmode, result);
++    result = convert_memory_address_addr_space (tmode, result, as);
+ 
+   return result;
+ }
+@@ -7366,7 +7408,9 @@ expand_expr_real_1 (tree exp, rtx target
+ 	  decl_rtl = use_anchored_address (decl_rtl);
+ 	  if (modifier != EXPAND_CONST_ADDRESS
+ 	      && modifier != EXPAND_SUM
+-	      && !memory_address_p (DECL_MODE (exp), XEXP (decl_rtl, 0)))
++	      && !memory_address_addr_space_p (DECL_MODE (exp),
++					       XEXP (decl_rtl, 0),
++					       MEM_ADDR_SPACE (decl_rtl)))
+ 	    temp = replace_equiv_address (decl_rtl,
+ 					  copy_rtx (XEXP (decl_rtl, 0)));
+ 	}
+@@ -7488,7 +7532,8 @@ expand_expr_real_1 (tree exp, rtx target
+       if (modifier != EXPAND_CONST_ADDRESS
+ 	  && modifier != EXPAND_INITIALIZER
+ 	  && modifier != EXPAND_SUM
+-	  && ! memory_address_p (mode, XEXP (temp, 0)))
++	  && ! memory_address_addr_space_p (mode, XEXP (temp, 0),
++					    MEM_ADDR_SPACE (temp)))
+ 	return replace_equiv_address (temp,
+ 				      copy_rtx (XEXP (temp, 0)));
+       return temp;
+@@ -7548,6 +7593,8 @@ expand_expr_real_1 (tree exp, rtx target
+     case INDIRECT_REF:
+       {
+ 	tree exp1 = TREE_OPERAND (exp, 0);
++	addr_space_t as = ADDR_SPACE_GENERIC;
++	enum machine_mode address_mode = Pmode;
+ 
+ 	if (modifier != EXPAND_WRITE)
+ 	  {
+@@ -7558,19 +7605,26 @@ expand_expr_real_1 (tree exp, rtx target
+ 	      return expand_expr (t, target, tmode, modifier);
+ 	  }
+ 
++	if (POINTER_TYPE_P (TREE_TYPE (exp1)))
++	  {
++	    as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp1)));
++	    address_mode = targetm.addr_space.address_mode (as);
++	  }
++
+ 	op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM);
+-	op0 = memory_address (mode, op0);
++	op0 = memory_address_addr_space (mode, op0, as);
+ 
+ 	if (code == ALIGN_INDIRECT_REF)
+ 	  {
+ 	    int align = TYPE_ALIGN_UNIT (type);
+-	    op0 = gen_rtx_AND (Pmode, op0, GEN_INT (-align));
+-	    op0 = memory_address (mode, op0);
++	    op0 = gen_rtx_AND (address_mode, op0, GEN_INT (-align));
++	    op0 = memory_address_addr_space (mode, op0, as);
+ 	  }
+ 
+ 	temp = gen_rtx_MEM (mode, op0);
+ 
+ 	set_mem_attributes (temp, exp, 0);
++	set_mem_addr_space (temp, as);
+ 
+ 	/* Resolve the misalignment now, so that we don't have to remember
+ 	   to resolve it later.  Of course, this only works for reads.  */
+@@ -7606,13 +7660,15 @@ expand_expr_real_1 (tree exp, rtx target
+ 
+     case TARGET_MEM_REF:
+       {
++	addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (exp));
+ 	struct mem_address addr;
+ 
+ 	get_address_description (exp, &addr);
+-	op0 = addr_for_mem_ref (&addr, true);
+-	op0 = memory_address (mode, op0);
++	op0 = addr_for_mem_ref (&addr, as, true);
++	op0 = memory_address_addr_space (mode, op0, as);
+ 	temp = gen_rtx_MEM (mode, op0);
+ 	set_mem_attributes (temp, TMR_ORIGINAL (exp), 0);
++	set_mem_addr_space (temp, as);
+       }
+       return temp;
+ 
+@@ -7898,18 +7954,16 @@ expand_expr_real_1 (tree exp, rtx target
+ 
+ 	if (offset)
+ 	  {
++	    enum machine_mode address_mode;
+ 	    rtx offset_rtx = expand_expr (offset, NULL_RTX, VOIDmode,
+ 					  EXPAND_SUM);
+ 
+ 	    gcc_assert (MEM_P (op0));
+ 
+-#ifdef POINTERS_EXTEND_UNSIGNED
+-	    if (GET_MODE (offset_rtx) != Pmode)
+-	      offset_rtx = convert_to_mode (Pmode, offset_rtx, 0);
+-#else
+-	    if (GET_MODE (offset_rtx) != ptr_mode)
+-	      offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0);
+-#endif
++	    address_mode
++	      = targetm.addr_space.address_mode (MEM_ADDR_SPACE (op0));
++	    if (GET_MODE (offset_rtx) != address_mode)
++	      offset_rtx = convert_to_mode (address_mode, offset_rtx, 0);
+ 
+ 	    if (GET_MODE (op0) == BLKmode
+ 		/* A constant address in OP0 can have VOIDmode, we must
+@@ -8386,6 +8440,40 @@ expand_expr_real_1 (tree exp, rtx target
+ 
+       return op0;
+ 
++    case ADDR_SPACE_CONVERT_EXPR:
++      {
++	tree treeop0 = TREE_OPERAND (exp, 0);
++	tree treeop0_type = TREE_TYPE (treeop0);
++	addr_space_t as_to;
++	addr_space_t as_from;
++
++	gcc_assert (POINTER_TYPE_P (type));
++	gcc_assert (POINTER_TYPE_P (treeop0_type));
++
++	as_to = TYPE_ADDR_SPACE (TREE_TYPE (type));
++	as_from = TYPE_ADDR_SPACE (TREE_TYPE (treeop0_type));
++
++        /* Conversions between pointers to the same address space should
++	   have been implemented via CONVERT_EXPR / NOP_EXPR.  */
++	gcc_assert (as_to != as_from);
++
++        /* Ask target code to handle conversion between pointers
++	   to overlapping address spaces.  */
++	if (targetm.addr_space.subset_p (as_to, as_from)
++	    || targetm.addr_space.subset_p (as_from, as_to))
++	  {
++	    op0 = expand_expr (treeop0, NULL_RTX, VOIDmode, modifier);
++	    op0 = targetm.addr_space.convert (op0, treeop0_type, type);
++	    gcc_assert (op0);
++	    return op0;
++	  }
++
++	/* For disjoint address spaces, converting anything but
++	   a null pointer invokes undefined behaviour.  We simply
++	   always return a null pointer here.  */
++	return CONST0_RTX (mode);
++      }
++
+     case POINTER_PLUS_EXPR: 
+       /* Even though the sizetype mode and the pointer's mode can be different
+          expand is able to handle this correctly and get the correct result out 
+diff -urNp gcc-4.4.4.orig/gcc/expr.h gcc-4.4.4/gcc/expr.h
+--- a/src/gcc/expr.h	2010-06-30
++++ b/src/gcc/expr.h	2010-06-30
+@@ -635,9 +635,15 @@ extern rtx force_label_rtx (tree);
+    The constant terms are added and stored via a second arg.  */
+ extern rtx eliminate_constant_term (rtx, rtx *);
+ 
+-/* Convert arg to a valid memory address for specified machine mode,
+-   by emitting insns to perform arithmetic if nec.  */
+-extern rtx memory_address (enum machine_mode, rtx);
++/* Convert arg to a valid memory address for specified machine mode that points
++   to a specific named address space, by emitting insns to perform arithmetic
++   if necessary.  */
++extern rtx memory_address_addr_space (enum machine_mode, rtx, addr_space_t);
++
++/* Like memory_address_addr_space, except assume the memory address points to
++   the generic named address space.  */
++#define memory_address(MODE,RTX) \
++	memory_address_addr_space ((MODE), (RTX), ADDR_SPACE_GENERIC)
+ 
+ /* Return a memory reference like MEMREF, but with its mode changed
+    to MODE and its address changed to ADDR.
+diff -urNp gcc-4.4.4.orig/gcc/fold-const.c gcc-4.4.4/gcc/fold-const.c
+--- a/src/gcc/fold-const.c	2010-06-30
++++ b/src/gcc/fold-const.c	2010-06-30
+@@ -202,15 +202,9 @@ fit_double_type (unsigned HOST_WIDE_INT 
+ {
+   unsigned HOST_WIDE_INT low0 = l1;
+   HOST_WIDE_INT high0 = h1;
+-  unsigned int prec;
++  unsigned int prec = TYPE_PRECISION (type);
+   int sign_extended_type;
+ 
+-  if (POINTER_TYPE_P (type)
+-      || TREE_CODE (type) == OFFSET_TYPE)
+-    prec = POINTER_SIZE;
+-  else
+-    prec = TYPE_PRECISION (type);
+-
+   /* Size types *are* sign extended.  */
+   sign_extended_type = (!TYPE_UNSIGNED (type)
+ 			|| (TREE_CODE (type) == INTEGER_TYPE
+@@ -2530,8 +2524,16 @@ fold_convert (tree type, tree arg)
+ 
+   switch (TREE_CODE (type))
+     {
++    case POINTER_TYPE:
++    case REFERENCE_TYPE:
++      /* Handle conversions between pointers to different address spaces.  */
++      if (POINTER_TYPE_P (orig)
++	  && (TYPE_ADDR_SPACE (TREE_TYPE (type))
++	      != TYPE_ADDR_SPACE (TREE_TYPE (orig))))
++	return fold_build1 (ADDR_SPACE_CONVERT_EXPR, type, arg);
++      /* fall through */
++
+     case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
+-    case POINTER_TYPE: case REFERENCE_TYPE:
+     case OFFSET_TYPE:
+       if (TREE_CODE (arg) == INTEGER_CST)
+ 	{
+@@ -3053,6 +3055,12 @@ operand_equal_p (const_tree arg0, const_
+       || POINTER_TYPE_P (TREE_TYPE (arg0)) != POINTER_TYPE_P (TREE_TYPE (arg1)))
+     return 0;
+ 
++  /* We cannot consider pointers to different address space equal.  */
++  if (POINTER_TYPE_P (TREE_TYPE (arg0)) && POINTER_TYPE_P (TREE_TYPE (arg1))
++      && (TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (arg0)))
++	  != TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (arg1)))))
++    return 0;
++
+   /* If both types don't have the same precision, then it is not safe
+      to strip NOPs.  */
+   if (TYPE_PRECISION (TREE_TYPE (arg0)) != TYPE_PRECISION (TREE_TYPE (arg1)))
+@@ -8405,6 +8413,11 @@ fold_unary (enum tree_code code, tree ty
+       tem = fold_convert_const (code, type, op0);
+       return tem ? tem : NULL_TREE;
+ 
++    case ADDR_SPACE_CONVERT_EXPR:
++      if (integer_zerop (arg0))
++	return fold_convert_const (code, type, arg0);
++      return NULL_TREE;
++
+     case FIXED_CONVERT_EXPR:
+       tem = fold_convert_const (code, type, arg0);
+       return tem ? tem : NULL_TREE;
+diff -urNp gcc-4.4.4.orig/gcc/fwprop.c gcc-4.4.4/gcc/fwprop.c
+--- a/src/gcc/fwprop.c	2009-04-26
++++ b/src/gcc/fwprop.c	2010-06-30
+@@ -185,11 +185,12 @@ canonicalize_address (rtx x)
+ 
+ static bool
+ should_replace_address (rtx old_rtx, rtx new_rtx, enum machine_mode mode,
+-			bool speed)
++			addr_space_t as, bool speed)
+ {
+   int gain;
+ 
+-  if (rtx_equal_p (old_rtx, new_rtx) || !memory_address_p (mode, new_rtx))
++  if (rtx_equal_p (old_rtx, new_rtx)
++      || !memory_address_addr_space_p (mode, new_rtx, as))
+     return false;
+ 
+   /* Copy propagation is always ok.  */
+@@ -197,7 +198,8 @@ should_replace_address (rtx old_rtx, rtx
+     return true;
+ 
+   /* Prefer the new address if it is less expensive.  */
+-  gain = address_cost (old_rtx, mode, speed) - address_cost (new_rtx, mode, speed);
++  gain = (address_cost (old_rtx, mode, as, speed)
++	  - address_cost (new_rtx, mode, as, speed));
+ 
+   /* If the addresses have equivalent cost, prefer the new address
+      if it has the highest `rtx_cost'.  That has the potential of
+@@ -365,6 +367,7 @@ propagate_rtx_1 (rtx *px, rtx old_rtx, r
+ 	  /* Copy propagations are always ok.  Otherwise check the costs.  */
+ 	  if (!(REG_P (old_rtx) && REG_P (new_rtx))
+ 	      && !should_replace_address (op0, new_op0, GET_MODE (x),
++					  MEM_ADDR_SPACE (x),
+ 	      			 	  flags & PR_OPTIMIZE_FOR_SPEED))
+ 	    return true;
+ 
+diff -urNp gcc-4.4.4.orig/gcc/gimple-pretty-print.c gcc-4.4.4/gcc/gimple-pretty-print.c
+--- a/src/gcc/gimple-pretty-print.c	2009-01-02
++++ b/src/gcc/gimple-pretty-print.c	2010-06-30
+@@ -254,6 +254,7 @@ dump_unary_rhs (pretty_printer *buffer, 
+       break;
+ 
+     case FIXED_CONVERT_EXPR:
++    case ADDR_SPACE_CONVERT_EXPR:
+     case FIX_TRUNC_EXPR:
+     case FLOAT_EXPR:
+     CASE_CONVERT:
+diff -urNp gcc-4.4.4.orig/gcc/ifcvt.c gcc-4.4.4/gcc/ifcvt.c
+--- a/src/gcc/ifcvt.c	2010-06-30
++++ b/src/gcc/ifcvt.c	2010-06-30
+@@ -1411,11 +1411,15 @@ noce_try_cmove_arith (struct noce_if_inf
+   /* ??? FIXME: Magic number 5.  */
+   if (cse_not_expected
+       && MEM_P (a) && MEM_P (b)
++      && MEM_ADDR_SPACE (a) == MEM_ADDR_SPACE (b)
+       && if_info->branch_cost >= 5)
+     {
++      enum machine_mode address_mode
++	= targetm.addr_space.address_mode (MEM_ADDR_SPACE (a));
++
+       a = XEXP (a, 0);
+       b = XEXP (b, 0);
+-      x = gen_reg_rtx (Pmode);
++      x = gen_reg_rtx (address_mode);
+       is_mem = 1;
+     }
+ 
+@@ -1564,6 +1568,9 @@ noce_try_cmove_arith (struct noce_if_inf
+       set_mem_align (tmp,
+ 		     MIN (MEM_ALIGN (if_info->a), MEM_ALIGN (if_info->b)));
+ 
++      gcc_assert (MEM_ADDR_SPACE (if_info->a) == MEM_ADDR_SPACE (if_info->b));
++      set_mem_addr_space (tmp, MEM_ADDR_SPACE (if_info->a));
++
+       noce_emit_move_insn (if_info->x, tmp);
+     }
+   else if (target != x)
+diff -urNp gcc-4.4.4.orig/gcc/jump.c gcc-4.4.4/gcc/jump.c
+--- a/src/gcc/jump.c	2009-02-25
++++ b/src/gcc/jump.c	2010-06-30
+@@ -1641,6 +1641,10 @@ rtx_renumbered_equal_p (const_rtx x, con
+   if (GET_MODE (x) != GET_MODE (y))
+     return 0;
+ 
++  /* MEMs refering to different address space are not equivalent.  */
++  if (code == MEM && MEM_ADDR_SPACE (x) != MEM_ADDR_SPACE (y))
++    return 0;
++
+   /* For commutative operations, the RTX match if the operand match in any
+      order.  Also handle the simple binary and unary cases without a loop.  */
+   if (targetm.commutative_p (x, UNKNOWN))
+diff -urNp gcc-4.4.4.orig/gcc/Makefile.in gcc-4.4.4/gcc/Makefile.in
+--- a/src/gcc/Makefile.in	2010-06-30
++++ b/src/gcc/Makefile.in	2010-06-30
+@@ -2278,7 +2278,7 @@ tree-ssa-address.o : tree-ssa-address.c 
+    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) \
+    output.h $(DIAGNOSTIC_H) $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
+    tree-pass.h $(FLAGS_H) $(TREE_INLINE_H) $(RECOG_H) insn-config.h $(EXPR_H) \
+-   gt-tree-ssa-address.h $(GGC_H) tree-affine.h
++   gt-tree-ssa-address.h $(GGC_H) tree-affine.h $(TARGET_H)
+ tree-ssa-loop-niter.o : tree-ssa-loop-niter.c $(TREE_FLOW_H) $(CONFIG_H) \
+    $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(CFGLOOP_H) $(PARAMS_H) \
+    $(TREE_INLINE_H) output.h $(DIAGNOSTIC_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
+@@ -2598,7 +2598,7 @@ emit-rtl.o : emit-rtl.c $(CONFIG_H) $(SY
+    $(TREE_H) $(FLAGS_H) $(FUNCTION_H) $(REGS_H) insn-config.h $(RECOG_H) \
+    $(GGC_H) $(EXPR_H) hard-reg-set.h $(BITMAP_H) $(TOPLEV_H) $(BASIC_BLOCK_H) \
+    $(HASHTAB_H) $(TM_P_H) debug.h langhooks.h tree-pass.h gt-emit-rtl.h \
+-   $(REAL_H) $(DF_H)
++   $(REAL_H) $(DF_H) $(TARGET_H)
+ real.o : real.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
+    $(TOPLEV_H) $(TM_P_H) $(REAL_H) dfp.h
+ dfp.o : dfp.c dfp.h $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)	$(TREE_H) \
+@@ -2806,7 +2806,7 @@ alloc-pool.o : alloc-pool.c $(CONFIG_H) 
+ auto-inc-dec.o : auto-inc-dec.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+    $(TREE_H) $(RTL_H) $(TM_P_H) hard-reg-set.h $(BASIC_BLOCK_H) insn-config.h \
+    $(REGS_H) $(FLAGS_H) output.h $(FUNCTION_H) except.h $(TOPLEV_H) $(RECOG_H) \
+-   $(EXPR_H) $(TIMEVAR_H) tree-pass.h $(DF_H) $(DBGCNT_H)
++   $(EXPR_H) $(TIMEVAR_H) tree-pass.h $(DF_H) $(DBGCNT_H) $(TARGET_H)
+ cfg.o : cfg.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(FLAGS_H) \
+    $(REGS_H) hard-reg-set.h output.h $(TOPLEV_H) $(FUNCTION_H) except.h $(GGC_H) \
+    $(TM_P_H) $(TIMEVAR_H) $(OBSTACK_H) $(TREE_H) alloc-pool.h \
+@@ -2987,7 +2987,7 @@ haifa-sched.o : haifa-sched.c $(CONFIG_H
+ sched-deps.o : sched-deps.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+    $(RTL_H) $(SCHED_INT_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \
+    $(FUNCTION_H) $(INSN_ATTR_H) $(TOPLEV_H) $(RECOG_H) except.h cselib.h \
+-   $(PARAMS_H) $(TM_P_H)
++   $(PARAMS_H) $(TM_P_H) $(TARGET_H)
+ sched-rgn.o : sched-rgn.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+    $(RTL_H) $(SCHED_INT_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \
+    $(FUNCTION_H) $(INSN_ATTR_H) $(TOPLEV_H) $(RECOG_H) except.h $(PARAMS_H) \
+diff -urNp gcc-4.4.4.orig/gcc/output.h gcc-4.4.4/gcc/output.h
+--- a/src/gcc/output.h	2010-06-30
++++ b/src/gcc/output.h	2010-06-30
+@@ -623,7 +623,6 @@ extern void default_emit_except_table_la
+ extern void default_internal_label (FILE *, const char *, unsigned long);
+ extern void default_file_start (void);
+ extern void file_end_indicate_exec_stack (void);
+-extern bool default_valid_pointer_mode (enum machine_mode);
+ 
+ extern void default_elf_asm_output_external (FILE *file, tree,
+ 					     const char *);
+diff -urNp gcc-4.4.4.orig/gcc/print-rtl.c gcc-4.4.4/gcc/print-rtl.c
+--- a/src/gcc/print-rtl.c	2009-02-20
++++ b/src/gcc/print-rtl.c	2010-06-30
+@@ -556,6 +556,9 @@ print_rtx (const_rtx in_rtx)
+       if (MEM_ALIGN (in_rtx) != 1)
+ 	fprintf (outfile, " A%u", MEM_ALIGN (in_rtx));
+ 
++      if (!ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (in_rtx)))
++	fprintf (outfile, " AS%u", MEM_ADDR_SPACE (in_rtx));
++
+       fputc (']', outfile);
+       break;
+ 
+diff -urNp gcc-4.4.4.orig/gcc/print-tree.c gcc-4.4.4/gcc/print-tree.c
+--- a/src/gcc/print-tree.c	2008-11-04
++++ b/src/gcc/print-tree.c	2010-06-30
+@@ -110,6 +110,8 @@ print_node_brief (FILE *file, const char
+ 	    fprintf (file, " %s",
+ 		     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (node))));
+ 	}
++      if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
++	fprintf (file, " address-space-%d", TYPE_ADDR_SPACE (node));
+     }
+   if (TREE_CODE (node) == IDENTIFIER_NODE)
+     fprintf (file, " %s", IDENTIFIER_POINTER (node));
+@@ -299,6 +301,9 @@ print_node (FILE *file, const char *pref
+   else if (TYPE_P (node) && TYPE_SIZES_GIMPLIFIED (node))
+     fputs (" sizes-gimplified", file);
+ 
++  if (TYPE_P (node) && !ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
++    fprintf (file, " address-space-%d", TYPE_ADDR_SPACE (node));
++
+   if (TREE_ADDRESSABLE (node))
+     fputs (" addressable", file);
+   if (TREE_THIS_VOLATILE (node))
+diff -urNp gcc-4.4.4.orig/gcc/recog.c gcc-4.4.4/gcc/recog.c
+--- a/src/gcc/recog.c	2009-03-09
++++ b/src/gcc/recog.c	2010-06-30
+@@ -376,7 +376,9 @@ verify_changes (int num)
+ 
+       if (MEM_P (object))
+ 	{
+-	  if (! memory_address_p (GET_MODE (object), XEXP (object, 0)))
++	  if (! memory_address_addr_space_p (GET_MODE (object),
++					     XEXP (object, 0),
++					     MEM_ADDR_SPACE (object)))
+ 	    break;
+ 	}
+       else if (REG_P (changes[i].old)
+@@ -964,7 +966,7 @@ general_operand (rtx op, enum machine_mo
+ 	return 0;
+ 
+       /* Use the mem's mode, since it will be reloaded thus.  */
+-      if (memory_address_p (GET_MODE (op), y))
++      if (memory_address_addr_space_p (GET_MODE (op), y, MEM_ADDR_SPACE (op)))
+ 	return 1;
+     }
+ 
+@@ -1248,11 +1250,16 @@ pop_operand (rtx op, enum machine_mode m
+   return XEXP (op, 0) == stack_pointer_rtx;
+ }
+ 
+-/* Return 1 if ADDR is a valid memory address for mode MODE.  */
++/* Return 1 if ADDR is a valid memory address
++   for mode MODE in address space AS.  */
+ 
+ int
+-memory_address_p (enum machine_mode mode ATTRIBUTE_UNUSED, rtx addr)
++memory_address_addr_space_p (enum machine_mode mode ATTRIBUTE_UNUSED,
++			     rtx addr, addr_space_t as)
+ {
++  if (!ADDR_SPACE_GENERIC_P (as))
++    return targetm.addr_space.legitimate_address_p (mode, addr, 0, as);
++
+   GO_IF_LEGITIMATE_ADDRESS (mode, addr, win);
+   return 0;
+ 
+@@ -1829,7 +1836,8 @@ int
+ offsettable_memref_p (rtx op)
+ {
+   return ((MEM_P (op))
+-	  && offsettable_address_p (1, GET_MODE (op), XEXP (op, 0)));
++	  && offsettable_address_addr_space_p (1, GET_MODE (op), XEXP (op, 0),
++					       MEM_ADDR_SPACE (op)));
+ }
+ 
+ /* Similar, but don't require a strictly valid mem ref:
+@@ -1839,12 +1847,13 @@ int
+ offsettable_nonstrict_memref_p (rtx op)
+ {
+   return ((MEM_P (op))
+-	  && offsettable_address_p (0, GET_MODE (op), XEXP (op, 0)));
++	  && offsettable_address_addr_space_p (0, GET_MODE (op), XEXP (op, 0),
++					       MEM_ADDR_SPACE (op)));
+ }
+ 
+ /* Return 1 if Y is a memory address which contains no side effects
+-   and would remain valid after the addition of a positive integer
+-   less than the size of that mode.
++   and would remain valid for address space AS after the addition of
++   a positive integer less than the size of that mode.
+ 
+    We assume that the original address is valid and do not check it.
+    We do check that it is valid for narrower modes.
+@@ -1853,14 +1862,16 @@ offsettable_nonstrict_memref_p (rtx op)
+    for the sake of use in reload.c.  */
+ 
+ int
+-offsettable_address_p (int strictp, enum machine_mode mode, rtx y)
++offsettable_address_addr_space_p (int strictp, enum machine_mode mode, rtx y,
++				  addr_space_t as)
+ {
+   enum rtx_code ycode = GET_CODE (y);
+   rtx z;
+   rtx y1 = y;
+   rtx *y2;
+-  int (*addressp) (enum machine_mode, rtx) =
+-    (strictp ? strict_memory_address_p : memory_address_p);
++  int (*addressp) (enum machine_mode, rtx, addr_space_t) =
++    (strictp ? strict_memory_address_addr_space_p
++	     : memory_address_addr_space_p);
+   unsigned int mode_sz = GET_MODE_SIZE (mode);
+ 
+   if (CONSTANT_ADDRESS_P (y))
+@@ -1890,7 +1901,7 @@ offsettable_address_p (int strictp, enum
+       *y2 = plus_constant (*y2, mode_sz - 1);
+       /* Use QImode because an odd displacement may be automatically invalid
+ 	 for any wider mode.  But it should be valid for a single byte.  */
+-      good = (*addressp) (QImode, y);
++      good = (*addressp) (QImode, y, as);
+ 
+       /* In any case, restore old contents of memory.  */
+       *y2 = y1;
+@@ -1915,7 +1926,7 @@ offsettable_address_p (int strictp, enum
+ 
+   /* Use QImode because an odd displacement may be automatically invalid
+      for any wider mode.  But it should be valid for a single byte.  */
+-  return (*addressp) (QImode, z);
++  return (*addressp) (QImode, z, as);
+ }
+ 
+ /* Return 1 if ADDR is an address-expression whose effect depends
+@@ -2459,11 +2470,14 @@ constrain_operands (int strict)
+ 		if (MEM_P (op))
+ 		  {
+ 		    if (strict > 0
+-			&& !strict_memory_address_p (GET_MODE (op),
+-						     XEXP (op, 0)))
++			&& !strict_memory_address_addr_space_p
++			     (GET_MODE (op), XEXP (op, 0),
++			      MEM_ADDR_SPACE (op)))
+ 		      break;
+ 		    if (strict == 0
+-			&& !memory_address_p (GET_MODE (op), XEXP (op, 0)))
++			&& !memory_address_addr_space_p
++			     (GET_MODE (op), XEXP (op, 0),
++			      MEM_ADDR_SPACE (op)))
+ 		      break;
+ 		    win = 1;
+ 		  }
+diff -urNp gcc-4.4.4.orig/gcc/recog.h gcc-4.4.4/gcc/recog.h
+--- a/src/gcc/recog.h	2009-02-02
++++ b/src/gcc/recog.h	2010-06-30
+@@ -84,8 +84,13 @@ extern int num_validated_changes (void);
+ extern void cancel_changes (int);
+ extern int constrain_operands (int);
+ extern int constrain_operands_cached (int);
+-extern int memory_address_p (enum machine_mode, rtx);
+-extern int strict_memory_address_p (enum machine_mode, rtx);
++extern int memory_address_addr_space_p (enum machine_mode, rtx, addr_space_t);
++#define memory_address_p(mode,addr) \
++	memory_address_addr_space_p ((mode), (addr), ADDR_SPACE_GENERIC)
++extern int strict_memory_address_addr_space_p (enum machine_mode, rtx,
++					       addr_space_t);
++#define strict_memory_address_p(mode,addr) \
++	strict_memory_address_addr_space_p ((mode), (addr), ADDR_SPACE_GENERIC)
+ extern int validate_replace_rtx (rtx, rtx, rtx);
+ extern int validate_replace_rtx_part (rtx, rtx, rtx *, rtx);
+ extern int validate_replace_rtx_part_nosimplify (rtx, rtx, rtx *, rtx);
+@@ -100,7 +105,11 @@ extern int reg_fits_class_p (rtx, enum r
+ 
+ extern int offsettable_memref_p (rtx);
+ extern int offsettable_nonstrict_memref_p (rtx);
+-extern int offsettable_address_p (int, enum machine_mode, rtx);
++extern int offsettable_address_addr_space_p (int, enum machine_mode, rtx,
++					     addr_space_t);
++#define offsettable_address_p(strict,mode,addr) \
++	offsettable_address_addr_space_p ((strict), (mode), (addr), \
++					  ADDR_SPACE_GENERIC)
+ extern int mode_dependent_address_p (rtx);
+ 
+ extern int recog (rtx, rtx, int *);
+diff -urNp gcc-4.4.4.orig/gcc/regmove.c gcc-4.4.4/gcc/regmove.c
+--- a/src/gcc/regmove.c	2010-06-30
++++ b/src/gcc/regmove.c	2010-06-30
+@@ -179,7 +179,9 @@ try_auto_increment (rtx insn, rtx inc_in
+ 		   &SET_SRC (inc_insn_set),
+ 		   XEXP (SET_SRC (inc_insn_set), 0), 1);
+ 	      validate_change (insn, &XEXP (use, 0),
+-			       gen_rtx_fmt_e (inc_code, Pmode, reg), 1);
++			       gen_rtx_fmt_e (inc_code,
++					      GET_MODE (XEXP (use, 0)), reg),
++			       1);
+ 	      if (apply_change_group ())
+ 		{
+ 		  /* If there is a REG_DEAD note on this insn, we must
+diff -urNp gcc-4.4.4.orig/gcc/regrename.c gcc-4.4.4/gcc/regrename.c
+--- a/src/gcc/regrename.c	2010-06-30
++++ b/src/gcc/regrename.c	2010-06-30
+@@ -1207,7 +1207,7 @@ kill_autoinc_value (rtx *px, void *data)
+     {
+       x = XEXP (x, 0);
+       kill_value (x, vd);
+-      set_value_regno (REGNO (x), Pmode, vd);
++      set_value_regno (REGNO (x), GET_MODE (x), vd);
+       return -1;
+     }
+ 
+diff -urNp gcc-4.4.4.orig/gcc/reload1.c gcc-4.4.4/gcc/reload1.c
+--- a/src/gcc/reload1.c	2009-03-26
++++ b/src/gcc/reload1.c	2010-06-30
+@@ -999,8 +999,9 @@ reload (rtx first, int global)
+ 	  {
+ 	    rtx x = eliminate_regs (reg_equiv_memory_loc[i], 0, NULL_RTX);
+ 
+-	    if (strict_memory_address_p (GET_MODE (regno_reg_rtx[i]),
+-					 XEXP (x, 0)))
++	    if (strict_memory_address_addr_space_p
++		  (GET_MODE (regno_reg_rtx[i]), XEXP (x, 0),
++		   MEM_ADDR_SPACE (x)))
+ 	      reg_equiv_mem[i] = x, reg_equiv_address[i] = 0;
+ 	    else if (CONSTANT_P (XEXP (x, 0))
+ 		     || (REG_P (XEXP (x, 0))
+@@ -2610,7 +2611,7 @@ eliminate_regs_1 (rtx x, enum machine_mo
+ 		     && reg_equiv_constant[REGNO (new0)] != 0)
+ 	      new0 = reg_equiv_constant[REGNO (new0)];
+ 
+-	    new_rtx = form_sum (new0, new1);
++	    new_rtx = form_sum (GET_MODE (x), new0, new1);
+ 
+ 	    /* As above, if we are not inside a MEM we do not want to
+ 	       turn a PLUS into something else.  We might try to do so here
+diff -urNp gcc-4.4.4.orig/gcc/reload.c gcc-4.4.4/gcc/reload.c
+--- a/src/gcc/reload.c	2010-06-30
++++ b/src/gcc/reload.c	2010-06-30
+@@ -267,7 +267,8 @@ static bool alternative_allows_const_poo
+ static rtx find_reloads_toplev (rtx, int, enum reload_type, int, int, rtx,
+ 				int *);
+ static rtx make_memloc (rtx, int);
+-static int maybe_memory_address_p (enum machine_mode, rtx, rtx *);
++static int maybe_memory_address_addr_space_p (enum machine_mode, rtx,
++					      addr_space_t, rtx *);
+ static int find_reloads_address (enum machine_mode, rtx *, rtx, rtx *,
+ 				 int, enum reload_type, int, rtx);
+ static rtx subst_reg_equivs (rtx, rtx);
+@@ -611,7 +612,8 @@ get_secondary_mem (rtx x ATTRIBUTE_UNUSE
+      didn't give us a new MEM, make a new one if it isn't valid.  */
+ 
+   loc = eliminate_regs (secondary_memlocs[(int) mode], VOIDmode, NULL_RTX);
+-  mem_valid = strict_memory_address_p (mode, XEXP (loc, 0));
++  mem_valid = strict_memory_address_addr_space_p (mode, XEXP (loc, 0),
++						  MEM_ADDR_SPACE (loc));
+ 
+   if (! mem_valid && loc == secondary_memlocs[(int) mode])
+     loc = copy_rtx (loc);
+@@ -2127,13 +2129,17 @@ hard_reg_set_here_p (unsigned int beg_re
+   return 0;
+ }
+ 
+-/* Return 1 if ADDR is a valid memory address for mode MODE,
+-   and check that each pseudo reg has the proper kind of
+-   hard reg.  */
++/* Return 1 if ADDR is a valid memory address for mode MODE
++   in address space AS, and check that each pseudo reg has the
++   proper kind of hard reg.  */
+ 
+ int
+-strict_memory_address_p (enum machine_mode mode ATTRIBUTE_UNUSED, rtx addr)
++strict_memory_address_addr_space_p (enum machine_mode mode ATTRIBUTE_UNUSED,
++				    rtx addr, addr_space_t as)
+ {
++  if (!ADDR_SPACE_GENERIC_P (as))
++    return targetm.addr_space.legitimate_address_p (mode, addr, 1, as);
++
+   GO_IF_LEGITIMATE_ADDRESS (mode, addr, win);
+   return 0;
+ 
+@@ -2241,6 +2247,10 @@ operands_match_p (rtx x, rtx y)
+   if (GET_MODE (x) != GET_MODE (y))
+     return 0;
+ 
++  /* MEMs refering to different address space are not equivalent.  */
++  if (code == MEM && MEM_ADDR_SPACE (x) != MEM_ADDR_SPACE (y))
++    return 0;
++
+   switch (code)
+     {
+     case CONST_INT:
+@@ -3947,12 +3957,15 @@ find_reloads (rtx insn, int replace, int
+ 		 && MEM_P (recog_data.operand[i]))
+ 	  {
+ 	    /* If the address to be reloaded is a VOIDmode constant,
+-	       use Pmode as mode of the reload register, as would have
+-	       been done by find_reloads_address.  */
++	       use the default address mode as mode of the reload register,
++	       as would have been done by find_reloads_address.  */
+ 	    enum machine_mode address_mode;
+ 	    address_mode = GET_MODE (XEXP (recog_data.operand[i], 0));
+ 	    if (address_mode == VOIDmode)
+-	      address_mode = Pmode;
++	      {
++		addr_space_t as = MEM_ADDR_SPACE (recog_data.operand[i]);
++		address_mode = targetm.addr_space.address_mode (as);
++	      }
+ 
+ 	    operand_reloadnum[i]
+ 	      = push_reload (XEXP (recog_data.operand[i], 0), NULL_RTX,
+@@ -4727,8 +4740,9 @@ find_reloads_toplev (rtx x, int opnum, e
+ #endif
+ 	       && (reg_equiv_address[regno] != 0
+ 		   || (reg_equiv_mem[regno] != 0
+-		       && (! strict_memory_address_p (GET_MODE (x),
+-						      XEXP (reg_equiv_mem[regno], 0))
++		       && (! strict_memory_address_addr_space_p
++			       (GET_MODE (x), XEXP (reg_equiv_mem[regno], 0),
++				MEM_ADDR_SPACE (reg_equiv_mem[regno]))
+ 			   || ! offsettable_memref_p (reg_equiv_mem[regno])
+ 			   || num_not_at_initial_offset))))
+ 	x = find_reloads_subreg_address (x, 1, opnum, type, ind_levels,
+@@ -4785,18 +4799,19 @@ make_memloc (rtx ad, int regno)
+ }
+ 
+ /* Returns true if AD could be turned into a valid memory reference
+-   to mode MODE by reloading the part pointed to by PART into a
+-   register.  */
++   to mode MODE in address space AS by reloading the part pointed to
++   by PART into a register.  */
+ 
+ static int
+-maybe_memory_address_p (enum machine_mode mode, rtx ad, rtx *part)
++maybe_memory_address_addr_space_p (enum machine_mode mode, rtx ad,
++				   addr_space_t as, rtx *part)
+ {
+   int retv;
+   rtx tem = *part;
+   rtx reg = gen_rtx_REG (GET_MODE (tem), max_reg_num ());
+ 
+   *part = reg;
+-  retv = memory_address_p (mode, ad);
++  retv = memory_address_addr_space_p (mode, ad, as);
+   *part = tem;
+ 
+   return retv;
+@@ -4832,6 +4847,8 @@ find_reloads_address (enum machine_mode 
+ 		      rtx *loc, int opnum, enum reload_type type,
+ 		      int ind_levels, rtx insn)
+ {
++  addr_space_t as = memrefloc? MEM_ADDR_SPACE (*memrefloc)
++			     : ADDR_SPACE_GENERIC;
+   int regno;
+   int removed_and = 0;
+   int op_index;
+@@ -4859,7 +4876,9 @@ find_reloads_address (enum machine_mode 
+ 	  if (reg_equiv_address[regno] != 0 || num_not_at_initial_offset)
+ 	    {
+ 	      tem = make_memloc (ad, regno);
+-	      if (! strict_memory_address_p (GET_MODE (tem), XEXP (tem, 0)))
++	      if (! strict_memory_address_addr_space_p (GET_MODE (tem),
++							XEXP (tem, 0),
++							MEM_ADDR_SPACE (tem)))
+ 		{
+ 		  rtx orig = tem;
+ 
+@@ -4875,7 +4894,7 @@ find_reloads_address (enum machine_mode 
+ 		 address: only reg or reg+constant.  */
+ 
+ 	      if (ind_levels > 0
+-		  && strict_memory_address_p (mode, tem)
++		  && strict_memory_address_addr_space_p (mode, tem, as)
+ 		  && (REG_P (XEXP (tem, 0))
+ 		      || (GET_CODE (XEXP (tem, 0)) == PLUS
+ 			  && REG_P (XEXP (XEXP (tem, 0), 0))
+@@ -4919,7 +4938,7 @@ find_reloads_address (enum machine_mode 
+       return 1;
+     }
+ 
+-  if (strict_memory_address_p (mode, ad))
++  if (strict_memory_address_addr_space_p (mode, ad, as))
+     {
+       /* The address appears valid, so reloads are not needed.
+ 	 But the address may contain an eliminable register.
+@@ -4942,14 +4961,14 @@ find_reloads_address (enum machine_mode 
+ 	return 0;
+ 
+       /* Check result for validity after substitution.  */
+-      if (strict_memory_address_p (mode, ad))
++      if (strict_memory_address_addr_space_p (mode, ad, as))
+ 	return 0;
+     }
+ 
+ #ifdef LEGITIMIZE_RELOAD_ADDRESS
+   do
+     {
+-      if (memrefloc)
++      if (memrefloc && ADDR_SPACE_GENERIC_P (as))
+ 	{
+ 	  LEGITIMIZE_RELOAD_ADDRESS (ad, GET_MODE (*memrefloc), opnum, type,
+ 				     ind_levels, win);
+@@ -5065,7 +5084,7 @@ find_reloads_address (enum machine_mode 
+ 	     That will at least work.  */
+ 	  find_reloads_address_part (ad, loc,
+ 				     base_reg_class (mode, MEM, SCRATCH),
+-				     Pmode, opnum, type, ind_levels);
++				     GET_MODE (ad), opnum, type, ind_levels);
+ 	}
+       return ! removed_and;
+     }
+@@ -5126,8 +5145,8 @@ find_reloads_address (enum machine_mode 
+ 	   || operand == arg_pointer_rtx
+ #endif
+ 	   || operand == stack_pointer_rtx)
+-	  && ! maybe_memory_address_p (mode, ad, 
+-				       &XEXP (XEXP (ad, 0), 1 - op_index)))
++	  && ! maybe_memory_address_addr_space_p
++		(mode, ad, as, &XEXP (XEXP (ad, 0), 1 - op_index)))
+ 	{
+ 	  rtx offset_reg;
+ 	  enum reg_class cls;
+@@ -5165,7 +5184,7 @@ find_reloads_address (enum machine_mode 
+   tem = ad;
+   if (GET_CODE (ad) == PLUS)
+     tem = subst_indexed_address (ad);
+-  if (tem != ad && strict_memory_address_p (mode, tem))
++  if (tem != ad && strict_memory_address_addr_space_p (mode, tem, as))
+     {
+       /* Ok, we win that way.  Replace any additional eliminable
+ 	 registers.  */
+@@ -5175,7 +5194,8 @@ find_reloads_address (enum machine_mode 
+ 
+       /* Make sure that didn't make the address invalid again.  */
+ 
+-      if (! subst_reg_equivs_changed || strict_memory_address_p (mode, tem))
++      if (! subst_reg_equivs_changed
++	  || strict_memory_address_addr_space_p (mode, tem, as))
+ 	{
+ 	  *loc = tem;
+ 	  return 0;
+@@ -5184,8 +5204,12 @@ find_reloads_address (enum machine_mode 
+ 
+   /* If constants aren't valid addresses, reload the constant address
+      into a register.  */
+-  if (CONSTANT_P (ad) && ! strict_memory_address_p (mode, ad))
++  if (CONSTANT_P (ad) && ! strict_memory_address_addr_space_p (mode, ad, as))
+     {
++      enum machine_mode address_mode = GET_MODE (ad);
++      if (address_mode == VOIDmode)
++	address_mode = targetm.addr_space.address_mode (as);
++
+       /* If AD is an address in the constant pool, the MEM rtx may be shared.
+ 	 Unshare it so we can safely alter it.  */
+       if (memrefloc && GET_CODE (ad) == SYMBOL_REF
+@@ -5198,7 +5222,7 @@ find_reloads_address (enum machine_mode 
+ 	}
+ 
+       find_reloads_address_part (ad, loc, base_reg_class (mode, MEM, SCRATCH),
+-				 Pmode, opnum, type, ind_levels);
++				 address_mode, opnum, type, ind_levels);
+       return ! removed_and;
+     }
+ 
+@@ -5285,16 +5309,12 @@ subst_reg_equivs (rtx ad, rtx insn)
+    This routine assumes both inputs are already in canonical form.  */
+ 
+ rtx
+-form_sum (rtx x, rtx y)
++form_sum (enum machine_mode mode, rtx x, rtx y)
+ {
+   rtx tem;
+-  enum machine_mode mode = GET_MODE (x);
+-
+-  if (mode == VOIDmode)
+-    mode = GET_MODE (y);
+ 
+-  if (mode == VOIDmode)
+-    mode = Pmode;
++  gcc_assert (GET_MODE (x) == mode || GET_MODE (x) == VOIDmode);
++  gcc_assert (GET_MODE (y) == mode || GET_MODE (y) == VOIDmode);
+ 
+   if (GET_CODE (x) == CONST_INT)
+     return plus_constant (y, INTVAL (x));
+@@ -5304,12 +5324,12 @@ form_sum (rtx x, rtx y)
+     tem = x, x = y, y = tem;
+ 
+   if (GET_CODE (x) == PLUS && CONSTANT_P (XEXP (x, 1)))
+-    return form_sum (XEXP (x, 0), form_sum (XEXP (x, 1), y));
++    return form_sum (mode, XEXP (x, 0), form_sum (mode, XEXP (x, 1), y));
+ 
+   /* Note that if the operands of Y are specified in the opposite
+      order in the recursive calls below, infinite recursion will occur.  */
+   if (GET_CODE (y) == PLUS && CONSTANT_P (XEXP (y, 1)))
+-    return form_sum (form_sum (x, XEXP (y, 0)), XEXP (y, 1));
++    return form_sum (mode, form_sum (mode, x, XEXP (y, 0)), XEXP (y, 1));
+ 
+   /* If both constant, encapsulate sum.  Otherwise, just form sum.  A
+      constant will have been placed second.  */
+@@ -5376,9 +5396,9 @@ subst_indexed_address (rtx addr)
+ 
+       /* Compute the sum.  */
+       if (op2 != 0)
+-	op1 = form_sum (op1, op2);
++	op1 = form_sum (GET_MODE (addr), op1, op2);
+       if (op1 != 0)
+-	op0 = form_sum (op0, op1);
++	op0 = form_sum (GET_MODE (addr), op0, op1);
+ 
+       return op0;
+     }
+@@ -5778,7 +5798,8 @@ find_reloads_address_1 (enum machine_mod
+ 	      rtx equiv = (MEM_P (XEXP (x, 0))
+ 			   ? XEXP (x, 0)
+ 			   : reg_equiv_mem[regno]);
+-	      int icode = (int) optab_handler (add_optab, Pmode)->insn_code;
++	      int icode
++		= (int) optab_handler (add_optab, GET_MODE (x))->insn_code;
+ 	      if (insn && NONJUMP_INSN_P (insn) && equiv
+ 		  && memory_operand (equiv, GET_MODE (equiv))
+ #ifdef HAVE_cc0
+@@ -5786,9 +5807,9 @@ find_reloads_address_1 (enum machine_mod
+ #endif
+ 		  && ! (icode != CODE_FOR_nothing
+ 			&& ((*insn_data[icode].operand[0].predicate)
+-			    (equiv, Pmode))
++			    (equiv, GET_MODE (x)))
+ 			&& ((*insn_data[icode].operand[1].predicate)
+-			    (equiv, Pmode))))
++			    (equiv, GET_MODE (x)))))
+ 		{
+ 		  /* We use the original pseudo for loc, so that
+ 		     emit_reload_insns() knows which pseudo this
+@@ -6149,8 +6170,9 @@ find_reloads_subreg_address (rtx x, int 
+ 		 the address, there is nothing further to do.  */
+ 	      if (reloaded == 0
+ 		  && reg_equiv_mem[regno] != 0
+-		  && !strict_memory_address_p (GET_MODE (x),
+-					       XEXP (reg_equiv_mem[regno], 0)))
++		  && !strict_memory_address_addr_space_p
++			(GET_MODE (x), XEXP (reg_equiv_mem[regno], 0),
++			 MEM_ADDR_SPACE (reg_equiv_mem[regno])))
+ 		push_reload (XEXP (tem, 0), NULL_RTX, &XEXP (tem, 0), (rtx*) 0,
+ 			     base_reg_class (GET_MODE (tem), MEM, SCRATCH),
+ 			     GET_MODE (XEXP (tem, 0)), VOIDmode, 0, 0,
+diff -urNp gcc-4.4.4.orig/gcc/reload.h gcc-4.4.4/gcc/reload.h
+--- a/src/gcc/reload.h	2010-03-31
++++ b/src/gcc/reload.h	2010-06-30
+@@ -289,7 +289,7 @@ extern int find_reloads (rtx, int, int, 
+    address, namely: sum constant integers, surround the sum of two
+    constants with a CONST, put the constant as the second operand, and
+    group the constant on the outermost sum.  */
+-extern rtx form_sum (rtx, rtx);
++extern rtx form_sum (enum machine_mode, rtx, rtx);
+ 
+ /* Substitute into the current INSN the registers into which we have reloaded
+    the things that need reloading.  */
+diff -urNp gcc-4.4.4.orig/gcc/rtlanal.c gcc-4.4.4/gcc/rtlanal.c
+--- a/src/gcc/rtlanal.c	2010-06-30
++++ b/src/gcc/rtlanal.c	2010-06-30
+@@ -3621,13 +3621,13 @@ rtx_cost (rtx x, enum rtx_code outer_cod
+    be returned.  */
+ 
+ int
+-address_cost (rtx x, enum machine_mode mode, bool speed)
++address_cost (rtx x, enum machine_mode mode, addr_space_t as, bool speed)
+ {
+   /* We may be asked for cost of various unusual addresses, such as operands
+      of push instruction.  It is not worthwhile to complicate writing
+      of the target hook by such cases.  */
+ 
+-  if (!memory_address_p (mode, x))
++  if (!memory_address_addr_space_p (mode, x, as))
+     return 1000;
+ 
+   return targetm.address_cost (x, speed);
+@@ -3766,7 +3766,11 @@ nonzero_bits1 (const_rtx x, enum machine
+ #if defined(POINTERS_EXTEND_UNSIGNED) && !defined(HAVE_ptr_extend)
+       /* If pointers extend unsigned and this is a pointer in Pmode, say that
+ 	 all the bits above ptr_mode are known to be zero.  */
+-      if (POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode
++      /* As we do not know which address space the pointer is refering to,
++	 we can do this only if the target does not support different pointer
++	 or address modes depending on the address space.  */
++      if (target_default_pointer_address_modes_p ()
++	  && POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode
+ 	  && REG_POINTER (x))
+ 	nonzero &= GET_MODE_MASK (ptr_mode);
+ #endif
+@@ -4003,7 +4007,11 @@ nonzero_bits1 (const_rtx x, enum machine
+ 	/* If pointers extend unsigned and this is an addition or subtraction
+ 	   to a pointer in Pmode, all the bits above ptr_mode are known to be
+ 	   zero.  */
+-	if (POINTERS_EXTEND_UNSIGNED > 0 && GET_MODE (x) == Pmode
++	/* As we do not know which address space the pointer is refering to,
++	   we can do this only if the target does not support different pointer
++	   or address modes depending on the address space.  */
++	if (target_default_pointer_address_modes_p ()
++	    && POINTERS_EXTEND_UNSIGNED > 0 && GET_MODE (x) == Pmode
+ 	    && (code == PLUS || code == MINUS)
+ 	    && REG_P (XEXP (x, 0)) && REG_POINTER (XEXP (x, 0)))
+ 	  nonzero &= GET_MODE_MASK (ptr_mode);
+@@ -4277,8 +4285,12 @@ num_sign_bit_copies1 (const_rtx x, enum 
+ #if defined(POINTERS_EXTEND_UNSIGNED) && !defined(HAVE_ptr_extend)
+       /* If pointers extend signed and this is a pointer in Pmode, say that
+ 	 all the bits above ptr_mode are known to be sign bit copies.  */
+-      if (! POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode && mode == Pmode
+-	  && REG_POINTER (x))
++      /* As we do not know which address space the pointer is refering to,
++	 we can do this only if the target does not support different pointer
++	 or address modes depending on the address space.  */
++      if (target_default_pointer_address_modes_p ()
++	  && ! POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode
++	  && mode == Pmode && REG_POINTER (x))
+ 	return GET_MODE_BITSIZE (Pmode) - GET_MODE_BITSIZE (ptr_mode) + 1;
+ #endif
+ 
+@@ -4474,7 +4486,11 @@ num_sign_bit_copies1 (const_rtx x, enum 
+       /* If pointers extend signed and this is an addition or subtraction
+ 	 to a pointer in Pmode, all the bits above ptr_mode are known to be
+ 	 sign bit copies.  */
+-      if (! POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode
++      /* As we do not know which address space the pointer is refering to,
++	 we can do this only if the target does not support different pointer
++	 or address modes depending on the address space.  */
++      if (target_default_pointer_address_modes_p ()
++	  && ! POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode
+ 	  && (code == PLUS || code == MINUS)
+ 	  && REG_P (XEXP (x, 0)) && REG_POINTER (XEXP (x, 0)))
+ 	result = MAX ((int) (GET_MODE_BITSIZE (Pmode)
+diff -urNp gcc-4.4.4.orig/gcc/rtl.c gcc-4.4.4/gcc/rtl.c
+--- a/src/gcc/rtl.c	2009-02-20
++++ b/src/gcc/rtl.c	2010-06-30
+@@ -367,6 +367,14 @@ rtx_equal_p_cb (const_rtx x, const_rtx y
+   if (GET_MODE (x) != GET_MODE (y))
+     return 0;
+ 
++  /* MEMs refering to different address space are not equivalent.  */
++  if (code == MEM && MEM_ADDR_SPACE (x) != MEM_ADDR_SPACE (y))
++    return 0;
++
++  /* MEMs refering to different address space are not equivalent.  */
++  if (code == MEM && MEM_ADDR_SPACE (x) != MEM_ADDR_SPACE (y))
++    return 0;
++
+   /* Some RTL can be compared nonrecursively.  */
+   switch (code)
+     {
+diff -urNp gcc-4.4.4.orig/gcc/rtl.h gcc-4.4.4/gcc/rtl.h
+--- a/src/gcc/rtl.h	2010-03-08
++++ b/src/gcc/rtl.h	2010-06-30
+@@ -146,6 +146,7 @@ typedef struct mem_attrs GTY(())
+   rtx size;			/* Size in bytes, as a CONST_INT.  */
+   alias_set_type alias;		/* Memory alias set.  */
+   unsigned int align;		/* Alignment of MEM in bits.  */
++  unsigned char addrspace;	/* Address space (0 for generic).  */
+ } mem_attrs;
+ 
+ /* Structure used to describe the attributes of a REG in similar way as
+@@ -1075,7 +1076,7 @@ rhs_regno (const_rtx x)
+ 
+ extern void init_rtlanal (void);
+ extern int rtx_cost (rtx, enum rtx_code, bool);
+-extern int address_cost (rtx, enum machine_mode, bool);
++extern int address_cost (rtx, enum machine_mode, addr_space_t, bool);
+ extern unsigned int subreg_lsb (const_rtx);
+ extern unsigned int subreg_lsb_1 (enum machine_mode, enum machine_mode,
+ 				  unsigned int);
+@@ -1209,6 +1210,10 @@ do {						\
+    RTX that is always a CONST_INT.  */
+ #define MEM_OFFSET(RTX) (MEM_ATTRS (RTX) == 0 ? 0 : MEM_ATTRS (RTX)->offset)
+ 
++/* For a MEM rtx, the address space.  */
++#define MEM_ADDR_SPACE(RTX) (MEM_ATTRS (RTX) == 0 ? ADDR_SPACE_GENERIC \
++						  : MEM_ATTRS (RTX)->addrspace)
++
+ /* For a MEM rtx, the size in bytes of the MEM, if known, as an RTX that
+    is always a CONST_INT.  */
+ #define MEM_SIZE(RTX)							\
+@@ -1542,7 +1547,10 @@ extern unsigned int subreg_highpart_offs
+ 					    enum machine_mode);
+ extern int byte_lowpart_offset (enum machine_mode, enum machine_mode);
+ extern rtx make_safe_from (rtx, rtx);
+-extern rtx convert_memory_address (enum machine_mode, rtx);
++extern rtx convert_memory_address_addr_space (enum machine_mode, rtx,
++					      addr_space_t);
++#define convert_memory_address(to_mode,x) \
++	convert_memory_address_addr_space ((to_mode), (x), ADDR_SPACE_GENERIC)
+ extern rtx get_insns (void);
+ extern const char *get_insn_name (int);
+ extern rtx get_last_insn (void);
+diff -urNp gcc-4.4.4.orig/gcc/rtlhooks.c gcc-4.4.4/gcc/rtlhooks.c
+--- a/src/gcc/rtlhooks.c	2009-02-20
++++ b/src/gcc/rtlhooks.c	2010-06-30
+@@ -153,7 +153,8 @@ gen_lowpart_if_possible (enum machine_mo
+ 		   - MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x))));
+ 
+       new_rtx = adjust_address_nv (x, mode, offset);
+-      if (! memory_address_p (mode, XEXP (new_rtx, 0)))
++      if (! memory_address_addr_space_p (mode, XEXP (new_rtx, 0),
++					 MEM_ADDR_SPACE (x)))
+ 	return 0;
+ 
+       return new_rtx;
+diff -urNp gcc-4.4.4.orig/gcc/sched-deps.c gcc-4.4.4/gcc/sched-deps.c
+--- a/src/gcc/sched-deps.c	2009-02-20
++++ b/src/gcc/sched-deps.c	2010-06-30
+@@ -41,6 +41,7 @@ along with GCC; see the file COPYING3.  
+ #include "sched-int.h"
+ #include "params.h"
+ #include "cselib.h"
++#include "target.h"
+ 
+ #ifdef INSN_SCHEDULING
+ 
+@@ -1907,8 +1908,11 @@ sched_analyze_1 (struct deps *deps, rtx 
+ 
+       if (sched_deps_info->use_cselib)
+ 	{
++	  enum machine_mode address_mode
++	    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (dest));
++
+ 	  t = shallow_copy_rtx (dest);
+-	  cselib_lookup (XEXP (t, 0), Pmode, 1);
++	  cselib_lookup (XEXP (t, 0), address_mode, 1);
+ 	  XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0));
+ 	}
+       t = canon_rtx (t);
+@@ -2061,8 +2065,11 @@ sched_analyze_2 (struct deps *deps, rtx 
+ 
+ 	if (sched_deps_info->use_cselib)
+ 	  {
++	    enum machine_mode address_mode
++	      = targetm.addr_space.address_mode (MEM_ADDR_SPACE (t));
++
+ 	    t = shallow_copy_rtx (t);
+-	    cselib_lookup (XEXP (t, 0), Pmode, 1);
++	    cselib_lookup (XEXP (t, 0), address_mode, 1);
+ 	    XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0));
+ 	  }
+ 	t = canon_rtx (t);
+diff -urNp gcc-4.4.4.orig/gcc/sel-sched-dump.c gcc-4.4.4/gcc/sel-sched-dump.c
+--- a/src/gcc/sel-sched-dump.c	2010-06-30
++++ b/src/gcc/sel-sched-dump.c	2010-06-30
+@@ -34,6 +34,7 @@ along with GCC; see the file COPYING3.  
+ #include "output.h"
+ #include "basic-block.h"
+ #include "cselib.h"
++#include "target.h"
+ 
+ #ifdef INSN_SCHEDULING
+ #include "sel-sched-ir.h"
+@@ -953,10 +954,13 @@ rtx
+ debug_mem_addr_value (rtx x)
+ {
+   rtx t, addr;
++  enum machine_mode address_mode;
+ 
+   gcc_assert (MEM_P (x));
++  address_mode = targetm.addr_space.address_mode (MEM_ADDR_SPACE (x));
++
+   t = shallow_copy_rtx (x);
+-  if (cselib_lookup (XEXP (t, 0), Pmode, 0))
++  if (cselib_lookup (XEXP (t, 0), address_mode, 0))
+     XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0));
+ 
+   t = canon_rtx (t);
+diff -urNp gcc-4.4.4.orig/gcc/simplify-rtx.c gcc-4.4.4/gcc/simplify-rtx.c
+--- a/src/gcc/simplify-rtx.c	2010-01-12
++++ b/src/gcc/simplify-rtx.c	2010-06-30
+@@ -863,7 +863,11 @@ simplify_unary_operation_1 (enum rtx_cod
+ 	return rtl_hooks.gen_lowpart_no_emit (mode, op);
+ 
+ #if defined(POINTERS_EXTEND_UNSIGNED) && !defined(HAVE_ptr_extend)
+-      if (! POINTERS_EXTEND_UNSIGNED
++      /* As we do not know which address space the pointer is refering to,
++	 we can do this only if the target does not support different pointer
++	 or address modes depending on the address space.  */
++      if (target_default_pointer_address_modes_p ()
++	  && ! POINTERS_EXTEND_UNSIGNED
+ 	  && mode == Pmode && GET_MODE (op) == ptr_mode
+ 	  && (CONSTANT_P (op)
+ 	      || (GET_CODE (op) == SUBREG
+@@ -885,7 +889,11 @@ simplify_unary_operation_1 (enum rtx_cod
+ 	return rtl_hooks.gen_lowpart_no_emit (mode, op);
+ 
+ #if defined(POINTERS_EXTEND_UNSIGNED) && !defined(HAVE_ptr_extend)
+-      if (POINTERS_EXTEND_UNSIGNED > 0
++      /* As we do not know which address space the pointer is refering to,
++	 we can do this only if the target does not support different pointer
++	 or address modes depending on the address space.  */
++      if (target_default_pointer_address_modes_p ()
++	  && POINTERS_EXTEND_UNSIGNED > 0
+ 	  && mode == Pmode && GET_MODE (op) == ptr_mode
+ 	  && (CONSTANT_P (op)
+ 	      || (GET_CODE (op) == SUBREG
+diff -urNp gcc-4.4.4.orig/gcc/stor-layout.c gcc-4.4.4/gcc/stor-layout.c
+--- a/src/gcc/stor-layout.c	2010-03-31
++++ b/src/gcc/stor-layout.c	2010-06-30
+@@ -48,9 +48,9 @@ unsigned int maximum_field_alignment = T
+ /* ... and its original value in bytes, specified via -fpack-struct=<value>.  */
+ unsigned int initial_max_fld_align = TARGET_DEFAULT_PACK_STRUCT;
+ 
+-/* Nonzero if all REFERENCE_TYPEs are internal and hence should be
+-   allocated in Pmode, not ptr_mode.   Set only by internal_reference_types
+-   called only by a front end.  */
++/* Nonzero if all REFERENCE_TYPEs are internal and hence should be allocated
++   in the address spaces' address_mode, not pointer_mode.   Set only by
++   internal_reference_types called only by a front end.  */
+ static int reference_types_internal = 0;
+ 
+ static void finalize_record_size (record_layout_info);
+@@ -66,8 +66,8 @@ extern void debug_rli (record_layout_inf
+ 
+ static GTY(()) tree pending_sizes;
+ 
+-/* Show that REFERENCE_TYPES are internal and should be Pmode.  Called only
+-   by front end.  */
++/* Show that REFERENCE_TYPES are internal and should use address_mode.
++   Called only by front end.  */
+ 
+ void
+ internal_reference_types (void)
+@@ -1700,6 +1700,7 @@ layout_type (tree type)
+       /* A pointer might be MODE_PARTIAL_INT,
+ 	 but ptrdiff_t must be integral.  */
+       SET_TYPE_MODE (type, mode_for_size (POINTER_SIZE, MODE_INT, 0));
++      TYPE_PRECISION (type) = POINTER_SIZE;
+       break;
+ 
+     case FUNCTION_TYPE:
+@@ -1715,16 +1716,17 @@ layout_type (tree type)
+     case POINTER_TYPE:
+     case REFERENCE_TYPE:
+       {
+-	enum machine_mode mode = ((TREE_CODE (type) == REFERENCE_TYPE
+-				   && reference_types_internal)
+-				  ? Pmode : TYPE_MODE (type));
+-
+-	int nbits = GET_MODE_BITSIZE (mode);
++	enum machine_mode mode = TYPE_MODE (type);
++	if (TREE_CODE (type) == REFERENCE_TYPE && reference_types_internal)
++	  {
++	    addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (type));
++	    mode = targetm.addr_space.address_mode (as);
++	  }
+ 
+-	TYPE_SIZE (type) = bitsize_int (nbits);
++	TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (mode));
+ 	TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (mode));
+ 	TYPE_UNSIGNED (type) = 1;
+-	TYPE_PRECISION (type) = nbits;
++	TYPE_PRECISION (type) = GET_MODE_BITSIZE (mode);
+       }
+       break;
+ 
+diff -urNp gcc-4.4.4.orig/gcc/target-def.h gcc-4.4.4/gcc/target-def.h
+--- a/src/gcc/target-def.h	2010-06-30
++++ b/src/gcc/target-def.h	2010-06-30
+@@ -471,6 +471,48 @@
+ #define TARGET_VALID_POINTER_MODE default_valid_pointer_mode
+ #endif
+ 
++#ifndef TARGET_ADDR_SPACE_POINTER_MODE
++#define TARGET_ADDR_SPACE_POINTER_MODE default_addr_space_pointer_mode
++#endif
++
++#ifndef TARGET_ADDR_SPACE_ADDRESS_MODE
++#define TARGET_ADDR_SPACE_ADDRESS_MODE default_addr_space_address_mode
++#endif
++
++#ifndef TARGET_ADDR_SPACE_VALID_POINTER_MODE
++#define TARGET_ADDR_SPACE_VALID_POINTER_MODE \
++	default_addr_space_valid_pointer_mode
++#endif
++
++#ifndef TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P
++#define TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P \
++  default_addr_space_legitimate_address_p
++#endif
++
++#ifndef TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS
++#define TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS \
++  default_addr_space_legitimize_address
++#endif
++
++#ifndef TARGET_ADDR_SPACE_SUBSET_P
++#define TARGET_ADDR_SPACE_SUBSET_P default_addr_space_subset_p
++#endif
++
++#ifndef TARGET_ADDR_SPACE_CONVERT
++#define TARGET_ADDR_SPACE_CONVERT default_addr_space_convert
++#endif
++
++#define TARGET_ADDR_SPACE_HOOKS			\
++  {						\
++    TARGET_ADDR_SPACE_POINTER_MODE,		\
++    TARGET_ADDR_SPACE_ADDRESS_MODE,		\
++    TARGET_ADDR_SPACE_VALID_POINTER_MODE,	\
++    TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P,	\
++    TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS,	\
++    TARGET_ADDR_SPACE_SUBSET_P,			\
++    TARGET_ADDR_SPACE_CONVERT,			\
++  }
++
+ #ifndef TARGET_SCALAR_MODE_SUPPORTED_P
+ #define TARGET_SCALAR_MODE_SUPPORTED_P default_scalar_mode_supported_p
+ #endif
+@@ -906,6 +948,7 @@
+   TARGET_MIN_DIVISIONS_FOR_RECIP_MUL,		\
+   TARGET_MODE_REP_EXTENDED,			\
+   TARGET_VALID_POINTER_MODE,                    \
++  TARGET_ADDR_SPACE_HOOKS,			\
+   TARGET_SCALAR_MODE_SUPPORTED_P,		\
+   TARGET_VECTOR_MODE_SUPPORTED_P,               \
+   TARGET_VECTOR_OPAQUE_P,			\
+diff -urNp gcc-4.4.4.orig/gcc/target.h gcc-4.4.4/gcc/target.h
+--- a/src/gcc/target.h	2010-06-30
++++ b/src/gcc/target.h	2010-06-30
+@@ -68,6 +68,12 @@ typedef int (* print_switch_fn_type) (pr
+ /* An example implementation for ELF targets.  Defined in varasm.c  */
+ extern int elf_record_gcc_switches (print_switch_type type, const char *);
+ 
++/* Some places still assume that all pointer or address modes are the
++   standard Pmode and ptr_mode.  These optimizations become invalid if
++   the target actually supports multiple different modes.  For now,
++   we disable such optimizations on such targets, using this function.  */
++extern bool target_default_pointer_address_modes_p (void);
++
+ struct stdarg_info;
+ struct spec_info_def;
+ 
+@@ -673,6 +679,36 @@ struct gcc_target
+   /* True if MODE is valid for a pointer in __attribute__((mode("MODE"))).  */
+   bool (* valid_pointer_mode) (enum machine_mode mode);
+ 
++  /* Support for named address spaces.  */
++  struct addr_space {
++    /* MODE to use for a pointer into another address space.  */
++    enum machine_mode (* pointer_mode) (addr_space_t);
++
++    /* MODE to use for an address in another address space.  */
++    enum machine_mode (* address_mode) (addr_space_t);
++
++    /* True if MODE is valid for a pointer in __attribute__((mode("MODE")))
++       in another address space.  */
++    bool (* valid_pointer_mode) (enum machine_mode, addr_space_t);
++
++    /* True if an address is a valid memory address to a given named address
++       space for a given mode.  */
++    bool (* legitimate_address_p) (enum machine_mode, rtx, bool, addr_space_t);
++
++    /* Return an updated address to convert an invalid pointer to a named
++       address space to a valid one.  If NULL_RTX is returned use machine
++       independent methods to make the address valid.  */
++    rtx (* legitimize_address) (rtx, rtx, enum machine_mode, addr_space_t);
++
++    /* True if one named address space is a subset of another named address. */
++    bool (* subset_p) (addr_space_t, addr_space_t);
++
++    /* Function to convert an rtl expression from one address space to
++       another.  */
++    rtx (* convert) (rtx, tree, tree);
++
++  } addr_space;
++
+   /* True if MODE is valid for the target.  By "valid", we mean able to
+      be manipulated in non-trivial ways.  In particular, this means all
+      the arithmetic is supported.  */
+diff -urNp gcc-4.4.4.orig/gcc/targhooks.c gcc-4.4.4/gcc/targhooks.c
+--- a/src/gcc/targhooks.c	2010-06-30
++++ b/src/gcc/targhooks.c	2010-06-30
+@@ -743,6 +743,106 @@ default_vector_min_alignment (const_tree
+   return TYPE_ALIGN_UNIT (type);
+ }
+ 
++/* Determine whether or not a pointer mode is valid. Assume defaults
++   of ptr_mode or Pmode - can be overridden.  */
++bool
++default_valid_pointer_mode (enum machine_mode mode)
++{
++  return (mode == ptr_mode || mode == Pmode);
++}
++
++/* Return the mode for a pointer to a given ADDRSPACE, defaulting to ptr_mode
++   for the generic address space only.  */
++
++enum machine_mode
++default_addr_space_pointer_mode (addr_space_t addrspace ATTRIBUTE_UNUSED)
++{
++  gcc_assert (ADDR_SPACE_GENERIC_P (addrspace));
++  return ptr_mode;
++}
++
++/* Return the mode for an address in a given ADDRSPACE, defaulting to Pmode
++   for the generic address space only.  */
++
++enum machine_mode
++default_addr_space_address_mode (addr_space_t addrspace ATTRIBUTE_UNUSED)
++{
++  gcc_assert (ADDR_SPACE_GENERIC_P (addrspace));
++  return Pmode;
++}
++
++/* Named address space version of valid_pointer_mode.  */
++
++bool
++default_addr_space_valid_pointer_mode (enum machine_mode mode, addr_space_t as)
++{
++  if (!ADDR_SPACE_GENERIC_P (as))
++    return (mode == targetm.addr_space.pointer_mode (as)
++	    || mode == targetm.addr_space.address_mode (as));
++
++  return targetm.valid_pointer_mode (mode);
++}
++
++/* Some places still assume that all pointer or address modes are the
++   standard Pmode and ptr_mode.  These optimizations become invalid if
++   the target actually supports multiple different modes.  For now,
++   we disable such optimizations on such targets, using this function.  */
++
++bool
++target_default_pointer_address_modes_p (void)
++{
++  if (targetm.addr_space.address_mode != default_addr_space_address_mode)
++    return false;
++  if (targetm.addr_space.pointer_mode != default_addr_space_pointer_mode)
++    return false;
++
++  return true;
++}
++
++/* Named address space version of legitimate_address_p.  */
++
++bool
++default_addr_space_legitimate_address_p (enum machine_mode mode, rtx mem,
++					 bool strict, addr_space_t as)
++{
++  gcc_unreachable ();
++}
++
++/* Named address space version of LEGITIMIZE_ADDRESS.  */
++
++rtx
++default_addr_space_legitimize_address (rtx x, rtx oldx,
++				       enum machine_mode mode, addr_space_t as)
++{
++  if (!ADDR_SPACE_GENERIC_P (as))
++    return x;
++
++  LEGITIMIZE_ADDRESS (x, oldx, mode, done);
++done:
++  return x;
++}
++
++/* The default hook for determining if one named address space is a subset of
++   another and to return which address space to use as the common address
++   space.  */
++
++bool
++default_addr_space_subset_p (addr_space_t subset, addr_space_t superset)
++{
++  return (subset == superset);
++}
++
++/* The default hook for TARGET_ADDR_SPACE_CONVERT. This hook should never be
++   called for targets with only a generic address space.  */
++
++rtx
++default_addr_space_convert (rtx op ATTRIBUTE_UNUSED,
++			    tree from_type ATTRIBUTE_UNUSED,
++			    tree to_type ATTRIBUTE_UNUSED)
++{
++  gcc_unreachable ();
++}
++
+ bool
+ default_hard_regno_scratch_ok (unsigned int regno ATTRIBUTE_UNUSED)
+ {
+diff -urNp gcc-4.4.4.orig/gcc/targhooks.h gcc-4.4.4/gcc/targhooks.h
+--- a/src/gcc/targhooks.h	2010-06-30
++++ b/src/gcc/targhooks.h	2010-06-30
+@@ -108,3 +108,15 @@ extern bool default_hard_regno_scratch_o
+ extern bool default_target_option_valid_attribute_p (tree, tree, tree, int);
+ extern bool default_target_option_pragma_parse (tree, tree);
+ extern bool default_target_option_can_inline_p (tree, tree);
++extern bool default_valid_pointer_mode (enum machine_mode);
++extern enum machine_mode default_addr_space_pointer_mode (addr_space_t);
++extern enum machine_mode default_addr_space_address_mode (addr_space_t);
++extern bool default_addr_space_valid_pointer_mode (enum machine_mode,
++						   addr_space_t);
++extern bool default_addr_space_legitimate_address_p (enum machine_mode, rtx,
++						     bool, addr_space_t);
++extern rtx default_addr_space_legitimize_address (rtx, rtx, enum machine_mode,
++						  addr_space_t);
++extern bool default_addr_space_subset_p (addr_space_t, addr_space_t);
++extern rtx default_addr_space_convert (rtx, tree, tree);
++
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.dg/simd-1b.c gcc-4.4.4/gcc/testsuite/gcc.dg/simd-1b.c
+--- a/src/gcc/testsuite/gcc.dg/simd-1b.c	2005-06-15
++++ b/src/gcc/testsuite/gcc.dg/simd-1b.c	2010-06-30
+@@ -14,7 +14,7 @@ void
+ hanneke ()
+ {
+   /* Operators on compatible SIMD types.  */
+-  a %= b; /* { dg-error "invalid operands to binary %" } */
++  a %= b;
+   c &= d;
+   a |= b;
+   c ^= d;
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.dg/vector-4.c gcc-4.4.4/gcc/testsuite/gcc.dg/vector-4.c
+--- a/src/gcc/testsuite/gcc.dg/vector-4.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.dg/vector-4.c	2010-06-30
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++#define vector __attribute__((vector_size(4*sizeof(int)) ))
++
++vector int a, b, c;
++
++
++/* Test that remainder works for vectors. */
++void f(void)
++{
++  a = b % c;
++}
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.dg/vector-init-1.c gcc-4.4.4/gcc/testsuite/gcc.dg/vector-init-1.c
+--- a/src/gcc/testsuite/gcc.dg/vector-init-1.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.dg/vector-init-1.c	2010-06-30
+@@ -0,0 +1,6 @@
++/* { dg-do compile } */
++
++/* PR C/31499, test that the C front-end treats vectors like an array. */
++
++#define vector __attribute__((__vector_size__(4*sizeof(int)) ))
++vector signed int v1[]={0,1,2,3,4,5,6,7};
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.dg/vector-init-2.c gcc-4.4.4/gcc/testsuite/gcc.dg/vector-init-2.c
+--- a/src/gcc/testsuite/gcc.dg/vector-init-2.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.dg/vector-init-2.c	2010-06-30
+@@ -0,0 +1,25 @@
++/* { dg-do run } */
++
++/* PR C/31499, test that the C front-end treats vectors like an array
++   and that it works at runtime. */
++
++#define vector __attribute__((__vector_size__(4*sizeof(int)) ))
++vector signed int v1[]={0,1,2,3,4,5,6,7};
++
++
++int main(void)
++{
++  int i;
++  for (i = 0; i < sizeof(v1)/sizeof(v1[0]); i++)
++  {
++    vector int t = v1[i];
++    int *d = (int*)&t;
++    int j;
++    for (j = 0; j < 4; j++)
++      {
++        if (d[j] != i * 4 + j)
++	  __builtin_abort ();
++      }
++  }
++  return 0;
++}
+\ No newline at end of file
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/s390/pr42224.c gcc-4.4.4/gcc/testsuite/gcc.target/s390/pr42224.c
+--- a/src/gcc/testsuite/gcc.target/s390/pr42224.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/s390/pr42224.c	2010-06-30
+@@ -0,0 +1,36 @@
++
++/* { dg-do compile } */
++/* { dg-options "-O0" } */
++
++typedef char* __char_ptr32 __attribute__ (( mode (SI) ));
++typedef __char_ptr32 *__char_ptr_char_ptr32 __attribute__ ((mode (SI)));
++
++void to_ptr32 (int x)
++{
++  __char_ptr32 ptr = (__char_ptr32) x;
++}
++
++void to_int (__char_ptr32 ptr)
++{
++  int x = (int) ptr;
++}
++
++__char_ptr_char_ptr32
++to_ptr32_ptr32 (char **ptr64)
++{
++  int argc;
++  __char_ptr_char_ptr32 short_argv;
++
++  for (argc=0; ptr64[argc]; argc++);
++
++  short_argv = (__char_ptr_char_ptr32) malloc32
++    (sizeof (__char_ptr32) * (argc + 1));
++
++  for (argc=0; ptr64[argc]; argc++)
++    short_argv[argc] = (__char_ptr32) strdup32 (ptr64[argc]);
++
++  short_argv[argc] = (__char_ptr32) 0;
++  return short_argv;
++
++}
++
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/cache1.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/cache1.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/cache1.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/cache1.c	2010-06-30
+@@ -0,0 +1,195 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target "ealib" } */
++
++#include <stdlib.h>
++#include <string.h>
++#include <ea.h>
++#include <spu_cache.h>
++
++#ifdef __EA64__
++#define addr unsigned long long
++#else
++#define addr unsigned long
++#endif
++
++static __ea void *bigblock;
++static __ea void *block;
++static int *ls_block;
++
++extern char __cache_tag_array_size[];
++#define CACHE_SIZE (4 * (int) &__cache_tag_array_size[0])
++#define LINE_SIZE ((addr)128)
++
++void
++init_mem (void)
++{
++  bigblock = malloc_ea (CACHE_SIZE + 2 * LINE_SIZE);
++  block = malloc_ea (2 * LINE_SIZE);
++  ls_block = malloc (LINE_SIZE);
++
++  memset_ea (bigblock, 0, CACHE_SIZE + 2 * LINE_SIZE);
++  memset_ea (block, -1, 2 * LINE_SIZE);
++  memset (ls_block, -1, LINE_SIZE);
++  cache_flush ();
++}
++
++/* Test 1: Simple cache fetching.  */
++void
++test1 (void)
++{
++  addr aligned = ((((addr) block) + LINE_SIZE - 1) & -LINE_SIZE);
++  int *p1 = NULL;
++  int *p2 = NULL;
++  int i = 0;
++
++  /* First, check if the same addr give the same cache ptr.  */
++  p1 = cache_fetch ((__ea void *) aligned);
++  p2 = cache_fetch ((__ea void *) aligned);
++
++  if (p1 != p2)
++    abort ();
++
++  /* Check that the data actually is in the cache. */
++  for (i = 0; i < LINE_SIZE / sizeof (int); i++)
++    {
++      if (p1[i] != -1)
++	abort ();
++    }
++
++  /* Check returning within the cache line. */
++  p2 = cache_fetch ((__ea void *) (aligned + sizeof (int)));
++
++  if (p2 - p1 != 1)
++    abort ();
++
++  /* Finally, check that fetching an LS pointer returns that pointer.  */
++  p1 = cache_fetch ((__ea char *) ls_block);
++  if (p1 != ls_block)
++    abort ();
++}
++
++/* Test 2: Eviction testing. */
++void
++test2 (void)
++{
++  addr aligned = ((((addr) block) + LINE_SIZE - 1) & -LINE_SIZE);
++  int *p = NULL;
++  int i = 0;
++
++  /* First check that clean evictions don't write back.  */
++  p = cache_fetch ((__ea void *) aligned);
++  for (i = 0; i < LINE_SIZE / sizeof (int); i++)
++    p[i] = 0;
++
++  cache_evict ((__ea void *) aligned);
++  memcpy_ea ((__ea char *) ls_block, (__ea void *) aligned, LINE_SIZE);
++
++  for (i = 0; i < LINE_SIZE / sizeof (int); i++)
++    {
++      if (ls_block[i] == 0)
++	abort ();
++    }
++
++  /* Now check that dirty evictions do write back.  */
++  p = cache_fetch_dirty ((__ea void *) aligned, LINE_SIZE);
++  for (i = 0; i < LINE_SIZE / sizeof (int); i++)
++    p[i] = 0;
++
++  cache_evict ((__ea void *) aligned);
++  memcpy_ea ((__ea char *) ls_block, (__ea void *) aligned, LINE_SIZE);
++
++  for (i = 0; i < LINE_SIZE / sizeof (int); i++)
++    {
++      if (ls_block[i] != 0)
++	abort ();
++    }
++
++  /* Finally, check that non-atomic writeback only writes dirty bytes.  */
++
++  for (i = 0; i < LINE_SIZE / sizeof (int); i++)
++    {
++      p = cache_fetch_dirty ((__ea void *) (aligned + i * sizeof (int)),
++			     (i % 2) * sizeof (int));
++      p[0] = -1;
++    }
++
++  cache_evict ((__ea void *) aligned);
++  memcpy_ea ((__ea char *) ls_block, (__ea void *) aligned, LINE_SIZE);
++
++  for (i = 0; i < LINE_SIZE / sizeof (int); i++)
++    {
++      if ((ls_block[i] == -1) && (i % 2 == 0))
++	abort ();
++      if ((ls_block[i] == 0) && (i % 2 == 1))
++	abort ();
++    }
++}
++
++/* Test LS forced-eviction. */
++void
++test3 (void)
++{
++  addr aligned = ((((addr) bigblock) + LINE_SIZE - 1) & -LINE_SIZE);
++  char *test = NULL;
++  char *ls = NULL;
++  int i = 0;
++
++  /* Init memory, fill the cache to capacity.  */
++  ls = cache_fetch_dirty ((__ea void *) aligned, LINE_SIZE);
++  for (i = 1; i < (CACHE_SIZE / LINE_SIZE); i++)
++    cache_fetch_dirty ((__ea void *) (aligned + i * LINE_SIZE), LINE_SIZE);
++
++  memset (ls, -1, LINE_SIZE);
++  test = cache_fetch ((__ea void *) (aligned + CACHE_SIZE));
++
++  /* test == ls indicates cache collision.  */
++  if (test != ls)
++    abort ();
++
++  /* Make sure it actually wrote the cache line.  */
++  for (i = 0; i < LINE_SIZE; i++)
++    {
++      if (ls[i] != 0)
++	abort ();
++    }
++
++  ls = cache_fetch ((__ea void *) aligned);
++
++  /* test != ls indicates another entry was evicted.  */
++  if (test == ls)
++    abort ();
++
++  /* Make sure that the previous eviction actually wrote back.  */
++  for (i = 0; i < LINE_SIZE; i++)
++    {
++      if (ls[i] != 0xFF)
++	abort ();
++    }
++}
++
++int
++main (int argc, char **argv)
++{
++  init_mem ();
++  test1 ();
++  test2 ();
++  test3 ();
++
++  return 0;
++}
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/cast1.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/cast1.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/cast1.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/cast1.c	2010-06-30
+@@ -0,0 +1,43 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do run } */
++
++extern void abort (void);
++extern unsigned long long __ea_local_store;
++
++__ea int *ppu;
++int x, *spu = &x, *spu2;
++
++int
++main (int argc, char **argv)
++{
++  ppu = (__ea int *) spu;
++  spu2 = (int *) ppu;
++
++#ifdef __EA32__
++  if ((int) ppu != (int) __ea_local_store + (int) spu)
++#else
++  if ((unsigned long long) ppu != __ea_local_store + (unsigned long long)(int) spu)
++#endif
++
++    abort ();
++
++  if (spu != spu2)
++    abort ();
++
++  return 0;
++}
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/cast2.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/cast2.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/cast2.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/cast2.c	2010-06-30
+@@ -0,0 +1,74 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do run } */
++
++extern void abort (void);
++
++int array[128];
++
++__ea int *ea;
++int *lm;
++
++void verify_ea (void) __attribute__ ((noinline));
++void
++verify_ea (void)
++{
++  if (ea != (__ea int *)lm)
++    abort ();
++}
++
++void verify_lm (void) __attribute__ ((noinline));
++void
++verify_lm (void)
++{
++  if ((int *)ea != lm)
++    abort ();
++}
++
++void verify_diff (int x) __attribute__ ((noinline));
++void
++verify_diff (int x)
++{
++  if (ea - lm != x)
++    abort ();
++}
++
++int
++main (int argc, char **argv)
++{
++  ea = 0;
++  lm = 0;
++  verify_ea ();
++  verify_lm ();
++  verify_diff (0);
++
++  ea = &array[64];
++  lm = &array[64];
++  verify_ea ();
++  verify_lm ();
++  verify_diff (0);
++
++  ea = &array[0];
++  lm = &array[64];
++  verify_diff (-64);
++
++  ea = &array[64];
++  lm = &array[0];
++  verify_diff (64);
++
++  return 0;
++}
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/compile1.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/compile1.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/compile1.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/compile1.c	2010-06-30
+@@ -0,0 +1,109 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* Valid __ea declarations.  */
++
++/* { dg-do compile } */
++
++/* Typedefs.  */
++typedef __ea int ea_int_t;
++typedef __ea int *ea_int_star_t;
++typedef int outer_t;
++
++/* Externs.  */
++
++__ea extern int i1;
++extern __ea int i2;
++extern int __ea i3;
++extern __ea ea_int_t i4;		/* __ea qualifier permitted via typedef.  */
++extern int __ea __ea __ea dupe;		/* __ea duplicate permitted directly.  */
++extern int __ea *ppu;
++
++/* Pointers.  */
++__ea int *i4p;
++
++/* Structs.  */
++struct st {
++  __ea int *p;
++};
++
++/* Variable definitions.  */
++__ea int ii0;
++int *__ea ii1;
++static int __ea ii2;
++
++void
++f1 ()
++{
++  int *spu;
++  ppu = (ea_int_t *) spu;
++  ppu = (ea_int_star_t) spu;
++}
++
++void
++f2 ()
++{
++  int *spu;
++  spu = (int *) ppu;
++  ppu = (__ea int *) spu;
++}
++
++void
++f3 ()
++{
++  int i = sizeof (__ea int);
++}
++
++__ea int *f4 (void)
++{
++  return 0;
++}
++
++int f5 (__ea int *parm)
++{
++  static __ea int local4;
++  int tmp = local4;
++  local4 = *parm;
++  return tmp;
++}
++
++static inline __ea void *f6 (__ea void *start)
++{
++  return 0;
++}
++
++void f7 (void)
++{
++  __ea void *s1;
++  auto __ea void *s2;
++}
++
++__ea int *f8 (__ea int *x)
++{
++  register __ea int *y = x;
++  __ea int *z = y;
++  return z;
++}
++
++long long f9 (__ea long long x[2])
++{
++  return x[0] + x[1];
++}
++
++void f10 ()
++{
++  static __ea outer_t o;
++}
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/compile2.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/compile2.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/compile2.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/compile2.c	2010-06-30
+@@ -0,0 +1,43 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* Make sure __ea structure references work.  */
++
++/* { dg-do compile } */
++
++typedef unsigned long int uintptr_t;
++
++struct tostruct
++{
++  uintptr_t selfpc;
++  long count;
++  unsigned short link;
++};
++
++/* froms are indexing tos */
++static __ea unsigned short *froms;
++static __ea struct tostruct *tos = 0;
++
++void
++foo (uintptr_t frompc, uintptr_t selfpc)
++{
++  __ea unsigned short *frompcindex;
++
++  frompcindex = &froms[(frompc) / (4 * sizeof (*froms))];
++  *frompcindex = tos[0].link;
++
++  return;
++}
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/cppdefine.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/cppdefine.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/cppdefine.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/cppdefine.c	2010-06-30
+@@ -0,0 +1,36 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* Test default __EA32__/__EA64__ define.  */
++
++/* { dg-do compile } */
++
++#if !defined (__EA32__) && !defined (__EA64__)
++#error both __EA32__ and __EA64__ undefined
++#endif
++
++#if defined (__EA32__) && defined (__EA64__)
++#error both __EA32__ and __EA64__ defined
++#endif
++
++#ifdef __EA32__
++int x [ sizeof (__ea char *) == 4 ? 1 : -1 ];
++#endif
++
++#ifdef __EA64__
++int x [ sizeof (__ea char *) == 8 ? 1 : -1 ];
++#endif
++
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/ea.exp gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/ea.exp
+--- a/src/gcc/testsuite/gcc.target/spu/ea/ea.exp	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/ea.exp	2010-06-30
+@@ -0,0 +1,54 @@
++#   Copyright (C) 2008, 2009 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++# GCC testsuite that uses the `dg.exp' driver.
++
++# Exit immediately if this isn't a SPU target.
++if { ![istarget spu-*-*] } then {
++  return
++}
++
++# Load support procs.
++load_lib gcc-dg.exp
++
++# Return 1 if target __ea library functions are available
++proc check_effective_target_ealib { } {
++    return [check_no_compiler_messages ealib executable {
++	#include <ea.h>
++	int main (void)
++	{
++	    __ea void *ptr = malloc_ea (1024);
++	    return 0;
++	}
++    }]
++}
++
++# If a testcase doesn't have special options, use these.
++# We do not use the global DEFAULT_CFLAGS as all test cases
++# in this directory use the __ea address space qualifier
++# extension and thus will not compile with -ansi.
++set DEFAULT_EA_CFLAGS "-std=gnu99 -pedantic-errors -O2"
++
++# Initialize `dg'.
++dg-init
++
++# Run all tests in both -mea32 and -mea64 mode.
++set tests [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]]
++dg-runtest $tests "-mea32" $DEFAULT_EA_CFLAGS
++dg-runtest $tests "-mea64" $DEFAULT_EA_CFLAGS
++
++# All done.
++dg-finish
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/errors1.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/errors1.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/errors1.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/errors1.c	2010-06-30
+@@ -0,0 +1,67 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* Invalid __ea declarations.  */
++
++/* { dg-do compile } */
++
++typedef __ea int eaint;
++
++void func ()
++{
++  register __ea int local1; /* { dg-error "'__ea' combined with 'register' qualifier for 'local1'" } */
++  auto __ea int local2;     /* { dg-error "'__ea' combined with 'auto' qualifier for 'local2'" } */
++  __ea int local3;	    /* { dg-error "'__ea' specified for auto variable 'local3'" } */
++  register int *__ea p1;    /* { dg-error "'__ea' combined with 'register' qualifier for 'p1'" } */
++  auto char *__ea p2;       /* { dg-error "'__ea' combined with 'auto' qualifier for 'p2'" } */
++  void *__ea p3;            /* { dg-error "'__ea' specified for auto variable 'p3'" } */
++  register __ea int a1[2];  /* { dg-error "'__ea' combined with 'register' qualifier for 'a1'" } */
++  auto __ea char a2[1];     /* { dg-error "'__ea' combined with 'auto' qualifier for 'a2'" } */
++  __ea char a3[5];          /* { dg-error "'__ea' specified for auto variable 'a3'" } */
++  register eaint td1;       /* { dg-error "'__ea' combined with 'register' qualifier for 'td1'" } */
++  auto eaint td2;           /* { dg-error "'__ea' combined with 'auto' qualifier for 'td2'" } */
++  eaint td3;	            /* { dg-error "'__ea' specified for auto variable 'td3'" } */
++}
++
++void func2 (__ea int x)	    /* { dg-error "'__ea' specified for parameter 'x'" } */
++{ }
++
++void func2td (eaint x)	    /* { dg-error "'__ea' specified for parameter 'x'" } */
++{ }
++
++struct st {
++  __ea int x;		    /* { dg-error "'__ea' specified for structure field 'x'" } */
++  eaint td;		    /* { dg-error "'__ea' specified for structure field 'td'" } */
++  int *__ea q;		    /* { dg-error "'__ea' specified for structure field 'q'" } */
++  int __ea b : 7;	    /* { dg-error "'__ea' specified for structure field 'b'" } */
++  int __ea : 1;		    /* { dg-error "'__ea' specified for structure field" } */
++} s;
++
++struct A { int a; };
++
++int func3 (int *__ea);	    /* { dg-error "'__ea' specified for unnamed parameter" } */
++int func3 (int *__ea x)	    /* { dg-error "'__ea' specified for parameter 'x'" } */
++{
++  struct A i = (__ea struct A) { 1 };	/* { dg-error "compound literal qualified by address-space qualifier" } */
++  return i.a;
++}
++
++extern __ea int ea_var;		/* { dg-message "note: previous declaration of 'ea_var' was here" } */
++int ea_var;			/* { dg-error "conflicting named address spaces \\(generic vs __ea\\) for 'ea_var'" } */
++
++extern eaint ea_var_td;		/* { dg-message "note: previous declaration of 'ea_var_td' was here" } */
++int ea_var_td;			/* { dg-error "conflicting named address spaces \\(generic vs __ea\\) for 'ea_var_td'" } */
++
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/errors2.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/errors2.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/errors2.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/errors2.c	2010-06-30
+@@ -0,0 +1,107 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* Invalid __ea declarations.  */
++
++/* { dg-do compile } */
++
++__ea char ea_str[] = "abc";
++char lm_str[] = "abc";
++
++__ea char *lm_ea_ptr1 = "abc";				/* { dg-error "initializer element is not computable at load time" } */
++__ea char *lm_ea_ptr2 = (__ea char *)"abc";		/* { dg-error "initializer element is not constant" } */
++__ea char *lm_ea_ptr3 = ea_str;
++__ea char *lm_ea_ptr4 = (__ea char *)ea_str;
++__ea char *lm_ea_ptr5 = lm_str;				/* { dg-error "initializer element is not computable at load time" } */
++__ea char *lm_ea_ptr6 = (__ea char *)lm_str;		/* { dg-error "initializer element is not constant" } */
++
++__ea char * __ea ea_ea_ptr1 = ea_str;
++__ea char * __ea ea_ea_ptr2 = (__ea char *)ea_str;
++
++char * __ea ea_lm_ptr1 = lm_str;
++char * __ea ea_lm_ptr2 = (char *)lm_str;
++
++struct foo {
++  int first;
++  __ea char *ptr;
++  int last;
++};
++
++__ea struct foo ea_struct1 = {
++  10,
++  (__ea char *)0,
++  11,
++};
++
++__ea struct foo ea_struct2 = {
++  20,
++  0,
++  21,
++};
++
++struct foo ea_struct3 = {
++  30,
++  ea_str,
++  31,
++};
++
++struct foo ea_struct4 = {
++  40,
++  (__ea char *)lm_str,	/* { dg-error "(initializer element is not constant)|(near initialization)" "" } */
++  41,
++};
++
++struct bar {
++  int first;
++  char *ptr;
++  int last;
++};
++
++__ea struct bar ea_struct5 = {
++  50,
++  0,
++  51,
++};
++
++__ea struct bar ea_struct6 = {
++  60,
++  (char *)0,
++  61,
++};
++
++__ea struct bar ea_struct7 = {
++  70,
++  lm_str,
++  71,
++};
++
++struct bar lm_struct8 = {
++  80,
++  0,
++  81,
++};
++
++struct bar lm_struct9 = {
++  90,
++  (char *)0,
++  91,
++};
++
++struct bar lm_struct10 = {
++  100,
++  lm_str,
++  101,
++};
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/execute1.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/execute1.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/execute1.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/execute1.c	2010-06-30
+@@ -0,0 +1,41 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do compile } */
++
++#include <stdlib.h>
++
++__ea char str[] = "abc";
++
++int
++main (void)
++{
++  __ea char *p = str;
++
++  if (*p++ != 'a')
++    abort ();
++
++  if (*p++ != 'b')
++    abort ();
++
++  if (*p++ != 'c')
++    abort ();
++
++  if (*p++ != '\0')
++    abort ();
++
++  return 0;
++}
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/execute2.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/execute2.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/execute2.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/execute2.c	2010-06-30
+@@ -0,0 +1,41 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do run } */
++
++#include <stdlib.h>
++
++char str[] = "abc";
++
++int
++main (void)
++{
++  __ea char *p = (__ea char *)str;
++
++  if (*p++ != 'a')
++    abort ();
++
++  if (*p++ != 'b')
++    abort ();
++
++  if (*p++ != 'c')
++    abort ();
++
++  if (*p++ != '\0')
++    abort ();
++
++  return 0;
++}
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/execute3.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/execute3.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/execute3.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/execute3.c	2010-06-30
+@@ -0,0 +1,39 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do run } */
++
++#include <stdlib.h>
++
++int
++main (void)
++{
++  __ea char *p = (__ea char *)"abc";
++
++  if (*p++ != 'a')
++    abort ();
++
++  if (*p++ != 'b')
++    abort ();
++
++  if (*p++ != 'c')
++    abort ();
++
++  if (*p++ != '\0')
++    abort ();
++
++  return 0;
++}
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/ops1.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/ops1.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/ops1.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/ops1.c	2010-06-30
+@@ -0,0 +1,94 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* This is the same as ops2.c except for the compile option.
++   If you modify this code, please modify ops2.c as well.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -std=gnu99 -pedantic-errors -maddress-space-conversion" } */
++
++#define __lm
++
++__ea int ea_var = 1;
++__lm int lm_var = 2;
++
++typedef __ea int *ea_ptr_t;
++typedef __lm int *lm_ptr_t;
++
++typedef __ea void *ea_vptr_t;
++typedef __lm void *lm_vptr_t;
++
++ea_ptr_t ea, ea2;
++lm_ptr_t lm, lm2;
++
++ea_vptr_t eav;
++lm_vptr_t lmv;
++
++extern void call_ea (ea_ptr_t);
++extern void call_lm (lm_ptr_t);
++
++/* Assignment, initialization, argument passing, and return.  */
++void to_ea (void) { ea = lm; }
++void to_lm (void) { lm = ea; }			/* { dg-error "assignment from pointer to non-enclosed address space" } */
++void init_ea (void) { ea_ptr_t l_ea = lm; }
++void init_lm (void) { lm_ptr_t l_lm = ea; }	/* { dg-error "initialization from pointer to non-enclosed address space" } */
++ea_ptr_t ret_ea (void) { return lm; }
++lm_ptr_t ret_lm (void) { return ea; }		/* { dg-error "return from pointer to non-enclosed address space" } */
++void call_ea2 (void) { call_ea (lm); }
++void call_lm2 (void) { call_lm (ea); }		/* { dg-error "passing argument 1 of 'call_lm' from pointer to non-enclosed address space" } */
++
++/* Explicit casts.  */
++void to_ea_with_cast (void) { ea = (ea_ptr_t)lm; }
++void to_lm_with_cast (void) { lm = (lm_ptr_t)ea; }
++void init_ea_with_cast (void) { ea_ptr_t l_ea = (ea_ptr_t)lm; }
++void init_lm_with_cast (void) { lm_ptr_t l_lm = (lm_ptr_t)ea; }
++ea_ptr_t ret_ea_with_cast (void) { return (ea_ptr_t)lm; }
++lm_ptr_t ret_lm_with_cast (void) { return (lm_ptr_t)ea; }
++void call_ea2_with_cast (void) { call_ea ((ea_ptr_t)lm); }
++void call_lm2_with_cast (void) { call_lm ((lm_ptr_t)ea); }
++
++/* Arithmetic operators.  */
++int sub_eaea (void) { return ea - ea2; }
++int sub_ealm (void) { return ea - lm2; }
++int sub_lmea (void) { return lm - ea2; }
++int sub_lmlm (void) { return lm - lm2; }
++ea_ptr_t if_eaea1 (int test) { return test? ea : ea2; }
++lm_ptr_t if_eaea2 (int test) { return test? ea : ea2; }	/* { dg-error "return from pointer to non-enclosed address space" } */
++ea_ptr_t if_ealm1 (int test) { return test? ea : lm2; }
++lm_ptr_t if_ealm2 (int test) { return test? ea : lm2; }	/* { dg-error "return from pointer to non-enclosed address space" } */
++ea_ptr_t if_lmea1 (int test) { return test? lm : ea2; }
++lm_ptr_t if_lmea2 (int test) { return test? lm : ea2; }	/* { dg-error "return from pointer to non-enclosed address space" } */
++ea_ptr_t if_lmlm1 (int test) { return test? lm : lm2; }
++lm_ptr_t if_lmlm2 (int test) { return test? lm : lm2; }
++
++/* Relational operators.  */
++int eq_eaea (void) { return ea == ea2; }
++int eq_ealm (void) { return ea == lm2; }
++int eq_lmea (void) { return lm == ea2; }
++int eq_lmlm (void) { return lm == lm2; }
++int lt_eaea (void) { return ea < ea2; }
++int lt_ealm (void) { return ea < lm2; }
++int lt_lmea (void) { return lm < ea2; }
++int lt_lmlm (void) { return lm < lm2; }
++
++/* Null pointer.  */
++void null_ea1 (void) { ea = 0; }
++void null_ea2 (void) { ea = (void *)0; }
++void null_ea3 (void) { ea = (__ea void *)0; }
++void null_lm1 (void) { lm = 0; }
++void null_lm2 (void) { lm = (void *)0; }
++void null_lm3 (void) { lm = (__ea void *)0; }	/* { dg-error "assignment from pointer to non-enclosed address space" } */
++
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/ops2.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/ops2.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/ops2.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/ops2.c	2010-06-30
+@@ -0,0 +1,94 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* This is the same as ops1.c except for the compile option.
++   If you modify this code, please modify ops1.c as well.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -std=gnu99 -pedantic-errors -mno-address-space-conversion" } */
++
++#define __lm
++
++__ea int ea_var = 1;
++__lm int lm_var = 2;
++
++typedef __ea int *ea_ptr_t;
++typedef __lm int *lm_ptr_t;
++
++typedef __ea void *ea_vptr_t;
++typedef __lm void *lm_vptr_t;
++
++ea_ptr_t ea, ea2;
++lm_ptr_t lm, lm2;
++
++ea_vptr_t eav;
++lm_vptr_t lmv;
++
++extern void call_ea (ea_ptr_t);
++extern void call_lm (lm_ptr_t);
++
++/* Assignment, initialization, argument passing, and return.  */
++void to_ea (void) { ea = lm; }			/* { dg-error "assignment from pointer to non-enclosed address space" } */
++void to_lm (void) { lm = ea; }			/* { dg-error "assignment from pointer to non-enclosed address space" } */
++void init_ea (void) { ea_ptr_t l_ea = lm; }	/* { dg-error "initialization from pointer to non-enclosed address space" } */
++void init_lm (void) { lm_ptr_t l_lm = ea; }	/* { dg-error "initialization from pointer to non-enclosed address space" } */
++ea_ptr_t ret_ea (void) { return lm; }		/* { dg-error "return from pointer to non-enclosed address space" } */
++lm_ptr_t ret_lm (void) { return ea; }		/* { dg-error "return from pointer to non-enclosed address space" } */
++void call_ea2 (void) { call_ea (lm); }		/* { dg-error "passing argument 1 of 'call_ea' from pointer to non-enclosed address space" } */
++void call_lm2 (void) { call_lm (ea); }		/* { dg-error "passing argument 1 of 'call_lm' from pointer to non-enclosed address space" } */
++
++/* Explicit casts.  */
++void to_ea_with_cast (void) { ea = (ea_ptr_t)lm; }		/* { dg-warning "cast to __ea address space pointer" } */
++void to_lm_with_cast (void) { lm = (lm_ptr_t)ea; }		/* { dg-warning "cast to generic address space pointer" } */
++void init_ea_with_cast (void) { ea_ptr_t l_ea = (ea_ptr_t)lm; }	/* { dg-warning "cast to __ea address space pointer" } */
++void init_lm_with_cast (void) { lm_ptr_t l_lm = (lm_ptr_t)ea; }	/* { dg-warning "cast to generic address space pointer" } */
++ea_ptr_t ret_ea_with_cast (void) { return (ea_ptr_t)lm; }	/* { dg-warning "cast to __ea address space pointer" } */
++lm_ptr_t ret_lm_with_cast (void) { return (lm_ptr_t)ea; }	/* { dg-warning "cast to generic address space pointer" } */
++void call_ea2_with_cast (void) { call_ea ((ea_ptr_t)lm); }	/* { dg-warning "cast to __ea address space pointer" } */
++void call_lm2_with_cast (void) { call_lm ((lm_ptr_t)ea); }	/* { dg-warning "cast to generic address space pointer" } */
++
++/* Arithmetic operators.  */
++int sub_eaea (void) { return ea - ea2; }
++int sub_ealm (void) { return ea - lm2; }		/* { dg-error "invalid operands to binary -" } */
++int sub_lmea (void) { return lm - ea2; }		/* { dg-error "invalid operands to binary -" } */
++int sub_lmlm (void) { return lm - lm2; }
++ea_ptr_t if_eaea1 (int test) { return test? ea : ea2; }
++lm_ptr_t if_eaea2 (int test) { return test? ea : ea2; }	/* { dg-error "return from pointer to non-enclosed address space" } */
++ea_ptr_t if_ealm1 (int test) { return test? ea : lm2; } /* { dg-error "pointers to disjoint address spaces used in conditional expression" } */
++lm_ptr_t if_ealm2 (int test) { return test? ea : lm2; } /* { dg-error "pointers to disjoint address spaces used in conditional expression" } */
++ea_ptr_t if_lmea1 (int test) { return test? lm : ea2; } /* { dg-error "pointers to disjoint address spaces used in conditional expression" } */
++lm_ptr_t if_lmea2 (int test) { return test? lm : ea2; } /* { dg-error "pointers to disjoint address spaces used in conditional expression" } */
++ea_ptr_t if_lmlm1 (int test) { return test? lm : lm2; }	/* { dg-error "return from pointer to non-enclosed address space" } */
++lm_ptr_t if_lmlm2 (int test) { return test? lm : lm2; }
++
++/* Relational operators.  */
++int eq_eaea (void) { return ea == ea2; }
++int eq_ealm (void) { return ea == lm2; }	/* { dg-error "comparison of pointers to disjoint address spaces" } */
++int eq_lmea (void) { return lm == ea2; }	/* { dg-error "comparison of pointers to disjoint address spaces" } */
++int eq_lmlm (void) { return lm == lm2; }
++int lt_eaea (void) { return ea < ea2; }
++int lt_ealm (void) { return ea < lm2; }		/* { dg-error "comparison of pointers to disjoint address spaces" } */
++int lt_lmea (void) { return lm < ea2; }		/* { dg-error "comparison of pointers to disjoint address spaces" } */
++int lt_lmlm (void) { return lm < lm2; }
++
++/* Null pointer.  */
++void null_ea1 (void) { ea = 0; }
++void null_ea2 (void) { ea = (void *)0; }
++void null_ea3 (void) { ea = (__ea void *)0; }
++void null_lm1 (void) { lm = 0; }
++void null_lm2 (void) { lm = (void *)0; }
++void null_lm3 (void) { lm = (__ea void *)0; }	/* { dg-error "assignment from pointer to non-enclosed address space" } */
++
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/options1.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/options1.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/options1.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/options1.c	2010-06-30
+@@ -0,0 +1,22 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* Test -mcache-size.  */
++
++/* { dg-do compile } */
++/* { dg-options "-mcache-size=128" } */
++
++int x;
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/pr41857.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/pr41857.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/pr41857.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/pr41857.c	2010-06-30
+@@ -0,0 +1,29 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do compile } */
++
++__ea char *strchr_ea (__ea const char *s, int c);
++__ea char *foo (__ea char *s)
++{
++  __ea char *ret = s;
++  int i;
++
++  for (i = 0; i < 3; i++)
++    ret = strchr_ea (ret, s[i]);
++
++  return ret;
++}
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/gcc.target/spu/ea/test-sizes.c gcc-4.4.4/gcc/testsuite/gcc.target/spu/ea/test-sizes.c
+--- a/src/gcc/testsuite/gcc.target/spu/ea/test-sizes.c	1970-01-01
++++ b/src/gcc/testsuite/gcc.target/spu/ea/test-sizes.c	2010-06-30
+@@ -0,0 +1,608 @@
++/* Copyright (C) 2009 Free Software Foundation, Inc.
++
++   This file is free software; you can redistribute it and/or modify it under
++   the terms of the GNU General Public License as published by the Free
++   Software Foundation; either version 3 of the License, or (at your option)
++   any later version.
++
++   This file is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++   for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this file; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++/* { dg-do run } */
++
++#ifdef __EA32__
++#define EA_PTRSIZE 4
++#endif
++#ifdef __EA64__
++#define EA_PTRSIZE 8
++#endif
++
++#if !defined(LEVEL1) && !defined(LEVEL2) && !defined(LEVEL3)
++#define LEVEL1 1		/* single pointer indirection */
++#define LEVEL2 1		/* 2 levels of pointer indirection */
++#define LEVEL3 1		/* 3 levels of pointer indirection */
++
++#else
++#ifndef LEVEL1
++#define LEVEL1 0
++#endif
++
++#ifndef LEVEL2
++#define LEVEL2 0
++#endif
++
++#ifndef LEVEL3
++#define LEVEL3 0
++#endif
++#endif
++
++#if !defined(USE_SIMPLE) && !defined(USE_COMPLEX)
++#define USE_SIMPLE  1		/* build up pointers via multiple typedefs */
++#define USE_COMPLEX 1		/* single typedef for pointer indirections */
++
++#else
++#ifndef USE_SIMPLE
++#define USE_SIMPLE 0
++#endif
++
++#ifndef USE_COMPLEX
++#define USE_COMPLEX 0
++#endif
++#endif
++
++#if !defined(USE_LOCAL_VAR) && !defined(USE_EA_VAR)
++#define USE_LOCAL_VAR 1		/* use variables declared locally */
++#define USE_EA_VAR    1		/* use variables on the host */
++
++#else
++#ifndef USE_LOCAL_VAR
++#define USE_LOCAL_VAR 0
++#endif
++
++#ifndef USE_EA_VAR
++#define USE_EA_VAR    0
++#endif
++#endif
++
++static int errors;
++
++#ifdef USE_PRINTF		/* print results via printf */
++#include <stdio.h>
++#include <stdlib.h>
++
++static int num_tests;
++
++#define TEST_SIZE(EXPR, EXPECTED)					\
++do {									\
++  char *msg;								\
++									\
++  if (sizeof (EXPR) != EXPECTED)					\
++    {									\
++      msg = ", FAIL";							\
++      errors++;								\
++    }									\
++  else									\
++    msg = "";								\
++									\
++  num_tests++;								\
++  printf ("sizeof %-20s = %2u, expected = %2u%s\n",			\
++	  #EXPR,							\
++	  (unsigned) sizeof (EXPR),					\
++	  (unsigned) EXPECTED,						\
++	  msg);								\
++} while (0)
++
++#define PRINT1(FMT)	  printf (FMT)
++#define PRINT2(FMT,A1)	  printf (FMT,A1)
++#define PRINT3(FMT,A1,A2) printf (FMT,A1,A2)
++
++#else	/* standalone */
++extern void abort (void);
++
++#define TEST_SIZE(EXPR, EXPECTED)					\
++do {									\
++  if (sizeof (EXPR) != EXPECTED)					\
++    abort ();								\
++} while (0)
++
++#define PRINT1(FMT)
++#define PRINT2(FMT,ARG)
++#define PRINT3(FMT,A1,A2)
++#endif
++
++/* 'local memory' hack to keep the same spacing.  */
++#define __lm
++
++#if USE_SIMPLE
++#if (LEVEL1 || LEVEL2 || LEVEL3)
++typedef __lm char *lm_ptr_t;
++typedef __ea char *ea_ptr_t;
++#endif
++
++#if LEVEL1
++#if USE_LOCAL_VAR
++__lm lm_ptr_t lm_ptr;
++__lm ea_ptr_t ea_ptr;
++#endif
++
++#if USE_EA_VAR
++__ea lm_ptr_t lm_ptr_ea;
++__ea ea_ptr_t ea_ptr_ea;
++#endif
++#endif
++
++#if (LEVEL2 || LEVEL3)
++typedef __lm lm_ptr_t *lm_lm_ptr_t;
++typedef __ea lm_ptr_t *ea_lm_ptr_t;
++typedef __lm ea_ptr_t *lm_ea_ptr_t;
++typedef __ea ea_ptr_t *ea_ea_ptr_t;
++#endif
++
++#if LEVEL2
++#if USE_LOCAL_VAR
++__lm lm_lm_ptr_t lm_lm_ptr;
++__lm ea_lm_ptr_t ea_lm_ptr;
++__lm lm_ea_ptr_t lm_ea_ptr;
++__lm ea_ea_ptr_t ea_ea_ptr;
++#endif
++
++#if USE_EA_VAR
++__ea lm_lm_ptr_t lm_lm_ptr_ea;
++__ea ea_lm_ptr_t ea_lm_ptr_ea;
++__ea lm_ea_ptr_t lm_ea_ptr_ea;
++__ea ea_ea_ptr_t ea_ea_ptr_ea;
++#endif
++#endif
++
++#if LEVEL3
++typedef __lm lm_lm_ptr_t *lm_lm_lm_ptr_t;
++typedef __ea lm_lm_ptr_t *ea_lm_lm_ptr_t;
++typedef __lm ea_lm_ptr_t *lm_ea_lm_ptr_t;
++typedef __ea ea_lm_ptr_t *ea_ea_lm_ptr_t;
++typedef __lm lm_ea_ptr_t *lm_lm_ea_ptr_t;
++typedef __ea lm_ea_ptr_t *ea_lm_ea_ptr_t;
++typedef __lm ea_ea_ptr_t *lm_ea_ea_ptr_t;
++typedef __ea ea_ea_ptr_t *ea_ea_ea_ptr_t;
++
++#if USE_LOCAL_VAR
++__lm lm_lm_lm_ptr_t lm_lm_lm_ptr;
++__lm ea_lm_lm_ptr_t ea_lm_lm_ptr;
++__lm lm_ea_lm_ptr_t lm_ea_lm_ptr;
++__lm ea_ea_lm_ptr_t ea_ea_lm_ptr;
++__lm lm_lm_ea_ptr_t lm_lm_ea_ptr;
++__lm ea_lm_ea_ptr_t ea_lm_ea_ptr;
++__lm lm_ea_ea_ptr_t lm_ea_ea_ptr;
++__lm ea_ea_ea_ptr_t ea_ea_ea_ptr;
++#endif
++
++#if USE_EA_VAR
++__ea lm_lm_lm_ptr_t lm_lm_lm_ptr_ea;
++__ea ea_lm_lm_ptr_t ea_lm_lm_ptr_ea;
++__ea lm_ea_lm_ptr_t lm_ea_lm_ptr_ea;
++__ea ea_ea_lm_ptr_t ea_ea_lm_ptr_ea;
++__ea lm_lm_ea_ptr_t lm_lm_ea_ptr_ea;
++__ea ea_lm_ea_ptr_t ea_lm_ea_ptr_ea;
++__ea lm_ea_ea_ptr_t lm_ea_ea_ptr_ea;
++__ea ea_ea_ea_ptr_t ea_ea_ea_ptr_ea;
++#endif
++#endif
++#endif
++
++#if USE_COMPLEX
++#if LEVEL1
++#if USE_LOCAL_VAR
++__lm char *__lm lm_cptr;
++__ea char *__lm ea_cptr;
++#endif
++
++#if USE_EA_VAR
++__lm char *__ea lm_cptr_ea;
++__ea char *__ea ea_cptr_ea;
++#endif
++#endif
++
++#if LEVEL2
++#if USE_LOCAL_VAR
++__lm char *__lm *__lm lm_lm_cptr;
++__lm char *__ea *__lm ea_lm_cptr;
++__ea char *__lm *__lm lm_ea_cptr;
++__ea char *__ea *__lm ea_ea_cptr;
++#endif
++
++#if USE_EA_VAR
++__lm char *__lm *__ea lm_lm_cptr_ea;
++__lm char *__ea *__ea ea_lm_cptr_ea;
++__ea char *__lm *__ea lm_ea_cptr_ea;
++__ea char *__ea *__ea ea_ea_cptr_ea;
++#endif
++#endif
++
++#if LEVEL3
++#if USE_LOCAL_VAR
++__lm char *__lm *__lm *__lm lm_lm_lm_cptr;
++__lm char *__ea *__lm *__lm lm_ea_lm_cptr;
++__ea char *__lm *__lm *__lm lm_lm_ea_cptr;
++__ea char *__ea *__lm *__lm lm_ea_ea_cptr;
++__lm char *__lm *__ea *__lm ea_lm_lm_cptr;
++__lm char *__ea *__ea *__lm ea_ea_lm_cptr;
++__ea char *__lm *__ea *__lm ea_lm_ea_cptr;
++__ea char *__ea *__ea *__lm ea_ea_ea_cptr;
++#endif
++
++#if USE_EA_VAR
++__lm char *__lm *__lm *__ea lm_lm_lm_cptr_ea;
++__lm char *__ea *__lm *__ea lm_ea_lm_cptr_ea;
++__ea char *__lm *__lm *__ea lm_lm_ea_cptr_ea;
++__ea char *__ea *__lm *__ea lm_ea_ea_cptr_ea;
++__lm char *__lm *__ea *__ea ea_lm_lm_cptr_ea;
++__lm char *__ea *__ea *__ea ea_ea_lm_cptr_ea;
++__ea char *__lm *__ea *__ea ea_lm_ea_cptr_ea;
++__ea char *__ea *__ea *__ea ea_ea_ea_cptr_ea;
++#endif
++#endif
++#endif
++
++int
++main ()
++{
++  PRINT2 ("LEVEL1        = %d\n", LEVEL1);
++  PRINT2 ("LEVEL2        = %d\n", LEVEL2);
++  PRINT2 ("LEVEL3        = %d\n", LEVEL3);
++  PRINT2 ("USE_SIMPLE    = %d\n", USE_SIMPLE);
++  PRINT2 ("USE_COMPLEX   = %d\n", USE_COMPLEX);
++  PRINT2 ("USE_LOCAL_VAR = %d\n", USE_LOCAL_VAR);
++  PRINT2 ("USE_EA_VAR    = %d\n", USE_EA_VAR);
++  PRINT1 ("\n");
++
++#if USE_SIMPLE
++#if LEVEL1
++#if USE_LOCAL_VAR
++  TEST_SIZE ( lm_ptr, 4);
++  TEST_SIZE (*lm_ptr, 1);
++  TEST_SIZE ( ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (*ea_ptr, 1);
++  PRINT1 ("\n");
++#endif
++
++#if USE_EA_VAR
++  TEST_SIZE ( lm_ptr_ea, 4);
++  TEST_SIZE (*lm_ptr_ea, 1);
++  TEST_SIZE ( ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (*ea_ptr_ea, 1);
++  PRINT1 ("\n");
++#endif
++#endif
++
++#if LEVEL2
++#if USE_LOCAL_VAR
++  TEST_SIZE (  lm_lm_ptr, 4);
++  TEST_SIZE ( *lm_lm_ptr, 4);
++  TEST_SIZE (**lm_lm_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  lm_ea_ptr, 4);
++  TEST_SIZE ( *lm_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (**lm_ea_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_lm_ptr, EA_PTRSIZE);
++  TEST_SIZE ( *ea_lm_ptr, 4);
++  TEST_SIZE (**ea_lm_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE ( *ea_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (**ea_ea_ptr, 1);
++  PRINT1 ("\n");
++#endif
++
++#if USE_EA_VAR
++  TEST_SIZE (  lm_lm_ptr_ea, 4);
++  TEST_SIZE ( *lm_lm_ptr_ea, 4);
++  TEST_SIZE (**lm_lm_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  lm_ea_ptr_ea, 4);
++  TEST_SIZE ( *lm_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (**lm_ea_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_lm_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( *ea_lm_ptr_ea, 4);
++  TEST_SIZE (**ea_lm_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( *ea_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (**ea_ea_ptr_ea, 1);
++  PRINT1 ("\n");
++#endif
++#endif
++
++#if LEVEL3
++#if USE_LOCAL_VAR
++  TEST_SIZE (   lm_lm_lm_ptr, 4);
++  TEST_SIZE (  *lm_lm_lm_ptr, 4);
++  TEST_SIZE ( **lm_lm_lm_ptr, 4);
++  TEST_SIZE (***lm_lm_lm_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_lm_ea_ptr, 4);
++  TEST_SIZE (  *lm_lm_ea_ptr, 4);
++  TEST_SIZE ( **lm_lm_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (***lm_lm_ea_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_lm_ptr, 4);
++  TEST_SIZE (  *lm_ea_lm_ptr, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_lm_ptr, 4);
++  TEST_SIZE (***lm_ea_lm_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_ea_ptr, 4);
++  TEST_SIZE (  *lm_ea_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (***lm_ea_ea_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_lm_ptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_lm_ptr, 4);
++  TEST_SIZE ( **ea_lm_lm_ptr, 4);
++  TEST_SIZE (***ea_lm_lm_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_ea_ptr, 4);
++  TEST_SIZE ( **ea_lm_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (***ea_lm_ea_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_lm_ptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_lm_ptr, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_lm_ptr, 4);
++  TEST_SIZE (***ea_ea_lm_ptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_ea_ptr, EA_PTRSIZE);
++  TEST_SIZE (***ea_ea_ea_ptr, 1);
++  PRINT1 ("\n");
++#endif
++
++#if USE_EA_VAR
++  TEST_SIZE (   lm_lm_lm_ptr_ea, 4);
++  TEST_SIZE (  *lm_lm_lm_ptr_ea, 4);
++  TEST_SIZE ( **lm_lm_lm_ptr_ea, 4);
++  TEST_SIZE (***lm_lm_lm_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_lm_ea_ptr_ea, 4);
++  TEST_SIZE (  *lm_lm_ea_ptr_ea, 4);
++  TEST_SIZE ( **lm_lm_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***lm_lm_ea_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_lm_ptr_ea, 4);
++  TEST_SIZE (  *lm_ea_lm_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_lm_ptr_ea, 4);
++  TEST_SIZE (***lm_ea_lm_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_ea_ptr_ea, 4);
++  TEST_SIZE (  *lm_ea_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***lm_ea_ea_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_lm_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_lm_ptr_ea, 4);
++  TEST_SIZE ( **ea_lm_lm_ptr_ea, 4);
++  TEST_SIZE (***ea_lm_lm_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_ea_ptr_ea, 4);
++  TEST_SIZE ( **ea_lm_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***ea_lm_ea_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_lm_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_lm_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_lm_ptr_ea, 4);
++  TEST_SIZE (***ea_ea_lm_ptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_ea_ptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***ea_ea_ea_ptr_ea, 1);
++  PRINT1 ("\n");
++#endif
++#endif
++#endif
++
++#if USE_COMPLEX
++#if LEVEL1
++#if USE_LOCAL_VAR
++  TEST_SIZE ( lm_cptr, 4);
++  TEST_SIZE (*lm_cptr, 1);
++  TEST_SIZE ( ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (*ea_cptr, 1);
++  PRINT1 ("\n");
++#endif
++
++#if USE_EA_VAR
++  TEST_SIZE ( lm_cptr_ea, 4);
++  TEST_SIZE (*lm_cptr_ea, 1);
++  TEST_SIZE ( ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (*ea_cptr_ea, 1);
++  PRINT1 ("\n");
++#endif
++#endif
++
++#if LEVEL2
++#if USE_LOCAL_VAR
++  TEST_SIZE (  lm_lm_cptr, 4);
++  TEST_SIZE ( *lm_lm_cptr, 4);
++  TEST_SIZE (**lm_lm_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  lm_ea_cptr, 4);
++  TEST_SIZE ( *lm_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (**lm_ea_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_lm_cptr, EA_PTRSIZE);
++  TEST_SIZE ( *ea_lm_cptr, 4);
++  TEST_SIZE (**ea_lm_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE ( *ea_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (**ea_ea_cptr, 1);
++  PRINT1 ("\n");
++#endif
++
++#if USE_EA_VAR
++  TEST_SIZE (  lm_lm_cptr_ea, 4);
++  TEST_SIZE ( *lm_lm_cptr_ea, 4);
++  TEST_SIZE (**lm_lm_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  lm_ea_cptr_ea, 4);
++  TEST_SIZE ( *lm_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (**lm_ea_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_lm_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( *ea_lm_cptr_ea, 4);
++  TEST_SIZE (**ea_lm_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (  ea_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( *ea_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (**ea_ea_cptr_ea, 1);
++  PRINT1 ("\n");
++#endif
++#endif
++
++#if LEVEL3
++#if USE_LOCAL_VAR
++  TEST_SIZE (   lm_lm_lm_cptr, 4);
++  TEST_SIZE (  *lm_lm_lm_cptr, 4);
++  TEST_SIZE ( **lm_lm_lm_cptr, 4);
++  TEST_SIZE (***lm_lm_lm_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_lm_ea_cptr, 4);
++  TEST_SIZE (  *lm_lm_ea_cptr, 4);
++  TEST_SIZE ( **lm_lm_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (***lm_lm_ea_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_lm_cptr, 4);
++  TEST_SIZE (  *lm_ea_lm_cptr, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_lm_cptr, 4);
++  TEST_SIZE (***lm_ea_lm_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_ea_cptr, 4);
++  TEST_SIZE (  *lm_ea_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (***lm_ea_ea_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_lm_cptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_lm_cptr, 4);
++  TEST_SIZE ( **ea_lm_lm_cptr, 4);
++  TEST_SIZE (***ea_lm_lm_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_ea_cptr, 4);
++  TEST_SIZE ( **ea_lm_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (***ea_lm_ea_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_lm_cptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_lm_cptr, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_lm_cptr, 4);
++  TEST_SIZE (***ea_ea_lm_cptr, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_ea_cptr, EA_PTRSIZE);
++  TEST_SIZE (***ea_ea_ea_cptr, 1);
++  PRINT1 ("\n");
++#endif
++
++#if USE_EA_VAR
++  TEST_SIZE (   lm_lm_lm_cptr_ea, 4);
++  TEST_SIZE (  *lm_lm_lm_cptr_ea, 4);
++  TEST_SIZE ( **lm_lm_lm_cptr_ea, 4);
++  TEST_SIZE (***lm_lm_lm_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_lm_ea_cptr_ea, 4);
++  TEST_SIZE (  *lm_lm_ea_cptr_ea, 4);
++  TEST_SIZE ( **lm_lm_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***lm_lm_ea_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_lm_cptr_ea, 4);
++  TEST_SIZE (  *lm_ea_lm_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_lm_cptr_ea, 4);
++  TEST_SIZE (***lm_ea_lm_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   lm_ea_ea_cptr_ea, 4);
++  TEST_SIZE (  *lm_ea_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **lm_ea_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***lm_ea_ea_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_lm_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_lm_cptr_ea, 4);
++  TEST_SIZE ( **ea_lm_lm_cptr_ea, 4);
++  TEST_SIZE (***ea_lm_lm_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_lm_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_lm_ea_cptr_ea, 4);
++  TEST_SIZE ( **ea_lm_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***ea_lm_ea_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_lm_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_lm_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_lm_cptr_ea, 4);
++  TEST_SIZE (***ea_ea_lm_cptr_ea, 1);
++  PRINT1 ("\n");
++
++  TEST_SIZE (   ea_ea_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (  *ea_ea_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE ( **ea_ea_ea_cptr_ea, EA_PTRSIZE);
++  TEST_SIZE (***ea_ea_ea_cptr_ea, 1);
++  PRINT1 ("\n");
++#endif
++#endif
++#endif
++
++  if (errors)
++    {
++      PRINT3 ("%d error(s), %d test(s)\n", errors, num_tests);
++      abort ();
++    }
++  else
++    PRINT2 ("No errors, %d test(s)\n", num_tests);
++
++  return 0;
++}
+diff -urNp gcc-4.4.4.orig/gcc/testsuite/g++.dg/ext/vector16.C gcc-4.4.4/gcc/testsuite/g++.dg/ext/vector16.C
+--- a/src/gcc/testsuite/g++.dg/ext/vector16.C	1970-01-01
++++ b/src/gcc/testsuite/g++.dg/ext/vector16.C	2010-06-30
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++#define vector __attribute__((vector_size(4*sizeof(int)) ))
++
++vector int a, b, c;
++
++
++/* Test that remainder works for vectors. */
++void f(void)
++{
++  a = b % c;
++}
+diff -urNp gcc-4.4.4.orig/gcc/tree.c gcc-4.4.4/gcc/tree.c
+--- a/src/gcc/tree.c	2010-06-30
++++ b/src/gcc/tree.c	2010-06-30
+@@ -1479,8 +1479,7 @@ integer_pow2p (const_tree expr)
+   if (TREE_CODE (expr) != INTEGER_CST)
+     return 0;
+ 
+-  prec = (POINTER_TYPE_P (TREE_TYPE (expr))
+-	  ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
++  prec = TYPE_PRECISION (TREE_TYPE (expr));
+   high = TREE_INT_CST_HIGH (expr);
+   low = TREE_INT_CST_LOW (expr);
+ 
+@@ -1544,9 +1543,7 @@ tree_log2 (const_tree expr)
+   if (TREE_CODE (expr) == COMPLEX_CST)
+     return tree_log2 (TREE_REALPART (expr));
+ 
+-  prec = (POINTER_TYPE_P (TREE_TYPE (expr))
+-	  ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
+-
++  prec = TYPE_PRECISION (TREE_TYPE (expr));
+   high = TREE_INT_CST_HIGH (expr);
+   low = TREE_INT_CST_LOW (expr);
+ 
+@@ -1582,9 +1579,7 @@ tree_floor_log2 (const_tree expr)
+   if (TREE_CODE (expr) == COMPLEX_CST)
+     return tree_log2 (TREE_REALPART (expr));
+ 
+-  prec = (POINTER_TYPE_P (TREE_TYPE (expr))
+-	  ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
+-
++  prec = TYPE_PRECISION (TREE_TYPE (expr));
+   high = TREE_INT_CST_HIGH (expr);
+   low = TREE_INT_CST_LOW (expr);
+ 
+@@ -4205,6 +4200,7 @@ set_type_quals (tree type, int type_qual
+   TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
+   TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
+   TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
++  TYPE_ADDR_SPACE (type) = DECODE_QUAL_ADDR_SPACE (type_quals);
+ }
+ 
+ /* Returns true iff CAND is equivalent to BASE with TYPE_QUALS.  */
+@@ -5566,7 +5562,10 @@ build_pointer_type_for_mode (tree to_typ
+ tree
+ build_pointer_type (tree to_type)
+ {
+-  return build_pointer_type_for_mode (to_type, ptr_mode, false);
++  addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
++					      : TYPE_ADDR_SPACE (to_type);
++  enum machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
++  return build_pointer_type_for_mode (to_type, pointer_mode, false);
+ }
+ 
+ /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE.  */
+@@ -5630,7 +5629,10 @@ build_reference_type_for_mode (tree to_t
+ tree
+ build_reference_type (tree to_type)
+ {
+-  return build_reference_type_for_mode (to_type, ptr_mode, false);
++  addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
++					      : TYPE_ADDR_SPACE (to_type);
++  enum machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
++  return build_reference_type_for_mode (to_type, pointer_mode, false);
+ }
+ 
+ /* Build a type that is compatible with t but has no cv quals anywhere
+@@ -5773,6 +5775,7 @@ build_array_type (tree elt_type, tree in
+   t = make_node (ARRAY_TYPE);
+   TREE_TYPE (t) = elt_type;
+   TYPE_DOMAIN (t) = index_type;
++  TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (elt_type);
+   
+   if (index_type == 0)
+     {
+@@ -8349,7 +8352,15 @@ signed_or_unsigned_type_for (int unsigne
+ {
+   tree t = type;
+   if (POINTER_TYPE_P (type))
+-    t = size_type_node;
++    {
++      /* If the pointer points to the normal address space, use the
++	 size_type_node.  Otherwise use an appropriate size for the pointer
++	 based on the named address space it points to.  */
++      if (!TYPE_ADDR_SPACE (TREE_TYPE (t)))
++	t = size_type_node;
++      else
++	return lang_hooks.types.type_for_size (TYPE_PRECISION (t), unsignedp);
++    }
+ 
+   if (!INTEGRAL_TYPE_P (t) || TYPE_UNSIGNED (t) == unsignedp)
+     return t;
+diff -urNp gcc-4.4.4.orig/gcc/tree-cfg.c gcc-4.4.4/gcc/tree-cfg.c
+--- a/src/gcc/tree-cfg.c	2010-06-30
++++ b/src/gcc/tree-cfg.c	2010-06-30
+@@ -3365,6 +3365,21 @@ verify_gimple_assign_unary (gimple stmt)
+ 	return false;
+       }
+ 
++    case ADDR_SPACE_CONVERT_EXPR:
++      {
++	if (!POINTER_TYPE_P (rhs1_type) || !POINTER_TYPE_P (lhs_type)
++	    || (TYPE_ADDR_SPACE (TREE_TYPE (rhs1_type))
++		== TYPE_ADDR_SPACE (TREE_TYPE (lhs_type))))
++	  {
++	    error ("invalid types in address space conversion");
++	    debug_generic_expr (lhs_type);
++	    debug_generic_expr (rhs1_type);
++	    return true;
++	  }
++
++	return false;
++      }
++
+     case FIXED_CONVERT_EXPR:
+       {
+ 	if (!valid_fixed_convert_types_p (lhs_type, rhs1_type)
+diff -urNp gcc-4.4.4.orig/gcc/tree.def gcc-4.4.4/gcc/tree.def
+--- a/src/gcc/tree.def	2009-02-20
++++ b/src/gcc/tree.def	2010-06-30
+@@ -763,6 +763,10 @@ DEFTREECODE (PAREN_EXPR, "paren_expr", t
+    represented by CONVERT_EXPR or NOP_EXPR nodes.  */
+ DEFTREECODE (CONVERT_EXPR, "convert_expr", tcc_unary, 1)
+ 
++/* Conversion of a pointer value to a pointer to a different
++   address space.  */
++DEFTREECODE (ADDR_SPACE_CONVERT_EXPR, "addr_space_convert_expr", tcc_unary, 1)
++
+ /* Conversion of a fixed-point value to an integer, a real, or a fixed-point
+    value.  Or conversion of a fixed-point value from an integer, a real, or
+    a fixed-point value.  */
+diff -urNp gcc-4.4.4.orig/gcc/tree-flow.h gcc-4.4.4/gcc/tree-flow.h
+--- a/src/gcc/tree-flow.h	2009-03-06
++++ b/src/gcc/tree-flow.h	2010-06-30
+@@ -1133,7 +1133,8 @@ extern void tree_check_data_deps (void);
+ /* In tree-ssa-loop-ivopts.c  */
+ bool expr_invariant_in_loop_p (struct loop *, tree);
+ bool stmt_invariant_in_loop_p (struct loop *, gimple);
+-bool multiplier_allowed_in_address_p (HOST_WIDE_INT, enum machine_mode);
++bool multiplier_allowed_in_address_p (HOST_WIDE_INT, enum machine_mode,
++				      addr_space_t);
+ unsigned multiply_by_cost (HOST_WIDE_INT, enum machine_mode, bool);
+ 
+ /* In tree-ssa-threadupdate.c.  */
+@@ -1166,8 +1167,8 @@ struct mem_address
+ 
+ struct affine_tree_combination;
+ tree create_mem_ref (gimple_stmt_iterator *, tree, 
+-		     struct affine_tree_combination *, bool);
+-rtx addr_for_mem_ref (struct mem_address *, bool);
++		     struct affine_tree_combination *, tree, bool);
++rtx addr_for_mem_ref (struct mem_address *, addr_space_t, bool);
+ void get_address_description (tree, struct mem_address *);
+ tree maybe_fold_tmr (tree);
+ 
+diff -urNp gcc-4.4.4.orig/gcc/tree.h gcc-4.4.4/gcc/tree.h
+--- a/src/gcc/tree.h	2010-06-30
++++ b/src/gcc/tree.h	2010-06-30
+@@ -384,7 +384,12 @@ struct tree_base GTY(())
+   unsigned packed_flag : 1;
+   unsigned user_align : 1;
+ 
+-  unsigned spare : 21;
++  unsigned spare : 13;
++
++  /* This field is only used with type nodes; the only reason it is present
++     in tree_base instead of tree_type is to save space.  The size of the
++     field must be large enough to hold addr_space_t values.  */
++  unsigned address_space : 8;
+ 
+   union tree_ann_d *ann;
+ };
+@@ -2182,6 +2187,9 @@ extern enum machine_mode vector_type_mod
+    the term.  */
+ #define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type.restrict_flag)
+ 
++/* The address space the type is in.  */
++#define TYPE_ADDR_SPACE(NODE) (TYPE_CHECK (NODE)->base.address_space)
++
+ /* There is a TYPE_QUAL value for each type qualifier.  They can be
+    combined by bitwise-or to form the complete set of qualifiers for a
+    type.  */
+@@ -2191,10 +2199,29 @@ extern enum machine_mode vector_type_mod
+ #define TYPE_QUAL_VOLATILE 0x2
+ #define TYPE_QUAL_RESTRICT 0x4
+ 
++/* Encode/decode the named memory support as part of the qualifier.  If more
++   than 8 qualifiers are added, these macros need to be adjusted.  */
++#define ENCODE_QUAL_ADDR_SPACE(NUM) ((NUM & 0xFF) << 8)
++#define DECODE_QUAL_ADDR_SPACE(X) (((X) >> 8) & 0xFF)
++
++/* Return all qualifiers except for the address space qualifiers.  */
++#define CLEAR_QUAL_ADDR_SPACE(X) ((X) & ~0xFF00)
++
++/* Only keep the address space out of the qualifiers and discard the other
++   qualifiers.  */
++#define KEEP_QUAL_ADDR_SPACE(X) ((X) & 0xFF00)
++
+ /* The set of type qualifiers for this type.  */
+ #define TYPE_QUALS(NODE)					\
+   ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST)			\
+    | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE)		\
++   | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT)		\
++   | (ENCODE_QUAL_ADDR_SPACE (TYPE_ADDR_SPACE (NODE))))
++
++/* The same as TYPE_QUALS without the address space qualifications.  */
++#define TYPE_QUALS_NO_ADDR_SPACE(NODE)				\
++  ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST)			\
++   | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE)		\
+    | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT))
+ 
+ /* These flags are available for each language front end to use internally.  */
+diff -urNp gcc-4.4.4.orig/gcc/tree-inline.c gcc-4.4.4/gcc/tree-inline.c
+--- a/src/gcc/tree-inline.c	2010-02-08
++++ b/src/gcc/tree-inline.c	2010-06-30
+@@ -2765,6 +2765,7 @@ estimate_operator_cost (enum tree_code c
+     case MINUS_EXPR:
+     case MULT_EXPR:
+ 
++    case ADDR_SPACE_CONVERT_EXPR:
+     case FIXED_CONVERT_EXPR:
+     case FIX_TRUNC_EXPR:
+ 
+diff -urNp gcc-4.4.4.orig/gcc/tree-pretty-print.c gcc-4.4.4/gcc/tree-pretty-print.c
+--- a/src/gcc/tree-pretty-print.c	2009-02-18
++++ b/src/gcc/tree-pretty-print.c	2010-06-30
+@@ -527,6 +527,13 @@ dump_generic_node (pretty_printer *buffe
+ 	else if (quals & TYPE_QUAL_RESTRICT)
+ 	  pp_string (buffer, "restrict ");
+ 
++	if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
++	  {
++	    pp_string (buffer, "<address-space-");
++	    pp_decimal_int (buffer, TYPE_ADDR_SPACE (node));
++	    pp_string (buffer, "> ");
++	  }
++
+ 	tclass = TREE_CODE_CLASS (TREE_CODE (node));
+ 
+ 	if (tclass == tcc_declaration)
+@@ -603,6 +610,13 @@ dump_generic_node (pretty_printer *buffe
+ 	  if (quals & TYPE_QUAL_RESTRICT)
+ 	    pp_string (buffer, " restrict");
+ 
++	  if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (node)))
++	    {
++	      pp_string (buffer, " <address-space-");
++	      pp_decimal_int (buffer, TYPE_ADDR_SPACE (node));
++	      pp_string (buffer, ">");
++	    }
++
+ 	  if (TYPE_REF_CAN_ALIAS_ALL (node))
+ 	    pp_string (buffer, " {ref-all}");
+ 	}
+@@ -1383,6 +1397,7 @@ dump_generic_node (pretty_printer *buffe
+       NIY;
+       break;
+ 
++    case ADDR_SPACE_CONVERT_EXPR:
+     case FIXED_CONVERT_EXPR:
+     case FIX_TRUNC_EXPR:
+     case FLOAT_EXPR:
+diff -urNp gcc-4.4.4.orig/gcc/tree-ssa-address.c gcc-4.4.4/gcc/tree-ssa-address.c
+--- a/src/gcc/tree-ssa-address.c	2010-04-08
++++ b/src/gcc/tree-ssa-address.c	2010-06-30
+@@ -42,6 +42,7 @@ along with GCC; see the file COPYING3.  
+ #include "expr.h"
+ #include "ggc.h"
+ #include "tree-affine.h"
++#include "target.h"
+ 
+ /* TODO -- handling of symbols (according to Richard Hendersons
+    comments, http://gcc.gnu.org/ml/gcc-patches/2005-04/msg00949.html):
+@@ -70,33 +71,39 @@ along with GCC; see the file COPYING3.  
+ /* A "template" for memory address, used to determine whether the address is
+    valid for mode.  */
+ 
+-struct mem_addr_template GTY (())
++typedef struct mem_addr_template GTY (())
+ {
+   rtx ref;			/* The template.  */
+   rtx * GTY ((skip)) step_p;	/* The point in template where the step should be
+ 				   filled in.  */
+   rtx * GTY ((skip)) off_p;	/* The point in template where the offset should
+ 				   be filled in.  */
+-};
++} mem_addr_template;
+ 
+-/* The templates.  Each of the five bits of the index corresponds to one
+-   component of TARGET_MEM_REF being present, see TEMPL_IDX.  */
++DEF_VEC_O (mem_addr_template);
++DEF_VEC_ALLOC_O (mem_addr_template, gc);
+ 
+-static GTY (()) struct mem_addr_template templates[32];
++/* The templates.  Each of the low five bits of the index corresponds to one
++   component of TARGET_MEM_REF being present, while the high bits identify
++   the address space.  See TEMPL_IDX.  */
+ 
+-#define TEMPL_IDX(SYMBOL, BASE, INDEX, STEP, OFFSET) \
+-  (((SYMBOL != 0) << 4) \
++static GTY(()) VEC (mem_addr_template, gc) *mem_addr_template_list;
++
++#define TEMPL_IDX(AS, SYMBOL, BASE, INDEX, STEP, OFFSET) \
++  (((int) (AS) << 5) \
++   | ((SYMBOL != 0) << 4) \
+    | ((BASE != 0) << 3) \
+    | ((INDEX != 0) << 2) \
+    | ((STEP != 0) << 1) \
+    | (OFFSET != 0))
+ 
+ /* Stores address for memory reference with parameters SYMBOL, BASE, INDEX,
+-   STEP and OFFSET to *ADDR.  Stores pointers to where step is placed to
+-   *STEP_P and offset to *OFFSET_P.  */
++   STEP and OFFSET to *ADDR using address mode ADDRESS_MODE.  Stores pointers
++   to where step is placed to *STEP_P and offset to *OFFSET_P.  */
+ 
+ static void
+-gen_addr_rtx (rtx symbol, rtx base, rtx index, rtx step, rtx offset,
++gen_addr_rtx (enum machine_mode address_mode,
++	      rtx symbol, rtx base, rtx index, rtx step, rtx offset,
+ 	      rtx *addr, rtx **step_p, rtx **offset_p)
+ {
+   rtx act_elem;
+@@ -112,7 +119,7 @@ gen_addr_rtx (rtx symbol, rtx base, rtx 
+       act_elem = index;
+       if (step)
+ 	{
+-	  act_elem = gen_rtx_MULT (Pmode, act_elem, step);
++	  act_elem = gen_rtx_MULT (address_mode, act_elem, step);
+ 
+ 	  if (step_p)
+ 	    *step_p = &XEXP (act_elem, 1);
+@@ -124,7 +131,7 @@ gen_addr_rtx (rtx symbol, rtx base, rtx 
+   if (base)
+     {
+       if (*addr)
+-	*addr = simplify_gen_binary (PLUS, Pmode, base, *addr);
++	*addr = simplify_gen_binary (PLUS, address_mode, base, *addr);
+       else
+ 	*addr = base;
+     }
+@@ -134,7 +141,7 @@ gen_addr_rtx (rtx symbol, rtx base, rtx 
+       act_elem = symbol;
+       if (offset)
+ 	{
+-	  act_elem = gen_rtx_PLUS (Pmode, act_elem, offset);
++	  act_elem = gen_rtx_PLUS (address_mode, act_elem, offset);
+ 
+ 	  if (offset_p)
+ 	    *offset_p = &XEXP (act_elem, 1);
+@@ -142,11 +149,11 @@ gen_addr_rtx (rtx symbol, rtx base, rtx 
+ 	  if (GET_CODE (symbol) == SYMBOL_REF
+ 	      || GET_CODE (symbol) == LABEL_REF
+ 	      || GET_CODE (symbol) == CONST)
+-	    act_elem = gen_rtx_CONST (Pmode, act_elem);
++	    act_elem = gen_rtx_CONST (address_mode, act_elem);
+ 	}
+ 
+       if (*addr)
+-	*addr = gen_rtx_PLUS (Pmode, *addr, act_elem);
++	*addr = gen_rtx_PLUS (address_mode, *addr, act_elem);
+       else
+ 	*addr = act_elem;
+     }
+@@ -154,7 +161,7 @@ gen_addr_rtx (rtx symbol, rtx base, rtx 
+     {
+       if (*addr)
+ 	{
+-	  *addr = gen_rtx_PLUS (Pmode, *addr, offset);
++	  *addr = gen_rtx_PLUS (address_mode, *addr, offset);
+ 	  if (offset_p)
+ 	    *offset_p = &XEXP (*addr, 1);
+ 	}
+@@ -170,55 +177,64 @@ gen_addr_rtx (rtx symbol, rtx base, rtx 
+     *addr = const0_rtx;
+ }
+ 
+-/* Returns address for TARGET_MEM_REF with parameters given by ADDR.
++/* Returns address for TARGET_MEM_REF with parameters given by ADDR
++   in address space AS.
+    If REALLY_EXPAND is false, just make fake registers instead 
+    of really expanding the operands, and perform the expansion in-place
+    by using one of the "templates".  */
+ 
+ rtx
+-addr_for_mem_ref (struct mem_address *addr, bool really_expand)
++addr_for_mem_ref (struct mem_address *addr, addr_space_t as,
++		  bool really_expand)
+ {
++  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
+   rtx address, sym, bse, idx, st, off;
+-  static bool templates_initialized = false;
+   struct mem_addr_template *templ;
+ 
+   if (addr->step && !integer_onep (addr->step))
+     st = immed_double_const (TREE_INT_CST_LOW (addr->step),
+-			     TREE_INT_CST_HIGH (addr->step), Pmode);
++			     TREE_INT_CST_HIGH (addr->step), address_mode);
+   else
+     st = NULL_RTX;
+ 
+   if (addr->offset && !integer_zerop (addr->offset))
+     off = immed_double_const (TREE_INT_CST_LOW (addr->offset),
+-			      TREE_INT_CST_HIGH (addr->offset), Pmode);
++			      TREE_INT_CST_HIGH (addr->offset), address_mode);
+   else
+     off = NULL_RTX;
+ 
+   if (!really_expand)
+     {
++      unsigned int templ_index
++	= TEMPL_IDX (as, addr->symbol, addr->base, addr->index, st, off);
++
++      if (templ_index
++	  >= VEC_length (mem_addr_template, mem_addr_template_list))
++	VEC_safe_grow_cleared (mem_addr_template, gc, mem_addr_template_list,
++			       templ_index + 1);
++
+       /* Reuse the templates for addresses, so that we do not waste memory.  */
+-      if (!templates_initialized)
++      templ = VEC_index (mem_addr_template, mem_addr_template_list, templ_index);
++      if (!templ->ref)
+ 	{
+-	  unsigned i;
+-
+-	  templates_initialized = true;
+-	  sym = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup ("test_symbol"));
+-	  bse = gen_raw_REG (Pmode, LAST_VIRTUAL_REGISTER + 1);
+-	  idx = gen_raw_REG (Pmode, LAST_VIRTUAL_REGISTER + 2);
+-
+-	  for (i = 0; i < 32; i++)
+-	    gen_addr_rtx ((i & 16 ? sym : NULL_RTX),
+-			  (i & 8 ? bse : NULL_RTX),
+-			  (i & 4 ? idx : NULL_RTX),
+-			  (i & 2 ? const0_rtx : NULL_RTX),
+-			  (i & 1 ? const0_rtx : NULL_RTX),
+-			  &templates[i].ref,
+-			  &templates[i].step_p,
+-			  &templates[i].off_p);
++	  sym = (addr->symbol ?
++		 gen_rtx_SYMBOL_REF (address_mode, ggc_strdup ("test_symbol"))
++		 : NULL_RTX);
++	  bse = (addr->base ?
++		 gen_raw_REG (address_mode, LAST_VIRTUAL_REGISTER + 1)
++		 : NULL_RTX);
++	  idx = (addr->index ?
++		 gen_raw_REG (address_mode, LAST_VIRTUAL_REGISTER + 2)
++		 : NULL_RTX);
++
++	  gen_addr_rtx (address_mode, sym, bse, idx,
++			st? const0_rtx : NULL_RTX,
++			off? const0_rtx : NULL_RTX,
++			&templ->ref,
++			&templ->step_p,
++			&templ->off_p);
+ 	}
+ 
+-      templ = templates + TEMPL_IDX (addr->symbol, addr->base, addr->index,
+-				     st, off);
+       if (st)
+ 	*templ->step_p = st;
+       if (off)
+@@ -230,16 +246,16 @@ addr_for_mem_ref (struct mem_address *ad
+   /* Otherwise really expand the expressions.  */
+   sym = (addr->symbol
+ 	 ? expand_expr (build_addr (addr->symbol, current_function_decl),
+-			NULL_RTX, Pmode, EXPAND_NORMAL)
++			NULL_RTX, address_mode, EXPAND_NORMAL)
+ 	 : NULL_RTX);
+   bse = (addr->base
+-	 ? expand_expr (addr->base, NULL_RTX, Pmode, EXPAND_NORMAL)
++	 ? expand_expr (addr->base, NULL_RTX, address_mode, EXPAND_NORMAL)
+ 	 : NULL_RTX);
+   idx = (addr->index
+-	 ? expand_expr (addr->index, NULL_RTX, Pmode, EXPAND_NORMAL)
++	 ? expand_expr (addr->index, NULL_RTX, address_mode, EXPAND_NORMAL)
+ 	 : NULL_RTX);
+ 
+-  gen_addr_rtx (sym, bse, idx, st, off, &address, NULL, NULL);
++  gen_addr_rtx (address_mode, sym, bse, idx, st, off, &address, NULL, NULL);
+   return address;
+ }
+ 
+@@ -306,15 +322,16 @@ tree_mem_ref_addr (tree type, tree mem_r
+    ADDR is valid on the current target.  */
+ 
+ static bool
+-valid_mem_ref_p (enum machine_mode mode, struct mem_address *addr)
++valid_mem_ref_p (enum machine_mode mode, addr_space_t as,
++		 struct mem_address *addr)
+ {
+   rtx address;
+ 
+-  address = addr_for_mem_ref (addr, false);
++  address = addr_for_mem_ref (addr, as, false);
+   if (!address)
+     return false;
+ 
+-  return memory_address_p (mode, address);
++  return memory_address_addr_space_p (mode, address, as);
+ }
+ 
+ /* Checks whether a TARGET_MEM_REF with type TYPE and parameters given by ADDR
+@@ -324,7 +341,7 @@ valid_mem_ref_p (enum machine_mode mode,
+ static tree
+ create_mem_ref_raw (tree type, struct mem_address *addr)
+ {
+-  if (!valid_mem_ref_p (TYPE_MODE (type), addr))
++  if (!valid_mem_ref_p (TYPE_MODE (type), TYPE_ADDR_SPACE (type), addr))
+     return NULL_TREE;
+ 
+   if (addr->step && integer_onep (addr->step))
+@@ -376,6 +393,39 @@ move_fixed_address_to_symbol (struct mem
+   aff_combination_remove_elt (addr, i);
+ }
+ 
++/* If ADDR contains an instance of BASE_HINT, move it to PARTS->base.  */
++
++static void
++move_hint_to_base (tree type, struct mem_address *parts, tree base_hint,
++		   aff_tree *addr)
++{
++  unsigned i;
++  tree val = NULL_TREE;
++  int qual;
++
++  for (i = 0; i < addr->n; i++)
++    {
++      if (!double_int_one_p (addr->elts[i].coef))
++	continue;
++
++      val = addr->elts[i].val;
++      if (operand_equal_p (val, base_hint, 0))
++	break;
++    }
++
++  if (i == addr->n)
++    return;
++
++  /* Cast value to appropriate pointer type.  We cannot use a pointer
++     to TYPE directly, as the back-end will assume registers of pointer
++     type are aligned, and just the base itself may not actually be.
++     We use void pointer to the type's address space instead.  */
++  qual = ENCODE_QUAL_ADDR_SPACE (TYPE_ADDR_SPACE (type));
++  type = build_qualified_type (void_type_node, qual);
++  parts->base = fold_convert (build_pointer_type (type), val);
++  aff_combination_remove_elt (addr, i);
++}
++
+ /* If ADDR contains an address of a dereferenced pointer, move it to
+    PARTS->base.  */
+ 
+@@ -437,9 +487,11 @@ add_to_parts (struct mem_address *parts,
+    element(s) to PARTS.  */
+ 
+ static void
+-most_expensive_mult_to_index (struct mem_address *parts, aff_tree *addr,
+-			      bool speed)
++most_expensive_mult_to_index (tree type, struct mem_address *parts,
++			      aff_tree *addr, bool speed)
+ {
++  addr_space_t as = TYPE_ADDR_SPACE (type);
++  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
+   HOST_WIDE_INT coef;
+   double_int best_mult, amult, amult_neg;
+   unsigned best_mult_cost = 0, acost;
+@@ -453,14 +505,12 @@ most_expensive_mult_to_index (struct mem
+       if (!double_int_fits_in_shwi_p (addr->elts[i].coef))
+ 	continue;
+ 
+-      /* FIXME: Should use the correct memory mode rather than Pmode.  */
+-
+       coef = double_int_to_shwi (addr->elts[i].coef);
+       if (coef == 1
+-	  || !multiplier_allowed_in_address_p (coef, Pmode))
++	  || !multiplier_allowed_in_address_p (coef, TYPE_MODE (type), as))
+ 	continue;
+ 
+-      acost = multiply_by_cost (coef, Pmode, speed);
++      acost = multiply_by_cost (coef, address_mode, speed);
+ 
+       if (acost > best_mult_cost)
+ 	{
+@@ -503,8 +553,10 @@ most_expensive_mult_to_index (struct mem
+   parts->step = double_int_to_tree (sizetype, best_mult);
+ }
+ 
+-/* Splits address ADDR into PARTS.
+-   
++/* Splits address ADDR for a memory access of type TYPE into PARTS.
++   If BASE_HINT is non-NULL, it specifies an SSA name to be used
++   preferentially as base of the reference.
++
+    TODO -- be more clever about the distribution of the elements of ADDR
+    to PARTS.  Some architectures do not support anything but single
+    register in address, possibly with a small integer offset; while
+@@ -513,7 +565,8 @@ most_expensive_mult_to_index (struct mem
+    addressing modes is useless.  */
+ 
+ static void
+-addr_to_parts (aff_tree *addr, struct mem_address *parts, bool speed)
++addr_to_parts (tree type, aff_tree *addr, tree base_hint,
++	       struct mem_address *parts, bool speed)
+ {
+   tree part;
+   unsigned i;
+@@ -533,12 +586,14 @@ addr_to_parts (aff_tree *addr, struct me
+ 
+   /* First move the most expensive feasible multiplication
+      to index.  */
+-  most_expensive_mult_to_index (parts, addr, speed);
++  most_expensive_mult_to_index (type, parts, addr, speed);
+ 
+   /* Try to find a base of the reference.  Since at the moment
+      there is no reliable way how to distinguish between pointer and its
+      offset, this is just a guess.  */
+-  if (!parts->symbol)
++  if (!parts->symbol && base_hint)
++    move_hint_to_base (type, parts, base_hint, addr);
++  if (!parts->symbol && !parts->base)
+     move_pointer_to_base (parts, addr);
+ 
+   /* Then try to process the remaining elements.  */
+@@ -575,13 +630,13 @@ gimplify_mem_ref_parts (gimple_stmt_iter
+ 
+ tree
+ create_mem_ref (gimple_stmt_iterator *gsi, tree type, aff_tree *addr,
+-		bool speed)
++		tree base_hint, bool speed)
+ {
+   tree mem_ref, tmp;
+   tree atype;
+   struct mem_address parts;
+ 
+-  addr_to_parts (addr, &parts, speed);
++  addr_to_parts (type, addr, base_hint, &parts, speed);
+   gimplify_mem_ref_parts (gsi, &parts);
+   mem_ref = create_mem_ref_raw (type, &parts);
+   if (mem_ref)
+diff -urNp gcc-4.4.4.orig/gcc/tree-ssa.c gcc-4.4.4/gcc/tree-ssa.c
+--- a/src/gcc/tree-ssa.c	2009-08-03
++++ b/src/gcc/tree-ssa.c	2010-06-30
+@@ -1075,6 +1075,11 @@ useless_type_conversion_p_1 (tree outer_
+   if (POINTER_TYPE_P (inner_type)
+       && POINTER_TYPE_P (outer_type))
+     {
++      /* Do not lose casts between pointers to different address spaces.  */
++      if (TYPE_ADDR_SPACE (TREE_TYPE (outer_type))
++	  != TYPE_ADDR_SPACE (TREE_TYPE (inner_type)))
++	return false;
++
+       /* Do not lose casts to restrict qualified pointers.  */
+       if ((TYPE_RESTRICT (outer_type)
+ 	   != TYPE_RESTRICT (inner_type))
+@@ -1235,7 +1240,14 @@ useless_type_conversion_p (tree outer_ty
+   if (POINTER_TYPE_P (inner_type)
+       && POINTER_TYPE_P (outer_type)
+       && TREE_CODE (TREE_TYPE (outer_type)) == VOID_TYPE)
+-    return true;
++    {
++      /* Do not lose casts between pointers to different address spaces.  */
++      if (TYPE_ADDR_SPACE (TREE_TYPE (outer_type))
++	  != TYPE_ADDR_SPACE (TREE_TYPE (inner_type)))
++	return false;
++
++      return true;
++    }
+ 
+   return useless_type_conversion_p_1 (outer_type, inner_type);
+ }
+diff -urNp gcc-4.4.4.orig/gcc/tree-ssa-loop-ivopts.c gcc-4.4.4/gcc/tree-ssa-loop-ivopts.c
+--- a/src/gcc/tree-ssa-loop-ivopts.c	2010-06-30
++++ b/src/gcc/tree-ssa-loop-ivopts.c	2010-06-30
+@@ -2575,21 +2575,25 @@ seq_cost (rtx seq, bool speed)
+ static rtx
+ produce_memory_decl_rtl (tree obj, int *regno)
+ {
++  addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (obj));
++  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
+   rtx x;
+   
+   gcc_assert (obj);
+   if (TREE_STATIC (obj) || DECL_EXTERNAL (obj))
+     {
+       const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (obj));
+-      x = gen_rtx_SYMBOL_REF (Pmode, name);
++      x = gen_rtx_SYMBOL_REF (address_mode, name);
+       SET_SYMBOL_REF_DECL (x, obj);
+       x = gen_rtx_MEM (DECL_MODE (obj), x);
++      set_mem_addr_space (x, as);
+       targetm.encode_section_info (obj, x, true);
+     }
+   else
+     {
+-      x = gen_raw_REG (Pmode, (*regno)++);
++      x = gen_raw_REG (address_mode, (*regno)++);
+       x = gen_rtx_MEM (DECL_MODE (obj), x);
++      set_mem_addr_space (x, as);
+     }
+ 
+   return x;
+@@ -2677,7 +2681,8 @@ computation_cost (tree expr, bool speed)
+ 
+   cost = seq_cost (seq, speed);
+   if (MEM_P (rslt))
+-    cost += address_cost (XEXP (rslt, 0), TYPE_MODE (type), speed);
++    cost += address_cost (XEXP (rslt, 0), TYPE_MODE (type),
++			  TYPE_ADDR_SPACE (type), speed);
+ 
+   return cost;
+ }
+@@ -2953,124 +2958,153 @@ multiply_by_cost (HOST_WIDE_INT cst, enu
+ }
+ 
+ /* Returns true if multiplying by RATIO is allowed in an address.  Test the
+-   validity for a memory reference accessing memory of mode MODE.  */
++   validity for a memory reference accessing memory of mode MODE in
++   address space AS.  */
++
++DEF_VEC_P (sbitmap);
++DEF_VEC_ALLOC_P (sbitmap, heap);
+ 
+ bool
+-multiplier_allowed_in_address_p (HOST_WIDE_INT ratio, enum machine_mode mode)
++multiplier_allowed_in_address_p (HOST_WIDE_INT ratio, enum machine_mode mode,
++				 addr_space_t as)
+ {
+ #define MAX_RATIO 128
+-  static sbitmap valid_mult[MAX_MACHINE_MODE];
+-  
+-  if (!valid_mult[mode])
++  unsigned int data_index = (int) as * MAX_MACHINE_MODE + (int) mode;
++  static VEC (sbitmap, heap) *valid_mult_list;
++  sbitmap valid_mult;
++
++  if (data_index >= VEC_length (sbitmap, valid_mult_list))
++    VEC_safe_grow_cleared (sbitmap, heap, valid_mult_list, data_index + 1);
++
++  valid_mult = VEC_index (sbitmap, valid_mult_list, data_index);
++  if (!valid_mult)
+     {
+-      rtx reg1 = gen_raw_REG (Pmode, LAST_VIRTUAL_REGISTER + 1);
++      enum machine_mode address_mode = targetm.addr_space.address_mode (as);
++      rtx reg1 = gen_raw_REG (address_mode, LAST_VIRTUAL_REGISTER + 1);
+       rtx addr;
+       HOST_WIDE_INT i;
+ 
+-      valid_mult[mode] = sbitmap_alloc (2 * MAX_RATIO + 1);
+-      sbitmap_zero (valid_mult[mode]);
+-      addr = gen_rtx_fmt_ee (MULT, Pmode, reg1, NULL_RTX);
++      valid_mult = sbitmap_alloc (2 * MAX_RATIO + 1);
++      sbitmap_zero (valid_mult);
++      addr = gen_rtx_fmt_ee (MULT, address_mode, reg1, NULL_RTX);
+       for (i = -MAX_RATIO; i <= MAX_RATIO; i++)
+ 	{
+-	  XEXP (addr, 1) = gen_int_mode (i, Pmode);
+-	  if (memory_address_p (mode, addr))
+-	    SET_BIT (valid_mult[mode], i + MAX_RATIO);
++	  XEXP (addr, 1) = gen_int_mode (i, address_mode);
++	  if (memory_address_addr_space_p (mode, addr, as))
++	    SET_BIT (valid_mult, i + MAX_RATIO);
+ 	}
+ 
+       if (dump_file && (dump_flags & TDF_DETAILS))
+ 	{
+ 	  fprintf (dump_file, "  allowed multipliers:");
+ 	  for (i = -MAX_RATIO; i <= MAX_RATIO; i++)
+-	    if (TEST_BIT (valid_mult[mode], i + MAX_RATIO))
++	    if (TEST_BIT (valid_mult, i + MAX_RATIO))
+ 	      fprintf (dump_file, " %d", (int) i);
+ 	  fprintf (dump_file, "\n");
+ 	  fprintf (dump_file, "\n");
+ 	}
++
++      VEC_replace (sbitmap, valid_mult_list, data_index, valid_mult);
+     }
+ 
+   if (ratio > MAX_RATIO || ratio < -MAX_RATIO)
+     return false;
+ 
+-  return TEST_BIT (valid_mult[mode], ratio + MAX_RATIO);
++  return TEST_BIT (valid_mult, ratio + MAX_RATIO);
+ }
+ 
+ /* Returns cost of address in shape symbol + var + OFFSET + RATIO * index.
+    If SYMBOL_PRESENT is false, symbol is omitted.  If VAR_PRESENT is false,
+    variable is omitted.  Compute the cost for a memory reference that accesses
+-   a memory location of mode MEM_MODE.
++   a memory location of mode MEM_MODE in address space AS.
+ 
+    TODO -- there must be some better way.  This all is quite crude.  */
+ 
++typedef struct
++{
++  HOST_WIDE_INT min_offset, max_offset;
++  unsigned costs[2][2][2][2];
++} *address_cost_data;
++
++DEF_VEC_P (address_cost_data);
++DEF_VEC_ALLOC_P (address_cost_data, heap);
++
+ static comp_cost
+ get_address_cost (bool symbol_present, bool var_present,
+ 		  unsigned HOST_WIDE_INT offset, HOST_WIDE_INT ratio,
+-		  enum machine_mode mem_mode,
++		  enum machine_mode mem_mode, addr_space_t as,
+ 		  bool speed)
+ {
+-  static bool initialized[MAX_MACHINE_MODE];
+-  static HOST_WIDE_INT rat[MAX_MACHINE_MODE], off[MAX_MACHINE_MODE];
+-  static HOST_WIDE_INT min_offset[MAX_MACHINE_MODE], max_offset[MAX_MACHINE_MODE];
+-  static unsigned costs[MAX_MACHINE_MODE][2][2][2][2];
++  enum machine_mode address_mode = targetm.addr_space.address_mode (as);
++  static VEC(address_cost_data, heap) *address_cost_data_list;
++  unsigned int data_index = (int) as * MAX_MACHINE_MODE + (int) mem_mode;
++  address_cost_data data;
+   unsigned cost, acost, complexity;
+   bool offset_p, ratio_p;
+   HOST_WIDE_INT s_offset;
+   unsigned HOST_WIDE_INT mask;
+   unsigned bits;
+ 
+-  if (!initialized[mem_mode])
++  if (data_index >= VEC_length (address_cost_data, address_cost_data_list))
++    VEC_safe_grow_cleared (address_cost_data, heap, address_cost_data_list,
++			   data_index + 1);
++
++  data = VEC_index (address_cost_data, address_cost_data_list, data_index);
++  if (!data)
+     {
+       HOST_WIDE_INT i;
+       HOST_WIDE_INT start = BIGGEST_ALIGNMENT / BITS_PER_UNIT;
++      HOST_WIDE_INT rat, off;
+       int old_cse_not_expected;
+       unsigned sym_p, var_p, off_p, rat_p, add_c;
+       rtx seq, addr, base;
+       rtx reg0, reg1;
+ 
+-      initialized[mem_mode] = true;
++      data = (address_cost_data) xcalloc (1, sizeof (*data));
+ 
+-      reg1 = gen_raw_REG (Pmode, LAST_VIRTUAL_REGISTER + 1);
++      reg1 = gen_raw_REG (address_mode, LAST_VIRTUAL_REGISTER + 1);
+ 
+-      addr = gen_rtx_fmt_ee (PLUS, Pmode, reg1, NULL_RTX);
++      addr = gen_rtx_fmt_ee (PLUS, address_mode, reg1, NULL_RTX);
+       for (i = start; i <= 1 << 20; i <<= 1)
+ 	{
+-	  XEXP (addr, 1) = gen_int_mode (i, Pmode);
+-	  if (!memory_address_p (mem_mode, addr))
++	  XEXP (addr, 1) = gen_int_mode (i, address_mode);
++	  if (!memory_address_addr_space_p (mem_mode, addr, as))
+ 	    break;
+ 	}
+-      max_offset[mem_mode] = i == start ? 0 : i >> 1;
+-      off[mem_mode] = max_offset[mem_mode];
++      data->max_offset = i == start ? 0 : i >> 1;
++      off = data->max_offset;
+ 
+       for (i = start; i <= 1 << 20; i <<= 1)
+ 	{
+-	  XEXP (addr, 1) = gen_int_mode (-i, Pmode);
+-	  if (!memory_address_p (mem_mode, addr))
++	  XEXP (addr, 1) = gen_int_mode (-i, address_mode);
++	  if (!memory_address_addr_space_p (mem_mode, addr, as))
+ 	    break;
+ 	}
+-      min_offset[mem_mode] = i == start ? 0 : -(i >> 1);
++      data->min_offset = i == start ? 0 : -(i >> 1);
+ 
+       if (dump_file && (dump_flags & TDF_DETAILS))
+ 	{
+ 	  fprintf (dump_file, "get_address_cost:\n");
+ 	  fprintf (dump_file, "  min offset %s %d\n",
+ 		   GET_MODE_NAME (mem_mode),
+-		   (int) min_offset[mem_mode]);
++		   (int) data->min_offset);
+ 	  fprintf (dump_file, "  max offset %s %d\n",
+ 		   GET_MODE_NAME (mem_mode),
+-		   (int) max_offset[mem_mode]);
++		   (int) data->max_offset);
+ 	}
+ 
+-      rat[mem_mode] = 1;
++      rat = 1;
+       for (i = 2; i <= MAX_RATIO; i++)
+-	if (multiplier_allowed_in_address_p (i, mem_mode))
++	if (multiplier_allowed_in_address_p (i, mem_mode, as))
+ 	  {
+-	    rat[mem_mode] = i;
++	    rat = i;
+ 	    break;
+ 	  }
+ 
+       /* Compute the cost of various addressing modes.  */
+       acost = 0;
+-      reg0 = gen_raw_REG (Pmode, LAST_VIRTUAL_REGISTER + 1);
+-      reg1 = gen_raw_REG (Pmode, LAST_VIRTUAL_REGISTER + 2);
++      reg0 = gen_raw_REG (address_mode, LAST_VIRTUAL_REGISTER + 1);
++      reg1 = gen_raw_REG (address_mode, LAST_VIRTUAL_REGISTER + 2);
+ 
+       for (i = 0; i < 16; i++)
+ 	{
+@@ -3081,15 +3115,15 @@ get_address_cost (bool symbol_present, b
+ 
+ 	  addr = reg0;
+ 	  if (rat_p)
+-	    addr = gen_rtx_fmt_ee (MULT, Pmode, addr,
+-				   gen_int_mode (rat[mem_mode], Pmode));
++	    addr = gen_rtx_fmt_ee (MULT, address_mode, addr,
++				   gen_int_mode (rat, address_mode));
+ 
+ 	  if (var_p)
+-	    addr = gen_rtx_fmt_ee (PLUS, Pmode, addr, reg1);
++	    addr = gen_rtx_fmt_ee (PLUS, address_mode, addr, reg1);
+ 
+ 	  if (sym_p)
+ 	    {
+-	      base = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (""));
++	      base = gen_rtx_SYMBOL_REF (address_mode, ggc_strdup (""));
+ 	      /* ??? We can run into trouble with some backends by presenting
+ 		 it with symbols which haven't been properly passed through
+ 		 targetm.encode_section_info.  By setting the local bit, we
+@@ -3097,36 +3131,35 @@ get_address_cost (bool symbol_present, b
+ 	      SYMBOL_REF_FLAGS (base) = SYMBOL_FLAG_LOCAL;
+ 
+ 	      if (off_p)
+-		base = gen_rtx_fmt_e (CONST, Pmode,
+-				      gen_rtx_fmt_ee (PLUS, Pmode,
+-						      base,
+-						      gen_int_mode (off[mem_mode],
+-								    Pmode)));
++		base = gen_rtx_fmt_e (CONST, address_mode,
++				      gen_rtx_fmt_ee
++					(PLUS, address_mode, base,
++					 gen_int_mode (off, address_mode)));
+ 	    }
+ 	  else if (off_p)
+-	    base = gen_int_mode (off[mem_mode], Pmode);
++	    base = gen_int_mode (off, address_mode);
+ 	  else
+ 	    base = NULL_RTX;
+     
+ 	  if (base)
+-	    addr = gen_rtx_fmt_ee (PLUS, Pmode, addr, base);
++	    addr = gen_rtx_fmt_ee (PLUS, address_mode, addr, base);
+   
+ 	  start_sequence ();
+ 	  /* To avoid splitting addressing modes, pretend that no cse will
+ 	     follow.  */
+ 	  old_cse_not_expected = cse_not_expected;
+ 	  cse_not_expected = true;
+-	  addr = memory_address (mem_mode, addr);
++	  addr = memory_address_addr_space (mem_mode, addr, as);
+ 	  cse_not_expected = old_cse_not_expected;
+ 	  seq = get_insns ();
+ 	  end_sequence ();
+ 
+ 	  acost = seq_cost (seq, speed);
+-	  acost += address_cost (addr, mem_mode, speed);
++	  acost += address_cost (addr, mem_mode, as, speed);
+ 
+ 	  if (!acost)
+ 	    acost = 1;
+-	  costs[mem_mode][sym_p][var_p][off_p][rat_p] = acost;
++	  data->costs[sym_p][var_p][off_p][rat_p] = acost;
+ 	}
+ 
+       /* On some targets, it is quite expensive to load symbol to a register,
+@@ -3141,19 +3174,19 @@ get_address_cost (bool symbol_present, b
+ 	 If VAR_PRESENT is true, try whether the mode with
+ 	 SYMBOL_PRESENT = false is cheaper even with cost of addition, and
+ 	 if this is the case, use it.  */
+-      add_c = add_cost (Pmode, speed);
++      add_c = add_cost (address_mode, speed);
+       for (i = 0; i < 8; i++)
+ 	{
+ 	  var_p = i & 1;
+ 	  off_p = (i >> 1) & 1;
+ 	  rat_p = (i >> 2) & 1;
+ 
+-	  acost = costs[mem_mode][0][1][off_p][rat_p] + 1;
++	  acost = data->costs[0][1][off_p][rat_p] + 1;
+ 	  if (var_p)
+ 	    acost += add_c;
+ 
+-	  if (acost < costs[mem_mode][1][var_p][off_p][rat_p])
+-	    costs[mem_mode][1][var_p][off_p][rat_p] = acost;
++	  if (acost < data->costs[1][var_p][off_p][rat_p])
++	    data->costs[1][var_p][off_p][rat_p] = acost;
+ 	}
+   
+       if (dump_file && (dump_flags & TDF_DETAILS))
+@@ -3177,14 +3210,17 @@ get_address_cost (bool symbol_present, b
+ 	      if (rat_p)
+ 		fprintf (dump_file, "rat * ");
+ 
+-	      acost = costs[mem_mode][sym_p][var_p][off_p][rat_p];
++	      acost = data->costs[sym_p][var_p][off_p][rat_p];
+ 	      fprintf (dump_file, "index costs %d\n", acost);
+ 	    }
+ 	  fprintf (dump_file, "\n");
+ 	}
++
++      VEC_replace (address_cost_data, address_cost_data_list,
++		   data_index, data);
+     }
+ 
+-  bits = GET_MODE_BITSIZE (Pmode);
++  bits = GET_MODE_BITSIZE (address_mode);
+   mask = ~(~(unsigned HOST_WIDE_INT) 0 << (bits - 1) << 1);
+   offset &= mask;
+   if ((offset >> (bits - 1) & 1))
+@@ -3193,18 +3229,18 @@ get_address_cost (bool symbol_present, b
+ 
+   cost = 0;
+   offset_p = (s_offset != 0
+-	      && min_offset[mem_mode] <= s_offset
+-	      && s_offset <= max_offset[mem_mode]);
++	      && data->min_offset <= s_offset
++	      && s_offset <= data->max_offset);
+   ratio_p = (ratio != 1
+-	     && multiplier_allowed_in_address_p (ratio, mem_mode));
++	     && multiplier_allowed_in_address_p (ratio, mem_mode, as));
+ 
+   if (ratio != 1 && !ratio_p)
+-    cost += multiply_by_cost (ratio, Pmode, speed);
++    cost += multiply_by_cost (ratio, address_mode, speed);
+ 
+   if (s_offset && !offset_p && !symbol_present)
+-    cost += add_cost (Pmode, speed);
++    cost += add_cost (address_mode, speed);
+ 
+-  acost = costs[mem_mode][symbol_present][var_present][offset_p][ratio_p];
++  acost = data->costs[symbol_present][var_present][offset_p][ratio_p];
+   complexity = (symbol_present != 0) + (var_present != 0) + offset_p + ratio_p;
+   return new_cost (cost + acost, complexity);
+ }
+@@ -3421,6 +3457,7 @@ ptr_difference_cost (struct ivopts_data 
+ 		     unsigned HOST_WIDE_INT *offset, bitmap *depends_on)
+ {
+   HOST_WIDE_INT diff = 0;
++  enum machine_mode mode = TYPE_MODE (TREE_TYPE (e1));
+   comp_cost cost;
+   bool speed = optimize_loop_for_speed_p (data->current_loop);
+ 
+@@ -3443,7 +3480,7 @@ ptr_difference_cost (struct ivopts_data 
+   
+   cost = force_var_cost (data, e1, depends_on);
+   cost = add_costs (cost, force_var_cost (data, e2, depends_on));
+-  cost.cost += add_cost (Pmode, speed);
++  cost.cost += add_cost (mode, speed);
+ 
+   return cost;
+ }
+@@ -3619,7 +3656,9 @@ get_computation_cost_at (struct ivopts_d
+   if (address_p)
+     return add_costs (cost, get_address_cost (symbol_present, var_present,
+ 				offset, ratio,
+-				TYPE_MODE (TREE_TYPE (*use->op_p)), speed));
++				TYPE_MODE (TREE_TYPE (*use->op_p)),
++				TYPE_ADDR_SPACE (TREE_TYPE (*use->op_p)),
++				speed));
+ 
+   /* Otherwise estimate the costs for computing the expression.  */
+   aratio = ratio > 0 ? ratio : -ratio;
+@@ -5309,6 +5348,7 @@ rewrite_use_address (struct ivopts_data 
+ {
+   aff_tree aff;
+   gimple_stmt_iterator bsi = gsi_for_stmt (use->stmt);
++  tree base_hint = NULL_TREE;
+   tree ref;
+   bool ok;
+ 
+@@ -5316,7 +5356,22 @@ rewrite_use_address (struct ivopts_data 
+   gcc_assert (ok);
+   unshare_aff_combination (&aff);
+ 
+-  ref = create_mem_ref (&bsi, TREE_TYPE (*use->op_p), &aff, data->speed);
++  /* To avoid undefined overflow problems, all IV candidates use unsigned
++     integer types.  The drawback is that this makes it impossible for
++     create_mem_ref to distinguish an IV that is based on a memory object
++     from one that represents simply an offset.
++
++     To work around this problem, we pass a hint to create_mem_ref that
++     indicates which variable (if any) in aff is an IV based on a memory
++     object.  Note that we only consider the candidate.  If this is not
++     based on an object, the base of the reference is in some subexpression
++     of the use -- but these will use pointer types, so they are recognized
++     by the create_mem_ref heuristics anyway.  */
++  if (cand->iv->base_object)
++    base_hint = var_at_stmt (data->current_loop, cand, use->stmt);
++
++  ref = create_mem_ref (&bsi, TREE_TYPE (*use->op_p), &aff, base_hint,
++			data->speed);
+   copy_ref_info (ref, *use->op_p);
+   *use->op_p = ref;
+ }
+diff -urNp gcc-4.4.4.orig/gcc/varasm.c gcc-4.4.4/gcc/varasm.c
+--- a/src/gcc/varasm.c	2010-06-30
++++ b/src/gcc/varasm.c	2010-06-30
+@@ -1189,11 +1189,17 @@ align_variable (tree decl, bool dont_out
+ static section *
+ get_variable_section (tree decl, bool prefer_noswitch_p)
+ {
++  addr_space_t as = ADDR_SPACE_GENERIC;
+   int reloc;
+ 
+-  /* If the decl has been given an explicit section name, then it
+-     isn't common, and shouldn't be handled as such.  */
+-  if (DECL_COMMON (decl) && DECL_SECTION_NAME (decl) == NULL)
++  if (TREE_TYPE (decl) != error_mark_node)
++    as = TYPE_ADDR_SPACE (TREE_TYPE (decl));
++
++  /* If the decl has been given an explicit section name, or it resides
++     in a non-generic address space, then it isn't common, and shouldn't
++     be handled as such.  */
++  if (DECL_COMMON (decl) && DECL_SECTION_NAME (decl) == NULL
++      && ADDR_SPACE_GENERIC_P (as))
+     {
+       if (DECL_THREAD_LOCAL_P (decl))
+ 	return tls_comm_section;
+@@ -1217,7 +1223,8 @@ get_variable_section (tree decl, bool pr
+   if (IN_NAMED_SECTION (decl))
+     return get_named_section (decl, NULL, reloc);
+ 
+-  if (!DECL_THREAD_LOCAL_P (decl)
++  if (ADDR_SPACE_GENERIC_P (as)
++      && !DECL_THREAD_LOCAL_P (decl)
+       && !(prefer_noswitch_p && targetm.have_switchable_bss_sections)
+       && bss_initializer_p (decl))
+     {
+@@ -1461,7 +1468,15 @@ make_decl_rtl (tree decl)
+   if (use_object_blocks_p () && use_blocks_for_decl_p (decl))
+     x = create_block_symbol (name, get_block_for_decl (decl), -1);
+   else
+-    x = gen_rtx_SYMBOL_REF (Pmode, name);
++    {
++      enum machine_mode address_mode = Pmode;
++      if (TREE_TYPE (decl) != error_mark_node)
++	{
++	  addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (decl));
++	  address_mode = targetm.addr_space.address_mode (as);
++	}
++      x = gen_rtx_SYMBOL_REF (address_mode, name);
++    }
+   SYMBOL_REF_WEAK (x) = DECL_WEAK (decl);
+   SET_SYMBOL_REF_DECL (x, decl);
+ 
+@@ -4373,7 +4388,7 @@ initializer_constant_valid_p_1 (tree val
+       if (cache && cache[0] == value)
+ 	return cache[1];
+       if (! INTEGRAL_TYPE_P (endtype)
+-	  || TYPE_PRECISION (endtype) >= POINTER_SIZE)
++	  || TYPE_PRECISION (endtype) >= TYPE_PRECISION (TREE_TYPE (value)))
+ 	{
+ 	  tree ncache[4] = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE };
+ 	  tree valid0
+@@ -4408,7 +4423,7 @@ initializer_constant_valid_p_1 (tree val
+       if (cache && cache[0] == value)
+ 	return cache[1];
+       if (! INTEGRAL_TYPE_P (endtype)
+-	  || TYPE_PRECISION (endtype) >= POINTER_SIZE)
++	  || TYPE_PRECISION (endtype) >= TYPE_PRECISION (TREE_TYPE (value)))
+ 	{
+ 	  tree ncache[4] = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE };
+ 	  tree valid0
+@@ -4503,7 +4518,9 @@ output_constant (tree exp, unsigned HOST
+      resolving it.  */
+   if (TREE_CODE (exp) == NOP_EXPR
+       && POINTER_TYPE_P (TREE_TYPE (exp))
+-      && targetm.valid_pointer_mode (TYPE_MODE (TREE_TYPE (exp))))
++      && targetm.addr_space.valid_pointer_mode
++	   (TYPE_MODE (TREE_TYPE (exp)),
++	    TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)))))
+     {
+       tree saved_type = TREE_TYPE (exp);
+ 
+@@ -4511,7 +4528,9 @@ output_constant (tree exp, unsigned HOST
+ 	 pointer modes.  */
+       while (TREE_CODE (exp) == NOP_EXPR
+ 	     && POINTER_TYPE_P (TREE_TYPE (exp))
+-	     && targetm.valid_pointer_mode (TYPE_MODE (TREE_TYPE (exp))))
++	     && targetm.addr_space.valid_pointer_mode
++		  (TYPE_MODE (TREE_TYPE (exp)),
++		   TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)))))
+ 	exp = TREE_OPERAND (exp, 0);
+ 
+       /* If what we're left with is the address of something, we can
+@@ -6437,14 +6456,6 @@ default_binds_local_p_1 (const_tree exp,
+   return local_p;
+ }
+ 
+-/* Determine whether or not a pointer mode is valid. Assume defaults
+-   of ptr_mode or Pmode - can be overridden.  */
+-bool
+-default_valid_pointer_mode (enum machine_mode mode)
+-{
+-  return (mode == ptr_mode || mode == Pmode);
+-}
+-
+ /* Default function to output code that will globalize a label.  A
+    target must define GLOBAL_ASM_OP or provide its own function to
+    globalize a label.  */
+diff -urNp gcc-4.4.4.orig/libgfortran/configure.ac gcc-4.4.4/libgfortran/configure.ac
+--- a/src/libgfortran/configure.ac	2010-06-30
++++ b/src/libgfortran/configure.ac	2010-06-30
+@@ -149,6 +149,27 @@ LDFLAGS="$save_LDFLAGS"
+ AC_MSG_RESULT($gfortran_use_symver)
+ AM_CONDITIONAL(LIBGFOR_USE_SYMVER, [test "x$gfortran_use_symver" = xyes])
+ 
++# Figure out whether the compiler supports "-ffunction-sections -fdata-sections",
++# similarly to how libstdc++ does it
++ac_test_CFLAGS="${CFLAGS+set}"
++ac_save_CFLAGS="$CFLAGS"
++
++# Check for -ffunction-sections -fdata-sections
++AC_MSG_CHECKING([for gcc that supports -ffunction-sections -fdata-sections])
++CFLAGS='-Werror -ffunction-sections -fdata-sections'
++AC_TRY_COMPILE(, [int foo;], [ac_fdsections=yes], [ac_fdsections=no])
++if test "$ac_test_CFLAGS" = set; then
++  CFLAGS="$ac_save_CFLAGS"
++else
++  # this is the suspicious part
++  CFLAGS=""
++fi
++if test x"$ac_fdsections" = x"yes"; then
++  SECTION_FLAGS='-ffunction-sections -fdata-sections'
++fi
++AC_MSG_RESULT($ac_fdsections)
++AC_SUBST(SECTION_FLAGS)
++
+ # Find other programs we need.
+ AC_CHECK_TOOL(AS, as)
+ AC_CHECK_TOOL(AR, ar)
+diff -urNp gcc-4.4.4.orig/libgfortran/Makefile.am gcc-4.4.4/libgfortran/Makefile.am
+--- a/src/libgfortran/Makefile.am	2009-06-03
++++ b/src/libgfortran/Makefile.am	2010-06-30
+@@ -33,6 +33,10 @@ AM_CPPFLAGS = -iquote$(srcdir)/io -I$(sr
+ # Fortran rules for complex multiplication and division
+ AM_CFLAGS += -fcx-fortran-rules
+ 
++# Use -ffunction-sections -fdata-sections if supported by the compiler
++SECTION_FLAGS = @SECTION_FLAGS@
++AM_CFLAGS += $(SECTION_FLAGS)
++
+ gfor_io_src= \
+ io/close.c \
+ io/file_pos.c \
+diff -urNp gcc-4.4.4.orig/libgfortran/Makefile.in gcc-4.4.4/libgfortran/Makefile.in
+--- a/src/libgfortran/Makefile.in	2010-06-30
++++ b/src/libgfortran/Makefile.in	2010-06-30
+@@ -300,7 +300,7 @@ AMDEP_TRUE = @AMDEP_TRUE@
+ AMTAR = @AMTAR@
+ 
+ # Fortran rules for complex multiplication and division
+-AM_CFLAGS = @AM_CFLAGS@ -fcx-fortran-rules
++AM_CFLAGS = @AM_CFLAGS@ -fcx-fortran-rules $(SECTION_FLAGS)
+ AM_FCFLAGS = @AM_FCFLAGS@
+ AR = @AR@
+ AS = @AS@
+@@ -360,6 +360,9 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PATH_SEPARATOR = @PATH_SEPARATOR@
+ RANLIB = @RANLIB@
++
++# Use -ffunction-sections -fdata-sections if supported by the compiler
++SECTION_FLAGS = @SECTION_FLAGS@
+ SED = @SED@
+ SET_MAKE = @SET_MAKE@
+ SHELL = @SHELL@
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/kbsd-gnu.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/kbsd-gnu.diff
@@ -0,0 +1,77 @@
+# DP: GNU/k*BSD support
+# Author: Robert Millan <rmh@aybabtu.com>
+# Status: Not yet submitted
+
+---
+ gcc/config.gcc                 |    2 +-
+ gcc/config/i386/kfreebsd-gnu.h |   22 ++++++++++++++++++++++
+ gcc/config/i386/linux64.h      |    5 ++++-
+ 3 files changed, 27 insertions(+), 2 deletions(-)
+
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -1115,7 +1115,7 @@ x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu)
+ 	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h \
+ 		 i386/x86-64.h i386/linux64.h"
+ 	case ${target} in
+-	x86_64-*-kfreebsd*-gnu) tm_file="${tm_file} kfreebsd-gnu.h" ;;
++	x86_64-*-kfreebsd*-gnu) tm_file="${tm_file} kfreebsd-gnu.h i386/kfreebsd-gnu.h" ;;
+ 	x86_64-*-knetbsd*-gnu) tm_file="${tm_file} knetbsd-gnu.h" ;;
+ 	esac
+ 	tmake_file="${tmake_file} i386/t-linux64 i386/t-crtstuff i386/t-crtpc i386/t-crtfm t-dfprules"
+--- a/src/gcc/config/i386/kfreebsd-gnu.h
++++ b/src/gcc/config/i386/kfreebsd-gnu.h
+@@ -19,7 +19,29 @@ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
++#ifdef GLIBC_DYNAMIC_LINKER32
++#undef GLIBC_DYNAMIC_LINKER32
++#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
++#endif
++
++#ifdef GLIBC_DYNAMIC_LINKER64
++#undef GLIBC_DYNAMIC_LINKER64
++#define GLIBC_DYNAMIC_LINKER64 "/lib/ld-kfreebsd-x86-64.so.1"
++#endif
++
+ #undef LINK_EMULATION
+ #define LINK_EMULATION "elf_i386_fbsd"
++
++#ifdef LINK_EMULATION32
++#undef LINK_EMULATION32
++#define LINK_EMULATION32 LINK_EMULATION
++#endif
++
++#ifdef LINK_EMULATION64
++#undef LINK_EMULATION64
++#define LINK_EMULATION64 "elf_x86_64_fbsd"
++#endif
++
+ #undef REG_NAME
+ #define REG_NAME(reg) sc_ ## reg
++
+--- a/src/gcc/config/i386/linux64.h
++++ b/src/gcc/config/i386/linux64.h
+@@ -53,8 +53,11 @@ along with GCC; see the file COPYING3.  If not see
+    When the -shared link option is used a final link is not being
+    done.  */
+ 
++/* These macros may be overridden in k*bsd-gnu.h and i386/k*bsd-gnu.h. */
+ #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
+ #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
++#define LINK_EMULATION32 "elf_i386"
++#define LINK_EMULATION64 "elf_x86_64"
+ 
+ #undef ASM_SPEC
+ #define ASM_SPEC "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} \
+@@ -70,7 +73,7 @@ along with GCC; see the file COPYING3.  If not see
+ #endif
+ 
+ #undef	LINK_SPEC
+-#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} --hash-style=both \
++#define LINK_SPEC "%{" SPEC_64 ":-m " LINK_EMULATION64 "} %{" SPEC_32 ":-m " LINK_EMULATION32 "} --hash-style=both \
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
+
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/arm-dynamic-linker.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/arm-dynamic-linker.diff
@@ -0,0 +1,27 @@
+# DP: For ARM hard float, set the dynamic linker to
+# DP: /lib/arm-linux-gnueabihf/ld-linux.so.3.
+
+--- a/src/gcc/config/arm/linux-elf.h
++++ b/src/gcc/config/arm/linux-elf.h
+@@ -62,7 +62,8 @@
+ 
+ #define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"
+ 
+-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#define LINUX_DYNAMIC_LINKER_SF "/lib/ld-linux.so.3"
++#define LINUX_DYNAMIC_LINKER_HF "/lib/arm-linux-gnueabihf/ld-linux.so.3"
+ 
+ #define LINUX_TARGET_LINK_SPEC  "%{h*} %{version:-v} \
+    %{b} \
+@@ -70,7 +71,10 @@
+    %{shared:-shared} \
+    %{symbolic:-Bsymbolic} \
+    %{rdynamic:-export-dynamic} \
+-   %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "} \
++   %{msoft-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
++   %{mfloat-abi=soft*:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
++   %{mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
++   %{mfloat-abi=hard:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
+    -X \
+    --hash-style=both \
+    %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-bug564232.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-bug564232.diff
@@ -0,0 +1,11 @@
+--- a/src/gcc/ada/gsocket.h
++++ b/src/gcc/ada/gsocket.h
+@@ -225,7 +225,7 @@
+ # define Need_Netdb_Buffer 0
+ #endif
+ 
+-#if defined (__FreeBSD__) || defined (__vxworks) || defined(__rtems__)
++#if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__vxworks) || defined(__rtems__)
+ # define Has_Sockaddr_Len 1
+ #else
+ # define Has_Sockaddr_Len 0
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libjava-rpath.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libjava-rpath.diff
@@ -0,0 +1,29 @@
+# DP: - Link ecjx with -rpath $(dbexecdir)
+
+---
+ libjava/Makefile.am |    2 +-
+ libjava/Makefile.in |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/src/libjava/Makefile.am
++++ b/src/libjava/Makefile.am
+@@ -888,7 +888,7 @@ else !ENABLE_SHARED
+ ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR) -fbootclasspath=$(BOOTCLASSPATH)
+ endif !ENABLE_SHARED
+ 
+-ecjx_LDADD = -L$(here)/.libs $(extra_ldflags)
++ecjx_LDADD = -L$(here)/.libs $(extra_ldflags) -rpath $(dbexecdir)
+ ecjx_DEPENDENCIES = libgcj.la libgcj.spec
+ if USE_LIBGCJ_BC
+ ecjx_DEPENDENCIES += libgcj_bc.la
+--- a/src/libjava/Makefile.in
++++ b/src/libjava/Makefile.in
+@@ -8360,7 +8360,7 @@ ECJX_BASE_FLAGS = -findirect-dispatch \
+ @NATIVE_FALSE@ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR)
+ @NATIVE_FALSE@ecjx_LDADD = 
+ @NATIVE_TRUE@ecjx_LDADD = -L$(here)/.libs $(extra_ldflags) \
+-@NATIVE_TRUE@	$(am__append_21)
++@NATIVE_TRUE@	$(am__append_21) -rpath $(dbexecdir)
+ @NATIVE_FALSE@ecjx_DEPENDENCIES = 
+ @NATIVE_TRUE@ecjx_DEPENDENCIES = libgcj.la libgcj.spec \
+ @NATIVE_TRUE@	$(am__append_20)
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/arm-gcc-gcse.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/arm-gcc-gcse.diff
@@ -0,0 +1,54 @@
+# DP: ARM: Don't copy uncopyable instructions in gcse.c (backport from the trunk).
+
+gcc/
+
+2009-05-27  Julian Brown  <julian@codesourcery.com>
+
+	* gcse.c (target.h): Include.
+	(can_assign_to_reg_without_clobbers_p): Check that the target allows
+	copy of argument to a pseudo register.
+
+--- a/src/gcc/gcse.c.orig	2009-04-27 13:55:13.000000000 +0200
++++ b/src/gcc/gcse.c	2009-12-09 11:12:05.000000000 +0100
+@@ -172,6 +172,7 @@
+ #include "hashtab.h"
+ #include "df.h"
+ #include "dbgcnt.h"
++#include "target.h"
+ 
+ /* Propagate flow information through back edges and thus enable PRE's
+    moving loop invariant calculations out of loops.
+@@ -1203,7 +1204,11 @@
+ 
+ static GTY(()) rtx test_insn;
+ 
+-/* Return true if we can assign X to a pseudo register.  */
++/* Return true if we can assign X to a pseudo register.
++
++   Additionally, if the target requires it, check that the resulting insn
++   can be copied.  If it cannot, this means that X is special and probably
++   has hidden side-effects we don't want to mess with.  */
+ 
+ static bool
+ can_assign_to_reg_p (rtx x)
+@@ -1233,8 +1238,18 @@
+      valid.  */
+   PUT_MODE (SET_DEST (PATTERN (test_insn)), GET_MODE (x));
+   SET_SRC (PATTERN (test_insn)) = x;
+-  return ((icode = recog (PATTERN (test_insn), test_insn, &num_clobbers)) >= 0
+-	  && (num_clobbers == 0 || ! added_clobbers_hard_reg_p (icode)));
++  
++  icode = recog (PATTERN (test_insn), test_insn, &num_clobbers);
++  if (icode < 0)
++    return false;
++  
++  if (num_clobbers > 0 && added_clobbers_hard_reg_p (icode))
++    return false;
++  
++  if (targetm.cannot_copy_insn_p && targetm.cannot_copy_insn_p (test_insn))
++    return false;
++  
++  return true;
+ }
+ 
+ /* Return nonzero if the operands of expression X are unchanged from the
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcc-linaro.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcc-linaro.diff
@@ -0,0 +1,88946 @@
+# DP: Changes for the Linaro 4.4-2011.02-0 release.
+
+--- a/src/ChangeLog.linaro
++++ b/src/ChangeLog.linaro
+@@ -0,0 +1,8691 @@
++2011-02-04  Andrew Stubbs  <ams@codesourcery.com>
++
++	GCC Linaro 4.4-2011.02-0 released.
++
++	gcc/
++	* LINARO-VERSION: Update.
++
++2011-01-28  Ramana Radhakrishnan  <ramana.radhakrishnan@linaro.org>
++
++	LP: #709329
++	Backport from FSF trunk
++	2010-07-03  Jie Zhang  <jie@codesourcery.com>
++
++	* config/arm/arm.c (arm_attr_length_move_neon): New.
++	* config/arm/arm-protos.h (arm_attr_length_move_neon): Declare.
++	* config/arm/neon.md (define_mode_attr V_slen): Remove.
++	(neon_mov<mode> for VSTRUCT): Use arm_attr_length_move_neon
++	to compute length attribute.
++
++2011-01-07  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* LINARO-VERSION: Bump version.
++
++2011-01-07  Andrew Stubbs  <ams@codesourcery.com>
++
++	GCC Linaro 4.4-2011.01-0 released.
++
++	gcc/
++	* LINARO-VERSION: Update.
++
++2010-12-21  Ulrich Weigand  <uweigand@de.ibm.com>
++
++	LP: #617384
++	Backport from mainline:
++
++	* config/arm/arm.c (require_pic_register): Set INSN_LOCATOR for all
++	instructions injected into the prologue to prologue_locator.
++
++2010-12-10  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* REVISION: Bump version.
++
++2010-12-10  Andrew Stubbs  <ams@codesourcery.com>
++
++	GCC Linaro 4.4-2010.12-0 released.
++
++	gcc/
++	* REVISION: Update.
++
++2010-12-03  Julian Brown  <julian@codesourcery.com>
++
++	Fix lp629671
++
++	gcc/
++	* config/arm/arm.h (REG_CLASS_CONTENTS): Remove soft frame pointer
++	from CORE_REGS and GENERAL_REGS classes.
++	* config/arm/arm.md (*thumb1_movsi_insn): Ignore all parts of final
++	constraint for register preferencing.
++
++2010-10-12  Michael Hope  <michael.hope@linaro.org>
++
++	gcc/
++	* REVISION: Bump version.
++
++2010-10-12  Michael Hope  <michael.hope@linaro.org>
++
++	GCC Linaro 4.4-2010.10-0 released.
++
++	gcc/
++	* REVISION: Update.
++
++2010-10-04  Michael Hope  <michael.hope@linaro.org>
++
++	Merged gcc_4_4_5_release from upstream (r164870)
++
++2010-09-30  Yao Qi  <yao@codesourcery.com>
++
++	Fix LP:#647597
++	gcc/
++	* c-common.c (fname_decl): Update decl's source location.
++
++2010-09-24  Yao Qi  <yao@codesourcery.com>
++
++	Backport from FSF to fix ICE found in LP:635409:
++	     
++	2010-07-07  Bernd Schmidt  <bernds@codesourcery.com>
++	
++	gcc/ 
++	PR rtl-optimization/44787
++	* config/arm/arm.md (arith_shiftsi): Allow stack pointer in operand 2.
++	* config/arm/thumb2.md (thumb2_arith_shiftsi): Likewise.
++	
++2010-09-10  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* REVISION: Bump version.
++
++2010-09-10  Andrew Stubbs  <ams@codesourcery.com>
++
++	GCC Linaro 4.4-2010.09-1 released.
++
++	gcc/
++	* REVISION: Update.
++
++2010-09-10  Ulrich Weigand  <uweigand@de.ibm.com>
++
++	Backport from mainline:
++	2010-09-09  Vladimir Makarov  <vmakarov@redhat.com>
++
++	PR middle-end/45312
++	* reload1.c (merge_assigned_reloads): Remove.
++	(reload_as_needed): Don't call it.
++
++2010-09-10  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++        * REVISION: Bump version.
++
++2010-09-10  Andrew Stubbs  <ams@codesourcery.com>
++
++	GCC Linaro 4.4-2010.09-0 released.
++
++	gcc/
++	* REVISION: Update.
++
++2010-08-07  Andrew Stubbs  <ams@codesourcery.com>
++
++	Merge from FSF GCC 4.4 branch (pre 4.4.5).
++
++2010-08-06  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* REVISION: Bump version.
++
++2010-08-06  Andrew Stubbs  <ams@codesourcery.com>
++
++	GCC Linaro 4.4-2010.08-0 released.
++
++	gcc/
++	* REVISION: Update.
++
++2010-08-06  Yao Qi  <yao@codesourcery.com>
++
++	LP: #602285
++	gcc/testsuite
++	* gcc.dg/tree-ssa/predcom-3.c: Append param max-unroll-times=3
++	in dg-options to fix test failure.
++	* gcc.dg/tree-ssa/predcom-4.c: Likewise.
++	* gcc.dg/tree-ssa/predcom-5.c: Likewise.
++
++2010-08-03  Michael Hope  <michael.hope@linaro.org>
++
++	LP: #605080
++	* libjava/classpath/lib/gnu/javax/print/ipp/IppPrintService.class: Re-generated
++	after updating the corresponding .java file
++	* libjava/classpath/lib/gnu/javax/print/ipp/IppRequest$RequestWriter.class: Likewise
++	* libjava/classpath/lib/gnu/javax/print/ipp/IppRequest.class: Likewise
++	* libjava/classpath/lib/gnu/javax/print/ipp/IppResponse$ResponseReader.class: Likewise
++	* libjava/classpath/lib/gnu/javax/print/ipp/IppResponse.class: Likewise
++	* libjava/classpath/lib/java/util/concurrent/CopyOnWriteArrayList$1.class: Likewise
++	* libjava/classpath/lib/java/util/concurrent/CopyOnWriteArrayList$2.class: Likewise
++	* libjava/classpath/lib/java/util/concurrent/CopyOnWriteArrayList$3.class: Likewise
++	* libjava/classpath/lib/java/util/concurrent/CopyOnWriteArrayList$RandomAccessSubList.class: Likewise
++	* libjava/classpath/lib/java/util/concurrent/CopyOnWriteArrayList$SubList.class: Likewise
++	* libjava/classpath/lib/java/util/concurrent/CopyOnWriteArrayList.class: Likewise
++
++2010-08-02  Ulrich Weigand  <uweigand@de.ibm.com>
++
++	LP: #500524
++
++	Backport from mainline:
++	2010-04-03  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/42509
++	* alias.c (nonoverlapping_memrefs_p): For spill-slot accesses
++	require a non-NULL MEM_OFFSET.
++
++2010-07-30  Ulrich Weigand  <uweigand@de.ibm.com>
++
++	LP: #604874
++	Backport from mainline:
++
++	gcc/cp/
++	PR c++/45112
++	* decl.c (duplicate_decls): Merge DECL_USER_ALIGN and DECL_PACKED.
++
++	gcc/testsuite/
++	PR c++/45112
++	* testsuite/g++.dg/pr45112.C: New test.
++
++2010-08-06  Yao Qi  <yao@codesourcery.com>
++
++	LP: #612011
++	gcc/
++	* config/arm/arm.c (output_move_double): Fix typo generating 
++	instructions ('ldr'->'str').
++
++	gcc/testsuite/
++	* gcc.target/arm/pr45094.c: New test.
++
++2010-08-05  Yao Qi  <yao@codesourcery.com>
++
++	gcc/testsuite
++	* g++.dg/eh/ref1.C:  Change ARM triplet to a more
++	general form.
++	* g++.dg/eh/ref2.C: Likewise.
++	* g++.dg/ext/packed8.C: Likewise.
++	* g++.dg/init/array16.C: Likewise.
++	* g++.dg/other/crash-4.C: Likewise.
++	* g++.dg/other/packed1.C: Likewise.
++	* gcc.dg/builtin-stringop-chk-1.c: Likewise.
++	* gcc.dg/tree-ssa/loop-31.c: Likewise.
++
++2010-08-04  Yao Qi  <yao@codesourcery.com>
++
++	LP: #612406
++	gcc/testsuite
++	* gcc.c-torture/execute/bcp-1.x: Change ARM triplet to
++	 a more general form.
++
++2010-08-03  Yao Qi  <yao@codesourcery.com>
++
++	LP: #612405
++	gcc/testsuite
++	* gcc.c-torture/execute/990208-1.x: Change ARM triplet to
++	a more general form.
++
++2010-08-03  Chung-Lin Tang  <cltang@codesourcery.com>
++
++	Backport from mainline for Launchpad Bug #602745:
++
++	2010-07-28  Chung-Lin Tang  <cltang@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (arm_pcs_default): Remove static.	
++	* config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Define __ARM_PCS or
++	__ARM_PCS_VFP to indicate soft/hard-float calling convention.
++	(arm_pcs_default): Declare.
++
++2010-07-23  Ulrich Weigand  <uweigand@de.ibm.com>
++
++	Revert most PowerPC-related patches:
++
++	2010-05-19  Thomas Schwinge  <thomas@codesourcery.com>
++
++	Issue #8729
++
++	Integrate <http://gcc.gnu.org/ml/gcc-patches/2010-03/msg01451.html>.
++	Drop the TARGET_TITAN_FPU and fsqrt changes.
++
++	XXXX-XX-XX  Philipp Tomsich  <philipp.tomsich@theobroma-systems.com>
++
++	NOT ASSIGNED TO FSF
++	COPYRIGHT Philipp Tomsich (Theobroma Systems Design und Consulting GmbH)
++
++	gcc/
++	* config.gcc: Recognize titan.
++	* config/rs6000/rs6000.c (titan_cost): New.
++	(rs6000_override_options, rs6000_issue_rate): Handle titan.
++	* config/rs6000/rs6000.h (processor_type): Register titan.
++	* config/rs6000/rs6000.md (cpu): Register titan.
++	Include "titan.md".
++	* config/rs6000/titan.md: New.
++	* doc/invoke.texi <mcpu>: Document titan.
++
++	2010-04-20  Nathan Froyd  <froydnj@codesourcery.com>
++
++	libgcc/
++	* config/rs6000/t-spe-fprules (spe-softfp-srcs): Don't add
++	$(gcc_srcdir)/config/soft-fp as a prefix.
++	(LIB2ADD): Use patterns with the source filenames as the filter.
++
++	2010-04-15  Nathan Froyd  <froydnj@codesourcery.com>
++
++	libgcc/
++	* config/rs6000/divdf3.S (__divdf3): Use JUMP_TARGET instead of L.
++	* config/rs6000/muldf3.S (__muldf3): Likewise.
++
++	2010-04-15  Nathan Froyd  <froydnj@codesourcery.com>
++
++	libgcc/
++	* config/rs6000/spe_muldiv_scale2.S (__spe_return_inf_mul_div):
++	New function.
++	* config/rs6000/divdf3.S (__divdf3): Call it.
++	* config/rs6000/muldf3.S (__muldf3): Likewise.
++
++	2010-04-15  Nathan Froyd  <froydnj@codesourcery.com>
++
++	libgcc/
++	* config/rs6000/spe_add_exception.S: Remove .file directive.
++	* config/rs6000/spe_adddf3.S: Likewise.
++	* config/rs6000/spe_cmpdf2.S: Likewise.
++	* config/rs6000/spe_divdf3.S: Likewise.
++	* config/rs6000/spe_eqdf2.S: Likewise.
++	* config/rs6000/spe_extendsfdf2.S: Likewise.
++	* config/rs6000/spe_fixdfdi.S: Likewise.
++	* config/rs6000/spe_fixdfsi.S: Likewise.
++	* config/rs6000/spe_fixunsdfdi.S: Likewise.
++	* config/rs6000/spe_fixunsdfsi.S: Likewise.
++	* config/rs6000/spe_floatdidf.S: Likewise.
++	* config/rs6000/spe_floatsidf.S: Likewise.
++	* config/rs6000/spe_floatundidf.S: Likewise.
++	* config/rs6000/spe_floatunsidf.S: Likewise.
++	* config/rs6000/spe_gedf2.S: Likewise.
++	* config/rs6000/spe_gtdf2.S: Likewise.
++	* config/rs6000/spe_ledf2.S: Likewise.
++	* config/rs6000/spe_ltdf2.S: Likewise.
++	* config/rs6000/spe_muldf3.S: Likewise.
++	* config/rs6000/spe_muldiv_scale2.S: Likewise.
++	* config/rs6000/spe_nedf2.S: Likewise.
++	* config/rs6000/spe_neg.S: Likewise.
++	* config/rs6000/spe_subdf3.S: Likewise.
++	* config/rs6000/spe_truncdfsf2.S: Likewise.
++	* config/rs6000/spe_unord_sub.S: Likewise.
++	* config/rs6000/spe_unorddf2.S: Likewise.
++
++	2010-04-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	libgcc/
++	* config/rs6000/spe_arith.S: Remove.  Split into:
++	* config/rs6000/spe_adddf3.S: ...this.
++	* config/rs6000/spe_subdf3.S: ...this.
++	* config/rs6000/spe_muldf3.S: ...this.
++	* config/rs6000/spe_divdf3.S: ...this.
++	* config/rs6000/spe_add_exception.S: ...this.
++	* config/rs6000/spe_muldiv_scale2.S: ...and this.
++	* config/rs6000/spe_cmp.S: Remove.  Split into:
++	* config/rs6000/spe_cmpdf2.S: ...this.
++	* config/rs6000/spe_eqdf2.S: ...this.
++	* config/rs6000/spe_nedf2.S: ...this.
++	* config/rs6000/spe_gedf2.S: ...this.
++	* config/rs6000/spe_gtdf2.S: ...this.
++	* config/rs6000/spe_ledf2.S: ...this.
++	* config/rs6000/spe_ltdf2.S: ...this.
++	* config/rs6000/spe_unorddf2.S: ...this.
++	* config/rs6000/spe_unord_sub.S: ...and this.
++	* config/rs6000/spe_cnv.S: Remove.  Split into:
++	* config/rs6000/fixdfdi.S: ...this.
++	* config/rs6000/fixdfsi.S: ...this.
++	* config/rs6000/fixunsdfdi.S: ...this.
++	* config/rs6000/fixunsdfsi.S: ...this.
++	* config/rs6000/floatdidf.S: ...this.
++	* config/rs6000/floatsidf.S: ...this.
++	* config/rs6000/floatundidf.S: ...this.
++	* config/rs6000/floatunsidf.S: ...this.
++	* config/rs6000/extendsfdf2.S: ...this.
++	* config/rs6000/truncdfsf2.S: ...this.
++	* config/rs6000/t-spe-fprules (spe-files): Remove removed files.
++	Add new files.
++
++	2010-04-05  Nathan Froyd  <froydnj@codesourcery.com>
++
++	gcc/
++	* config.gcc (powerpc-*-eabi*): Use soft-fp/t-softfp.
++
++	2010-04-02  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7937
++
++	* release-notes-csl.xml: New note.
++
++	libgcc/
++	* configure.ac: Check for __SPE__ when compiling for powerpc*.
++	* configure: Regenerate.
++	* config.host: Add t-spe-fprules if compiling for SPE.
++	* config/rs6000/t-spe-fprules: New file.
++	* config/rs6000/spe_arith.S: New file.
++	* config/rs6000/spe_cmp.S: New file.
++	* config/rs6000/spe_cnv.S: New file.
++	* config/rs6000?spe_neg.S: New file.
++
++	2010-04-02  Nathan Froyd  <froydnj@codesourcery.com>
++
++	gcc/
++	* config.gcc (powerpc-*-eabi*): Use rs6000/t-fprules-softfp.
++
++	2010-03-31  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport from FSF:
++
++	gcc/
++	2009-10-10  Peter Bergner  <bergner@vnet.ibm.com>
++
++	* configure.ac: Add test for dci instruction.
++	* configure: Regenerate.
++	* config.in: Likewise.
++	* config.gcc: Handle --with-cpu=476 and --with-cpu=476fp.
++	* doc/invoke.texi: Add cpu_type 476 and 476fp.
++	(-mmulhw): Add 476 to description.
++	(-mdlmzb): Likewise.
++	* config/rs6000/t-fprules (MULTILIB_MATCHES_FLOAT): Include -mcpu=476.
++	* config/rs6000/rs6000.c (processor_costs): Add ppc476_cost.
++	(processor_target_table): Add 476 and 476fp entries.
++	(rs6000_override_options): Use ppc476_cost for PROCESSOR_PPC476.
++	(rs6000_issue_rate): Add CPU_PPC476.
++	* config/rs6000/rs6000.h (ASM_CPU_476_SPEC): Define.
++	(ASM_CPU_SPEC): Pass %(asm_cpu_476) for -mcpu=476 and -mcpu=476fp.
++	(processor_type): Add PROCESSOR_PPC476.
++	(EXTRA_SPECS): Add asm_cpu_476 string.
++	* config/rs6000/rs6000.md: (define_attr "type"): Add isel attribute.
++	(define_attr "cpu"): Add ppc476.
++	Include 476.md.
++	Update comments for 476.
++	(isel_signed, isel_unsigned): Change to use "isel" type attribute.
++	* config/rs6000/vxworks.h (CPP_SPEC): Handle 464 and 476.
++	Update copyright year.
++	* config/rs6000/476.md: New file.
++	* config/rs6000/40x.md: Add description for "isel" attribute.
++	Update copyright year.
++	* config/rs6000/440.md: Likewise.
++	* config/rs6000/603.md: Likewise.
++	* config/rs6000/6xx.md: Likewise.
++	* config/rs6000/7450.md: Likewise.
++	* config/rs6000/7xx.md: Likewise.
++	* config/rs6000/8540.md: Likewise.
++	* config/rs6000/cell.md: Likewise.
++	* config/rs6000/e300c2c3.md: Likewise.
++	* config/rs6000/e500mc.md: Likewise.
++	* config/rs6000/mpc.md: Likewise.
++	* config/rs6000/power4.md: Likewise.
++	* config/rs6000/power5.md: Likewise.
++	* config/rs6000/power6.md: Likewise.
++	* config/rs6000/power7.md: Likewise.
++	* config/rs6000/rios1.md: Likewise.
++	* config/rs6000/rios2.md: Likewise.
++	* config/rs6000/rs64.md: Likewise.
++
++	2010-03-30  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #5851
++
++	Backport:
++
++	gcc/
++	2009-06-16  J"orn Rennecke  <joern.rennecke@arc.com>
++		    Janis Johnson  <janis187@us.ibm.com>
++
++	PR target/39254
++	* config/rs6000/rs6000.c (rs6000_emit_move): Don't emit a USE
++	for the symbol ref of a constant that is the source of a move
++	- nor for any other not-obvious-label-ref constants.
++
++	2010-03-09  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Revert:
++
++	gcc/
++	2010-03-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	* config/rs6000/rs6000.md (define_insn ""): Disable on TARGET_ISEL targets.
++
++	2010-03-09  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++
++	gcc/testsuite/
++	2009-12-07  Edmar Wienskoski  <edmar@freescale.com>
++
++	* gcc.target/powerpc/ppc-eq0-1.c: Adjust testcase for isel
++	targets.
++
++	2010-03-09  Nathan Froyd  <froydnj@codesourcery.com>
++
++	gcc/testsuite/
++	* gcc.target/powerpc/block-move-1.c (memcpy): Declare.
++	* gcc.target/powerpc/block-move-2.c (memcpy): Likewise.
++
++	2010-03-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7183
++
++	* config/rs6000/rs6000.c (rs6000_emit_int_cmove): Don't force_reg on
++	const0_rtx operand.
++	* config/rs6000/rs6000.md (isel_signed, isel_unsigned): Permit
++	const_int 0 for the second operand; make third operand slightly more
++	lenient.
++	(define_insn ""): Disable on TARGET_ISEL targets.
++
++	2010-03-05  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7183
++
++	* release-notes-csl.xml: New notes.
++
++	gcc/
++	* doc/invoke.texi (mblock-move-inline-limit): Tweak @opindex directive.
++	Tweak text to reflect target-specific setting of this option.
++
++	2010-03-05  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7792
++
++	Backport from upstream:
++
++	gcc/
++	2009-09-10  Nathan Froyd  <froydnj@codesourcery.com>
++
++	* config/rs6000/rs6000.h (DATA_ALIGNMENT): Check that we are dealing
++	with actual SPE/paired vector modes before using 64-bit alignment.
++	Check that TYPE is a REAL_TYPE for TARGET_E500_DOUBLE.
++
++	2010-03-04  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7183
++
++	gcc/
++	* config/rs6000/rs6000.c (rs6000_emit_int_cmove): Change prototype.
++	Ensure that isel pattern is only emitted with proper conditions.
++	(rs6000_emit_cmove): Change call to rs6000_emit_int_cmove to match.
++	(output_isel): Check that condition is LT, GT, LTU, GTU, or EQ.
++	(rs6000_emit_sISEL): New function.
++	(rs6000_emit_sCOND): Call it if computing an SImode result.
++	(rs6000_rtx_costs): Alter costs for comparisons for TARGET_ISEL.
++	* config/rs6000/rs6000.md (abssi2_isel): Change pattern to use
++	lt rather than ge.
++	(isel_signed, isel_unsigned): Tighten constraints on comparison
++	operator.
++	(sne, sge, sgt, sle, slt): Check TARGET_ISEL.
++
++	2010-03-04  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7183
++
++	gcc/
++	* config/rs6000/rs6000.opt (mblock-move-inline-limit=): New option.
++	* config/rs6000/rs6000.c (rs6000_override_options): Set
++	rs6000_block_move_inline_limit.
++	* doc/invoke.texi (-mblock-move-inline-limit): Document.
++	
++	gcc/testsuite/
++	* gcc.target/powerpc/block-move-1.c: New test.
++	* gcc.target/powerpc/block-move-2.c: New test.
++
++	2010-02-05  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++
++	gcc/
++	2009-06-25  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR target/38731
++	* config/rs6000/rs6000.c (LOCAL_ALIGNMENT): Redefine to just use
++	DATA_ALIGNMENT instead.
++
++	2010-02-05  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7587
++
++	* release-notes-csl.xml: New note.
++
++	Backport from mainline:
++
++	gcc/
++	2010-02-05  Nathan Froyd  <froydnj@codesourcery.com>
++	
++	* config/rs6000/rs6000.c (rs6000_override_options): Invert check
++	for rs6000_gen_cell_microcode.
++
++	2009-07-03  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-05-26  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++	gcc/
++	2008-04-30  Nathan Froyd  <froydnj@codesourcery.com>
++	* config/rs6000/t-ppccomm: Add build rules for new files.
++	(LIB2FUNCS_STATIC_EXTRA): Add new files.
++
++	libgcc/
++	2008-04-30  Nathan Froyd  <froydnj@codesourcery.com>
++	* config/rs6000/t-ppccomm: Add build rules for new files.
++	(LIB2ADD_ST): New variable.
++
++	2009-07-02  Andrew Jenner  <andrew@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2009-02-04  Andrew Jenner  <andrew@codesourcery.com>
++
++	gcc/
++	* config.gcc: Handle powerpc-montavista-linux-gnu.
++	* config/rs6000/t-montavista-linux: New file.
++	* config/rs6000/montavista-linux.h: New file.
++
++	2009-06-29  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++	2009-04-21  Andrew Jenner  <andrew@codesourcery.com>
++	gcc/testsuite/
++	* lib/target-supports.exp: Handle powerpc-*-elf.
++
++	2009-06-09  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-06-02  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.md (absv2sf2, negv2sf2, addv2sf3, subv2sf3,
++	mulv2sf3, divv2sf3): New expanders.
++	* config/rs6000/spe.md (spe_evabs, spe_evand, spe_evaddw,
++	spe_evdivws): Rename to use standard GCC names.
++	* config/rs6000/paired.md (negv2sf, absv2sf2, addv2sf3, subv2sf3,
++	mulv2sf3, divv2sf3): Rename to avoid conflict with the new expanders.
++
++	2007-09-19  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.c (bdesc_2arg, bdesc_1arg): Use new CODE_FOR_
++	names for renamed patterns.
++
++	2009-06-09  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-04-14  Daniel Jacobowitz  <dan@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.c (rs6000_dwarf_register_span): Fix debug
++	output for other floating point modes.
++
++	2009-06-09  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-11-24  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.c (rs6000_savres_strategy): Always use
++	inline saves and restores when compiling position-independent code.
++
++	2008-11-17  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.c (rs6000_emit_epilogue): Adjust
++	computation of restore_lr.  Duplicate restoration of LR and
++	execute the appropriate one depending on whether GPRs are being
++	restored inline.
++
++	2008-11-17  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.c (rs6000_savres_routine_sym): Fix
++	computation for cache selector.  Mark the generated symbol as a
++	function.
++	(rs6000_emit_prologue): Correct condition.
++	* config/rs6000/rs6000.md (*save_gpregs_<mode>): Use explicit
++	match for register 11.
++	(*save_fpregs_<mode>): Likewise.
++	(*restore_gpregs_<mode>): Likewise.
++	(*return_and_restore_gpregs_<mode>): Likewise.
++	(*return_and_restore_fpregs_<mode>): Likewise.
++	* config/rs6000/spe.md (*save_gpregs_spe): Use explicit match for
++	register 11.
++	(*restore_gpregs_spe): Likewise.
++	(*return_and_restore_gpregs_spe): Likewise.
++
++	2008-10-24  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.c (no_global_regs_above): Fix precedence
++	problem.
++
++	2009-06-09  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-07-02  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/eabi.h (NAME__MAIN, INVOKE__main): Remove.
++	* config/rs6000/t-ppccomm (LIB2FUNS_STATIC_EXTRA): Remove eabi.S.
++	(eabi.S): Remove rule.
++
++	2008-10-13  Andrew Stubbs  <ams@codesourcery.com>
++	gcc/
++	* doc/invoke.texi (PowerPC Options): -meabi option no longer places
++	__eabi function in main.
++
++	2009-06-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++
++	gcc/
++	2009-06-05  Nathan Froyd  <froydnj@codesourcery.com>
++
++	* config/rs6000/eabi.asm (__eabi_convert): Don't define if
++	_RELOCATABLE.
++	(__eabi_uconvert): Likewise.
++
++	2009-06-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2008-08-25  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/sysv4.h (LIB_SIM_SPEC): Use LIB_DEFAULT_SPEC.
++	(STARTFILE_SIM_SPEC): Remove sim-crt0.o%s.
++	(ENDFILE_SIM_SPEC): Add -Tsim-hosted.ld.
++	(LINK_OS_SIM_SPEC): Define to empty.
++
++	2009-06-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2008-02-12  Nathan Sidwell  <nathan@codesourcery.com>
++		    Daniel Jacobowitz  <dan@codesourcery.com>
++	gcc/
++	* config/rs6000/eabi-ci.asm (__init): Add _init func start.
++	(__fini): Also declare _fini for newlib.
++
++	2009-06-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-08-16  Daniel Jacobowitz  <dan@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.c (rs6000_conditional_register_usage): Mark
++	call-saved AltiVec registers call-used if ! TARGET_ALTIVEC_ABI.
++	* config/rs6000/rs6000.h (CALL_USED_REGISTERS): Mark the first 20
++	AltiVec registers call-used.
++	(CALL_REALLY_USED_REGISTERS): Likewise.
++
++	gcc/testsuite/
++	* gcc.target/powerpc/altivec-consts.c: Remove -mabi=altivec.
++	* gcc.target/powerpc/altivec-varargs-1.c: Likewise.
++	* gcc.dg/vmx/vmx.exp: Likewise.
++
++	2009-05-15  Mark Mitchell  <mark@codesourcery.com>
++		    Joseph Myers  <joseph@codesourcery.com>
++		    Mark Shinwell  <shinwell@codesourcery.com>
++		    Vladimir Prus  <vladimir@codesourcery.com>
++		    Paul Brook  <paul@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	* config.gcc: Handle powerpc-wrs-linux-gnu.
++	* config/rs6000/t-wrs-linux, config/rs6000/wrs-linux.h: New.
++
++	2009-05-11  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Forward port 2009-02-12  Nathan Sidwell  <nathan@codesourcery.com>
++	Issue #4620
++	gcc/
++	* config/rs6000/rs6000.c (rs6000_init_builtins): Set TYPE_NAME of
++	our distinct integral and vector types.
++	gcc/testsuite/
++	* g++.dg/ext/altivec-17.C: New.
++
++	2009-04-29  Nathan Froyd  <froydnj@codesourcery.com>
++		    Kazu Hirata <kazu@codesourcery.com>
++		    Daniel Jacobowitz  <dan@codesourcery.com>
++		    Nathan Sidwell  <nathan@codesourcery.com>
++		    Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/rs6000/e500mc.h, config/rs6000/t-cs-eabi,
++	config/rs6000/t-cs-eabi-lite, config/rs6000/t-cs-linux,
++	config/rs6000/t-ppc-e500mc: New.
++	* config.gcc: Add Power multilib configurations.
++	* config/rs6000/eabi.h (CC1_EXTRA_SPEC, ASM_DEFAULT_SPEC): Define.
++	* config/rs6000/linux.h (CC1_EXTRA_SPEC, ASM_DEFAULT_SPEC,
++	SYSROOT_SUFFIX_SPEC): Define.
++
++	2009-04-29  Joseph Myers  <joseph@codesourcery.com>
++		    Daniel Jacobowitz  <dan@codesourcery.com>
++		    Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	* config/rs6000/option-defaults.h (OPTION_DEFAULT_SPECS): Handle
++	-te500mc, -te500v1, -te500v2 and -te600.
++
++	2009-04-29  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	* config/rs6000/sysv4.h (CC1_EXTRA_SPEC): Define and use.
++
++	2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	gcc/
++	2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++	* config.gcc (powerpc*-*-* | rs6000-*-*): Add
++	rs6000/option-defaults.h to tm_file.  Support cpu_32, cpu_64,
++	tune_32 and tune_64.
++	* doc/install.texi (--with-cpu-32, --with-cpu-64): Document
++	support on PowerPC.
++	* config/rs6000/rs6000.h (OPTION_DEFAULT_SPECS): Move to ...
++	* config/rs6000/option-defaults.h: ... here.  New file.
++	(OPT_64, OPT_32): Define.
++	(MASK_64BIT): Define to 0 if not already defined.
++	(OPT_ARCH64, OPT_ARCH32): Define.
++	(OPTION_DEFAULT_SPECS): Add entries for cpu_32, cpu_64, tune_32
++	and tune_64.
++
++2010-07-20  Paul Brook  <paul@codesourcery.com>
++ 
++	gcc/
++	* config/arm/thumb2.md (thumb_andsi_not_shiftsi_si,
++	thumb2_notsi_shiftsi, thumb2_notsi_shiftsi_compare0,
++	thumb2_not_shiftsi_compare0_scratch, thumb2_cmpsi_shiftsi,
++	thumb2_cmpsi_shiftsi_swp, thumb2_cmpsi_neg_shiftsi,
++	thumb2_arith_shiftsi, thumb2_arith_shiftsi_compare0,
++	thumb2_arith_shiftsi_compare0_scratch, thumb2_sub_shiftsi,
++	thumb2_sub_shiftsi_compare0, thumb2_sub_shiftsi_compare0_scratch):
++	Use const_shift_count predicate for "M" constraints.
++	* config/arm/predicates.md (const_shift_operand): Remove.
++	(const_shift_count): New.
++
++	gcc/testsuite/
++	* gcc.dg/long-long-shift-1.c: New test.
++
++2010-07-13  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* REVISION: Bump version.
++
++2010-07-13  Andrew Stubbs  <ams@codesourcery.com>
++
++	GCC Linaro 4.4-2010.07-0 released.
++
++	gcc/
++	* REVISION: Update.
++
++2010-07-13  Andrew Stubbs  <ams@codesourcery.com>
++
++	* Makefile.tpl (install): Remove install-pdf and install-html
++	dependencies.
++	* Makefile.in: Regenerate.
++
++	gcc/
++	* Makefile.in (install): Remove install-pdf and install-html
++	dependencies.
++
++2010-07-13  Michael Hope  <michael.hope@linaro.org>
++
++	* libjava/Makefile.am (pkgconfigdir): Reverted changes to pkgconfigdir and
++	jardir back to the FSF version.
++	* libjava/Makefile.in (jardir): Likewise.
++
++2010-07-13  Michael Hope  <michael.hope@linaro.org>
++
++	LP: #602171
++	* gcc/testsuite/gcc.target/i386/pr9771-1.c: Merge r159776 from FSF
++	GCC into the Linaro branch.
++	* gcc/testsuite/gcc.target/arm/frame-pointer-1.c: Likewise.
++
++	Original entry:
++        2010-05-24  Paul Brook  <paul@codesourcery.com>
++
++	* gcc.target/arm/frame-pointer-1.c: New test.
++	* gcc.target/i386/pr9771-1.c: Move code out of main to allow frame
++	pointer elimination.
++
++	Note that the change was already present but the test cases hadn't
++	been updated.
++
++2010-07-12  Ulrich Weigand  <uweigand@de.ibm.com>
++
++	Fix Launchpad Bug #602289
++
++	Backport from mainline:
++
++	2010-07-02  Sandra Loosemore  <sandra@codesourcery.com>
++	gcc/
++	* config/arm/neon.ml (Vand): Split DImode variants and mark them
++	as No_op to disable testing for exact instruction match.
++	(Vorr): Likewise.
++	(Veor): Likewise.
++	(Vbic): Likewise.
++	(Vorn): Likewise.
++	gcc/testsuite/
++	* gcc.target/arm/neon-vands64.c: New.
++	* gcc.target/arm/neon-vandu64.c: New.
++	* gcc.target/arm/neon-vbics64.c: New.
++	* gcc.target/arm/neon-vbicu64.c: New.
++	* gcc.target/arm/neon-veors64.c: New.
++	* gcc.target/arm/neon-veoru64.c: New.
++	* gcc.target/arm/neon-vorns64.c: New.
++	* gcc.target/arm/neon-vornu64.c: New.
++	* gcc.target/arm/neon-vorrs64.c: New.
++	* gcc.target/arm/neon-vorru64.c: New.
++
++	Backport from mainline:
++
++	2010-07-02  Sandra Loosemore  <sandra@codesourcery.com>
++		    Julian Brown  <julian@codesourcery.com>
++	gcc/
++	* config/arm/neon.ml (Vadd, Vsub): Split out 64-bit variants and add
++	No_op attribute to disable assembly output checks.
++	gcc/testsuite/
++	* gcc.target/arm/neon-vsubs64.c: New execution test.
++	* gcc.target/arm/neon-vsubu64.c: New execution test.
++	* gcc.target/arm/neon-vadds64.c: New execution test.
++	* gcc.target/arm/neon-vaddu64.c: New execution test.
++
++	Regenerate generated files:
++
++	gcc/
++	* doc/arm-neon-intrinsics.texi: Regenerate.
++	gcc/testsuite/
++	* gcc.target/arm/neon/vadds64.c: Regenerate.
++	* gcc.target/arm/neon/vaddu64.c: Regenerate.
++	* gcc.target/arm/neon/vands64.c: Regenerate.
++	* gcc.target/arm/neon/vandu64.c: Regenerate.
++	* gcc.target/arm/neon/vbics64.c: Regenerate.
++	* gcc.target/arm/neon/vbicu64.c: Regenerate.
++	* gcc.target/arm/neon/veors64.c: Regenerate.
++	* gcc.target/arm/neon/veoru64.c: Regenerate.
++	* gcc.target/arm/neon/vorns64.c: Regenerate.
++	* gcc.target/arm/neon/vornu64.c: Regenerate.
++	* gcc.target/arm/neon/vorrs64.c: Regenerate.
++	* gcc.target/arm/neon/vorru64.c: Regenerate.
++	* gcc.target/arm/neon/vsubs64.c: Regenerate.
++	* gcc.target/arm/neon/vsubu64.c: Regenerate.
++
++2010-07-09  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* config/arm/elf.h (ASM_SPEC): Pass -mimplicit-it=thumb if -mthumb.
++
++2010-07-08  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* DEV-PHASE: Set to "Linaro".
++	* REVISION: New file.
++
++2010-07-07  Yao Qi  <yao@codesourcery.com>
++
++	Revert a license patch.
++
++	2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* gcc.c (main): Add "const" to declaration of license_status.
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	2008-09-04  Julian Brown  <julian@codesourcery.com>
++	* Makefile.in (CSL_LICENSELIB): Remove space after -L to appease
++	Darwin ld.
++
++	gcc/
++	2007-10-16  Joseph Myers  <joseph@codesourcery.com>
++	* gcc.c (license_me_flag): Define to 1 if not TARGET_FLEXLM.
++
++	2007-08-10  Nathan Froyd  <froydnj@codesourcery.com>
++	* gcc.c (main): Consult license_me_flag to see if failure to
++	acquire a license implies bailing out entirely.
++
++	2007-08-24  Nathan Froyd  <froydnj@codesourcery.com>
++	Issue #1892
++	* gcc.c (main): Check license_me_flag before declaring failure.
++
++	2007-08-30  Nathan Sidwell  <nathan@codesourcery.com>
++	Issue #1892
++	* gcc.c (main): Don't complain if license fails without -flicense-me
++
++	2007-04-12  Richard Sandiford  <richard@codesourcery.com>
++	* gcc.c (main): If find_a_file fails, pass the original subproc
++	to csl_subproc_license_new.
++
++	2006-12-27  Mark Mitchell  <mark@codesourcery.com>
++	NOT ASSIGNED TO FSF
++	COPYRIGHT CODESOURCERY
++	* gcc.c (main): If the license check fails, remove the generated
++	file.
++
++	2006-12-22  Mark Mitchell  <mark@codesourcery.com>
++	NOT ASSIGNED TO FSF
++	COPYRIGHT CODESOURCERY
++	* aclocal.m4: Move licensing options ...
++	* acinclude.m4: ... here.
++
++	2006-12-13  Mark Mitchell  <mark@codesourcery.com>
++	NOT ASSIGNED TO FSF
++	COPYRIGHT CODESOURCERY
++	* gcc.c (csl/license.h): Include, if required.
++	(license_checked): New variable.
++	(no_license): Remove.
++	(process_command): Set license_checked, not no_license.
++	(main): Use CodeSourcery license library.  Remove most
++	TARGET_FLEXLM code.
++	* aclocal.m4 (--with-license): New option.
++	(--with-csl-license-feature): Likewise.
++	(--with-csl-license-version): Likewise.
++	* Makefile.in (CSL_LICENSEINC): Define it.
++	(CSL_LICENSELIB): Likewise.
++	(CSL_LICENSE_PROG): Likewise.
++	(LIBS): Depend on CSL_LICENSELIB.
++	(GCC_PASSES): Depend on CSL_LICENSE_PROG.
++	(INCLUDES): Add CSL_LICENSEINC.
++	* configure.ac (CSL_AC_LICENSE_VERSION): Use it.
++	(CSL_AC_LICENSE): Likewise.
++	(CSL_AC_LICENSE_FEATURE): Likewise.
++	* config.in: Regenerated.
++	* configure: Regenerated.
++
++	2006-10-29  Richard Sandiford  <richard@codesourcery.com>
++	            Joseph Myers  <joseph@codesourcery.com>
++	* gcc.c (license_me_flag): New variable.
++	(feature_proxy_flag): New variable.
++	(no_license): New variable.
++	(process_command): Handle -flicense-me, -ffeature-proxy and
++	-fno-feature-proxy.  Initialize no_license.
++	(main): Check licenses.
++
++2010-07-06  Yao Qi  <yao@codesourcery.com>
++
++	Import from Ubuntu GCC:
++	gcc/
++	2009-11-14  Richard Earnshaw  <rearnsha@arm.com>
++
++	PR target/42031
++	* arm.md (adddi_sesidi_di): Place tied contraint first.
++	(adddi_zesidi_di, subdi_di_zesidi, subdi_di_sesidi): Likewise
++	(subdi_zesidi_di, subdi_sesidi_di): Likewise.
++	(mulsi3_compare0, mulsi_compare0_scratch): Likewise.
++	(mulsi3addsi, mulsi3addsi_compare0): Likewise. 
++	(mulsi3addsi_compare0_scratch, smulsi3_highpart_nov6): Likewise.
++	(umulsi3_highpart_nov6, anddi_zesidi_di, anddi_sesdi_di): Likewise.       
++	(anddi_notdi_di, iordi_sesidi_di, xordi_sesidi_di): Likewise.
++	(andsi_iorsi3_notsi, arm_ashldi3_1bit, arm_ashrdi3_1_bit): Likewise.
++	(arm_lshrdi3_1bit, one_cmpldi2): Likewise.
++	
++2010-07-05  Yao Qi  <yao@codesourcery.com>
++
++	Import from Ubuntu GCC:
++	gcc/ada/
++	2010-01-11  Mikael Pettersson  <mikpe@it.uu.se>
++
++	* gcc-interface/Makefile.in: Add arm*-*-linux-gnueabi.
++	* system-linux-armeb.ads, system-linux-armel.ads: New files.
++	
++2010-07-05  Yao Qi  <yao@codesourcery.com>
++
++	Import from Ubuntu GCC:
++	libjava/
++	2009-08-12  Andrew Haley  <aph@redhat.com>
++
++	* sysdep/arm/locks.h: Use atomic builtins For Linux EABI.
++	* configure.ac: Add ATOMICSPEC.
++	* libgcj.spec.in: Likewise.
++	* configure.host (arm*-linux*): Add -Wno-abi to cxxflags.
++	(testsuite/libjava.jvmti/jvmti-interp.exp): Likewise.
++	(testsuite/libjava.jvmti/jvmti.exp): Likewise.
++	(testsuite/libjava.jni/jni.exp): Likewise.
++	Set ATOMICSPEC.
++
++2010-07-05  Yao Qi  <yao@codesourcery.com>
++
++	boehm-gc/
++	* include/private/gc_locks.h: Patch arm-boehm-gc-locks.diff from Ubuntu.
++
++2010-07-05  Yao Qi  <yao@codesourcery.com>
++
++	Import from Ubuntu GCC: 
++	gcc/java/
++	2009-08-12  Andrew Haley  <aph@redhat.com>
++
++	* builtins.c (compareAndSwapInt_builtin): Use 
++	flag_use_atomic_builtins.
++	(compareAndSwapLong_builtin): Likewise.
++	(compareAndSwapObject_builtin): Likewise.
++	* jvspec.c: Add flag_use_atomic_builtins.
++	* gcj.texi: Likewise.
++	* java-tree.h: Likewise.
++	* lang.opt: Likewise.
++	
++2010-07-05  Yao Qi  <yao@codesourcery.com>
++
++	Import from Ubuntu GCC:
++	
++	libjava/classpath/
++	2010-04-27  Andrew Haley  <aph@redhat.com>
++
++	* java/util/concurrent/CopyOnWriteArrayList.java: Fix for empty        list.
++
++	2010-04-27  Andrew Haley  <aph@redhat.com>
++
++	* gnu/javax/print/ipp/IppResponse.java (parseAttributes): Handle
++	IppValueTag.UNKNOWN.
++	* gnu/javax/print/ipp/IppRequest.java (writeOperationAttributes):
++	Handle RequestedAttributes.
++	* gnu/javax/print/ipp/IppPrintService.java (processResponse): Add
++	DocFlavor.SERVICE_FORMATTED.PAGEABLE and
++	DocFlavor.SERVICE_FORMATTED.PRINTABLE.
++
++2010-07-02  Yao Qi  <yao@codesourcery.com>
++	Import from Ubuntu GCC:
++	gcc/
++	2009-10-05  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
++	* config/arm/arm.c (arm_override_options): Really initialize 
++	flag_dwarf2_cfi_asm to 0.
++	
++2010-07-02  Yao Qi  <yao@codesourcery.com>
++	
++	Import from Ubuntu GCC:
++
++	gcc/
++	2009-05-27  Julian Brown  <julian@codesourcery.com>
++	* gcse.c (target.h): Include.
++	(can_assign_to_reg_without_clobbers_p): Check that the target allows
++	copy of argument to a pseudo register.
++	
++2010-07-02  Yao Qi  <yao@codesourcery.com>
++
++	gcc/
++	* config.gcc: Patch pr40134.diff from Ubuntu.
++	* config/pa/pa-linux.h: Likewise.
++	
++2010-07-02  Yao Qi  <yao@codesourcery.com>
++
++	Import from Ubuntu GCC:
++	libstdc++-v3/
++	2009-12-09  Paolo Carlini  <paolo.carlini@oracle.com>
++	            Matthias Klose  <doko@ubuntu.com>
++
++	PR libstdc++/40133
++	* acinclude.m4 ([GLIBCXX_ENABLE_ATOMIC_BUILTINS]): On *-*-linux*,
++	*-*-kfreebsd*-gnu | *-*-gnu* targets do link tests when possible.
++	* configure: Regenerate.
++	
++2010-07-02  Yao Qi  <yao@codesourcery.com>
++
++	Import from Ubuntu GCC:
++	gcc/
++	2010-03-13  Mikael Pettersson  <mikpe@it.uu.se>
++	PR middle-end/43323
++	Backport from mainline:
++	2009-06-17  Adam Nemet  <anemet@caviumnetworks.com>
++
++	* tree.h (STRIP_NOPS, STRIP_SIGN_NOPS,
++	STRIP_USELESS_TYPE_CONVERSION): Use tree_strip_nop_conversions,
++	tree_strip_sign_nop_conversions and 
++	tree_ssa_strip_useless_type_conversions rather than stripping
++	the operations here.
++	(tree_strip_nop_conversions, tree_strip_sign_nop_conversions):Declare them.
++	* gimple.h (tree_ssa_strip_useless_type_conversions): Declare it.
++	* tree-ssa.c (tree_ssa_strip_useless_type_conversions): New function. 
++	* tree.c (tree_nop_conversion, tree_sign_nop_conversion,
++	tree_strip_nop_conversions, tree_strip_sign_nop_conversions): New functions.
++
++	gcc/testsuite/
++	2010-03-13  Mikael Pettersson  <mikpe@it.uu.se>
++	PR middle-end/43323
++	* gcc.c-torture/execute/pr43323.c: New test.
++
++	Backport from mainline:
++	2009-06-17  Adam Nemet  <anemet@caviumnetworks.com>
++
++	* gcc.c-torture/execute/bitfld-5.c: New test.
++
++2010-06-30  Yao Qi  <yao@codesourcery.com>
++
++	Import from Ubuntu GCC:
++	gcc/objc/
++	* lang-specs.h: Patch pr41848.diff from Ubuntu.
++	gcc/testsuite/
++	* objc/execute/forward-1.x: Patch pr41848.diff from Ubuntu.
++
++2010-06-30  Yao Qi  <yao@codesourcery.com>
++
++	Import from Ubuntu GCC:
++	gcc/
++	* configure.ac: Patch gcc-stack_chk_fail-check.diff from Ubuntu.
++
++2010-06-30  Yao Qi  <yao@codesourcery.com>
++
++	Import from Ubuntu GCC:
++	2010-04-27  Jakub Jelinek  <jakub@redhat.com>
++	gcc/
++	* unwind-dw2.c (_Unwind_DebugHook): Add used attribute.
++
++	2009-05-27  Tom Tromey  <tromey@redhat.com>
++	gcc/
++	* unwind-dw2.c (_Unwind_DebugHook): New function.
++	(uw_install_context): Call _Unwind_DebugHook.
++
++2010-06-30  Yao Qi  <yao@codesourcery.com>
++
++	Import from Ubuntu GCC:
++	2009-07-20  Mikael Pettersson  <mikpe@it.uu.se>
++	gcc/
++	Backport from mainline:
++	2009-04-20  Ian Lance Taylor  <ian@gcc.gnu.org>
++	Fix enum conversions which are invalid in C++.
++	* config/arm/arm.c (arm_rtx_costs_1) <case ABS>: Fix 
++	typo in call to GET_MODE_CLASS.
++
++2010-06-30  Yao Qi  <yao@codesourcery.com>
++
++	Import from Ubuntu GCC:
++	2009-07-20  Mikael Pettersson  <mikpe@it.uu.se>
++	gcc/
++	Backport from mainline:
++	2009-04-20  Ian Lance Taylor  <ian@gcc.gnu.org>
++	Fix enum conversions which are invalid in C++.
++
++	PR target/39429
++	* config/arm/arm.c (adjacent_mem_locations): Fix swapped
++	parameters in const_ok_for_op calls.
++
++	gcc/testsuite/
++	PR target/39429
++	* gcc.target/arm/pr39429.c: New test case.
++
++2010-06-30  Yao Qi  <yao@codesourcery.com>
++
++	Import from Ubuntu GCC:
++	gcc/
++	* configure.ac, config.in: Patch gcc-build-id.diff from Ubuntu.
++
++2010-06-16  Julian Brown  <julian@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.h (REG_CLASS_CONTENTS): Remove soft frame pointer
++	from CORE_REGS and GENERAL_REGS classes.
++	* config/arm/arm.md (*thumb1_movsi_insn): Ignore all parts of final
++	constraint for register preferencing.
++
++2010-06-07  Julian Brown  <julian@codesourcery.com>
++
++	Merge from GCC 4.4.4.
++
++2010-05-26  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/testsuite/
++	* gcc.target/arm/pr42496.c: Remove duplicate concatenated copy of
++	testcase.
++
++2010-05-24  Paul Brook  <paul@codesourcery.com>
++
++	Issue #8426 - Avoid libsupc++ static vritable data
++	libstdc++-v3/
++	* libsupc++/unwind-cxx.h (__get_terminate_handler,
++	__get_terminate_handler): New.
++	* libsupc++/eh_throw.cc: Use them.
++	* libsupc++/eh_ptr.cc: Ditto.
++	* libsupc++/eh_terminate.cc: Ditto.
++	* libsupc++/eh_term_handler.cc: Avoid static initializer on SymbianOS.
++	* libsupc++/eh_unex_handler.cc: Avoid static initializer on SymbianOS.
++
++2010-05-22  Thomas Schwinge  <thomas@codesourcery.com>
++
++	Issue #8729
++
++	* release-notes-csl.xml: New note.
++
++2010-05-19  Thomas Schwinge  <thomas@codesourcery.com>
++
++	Issue #8729
++
++	Integrate <http://gcc.gnu.org/ml/gcc-patches/2010-03/msg01451.html>.
++	Drop the TARGET_TITAN_FPU and fsqrt changes.
++
++	XXXX-XX-XX  Philipp Tomsich  <philipp.tomsich@theobroma-systems.com>
++
++	NOT ASSIGNED TO FSF
++	COPYRIGHT Philipp Tomsich (Theobroma Systems Design und Consulting GmbH)
++
++	gcc/
++	* config.gcc: Recognize titan.
++	* config/rs6000/rs6000.c (titan_cost): New.
++	(rs6000_override_options, rs6000_issue_rate): Handle titan.
++	* config/rs6000/rs6000.h (processor_type): Register titan.
++	* config/rs6000/rs6000.md (cpu): Register titan.
++	Include "titan.md".
++	* config/rs6000/titan.md: New.
++	* doc/invoke.texi <mcpu>: Document titan.
++
++2010-05-18  Paul Brook  <paul@codesourcery.com>
++
++	Issue #8426 - Fix libsupc++ symbol visibility
++	gcc/
++	* config/arm/eabi-memset.c (__aeabi_memset): Remove bogus return value.
++
++	Import from Ubuntu GCC:
++
++	libstdc++-v3/
++	2009-07-06  Jason Merrill  <jason@redhat.com>
++
++	* libsupc++/vmi_class_type_info.cc (__do_dyncast): Use src2dst
++ hint 
++ 	to defer searching bases that don't overlap the desired address.
++	gcc/testsuite/
++	2009-07-06  Jason Merrill  <jason@redhat.com>
++
++	* g++.dg/rtti/dyncast[34].C: New.
++
++2010-07-02  Yao Qi  <yao@codesourcery.com>
++
++	libstdc++-v3/
++	* libsupc++/eh_arm.cc (__cxa_type_match): Use correct namespace.
++	(__cxa_begin_cleanup): Ditto.
++	* libsupc++/unwind-cxx.h (__cxa_call_unexpected, __cxa_call_terminate,
++	__cxa_type_match, __cxa_begin_cleanup): Use correct types on ARM EABI.
++	* libsupc++/cxxabi.h: Add prototypes for __aeabi routines.
++	* libsupc++/eh_personality.cc (PERSONALITY_FUNCTION): Export with
++	default visibility.
++	* libsupc++/eh_call.cc (__cxa_call_terminate, __cxa_call_unexpected):
++	Use correct namespace and types.
++
++2010-05-17  Jie Zhang  <jie@codesourcery.com>
++
++	Issue #8513
++
++	gcc/
++	* config/arm/arm.c (arm_print_operand): Handle CONST
++	address.
++	* config/arm/arm.h (TARGET_USE_RELA): Define.
++	* config/arm/arm.md (define_split for SYMBOL_REF move):
++	Also split SYMBOL_REF + offset case.
++	* config/arm/vxworks.h (TARGET_USE_RELA): Define.
++
++2010-05-12  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Issue #8483
++
++	gcc/
++	* targhooks.c (default_stack_protect_guard): Fix backporting mistake.
++
++2010-05-12  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Issue #8483
++
++	* release-notes-csl.xml: Add a release note.
++
++	Backport from mainline:
++
++	gcc/
++	2010-05-12  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	* targhooks.c (default_stack_protect_guard): Avoid sharing RTL
++	for __stack_chk_guard.
++	2010-05-12  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	* gcc.target/m68k/20100512-1.c: New.
++
++2010-05-11  Jie Zhang  <jie@codesourcery.com>
++
++	Issue #8473
++
++	* release-notes-csl.xml: Document.
++
++	Backport from mainline:
++
++	gcc/
++	2010-04-26  Jie Zhang  <jie@codesourcery.com>
++	PR tree-optimization/43833
++	* tree-vrp.c (range_int_cst_p): New.
++	(range_int_cst_singleton_p): New.
++	(extract_range_from_binary_expr): Optimize BIT_AND_EXPR case
++	when both operands are constants.  Use range_int_cst_p in
++	BIT_IOR_EXPR case.
++
++	gcc/testsuite/
++	2010-04-26  Jie Zhang  <jie@codesourcery.com>
++	PR tree-optimization/43833
++	gcc.dg/Warray-bounds-8.c: New test case.
++
++2010-05-06  Thomas Schwinge  <thomas@codesourcery.com>
++	    Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #8578
++
++	* release-notes-csl.xml (Fix for invalid code generation bug): New
++	note.
++
++2010-05-06  Thomas Schwinge  <thomas@codesourcery.com>
++
++	Issue #8578
++
++	Backport from mainline branches/gcc-4_4-branch (r154046):
++
++	gcc/
++	2009-11-09  Jakub Jelinek  <jakub@redhat.com>
++
++	PR middle-end/40946
++	Backport from mainline
++	2009-09-09  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/41317
++	* tree-ssa-ccp.c (maybe_fold_offset_to_component_ref): Remove
++	code dealing with plain pointer bases.
++	(maybe_fold_offset_to_reference): Likewise.
++	(maybe_fold_stmt_addition): Adjust.
++
++	gcc/testsuite/
++	2009-11-09  Jakub Jelinek  <jakub@redhat.com>
++
++	PR middle-end/40946
++	* gcc.dg/pr40946.c: New test.
++
++	Backport from mainline
++	2009-09-09  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/41317
++	* gcc.c-torture/execute/pr41317.c: New testcase.
++
++2010-05-04  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	gcc/testsuite/
++	2009-11-23  Andy Hutchinson  <hutchinsonandy@gcc.gnu.org>
++
++	* gcc-dg/utf-array-short-wchar.c: Require-effective-target wchar.
++	* gcc-dg/utf-array.c: Ditto.
++
++2010-04-27  Paul Brook  <paul@codesourcery.com>
++
++	libstdc++-v3/
++	* configure.ac: Remove LIBSUPCXX_PRONLY.
++	* include/Makefile.am: Remove LIBSUPCXX_PRONLY.
++	* libsupc++/Makefile.am: Remove LIBSUPCXX_PRONLY.
++	* configure: Regenerate.
++	* Makefile.in: Regenerate.
++	* src/Makefile.in: Regenerate.
++	* doc/Makefile.in: Regenerate.
++	* po/Makefile.in: Regenerate.
++	* include/Makefile.in: Regenerate.
++	* libsupc++/Makefile.in: Regenerate.
++	* testsuite/Makefile.in: Regenerate.
++
++2010-04-27  Nathan Sidwell  <nathan@codesourcery.com>
++
++	gcc/
++	* config/arm/nucleus.h (NUCLEUS_SHARED_CPP_BUILTINS): New.
++	(TARGET_OS_CPP_BUILTINS): Override.
++	* config/arm/unwind-arm.h (_Unwind_decode_target2): Target2 on
++	nucleus-shared is the same as linux.
++
++2010-04-20  Nathan Froyd  <froydnj@codesourcery.com>
++
++	libgcc/
++	* config/rs6000/t-spe-fprules (spe-softfp-srcs): Don't add
++	$(gcc_srcdir)/config/soft-fp as a prefix.
++	(LIB2ADD): Use patterns with the source filenames as the filter.
++
++2010-04-20  Andrew Stubbs  <ams@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-07-06  Nick Clifton  <nickc@redhat.com>
++		    DJ Delorie  <dj@redhat.com>
++
++	* config.sh/lib1funcs.h (FMOVD_WORKS): Only define if
++	__FMOVD_ENABLED__ is defined.
++	* config/sh/sh.h
++	(TARGET_FMOVD): Provide a default definition.
++	(MASK_FMOVD): Likewise.
++	(TARGET_CPU_CPP_BUILTINS): Define
++	__FMOVD_ENABLED__ if TARGET_FMOVD is true.
++	* config/sh/sh.md (movdf_i4): For alternative 0 use either one or
++	two fmov instructions depending upon whether TARGET_FMOVD is
++	enabled.
++	(split for DF load from memory into register): Also handle
++	MEMs which consist of REG+DISP addressing.
++	(split for DF store from register to memory): Likewise.
++	(movsf_ie): Always use single fp_mode.
++	* config/sh/sh.c (sh_override_options): Do not automatically
++	enable TARGET_MOVD for the SH2A when supporting doubles - leave
++	that to the -mfmovd command line switch.
++	(broken_move): Do not restrict fldi test to only the SH4 and SH4A.
++	(fldi_ok): Always allow.
++	* config/sh/sh.opt (mfmovd): Remove this switch.
++	* doc/invoke.texi (-mfmovd): Remove documentation of this switch.
++
++	2009-07-20  Christian Bruel  <christian.bruel@st.com>
++
++	gcc/
++	* config/sh/sh.opt (-mfmovd): Resurrect and document.
++	* doc/invoke.texi (-mfmovd): Likewise.
++	* config/sh/sh.h (TARGET_FMOVD, MASK_FMOVD): Remove default setting.
++
++	gcc/testsuite/
++	* gcc.target/sh/mfmovd.c: New test.
++
++2010-04-20  Andrew Stubbs  <ams@codesourcery.com>
++
++	* gcc/config/sh/sh.h (CRT_GET_RFIB_DATA): New define.
++	(ASM_PREFERRED_EH_DATA_FORMAT): Add FDPIC settings.
++	(ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): Likewise.
++
++2010-04-19  Jie Zhang  <jie@codesourcery.com>
++
++	Issue #7944
++
++	Backporting from mainline:
++
++	gcc/
++	2010-04-19  Jie Zhang  <jie@codesourcery.com>
++
++	PR target/43662
++	* reginfo.c (reinit_regs): Set caller_save_initialized_p
++	to false.
++
++	gcc/testsuite/
++	2010-04-19  Jie Zhang  <jie@codesourcery.com>
++
++	PR target/43662
++	* gcc.target/i386/pr43662.c: New test.
++
++2010-04-19  Bernd Schmidt  <bernds@codesourcery.com>
++
++	gcc/
++	* ifcvt.c (move_across_if): Delete.
++	(find_if_header): Don't call it.
++
++2010-04-17  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Issue #8442 - DImode ICE.
++
++	* release-notes-csl.xml (ARM internal compiler error fix): New note.
++
++	gcc/
++	* config/arm/arm.md (movsicc, movsfcc, movdfcc): Reverse
++	invalid DImode comparisons.
++
++	gcc/testsuite/
++	* gcc.c-torture/execute/20100416-1.c: New test.
++
++2010-04-15  Nathan Froyd  <froydnj@codesourcery.com>
++
++	libgcc/
++	* config/rs6000/divdf3.S (__divdf3): Use JUMP_TARGET instead of L.
++	* config/rs6000/muldf3.S (__muldf3): Likewise.
++
++2010-04-15  Nathan Froyd  <froydnj@codesourcery.com>
++
++	libgcc/
++	* config/rs6000/spe_muldiv_scale2.S (__spe_return_inf_mul_div):
++	New function.
++	* config/rs6000/divdf3.S (__divdf3): Call it.
++	* config/rs6000/muldf3.S (__muldf3): Likewise.
++
++2010-04-15  Nathan Froyd  <froydnj@codesourcery.com>
++
++	libgcc/
++	* config/rs6000/spe_add_exception.S: Remove .file directive.
++	* config/rs6000/spe_adddf3.S: Likewise.
++	* config/rs6000/spe_cmpdf2.S: Likewise.
++	* config/rs6000/spe_divdf3.S: Likewise.
++	* config/rs6000/spe_eqdf2.S: Likewise.
++	* config/rs6000/spe_extendsfdf2.S: Likewise.
++	* config/rs6000/spe_fixdfdi.S: Likewise.
++	* config/rs6000/spe_fixdfsi.S: Likewise.
++	* config/rs6000/spe_fixunsdfdi.S: Likewise.
++	* config/rs6000/spe_fixunsdfsi.S: Likewise.
++	* config/rs6000/spe_floatdidf.S: Likewise.
++	* config/rs6000/spe_floatsidf.S: Likewise.
++	* config/rs6000/spe_floatundidf.S: Likewise.
++	* config/rs6000/spe_floatunsidf.S: Likewise.
++	* config/rs6000/spe_gedf2.S: Likewise.
++	* config/rs6000/spe_gtdf2.S: Likewise.
++	* config/rs6000/spe_ledf2.S: Likewise.
++	* config/rs6000/spe_ltdf2.S: Likewise.
++	* config/rs6000/spe_muldf3.S: Likewise.
++	* config/rs6000/spe_muldiv_scale2.S: Likewise.
++	* config/rs6000/spe_nedf2.S: Likewise.
++	* config/rs6000/spe_neg.S: Likewise.
++	* config/rs6000/spe_subdf3.S: Likewise.
++	* config/rs6000/spe_truncdfsf2.S: Likewise.
++	* config/rs6000/spe_unord_sub.S: Likewise.
++	* config/rs6000/spe_unorddf2.S: Likewise.
++
++2010-04-13  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* regmove.c (fixup_match_2): Swap incorrect uses of src and dst.
++
++2010-04-13  Julian Brown  <julian@codesourcery.com>
++
++	* release-notes-csl.xml (Better use of NEON instructions on Cortex-A8)
++	(Optimization of ARM NEON vdupq_n* intrinsics): Fix target lines for
++	notes.
++
++2010-04-13  Julian Brown  <julian@codesourcery.com>
++
++	* release-notes-csl.xml (ARMv7-A performance improvements): Add note.
++
++2010-04-13  Bernd Schmidt  <bernds@codesourcery.com>
++
++	* release-notes-csl.xml: Document.
++
++	gcc/
++	PR target/21803
++	* ifcvt.c (cond_exec_process_if_block): Look for identical sequences
++	at the start and end of the then/else blocks, and omit them from the
++	conversion.
++	(move_across_if): New function.
++	(find_if_header): Call it.
++	* cfgcleanup.c (flow_find_cross_jump): No longer static.
++	(flow_find_head_matching_sequence): New function.
++	(old_insns_match_p): Check REG_EH_REGION notes for calls.
++	* basic-block.h (flow_find_cross_jump,
++	flow_find_head_matching_sequence): Declare functions.
++
++	gcc/testsuite/
++	PR target/21803
++	* gcc.target/arm/pr42496.c: New test.
++
++2010-04-13  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Revert buggy patch.
++
++	2010-04-04  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	PR middle-end/40815
++	gcc/
++	* tree-ssa-reassoc.c (broken_up_substracts): Rename to plus_negates.
++	(negate_value): Move code to push elements to broken_up_substracts ...
++	(eliminate_plus_minus_pair): ... here.  Push operands that have no
++	negative pair to plus_negates.
++	(repropagate_negates, init_reassoc, fini_reassoc): Update.
++	gcc/testsuite/
++	* gcc.dg/tree-ssa/reassoc-19.c: New.
++
++2010-04-11  Julian Brown  <julian@codesourcery.com>
++
++	Issue #7326
++
++	* release-notes-csl.xml (Improved code generation for
++	Cortex-A5): Add note.
++
++2010-04-11  Julian Brown  <julian@codesourcery.com>
++
++	Issue #7326
++
++	gcc/
++	* config/arm/arm.c (arm_issue_rate): Return 2 for Cortex-A5.
++	* config/arm/arm.md (generic_sched): No for Cortex-A5.
++	(generic_vfp): Likewise.
++	(cortex-a5.md): Include.
++	* config/arm/cortex-a5.md: New.
++
++2010-04-12  Andrew Stubbs  <ams@codesourcery.com>
++
++	Issue #7178
++
++	gcc/
++	* config/arm/arm.c (arm_init_libfuncs): Change __gnu_f2h_ieee to
++	__aeabi_f2h, __gnu_f2h_alternative to __aeabi_f2h_alt, __gnu_h2f_ieee
++	to __aeabi_h2f, and __gnu_h2f_alternative to __aeabi_h2f_alt.
++	* config/arm/fp16.c (__gnu_f2h_internal): Change return type to
++	unsigned int. Change 'sign' variable likewise.
++	(__gnu_h2f_internal): Set to static inline.
++	Change return type to unsigned int. Change 'sign' variable likewise.
++	(ALIAS): New define.
++	(__gnu_f2h_ieee): Change unsigned short to unsigned int.
++	(__gnu_h2f_ieee): Likewise.
++	(__gnu_f2h_alternative): Likewise.
++	(__gnu_h2f_alternative): Likewise.
++	(__aeabi_f2h, __aeabi_h2f): New aliases.
++	(__aeabi_f2h_alt, __aeabi_h2f_alt): Likewise.
++	* config/arm/sfp-machine.h (__extendhfsf2): Set to __aeabi_h2f.
++	(__truncsfhf2): Set to __aeabi_f2h.
++
++	testsuite/
++	* g++.dg/ext/arm-fp16/arm-fp16-ops-5.C: Check for __aeabi_h2f
++	and __aeabi_f2h.
++	* g++.dg/ext/arm-fp16/arm-fp16-ops-6.C: Likewise.
++	* gcc.dg/torture/arm-fp16-ops-5.c: Likewise.
++	* gcc.dg/torture/arm-fp16-ops-6.c: Likewise.
++
++2010-04-10  Jie Zhang  <jie@codesourcery.com>
++
++	Issue #8368
++
++	gcc/testsuite/
++	PR target/43417
++	* gcc.target/sh/pr43417.c: New test.
++
++2010-04-10  Bernd Schmidt  <bernds@codesourcery.com>
++
++	Issue #8388
++
++	gcc/
++	* tree-ssa-remove-local-statics.c (pass_remove_local_statics):
++	Readd TODO_rebuild_alias and TODO_update_ssa.
++
++2010-04-10  Catherine Moore  <clm@codesourcery.com>
++
++	Issue #7474
++
++	* release-notes-csl.xml: New note.
++
++	gcc/
++	* gcc/config.gcc (mips-sde-elf): Enable soft-fp.
++	* gcc/config/mips/t-fprules-softfp: New.
++	* gcc/config/mips/sfp-machine: New.
++
++	* release-notes-csl.xml: New note.
++
++2010-04-09  Jie Zhang  <jie@codesourcery.com>
++
++	Issue #8368
++
++	* release-notes-csl.xml: Document.
++
++	Backport from mainline 4.4:
++
++	gcc/
++	2010-03-21  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	Backport from mainline:
++	2009-05-12  Paolo Bonzini  <bonzini@gnu.org>
++
++	PR target/43417
++	* config/sh/sh.md (cbranchdi4_i): Use an "I08" constraint
++	instead of "i" constraint.
++
++2010-04-09  Jie Zhang  <jie@codesourcery.com>
++
++	* release-notes-csl.xml: Document.
++
++	Backport from mainline:
++
++	gcc/cp/
++	2010-04-07  Jie Zhang  <jie@codesourcery.com>
++
++	PR c++/42556
++	* typeck2.c (split_nonconstant_init_1): Drop empty CONSTRUCTOR
++	when all of its elements are non-constant and have been split out.
++
++	gcc/testsuite/
++	2010-04-07  Jie Zhang  <jie@codesourcery.com>
++
++	PR c++/42556
++	* g++.dg/init/pr42556.C: New test.
++
++2010-04-09  Jie Zhang  <jie@codesourcery.com>
++
++	Issue #8224
++
++	* release-notes-csl.xml: Document.
++
++	gcc/
++	From Richard Earnshaw  <rearnsha@arm.com>
++
++	* doc/tm.texi (OVERLAPPING_REGISTER_NAMES): Document new macro.
++	* output.h (decode_reg_name_and_count): Declare.
++	* varasm.c (decode_reg_name_and_count): New function.
++	(decode_reg_name): Reimplement using decode_reg_name_and_count.
++	* reginfo.c (fix_register): Use decode_reg_name_and_count and 
++	iterate over all regs used.
++	* stmt.c (expand_asm_operands): Likewise.
++	* config/arm/aout.h (OVERLAPPING_REGISTER_NAMES): Define.
++	(ADDITIONAL_REGISTER_NAMES): Remove aliases that overlap
++	multiple machine registers.
++
++2010-04-09  Jie Zhang  <jie@codesourcery.com>
++
++	Issue #8224
++
++	* release-notes-csl.xml: Document.
++
++	Backport from mainline:
++
++	gcc/
++	2010-03-21  Richard Earnshaw  <rearnsha@arm.com>
++
++	PR target/42321
++	* arm.c (arm_output_epilogue): Correctly match VFP pop instructions
++	with their corresponding prologue pushes.
++
++2010-04-08  Bernd Schmidt  <bernds@codesourcery.com>
++
++	* release-notes-csl.xml: Fix spelling of NEON.
++
++2010-04-08  Bernd Schmidt  <bernds@codesourcery.com>
++
++	Issue #6952
++
++	* release-notes-csl.xml: Document.
++
++	gcc/
++	* ira-costs.c (record_reg_classes): Ignore alternatives that are 
++        not enabled. 
++	* config/arm/vfp.md (arm_movdi_vfp): Enable only when not tuning
++	for Cortex-A8.
++	(arm_movdi_vfp_cortexa8): New pattern.
++	* config/arm/neon.md (adddi3_neon, subdi3_neon, anddi3_neon,
++	iordi3_neon, xordi3_neon): Add alternatives to discourage Neon
++	instructions when tuning for Cortex-A8.  Set attribute "alt_tune".
++	* config/arm/arm.md (define_attr "alt_tune", define_attr "enabled"):
++	New.
++
++2010-04-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	libgcc/
++	* config/rs6000/spe_arith.S: Remove.  Split into:
++	* config/rs6000/spe_adddf3.S: ...this.
++	* config/rs6000/spe_subdf3.S: ...this.
++	* config/rs6000/spe_muldf3.S: ...this.
++	* config/rs6000/spe_divdf3.S: ...this.
++	* config/rs6000/spe_add_exception.S: ...this.
++	* config/rs6000/spe_muldiv_scale2.S: ...and this.
++	* config/rs6000/spe_cmp.S: Remove.  Split into:
++	* config/rs6000/spe_cmpdf2.S: ...this.
++	* config/rs6000/spe_eqdf2.S: ...this.
++	* config/rs6000/spe_nedf2.S: ...this.
++	* config/rs6000/spe_gedf2.S: ...this.
++	* config/rs6000/spe_gtdf2.S: ...this.
++	* config/rs6000/spe_ledf2.S: ...this.
++	* config/rs6000/spe_ltdf2.S: ...this.
++	* config/rs6000/spe_unorddf2.S: ...this.
++	* config/rs6000/spe_unord_sub.S: ...and this.
++	* config/rs6000/spe_cnv.S: Remove.  Split into:
++	* config/rs6000/fixdfdi.S: ...this.
++	* config/rs6000/fixdfsi.S: ...this.
++	* config/rs6000/fixunsdfdi.S: ...this.
++	* config/rs6000/fixunsdfsi.S: ...this.
++	* config/rs6000/floatdidf.S: ...this.
++	* config/rs6000/floatsidf.S: ...this.
++	* config/rs6000/floatundidf.S: ...this.
++	* config/rs6000/floatunsidf.S: ...this.
++	* config/rs6000/extendsfdf2.S: ...this.
++	* config/rs6000/truncdfsf2.S: ...this.
++	* config/rs6000/t-spe-fprules (spe-files): Remove removed files.
++	Add new files.
++
++2010-04-08  Jie Zhang  <jie@codesourcery.com>
++
++	Issue #7122
++
++	gcc/
++	* config/arm/vfp.md (thumb2_movdf_vfp): Require that one of
++	the operands be a register.
++
++	gcc/testsuite/
++	* gcc.target/arm/neon-load-df0.c: Make it usable with
++	-mfloat-abi=softfp.
++
++2010-04-07  Thomas Schwinge  <thomas@codesourcery.com>
++	    Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Issue #6715
++
++	PR debug/40521
++
++	gcc/
++	* dwarf2out.c (NEED_UNWIND_TABLES): Define.
++	(dwarf2out_do_frame, dwarf2out_do_cfi_asm, dwarf2out_begin_prologue)
++	(dwarf2out_frame_finish, dwarf2out_assembly_start): Use it.
++	(dwarf2out_assembly_start): Correct logic for TARGET_UNWIND_INFO.
++	* config/arm/arm.h (DWARF2_UNWIND_INFO): Remove definition.
++	* config/arm/bpabi.h (DWARF2_UNWIND_INFO): Define to zero.
++
++2010-04-07  Jie Zhang  <jie@codesourcery.com>
++
++	Issue #7122
++
++	gcc/testsuite/
++	* gcc.target/arm/neon-vdup-1.c: Make it usable with
++	-mfloat-abi=softfp.
++	* gcc.target/arm/neon-vdup-2.c: Likewise.
++	* gcc.target/arm/neon-vdup-3.c: Likewise.
++	* gcc.target/arm/neon-vdup-4.c: Likewise.
++	* gcc.target/arm/neon-vdup-5.c: Likewise.
++	* gcc.target/arm/neon-vdup-6.c: Likewise.
++	* gcc.target/arm/neon-vdup-7.c: Likewise.
++	* gcc.target/arm/neon-vdup-8.c: Likewise.
++	* gcc.target/arm/neon-vdup-9.c: Likewise.
++	* gcc.target/arm/neon-vdup-10.c: Likewise.
++	* gcc.target/arm/neon-vdup-11.c: Likewise.
++	* gcc.target/arm/neon-vdup-12.c: Likewise.
++	* gcc.target/arm/neon-vdup-13.c: Likewise.
++	* gcc.target/arm/neon-vdup-14.c: Likewise.
++	* gcc.target/arm/neon-vdup-15.c: Likewise.
++	* gcc.target/arm/neon-vdup-16.c: Likewise.
++	* gcc.target/arm/neon-vdup-17.c: Likewise.
++	* gcc.target/arm/neon-vdup-18.c: Likewise.
++	* gcc.target/arm/neon-vdup-19.c: Likewise.
++
++2010-04-07  Jie Zhang  <jie@codesourcery.com>
++
++	Issue #7122
++
++	* release-notes-csl.xml: Document.
++
++	gcc/
++	* config/arm/arm.c (arm_rtx_costs_1): Adjust cost for
++	CONST_VECTOR.
++	(arm_size_rtx_costs): Likewise.
++	(thumb2_size_rtx_costs): Likewise.
++	(neon_valid_immediate): Add a case for double 0.0.
++
++	gcc/testsuite/
++	* gcc.target/arm/neon-vdup-1.c: New test case.
++	* gcc.target/arm/neon-vdup-2.c: New test case.
++	* gcc.target/arm/neon-vdup-3.c: New test case.
++	* gcc.target/arm/neon-vdup-4.c: New test case.
++	* gcc.target/arm/neon-vdup-5.c: New test case.
++	* gcc.target/arm/neon-vdup-6.c: New test case.
++	* gcc.target/arm/neon-vdup-7.c: New test case.
++	* gcc.target/arm/neon-vdup-8.c: New test case.
++	* gcc.target/arm/neon-vdup-9.c: New test case.
++	* gcc.target/arm/neon-vdup-10.c: New test case.
++	* gcc.target/arm/neon-vdup-11.c: New test case.
++	* gcc.target/arm/neon-vdup-12.c: New test case.
++	* gcc.target/arm/neon-vdup-13.c: New test case.
++	* gcc.target/arm/neon-vdup-14.c: New test case.
++	* gcc.target/arm/neon-vdup-15.c: New test case.
++	* gcc.target/arm/neon-vdup-16.c: New test case.
++	* gcc.target/arm/neon-vdup-17.c: New test case.
++	* gcc.target/arm/neon-vdup-18.c: New test case.
++	* gcc.target/arm/neon-vdup-19.c: New test case.
++
++2010-04-05  Nathan Froyd  <froydnj@codesourcery.com>
++
++	gcc/
++	* config.gcc (powerpc-*-eabi*): Use soft-fp/t-softfp.
++
++2010-04-04  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	PR middle-end/40815
++
++	gcc/
++	* tree-ssa-reassoc.c (broken_up_substracts): Rename to plus_negates.
++	(negate_value): Move code to push elements to broken_up_substracts ...
++	(eliminate_plus_minus_pair): ... here.  Push operands that have no
++	negative pair to plus_negates.
++	(repropagate_negates, init_reassoc, fini_reassoc): Update.
++	gcc/testsuite/
++	* gcc.dg/tree-ssa/reassoc-19.c: New.
++
++2010-04-02  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7937
++
++	* release-notes-csl.xml: New note.
++
++	libgcc/
++	* configure.ac: Check for __SPE__ when compiling for powerpc*.
++	* configure: Regenerate.
++	* config.host: Add t-spe-fprules if compiling for SPE.
++	* config/rs6000/t-spe-fprules: New file.
++	* config/rs6000/spe_arith.S: New file.
++	* config/rs6000/spe_cmp.S: New file.
++	* config/rs6000/spe_cnv.S: New file.
++	* config/rs6000?spe_neg.S: New file.
++
++2010-04-02  Nathan Froyd  <froydnj@codesourcery.com>
++
++	gcc/
++	* config.gcc (powerpc-*-eabi*): Use rs6000/t-fprules-softfp.
++
++2010-04-01  Nathan Sidwell  <nathan@codesourcery.com>
++
++	gcc/
++	* config/arm/nucleus.h (LINK_SPEC): Add -z defs alongside -shared.
++
++2010-04-01  Jie Zhang  <jie@codesourcery.com>
++
++	Issue #7944
++
++	* release-notes-csl.xml: Document.
++
++	Backporting from mainline:
++
++	gcc/
++	2010-03-31  Jie Zhang  <jie@codesourcery.com>
++
++	PR 43562
++	* reload.h (caller_save_initialized_p): Declare.
++	* toplev.c (backend_init_target): Don't call
++	init_caller_save but set caller_save_initialized_p
++	to false.
++	* caller-save.c (caller_save_initialized_p): Define.
++	(init_caller_save): Check caller_save_initialized_p.
++	* ira.c (ira): Call init_caller_save if flag_caller_saves.
++
++	gcc/testsuite/
++	2010-03-31  Jie Zhang  <jie@codesourcery.com>
++
++	PR 43562
++	* gcc.dg/pr43562.c: New test.
++
++2010-04-01  Jie Zhang  <jie@codesourcery.com>
++
++	Issue #8315
++
++	Backport from mainline:
++
++	gcc/cp/
++	2009-12-15  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/41183
++	* cp-tree.h (current_class_ptr): Give NULL even when cfun
++	has NULL cfun->language.
++
++	gcc/testsuite/
++	2009-12-15  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/41183
++	* g++.dg/torture/pr41183.C: New test.
++
++2010-03-31  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport from FSF:
++
++	gcc/
++	2009-10-10  Peter Bergner  <bergner@vnet.ibm.com>
++
++	* configure.ac: Add test for dci instruction.
++	* configure: Regenerate.
++	* config.in: Likewise.
++	* config.gcc: Handle --with-cpu=476 and --with-cpu=476fp.
++	* doc/invoke.texi: Add cpu_type 476 and 476fp.
++	(-mmulhw): Add 476 to description.
++	(-mdlmzb): Likewise.
++	* config/rs6000/t-fprules (MULTILIB_MATCHES_FLOAT): Include -mcpu=476.
++	* config/rs6000/rs6000.c (processor_costs): Add ppc476_cost.
++	(processor_target_table): Add 476 and 476fp entries.
++	(rs6000_override_options): Use ppc476_cost for PROCESSOR_PPC476.
++	(rs6000_issue_rate): Add CPU_PPC476.
++	* config/rs6000/rs6000.h (ASM_CPU_476_SPEC): Define.
++	(ASM_CPU_SPEC): Pass %(asm_cpu_476) for -mcpu=476 and -mcpu=476fp.
++	(processor_type): Add PROCESSOR_PPC476.
++	(EXTRA_SPECS): Add asm_cpu_476 string.
++	* config/rs6000/rs6000.md: (define_attr "type"): Add isel attribute.
++	(define_attr "cpu"): Add ppc476.
++	Include 476.md.
++	Update comments for 476.
++	(isel_signed, isel_unsigned): Change to use "isel" type attribute.
++	* config/rs6000/vxworks.h (CPP_SPEC): Handle 464 and 476.
++	Update copyright year.
++	* config/rs6000/476.md: New file.
++	* config/rs6000/40x.md: Add description for "isel" attribute.
++	Update copyright year.
++	* config/rs6000/440.md: Likewise.
++	* config/rs6000/603.md: Likewise.
++	* config/rs6000/6xx.md: Likewise.
++	* config/rs6000/7450.md: Likewise.
++	* config/rs6000/7xx.md: Likewise.
++	* config/rs6000/8540.md: Likewise.
++	* config/rs6000/cell.md: Likewise.
++	* config/rs6000/e300c2c3.md: Likewise.
++	* config/rs6000/e500mc.md: Likewise.
++	* config/rs6000/mpc.md: Likewise.
++	* config/rs6000/power4.md: Likewise.
++	* config/rs6000/power5.md: Likewise.
++	* config/rs6000/power6.md: Likewise.
++	* config/rs6000/power7.md: Likewise.
++	* config/rs6000/rios1.md: Likewise.
++	* config/rs6000/rios2.md: Likewise.
++	* config/rs6000/rs64.md: Likewise.
++
++2010-03-30  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #5851
++
++	Backport:
++
++	gcc/
++	2009-06-16  J"orn Rennecke  <joern.rennecke@arc.com>
++		    Janis Johnson  <janis187@us.ibm.com>
++
++	PR target/39254
++	* config/rs6000/rs6000.c (rs6000_emit_move): Don't emit a USE
++	for the symbol ref of a constant that is the source of a move
++	- nor for any other not-obvious-label-ref constants.
++
++2010-03-30  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/arm/t-wrs-linux (MULTILIB_OPTIONS, MULTILIB_DIRNAMES,
++	MULTILIB_EXCEPTIONS, MULTILIB_MATCHES, MULTILIB_ALIASES): Remove
++	handling of -tiwmmxt, -txscale, -tarm920t, -tthumb2 and
++	-tcortex-a8-be8.
++	* config/arm/wrs-linux.h (CC1_SPEC): Remove handling of -tiwmmxt,
++	-txscale, -tarm920t, -tthumb2 and -tcortex-a8-be8.
++	(SUBTARGET_EXTRA_ASM_SPEC, SUBTARGET_EXTRA_LINK_SPEC): Remove.
++	(SYSROOT_SUFFIX_SPEC): Remove handling of -tiwmmxt, -txscale,
++	-tarm920t, -tthumb2 and -tcortex-a8-be8.
++
++2010-03-30  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/mips/t-octeon-elf (MULTILIB_OPTIONS, MULTILIB_DIRNAMES,
++	MULTILIB_EXCEPTIONS): Add Octeon II multilibs.
++	* config/mips/t-wrs-linux (MULTILIB_OPTIONS, MULTILIB_DIRNAMES,
++	MULTILIB_EXCEPTIONS, MULTILIB_OSDIRNAMES): Add Octeon II
++	multilibs.
++	* config/mips/wrs-linux.h (SYSROOT_SUFFIX_SPEC): Handle
++	-march=octeon2.
++
++2010-03-26  Jie Zhang  <jie@codesourcery.com>
++
++	Issue #7127
++
++	* release-notes-csl.xml: Document.
++
++	Backport from mainline:
++
++	gcc/cp/
++	2010-02-12  Jason Merrill  <jason@redhat.com>
++
++	PR c++/43024
++	* name-lookup.h (current_binding_level): Check for null
++	cp_function_chain.
++
++	gcc/testsuite/
++	2010-02-14  Volker Reichelt  <reichelt@gcc.gnu.org>
++
++	PR c++/43024
++	* g++.dg/opt/ice1.C: New.
++
++2010-03-24  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #7919
++
++	Backport:
++
++	fixincludes/
++	2010-03-24  Joseph Myers  <joseph@codesourcery.com>
++
++	* inclhack.def (glibc_strncpy): New fix.
++	* fixincl.x: Regenerate.
++	* tests/base/bits/string2.h: Update.
++
++	gcc/testsuite/
++	2010-03-24  Joseph Myers  <joseph@codesourcery.com>
++
++	* gcc.dg/strncpy-fix-1.c: New test.
++
++2010-03-23  Catherine Moore  <clm@codesourcery.com>
++
++	gcc/
++	* config/mips/mips.c (mips_cpu_info_table): Add m14kc.
++
++2010-03-21  Andrew Jenner  <andrew@codesourcery.com>
++
++	Issue #8092
++
++	libgfortran/
++	* io/unix.c (tempfile): Check fd for -1, not negative.
++	(regular_file): Likewise.
++	(open_external): Likewise.
++	(fallback_access): Likewise.
++
++2010-03-18  Jie Zhang  <jie@codesourcery.com>
++
++	Issue #7122
++
++	* release-notes-csl.xml: Document.
++
++	gcc/
++	* config/arm/vfp.md (movdf_vfp): Add load double 0.0 case.
++	(thumb2_movdf_vfp): Likewise.
++	* config/arm/constraints.md (D0): New constraint.
++
++	gcc/testsuite/
++	* gcc.target/arm/neon-load-df0.c: New test.
++
++2010-03-17  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #8002
++
++	* release-notes-csl.xml (Incorrect code generation bug fix): New note.
++
++	Backport from mainline:
++
++	gcc/
++	2009-11-30  Chao-ying Fu  <fu@mips.com>
++
++	* config/mips/mips-dsp.md (mips_lhx_<mode>): Use sign_extend.
++
++	gcc/testsuite/
++	2009-11-30  Chao-ying Fu  <fu@mips.com>
++
++	* gcc.target/mips/dsp-lhx.c: New test.
++	* gcc.target/mips/dsp-no-lhx.c: New test.
++
++2010-03-12  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/arm/t-wrs-linux (MULTILIB_EXCEPTIONS,  MULTILIB_ALIASES):
++	Enable -muclibc -tthumb2-v7-a-neon multilib.
++
++2010-03-11  Jie Zhang  <jie@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (arm_file_start): Remove unused
++	set_float_abi_attributes.
++
++2010-03-11  Jie Zhang  <jie@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (thumb2_size_rtx_costs): Add missing
++	GET_CODE ().
++
++2010-03-11  Jie Zhang  <jie@codesourcery.com>
++
++	Backport from upstream:
++
++	gcc/
++	2010-03-09  Jie Zhang  <jie@codesourcery.com>
++
++	* config/arm/arm.md (thumb_mulsi3_v6): Remove trailing
++	whitespaces in output template.
++
++2010-03-11  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Issue #7999
++
++	libstdc++/
++	* configure.host (arm*-*-nucleauseabi): Add arm-eabi-extra.ver.
++	* config/os/nucleus/arm-eabi-extra.ver: New.
++
++2010-03-10  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/arm/t-wrs-linux (MULTILIB_OPTIONS, MULTILIB_DIRNAMES,
++	MULTILIB_EXCEPTIONS, MULTILIB_ALIASES): Add v7-A multilibs.
++	* config/arm/wrs-linux.h (CC1_SPEC, SYSROOT_SUFFIX_SPEC):
++	Likewise.
++
++2010-03-09  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Revert:
++
++	gcc/
++	2010-03-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	* config/rs6000/rs6000.md (define_insn ""): Disable on TARGET_ISEL targets.
++
++2010-03-09  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Issue #7940
++	Backport 2009-10-14  Jakub Jelinek  <jakub@redhat.com>
++	
++	gcc/
++	PR preprocessor/41543
++	* input.h (BUILTINS_LOCATION): Change to 1 from 2.
++	Assert BUILTINS_LOCATION < RESERVED_LOCATION_COUNT.
++	* tree.c: Include intl.h.
++	(expand_location): Handle BUILTINS_LOCATION.
++	* Makefile.in (tree.o): Depend on intl.h.
++
++	gcc/testsuite/
++	PR preprocessor/41543
++	* gcc.dg/debug/dwarf2/pr41543.c: New test.
++
++	libcpp/
++	PR preprocessor/41543
++	* include/line-map.h (RESERVED_LOCATION_COUNT): Define.
++	* line-map.c (linemap_init): Initialize highest_location and
++	highest_line to RESERVED_LOCATION_COUNT-1 instead of 0.
++
++	* release-notes-csl.xml: Document.
++
++2010-03-09  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++
++	gcc/testsuite/
++	2009-12-07  Edmar Wienskoski  <edmar@freescale.com>
++
++	* gcc.target/powerpc/ppc-eq0-1.c: Adjust testcase for isel
++	targets.
++
++2010-03-09  Nathan Froyd  <froydnj@codesourcery.com>
++
++	gcc/testsuite/
++	* gcc.target/powerpc/block-move-1.c (memcpy): Declare.
++	* gcc.target/powerpc/block-move-2.c (memcpy): Likewise.
++
++2010-03-09  Paul Brook  <paul@codesourcery.com>
++
++	* release-notes-csl.xml: Add missing Cortex-M4 note.
++
++2010-03-08  Paul Brook  <paul@codesourcery.com>
++
++	gcc/
++	* doc/invoke.texi: Document ARM -mcpu=cortex-m4.
++	* config/arm/arm.c (all_architectures): Change v7e-m default to
++	cortexm4.
++	* config/arm/arm-cores.def: Add cortex-m4.
++	* config/arm/arm-tune.md: Regenerate.
++
++2010-03-08  Paul Brook  <paul@codesourcery.com>
++
++	gcc/
++	* config/arm/t-cs-eabi (MULTILIB_MATCHES): Add cortex-m4.
++	* config/arm/t-cs-eabi-lite (MULTILIB_MATCHES): Ditto.
++	* config/arm/t-cs-uclinux-eabi (MULTILIB_MATCHES): Ditto.
++
++2010-03-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7183
++
++	* config/rs6000/rs6000.c (rs6000_emit_int_cmove): Don't force_reg on
++	const0_rtx operand.
++	* config/rs6000/rs6000.md (isel_signed, isel_unsigned): Permit
++	const_int 0 for the second operand; make third operand slightly more
++	lenient.
++	(define_insn ""): Disable on TARGET_ISEL targets.
++
++2010-03-08  Julian Brown  <julian@codesourcery.com>
++
++	* release-notes-csl.xml (Thumb-2 size optimization improvements): Add
++	note.
++
++2010-03-05  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7183
++
++	* release-notes-csl.xml: New notes.
++
++	gcc/
++	* doc/invoke.texi (mblock-move-inline-limit): Tweak @opindex directive.
++	Tweak text to reflect target-specific setting of this option.
++
++2010-03-05  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7792
++
++	Backport from upstream:
++
++	gcc/
++	2009-09-10  Nathan Froyd  <froydnj@codesourcery.com>
++
++	* config/rs6000/rs6000.h (DATA_ALIGNMENT): Check that we are dealing
++	with actual SPE/paired vector modes before using 64-bit alignment.
++	Check that TYPE is a REAL_TYPE for TARGET_E500_DOUBLE.
++
++2010-03-04  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7183
++
++	gcc/
++	* config/rs6000/rs6000.c (rs6000_emit_int_cmove): Change prototype.
++	Ensure that isel pattern is only emitted with proper conditions.
++	(rs6000_emit_cmove): Change call to rs6000_emit_int_cmove to match.
++	(output_isel): Check that condition is LT, GT, LTU, GTU, or EQ.
++	(rs6000_emit_sISEL): New function.
++	(rs6000_emit_sCOND): Call it if computing an SImode result.
++	(rs6000_rtx_costs): Alter costs for comparisons for TARGET_ISEL.
++	* config/rs6000/rs6000.md (abssi2_isel): Change pattern to use
++	lt rather than ge.
++	(isel_signed, isel_unsigned): Tighten constraints on comparison
++	operator.
++	(sne, sge, sgt, sle, slt): Check TARGET_ISEL.
++
++2010-03-04  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7183
++
++	gcc/
++	* config/rs6000/rs6000.opt (mblock-move-inline-limit=): New option.
++	* config/rs6000/rs6000.c (rs6000_override_options): Set
++	rs6000_block_move_inline_limit.
++	* doc/invoke.texi (-mblock-move-inline-limit): Document.
++	
++	gcc/testsuite/
++	* gcc.target/powerpc/block-move-1.c: New test.
++	* gcc.target/powerpc/block-move-2.c: New test.
++
++2010-03-02  Nathan Froyd  <froydnj@codesourcery.com>
++
++	gcc/
++	* tree-ssa-remove-local-statics.c (check_definedness): Pass NO_INSERT
++	to htab_find_slot.  Make necessary changes as a result of doing so.
++	(compute_definedness_for_block): Likewise.
++
++2010-03-02  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Issue #7928
++	
++	* libtool.4 (nucleuseabi): Set deplibs check method.
++
++	libstdc++-v3/
++	* configure: Rebuilt.
++
++2010-03-01  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7788
++
++	gcc/
++	* tree-ssa-remove-local-statics.c (check_definedness): Dump the
++	defined bitmap and information about the decl if debugging.
++	Do not clear the hash table slot; instead, set decl->optimizable_p
++	to false.
++	(unstaticize_variable): Finish if we can't optimize.
++	(execute_rls): Only do TODO_rebuild_alias and TODO_update_ssa if
++	we optimized anything.
++	(pass_remove_local_statics): Remove TODO_rebuild_alias and
++	TODO_update_ssa.
++
++2010-02-28  Mark Mitchell  <mark@codesourcery.com>
++
++	Issue #7791
++
++	Backport from mainline:
++
++	gcc/cp/
++	2010-02-27  Mark Mitchell  <mark@codesourcery.com>
++
++	PR c++/42748
++	* cp-tree.h (push_tinst_level): Declare.
++	(pop_tinst_level): Likewise.
++	* pt.c (push_tinst_level): Give it external linkage.
++	(pop_tinst_level): Likewise.
++	* mangle.c (mangle_decl_string): Set the source location to that
++	of the decl while mangling.
++
++	gcc/testsuite/
++	2010-02-27  Mark Mitchell  <mark@codesourcery.com>
++
++	PR c++/42748
++	* g++.dg/abi/mangle11.C: Adjust mangling warning locations.
++	* g++.dg/abi/mangle12.C: Likewise.
++	* g++.dg/abi/mangle20-2.C: Likewise.
++	* g++.dg/abi/mangle17.C: Likewise.
++	* g++.dg/template/cond2.C: Likewise.
++	* g++.dg/template/pr35240.C: Likewise.
++
++2010-02-25  Daniel Jacobowitz  <dan@codesourcery.com>
++	    Pedro Alves  <pedro@codesourcery.com>
++
++	libiberty/
++	* cygpath.c (IMAGE_IMPORT_MODULE_DIRECTORY)
++	(PIMAGE_IMPORT_MODULE_DIRECTORY, IMAGE_DIRECTORY_ENTRY_IMPORT): New.
++	(msvcrt_dll): Use GetModuleHandle instead of
++	LoadLibrary.  Check the import table to figure out which C
++	runtime to use.
++	(msvcrt_stat): New function.  Check for _stat32, _stat64i32,
++	and _stat.
++	(stat): Use msvcrt_stat.
++
++2010-02-25  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* config/sh/sh.c (sh_output_mi_thunk): Adjust sibcalls for FDPIC.
++	* config/sh/sh.md (sibcalli_pcrel): Add !TARGET_FDPIC condition.
++	(sibcalli_pcrel_fdpic): New insn.
++	(sibcall_pcrel_fdpic): New insn.
++	(sibcall): Adjust for FDPIC.
++	(sibcall_valuei_pcrel): Add !TARGET_FDPIC condition.
++	(sibcall_valuei_pcrel_fdpic): New insn.
++	(sibcall_value_pcrel): Add !TARGET_FDPIC condition.
++	(sibcall_value_pcrel_fdpic): New insn.
++	(sibcall_value): Adjust for FDPIC.
++
++2010-02-25  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	gcc/
++	* tree.c (initializer_zerop): Handle STRING_CST.
++
++2010-02-24  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* config/sh/sh.c (legitimize_pic_address): Use GOTFUNCDESC for weak
++	symbols.
++
++2010-02-24  Catherine Moore  <clm@codesourcery.com>
++
++	gcc/
++	* config/mips/t-sgxx-linux (MULTILIB_EXTRA_OPTS): Remove.
++	* config/mips/t-sgxxlite-linux (MULTILIB_EXTRA_OPTS): Remove.
++
++2010-02-24  Catherine Moore  <clm@codesourcery.com>
++
++	gcc/
++	* config/mips/linux.h (SUBTARGET_CC1_SPEC): Pass -mno-jals
++	in the absence of -mjals.
++	* config/mips/mips.opt (mjals): Fix typo.
++
++	* release-notes-csl.xml: Document.
++
++2010-02-23  Julian Brown  <julian@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (thumb2_size_rtx_costs): New.
++	(arm_rtx_costs): Call above for Thumb-2.
++
++2010-02-23  Julian Brown  <julian@codesourcery.com>
++
++	gcc/
++	* calls.c (precompute_register_parameters): Avoid generating a
++	register move if optimizing for size.
++
++2010-02-20  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/mips/linux-unwind.h (mips_fallback_frame_state): Return
++	early if pc not 4-byte aligned.
++
++2010-02-19  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* configure.ac (gcc_cv_libc_provides_ssp): Set to yes for
++	GNU/Linux targets with libssp disabled.
++	* configure: Regenerate.
++
++2010-02-19  Julian Brown  <julian@codesourcery.com>
++
++	Issue #7760
++
++	gcc/cp/
++	* mangle.c (mangle_decl_string): Set input location to location of
++	decl.
++
++2010-02-18  Maciej W. Rozycki  <macro@codesourcery.com>
++
++	* release-notes-csl.xml: s/M14KC/M14Kc/.
++
++2010-02-17  Nathan Sidwell  <nathan@codesourcery.com>
++
++	gcc/
++	* config/arm/nucleus.h (STARTFILE_SPEC, ENDFILE_SPEC): Add shared
++	crtbegin, crtend bits.
++	* config/arm/t-nucleus: New.
++	* config.gcc (arm-samsung-nucleuseabi): Add t-nucleus fragment.
++
++2010-02-16  Paul Brook  <paul@codesourcery.com>
++
++	gcc/
++	* config.gcc (arm*-*-symbianelf*): Add t-bpabi to t-symbian.
++	* config/arm/symbian.h (RENAME_LIBRARY): Remove.
++	* config/arm/lib1funcs.asm: Remove __symbian__ conditionals.
++	* config/arm/libunwind.S: Ditto.
++	* config/arm/t-symbian (LIB1ASMFUNCS): Remove.
++	(UNWIND_H, LIB2ADDEH, LIB2ADDEHDEP): Remove.
++	(LIB2FUNCS_STATIC_EXTRA): Remove.
++	(LIB2FUNCS_EXTRA): Add eabi-memcpy.c and eabi-memset.c.
++	* config/arm/eabi-memcpy.c: New file.
++	* config/arm/eabi-memset.c: New file.
++
++	libstdc++-v3/
++	* libsupc++/Makefile.am (sources): Add vec.cc when LIBSUPCXX_PRONLY.
++	* libsupc++/Makefile.in: Regenerate.
++
++2010-02-16  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	libiberty/
++	* cygpath.c (cygpath): If cygpath exits, retry on the next request.
++
++2010-02-16  Sandra Loosemore  <sandra@codesourcery.com>
++
++	* release-notes-csl.xml: Document microMIPS.
++
++2010-02-15  Julian Brown  <julian@codesourcery.com>
++
++	Issue #7329
++
++	* release-notes-csl.xml (Improved code generation for Cortex-A9): Add
++	note.
++
++	Backport from mainline:
++
++	Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
++
++	gcc/
++	* config/arm/cortex-a9.md: New - integer pipeline description.
++
++2010-02-15  Julian Brown  <julian@codesourcery.com>
++
++	Issue #7486
++
++	gcc/
++	* config/arm/arm.c (arm_libcall_value, arm_init_cumulative_args):
++	Use correct ABI for double-precision helper functions in hard-float
++	mode if only single-precision arithmetic is supported in hardware.
++
++2010-02-11  Julian Brown  <julian@codesourcery.com>
++
++	Issue #3685
++
++	* release-notes-csl.xml (Thumb-2 function call optimization): Add
++	note.
++
++2010-02-11  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* config/sh/uclinux.h (STARTFILE_SPEC): Append FDPIC_STARTFILE_SPEC.
++	(FDPIC_STARTFILE_SPEC): New define.
++
++2010-02-09  Julian Brown  <julian@codesourcery.com>
++	    Mark Mitchell  <mark@codesourcery.com>
++
++	Issue #3685
++
++	gcc/
++	* config/arm/arm.c (arm_function_ok_for_sibcall): Allow sibling
++	calls for Thumb-2.
++	(output_return_instruction): Use pop not ldmfd for Thumb-2.
++	* config/arm/arm.h (USE_RETURN_INSN): Enable for Thumb-2.
++	* config/arm/arm.md (*call_symbol, *call_value_symbol): Use for
++	Thumb-2.
++	(*call_insn, *call_value_insn): Don't use for Thumb-2.
++	(sibcall, sibcall_value, *sibcall_insn, *sibcall_value_insn): Use
++	for Thumb-2.
++	(return): New expander.
++	(*arm_return): New name for ARM return insn.
++	(*thumb2_return): New insn pattern.
++
++2010-02-09  Julian Brown  <julian@codesourcery.com>
++
++	Issue #7336, #7568
++
++	* release-notes-csl.xml (Thumb-2 internal compiler error fix)
++	(Thumb-2 multiply fix): New notes.
++
++2010-02-09  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/mips/t-sgxxlite-linux (MULTILIB_OPTIONS,
++	MULTILIB_DIRNAMES): Add microMIPS multilibs.
++	(MULTILIB_EXCEPTIONS, MULTILIB_EXTRA_OPTS): New.
++	* config/mips/cs-sgxxlite-linux.h (SYSROOT_SUFFIX_SPEC): Update.
++	* config/mips/t-sgxx-linux (MULTILIB_OPTIONS, MULTILIB_DIRNAMES,
++	MULTILIB_EXCEPTIONS): Add microMIPS multilibs.
++	(MULTILIB_EXTRA_OPTS): New.
++	* config/mips/cs-sgxx-linux.h (SYSROOT_SUFFIX_SPEC): Update.
++
++2010-02-09  Nathan Sidwell  <nathan@codesourcery.com>
++
++	gcc/
++	* config/arm/nucleus.h (LINK_SPEC): Check -shared too.
++
++2010-02-05  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++
++	gcc/
++	2009-06-25  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR target/38731
++	* config/rs6000/rs6000.c (LOCAL_ALIGNMENT): Redefine to just use
++	DATA_ALIGNMENT instead.
++
++2010-02-05  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7587
++
++	* release-notes-csl.xml: New note.
++
++	Backport from mainline:
++
++	gcc/
++	2010-02-05  Nathan Froyd  <froydnj@codesourcery.com>
++	
++	* config/rs6000/rs6000.c (rs6000_override_options): Invert check
++	for rs6000_gen_cell_microcode.
++
++2010-02-04  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Issue #7660
++
++	gcc/
++	* config/arm/arm.h (FUNCTION_BOUNDARY): Set minimal allowed alignment
++	for THUMB mode when optimizing for space.
++
++2010-02-04  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Backport from mainline (for thumb2 size reduction):
++
++	gcc/
++	2009-11-22  Richard Earnshaw  <rearnsha@arm.com>
++	* opts.c (decode_options): Don't enable flag_schedule_insns 
++	when optimizing for size.
++	* doc/invoke.texi: Document change.
++
++2010-02-04  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Issue #7197 - backtrace() through throw()
++
++	* release-notes-csl.xml (Improved backtrace function): New
++	note.
++
++	libstdc++-v3/
++	* libsupc++/eh_personality.cc (PERSONALITY_FUNCTION): For
++	ARM EABI, skip handlers for _US_VIRTUAL_UNWIND_FRAME
++	| _US_FORCE_UNWIND.
++
++2010-02-03  Daniel Gutson  <dgutson@codesourcery.com>
++
++	Issue #6472
++
++	gcc/
++	* config/arm/lib1funcs.asm (__ARM_ARCH__): __ARM_ARCH_7EM__
++	added to the preprocessor condition.
++
++2010-02-02  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/mips/linux.h (SUBTARGET_OVERRIDE_OPTIONS): Set
++	TARGET_INTERLINK_MIPS16.
++
++2010-02-01  Julian Brown  <julian@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.md (*arm_cmpdi_insn, *arm_cmpdi_zero)
++	(*thumb_cmpdi_zero): Remove extraneous parallel around rtx patterns.
++
++2010-01-29  Nathan Sidwell  <nathan@codesourcery.com>
++
++	* libtool.m4 (nucleus*): Add shared library logic.
++
++	gcc/
++	* config.gcc (arm*-*-nucleuseabi*): Add nucleus and shared library
++	logic.
++	* config/arm/nucleus.h: New.
++
++	libstdc++-v3/
++	* configure: Regenerated.
++
++2010-01-24  Mark Mitchell  <mark@codesourcery.com>
++
++	Backport from mainline:
++	
++	2010-01-24  Mark Mitchell  <mark@codesourcery.com>
++
++	PR c++/42748
++	* config/arm/arm.c (arm_mangle_type): Do not warn about changes to
++	mangling of va_list in system headers.
++
++	2010-01-24  Mark Mitchell  <mark@codesourcery.com>
++
++	PR c++/42748
++	* g++.dg/abi/arm_va_list2.C: New test.
++	* g++.dg/abi/arm_va_list2.h: Companion header file.
++
++	* release-notes-csl.xml: Document.
++	
++2010-01-13  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #6401
++
++	Backport from mainline:
++
++	boehm-gc/
++	2009-07-17  Michael Meissner  <meissner@linux.vnet.ibm.com>
++
++	PR boehm-gc/40785
++	* include/private/gc_locks.h (GC_test_and_set): If GCC 4.4, use
++	the __sync_lock_test_and _set and __sync_lock_release builtins on
++	the powerpc.  If not GCC 4.4, fix up the constraints so that it
++	builds without error.
++	(GC_clear): Ditto.
++
++2010-01-11  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #6964
++	* release-notes-csl.xml (Improved NEON code generation): New note.
++
++2010-01-11  Maciej W. Rozycki  <macro@codesourcery.com>
++
++	Issue #4656
++	Backport from FSF:
++
++	gcc/
++	2009-04-18  Adam Nemet  <anemet@caviumnetworks.com>
++	* config/mips/mips.c (mips_final_postscan_insn): Make it static.
++
++	gcc/
++	2009-04-10  Chao-ying Fu  <fu@mips.com>
++	* doc/tm.texi (Instruction Output): Document
++	TARGET_ASM_FINAL_POSTSCAN_INSN.
++	* target.h (final_postscan_insn): New field in asm_out.
++	* target-def.h (TARGET_ASM_FINAL_POSTSCAN_INSN): New define.
++	(TARGET_ASM_OUT): Add TARGET_ASM_FINAL_POSTSCAN_INSN.
++	* final.c (final_scan_insn): Call
++	targetm.asm_out.final_postscan_insn after outputting
++	an asm macro and a normal instruction.
++
++	* config/mips/mips.h (FINAL_PRESCAN_INSN): New define.
++	* config/mips/mips-protos.h (mips_final_prescan_insn): Declare.
++	* config/mips/mips.c (mips_at_reg_p): New for_each_rtx callback.
++	(mips_final_prescan_insn, mips_final_postscan_insn): New functions.
++	(TARGET_ASM_FINAL_POSTSCAN_INSN): New define.
++
++	* release-notes-csl.xml
++	(Interrupt handler code generation bug fix): New.
++
++2010-01-08  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #6964
++
++	gcc/
++	* config/arm/neon.md (UNSPEC_VADD): Delete.
++	(UNSPEC_VMLA): Delete.
++	(UNSPEC_VMLS): Delete.
++	(UNSPEC_VMUL_N): Delete.
++	(UNSPEC_VSUB): Delete.
++	(adddi3_neon): New.
++	(subdi3_neon): New.
++	(mul<mode>3add<mode>_neon): Make a named insn.
++	(mul<mode>3<neg>add<mode>_neon): Likewise.
++	(neon_vadd<mode>): Turn into define_expand, get rid of unspec.
++	(neon_vmla<mode>): Likewise.
++	(neon_vmls<mode>): Likewise.
++	(neon_vsub<mode>): Likewise.
++	* config/arm/arm.md (arm_adddi3): Don't use for TARGET_NEON.
++	(arm_subdi3): Likewise.
++
++2010-01-08  Chao-ying Fu  <fu@mips.com>
++	    Catherine Moore  <clm@codesourcery.com>
++
++	gcc/
++	* config/mips/mips-protos.h (micromips_load_store_pair_p): Add
++	argument.
++	* config/mips/mips.c (micromips_load_store_pair_p): New
++	argument swap_p.  Check for base + offset.  Check for
++	anti-dependence.
++	* config/mips/micromips.md: Adjust callers of
++	micromips_load_store_p to pass additional argument.
++	
++2010-01-08  Daniel Jacobowitz  <dan@codesourcery.com>
++	    Julian Brown  <julian@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (arm_canonicalize_comparison): Canonicalize DImode
++	comparisons.  Adjust to take both operands.
++	(arm_select_cc_mode): Handle DImode comparisons.
++	(arm_gen_compare_reg): Generate a scratch register for DImode
++	comparisons which require one.  Use xor for Thumb equality checks.
++	(arm_const_double_by_immediates): New.
++	(arm_print_operand): Allow 'Q' and 'R' for constants.
++	(get_arm_condition_code): Handle new CC_CZmode and CC_NCVmode.
++	* config/arm/arm.h (CANONICALIZE_COMPARISON): Always use
++	arm_canonicalize_comparison.
++	* config/arm/arm-modes.def: Add CC_CZmode and CC_NCVmode
++	* config/arm/arm-protos.h (arm_const_double_by_immediates): Declare.
++	(arm_canonicalize_comparison): Update prototype.
++	* config/arm/constraints.md (Di): New constraint.
++	* config/arm/predicates.md (arm_immediate_di_operand)
++	(arm_di_operand, cmpdi_operand): New.
++	* config/arm/arm.md (*arm_cmpdi_insn, *arm_cmpdi_unsigned)
++	(*arm_cmpdi_zero, *thumb_cmpdi_zero): New insns.
++	(cmpdi): Handle non-Cirrus also.
++	(bgt, ble, bgtu, bleu, sgt, sle, sgtu, sleu): Reverse DImode
++	comparisons.
++
++2010-01-08  Julian Brown  <julian@codesourcery.com>
++
++	gcc/
++	* config/arm/thumb2.md (*thumb2_addsi3_compare0): New.
++	(*thumb2_addsi3_compare0_scratch): New.
++	* config/arm/constraints.md (Pu): New.
++	* config/arm/arm.md (*addsi3_compare0): Remove FIXME comment. Use
++	for ARM mode only.
++	(*addsi3_compare0_scratch): Likewise.
++
++2010-01-07  Julian Brown  <julian@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-12-05  Richard Earnshaw  <rearnsha@arm.com>
++
++	gcc/
++	* config/arm/thumb2.md (thumb2_mulsi_short_compare0_scratch): Use a
++	low register for the scratch.
++
++2010-01-07  Julian Brown  <julian@codesourcery.com>
++
++	Issue #7336
++	Backport from mainline:
++
++	2009-12-02  Richard Earnshaw  <rearnsha@arm.com>
++
++	gcc/
++	* config/arm/thumb2.md (thumb_andsi_not_shiftsi_si): Final condition
++	should be TARGET_THUMB2.
++
++2010-01-06  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Issue #7450
++
++	* release-notes-csl.xml (-pthread compiler option fix): New note.
++
++	gcc/
++	* config/m68k/uclinux.h (LIB_SPEC): Bring in sync with config/linux.h.
++
++2010-01-05  Joseph Myers  <joseph@codesourcery.com>
++
++	* configure.ac: Handle arm*-*-nucleuseabi.
++	* configure: Regenerate.
++
++	gcc/
++	* config.gcc: Handle arm*-*-nucleuseabi*.
++
++	libgcc/
++	* config.host: Handle arm*-*-nucleuseabi*.
++
++2010-01-02  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/mips/t-sgxx-linux (MULTILIB_OPTIONS, MULTILIB_DIRNAMES,
++	MULTILIB_EXCEPTIONS): Add microMIPS multilibs.
++	(MULTILIB_EXTRA_OPTS): New.
++	* config/mips/cs-sgxx-linux.h (SYSROOT_SUFFIX_SPEC): Update.
++
++2009-12-30  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/mips/t-sgxxlite-linux (MULTILIB_OPTIONS,
++	MULTILIB_DIRNAMES): Add microMIPS multilibs.
++	(MULTILIB_EXCEPTIONS, MULTILIB_EXTRA_OPTS): New.
++	* config/mips/cs-sgxxlite-linux.h (SYSROOT_SUFFIX_SPEC): Update.
++
++2009-12-29  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #5785
++
++	* release-notes-csl.xml (Code size with -g): New note.
++
++	gcc/
++	Backport from FSF 4.4:
++
++	2009-10-19  Jakub Jelinek  <jakub@redhat.com>
++
++	Backport from mainline:
++	2009-10-16  Jakub Jelinek  <jakub@redhat.com>
++
++	PR debug/40521
++	* debug.h (struct gcc_debug_hooks): Add assembly_start hook.
++	* cgraphunit.c (cgraph_optimize): Call it.
++	* dwarf2out.c (dwarf2out_init): Move .cfi_sections printing into...
++	(dwarf2out_assembly_start): ... here.  New hook.
++	(dwarf2out_debug_hooks): Add dwarf2out_assembly_start.
++	* debug.c (do_nothing_debug_hooks): Do nothing for assembly_start
++	hook.
++	* dbxout.c (dbx_debug_hooks, xcoff_debug_hooks): Likewise.
++	* sdbout.c (sdb_debug_hooks): Likewise.
++	* vmsdbgout.c (vmsdbg_debug_hooks): Add vmsdbgout_assembly_start.
++	(vmsdbgout_assembly_start): New hook.
++
++	2009-10-09  Jakub Jelinek  <jakub@redhat.com>
++
++	PR debug/40521
++	* dwarf2out.c (dwarf2out_init): Test whether
++	HAVE_GAS_CFI_SECTIONS_DIRECTIVE is non-zero instead of checking
++	it is defined.
++
++	2009-10-02  Jakub Jelinek  <jakub@redhat.com>
++
++	PR debug/40521
++	* configure.ac (HAVE_GAS_CFI_SECTIONS_DIRECTIVE): New test.
++	* configure: Regenerated.
++	* config.in: Regenerated.
++	* dwarf2out.c (dwarf2out_do_cfi_asm): Return false if
++	!HAVE_GAS_CFI_SECTIONS_DIRECTIVE and not emitting .eh_frame.
++	(dwarf2out_init): If HAVE_GAS_CFI_SECTIONS_DIRECTIVE and
++	not emitting .eh_frame, emit .cfi_sections .debug_frame
++	directive.
++
++2009-12-28  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #7431
++
++	gcc/testsuite/
++	* gcc.target/arm/neon-vmov_ns64.c: Add explicit return statement.
++	* gcc.target/arm/neon-vmov_nu64.c: Likewise.
++	* gcc.target/arm/neon-vdup_ns64.c: Likewise.
++	* gcc.target/arm/neon-vdup_nu64.c: Likewise.
++	* gcc.target/arm/neon-vget_lanes64.c: Likewise.
++	* gcc.target/arm/neon-vget_laneu64.c: Likewise.
++	* gcc.target/arm/neon-vset_lanes64.c: Likewise.
++	* gcc.target/arm/neon-vset_laneu64.c: Likewise.
++
++2009-12-28  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #6964
++
++	gcc/
++	* config/arm/neon.md (UNSPEC_VDUP_LANE): Delete.
++	(V_double_vector_mode): New.
++	(neon_vdup_nv2di): Merge with neon_vdup_lanev2di, adjusting
++	the pattern from the latter to be predicable for consistency.
++	(neon_vdup_lane<mode>_internal): New.
++	(neon_vdup_lane<mode>): Turn into a define_expand and rewrite
++	to avoid using an unspec.
++	(neon_vdup_lanedi): Rewrite RTL pattern to avoid unspec.
++	(neon_vdup_lanev2di): Turn into a define_expand.
++	* config/arm/neon.ml (Vdup_n): Add No_op attribute for v2di case.
++	(Vmov_n): Likewise.
++	
++	gcc/testsuite/
++	* gcc.target/arm/neon/vmovQ_ns64.c: Regenerated.
++	* gcc.target/arm/neon/vmovQ_nu64.c: Regenerated.
++	* gcc.target/arm/neon/vdupQ_ns64.c: Regenerated.
++	* gcc.target/arm/neon/vdupQ_nu64.c: Regenerated.
++	* gcc.target/arm/neon-vdupQ_lanes64.c: New.
++	* gcc.target/arm/neon-vdupQ_laneu64.c: New.
++	* gcc.target/arm/neon-vdupQ_ns64.c: New.
++	* gcc.target/arm/neon-vdupQ_nu64.c: New.
++	* gcc.target/arm/neon-vmovQ_ns64.c: New.
++	* gcc.target/arm/neon-vmovQ_nu64.c: New.
++
++2009-12-22  Catherine Moore  <clm@codesourcery.com>
++
++	Merge from micromips branch:
++
++	2009-10-23  Maciej W. Rozycki  <macro@codesourcery.com>
++
++	gcc/
++	* config/mips/mips.opt (mjals): Fix a typo.
++
++	2009-10-23  Maciej W. Rozycki  <macro@codesourcery.com>
++
++	gcc/
++	2009-10-01  Chao-ying Fu  <fu@mips.com>
++	* config/mips/mips.opt (TARGET_JALS): Set to 1 by default.
++	* config/mips/mips.md (indirect_jump<mode>): Use JR for
++	microMIPS.
++	(tablejump<mode>): Likewise.
++	* config/mips/micromips.md (peephole2): New patterns for the
++	MOVEP instruction.
++	(*movepsisi, *movepsisf, *movepsfsi, *movepsfsf): Likewise.
++	* config/mips/mips-protos.h (micromips_movep_target_p): New
++	prototype.
++	* config/mips/mips.c (micromips_movep_target_p): New function.
++
++	* passes.c (init_optimization_passes): Run pass_peephole2 after
++	pass_sched2 too.
++
++	gcc/testsuite/
++	2009-10-23  Maciej W. Rozycki  <macro@codesourcery.com>
++	* gcc.target/mips/near-far-1.c: Adjust scan-assembler to handle
++	the JALS instruction.
++	* gcc.target/mips/near-far-2.c: Likewise.
++
++	2009-10-23  Maciej W. Rozycki  <macro@codesourcery.com>
++
++	gcc/
++	* config/mips/t-sgxx-sde (MULTILIB_EXTRA_OPTS): New variable,
++	set to "mno-jals".
++
++	2009-07-30  Maciej W. Rozycki  <macro@codesourcery.com>
++
++	gcc/
++	2009-07-30  Chao-ying Fu  <fu@mips.com>
++	* config/mips/mips.h (MIPS_ISA_LEVEL_SPEC): Add march=m14k* to
++	-mips32r2 targets.
++
++	2009-07-17  Maciej W. Rozycki  <macro@codesourcery.com>
++
++	gcc/
++	2009-07-17  Chao-ying Fu  <fu@mips.com>
++	* config/mips/mips.opt (mmucon): Rename to...
++	(mmcu): ... this.  Replace MUCON with MCU.
++	* config/mips/mips.h (TARGET_CPU_CPP_BUILTINS): Update
++	accordingly.
++	(ASM_SPEC): Likewise.
++	* doc/invoke.texi (MIPS Options): Likewise.
++
++	2009-07-17  Maciej W. Rozycki  <macro@codesourcery.com>
++
++	gcc/
++	2009-07-17  Chao-ying Fu  <fu@mips.com>
++	* config/mips/mips.h (MIPS_ARCH_FLOAT_SPEC): Add march=m14k* to
++	-msoft-float targets.
++	* config/mips/sdemtk.h (MIPS_ARCH_FLOAT_SPEC): Likewise.
++	
++	2009-07-10  Nathan Froyd  <froydnj@codesourcery.com>
++
++	gcc/
++	* config/mips/mips.c (micromips_build_save_restore): Mark the
++	built PARALLEL as RTX_FRAME_RELATED_P.
++
++	2009-06-30  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++
++	gcc/testsuite/
++	2009-06-30  Nathan Froyd  <froydnj@codesourcery.com>
++
++	* gcc.dg/tree-ssa/gen-vect-25.c (n): New variable.
++	(main): Pass n to main_1 instead.
++	* gcc.dg/tree-ssa/gen-vect-28.c (off): New variable.
++	(main_1): New function, split off from...
++	(main): ...here.  Pass `off' to main_1 instead.
++
++	2009-06-30  Nathan Froyd  <froydnj@codesourcery.com>
++
++	gcc/
++	* config/mips/mips.md (clear_hazard): Remove TARGET_MICROMIPS code.
++
++	2009-06-30  Nathan Froyd  <froydnj@codesourcery.com>
++
++	gcc/
++	* config/mips/mips.md (clear_hazard): Don't use <d>.
++
++	2009-06-30  Nathan Froyd  <froydnj@codesourcery.com>
++
++	gcc/
++	* config/mips/mips-protos.h (micromips_load_store_pair_p): Adjust
++	prototype.
++	* config/mips/mips.c (micromips_load_store_pair_p): Add check for
++	invalid load instruction.
++	* config/mips/micromips.md (*lwp, *swp): Adjust calls to
++	micromips_load_store_pair_p.
++
++	2009-06-09  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Port 2009-05-28 Chao-ying Fu <fu@mips.com>
++	gcc/
++	* config/mips/mips.c (mips_address_insns): Add a new parameter
++	check_micromips_12bit_p.
++	(mips_load_store_insns): Pass false to mips_address_insns for the new
++	parameter.
++	(mips_rtx_costs): Pass false to mips_address_insns for the new
++	parameter.
++	(mips_address_costs): Pass false to mips_address_insns for the new
++	parameter.
++	* config/mips/constraints.md (YC): New memory constraint.
++	(YD): New address constraint.
++	* config/mips/mips-protos.h (mips_address_insns): Add a new parameter.
++	* doc/md.texi (Constraints for Particular Machines): Document YC.
++	* config/mips/mips.md (mov_<load>l, mov_<load>r, mov_<store>l,
++	mov_<store>r): Use YC, instead of m.
++	(prefetch): Use YD, instead of p.
++	(sync_compare_and_swap<mode>, sync_add<mode>, sync_sub<mode>,
++	sync_old_add<mode>, sync_old_sub<mode>, sync_new_add<mode>,
++	sync_new_sub<mode>, sync_<optab><mode>, sync_old_<optab><mode>,
++	sync_new_<optab><mode>, sync_nand<mode>, sync_old_nand<mode>,
++	sync_new_nand<mode>, sync_lock_test_and_set<mode>): Use YC,
++	instead of R for memory constraints.
++
++	gcc/
++	* config/mips/t-sgxx-sde (MULTILIB_OPTIONS): Add mmicromips.
++	(MULTILIB_DIRNAMES): Add micromips.
++	(MULTILIB_EXCLUSIONS): Exclude -mcode-readable=no when !mips16.
++	(MULTILIB_EXCEPTIONS): Remove no-float and fp-64 micromips libraries.
++
++	Port 2009-05-13  Chao-ying Fu  <fu@mips.com>
++	gcc/
++	* doc/extend.texi (Declare Attributes of Functions): Add "micromips"
++	and "nomicromips".
++	* doc/invoke.texi (MIPS Options): Add "-mmicromips"/"-mno-mmicromips",
++	"-mmucon"/"-mno-mucon", and "-mjals"/"-mno-jals".
++	Add "m14k" for processor names.
++	Update descriptions for "-minterlink-mips16" for microMIPS.
++	Document "-mmicromips"/"-mno-mmicromips".
++	Document "-mmucon"/"-mno-mucon".
++	Document "-mjals"/"-mno-jals".
++	* config/mips/micromips.md (*store_word_multiple, *load_word_multiple):
++	New instructions for save to/load from the stack.
++	New peephole2 to match load/store word pair.
++	(*lwp, *swp): New instructions for load/store word pair.
++	(mips_jraddiusp): New instruction.
++	* config/mips/crtn.asm: Add labels of "init" and "fini", as
++	objdump needs labels before microMIPS/MIPS16 instructions to dump
++	instructions correctly.
++	* config/mips/mips.md (micromips_type): New attribute for 16-bit
++	microMIPS instructions.
++	(*add<mode>3): Set micromips_type to add.
++	(sub<mode>3): Set micromips_type to sub.
++	(one_cmpl<mode>2): Set micromips_type to logical_not.
++	(*and<mode>3): Set micromips_type to logical_and.
++	(*ior<mode>3): Set micromips_type to logical_or.
++	Set micromips_type to logical_xor for unamed xor instructions.
++	(*zero_extend<SHORT:mode><GPR:mode>2): Set micromips_type to
++	zero_extend.
++	(mfhi<GPR:mode>_<HILO:mode>): Set micromips_type to mfhi.
++	(clear_hazard_<mode>): Use jrs.hb for microMIPS.
++	(*<optab><mode>3): Disable microMIPS for this instruction.
++	(*micromips_ashl<mode>3): New instruction for microMIPS.
++	(*micromips_ashr<mode>3): New instruction for microMIPS.
++	(*micromips_lshr<mode>3): New instruction for microMIPS.
++	(*branch_equality<mode>): Check if it is not
++	microMIPS.
++	(*branch_equality<mode>_micromips): New instruction for microMIPS.
++	(*branch_equality<mode>_inverted): Check if it is not microMIPS.
++	(*branch_equality<mode>_inverted_micromips): New isntruction for
++	microMIPS.
++	(jump): Use "b" for microMIPS to save code size.
++	(*return): Use "jr" for microMIPS to save code size.
++	(return_internal): Use "jr" for microMIPS to save code size.
++	(sibcall_internal): Use MICROMIPS_J to enable jrs.
++	(sibcall_value_internal): Use MICROMIPS_J to enable jrs.
++	(sibcall_value_multiple_internal): Use MICROMIPS_J to enable jrs.
++	(micromips.md): New include.
++	* config/mips/mips.opt (mjals, mmicromips, mmucon): New options.
++	* config/mips/mips16.S: Skip code when __mips_micromips is defined.
++	* config/mips/mips-protos.h (micromips_output_save_restore,
++	micromips_save_restore_pattern_p, micromips_load_store_pair_p,
++	micromips_output_load_store_pair): New prototypes.
++	* config/mips/mips.c (MIPS_MAX_FIRST_STACK_STEP): Use 0x7f0 for
++	microMIPS.
++	(mips_base_micromips): New variable.
++	(mips_attribute_table): Add "micromips" and "nomicromips".
++	(mips_cpu_info_table): Add "m14k".
++	(mips_micromips_decl_p, mips_nomicromips_decl_p): New functions.
++	(mips_use_micromips_mode_p): New function.
++	(mips_insert_attributes):  Add micromips_p and nomicromips_p.
++	Cannot use both mips16 and microMIPS.
++	(mips_start_function_definition): Set micromips/nomicromips.
++	(mips_function_ok_for_sibcall): Check if sibcall is ok for microMIPS.
++	For MIPS32, check if the called function is a microMIPS function.
++	(mips_print_operand_punctuation): Add ':' to support compact branches.
++	Add '!' to support branches with 16-bit delay slots.
++	(mips_init_print_operand_punct): Add ':' to generate compact branches.
++	Add '!' to generate branch with 16-bit delay slots by recognizing
++	16-bit instructions in delay slots.
++	(mips_init_print_operand_punct): Add : and !.
++	(mips_save_reg): Add prototype, because it will be used later.
++	(micromips_build_save_restore): New function.
++	(mips_for_each_saved_reg): Add support for microMIPS lwm/swm.
++	(mips_expand_epilogue): Add jraddiusp support.
++	(was_micromips_p, was_micromips_pch_p): New variables.
++	(mips_set_mips16_micromips_mode): Change it from mips_set_mips16_mode.
++	Support the microMIPS mode for functions.
++	For microMIPS, we disable branch likely instructions.
++	(mips_set_current_function): Rename mips_set_mips16_mode to
++	mips_set_mips16_micromips_mode.
++	(mips_override_options): Check mips16 and microMIPS.
++	Rename mips_set_mips16_mode to mips_set_mips16_micromips_mode.
++	(micromips_save_restore_pattern_p, micromips_output_save_restore,
++	micromips_load_store_pair_p, micromips_output_load_store_pair):
++	New functions.
++	* config/mips/mips.h (TARGET_CPU_CPP_BUILTINS): Add __mips_micromips
++	and __mips_mucon.
++	(ISA_HAS_LWXS): Enable for microMIPS.
++	(ASM_SPEC): Pass -mmicromips/-mno-micromips and -mmucon/-mno-mucon.
++	(M16STORE_REG_P): New define for microMIPS store source register.
++	(MIPS_CALL): For microMIPS, we try to enable jals and jalrs.
++	(MICROMIPS_J): New define for microMIPS to enable jrs.
++	* config/mips/t-sde (MULTILIB_OPTIONS): Add mmicromips.
++	(MULTILIB_DIRNAMES): Add micromips
++	Exclude -mcode-readable=no when !mips16.
++
++2009-12-21  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #6964
++
++	gcc/
++	* config/arm/arm.c (neon_expand_vector_init): Replace use of
++	UNSPEC_VSET_LANE with calls to appropriate gen_neon_vset_lane<mode>.
++	* config/arm/neon.md (UNSPEC_VCOMBINE): Delete.
++	(UNSPEC_VSET_LANE): Delete.
++	(vec_set<mode>_internal): Make code emitted match that for the
++	corresponding intrinsics.
++	(neon_vset_lane<mode>): Expand into vec_set<mode>_internal instead
++	of using UNSPEC_VSET_LANE.
++	(neon_vcombine): Rewrite pattern to eliminate UNPSEC_VCOMBINE.
++
++2009-12-18  Maciej W. Rozycki  <macro@codesourcery.com>
++
++	libiberty/
++	* pex-common.c (pex_read_err): Set stderr_pipe to -1 if a
++	corresponding stream has been opened.
++	(pex_free): Close pipe file descriptors corresponding to child's
++	stdout and stderr before waiting.
++
++2009-12-17  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #6964
++
++	gcc/
++	* config/arm/neon.md (UNSPEC_VGET_HIGH, UNSPEC_VGET_LOW): Delete.
++	(neon_vget_high<mode>): Replace with....
++	(neon_vget_highv16qi): New pattern using canonical RTL.
++	(neon_vget_highv8hi): Likewise.
++	(neon_vget_highv4si): Likewise.
++	(neon_vget_highv4sf): Likewise.
++	(neon_vget_highv2di): Likewise.
++	(neon_vget_low<mode>): Replace with....
++	(neon_vget_lowv16qi): New pattern using canonical RTL.
++	(neon_vget_lowv8hi): Likewise.
++	(neon_vget_lowv4si): Likewise.
++	(neon_vget_lowv4sf): Likewise.
++	(neon_vget_lowv2di): Likewise.
++
++2009-12-15  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #6964
++
++	gcc/
++
++	* config/arm/neon.md (UNSPEC_VGET_LANE): Delete.
++	(vec_extractv2di): Correct error in register numbering.
++	Copy assembly pattern from neon_vget_lanev2di.
++	(neon_vget_lanedi): Rewrite to expand into emit_move_insn.
++	(neon_vget_lanev2di): Rewrite to expand into vec_extractv2di.
++	(neon_vset_lanedi): Rewrite to expand into emit_move_insn.
++	* config/arm/neon.ml (Vget_lane): Add No_op attribute to 64-bit
++	scalar variants to suppress test for this emitting vmov.
++	(Vset_lane): Likewise.
++	* doc/arm-neon-intrinsics.texi: Regenerated.
++
++	gcc/testsuite/
++	* gcc.target/arm/neon/vget_lanes64.c: Regenerated.
++	* gcc.target/arm/neon/vget_laneu64.c: Regenerated.
++	* gcc.target/arm/neon/vset_lanes64.c: Regenerated.
++	* gcc.target/arm/neon/vset_laneu64.c: Regenerated.
++	* gcc.target/arm/neon-vget_lanes64.c: New execution test.
++	* gcc.target/arm/neon-vget_laneu64.c: New execution test.
++	* gcc.target/arm/neon-vset_lanes64.c: New execution test.
++	* gcc.target/arm/neon-vset_laneu64.c: New execution test.
++
++2009-12-11  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Issue #4955
++	Backport from upstream:
++
++	2009-12-11  Sebastian Andrzej Siewior  <bigeasy@linutronix.de>
++	PR target/36047
++	* config/m68k/linux.h: Remove LABELNO from the mcount statement. It is
++	not used by glibc/uclibc and does not work with large binaries.
++
++2009-12-10  Andrew Jenner  <andrew@codesourcery.com>
++
++	gcc/
++	* java/Make-lang.in (java.install-html): Add.
++	* objc/Make-lang.in (objc.install-html): Add.
++	* objcp/Make-lang.in (obj-c++.insatll-html): Add.
++	* cp/Make-lang.in (c++.install-html): Add.
++	* ada/gcc-interface/Make-lang.in (ada.install-html): Add.
++	* fortran/Make-lang.in: Update comment.
++
++2009-12-10  Pedro Alves  <pedro@codesourcery.com>
++
++	gcc/
++	* config/arm/mingw32.h (FORTRAN_INIT): Define.
++
++	revert:
++	2009-12-07  Andrew Jenner  <andrew@codesourcery.com>
++	gcc/
++	* fortran/gfortranspec.c (lang_specific_driver): Add -lmingw32 to
++	-lgfortranbegin group for CE.
++
++2009-12-10  Andrew Jenner  <andrew@codesourcery.com>
++
++	libgfortran/
++	* io/read.c: Use HAVE_ERRNO_H instead of HAVE_ERRNO.
++
++2009-12-10  Julian Brown  <julian@codesourcery.com>
++
++	Issue #7318
++
++	* release-notes-csl.xml (Indirect function call optimization): Add
++	note.
++
++	gcc/
++	* config/arm/arm.c (output_call_mem): Remove armv5 support.
++	* config/arm/arm.md (*call_mem): Disable for armv5. Add note.
++	(*call_value_mem): Likewise.
++
++2009-12-08  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Backport from mainline:
++
++	gcc/
++	2009-08-24  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
++
++	* config/arm/neon.md (vashl<mode>3): Rename from ashl<mode>3.
++	(vashr<mode>3): Rename from ashr<mode>3.
++	(vlshr<mode>3): Rename from lshr<mode>3.
++
++2009-12-08  Julian Brown  <julian@codesourcery.com>
++
++	Issue #6846
++
++	Backport from mainline:
++
++	gcc/
++	* config/arm/constraints.md (Ps, Pt): New constraint letters.
++	* config/arm/thumb2.md (*thumb2_addsi_short): Tighten constraints.
++
++2009-12-09  Andrew Jenner  <andrew@codesourcery.com>
++
++	gcc/
++	* configure.ac: Add install-html to target_list for Make-hooks.
++	* configure: Regenerate.
++	* fortran/Make-lang.in (F95_HTMLFILES): New.
++	(fortran.html): Use it.
++	(fortran.install-html): New.
++	* Makefile.in (install-html): Add lang.install-html.
++
++2009-12-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	* release-notes-csl.xml: Fix duplicate UUID.
++
++2009-12-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #7244
++
++	* release-notes-csl.xml: New note.
++
++	gcc/
++	* tree-ssa-loop-promote.c (phi_nodes_to_promote): New variable.
++	(pli_cleanup): Free phi_nodes_to_promote if necessary.
++	(promote_short_indices): Allocate phi_nodes_to_promote.  Traverse it.
++	(rebuild_with_promotion): Add the phi node to phi_nodes_to_promote.
++	Move the promotion logic...
++	(promote_phi_node): ...here.  New function.
++
++	gcc/testsuite/
++	* gcc.dg/promote-short-11.c: New file.
++	* gcc.dg/promote-short-12.c: New file.
++
++2009-12-07  Andrew Jenner  <andrew@codesourcery.com>
++
++	libgfortran/
++	* io/unix.c (id_from_fd) [__MINGW32CE__]: Don't use _get_osfhandle.
++	(fd_to_stream) [__MINGW32CE__]: Don't use fstat or isatty.
++	(sstream_isatty) [__MINGW32CE__]: Don't use isatty.
++
++2009-12-07  Andrew Jenner  <andrew@codesourcery.com>
++
++	gcc/
++	* fortran/gfortranspec.c (lang_specific_driver): Add -lmingw32 to
++	-lgfortranbegin group for CE.
++
++2009-12-03  Pedro Alves  <pedro@codesourcery.com>
++
++	Windows CE port.
++
++	libgfortran/
++	* intrinsics/access.c: Don't include errno.h.
++	(access_func): Use get_oserrno.
++	* intrinsics/chdir.c, intrinsics/chmod.c: Only include errno.h if
++	HAVE_ERRNO_H.
++	* intrinsics/gerror.c: Only include errno.h if HAVE_ERRNO_H.
++	(gerror): Always build.  Constify local `p'.  Use get_oserror
++	instead of strerror.
++	* intrinsics/getcwd.c: Only include errno.h if HAVE_ERRNO_H.
++	* intrinsics/hostnm.c: Only include errno.h if HAVE_ERRNO_H.
++	(w32_gethostname) [__MINGW32CE__]: New.
++	(hostnm_i4_sub): Use get_oserrno.
++	* intrinsics/ierrno.c: Don't include errno.h.
++	(ierrno_i4, ierrno_i8): Use get_oserrno.
++	* intrinsics/kill.c: Only include errno.h if HAVE_ERRNO_H.
++	* intrinsics/link.c: Only include errno.h if HAVE_ERRNO_H.
++	* intrinsics/perror.c: Only include errno.h if HAVE_ERRNO_H.
++	(pwinerror) [__MINGW32CE__]: Declare.
++	(perror, HAVE_PERROR) [__MINGW32CE__]: Define.
++	* intrinsics/rename.c: Only include errno.h if HAVE_ERRNO_H.
++	(rename_i4_sub, rename_i8_sub): Use get_oserrno.
++	* intrinsics/signal.c: Only include errno.h if HAVE_ERRNO_H.
++	[__MINGW32CE__]: Include <windows.h>.
++	(not_supported): New function.
++	(signal_sub): Use `not_supported'.  Add __attribute__((unused))
++	markers to parameters.
++	(signal_sub_int, alarm_sub_i4, alarm_sub_i8, alarm_sub_int_i4)
++	(alarm_sub_int_i8): Ditto.
++	* intrinsics/sleep.c: Don't include errno.h.
++	* intrinsics/stat.c: Don't include errno.h.
++	(stat_i4_sub_0, stat_i8_sub_0, fstat_i4_sub, fstat_i8_sub): Use
++	get_oserrno.
++	* intrinsics/symlnk.c: Only include errno.h if HAVE_ERRNO_H.
++	* intrinsics/unlink.c: Don't include errno.h.
++	(unlink_i4_sub): Use get_oserrno.
++	* intrinsics/env.cd (getenv)
++	(get_environment_variable_i4) [__MINGW32CE__]: Always NULL.
++	* intrinsics/getXid.c: Include windows.h instead of process.h.
++	(getpid) [__MINGW32CE__]: Use GetCurrentProcessId.
++	* intrinsics/getlog.c: Don't define WIN32_LEAN_AND_MEAN.  Include
++	malloc.h.
++	(EXTENDED_NAME_FORMAT): New typedef.
++	(ce_GetUserNameA): New function.
++	(GetUserName): New define.
++	* intrinsics/system.c [__MINGW32CE__]: Include windows.h.
++	(system_sub) [__MINGW32CE__]: Return not-supported.
++	* intrinsics/umask.c (ce_umask) [__MINGW32CE__]: New function.
++	(umask): New define.
++
++	* io/open.c: Only include errno.h if HAVE_ERRNO_H.
++	[__MINGW32CE__]: Include <windows.h>.
++	(new_unit) [__MINGW32CE__]: Add error handling based on
++	GetLastError.
++	* io/read.c: Only include errno.h if HAVE_ERRNO_H.
++	[__MINGW32CE__]: Include <windows.h>.
++	(convert_real) [__MINGW32CE__]: Use SetLastError/GetLastError.
++	* io/transfer.c: Don't include errno.h.
++	(next_record_r): Use clear_oserrno, get_oserrno.
++	* io/unix.c: Only include errno.h if HAVE_ERRNO_H.
++	(id_from_path) [__MINGW32CE__]: Handle UNICODE.
++	(GFC_STDOUT_FILENO, GFC_STDERR_FILENO, GFC_STDIN_FILENO): New.
++	(flush_if_preconnected): Use them.
++	(COUNTOF): Define.
++	(strwinerror, pwinerror): New functions.
++	(get_oserror) [__MINGW32CE__]: Use strwinerror.
++	(get_oserrno): New function.
++	(clear_oserrno): New function.
++	(raw_write): Check if EINTR is defined.
++	(raw_close): Use GFC_STDOUT_FILENO, GFC_STDERR_FILENO and
++	GFC_STDIN_FILENO.
++	(buf_seek, mem_seek) [__MINGW32CE__]: Use SetLastError.
++	(fd_to_stream): Use GFC_STDOUT_FILENO, GFC_STDERR_FILENO and
++	GFC_STDIN_FILENO.
++	(ce_mktemp): New function.
++	(mktemp) [__MINGW32CE__]: Define to ce_mktemp.
++	(tempfile) [__MINGW32CE__]: Don't reference getenv.  Use
++	GetLastError.
++	(regular_file) [__MINGW32CE__]: Use GetLastError/SetLastError.
++	(open_external): Use GFC_STDIN_FILENO.
++	(setmode, HAVE_SETMODE) [__MINGW32CE__]: Define.
++	(_setmode) [__MINGW32CE__]: Declare.
++	(output_stream): Use GFC_STDOUT_FILENO.
++	(error_stream): Use GFC_STDERR_FILENO.
++	(st_vprintf): : Use GFC_STDOUT_FILENO and GFC_STDERR_FILENO.
++	(delete_file) [__MINGW32CE__]: Use SetLastError.
++	* io/write.c: Only include errno.h if HAVE_ERRNO_H.
++	(write_a_char4): Cast crlf to gfc_char4_t *.
++	* io/write_float.def (signbit) [__MINGW32CE__]: Define.
++
++	* runtime/error.c: Don't include errno.h.
++	(generate_error): Use get_oserrno.
++	* runtime/environ.c (ce_getenv) [__MINGW32CE__]: New function.
++	(getenv) [__MINGW32CE__]: New define.
++	* runtime/main.c (store_exe_path): Constify `cwd'.
++
++	* libgfortran.h (get_oserrno, clear_oserrno): Declare.
++
++	* configure.ac: Add check for errno.h.
++	* configure, config.h.in: Regenerate.
++
++2009-12-03  Pedro Alves  <pedro@codesourcery.com>
++
++	* configure.ac (arm*-*-mingw32*): New.  Skip target-libiberty.
++	* configure: Regenerate.
++
++2009-12-03  Andrew Jenner  <andrew@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (TARGET_ASM_UNALIGNED_HI_OP): Define.
++	(TARGET_ASM_UNALIGNED_SI_OP): Define.
++	(TARGET_ASM_UNALIGNED_DI_OP): Define.
++	(TARGET_ASM_UNALIGNED_TI_OP): Define.
++	* config/arm/wince-pe.h: Enable dwarf debugging info.
++
++2009-11-23  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Issue 1080.  Fix for non C/C++
++	gcc/
++	* targhooks.c: Include convert.h.
++	(hook_cxx_ttype_ref_in_bit0): Rewrite to avoid using C frontend
++	routines.
++
++2009-11-18  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Issue #6609
++
++	Backport from upstream:
++
++	gcc/
++	2009-11-18  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	* config/arm/neon-docgen.ml (analyze_shape_elt): Handle
++	Alternatives.
++
++	gcc/
++	2009-11-11  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	* config/arm/arm.c (neon_vdup_constant, neon_make_constant): New.
++	(neon_expand_vector_init): Use them.  Also handle non-constant
++	vectors with identical elements and vectors with only one
++	non-constant element.
++	(arm_print_operand): Handle 'y' modifier.
++	* config/arm/arm-protos.h (neon_make_constant): Declare.
++	* config/arm/neon.md (neon_vdup_n<mode>): Split into two
++	patterns.  Use VX instead of VDQW for the first one.  Allow
++	a VFP alternative and V32 modes for the second one.
++	* config/arm/neon.ml (shape_elt): Add Alternatives.
++	(ops): Use Alternatives for vdup lane instructions.
++	* config/arm/neon-testgen.ml (analyze_shape): Handle Alternatives.
++	* config/arm/vec-common.md (mov<mode>): Use neon_make_constant.
++
++	gcc/testsuite/
++	* gcc.target/arm/neon: Regenerate generated tests.
++
++2009-11-18  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #6964
++
++	gcc/
++	* config/arm/neon.md (UNSPEC_VABA): Delete.
++	(UNSPEC_VABAL): Delete.
++	(UNSPEC_VABS): Delete.
++	(UNSPEC_VABAL): Delete.
++	(UNSPEC_VAND): Delete.
++	(UNSPEC_VBIC): Delete.
++	(UNSPEC_VCLZ): Delete.
++	(UNSPEC_VCNT): Delete.
++	(UNSPEC_VDUP_N): Delete.
++	(UNSPEC_VEOR): Delete.
++	(UNSPEC_VMVN): Delete.
++	(UNSPEC_VORN): Delete.
++	(UNSPEC_VORR): Delete.
++	(iordi3_neon): Rewrite RTL without unspec.  Add cases to handle
++	core registers too, to make this a replacement for the default.
++	(anddi3_neon): Likewise.
++	(orndi3_neon): Likewise.
++	(bicdi3_neon): Likewise.
++	(xordi3_neon): Likewise.
++	(neon_vabs<mode>): Rewrite as define_expand to get rid of unspec for
++	extra operand.
++	(neon_vaba<mode>): Rewrite to get rid of UNSPEC_VABA.
++	(neon_vabal<mode>): Rewrite to get rid of UNSPEC_VABAL.
++	(neon_vclz<mode>): Rewrite as define_expand and clz<mode>2 to get
++	rid of unspec and handle unused operand.
++	(neon_vcnt<mode>): Similarly, with popcount<mode>2.
++	(neon_vdup_n<mode>): Rewrite RTL without unspec.
++	(neon_vdup_ndi): Rewrite as define_expand and use emit_move_insn.
++	(neon_vdup_nv2di): Rewrite RTL without unspec.
++	* config/arm/arm.md (define_split for logical_binary_operator): 
++	Disable for NEON registers.
++	(anddi3): Add new define_expand, and rename the insn.  Disable
++	this insn for NEON.
++	(*anddi_notdi_di): Disable for TARGET_NEON, where bicdi3_neon applies.
++	(iordi3): As for anddi3.
++	(xordi3): Likewise.
++	* config/arm/predicates.md (imm_for_neon_logic_operand):
++	Require TARGET_NEON.
++	(imm_for_neon_inv_logic_operand): Likewise.
++	* config/arm/neon.ml (Vdup_n): Add No_op attribute to suppress test
++	for this emitting vmov.
++	(Vmov_n): Likewise.
++	* doc/arm-neon-intrinsics.texi: Regenerated.
++
++	gcc/testsuite/
++	* gcc.target/arm/neon/vdup_ns64.c: Regenerated.
++	* gcc.target/arm/neon/vdup_nu64.c: Regenerated.
++	* gcc.target/arm/neon/vmov_ns64.c: Regenerated.
++	* gcc.target/arm/neon/vmov_nu64.c: Regenerated.
++	* gcc.target/arm/neon-vdup_ns64.c: New execution test.
++	* gcc.target/arm/neon-vdup_nu64.c: New execution test.
++	* gcc.target/arm/neon-vmov_ns64.c: New execution test.
++	* gcc.target/arm/neon-vmov_nu64.c: New execution test.
++
++2009-11-11  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	gcc/
++	* config/arm/neon.md (*movmisalign<mode>_neon_load): Use
++	memory_operand.
++
++2009-11-12  Andrew Jenner  <andrew@codesourcery.com>
++
++	libgcc/
++	* config.host: Handle arm*-*-mingw32ce* and arm*-*-cegcc*.
++
++	gcc/
++	* gthr-win32.h: Don't use errno.h or EINVAL under CE.
++	* config.gcc: Cleanup. Don't put msformat-c.o in src directory.
++	* config/i386/gthr-win32.c: Don't use 486 lock primitive or EINVAL
++	under CE.
++	* config/arm/pe-cxx.c: Update copyright message.
++	* config/arm/pe-stubs.c: Likewise.
++	* config/arm/t-mingw32: New file.
++	* config/arm/arm-protos.h (arm_major_arch): Declare.
++	(arm_thumb_arch_p): Declare.
++	(arm_pe_adjust_class_at_definition): Declare.
++	(arm_pe_type_dllimport_p): Declare.
++	(arm_pe_type_dllexport_p): Declare.
++	* config/arm/cygming.opt: Update copyright message.
++	* config/arm/wince-pe.h (FPUTYPE_DEFAULT): Change to "vfp".
++	Don't use DWARF2 debug information.
++	(TARGET_DEFAULT): Remove MASK_RETURN_AGGREGATES_IN_MEMORY.
++	* config/arm/mingw32.h: Update copyright message.
++	(STANDARD_INCLUDE_DIR): Define.
++	Include windows.h in libgcc2.
++	* config/arm/msformat-c.c: New file (copied from config/i386).
++	* tsystem.h: Don't use errno.h under CE.
++
++2009-11-11  Julian Brown  <julian@codesourcery.com>
++
++	* release-notes-csl.xml (Internal compiler error fix): Add note for
++	#7000 fix.
++
++2009-11-11  Julian Brown  <julian@codesourcery.com>
++
++	Issue #7000
++
++	gcc/
++	* config/arm/arm.h (PREFERRED_RELOAD_CLASS): Don't restrict Thumb-2
++	reloads to LO_REGS.
++
++2009-11-11  Julian Brown  <julian@codesourcery.com>
++
++	gcc/
++	* config/arm/thumb2.md (*thumb2_movdf_soft_insn): Fix pool ranges.
++
++2009-11-10  Andrew Jenner  <andrew@codesourcery.com>
++
++	NOT ASSIGNED TO FSF
++	Ported from CEGCC
++
++	gcc/
++	* config.gcc: Add arm-*-mingw32* from CEGCC.
++	* config/arm/pe-cxx.c: New file.
++	* config/arm/arm.c: Copied from CEGCC.
++	* config/arm/pe-stubs.c: New file.
++	* config/arm/wince-pe.h: Copied from CEGCC.
++	* config/arm/cygming.opt: New file.
++	* config/arm/t-cygming: New file.
++	* config/arm/mingw32.h: New file.
++	* config/arm/pe.opt: Copied from CEGCC.
++	* config/arm/t-wince-pe: Copied from CEGCC.
++
++2009-11-05  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	gcc/testsuite/
++	* gcc.target/m68k/pr41302.c: Fix target triplet.
++
++2009-11-03  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Revert:
++
++	2009-09-09  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	gcc/
++	* config/m68k/m68k.h (TRANSFER_FROM_TRAMPOLINE): Avoid warning.	
++
++2009-11-01  Daniel Gutson  <dgutson@codesourcery.com>
++
++	gcc/testsuite/
++	* g++.dg/warn/miss-format-1.C: Updated line number.
++
++2009-11-01  Maxim Kuvyrkov  <maxim@codesourcery.com>
++            Carlos O'Donell  <carlos@codesourcery.com>
++
++	Issue #6954
++	PR target/41302
++
++	* release-notes-csl.xml: Add release note.
++	
++	gcc/
++	* config/m68k/m68k.c (m68k_reg_present_p): New static function.
++	(m68k_ok_for_sibcall_p): Handle different result return locations.
++
++	gcc/testsuite/
++	* gcc.target/m68k/pr41302.c: New test.
++
++2009-10-29  Paul Brook  <paul@codesourcery.com>
++
++	Issue #6654
++	gcc/
++	* config/arm/arm.c (arm_compute_save_reg0_reg12_mask): Add special
++	case for noreturn functions.
++	(arm_compute_save_reg_mask): Remove special noreturn handling.
++
++2009-10-28  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* config/sh/sh.md (movrt): Use SI mode for if_then_else.
++
++2009-10-25  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	gcc/
++	* t-eglibc (EGLIBC_AWK): Handle empty list of configs.
++
++2009-10-21  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #6815
++
++	gcc/
++	* config/sh/uclinux.h (SUBTARGET_OVERRIDE_OPTIONS): Define.
++
++2009-10-21  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #6814
++
++	gcc/
++	* config/sh/sh.md (tls_global_dynamic, tls_local_dynamic,
++	tls_initial_exec): Don't initialize PIC register here.
++	* config/sh/sh.c (prepare_move_operands): Initialize PIC register
++	here before generating those insns.
++
++2009-10-21  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #6814
++
++	Backport:
++
++	gcc/
++	2009-10-21  Joseph Myers  <joseph@codesourcery.com>
++
++	* config/sh/sh.c (nonpic_symbol_mentioned_p): Allow UNSPEC_TPOFF.
++
++	gcc/testsuite/
++	2009-10-21  Joseph Myers  <joseph@codesourcery.com>
++
++	* gcc.dg/tls/pie-1.c: New test.
++
++2009-10-19  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	gcc/testsuite/
++	* g++.dg/torture/pr36191.C: Don't run with -fomit-frame-pointer on
++	m68k and fido.
++
++2009-10-16  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #6828
++
++	gcc/testsuite/
++	* gcc.dg/remove-local-statics-17.c: Change asm to be empty.
++	Change scan-tree-dump-times text to look for number of variables
++	removed.
++
++2009-10-16  Julian Brown  <julian@codesourcery.com>
++
++	Issue #6842
++
++	gcc/
++	* config/arm/thumb2.md (thumb2_addsi_short): Change length to 4.
++
++2009-10-15  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #6813
++
++	gcc/
++	* config/sh/sh.c (sh_our_fdpic_reg): New.
++	* config/sh/sh-protos.h (sh_our_fdpic_reg): Declare.
++	* config/sh/sh.h (OUR_FDPIC_REG): Define in terms of
++	sh_our_fdpic_reg.
++
++2009-10-15  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* ira.c (setup_eliminable_regset): Remove unused variable
++	regs_asm_clobbered.
++
++2009-10-13  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from FDPIC branch:
++
++	2008-06-12  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	libgcc/
++	* config.host (sh*-*-uclinux*): Add t-uclinux-fdpic.
++	* config/sh/t-uclinux-fdpic: New file.
++
++	gcc/
++	* config.gcc (sh*-*-uclinux*): Use t-slibgcc-elf-ver.
++	* config/sh/lib1funcs.asm (set_fpscr): Handle FDPIC.
++	* config/sh/t-uclinux (CRTSTUFF_T_CFLAGS_S): Set.
++	(EXTRA_MULTILIB_PARTS): Add crtbeginS.o crtendS.o crtbeginT.o.
++	* config/sh/uclinux.h (STARTFILE_SPEC, ENDFILE_SPEC): Update
++	for shared libraries.
++	(LINK_EH_SPEC): Define.
++
++	2008-06-12  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	gcc/
++	* config/sh/sh-protos.h (function_symbol): Update prototype.
++	* config/sh/constraints.md: Add Ccl constraint.
++
++	* config/sh/lib1funcs.asm, config/sh/lib1funcs-4-300.asm,
++	config/sh/lib1funcs-Os-4-200.asm: Revert FDPIC hidden symbols.
++
++	* config/sh/sh.c (sh_reloc_rw_mask): New function.
++	(TARGET_ASM_RELOC_RW_MASK): Define.
++	(expand_block_move, expand_ashiftrt, sh_expand_prologue)
++	(sh_expand_epilogue, sh_initialize_trampoline): Update for
++	function_symbol change.
++	(function_symbol): Take a fourth argument.  Use the GOT for
++	FDPIC and SFUNC_GOT.  Use PC-relative calls for FDPIC and
++	SFUNC_STATIC.
++	* config/sh/sh.md: Update patterns affected by function_symbol
++	change.
++
++	2008-05-22  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	gcc/
++	* config/sh/sh.h (TARGET_CPU_CPP_BUILTINS): Define __FDPIC__.
++
++	2008-04-23  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* sh.c (sh_load_function_descriptor): New.
++	* sh-protos.h (sh_load_function_descriptor): Declare.
++	* sh.md (calli, call_valuei, sibcalli, sibcall_valuei): Disable
++	for FDPIC.
++	(calli_fdpic, call_valuei_fdpic, sibcalli_fdpic,
++	sibcall_valuei_fdpic): New.
++	(call, call_value, sibcall, sibcall_value): Call
++	sh_load_function_descriptor and use new insns for FDPIC.
++
++	2008-04-23  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/sh/sh.c (legitimize_pic_address): Don't use @GOTOFF for
++	readonly data or code on FDPIC.
++
++	2008-04-22  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/sh/sh.c (function_symbol): Add comment.  Treat SFUNC_GOT
++	like SFUNC_STATIC for FDPIC.  Treat FDPIC like PIC.
++	* config/sh/lib1funcs.asm (sdivsi3, udivsi3_i4i, sdivsi3_i4i):
++	Make hidden.
++	* config/sh/lib1funcs-4-300.asm (udivsi3_i4i, sdivsi3_i4i): Make
++	hidden.
++	* config/sh/lib1funcs-Os-4-200.asm (udivsi3_i4i, sdivsi3_i4i):
++	Make hidden.
++
++	2008-04-22  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/sh/sh.c (sh_output_mi_thunk): Use PC-relative call for
++	FDPIC.
++
++	2008-04-21  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/sh/sh.c (sh_assemble_integer): New.
++	(TARGET_ASM_INTEGER): Define.
++	(prepare_move_operands): Legitimize PIC addresses for FDPIC.
++	(nonpic_symbol_mentioned_p): Handle UNSPEC_GOTFUNCDESC and
++	UNSPEC_GOTOFFFUNCDESC.
++	(legitimize_pic_address): Use GOTOFFFUNCDESC and GOTFUNCDESC for
++	function symbols for FDPIC.
++	(sh_illegitimate_symbolic_constant_p): Require constants to
++	satisfy LEGITIMATE_PIC_OPERAND_P for FDPIC.
++	* config/sh/sh.h (OUTPUT_ADDR_CONST_EXTRA): Handle
++	UNSPEC_GOTFUNCDESC and UNSPEC_GOTOFFFUNCDESC.
++	* config/sh/sh.md (UNSPEC_GOTFUNCDESC, UNSPEC_GOTOFFFUNCDESC,
++	sym2GOTFUNCDESC, symGOTFUNCDESC2reg, sym2GOTOFFFUNCDESC,
++	symGOTOFFFUNCDESC2reg): New.
++
++	2008-04-21  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	Revert:
++	* config/sh/sh.md (call_pcrel, call_value_pcrel): Don't always
++	require PLT entries for FDPIC without PIC.
++
++	2008-04-21  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/sh/sh.c (sh_cannot_copy_insn_p): Don't return false up
++	front for FDPIC.
++	(sh_expand_prologue): Don't generate GOTaddr2picreg instruction
++	for FDPIC.
++	* config/sh/sh.h (CONDITIONAL_REGISTER_USAGE): Also set
++	call_really_used_regs[PIC_REG] for FDPIC.
++	(override_options): Disallow non-SH2 FDPIC.  Set
++	flag_no_function_cse for FDPIC.
++	(OUR_FDPIC_REG): Define.
++	* config/sh/sh.md (call_pcrel, call_value_pcrel): Don't always
++	require PLT entries for FDPIC without PIC.
++	(call, call_value, sibcall, sibcall_value): Load PIC register and
++	use PC-relative calls for FDPIC.
++	(GOTaddr2picreg, symGOT_load, symGOTOFF2reg, tls_global_dynamic,
++	tls_local_dynamic, tls_initial_exec): Load PIC register for FDPIC.
++
++	2008-04-14  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* doc/tm.texi (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Document to
++	be zero or nonzero.
++	* defaults.h (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Define.
++	* df-scan.c (df_get_exit_block_use_set), regclass.c
++	(init_reg_sets_1), rtlanal.c (rtx_unstable_p, rtx_varies_p):
++	Handle new PIC_OFFSET_TABLE_REG_CALL_CLOBBERED semantics.
++	* config/ia64/ia64.h (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Define
++	to 1.
++	* config/sh/sh.h (CONDITIONAL_REGISTER_USAGE): Mark PIC_REG as
++	fixed and call-used for FDPIC.
++	(PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Define.
++
++	2008-04-14  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/sh/uclinux.h (SUBTARGET_ASM_SPEC): Undefine before
++	defining.
++
++	2008-04-14  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/sh/uclinux.h (SUBTARGET_ASM_SPEC): Define if
++	FDPIC_DEFAULT.
++
++	2008-04-14  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* doc/invoke.texi (SH Options): Document -mfdpic.
++	* doc/install.texi (--enable-fdpic): Document.
++	* config.gcc (sh*-*-uclinux*): Handle --enable-fdpic.
++	* config/sh/sh.opt (mfdpic): New option.
++	* config/sh/sh.h (TARGET_CPU_CPP_BUILTINS): Define __SH_FDPIC__
++	for FDPIC.
++	(DRIVER_SELF_SPECS): Use SUBTARGET_DRIVER_SELF_SPECS.
++	(SUBTARGET_DRIVER_SELF_SPECS): Define.
++	* config/sh/uclinux.h (SUBTARGET_LINK_SPEC,
++	SUBTARGET_LINK_EMUL_SUFFIX): Define differently if FDPIC_DEFAULT.
++	(SUBTARGET_DRIVER_SELF_SPECS): Define if FDPIC_DEFAULT.
++
++	2008-04-02  Mark Shinwell  <shinwell@codesourcery.com>
++		    Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Update sh-uclinux port from GCC 4.1 branch.
++
++	libgcc/
++	* config.host: Handle sh-*-uclinux* | sh[12]-*-uclinux*.
++
++	gcc/testsuite/
++	* gcc.target/sh/sh-relax.c: XFAIL for uClinux.
++
++	gcc/
++	* config.gcc: Handle sh-*-uclinux* | sh[12]-*-uclinux*.
++	* config/sh/sh-protos.h (sh_illegitimate_symbolic_constant_p): Declare.
++	* config/sh/t-sh: Use MULTILIB_CFLAGS for unwind-dw2-Os-4-200.o.
++	* config/sh/t-uclinux: New file.
++	* config/sh/sh.c (TARGET_CANNOT_FORCE_CONST_MEM): Define.
++	(prepare_move_operands): Handle SH_OFFSETS_MUST_BE_WITHIN_SECTIONS_P.
++	(sh_illegitimate_symbolic_constant_p): New function.
++	* config/sh/sh.h (SH_OFFSETS_MUST_BE_WITHIN_SECTIONS_P): Define.
++	(LEGITIMATE_CONSTANT_P): Use sh_illegitimate_symbolic_constant_p.
++	* config/sh/uclinux.h: New file.
++
++2009-10-12  Paul Brook  <paul@codesourcery.com>
++
++	Issue #5767
++	gcc/
++	* config/arm/t-arm-elf (MULTILIB_MATCHES): Rename tag13 to armv7em.
++	* config/arm/t-cs-eabi (MULTILIB_MATCHES): Ditto.
++	* config/arm/t-cs-eabi-lite (MULTILIB_MATCHES): Ditto.
++	* config/arm/t-cs-uclinux-eabi (MULTILIB_MATCHES): Ditto.
++	* config/arm/t-cs-linux-lite (MULTILIB_MATCHES): Ditto.
++
++2009-10-12  Paul Brook  <paul@codesourcery.com>
++
++	Issue #5767
++	gcc/
++	* config.gcc: Add ARM --with-fpu=vfpv3-d16-fp16.
++	* config/arm/arm.c (FL_FOR_ARCHTAG13, arm_arch_tag13): Remove.
++	(FL_FOR_ARCH7EM, arm_arch7em): Define.
++	(all_architectures): Rename tag13 to armv7e-m.
++	(all_fpus): Add fpv4-sp-d16.
++	(arm_override_options): Use new names.
++	* config/arm/arm.h (arm_arch_tag13): Rename ...
++	(arm_arch7em): ...  to this.
++
++2009-10-13  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #6706
++
++	* release-notes-csl.xml (Optimizer bug fix): New note.
++
++	gcc/
++	* tree-ssa-loop-promote.c (insert_along_edge): New function.
++	(promote_variable_1): Move code for modifying GIMPLE_PHI
++	statements...
++	(rebuild_with_promotion): ...here.  Rebuild GIMPLE_PHI statements.
++	(promote_variable_1): Only rewrite uses of promotable variables.
++
++2009-10-12  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #6643
++
++	* release-notes-csl.xml: New note.
++
++	gcc/
++	* tree-ssa-remove-local-statics.c
++	(find_static_nonvolatile_declarations): Don't try to find definitions
++	in GIMPLE_ASM statements.
++
++	gcc/testsuite/
++	* gcc.dg/remove-local-statics-17.c: New test.
++
++2009-10-12  Paul Brook  <paul@codesourcery.com>
++
++	Issue #5767
++	gcc/
++	* config/arm/t-cs-eabi (MULTILIB_MATCHES): Add cortex-a5 and
++	neon-vfpv4.
++	* config/arm/t-cs-eabi-lite (MULTILIB_MATCHES): Add cortex-a5.
++	* config/arm/t-cs-linux (MULTILIB_MATCHES): Add cortex-a5 and
++	neon-vfpv4.
++	* config/arm/t-cs-uclinux-eabi (MULTILIB_MATCHES): Add cortex-a5.
++	* config/arm/t-cs-linux-lite (MULTILIB_MATCHES): Add cortex-a5.
++
++2009-10-12  Paul Brook  <paul@codesourcery.com>
++
++	Issue #5767
++	gcc/
++	* doc/invoke.texi: Document ARM -mcpu=cortex-a8.
++	* config/arm/bpabi.h (BE8_LINK_SPEC): Add mcpu=cortex-a5.
++	* config/arm/arm-cores.def: Add cortex-a5.
++	* config/arm/arm-tune.md: Regenerate.
++
++2009-10-12  Paul Brook  <paul@codesourcery.com>
++
++	Issue #5767
++	gcc/
++	* config/arm/arm.c (arm_fp_model, arm_fpu_arch, arm_fpu_tune): Remove.
++	(arm_fpu_attr, arm_fpu_desc): Define.
++	(all_fpus): Add FPU information.  Remove enums.
++	(fp_model_for_fpu): Remove.
++	(arm_override_options): Always lookup FPU by name.  Set arm_fpu_attr.
++	(arm_output_epilogue, arm_save_coproc_regs): Use TARGET_FPA_EMU2.
++	(arm_file_start): Use new FPU lookup table data.
++	* config/arm/arm.h (TARGET_FPA_EMU2): Define.
++	(TARGET_VFPD32, TARGET_VFP3, TARGET_VFP_SINGLE, TARGET_VFP_DOUBLE,
++	TARGET_NEON_FP16, TARGET_FP16, TARGET_NEON): Use arm_arch_vfp_*.
++	(enum fputype, arm_fpu_tune): Remove.
++	(vfp_reg_type, arm_fpu_desc): Define.
++	(arm_arch_vfp_rev, arm_arch_vfp_regs, arm_arch_vfp_neon,
++	arm_arch_vfp_fp16): Define.
++	* config/arm/arm.md (fpu): Remove superfluous entries.
++	* config/arm/fpa.md (movxf_fpa): Use TARGET_FPA_EMU2.
++	* config/arm/linux-elf.h (FPUTYPE_DEFAULT): Update.
++	* config/arm/bpabi.h (FPUTYPE_DEFAULT): Update.
++	* config/arm/netbsd-elf.h (FPUTYPE_DEFAULT): Update.
++	* config/arm/vxworks.h (FPUTYPE_DEFAULT): Update.
++	* doc/invoke.texi: Document ARM VFPv4 FPU options.
++	* config.gcc: Add ARM VFPv4 --with-fpu options.
++
++2009-10-11  Sandra Loosemore  <sandra@codesourcery.com>
++
++	* release-notes-csl.xml (NEON improvements): New note, merged
++	from 4 old ones.
++	(Thumb-2 NEON bug fix): Delete.
++	(NEON store improvements): Delete.
++	(NEON vectorizer improvements): Delete.
++	(ARMv5 multilib improvements): Tweak wording.
++	(GCC NEON vector shift bug fix): Delete.
++
++2009-10-11  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Issue #6429 - GDB test failures on ColdFire
++
++	* release-notes-csl.xml (Stack unwinding bug fix): New note.
++
++	gcc/
++	* dwarf2out.c (dwarf2out_frame_debug): Check for queued saves
++	again after processing insn.
++
++2009-10-10  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #6756
++
++	* config/arm/neon.md (*movmisalign<mode>_neon): Split into
++	*movmisalign<mode>_neon_store and *movmisalign<mode>_neon_load.
++	Narrow predicates.
++
++2009-10-09  Sandra Loosemore  <sandra@codesourcery.com>
++
++	* release-notes-csl.xml (Compiler errors with float32_t):
++	Rephrase to avoid bad line break.
++
++2009-10-09  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #6297
++
++	gcc/
++	* config/arm/t-cs-linux (MULTILIB_ALIASES): Don't map Thumb-2 NEON
++	to another library.
++	(MULTILIB_OSDIRNAMES): Add entry for Thumb-2 NEON.
++
++2009-10-09  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (output_move_neon): Use DImode in call to
++	adjust_address.
++
++2009-10-08  Joseph Myers  <joseph@codesourcery.com>
++
++	* release-notes-csl.xml (NEON store improvements): Only enable for
++	ARM targets supporting hardware floating point.
++
++2009-10-08  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Issue #6439
++
++	Backport from mainline:
++	gcc/
++	2009-09-21  Jan Hubicka  <jh@suse.cz>
++	* dwarf2out.c (decl_loc_table_eq): Allow decl_loc_table to be NULL.
++	(dwarf2out_abstract_function): NULLify decl_loc_table at begginig and
++	restore at the end.
++
++2009-10-08  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #6472
++
++	gcc/
++	* config/arm/t-cs-eabi (MULTILIB_MATCHES): Map -mfpu=neon-fma-fp16
++	to -mfpu=neon.
++	* config/arm-t-cs-linux (MULTILIB_MATCHES): Likewise.
++
++2009-10-08  Daniel Gutson  <dgutson@codesourcery.com>
++
++	Issue #6697
++
++	libiberty/
++	* argv.c (expandargv): Use xmalloc instead of malloc,
++	as suggested upstream.
++
++2009-10-07  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (arm_vector_always_misalign): Adjust FIXME
++	comment.
++
++2009-10-07  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #6722
++
++	gcc/
++	* config/arm/arm.c (arm_vector_always_misalign): Return false for
++	big endian.
++	* config/arm/neon.md (movmisalign): Disable for big endian.
++
++2009-10-07  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Issue #6713
++
++	gcc/
++	* tree-sra.c (sra_type_can_be_decomposed_p): Disable SRA for bitfields
++	when compiling for BITS_BIG_ENDIAN target.
++
++2009-10-07  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	* release-notes-csl.xml (NEON store improvements): New note.
++
++2009-10-07  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	gcc/
++	* config/arm/neon.md (*neon_mov<mode>): Reject two non-register
++	operands.
++	(movti, mov<mode>): Call force_reg on one operand if required.
++	* config/arm/vec-common.md (mov<mode>): Likewise.
++
++2009-10-06  Paul Brook  <paul@codesourcery.com>
++
++	Issue #3869
++	gcc/
++	* target.h (gcc_target): Add warn_func_result.
++	* target-def.h (TARGET_WARN_FUNC_RESULT): Define and use.
++	* tree-cfg.h (execute_warn_function_return): Use
++	targetm.warn_func_result.
++	* config/arm/arm.c (TARGET_WARN_FUNC_RESULT): Define.
++	(arm_warn_func_result): New function.
++
++	gcc/testuite/
++	* gcc.target/arm/naked-3.c: New test.
++
++2009-10-05  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Issue #6701
++	gcc/
++	* tree-ssa-structalias.c (get_constraint_for_component_ref): A
++	function decl may be the core of a component ref.
++
++	gcc/testsuite/
++	* g++.dg/opt/alias5.C: New.
++
++	* release-notes-csl.xml: Document.
++
++2009-10-05  Daniel Gutson  <dgutson@codedsourcery.com>
++	Daniel Jacobowitz  <dan@codesourcery.com>
++	Pedro Alves  <pedro@codesourcery.com>
++
++	Issue #6697
++
++	libiberty/
++	* argv.c (consume_whitespace): New function.
++	(only_whitespace): New function.
++	(buildargv): Always use ISSPACE by calling consume_whitespace.
++	(expandargv): Skip empty files.  Do not stop at the first empty
++	argument (calling only_whitespace)..
++	* testsuite/test-expandargv.c: (test_data): Test empty lines
++	and empty arguments.
++	(run_tests): Fix false positives due to shorter arguments. 
++
++	* release-config-csl.xml: Document.
++
++2009-10-02  Paul Brook  <paul@codesourcery.com>
++
++	Issue #6705
++	gcc/
++	* config/arm/arm.c (neon_vector_mem_operand): Disallow PRE_DEC for
++	array loads.
++	(output_move_neon): Remove bogus FIXME.
++
++2009-10-02  Paul Brook  <paul@codesourcery.com>
++
++	Issue #6223
++	gcc/
++	* targhooks.c (default_vector_min_alignment): New function.
++	* targhooks.h (default_vector_min_alignment): Add prototype.
++	* target.h (gcc_target): Add vectorize.vector_min_alignment and
++	vectorize.always_misalign.
++	* expr.c (expand_assignment): Handle MISALIGNED_INDIRECT_REF as a
++	destination.
++	(expand_expr_real_1): Handle writes to MISALIGNED_INDIRECT_REF.
++	* tree-vect-analyze.c (vect_compute_data_ref_alignment): Use
++	targetm.vectorize.vector_min_alignment.
++	* target-def.h (TARGET_VECTOR_MIN_ALIGNMENT): Define.
++	(TARGET_VECTOR_ALWAYS_MISALIGN): Define.
++	(TARGET_VECTORIZE): Use them.
++	* tree-vect-transform.c (vectorizable_store): Honor
++	targetm.vectorize.always_misalign.
++	(vectorizable_load): Ditto.
++	(vect_gen_niters_for_prolog_loop): Use
++	targetm.vectorize.vector_min_alignment.
++	* config/arm/arm.c (arm_vector_min_alignment,
++	arm_vector_always_misalign): New functions.
++	(TARGET_VECTOR_MIN_ALIGNMENT, TARGET_VECTOR_ALWAYS_MISALIGN): Define.
++	(arm_print_operand): Include alignment qualifier in %A.
++	* config/arm/neon.md (movmisalign): Enable on big-endian targets.
++
++	gcc/testsuite/
++	* lib/target-supports.exp (check_effective_target_vect_element_align):
++	New function.
++	* gcc.dg/vect/no-section-anchors-vect-31.c: Use vect_element_align.
++	* gcc.dg/vect/no-section-anchors-vect-64.c: Ditto.
++	* gcc.dg/vect/no-section-anchors-vect-66.c: Ditto.
++	* gcc.dg/vect/no-section-anchors-vect-68.c: Ditto.
++	* gcc.dg/vect/no-section-anchors-vect-69.c: Ditto.
++	* gcc.dg/vect/section-anchors-vect-69.c: Ditto.
++	* gcc.dg/vect/slp-25.c: Ditto.
++	* gcc.dg/vect/vect-109.c: Ditto.
++	* gcc.dg/vect/vect-26.c: Ditto.
++	* gcc.dg/vect/vect-27.c: Ditto.
++	* gcc.dg/vect/vect-28.c: Ditto.
++	* gcc.dg/vect/vect-29.c: Ditto.
++	* gcc.dg/vect/vect-33.c: Ditto.
++	* gcc.dg/vect/vect-42.c: Ditto.
++	* gcc.dg/vect/vect-44.c: Ditto.
++	* gcc.dg/vect/vect-48.c: Ditto.
++	* gcc.dg/vect/vect-50.c: Ditto.
++	* gcc.dg/vect/vect-52.c: Ditto.
++	* gcc.dg/vect/vect-54.c: Ditto.
++	* gcc.dg/vect/vect-56.c: Ditto.
++	* gcc.dg/vect/vect-58.c: Ditto.
++	* gcc.dg/vect/vect-60.c: Ditto.
++	* gcc.dg/vect/vect-70.c: Ditto.
++	* gcc.dg/vect/vect-72.c: Ditto.
++	* gcc.dg/vect/vect-75.c: Ditto.
++	* gcc.dg/vect/vect-87.c: Ditto.
++	* gcc.dg/vect/vect-88.c: Ditto.
++	* gcc.dg/vect/vect-89.c: Ditto.
++	* gcc.dg/vect/vect-91.c: Ditto.
++	* gcc.dg/vect/vect-92.c: Ditto.
++	* gcc.dg/vect/vect-93.c: Ditto.
++	* gcc.dg/vect/vect-95.c: Ditto.
++	* gcc.dg/vect/vect-align-2.c: Ditto.
++	* gcc.dg/vect/vect-multitypes-1.c: Ditto.
++	* gcc.dg/vect/vect-multitypes-3.c: Ditto.
++	* gcc.dg/vect/vect-multitypes-4.c: Ditto.
++	* gcc.dg/vect/vect-multitypes-6.c: Ditto.
++
++2009-10-02  Paul Brook  <paul@codesourcery.com>
++
++	Issue #4896
++	gcc/
++	* config/arm/t-cs-eabi: Change v5t multilib to v5te.
++	* config/arm/t-cs-linux: Ditto.
++	* config/arm/t-cs-linux-lite: Ditto.
++
++2009-10-01  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #5767
++	gcc/
++	* doc/extend.texi (Half-Precision): Update wording to reflect
++	that there are now multiple -mfpu options that enable fp16
++	hardware support.
++
++2009-09-30  Paul Brook  <paul@codesourcery.com>
++
++	gcc/
++	* config/arm/neon.ml (vectype): Add T_floatSF.
++	(string_of_vectype): Add T_floatSF.
++	* config/arm/neon-gen.ml (signed_ctype): Add T_float32 -> T_floatSF.
++	(deftypes): Use float for float32_t.
++	* config/arm/arm_neon.h: Regenerate.
++
++	gcc/testsuite/
++	* g++.dg/other/arm-neon-1.C: New test.
++
++2009-09-29  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Issue #4151 - CYGPATH support for the GDB input file.
++
++	libiberty/
++	* lrealpath.c (lrealpath): Use cygpath on Windows.
++
++2009-09-28  Daniel Gutson <dgutson@codesourcery.com>
++
++	Issue #6041
++
++	Backport from mainline (r148770):
++
++	gcc/
++	* lib1funcs.asm ([__ARM_EABI__]): Add an attribute describing stack
++	preservation properties of code. 
++
++2009-09-25  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++
++	gcc/testuite/
++	2009-09-25  Nathan Froyd  <froydnj@codesourcery.com>
++
++	* gcc.dg/vect/vect.exp: Append extra parameters as separate
++	parameters for alignment-sensitive -fsection-anchors tests.
++
++2009-09-25  Daniel Gutson  <dgutson@codesourcery.com>
++
++	Issue #6409
++
++	gcc/
++	* config/arm/neon.md (neon_vshll_n<mode>): Checking Bounds
++	fixed.
++
++	gcc/testsuite/
++	* gcc.target/arm/neon/vfp-shift-a2t2.c: New test case.
++
++	* release-notes-csl.xml: Document.
++
++2009-09-24  Catherine Moore  <clm@codesourcery.com>
++
++	Issue #6412
++
++	Backport from gcc 4-4:
++
++	gcc/
++	2009-09-21  Richard Sandiford  <rdsandiford@googlemail.com>
++
++	* config/mips/mips.c (mips_override_options): Force flag_dwarf2_cfi_asm
++	to zero.
++
++2009-09-24  Paul Brook  <paul@codesourcery.com>
++
++	gcc/
++	* config/arm/arm_neon.h (float32_t): Define as "float".
++
++2009-09-23  Paul Brook  <paul@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (use_vfp_abi): New function.
++	(aapcs_vfp_is_call_or_return_candidate): Avoid double precision regs
++	when undesirable.
++	(aapcs_vfp_is_return_candidate, aapcs_vfp_is_call_candidate,
++	aapcs_vfp_allocate_return_reg): Use use_vfp_abi.
++
++2009-09-23  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Revert, the sequence is buggy:
++
++	2009-09-09  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	gcc/
++	* config/m68k/linux-unwind.h (m68k_fallback_frame_state): Add
++	another rt_sigreturn sequence.
++
++2009-09-22  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	libstdc++-v3/
++	2009-09-17  Joseph Myers  <joseph@codesourcery.com>
++
++	* testsuite/lib/libstdc++.exp (check_v3_target_binary_io): New.
++	* testsuite/lib/dg-options.exp (dg-require-binary-io): New.
++	* testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc,
++	testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc,
++	testsuite/27_io/basic_filebuf/sgetn/char/1-in.cc,
++	testsuite/27_io/basic_filebuf/sgetn/char/1-io.cc,
++	testsuite/27_io/basic_filebuf/sgetn/char/2-in.cc,
++	testsuite/27_io/basic_filebuf/sgetn/char/2-io.cc,
++	testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc,
++	testsuite/27_io/basic_istream/readsome/char/6746-2.cc,
++	testsuite/27_io/basic_istream/readsome/wchar_t/6746-2.cc,
++	testsuite/27_io/objects/char/10.cc: Use dg-require-binary-io.
++
++2009-09-22  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	gcc/testsuite/
++	2009-09-08  Joseph Myers  <joseph@codesourcery.com>
++
++	* gcc.dg/profile-dir-1.c, gcc.dg/profile-dir-2.c,
++	gcc.dg/profile-dir-3.c: Disable for remote-host testing.
++
++2009-09-19  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issues #6560, #4612
++
++	* release-notes-csl.xml (Preprocessor error handling): New note.
++
++	Backport from mainline:
++
++	gcc:
++	2009-03-29  Joseph Myers  <joseph@codesourcery.com>
++
++	PR preprocessor/34695
++	* Makefile.in (c-opts.o): Depend on c-tree.h.
++	* c-common.c: Move down include of diagnostic.h.
++	(done_lexing, c_cpp_error): New.
++	* c-common.h (done_lexing): Declare.
++	* c-decl.c (c_write_global_declarations): Don't check cpp_errors
++	(parse_in).
++	* c-opts.c: Include c-tree.h.
++	(c_common_init_options): Set preprocessor error callback.
++	(c_common_handle_option): Do not set preprocessor
++	inhibit_warnings, warnings_are_errors, warn_system_headers,
++	pedantic_errors or inhibit_warnings flags.
++	(c_common_post_options): Do not check cpp_errors (parse_in).
++	(c_common_finish): Do not output dependencies if there were
++	errors.  Do not check return value of cpp_finish.
++	* c-ppoutput.c (pp_file_change): Set input_location.
++	* c-tree.h (c_cpp_error): Declare.
++	* diagnostic.c (diagnostic_set_info_translated): Also initialize
++	override_column.
++	(diagnostic_build_prefix): Check override_column.
++	* diagnostic.h (diagnostic_info): Add override_column field.
++	(diagnostic_override_column): Define.
++
++	gcc/cp:
++	2009-03-29  Joseph Myers  <joseph@codesourcery.com>
++
++	PR preprocessor/34695
++	* cp-tree.h (cp_cpp_error): Remove.
++	* error.c (cp_cpp_error): Remove.
++	* parser.c (cp_lexer_new_main): Set done_lexing instead of
++	client_diagnostic and error callback.
++
++	gcc/fortran:
++	2009-03-29  Joseph Myers  <joseph@codesourcery.com>
++
++	PR preprocessor/34695
++	* cpp.c (cb_cpp_error): New.
++	(gfc_cpp_post_options): Don't set cpp_option->inhibit_warnings.
++	Don't check cpp_errors (cpp_in).
++	(gfc_cpp_init_0): Set cb->error.
++
++	gcc/testsuite:
++	2009-03-29  Joseph Myers  <joseph@codesourcery.com>
++
++	PR preprocessor/34695
++	* gcc.dg/builtin-redefine.c, gcc.dg/cpp/redef2.c,
++	gcc.dg/cpp/redef3.c, gcc.dg/cpp/trad/redef2.c: Use dg-message
++	instead of dg-warning for "previous definition" messages.
++	* gcc.dg/cpp/Wvariadic-1.c, gcc.dg/cpp/Wvariadic-3.c: Expect
++	"warnings being treated as errors" message.
++	* gcc.dg/fltconst-1.c: Use -fshow-column.
++
++	libcpp:
++	2009-03-29  Joseph Myers  <joseph@codesourcery.com>
++
++	PR preprocessor/34695
++	* makedepend.c: Remove.
++	* Makefile.in (makedepend_OBJS, makedepend$(EXEEXT)): Remove.
++	(all, clean, TAGS_SOURCES, include): Remove makedepend handling.
++	* directives.c (cpp_errors): Remove.
++	* errors.c (print_location, _cpp_begin_message, v_message):
++	Remove.
++	(cpp_error, cpp_error_with_line): Always use error callback.
++	(cpp_error, cpp_error_with_line, cpp_errno): Return bool.
++	* include/cpplib.h (cpp_options): Remove pedantic_errors,
++	inhibit_warnings, warn_system_headers, inhibit_errors,
++	warnings_are_errors, client_diagnostic.
++	(cpp_callbacks): Add extra arguments to error callback; make it
++	return bool.
++	(cpp_finish): Return void.
++	(cpp_destroy): Remove inaccurate comment about return value.
++	(cpp_errors, CPP_DL_EXTRACT, CPP_DL_WARNING_P): Remove.
++	(CPP_DL_NOTE): Define.
++	* include/line-map.h (linemap_print_containing_files): Remove.
++	* init.c (cpp_finish): Do not check for or return number of
++	errors.
++	* internal.h (cpp_reader): Remove errors field.
++	* line-map.c (linemap_print_containing_files): Remove.
++	* macro.c (_cpp_create_definition): Use CPP_DL_NOTE for message
++	about previous definition.  Only emit it if previous diagnostic
++	was emitted.
++
++	gcc:
++	2009-03-31  Joseph Myers  <joseph@codesourcery.com>
++
++	PR preprocessor/15638
++	* c-common.c (c_cpp_error): Handle CPP_DL_FATAL.
++
++	gcc/fortran:
++	2009-03-31  Joseph Myers  <joseph@codesourcery.com>
++
++	PR preprocessor/15638
++	* cpp.c (cb_cpp_error): Handle CPP_DL_FATAL.
++
++	gcc/testsuite:
++	2009-03-31  Joseph Myers  <joseph@codesourcery.com>
++
++	PR preprocessor/15638
++	* gcc.dg/cpp/missing-header-1.c: New test.
++	* gcc.dg/cpp/include2.c: Only test #include <>.  Expect
++	"compilation terminated" message.
++	* gcc.dg/cpp/include2a.c: New test.  Copy of include2.c but only
++	test #include "".
++	* gcc.dg/pch/counter-2.c, gcc.dg/pch/valid-1.c,
++	gcc.dg/pch/valid-2.c, gcc.dg/pch/warn-1.c: Expect "compilation
++	terminated" message.
++
++	libcpp:
++	2009-03-31  Joseph Myers  <joseph@codesourcery.com>
++
++	PR preprocessor/15638
++	* files.c (_cpp_find_file): Call open_file_failed after diagnosing
++	invalid PCH.
++	(open_file_failed): Make error for missing file fatal.
++	* include/cpplib.h (CPP_DL_FATAL): Define.
++
++	[libcpp/ChangeLog]
++	2009-09-18  Chris Demetriou  <cgd@google.com>
++
++	PR preprocessor/28435:
++	* include/cpplib.h (struct cpp_options): Add new member
++	deps.need_preprocessor_output.
++	* files.c (open_file_failed): If preprocessor output is needed
++	always report an error.
++
++	[gcc/ChangeLog]
++	2009-09-19  Chris Demetriou  <cgd@google.com>
++
++	PR preprocessor/28435:
++	* c-opts.c (c_common_handle_option): For -MD and -MMD, indicate
++	to cpplib that the preprocessor output is needed.
++
++	[gcc/testsuite/ChangeLog]
++	2009-09-19  Chris Demetriou  <cgd@google.com>
++
++	PR preprocessor/28435:
++	* gcc.dg/cpp/missing-header-MD.c: New test.
++	* gcc.dg/cpp/missing-header-MMD.c: New test.
++	* gcc.dg/cpp/missing-sysheader-MD.c: New test.
++	* gcc.dg/cpp/missing-sysheader-MMD.c: New test.
++
++2009-09-11  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Issue #5767
++
++	gcc/
++	* config/arm/arm.c (all_fpus): Add tag-5, tag-6, and neon-fma-fp16.
++	(fp_model_for_fpu): Update.
++	(arm_file_start): Handle new FPUs.
++	* config/arm/arm.h (TARGET_VFPD32, TARGET_VFP3, TARGET_NEON_FP16)
++	(TARGET_NEON): Handle new FPUs.
++	(enum fputype): Add FPUTYPE_VFP_TAG5, FPUTYPE_VFP_TAG6, and
++	FPUTYPE_NEON_FMA_FP16.
++
++2009-09-10  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Issue #5767
++
++	gcc/
++	* config/arm/arm.h (TARGET_VFP_SINGLE, TARGET_VFP_DOUBLE): Define.
++	(enum fputype): Add FPUTYPE_VFP3xD and FPUTYPE_VFP3xD_FP16.
++	* config/arm/arm.c (all_fpus): Handle FPUTYPE_VFP3xD and
++	FPUTYPE_VFP3xD_FP16.
++	(fp_model_for_fpu): Update.
++	(arm_rtx_costs_1, arm_size_rtx_costs, arm_fastmul_rtx_costs)
++	(arm_9e_rtx_costs): Only expect double-precision operations if the FPU
++	provides them.
++	(arm_print_operand): Handle 'p' modifier.
++	(arm_file_start): Handle new FPU types.
++	* config/arm/arm.md: Disable double-precision patterns if the FPU
++	does not provide them.
++	* config/arm/constraints.md: Add new "Dy" constraint for
++	double-precision constants.  Update description of "Dv".
++	* config/arm/vfp.md: Disable double-precision patterns if the FPU
++	does not provide them.
++	(*arm_movdi_vfp, *thumb2_movdi_vfp): Use fcpys to move
++	double-precision values on a single-precision FPU.
++	(*movdf_vfp, *thumb2_movdf_vfp): Likewise.  Use "Dy" for
++	double-precision constants.
++
++2009-09-10  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Issue #5767
++
++	gcc/
++	* config/arm/t-cs-eabi, config/arm/t-cs-eabi-lite,
++	config/arm/t-cs-linux-lite, config/arm/t-cs-uclinux-eabi: Add
++	-march=tag13 to MULTILIB_MATCHES.
++
++2009-09-10  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Issue #5767
++
++	gcc/
++	* config/arm/arm.c (FL_TAG13, FL_FOR_ARCHTAG13): New.
++	(arm_arch_tag13): New.
++	(all_architectures): Add tag13.
++	(arm_override_options): Set arm_arch_tag13.
++	* config/arm/arm.h (TARGET_DSP_MULTIPLY, TARGET_INT_SIMD): Check
++	arm_arch_tag13.
++	(arm_arch_tag13): Declare.
++	* gcc/config/arm/t-arm-elf: Add commented-out match for -march=tag13.
++
++2009-09-09  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Issue #4203
++
++	* release-notes-csl.xml: Fix note.
++
++2009-09-09  Paul Brook  <paul@codesourcery.com>
++
++	Issue #5767
++	gcc/
++	* doc/invoke.texi: Update list of ARM -mfpu= options.
++	* config.gcc: Update ARM --with-fpu option list.
++	* config/arm/arm.c (all_fpus): Add vfpv3-fp16 and vfpv3-d16-fp16.
++	(fp_model_for_fpu): Add FPUTYPE_VFP3D16_FP16 and FPUTYPE_VFP3_FP16.
++	(coproc_secondary_reload_class): Reload HFmode via GENERAL_REGS if no
++	NEON.
++	(arm_hard_regno_mode_ok): Allows HFmode in VFP registers if
++	TARGET_FP16.
++	(arm_file_start): Add FPUTYPE_VFP3D16_FP16 and FPUTYPE_VFP3_FP16.
++	* config/arm/arm.h (TARGET_FP16): Define.
++	(fputype): Add FPUTYPE_VFP3D16_FP16 and FPUTYPE_VFP3_FP16.
++	* config/arm/vfp.md (movhf_vfp_neon): New pattern (was movhf_vfp).
++	(movhf_vfp): Remove NEON instructions.
++	(extendhfsf2, truncsfhf2): Change condition to TARGET_FP16.
++	* config/arm/arm.md (define_attr "fpu"): Add vfpv3d16fp16 and
++	vfpv3fp16.
++	(arm32_movhf): Change condition to !TARGET_FP16. 
++
++	* release-notes-csl.xml: Document.
++
++2009-09-09  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	gcc/
++	* config/m68k/linux-unwind.h (m68k_fallback_frame_state): Add
++	another rt_sigreturn sequence.
++
++2009-09-09  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	gcc/
++	* config/m68k/m68k.h (TRANSFER_FROM_TRAMPOLINE): Avoid warning.
++
++2009-09-08  Paul Brook  <paul@codesourcery.com>
++	    Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Issue #6027
++
++	* release-notes-csl.xml (Optimizer improvements): New note.
++
++	Merge submitted patches:
++	http://gcc.gnu.org/ml/gcc-patches/2009-03/msg00250.html
++
++	2009-02-02  J"orn Rennecke <amylaar@spamcop.net>
++
++	gcc/
++	* tree-ssa-pre.c (ppre_n_insert_for_speed_p): New function.
++	* (do_partial_partial_insertion): Use it to throttle
++	insert_into_preds_of_block calls.
++	* common.opt (-ftree-pre-partial-partial-obliviously): New option.
++
++	2009-01-15  J"orn Rennecke  <joern.rennecke@arc.com>
++
++	gcc/
++	* common.opt (ftree-pre-partial-partial): New option.
++	* opts.c (decode_options): Initialize flag_tree_pre_partial_partial.
++	* tree-ssa-pre.c (execute_pre): Use flag_tree_pre_partial_partial.
++
++2009-09-08  Paul Brook  <paul@codesourcery.com>
++	    Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Issue #6027
++
++	Merge submitted patch:
++	http://gcc.gnu.org/ml/gcc-patches/2008-12/msg00199.html
++
++	2008-12-03  Steven Bosscher  <stevenb.gcc@gmail.com>
++
++	gcc/
++	* opts.c (decode_options): Fix initialization of
++	flag_tree_switch_conversion.  Don't set optimize_size in block
++	that is conditional on optimize_size (sic).  Explicitly disable
++	PRE when optimizing for size (and add comment for rationale).
++	* tree-ssa-pre.c: Update outline of the algorithm.
++	(bitmap_set_and): Prototype.
++	(insert_into_preds_of_block): Don't report discovery of partial
++	redundancies here, do so from the callers instead (see below).
++	(do_regular_insertion): Add counter for an estimate for the number
++	of inserts required to eliminate a partial redundancy.  If the
++	current function is optimized for size, only perform the partial
++	redundancy elimination if this requires inserting in only one
++	predecessor.  Report all found partial redundancies from here.
++	(do_partial_partial_insertion): Report them from here too.
++	(insert_aux): Do not insert for partial-partial redundancies when
++	optimizing for size.
++	(execute_pre): Remove bogus ATTRIBUTE_UNUSED.
++	(do_pre): Run FRE at least, if PRE is disabled.
++	(gate_pre): Return true if flag_tree pre or flag_tree_fre is set.
++
++2009-09-08  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	gcc/testsuite/
++	2009-09-08  Joseph Myers  <joseph@codesourcery.com>
++
++	* gcc.misc-tests/i386-prefetch.exp: Skip tests when multilib flags
++	contain -march.
++	* gcc.dg/tree-ssa/prefetch-7.c, gcc.target/i386/387-1.c,
++	gcc.target/i386/387-5.c, gcc.target/i386/cmov7.c,
++	gcc.target/i386/funcspec-1.c, gcc.target/i386/funcspec-8.c,
++	gcc.target/i386/gcc-have-sync-compare-and-swap-1.c,
++	gcc.target/i386/gcc-have-sync-compare-and-swap-2.c,
++	gcc.target/i386/isa-6.c, gcc.target/i386/lea.c,
++	gcc.target/i386/pentium4-not-mull.c, gcc.target/i386/sse-5.c,
++	gcc.target/i386/ssefn-1.c: Skip when multilib flags contain -march
++	options other than that used in dg-options.
++
++2009-09-07  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	* release-notes-csl.xml: Add note.
++	gcc/
++	* m68k/m68k-devices.def: Add MCF5441x family.
++
++2009-09-04  Nathan Froyd  <froydnj@codesourcery.com>
++
++	* release-notes-csl.xml: Change <code> tag to </code> tag.
++
++2009-09-04  Daniel Gutson  <dgutson@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.md (ctzsi2): Added braces
++	to avoid warning that broke booststrap.
++
++2009-09-02  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	libstdc++-v3/
++	2009-09-02  Joseph Myers  <joseph@codesourcery.com>
++
++	* testsuite/lib/libstdc++.exp (libstdc++_init): Copy .tcc files
++	under util/ to remote host.  Copy .h and .hpp files at more levels
++	under util/ to remote host.
++
++2009-09-02  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	libgcc/
++	* shared-object.mk (c_flags-$(base)$(objext)): New.
++	($(base)$(objext)): Use above.
++	($(base)_s$(objext)): Likewise.
++	* static-object.mk (c_flags-$(base)$(objext)): New.
++	($(base)$(objext)): Use above.
++
++2009-08-26  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Issue #6189 - Enable pre-reload scheduling for Thumb-2
++
++	* release-notes-csl.xml (Improved optimization for Thumb-2): New note.
++
++	gcc/
++	* config/arm/arm.c (arm_override_options): Enable scheduling for
++	Thumb-2.
++
++2009-08-26  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Issue #6131 - Enable additional optimizations by default in Lite
++	Issue #6103 - Reduce default unrolling parameters at -O3
++
++	* release-notes-csl.xml (Improved optimization for ARM): New note.
++
++	gcc/
++	* config/arm/arm.c (arm_override_options): If flag_unroll_loops has
++	the default value, adjust unrolling parameters.
++	(arm_optimization_options): Set flag_unroll_loops to a default value.
++	Enable flag_promote_loop_indices.
++
++2009-08-26  Julian Brown  <julian@codesourcery.com>
++
++	gcc/config/arm/
++	* uclinux-eabi.h (LINK_GCC_C_SEQUENCE_SPEC): Override definition
++	for uclinux.
++
++2009-08-26  Kazu Hirata  <kazu@codesourcery.com>
++
++	Issue #6089
++	gcc/
++	* config/arm/arm.c (arm_rtx_costs_1): Don't special case for
++	Thumb-2 in the MINUS case.
++
++2009-08-21  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Issue #6264
++
++	gcc/
++	* tree-ssa-remove-local-statics.c (maybe_discover_new_declaration):
++	Don't consider non-local statics as eligible for optimization.
++
++	gcc/cp/
++	* decl2.c (mark_used): Mark _DECLs as DECL_NONLOCAL if appropriate.
++
++	gcc/testsuite/
++	* g++.dg/remove-local-statics-1.C: New test.
++	* g++.dg/remove-local-statics-2.C: New test.
++
++2009-08-20  Maciej W. Rozycki  <macro@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++	2008-10-02  Maciej W. Rozycki  <macro@codesourcery.com>
++	Issue #3673
++	gcc/testsuite/
++	* lib/target-supports.exp
++	(check_effective_target_arm_iwmmxt_ok): New procedure.
++	* gcc.target/arm/mmx-1.c: Only run if arm_iwmmxt_ok.
++
++	gcc/testsuite/
++	* gcc.target/arm/mmx-1.c: Remove the exclusion for
++	-mfloat-abi=softfp.
++
++2009-08-18  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++	
++	gcc/testsuite/
++	2009-08-18  Nathan Froyd  <froydnj@codesourcery.com>
++	
++	* gcc.dg/vect/vect.exp: Add new stanza for aligned-section-anchors-*
++	tests.
++	* gcc.dg/vect/section-anchors-nest-1.c: Rename to...
++	* gcc.dg/vect/aligned-section-anchors-nest-1.c: ...this.  Remove
++	dg-options.  Fix dg-final clause.
++
++2009-08-16  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	gcc/
++	* config/m68k/lb1sf68.asm (PICCALL): Use long branch to subroutine
++	for supporting ColdFire ISAs.
++
++2009-08-16  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	gcc/
++	* config/m68k/linux-unwind.h (m68k_fallback_frame_state): Add
++	alternative rt_sigreturn sequence.
++
++2009-08-14  Andrew Stubbs  <ams@codesourcery.com>
++
++	Issue #6120
++
++	Backport from mainline:
++
++	gcc/
++	2009-08-11  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++	* reload.c (find_reloads_subreg_address): Check the original
++	req_equiv_mem address to detect the case where an address is
++	not valid in the outer mode.
++
++2009-08-14  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* longlong.h (SH udiv_qrnnd) Mark "t" register clobbered.:
++
++2009-08-14  Andrew Stubbs  <ams@codesourcery.com>
++
++	libstdc++-v3/
++	* config/cpu/sh/atomicity.h (__exchange_and_add): Set earlyclobber constraint.
++
++2009-08-13  Maciej W. Rozycki  <macro@codesourcery.com>
++
++	* release-notes-csl.xml (C++ exception matching): Use the correct
++	sequence to get the & character.
++
++2009-08-12  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/testsuite/
++	* gcc.dg/tree-ssa/pr21559.c: Compile with -fno-remove-local-statics.
++	* gcc.dg/tree-ssa/ssa-dse-6.c: Likewise.
++
++2009-08-11  Kazu Hirata  <kazu@codesourcery.com>
++
++	Issue #6172
++	Backport from FSF:
++	gcc/
++	2009-07-15  Richard Earnshaw  <rearnsha@arm.com>
++	* arm.md (ior_xor): New code iterator.
++	(split for ior/xor with shift and zero-extend): New split pattern.
++	* arm/predicates.md (subreg_lowpart_operator): New special predicate.
++
++2009-08-11  Kazu Hirata  <kazu@codesourcery.com>
++
++	Issue #6172
++	Backport from FSF:
++	gcc/
++	2009-06-19  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
++	PR target/40482
++	* config/arm/arm.c (thumb_shiftable_const): Truncate val to 
++	32 bits.
++	* config/arm/arm.md: Likewise.
++
++	gcc/testsuite/
++	2009-06-19  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
++	PR target/40482
++	* gcc.target/arm/pr40482.c: New test.
++	
++2009-08-11  Kazu Hirata  <kazu@codesourcery.com>
++
++	Issue #6172
++	Backport from FSF:
++	gcc/
++	2009-06-13  Richard Earnshaw  <rearnsha@arm.com>
++	PR target/40327
++	* arm/constraints.md (Pa, Pb): New constraints.
++	* arm/arm.md (thumb1_addsi3): Support more complex additions.  Add a 
++	split pattern to deal with them.
++
++2009-08-11  Kazu Hirata  <kazu@codesourcery.com>
++
++	Issue #6172
++	Backport from FSF:
++	gcc/
++	2009-06-04  Richard Earnshaw  <rearnsha@arm.com>
++	PR target/10242
++	* arm.md (arm_addsi3): Don't try to split an add with an
++	eliminable register until after reload has completed.
++
++2009-08-11  Kazu Hirata  <kazu@codesourcery.com>
++
++	Issue #6172
++	Backport from FSF:
++	gcc/
++	2009-06-02  Richard Earnshaw  <rearnsha@arm.com>
++	* arm.c (arm_get_frame_offsets): Prefer using r3 for padding a
++	push/pop multiple to 8-byte alignment.
++
++2009-08-10  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/mips/t-sgxx-linux (MULTILIB_MATCHES),
++	config/mips/cs-sgxx-linux.h (SYSROOT_SUFFIX_SPEC): Handle new
++	pre-MIPS32 CPUs.  Correct "4ks" typo.  Handle MIPS64 CPUs.
++
++2009-08-06  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Issue 1080
++	gcc/testsuite/
++	* g++.dg/eh/ref1.C: Add dg-bogus for non-arm targets.
++
++2009-08-04  Catherine Moore  <clm@codesourcery.com>
++
++	* gcc/
++	* config/mips/linux.h (SUBTARGET_OVERRIDE_OPTIONS): Define.
++	* config/mips/mips.c (mips_override_options): Move the uclibc
++	check to SUBTARGET_OVERRIDE_OPTIONS.
++
++2009-08-04  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #6004
++
++	* release-notes-csl.xml (Support for MIPS 1004K cores): New note.
++
++	gcc/
++	* config/mips/sdemtk.h (MIPS_ARCH_FLOAT_SPEC): Add pattern for 1004K.
++
++2009-08-04  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #6004
++
++	Backport from FSF:
++	gcc/
++	* doc/invoke.texi (MIPS Options): Document new 1004K -march options.
++	* config/mips/mips.c (mips_cpu_info_table): Add 1004K cores.
++	* config/mips/mips.h (MIPS_ISA_LEVEL_SPEC): Add pattern for 1004K.
++	(MIPS_ARCH_FLOAT_SPEC): Likewise.
++	(BASE_DRIVER_SELF_SPECS): Likewise.
++
++2009-08-04  Nathan Froyd  <froydnj@codesourcery.com>
++
++	gcc/
++	* c.opt (fremove-local-statics): Enable for C++.
++
++2009-08-04  Catherine Moore  <clm@codesourcery.com>
++
++	gcc/
++	* config/mips/mips.opt (muclibc): Delete.
++	* config/mips/mips.c (mips_override_options): Check
++	linux_uclibc instead of building_for_uclibc.
++
++2009-08-02  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #5176
++
++	* release-notes-csl.xml: Add release note for
++	-fremove-local-statics default.
++
++2009-07-29  Paul Brook  <paul@codesourcery.com>
++
++	gcc/
++	* config/arm/lib1funcs.asm (ARM_DIV_BODY): Add Thumb-2 implementation.
++	(udivsi3, aeabi_uidivmod, divsi3, aeabi_idivmod): Only use Thumb-1
++	implementation on ARMv6-M.
++
++2009-07-29  Paul Brook  <paul@codesourcery.com>
++
++	gcc/
++	* config/arm/lib1funcs.asm (clear_cache): Use ARM_FUNC_START and
++	do_push/do_pop.
++
++2009-07-27  Joseph Myers  <joseph@codesourcery.com>
++
++	* release-notes-csl.xml: Add release note for MinGW update.
++
++2009-07-27  Paul Brook  <paul@codesourcery.com>
++
++	gcc/
++	* config/arm/t-cs-eabi: Remove ARMv4 VFP multilib. Add big-endian
++	ARMv5t VFP multilib.
++
++2009-07-24  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	libstdc++-v3/
++	2009-07-24  Joseph Myers  <joseph@codesourcery.com>
++
++	* include/c_global/cwchar (swprintf, vswprintf): Do not use if
++	_GLIBCXX_HAVE_BROKEN_VSWPRINTF.
++	* testsuite/lib/libstdc++.exp (check_v3_target_swprintf): New.
++	* testsuite/lib/dg-options.exp (dg-require-swprintf): New.
++	* testsuite/21_strings/headers/cwchar/functions_std.cc,
++	testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4402.cc,
++	testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc:
++	Use dg-require-swprintf.
++
++2009-07-24  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Issue #1080
++	* release-notes-csl.xml: Dcoument.
++
++	gcc/
++	* targhooks.c (hook_cxx_ttype_ref_in_bit0): New.
++	* targhooks.h (hook_cxx_ttype_ref_in_bit0): Declare.
++	* target.h (ttype_ref_encode): New field for c++.
++	* target-def.h (TARGET_CXX_TTYPE_REF_ENCODE): New.
++	(TARGET_CXX): Add it.
++	* except.c (output_ttype): If the expression is POINTER_PLUS_EXPR
++	look at the first operand for the exception type object.
++	* config/arm/arm.c (TARGET_CXX_TTYPE_REF_ENCODE): Override.
++	* config/arm/unwind-arm.c (__gnu_unwind_pr_common): Add comment
++	about references.
++	* config/arm/unwind-arm.h (_Unwind_decode_target2): Propagate the
++	bottom 2 bits.
++
++	libstdc++-v3/
++	* libsupc++/eh_arm.cc (__cxa_type_match): Use is_reference
++	parameter.
++	* libsupc++/eh_personality.cc (get_ttype_entry): Add is_ref
++	parameter and set it appropriately.
++	(get_adjusted_ptr): Add is_ref parameter and use it.
++	(check_exception_spec): Pass referenceness to get_adjusted_ptr.
++	(PERSONALITY_FUNCTION): Process referenceness.
++
++	gcc/cp/
++	* rtti.c (get_tinfo_decl): Assert not reference type.
++	* except.c (build_eh_type_type): Use ttype_ref_encode if the type
++	is a reference.
++	(expand_start_catch_block): Preserve referenceness on pointers if
++	ttype_ref_encode is non-NULL.
++	(finish_eh_spec_block): Likewise.
++	(can_convert_eh): Implement exactly the same algorithm as the
++	runtime matcher.
++	* semantics.c (finish_handler_parms): Look through reference types
++	before marking the exception object type.
++
++	gcc/testsuite/
++	* g++.dg/eh/ref1.C: New.
++	* g++.dg/eh/ref2.C: New.
++	
++2009-07-23  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	gcc/testsuite/
++	2009-07-23  Joseph Myers  <joseph@codesourcery.com>
++
++	* gcc.dg/dll-4.c: Allow foo1 and foo2 in either order in
++	scan-assembler.
++
++2009-07-23  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #5962
++
++	Backport:
++
++	gcc/
++	2009-05-28  Dave Korn  <dave.korn.cygwin@gmail.com>
++
++	PR target/37216
++
++	* configure.ac (HAVE_GAS_ALIGNED_COMM):  Add autoconf test and
++	macro definition for support of three-operand format aligned
++	.comm directive in assembler on cygwin/pe/mingw target OS.
++	* configure:  Regenerate.
++	* config.h:  Regenerate.
++
++	* config/i386/winnt.c (i386_pe_asm_output_aligned_decl_common):  Use
++	aligned form of .comm directive if -mpe-aligned-commons is in effect.
++	* config/i386/cygming.opt (-mpe-aligned-commons):  Add new option.
++
++	* doc/invoke.texi (-mpe-aligned-commons):  Document new target option.
++	* doc/tm.texi (ASM_OUTPUT_COMMON):  Document zero size commons.
++
++	gcc/testsuite/
++	2009-05-28  Dave Korn  <dave.korn.cygwin@gmail.com>
++	            Uros Bizjak  <ubizjak@gmail.com>
++	            Danny Smith  <dansmister@gmail.com>
++
++	PR target/37216
++
++	* lib/target-supports.exp (check_effective_target_pe_aligned_commons):
++	New function.
++	* gcc.target/i386/pr37216.c:  New test source file.
++	* gcc.dg/compat/struct-layout-1_generate.c (dg_options[]):  No longer
++	use -fno-common for testing Cygwin and MinGW targets.
++
++2009-07-23  Nathan Sidwell  <nathan@codesourcery.com>
++
++	gcc/
++	* target-def.h (TARGET_ASM_TTYPE): Correct typo of TARGET_ARM_TTYPE.
++	* config/arm/arm-unwind.c (__gnu_Unwind_Backtrace): Remove unused
++	label.
++
++2009-07-22  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #5774
++	Merge from GCC 4.4.1.
++	* release-notes-csl.xml: Update release note for upgrade to 4.4.
++
++2009-07-22  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Issue #4203
++
++	* release-notes-csl.xml: Add note for the previous commit.
++
++2009-07-22  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Issue #4203
++	Backport from upstream:
++
++	gcc/
++	2009-07-09  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	* varasm.c (build_constant_desc): Don't share RTL in pool entries.
++	gcc/testsuite/
++	2009-07-09  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	* gcc.target/m68k/20090709-1.c: New.
++
++2009-07-21  Paul Brook <paul@codesourcery.com>
++
++	Issue #6016
++
++	gcc/
++	* tree-vectorizer.c (increase_alignment): Handle nested arrays.
++	Terminate debug dump with newline.
++
++	gcc/testsuite/
++	* gcc.dg/vect/section-anchors-nest-1.c: New test.
++	* lib/target-supports.exp (check_effective_target_section_anchors):
++	Add arm*-*-*.
++
++2009-07-20  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #5565
++
++	fixincludes/
++	* fixincl.tpl (sed_cmd_z): Hardcode to "sed".
++	* fixincl.x: Regenerate.
++
++2009-07-20  Andrew Stubbs  <ams@codesourcery.com>
++
++	* release-notes-csl.xml: Document issue 6013 fix.
++
++2009-07-19  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/mips/t-wrs-linux (MULTILIB_OPTIONS, MULTILIB_DIRNAMES,
++	MULTILIB_EXCEPTIONS, MULTILIB_OSDIRNAMES): Add VR5500 multilib.
++	* config/mips/wrs-linux.h (SYSROOT_SUFFIX_SPEC: Update for VR5500
++	multilib.
++
++2009-07-19  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/i386/t-wrs-linux, config/i386/wrs-linux.h,
++	config/i386/wrs-linux.opt: New.
++	* config.gcc (i586-wrs-linux-gnu): Use these files.
++
++2009-07-17  Nathan Froyd  <froydnj@codesourcery.com>
++
++	gcc/
++	* tree-ssa-loop-promote.c (analyze_loop_index_defintion_pattern):
++	Don't call TREE_OPERAND.
++
++2009-07-17  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	config/
++	2009-07-17  Joseph Myers  <joseph@codesourcery.com>
++
++	PR other/40784
++	* tls.m4 (GCC_CHECK_TLS): Add extra quoting around argument to
++	AC_LINK_IFELSE.
++
++	libjava/
++	2009-07-17  Joseph Myers  <joseph@codesourcery.com>
++
++	PR other/40784
++	* configure: Regenerate.
++
++	libstdc++-v3/
++	2009-07-17  Joseph Myers  <joseph@codesourcery.com>
++
++	PR other/40784
++	* configure: Regenerate.
++
++2009-07-17  Andrew Stubbs  <ams@codesourcery.com>
++
++	Issue #6013
++
++	Backport from mainline:
++	gcc/
++	2009-05-12  Kaz Kojima  <kkojima@gcc.gnu.org>
++	* config/sh/sh.h (OVERRIDE_OPTIONS): Clear flag_schedule_insns
++	unless -fschedule-insns is specified.
++
++2009-07-16  Joseph Myers  <joseph@codesourcery.com>
++
++	config/
++	* tls.m4 (GCC_CHECK_TLS): Restrict shared library LDFLAGS to Linux
++	host (resync with upstream version).
++
++	libgomp/
++	* configure: Regenerate.
++
++	libjava/
++	* configure: Regenerate.
++
++	libmudflap/
++	* configure: Regenerate.
++
++	libstdc++-v3/
++	* configure: Regenerate.
++
++2009-07-14  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	gcc/testsuite/
++	2009-07-14  Joseph Myers  <joseph@codesourcery.com>
++
++	* gcc.target/i386/pr37843-1.c, gcc.target/i386/pr37843-2.c,
++	gcc.target/i386/pr37843-3.c: Allow leading underscore on function
++	name.
++
++2009-07-14  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Revert:
++	
++	2009-07-02  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	Merge from Sourcery G++ 4.3:
++	gcc/
++	* haifa-sched.c (max_issue): Fix handling of number of instruction to
++	try.
++
++2009-07-14  Paul Brook <paul@codesourcery.com>
++
++	Issue #5829
++
++	config/
++	* stdint.m4: Avoid pulling in headers when checking basic type sizes.
++
++	libstdc++-v3/
++	* configure: Regenerate.
++
++2009-07-13  Paul Brook <paul@codesourcery.com>
++
++	Issue #2335
++	gcc/
++	* doc/tm.texi (ARG_POINTER_CFA_OFFSET): Document new default.
++	* defaults.h (ARG_POINTER_CFA_OFFSET): Add pretend_args_size.
++	* config/spu/spu.h (ARG_POINTER_CFA_OFFSET): Add pretend_args_size.
++
++2009-07-10  Mark Mitchell  <mark@codesourcery.com>
++
++	Issue #6006
++	
++	* release-notes-csl.xml: Document.
++
++	Backport from mainline:
++	2009-07-10  Mark Mitchell  <mark@codesourcery.com>
++	* config/arm/thumb2.md (thumb2_cbz): Correct computation of length
++	attribute.
++	(thumb2_cbnz): Likewise.
++
++2009-07-10  Julian Brown  <julian@codesourcery.com>
++
++	Issue #5999
++
++	gcc/config/arm
++	* neon.md (movmisalign<mode>): Add neon_type attribute.
++
++2009-07-10  Daniel Gutson  <dgutson@codesourcery.com>
++
++	Issue 4909
++
++	gcc/testsuite/
++	* gcc.target/arm/ctz.c: Fixed scan-assembler target.
++
++2009-07-09  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/testsuite/
++	* g++.dg/torture/pr36191.C: Don't attempt to test with
++	-fomit-frame-pointer.
++
++2009-07-09  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* config.gcc (sh*-*-*): Remove cs-sgxxlite-linux.opt.
++	* config/sh/cs-sgxxlite-linux.h (SUBTARGET_OVERRIDE_OPTIONS): Use
++	linux_uclibc instead of build_for_uclibc.
++	* config/sh/cs-sgxxlite-linux.opt: Delete file.
++
++2009-07-09  Julian Brown  <julian@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-05-16  Richard Earnshaw  <rearnsha@arm.com>
++
++	gcc/config/arm/
++	* arm.md (movdi2): Copy non-reg values to DImode registers.
++
++2009-07-08  Catherine Moore  <clm@codesourcery.com>
++
++	gcc/testsuite/
++	* gcc.dg/torture/type-generic-1.c: Link with floating point
++	emulation for target mips-sde-elf.
++
++2009-07-07  Catherine Moore  <clm@codesourcery.com>
++
++	gcc/
++	* config/mips/mips.md (abs<mode>2):  Remove checks for HARD_FLOAT
++	and TARGET_SDE.
++
++2009-07-07  Catherine Moore  <clm@codesourcery.com>
++
++	gcc/testsuite/
++	* gcc.target/mips/clear-cache-2.c: Add target checks for
++	mips-sde-elf.
++
++2009-07-06  Paul Brook <paul@codesourcery.com>
++
++	Issue #3979
++	gcc/
++	* gengtype-lex.l (IWORD): Add HARD_REG_SET.
++	* expr.c (expand_expr_real_1): Record modified hard registers.
++	* function.h: Include hard-reg-set.h.
++	(rtl_data): Add asm_clobbers.
++	* ira.c (compute_regs_asm_clobbered): Use crtl->asm_clobbers.
++	(setup_eliminable_regset): Ditto.
++
++	gcc/testsuite/
++	* gcc.target/arm/frame-pointer-1.c: New test.
++
++2009-07-06  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++
++	gcc/testsuite/
++	2009-07-06  Nathan Froyd  <froydnj@codesourcery.com>
++
++	* lib/target-supports.exp
++	(check_effective_target_mips_newabi_large_long_double): New.
++	* gcc.target/mips/fpr-moves-5.c: Require mips_newabi_large_long_double
++	target.
++	* gcc.target/mips/fpr-moves-6.c: Likewise.
++
++2009-07-05  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	libstdc++-v3/
++	2009-07-05  Joseph Myers  <joseph@codesourcery.com>
++
++	*
++	testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stod.cc,
++	testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stof.cc,
++	testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc,
++	testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc,
++	testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stold.cc,
++	testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc,
++	testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc,
++	testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc,
++	testsuite/21_strings/basic_string/numeric_conversions/wchar_t/to_wstring.cc,
++	testsuite/ext/vstring/element_access/char/front_back.cc,
++	testsuite/ext/vstring/element_access/wchar_t/front_back.cc,
++	testsuite/ext/vstring/init-list.cc,
++	testsuite/ext/vstring/moveable.cc,
++	testsuite/ext/vstring/requirements/citerators.cc,
++	testsuite/ext/vstring/requirements/explicit_instantiation/char16_t/1.cc,
++	testsuite/ext/vstring/requirements/explicit_instantiation/char32_t/1.cc:
++	Use dg-require-string-conversions.
++
++2009-07-03  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #1063
++
++	config/
++	* tls.m4 (GCC_CHECK_TLS): Also test TLS in a shared library when
++	cross-compiling.
++
++	libgomp/
++	* configure: Regenerate.
++
++	libjava/
++	* configure: Regenerate.
++
++	libmudflap/
++	* configure: Regenerate.
++
++	libstdc++-v3/
++	* configure: Regenerate.
++
++2009-07-03  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-05-26  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++	gcc/
++	2008-04-30  Nathan Froyd  <froydnj@codesourcery.com>
++	* config/rs6000/t-ppccomm: Add build rules for new files.
++	(LIB2FUNCS_STATIC_EXTRA): Add new files.
++
++	libgcc/
++	2008-04-30  Nathan Froyd  <froydnj@codesourcery.com>
++	* config/rs6000/t-ppccomm: Add build rules for new files.
++	(LIB2ADD_ST): New variable.
++
++2009-07-03  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	gcc/
++	* doc/tm.texi (TARGET_COMMUTATIVE_OPERAND_PRECEDENCE): Document.
++	* target.h (commutative_operand_precedence): New hook.
++	* target-def.h (TARGET_COMMUTATIVE_OPERAND_PRECEDENCE): Define
++	the default.
++	* rtlanal.c (commutative_operand_precedence): Use the new hook.
++	Move favoring of pointer objects to ...
++	* config/rs6000/rs6000.c (rs6000_commutative_operand_precedence):
++	... here.  Implement hook.
++
++2009-07-02  Andrew Jenner  <andrew@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2009-03-30  Andrew Jenner  <andrew@codesourcery.com>
++
++        gcc/
++        * config.gcc: Accept montavista*-, not just montavista-.
++        * config/mips/t-montavista-linux: Add Octeon multilibs.
++
++2009-07-02  Andrew Jenner  <andrew@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2009-02-04  Andrew Jenner  <andrew@codesourcery.com>
++
++        gcc/
++        * config.gcc: Handle arm-montavista-linux-gnueabi,
++        mips-montavista-linux-gnu, mips64octeon*-montavista-elf* and
++        powerpc-montavista-linux-gnu.
++        * config/rs6000/t-montavista-linux: New file.
++        * config/rs6000/montavista-linux.h: New file.
++        * config/arm/t-montavista-linux: New file.
++        * config/arm/montavista-linux.h: New file.
++        * config/mips/t-montavista-linux: New file.
++        * config/mips/t-montavista-elf: New file.
++        * config/mips/montavista-linux.h: New file.
++
++        libgcc/
++        * config.host: Handle mips64octeon-montavista-elf*.
++
++2009-07-02  Andrew Jenner  <andrew@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2009-02-17  Andrew Jenner  <andrew@codesourcery.com>
++		    Maciej Rozycki  <macro@codesourcery.com>
++
++        gcc/
++        * unwind.inc (_Unwind_RaiseException): Use return value of
++        uw_init_context.
++        * unwind-dw2.c (uw_init_context): Make macro an expression instead of
++        a statement.
++        (uw_init_context_1): Add return value.
++        * unwind-sjlj.c (uw_init_context): Add return value.
++
++2009-07-02  Catherine Moore  <clm@codesourcery.com>
++
++	gcc/
++	* config/mips/mips.h (ISA_HAS_UL_US): Delete extraneous
++	definition.  Fix typo.
++	* config/mips/mips.c (mips_expand_ext_as_unaligned_load):
++	Generate mov_uld or mov_ulw if ISA_HAS_UL_US.
++	* config/mips/mips.md (UNSPEC_UNALIGNED_LOAD): Equate to 60.
++	(UNSPEC_UNALIGNED_STORE): Equate to 61.
++
++2009-07-02  Mark Mitchell  <mark@codesourcery.com>
++
++	Issue #5943
++	
++	Backport from mainline:
++
++	2009-07-02  Mark Mitchell  <mark@codesourcery.com>
++
++	gcc/cp/
++	* typeck.c (cp_build_binary_op): Move warnings about use of NULL
++	in arithmetic earlier and allow comparisions of NULL with
++	pointers-to-members.
++
++	gcc/testsuite/
++	* g++.dg/warn/null4.C: Extend.
++
++2009-07-02  Maxim Kuvyrkov  <maxim@codesourcery.com>
++        
++	Merge from Sourcery G++ 4.3:
++	
++	gcc/
++	* haifa-sched.c (max_issue): Fix handling of number of instruction to
++	try.
++
++2009-07-02  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++	
++	gcc/
++	* haifa-sched.c (insn_finishes_cycle_p): New static function.
++        (max_issue): Use it.
++        * sched-int.h (struct sched_info: insn_finishes_block_p): New
++        scheduler hook.
++        * sched-rgn.c (rgn_insn_finishes_block_p): Implement it.
++        (region_sched_info): Update.
++        * sched-ebb.c (ebb_sched_info): Update.
++        * modulo-sched.c (sms_sched_info): Update.
++	* sel-sched-ir.c (sched_sel_haifa_sched_info): Update.
++
++2009-07-01  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #4168
++
++	gcc/
++	* gcc.c (using_libgcc, executing_linker): New.
++	(execute): Check that libgcc.a exists in the multilib directory
++	when linking.
++	(process_command): Set using_libgcc to 0 for -nodefaultlibs,
++	-nostdlib and -B options.
++	(main): Set executing_linker when processing spec that may run the
++	linker.
++
++2009-07-01  Catherine Moore  <clm@codesourcery.com>
++
++	gcc/testsuite/
++	* gcc.target/mips/mips.exp (mips_option_groups): Add
++	-mocteon-useun.
++	* gcc.target/mips/octeon-useun.c: Change dg-mips-options to
++	dg-options.
++	* gcc.target/mips/branch-2.c: Likewise.
++
++2009-07-01  Catherine Moore  <clm@codesourcery.com>
++
++	gcc/testsuite/
++	* gcc.c-torture/execute/ieee/ieee.exp: Link with floating
++	point emulation for mips-sde-elf targets.
++
++2009-06-30  Daniel Gutson  <dgutson@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-08-27  Daniel Gutson  <daniel@codesourcery.com>
++
++	Janus 2CC ARM shift fix:
++	gcc/
++	* config/arm/arm.md (*addsi3_carryin_shift): Added "length" clause
++	to handle the extra NOP.
++	(andsi_not_shiftsi_si): Likewise.
++	(*thumb1_ashlsi3): Likewise.
++	(*thumb1_ashrsi3): Likewise.
++	(*thumb1_lshrsi3): Likewise.
++	(*thumb1_rotrsi3): Likewise.
++	(*arm_shiftsi3): Likewise.
++	(*shiftsi3_compare0): Likewise.
++	(*shiftsi3_compare0_scratch): Likewise.
++	(*arm_notsi_shiftsi): Likewise.
++	(*arm_notsi_shiftsi_compare0): Likewise.
++	(*arm_not_shiftsi_compare0_scratch): Likewise.
++	(*arm_cmpsi_shiftsi): Likewise.
++	(*arm_cmpsi_shiftsi_swp): Likewise.
++	(*arm_cmpsi_negshiftsi_si): Likewise.
++	(*arith_shiftsi): Likewise.
++	(*arith_shiftsi_compare0): Likewise.
++	(*arith_shiftsi_compare0_scratch): Likewise.
++	(*sub_shiftsi): Likewise.
++	(*sub_shiftsi_compare0): Likewise.
++	(*sub_shiftsi_compare0_scratch): Likewise.
++	(*if_shift_move): Likewise.
++	(*if_move_shift): Likewise.
++	(*if_shift_shift): Likewise.
++	(*thumb1_ashlsi3_janus2): New. Duplicated pattern to handle the
++	extra NOP.
++	(*thumb1_ashrsi3_janus2): Likewise.
++	(*thumb1_lshrsi3_janus2): Likewise.
++	(*thumb1_rotrsi3_janus2): Likewise.
++	* config/arm/arm.c (arm_print_operand): Added the nop after the %S
++	pattern.
++	(arm_override_options): Added handling of the -mfix-janus-2cc flag
++	* config/arm/arm.h (janus2_code): Declare.
++	* config/arm/arm.opt (-mfix-janus-2cc): New.
++  
++	testsuite/
++	* lib/target-supports.exp (check_effective_target_arm_no_thumb):
++	New function.
++	* gcc.target/arm/janus-2cc-shift-1.c: New.
++	* gcc.target/arm/janus-2cc-shift-2.c: New.
++
++2009-06-29  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	gcc/
++	* config/arm/neon-testgen.ml: Use dg-add-options arm_neon.
++
++	gcc/testsuite/
++	* gcc/target/arm/neon/: Regenerated test cases.
++
++	* gcc.target/arm/neon/polytypes.c,
++	gcc.target/arm/neon-vmla-1.c, gcc.target/arm/neon-vmls-1.c,
++	gcc.target/arm/neon-cond-1.c, gcc.dg/torture/arm-fp16-ops-8.c,
++	gcc.dg/torture/arm-fp16-ops-7.c, g++.dg/ext/arm-fp16/arm-fp16-ops-7.C,
++	g++.dg/ext/arm-fp16/arm-fp16-ops-8.C, g++.dg/abi/mangle-neon.C: Use
++	dg-add-options arm_neon.
++
++	* gcc.target/arm/fp16-compile-vcvt.c, gcc.dg/torture/arm-fp16-ops-5.c,
++	gcc.dg/torture/arm-fp16-ops-6.c, g++.dg/ext/arm-fp16/arm-fp16-ops-5.C,
++	g++.dg/ext/arm-fp16/arm-fp16-ops-6.C: Use dg-add-options arm_neon_fp16
++	and arm_neon_fp16_ok.
++
++	* gcc.dg/vect/vect.exp, g++.dg/vect/vect.exp,
++	gfortran.dg/vect/vect.exp: Use add_options_for_arm_neon.
++
++	* lib/target-supports.exp (add_options_for_arm_neon): New.
++	(check_effective_target_arm_neon_ok_nocache): New, from
++	check_effective_target_arm_neon_ok.  Check multiple possibilities.
++	(check_effective_target_arm_neon_ok): Use
++	check_effective_target_arm_neon_ok_nocache.
++	(add_options_for_arm_neon_fp16)
++	(check_effective_target_arm_neon_fp16_ok)
++	check_effective_target_arm_neon_fp16_ok_nocache): New.
++	(check_effective_target_arm_neon_hw): Use add_options_for_arm_neon.
++
++2009-06-29  Paul Brook <paul@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2005-03-10  Julian Brown  <julian@codesourcery.com>
++	libstdc++-v3/
++	* configure.ac (LIBSUPCXX_PRONLY): New AM_CONDITIONAL: yes
++	if we are compiling for SymbianOS on ARM.
++	* include/Makefile.am: Don't install C++ headers if
++	LIBSUPCXX_PRONLY is true.
++	* libsupc++/Makefile.am: Include only eh_personality.cc
++	in libsupc++ if LIBSUPCXX_PRONLY is true.
++	* Makefile.in: Regenerate.
++	* configure: Regenerate.
++	* include/Makefile.in: Regenerate.
++	* libmath/Makefile.in: Regenerate.
++	* libsupc++/Makefile.in: Regenerate.
++	* po/Makefile.in: Regenerate.
++	* src/Makefile.in: Regenerate.
++	* testsuite/Makefile.in: Regenerate.
++
++2009-06-29  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++	2009-02-27  Daniel Gutson  <dgutson@codesourcery.com>
++	Issue #4459
++	gcc/
++	* config/arm/linux-eabi.h (LINK_SPEC): BE8_LINK_SPEC added.
++	* config/arm/arm-cores.def: Comment added.
++	* config/arm/bpapi.h (BE8_LINK_SPEC): New define.
++	(LINK_SPEC): BE_LINK_SPEC added.
++
++	Merge from Sourcery G++ 4.3:
++	2009-04-21  Andrew Jenner  <andrew@codesourcery.com>
++	gcc/testsuite/
++	* lib/target-supports.exp: Handle powerpc-*-elf.
++
++2009-06-26  Catherine Moore  <clm@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-08-10  Catherine Moore  <clm@codesourcery.com>
++	Merge from Sourcery G++ 4.2:
++	2008-02-28  Julian Brown  <julian@codesourcery.com>
++	Merge from MIPS:
++	gcc/
++	* Makefile.in (stmp-int-hdrs): Don't depend on
++	fixinc_list. Only
++	process fixincludes if fixinc_list is
++	present.
++	(install-mkheaders): Likewise.
++	
++2009-06-26  Catherine Moore  <clm@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++	
++	2008-08-10  Catherine Moore  <clm@codesourcery.com>
++	Merge from Sourcery G++ 4.2:
++	2008-02-11  Julian Brown  <julian@codesourcery.com>
++	Merge from MIPS:
++	2004-06-29  Nigel Stephens  <nigel@mips.com>
++	
++	* Makefile.in (libgcc.mk): Make this depend on
++	$(tmake_file), in
++	case new multilib options have been defined.
++	(s-mlib): Similarly.
++	
++2009-06-26  Catherine Moore  <clm@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-10-12  Catherine Moore  <clm@codesourcery.com>
++	gcc/
++	* config/mips/mips.opt (muclibc): New option entry.
++	* config/mips/mips.c (mips_override_options): Disable
++	__thread support when the -muclibc option is used.
++
++2009-06-26  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	gcc/
++	* config/m68k/linux-unwind.h (m68k_fallback_frame_state): Update to
++	handle 2.6.30 kernel.
++
++2009-06-26  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2009-02-26  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #4730
++
++	gcc/
++	* config/arm/arm.c (arm_libcall_value, arm_init_cumulative_args):
++	Use base ABI for conversion libfuncs between HFmode and SFmode.
++
++2009-06-26  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Backport fp16 support from FSF mainline:
++
++	2009-05-20  Sandra Loosemore  <sandra@codesourcery.com>
++
++	gcc/
++	* doc/tm.texi (Misc): Document TARGET_INVALID_PARAMETER_TYPE,
++	TARGET_INVALID_RETURN_TYPE, TARGET_PROMOTED_TYPE, and
++	TARGET_CONVERT_TO_TYPE.
++	* hooks.c (hook_tree_const_tree_null): Define.
++	* hooks.h (hook_tree_const_tree_null): Declare.
++	* target.h (struct gcc_target):  Add invalid_parameter_type,
++	invalid_return_type, promoted_type, and convert_to_type fields.
++	* target-def.h: (TARGET_INVALID_PARAMETER_TYPE): Define.
++	(TARGET_INVALID_RETURN_TYPE): Define.
++	(TARGET_PROMOTED_TYPE): Define.
++	(TARGET_CONVERT_TO_TYPE): Define.
++	(TARGET_INITIALIZER): Update for new fields.
++	* c-decl.c (grokdeclarator): Check targetm.invalid_return_type.
++	(grokparms): Check targetm.invalid_parameter_type.
++	* c-typeck.c (default_conversion): Check targetm.promoted_type.
++	* c-convert.c (convert): Check targetm.convert_to_type.
++
++	gcc/cp/
++	* typeck.c (default_conversion): Check targetm.promoted_type.
++	* decl.c (grokdeclarator): Check targetm.invalid_return_type.
++	(grokparms): Check targetm.invalid_parameter_type.
++	* cvt.c (ocp_convert): Check targetm.convert_to_type.
++	(build_expr_type_conversion): Check targetm.promoted_type.
++
++	2009-05-15  Sandra Loosemore  <sandra@codesourcery.com>
++
++	gcc/
++	* real.c (encode_ieee_half): Define.
++	(decode_ieee_half): Define.
++	(ieee_half_format): Define.
++	(arm_half_format): Define.
++	* real.h (ieee_half_format): Declare.
++	(arm_half_format): Declare.
++
++	2009-05-15  Sandra Loosemore  <sandra@codesourcery.com>
++
++	gcc/
++	* fold-const.c (fold_convert_const_real_from_real): Check for
++	overflow.
++
++	2009-06-18  Sandra Loosemore  <sandra@codesourcery.com>
++
++	gcc/
++	* doc/extend.texi (Half-Precision): New section.
++	* doc/invoke.texi (Option Summary): List -mfp16-format.
++	(ARM Options): List neon-fp16 as -mfpu value.  Document -mfp16-format.
++	* config/arm/arm.opt (mfp16-format=): New.
++	* config/arm/arm.c: Include intl.h.
++	(TARGET_INVALID_PARAMETER_TYPE): Redefine.
++	(TARGET_INVALID_RETURN_TYPE): Redefine.
++	(TARGET_PROMOTED_TYPE): Redefine.
++	(TARGET_CONVERT_TO_TYPE): Redefine.
++	(arm_fp16_format): Define.
++	(all_fpus): Add entry for neon-fp16.
++	(fp_model_for_fpu): Likewise.
++	(struct fp16_format): Declare.
++	(all_fp16_formats): Define.
++	(arm_init_libfuncs): Add entries for HFmode conversions and arithmetic
++	functions.
++	(arm_override_options): Set arm_fp16_format. Call sorry for fp16
++	and no ldrh.
++	(arm_legitimate_index_p): Treat HFmode like HImode.
++	(thumb1_legitimate_address_p): Make it recognize HFmode constants.
++	(coproc_secondary_reload_class): Special-case HFmode.
++	(arm_print_operand): Add 'z' specifier for vld1.16/vst1.16.
++	(arm_hard_regno_mode_ok): Allow HFmode values in VFP registers.
++	(arm_init_fp16_builtins): New.
++	(arm_init_builtins): Call it.
++	(arm_invalid_parameter_type): New.
++	(arm_invalid_return_type): New.
++	(arm_promoted_type): New.
++	(arm_convert_to_type).
++	(arm_file_start): Deal with neon-fp16 as fpu_name.  Emit tag for fp16
++	format.
++	(arm_emit_fp16_const): New function.
++	(arm_mangle_type): Mangle __fp16 as "Dh".
++	* config/arm/arm.h (TARGET_VFPD32): Make it know about
++	FPUTYPE_NEON_FP16.
++	(TARGET_NEON_FP16): New.
++	(TARGET_NEON): Make it know about FPUTYPE_NEON_FP16.
++	(enum fputype): Add FPUTYPE_NEON_FP16.
++	(enum arm_fp16_format_type): Declare.
++	(arm_fp16_format): Declare.
++	(LARGEST_EXPONENT_IS_NORMAL): Define.
++	* config/arm/arm-protos.h (arm_emit_fp16_const): Declare.
++	* config/arm/arm-modes.def (HFmode): Define.
++	* config/arm/vfp.md: (*movhf_vfp): New.
++	(extendhfsf2): New.
++	(truncsfhf2): New.
++	* config/arm/arm.md: (fpu): Add neon_fp16.
++	(floatsihf2, floatdihf2): New.
++	(fix_trunchfsi2, fix_trunchfdi2): New.
++	(truncdfhf2): New.
++	(extendhfdf2): New.
++	(movhf): New.
++	(*arm32_movhf): New.
++	(*thumb1_movhf): New.
++	(consttable_2): Add check for HFmode constants.
++	(consttable_4): Handle HFmode constants.
++
++	2009-06-18  Paul Brook  <paul@codesourcery.com>
++	    Sandra Loosemore  <sandra@codesourcery.com>
++
++	gcc/
++	* config/arm/sfp-machine.h (_FP_NANFRAC_H, _FP_NANSIGN_H): Define.
++	(__extendhfsf2, __truncsfhf2): Define.
++	* config/arm/fp16.c: New file.
++	* config/arm/t-bpabi (LIB2FUNCS_STATIC_EXTRA): Add fp16.c.
++	* config/arm/t-symbian (LIB2FUNCS_STATIC_EXTRA):  Add fp16.c.
++
++	2009-06-18  Sandra Loosemore  <sandra@codesourcery.com>
++
++	gcc/testsuite/
++	* gcc.target/arm/fp16-compile-alt-1.c: New.
++	* gcc.target/arm/fp16-compile-alt-2.c: New.
++	* gcc.target/arm/fp16-compile-alt-3.c: New.
++	* gcc.target/arm/fp16-compile-alt-4.c: New.
++	* gcc.target/arm/fp16-compile-alt-5.c: New.
++	* gcc.target/arm/fp16-compile-alt-6.c: New.
++	* gcc.target/arm/fp16-compile-alt-7.c: New.
++	* gcc.target/arm/fp16-compile-alt-8.c: New.
++	* gcc.target/arm/fp16-compile-alt-9.c: New.
++	* gcc.target/arm/fp16-compile-alt-10.c: New.
++	* gcc.target/arm/fp16-compile-alt-11.c: New.
++	* gcc.target/arm/fp16-compile-ieee-1.c: New.
++	* gcc.target/arm/fp16-compile-ieee-2.c: New.
++	* gcc.target/arm/fp16-compile-ieee-3.c: New.
++	* gcc.target/arm/fp16-compile-ieee-4.c: New.
++	* gcc.target/arm/fp16-compile-ieee-5.c: New.
++	* gcc.target/arm/fp16-compile-ieee-6.c: New.
++	* gcc.target/arm/fp16-compile-ieee-7.c: New.
++	* gcc.target/arm/fp16-compile-ieee-8.c: New.
++	* gcc.target/arm/fp16-compile-ieee-9.c: New.
++	* gcc.target/arm/fp16-compile-ieee-10.c: New.
++	* gcc.target/arm/fp16-compile-ieee-11.c: New.
++	* gcc.target/arm/fp16-compile-none-1.c: New.
++	* gcc.target/arm/fp16-compile-exprtype.c: New.
++	* gcc.target/arm/fp16-compile-vcvt.c: New.
++	* gcc.target/arm/fp16-builtins-1.c: New.
++	* gcc.target/arm/fp16-rounding-alt-1.c: New.
++	* gcc.target/arm/fp16-rounding-ieee-1.c: New.
++	* gcc.target/arm/fp16-param-1.c: New.
++	* gcc.target/arm/fp16-return-1.c: New.
++	* gcc.target/arm/fp16-unprototyped-1.c: New.
++	* gcc.target/arm/fp16-unprototyped-2.c: New.
++	* gcc.target/arm/fp16-variadic-1.c: New.
++	* gcc.dg/torture/arm-fp16-compile-assign.c: New.
++	* gcc.dg/torture/arm-fp16-compile-convert.c: New.
++	* gcc.dg/torture/arm-fp16-int-convert-alt.c: New.
++	* gcc.dg/torture/arm-fp16-int-convert-ieee.c: New.
++	* gcc.dg/torture/arm-fp16-ops.h: New.
++	* gcc.dg/torture/arm-fp16-ops-1.c: New.
++	* gcc.dg/torture/arm-fp16-ops-2.c: New.
++	* gcc.dg/torture/arm-fp16-ops-3.c: New.
++	* gcc.dg/torture/arm-fp16-ops-4.c: New.
++	* gcc.dg/torture/arm-fp16-ops-5.c: New.
++	* gcc.dg/torture/arm-fp16-ops-6.c: New.
++	* gcc.dg/torture/arm-fp16-ops-7.c: New.
++	* gcc.dg/torture/arm-fp16-ops-8.c: New.
++	* g++.dg/ext/arm-fp16/fp16-overload-1.C: New.
++	* g++.dg/ext/arm-fp16/fp16-return-1.C: New.
++	* g++.dg/ext/arm-fp16/fp16-param-1.C: New.
++	* g++.dg/ext/arm-fp16/fp16-mangle-1.C: New.
++	* g++.dg/ext/arm-fp16/arm-fp16-ops.h: New.
++	* g++.dg/ext/arm-fp16/arm-fp16-ops-1.C: New.
++	* g++.dg/ext/arm-fp16/arm-fp16-ops-2.C: New.
++	* g++.dg/ext/arm-fp16/arm-fp16-ops-3.C: New.
++	* g++.dg/ext/arm-fp16/arm-fp16-ops-4.C: New.
++	* g++.dg/ext/arm-fp16/arm-fp16-ops-5.C: New.
++	* g++.dg/ext/arm-fp16/arm-fp16-ops-6.C: New.
++	* g++.dg/ext/arm-fp16/arm-fp16-ops-7.C: New.
++	* g++.dg/ext/arm-fp16/arm-fp16-ops-8.C: New.
++
++	2009-06-18  Sandra Loosemore  <sandra@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (TARGET_SCALAR_MODE_SUPPORTED_P): Redefine.
++	(arm_scalar_mode_supported_p): New function.
++
++	gcc/testsuite/
++	* gcc.target/arm/fp16-compile-none-2.c: New.
++	* gcc.target/arm/fp16-compile-ieee-12.c: New.
++	* gcc.target/arm/fp16-compile-alt-12.c: New.
++
++2009-06-24  Daniel Gutson  <dgutson@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	Issue #4753
++
++	gcc/    
++	* config/arm/arm-cores.def: Added core cortex-m0.
++	* config/arm/arm-tune.md ("tune"): Aded cortexm0.
++	* doc/invoke.texi: Added entry for cpu ARM Cortex-M0.
++
++2009-06-24  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	* release-notes-csl.xml (Mixed integer and floating-point code): New
++	note.
++
++	gcc/
++	* config/arm/arm.h (REGISTER_MOVE_COST): Increase VFP register
++	move cost.
++
++2009-06-23  Daniel Gutson  <dgutson@codesourcery.com>
++
++	Issue 4909
++	gcc/
++	* config/arm/arm.h (CTZ_DEFINED_VALUE_AT_ZERO): New macro.
++
++2009-06-23  Kazu Hirata  <kazu@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	Issue #4613
++	gcc/
++	* config/arm/arm.c (arm_rtx_costs_1): Teach that the cost of MLS
++	is the same as its underlying multiplication.
++	* config/arm/arm.md (two splitters): New.
++	* config/arm/predicates.md (binary_operator): New.
++
++2009-06-22  Kazu Hirata  <kazu@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	Issue #5105
++	gcc/testsuite/
++	* gcc.target/m68k/pr36134.c: Use dg-skip-if to skip the testcase
++	if there is a conflict with -mcpu=.  Use -mcpu=5208.
++
++2009-06-22  Kazu Hirata  <kazu@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	Issue #3422
++	* config.gcc (mips64*-*-linux*, mipsisa64*-*-linux*,
++	mips*-*-linux*): Add mips/t-crtfm to tmake_file.
++	* config/mips/crtfastmath.c: New.
++	* config/mips/linux.h (ENDFILE_SPEC): New.
++	* config/mips/linux64.h (ENDFILE_SPEC): New.
++	* config/mips/t-crtfm: New.
++
++	libgcc/
++	* config.host (mips64*-*-linux*, mips*-*-linux*): Add mips/t-crtfm
++	to tmake_file.  Add crtfastmath.o to extra_parts.
++	* config/mips/t-crtfm: New.
++
++2009-06-22  Daniel Gutson  <dgutson@codesourcery.com>
++
++	Issue 4909
++
++	gcc/
++	* config/arm/arm.md (UNSPEC_RBIT): New constant.
++	(rbitsi2): New insn.
++	(ctzsi2): New expand.
++
++	gcc/testsuite/
++	* gcc.target/arm/ctz.c: New test case.
++
++	* release-notes-csl.xml: Document.
++
++2009-06-22  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2009-05-14  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	gcc/
++	* config/m68k/m68k-devices.def: Add line for MCF5221x.
++
++2009-06-19  Paul Brook  <paul@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-10-21  Paul Brook  <paul@codesourcery.com>
++	gcc/
++	* config/arm/arm.md (consttable_4): Handle (high ...).
++
++2009-06-19  Catherine Moore  <clm@codesourcery.com>
++
++	* release-notes-csl.xml:  Document interrupt attributes
++	for MIPS.
++
++2009-06-19  Paul Brook  <paul@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-06-04  Paul Brook  <paul@codesourcery.com>
++	Fix Issue #2917
++	gcc/
++	* config/arm/arm.c (neon_vector_mem_operand): Handle element/structure
++	loads.  Allow PRE_DEC.
++	(output_move_neon): Handle PRE_DEC.
++	(arm_print_operand): Add 'A' for neon structure loads.
++	* config/arm/arm-protos.h (neon_vector_mem_operand): Update prototype.
++	* config/arm/neon.md (movmisalign): Use Um constraint and %A.
++	* config/arm/constraints.md (Un, Us): Update neon_vector_mem_operand
++	calls.
++	(Um): New constraint.
++
++2009-06-19  Paul Brook  <paul@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++	Issue #1510
++	2007-04-27  Paul Brook  <paul@codesourcery.com>
++	gcc/
++	* cse.c (cse_process_notes): Make sure PLUS are canonical.
++
++2009-06-19  Paul Brook  <paul@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-05-28  Paul Brook  <paul@codesourcery.com>
++	Avoid Issue #2945
++	gcc/
++	* config/arm/arm.md (abssi2): Add TARGET_NO_SINGLE_COND_EXEC expander.
++	(arm_abssi2, arm_neg_abssi2): Enable for Thumb-2. Always split.
++	(arm_nocond_abssi2, arm_nocond_neg_abssi2): New patterns.
++	Add splitters for abssi patterns.
++	* config/arm/thumb2.md (thumb2_abssi2, thumb2_neg_abssi2): Remove.
++
++2009-06-19  Paul Brook  <paul@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++	2007-03-30  Paul Brook  <paul@codesourcery.com>
++	gcc/
++	* calls.c (store_one_arg): Check alignment of mode used for save.
++
++2009-06-19  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2007-02-16  Richard Sandiford  <richard@codesourcery.com>
++ 	gcc/
++	* config/m68k/m68k.h (INDEX_REG_CLASS): Delete in favor of...
++	(MODE_INDEX_REG_CLASS): ...this new macro.  Return NO_REGS unless
++	MODE_OK_FOR_INDEX_P.
++	(MODE_OK_FOR_INDEX_P): New macro.
++	(REGNO_OK_FOR_INDEX_P): Delete in favor of...
++	(REGNO_MODE_OK_FOR_INDEX_P): ...this new macro.  Return false
++	unless MODE_OK_FOR_INDEX_P.
++	(REG_OK_FOR_INDEX_P): Delete in favor of...
++	(REG_MODE_OK_FOR_INDEX_P): ...this new macro.  Return false
++	unless MODE_OK_FOR_INDEX_P.
++	* m68k-protos.h (m68k_legitimate_index_reg_p): Add mode argument.
++	* m68k.c (m68k_legitimate_index_reg_p, m68k_decompose_index):
++	Add mode argument.  Use it.
++	* config/m68k/m68k.md (tst<mode>_cf, cmp<mode>_cf, movsf_cf_hard)
++	(movdf_cf_hard, extendsfdf2_cf, truncdfsf2_cf, ftrunc<mode>2_cf)
++	(add<mode>3_cf, sub<mode>3_cf, fmul<mode>3_cf, div<mode>3_cf)
++	(neg<mode>2_cf, sqrt<mode>2_cf, abs<mode>2_cf): Replace "Q<U>"
++	constraints for FP addresses with "m" constraints.
++	
++	2007-02-16  Nathan Sidwell  <nathan@codesourcery.com>
++	gcc/testsuite/
++	* gcc.dg/m68k-fp-1.c: New.
++
++2009-06-19  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++  	Merge from Sourcery G++ 4.3:
++
++	2007-02-16  Richard Sandiford  <richard@codesourcery.com>
++
++	gcc/
++	* Makefile.in (postreload.o): Depend on addresses.h.
++	* addresses.h (index_reg_class, ok_for_index_p_1): New functions.
++	(regno_ok_for_index_p): New function.
++	* postreload.c: Include addresses.h.
++	(reload_combine): Use index_reg_class instead of INDEX_REG_CLASS.
++	* ira-costs.c (ok_for_index_p_nonstrict): Add a mode argument.
++	Use ok_for_index_p_1 instead of REGNO_OK_FOR_INDEX_P.
++	(record_address_regs): Use index_reg_class instead of INDEX_REG_CLASS.
++	Update calls to ok_for_index_p_nonstrict.
++	* regrename.c (scan_rtx_address): Use regno_ok_for_index_p instead of
++	REGNO_OK_FOR_INDEX_P and index_reg_class instead of INDEX_REG_CLASS.
++	(replace_oldest_value_addr): Likewise.
++	* reload.c (find_reloads_address): Use index_reg_class instead
++	of INDEX_REG_CLASS.  Do not push an index register reload if
++	index_reg_class returns NO_REGS.
++	(find_reloads_address_1): Use index_reg_class instead
++	of INDEX_REG_CLASS and regno_ok_for_index_p instead of
++	REGNO_OK_FOR_INDEX_P.
++	* doc/tm.texi (MODE_INDEX_REG_CLASS): Document new macro.
++	(REGNO_MODE_OK_FOR_INDEX_P): Likewise.
++
++2009-06-18  Catherine Moore  <clm@codesourcery.com>
++
++	Backport form mainline:
++
++	2009-04-02  Chao-ying Fu  <fu@mips.com>
++	    James Grosbach  <james.grosbach@microchip.com>
++
++	* config/mips/mips.c (mips_frame_info): Add acc_mask, num_acc,
++	num_cop0_regs, acc_save_offset, cop0_save_offset, acc_sp_offset,
++	cop0_sp_offset.
++	(machine_function): Add interrupt_handler_p, use_shadow_register_set_p,
++	keep_interrupts_masked_p, use_debug_exception_return_p.
++	(mips_attribute_table): Add interrupt, use_shadow_register_set,
++	keep_interrupts_masked, use_debug_exception_return.
++	(mips_interrupt_type_p, mips_use_shadow_register_set_p,
++	mips_keep_interrupts_masked_p, mips_use_debug_exception_return_p):
++	New functions.
++	(mips_function_ok_for_sibcall): Return false for interrupt handlers.
++	(mips_print_operand): Process COP0 registers to print $0 .. $31
++	correctly for GAS to process.
++	(mips_interrupt_extra_call_saved_reg_p): New function.
++	(mips_cfun_call_saved_reg_p): For interrupt handlers, we need to check
++	extra registers.
++	(mips_cfun_might_clobber_call_saved_reg_p): Likewise.
++	(mips_compute_frame_info): Add supports for interrupt context that
++	includes doubleword accumulators and COP0 registers.
++	(mips_for_each_saved_acc): New function.
++	(mips_for_each_saved_gpr_and_fpr): Change the function name from
++	mips_for_each_saved_reg.
++	(mips_save_reg): Save accumulators.
++	(mips_kernel_reg_p): A new for_each_rtx callback.
++	(mips_expand_prologue): Support interrupt handlers.
++	(mips_restore_reg): Restore accumulators.
++	(mips_expand_epilogue): Support interrupt handlers.
++	(mips_can_use_return_insn): Return false for interrupt handlers.
++	(mips_epilogue_uses): New function.
++	* config/mips/mips.md (UNSPEC_ERET, UNSPEC_DERET, UNSPEC_DI,
++	UNSPEC_EHB, UNSPEC_RDPGPR, UNSPEC_COP0): New UNSPEC.
++	(mips_eret, mips_deret, mips_di, mips_ehb, mips_rdpgpr,
++	cop0_move): New instructions.
++	* config/mips/mips-protos.h (mips_epilogue_uses): Declare.
++	* config/mips/mips.h (K0_REG_NUM, K1_REG_NUM, KERNEL_REG_P): New
++	defines.
++	(COP0_STATUS_REG_NUM, COP0_CAUSE_REG_NUM, COP0_EPC_REG_NUM):
++	New defines.
++	(CAUSE_IPL, SR_IPL, SR_EXL, SR_IE): New defines.
++	(MIPS_PROLOGUE_TEMP_REGNUM, MIPS_EPILOGUE_TEMP_REGNUM): For
++	interrupt handlers, we use K0 as the temporary register.
++	(EPILOGUE_USES): Change to a function call.
++	* config/mips/sde.h (MIPS_EPILOGUE_TEMP_REGNUM): For interrupt
++	handlers, we use K0 as the temporary register.
++
++	* doc/extend.texi (Function Attributes): Document interrupt,
++	use_shadow_register_set, keep_interrupts_masked,
++	use_debug_exception_return for MIPS attributes.
++
++2009-06-17  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++
++	gcc/testsuite/
++	2009-06-10  Nathan Froyd  <froydnj@codesourcery.com>
++
++	* gcc.target/arm/neon-modes-1.c: New test.
++
++2009-06-17  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #5768
++
++	gcc/
++	* config.gcc (i[34567]86-*-linux*): Use extra config files if
++	--enable-extra-sgxxlite-multilibs.
++	* config/i386/cs-linux-lite.h, config/i386/t-cs-linux-lite: New.
++
++2009-06-16  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from branches/ix86/gcc-4_4-branch:
++
++	gcc/
++	2009-05-21  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-05-21  H.J. Lu  <hongjiu.lu@intel.com>
++		    Uros Bizjak  <ubizjak@gmail.com>
++
++	* config/i386/cpuid.h (bit_MOVBE): New.
++
++	* config/i386/driver-i386.c (host_detect_local_cpu): Check movbe.
++
++	* config/i386/i386.c (OPTION_MASK_ISA_MOVBE_SET): New.
++	(OPTION_MASK_ISA_MOVBE_UNSET): Likewise.
++	(ix86_handle_option): Handle OPT_mmovbe.
++	(ix86_target_string): Add -mmovbe.
++	(pta_flags): Add PTA_MOVBE.
++	(processor_alias_table): Add PTA_MOVBE to "atom".
++	(override_options): Handle PTA_MOVBE.
++
++	* config/i386/i386.h (TARGET_MOVBE): New.
++
++	* config/i386/i386.md (bswapsi2): Check TARGET_MOVBE.
++	(*bswapsi_movbe): New.
++	(*bswapdi_movbe): Likewise.
++	(bswapdi2): Renamed to ...
++	(*bswapdi_1): This.
++	(bswapdi2): New expander.
++
++	* config/i386/i386.opt (mmovbe): New.
++
++	* doc/invoke.texi: Document -mmovbe.
++
++	2009-05-20  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-05-20  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* config/i386/driver-i386.c (host_detect_local_cpu): Check
++	extended family and model for Intel processors.  Support Intel
++	Atom.
++
++	2009-04-20  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-04-20  Joey Ye  <joey.ye@intel.com>
++		    Xuepeng Guo <xuepeng.guo@intel.com>
++		    H.J. Lu  <hongjiu.lu@intel.com>
++
++	* config/i386/atom.md: Add bypasses with ix86_dep_by_shift_count.
++
++	* config/i386/i386.c (LEA_SEARCH_THRESHOLD): New macro.
++	(IX86_LEA_PRIORITY): Likewise.
++	(distance_non_agu_define): New function.
++	(distance_agu_use): Likewise.
++	(ix86_lea_for_add_ok): Likewise.
++	(ix86_dep_by_shift_count): Likewise.
++
++	* config/i386/i386.md: Call ix86_lea_for_add_ok to decide we
++	should split for LEA.
++
++	* config/i386/i386-protos.h (ix86_lea_for_add_ok): Declare new
++	function.
++	(ix86_dep_by_shift_count): Likewise.
++
++	2009-04-07  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-04-07  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* doc/invoke.texi: Document Atom support.
++
++	2009-04-06  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* config/i386/i386.md: Revert 2 accidental checkins.
++
++	2009-04-06  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-04-06  Joey Ye  <joey.ye@intel.com>
++		    Xuepeng Guo <xuepeng.guo@intel.com>
++		    H.J. Lu  <hongjiu.lu@intel.com>
++
++	Atom pipeline model, tuning and insn selection.
++	* config.gcc (atom): Add atom config options and target.
++
++	* config/i386/atom.md: New.
++
++	* config/i386/i386.c (atom_cost): New cost.
++	(m_ATOM): New macro flag.
++	(initial_ix86_tune_features): Set m_ATOM.
++	(x86_accumulate_outgoing_args): Likewise.
++	(x86_arch_always_fancy_math_387): Likewise.
++	(processor_target): Add Atom cost.
++	(cpu_names): Add Atom cpu name.
++	(override_options): Set Atom ISA.
++	(ix86_issue_rate): New case PROCESSOR_ATOM.
++	(ix86_adjust_cost): Likewise.
++
++	* config/i386/i386.h (TARGET_ATOM): New target macro.
++	(ix86_tune_indices): Add X86_TUNE_OPT_AGU.
++	(TARGET_OPT_AGU): New target option.
++	(target_cpu_default): Add TARGET_CPU_DEFAULT_atom.
++	(processor_type): Add PROCESSOR_ATOM.
++
++	* config/i386/i386.md (cpu): Add new value "atom".
++	(use_carry, movu): New attr.
++	(atom.md): Include atom.md.
++	(adddi3_carry_rex64): Set attr "use_carry".
++	(addqi3_carry): Likewise.
++	(addhi3_carry): Likewise.
++	(addsi3_carry): Likewise.
++	(*addsi3_carry_zext): Likewise.
++	(subdi3_carry_rex64): Likewise.
++	(subqi3_carry): Likewise.
++	(subhi3_carry): Likewise.
++	(subsi3_carry): Likewise.
++	(x86_movdicc_0_m1_rex64): Likewise.
++	(*x86_movdicc_0_m1_se): Likewise.
++	(x86_movsicc_0_m1): Likewise.
++	(*x86_movsicc_0_m1_se): Likewise.
++	(*adddi_1_rex64): Emit add insn as much as possible.
++	(*addsi_1): Likewise.
++	(return_internal): Set atom_unit.
++	(return_internal_long): Likewise.
++	(return_pop_internal): Likewise.
++	(*rcpsf2_sse): Set atom_sse_attr attr.
++	(*qrt<mode>2_sse): Likewise.
++
++	2009-04-02  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-04-02  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* config/i386/i386.c (ix86_abi): Move initialization to ...
++	(override_options): Here.
++
++	2009-03-29  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-03-29  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* config/i386/i386-protos.h (ix86_agi_dependent): New.
++
++	* config/i386/i386.c (ix86_agi_dependent): Rewrite.
++	(ix86_adjust_cost): Updated.
++
++	2009-03-27  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-03-27  H.J. Lu  <hongjiu.lu@intel.com>
++
++	PR target/39472
++	* config/i386/i386.c (ix86_abi): New.
++	(override_options): Handle -mabi=.
++	(ix86_function_arg_regno_p): Replace DEFAULT_ABI with
++	ix86_abi.
++	(ix86_call_abi_override): Likewise.
++	(init_cumulative_args): Likewise.
++	(function_arg_advance): Likewise.
++	(function_arg_64): Likewise.
++	(function_arg): Likewise.
++	(ix86_pass_by_reference): Likewise.
++	(ix86_function_value_regno_p): Likewise.
++	(ix86_build_builtin_va_list_abi): Likewise.
++	(setup_incoming_varargs_64): Likewise.
++	(is_va_list_char_pointer): Likewise.
++	(ix86_init_machine_status): Likewise.
++	(ix86_reg_parm_stack_space): Use enum calling_abi on
++	call_abi.
++	(ix86_function_type_abi): Return enum calling_abi.  Rewrite
++	for 64bit.  Replace DEFAULT_ABI with ix86_abi.
++	(ix86_function_abi): Make it static and return enum
++	calling_abi.
++	(ix86_cfun_abi): Return enum calling_abi.  Replace DEFAULT_ABI
++	with ix86_abi.
++	(ix86_fn_abi_va_list): Updated.
++
++	* config/i386/i386.h (ix86_abi): New.
++	(STACK_BOUNDARY): Replace DEFAULT_ABI with ix86_abi.
++	(CONDITIONAL_REGISTER_USAGE): Likewise.
++	(CUMULATIVE_ARGS): Change call_abi type to enum calling_abi.
++	(machine_function): Likewise.
++
++	* config/i386/i386.md (untyped_call): Replace DEFAULT_ABI
++	with ix86_abi.
++	* config/i386/cygming.h (TARGET_64BIT_MS_ABI): Likewise.
++	(STACK_BOUNDARY): Likewise.
++	* config/i386/mingw32.h (EXTRA_OS_CPP_BUILTINS): Likewise.
++
++	* config/i386/i386.opt (mabi=): New.
++
++	* config/i386/i386-protos.h (ix86_cfun_abi): Changed to
++	return enum calling_abi.
++	(ix86_function_type_abi): Likewise.
++	(ix86_function_abi): Removed.
++
++	2009-03-27  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-03-27  Vladimir Makarov  <vmakarov@redhat.com>
++
++	* genautomata.c: Add a new year to the copyright.  Add a new
++	reference.
++	(struct insn_reserv_decl): Add comments for member bypass_list.
++	(find_bypass): Remove.
++	(insert_bypass): New.
++	(process_decls): Use insert_bypass.
++	(output_internal_insn_latency_func): Output all bypasses with the
++	same input insn in one switch case.
++
++	* rtl.def (define_bypass): Describe bypass choice.
++	* doc/md.texi (define_bypass): Ditto.
++
++	gcc/testsuite/
++	2009-05-21  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-05-21  H.J. Lu  <hongjiu.lu@intel.com>
++
++	* gcc.target/i386/movbe-1.c: New.
++	* gcc.target/i386/movbe-2.c: Likewise.
++
++	2009-03-27  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2009-03-27  H.J. Lu  <hongjiu.lu@intel.com>
++
++	PR target/39472
++	* gcc.target/x86_64/abi/callabi/func-2a.c: New.
++	* gcc.target/x86_64/abi/callabi/func-2b.c: Likewise.
++	* gcc.target/x86_64/abi/callabi/func-indirect-2a.c: Likewise.
++	* gcc.target/x86_64/abi/callabi/func-indirect-2b.c: Likewise.
++	* gcc.target/x86_64/abi/callabi/vaarg-4a.c: Likewise.
++	* gcc.target/x86_64/abi/callabi/vaarg-4b.c: Likewise.
++	* gcc.target/x86_64/abi/callabi/vaarg-5a.c: Likewise.
++	* gcc.target/x86_64/abi/callabi/vaarg-5b.c: Likewise.
++
++2009-06-16  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-09-08  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	gcc/
++	* config/arm/unwind-arm.c (__gnu_unwind_pr_common): Correct test
++	for barrier handlers.
++
++2009-06-16  Catherine Moore  <clm@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2006-12-15  Richard Sandiford  <richard@codesourcery.com>
++	gcc/testsuite/
++	* gcc.target/mips/octeon-useun.c: New test.
++
++2009-06-16  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2009-04-04  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	gcc/testsuite/
++	* gcc.dg/pr34263.c: Add -fno-unroll-loops.
++
++2009-06-16  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-12-03  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	gcc/testsuite/
++	* gcc.dg/vect/vect-shift-2.c, gcc.dg/vect/vect-shift-3.c: New.
++	* lib/target-supports.exp (check_effective_target_vect_shift_char): New
++	function.
++
++2009-06-16  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2009-04-04  Daniel Jacobowitz  <dan@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.md (insv): Do not share operands[0].
++
++2009-06-16  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/testsuite/
++	* gcc.target/sh/20080410-1.c: Remove obsolete -fira option.
++
++2009-06-16  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* config.gcc (sh*-*-*): Add sh/cs-sgxxlite-linux.opt when
++	--enable-extra-sgxxlite-multilibs.
++	* config/sh/cs-sgxxlite-linux.h: Define SUBTARGET_OVERRIDE_OPTIONS.
++	* config/sh/cs-sgxxlite-linux.opt: New file.
++
++2009-06-16  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Merge 2009-03-06  Mark Mitchell  <mark@codesourcery.com>
++	gcc/
++	* configure.ac (--with-specs): New option.
++	* configure: Regenerated.
++	* gcc.c (driver_self_specs): Include CONFIGURE_SPECS.
++	* Makefile.in (DRIVER_DEFINES): Add -DCONFIGURE_SPECS.
++
++	Merge 2009-04-04  Daniel Jacobowitz  <dan@codesourcery.com>
++	gcc/
++	* gcc.c (do_self_spec): Handle switches with arguments.
++
++	Merge 2008-07-25  Mark Mitchell  <mark@codesourcery.com>
++	Issue #3433
++	gcc/
++	* gcc.c (SWITCHES_NEED_SPACES): Define to "o".
++
++2009-06-15  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3.
++
++	Issue 3304
++	gcc/
++	* config/arm/arm.c (arm_print_operand): Deal with HIGH.
++	* config/arm/constraints.md (j): New constraint for movw operands.
++	(N): Remove thumb2 meaning.
++	* config/arm/arm.md (*arm_movw): Delete.
++	(*arm_movsi_insn): Use j constraint for movw instead of N constraint.
++	* config/arm/vfp.md (*arm_movsi_vfp, *thumb2_movsi_vfp): Likewise.
++	* config/arm/thumb2.md (*thumb2_movsi_insn): Likewise.
++
++2009-06-15  Catherine Moore  <clm@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2006-12-15  Richard Sandiford  <richard@codesourcery.com>
++	Adapted from a patch by Cavium Networks.
++	gcc/
++	* config/mips/mips.opt (mocteon-useun): New option.
++	* config/mips/mips.h: (ISA_HAS_UL_US): New macro.
++	(ASM_SPEC): Pass down -mocteon-useun and -mno-octeon-useun.
++	* config/mips/mips.c (mips_expand_ext_as_unaligned_load): Use
++	mov_ulw and mov_uld if ISA_HAS_UL_US.
++	(mips_expand_ins_as_unaligned_store): Likewise mov_usw and mov_usd.
++	* config/mips/mips.md: (UNSPEC_UNALIGNED_LOAD,
++	 UNSPEC_UNALIGNED_STORE): New constants.
++	(mov_<load>l, mov_<load>r, mov_<store>l, mov_<store>r): Require
++	ISA_HAS_UL_US.
++	(mov_u<load>, mov_u<store>): New patterns.
++
++2009-06-15  Catherine Moore  <clm@codesourcery.com>
++
++	gcc/
++	* config/mips/mips.opt: Revert last patch.
++	* config/mips/mips-protos.h : Likewise.
++	* config/mips/mips.h: Likewise.
++	* config/mips/mips.md: Likewise.
++	* config/mips/mips.c: Likewise.
++
++2009-06-12  Catherine Moore  <clm@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2006-12-15  Richard Sandiford  <richard@codesourcery.com>
++	Adapted from a patch by Cavium Networks.
++	gcc/
++	* config/mips/mips.opt (mocteon-useun): New option.
++	* config/mips/mips-protos.h (mips_lower_sign_bit_p, mips_use_ext_p): Declare.
++	(mips_adjust_register_ext_operands): Likewise.
++	* config/mips/mips.h (ISA_HAS_SEB_SEH, ISA_HAS_INS_EXT): Include TARGET_OCTEON.
++	(ISA_HAS_UL_US): New macro.
++	(ASM_SPEC): Pass down -mocteon-useun and -mno-octeon-useun.
++	* config/mips/mips.c (mips_cpu_info_table): Add an octeon entry.
++	(mips_rtx_cost_data): Adjust octeon costs.
++	(mips_expand_ext_as_unaligned_load): Use mov_ulw and mov_uld if
++	ISA_HAS_UL_US.
++	(mips_expand_ins_as_unaligned_store): Likewise mov_usw and mov_usd.
++	(mips_lower_sign_bit_p, mips_use_ins_p, mips_use_ext_p): New functions.
++	(mips_adjust_register_ext_operands): Likewise.
++	* config/mips/mips.md: (UNSPEC_UNALIGNED_LOAD,
++	 UNSPEC_UNALIGNED_STORE): New constants.
++	(topbit): New mode attribute.
++	(any_extract ): New code macro.
++	(*<code>_trunc_exts<mode>): New pattern.
++	(zero_extendsidi2): Turn into a define_expand.  Rename old
++	define_insn_and_split to...
++	(*clear_upper32): Require !ISA_HAS_EXT_INS.
++	(*zero_extendsidi2_dext, *clear_upper32_dext): New patterns.
++	(*extv_truncdi<mode>): New pattern.
++	(extzv): Use mips_use_ext_p instead of mips_use_ins_ext_p.
++	Call mips_adjust_register_ext_operands.
++	(*extzv_truncdi<mode>, *extz_truncdi<mode>_exts): New patterns.
++	(insv):  Use mips_use_ins_p instead of mips_use_ins_ext_p.
++	Fix formatting.
++	(insv<mode>): Use mips_use_ins_p instead of mips_use_ins_ext_p.
++	(*insv<mode>di, *insv_<code>_<mode>di, *insvdi_clear_upper32)
++	(*cins): New patterns.
++	(mov_u<load>, mov_u<store>): New patterns.
++	(*truncsi_storeqi, *truncsi_storehi): Likewise.
++	* config/mips/predicates.md (mask_low_and_shift_operator): New
++	predicate.
++
++	2008-07-24  Joseph Myers  <joseph@codesourcery.com>
++	gcc/
++	* config/mips/mips.c (mips_expand_ins_as_unaligned_store): Restore
++	Octeon unaligned store support.
++
++	2008-07-29  Catherine Moore  <clm@codesourcery.com>
++		    Daniel Jacobowitz <dan@codesourcery.com>
++	gcc/
++	* config/mips/mips.h (ISA_HAS_BBIT):  Enable for TARGET_OCTEON.
++	* config/mips/mips.md (branch_with_likely): New attribute.
++	(branch_without_likely): New attribute.
++	(define_delay): Check for new branch_likely attributes.
++	(branch_bit<mode>): Set branch_without_likely to "yes".
++	(branch_bit_truncdi<mode>): Likewise.
++	(branch_bit<mode>_inverted): Likewise.
++	(branch_bit_truncdi<mode>_inverted): Likewise.
++
++2009-06-12  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2009-03-09  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* tree-ssa-loop-promote.c: New file.
++	* common.opt (fpromote-loop-indices): New option.
++	* timevar.def (TV_TREE_LOOP_PROMOTE): New timevar.
++	* Makefile.in (tree-ssa-loop-promote.o): New rule.
++	(OBJS-comon): Include it.
++	* tree-pass.h (pass_promote_short_indices): Declare.
++	* passes.c (init_optimization_passes): Add it.
++	* pointer-set.h (pointer_set_n_elements, pointer_set_clear,
++	pointer_map_n_elements, pointer_map_clear): Declare.
++	* pointer-set.c (pointer_set_n_elements, pointer_set_clear,
++	pointer_map_n_elements, pointer_map_clear): Define.
++
++	gcc/doc/
++	* invoke.texi (-fpromote-loop-indices): New entry.
++
++	gcc/testsuite/
++	* gcc.dg/promote-short-1.c: New file.
++	* gcc.dg/promote-short-2.c: New file.
++	* gcc.dg/promote-short-3.c: New file.
++	* gcc.dg/promote-short-4.c: New file.
++	* gcc.dg/promote-short-5.c: New file.
++	* gcc.dg/promote-short-6.c: New file.
++	* gcc.dg/promote-short-7.c: New file.
++	* gcc.dg/promote-short-8.c: New file.
++
++	2009-03-31  Daniel Jacobowitz  <dan@codesourcery.com>
++	gcc/
++	* common.opt (fpromote-loop-indices): Add Optimization keyword.
++
++	2009-04-08  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* tree-ssa-loop-promote.c (collection_promotion_candidates):
++	Delay allocation and initialization of new promote_info until we
++	know we have a candidate loop index.
++
++	2009-04-09  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* tree-ssa-loop-promote.c (rebuild_with_promotion_1): Load a memory
++	reference prior to promoting it.
++
++	gcc/testsuite/
++	* gcc.dg/promote-short-9.c: New test.
++
++	2009-04-09  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/testsuite/
++	* gcc.dg/promote-short-3.c: XFAIL test for x86, m68k, sh, and mips.
++
++	2009-04-13  Kazu Hirata  <kazu@codesourcery.com>
++	gcc/testsuite/
++	* gcc.dg/promote-short-3.c: XFAIL on fido.
++
++2009-06-11  Catherine Moore  <clm@codesourcery.com>
++
++	Merge from SourceryG++ 4.3:
++	Merge from MIPS:
++	2007-11-29  Thiemo Seufer  <ths@mips.com>
++	gcc/
++	* config/mips/mips.c (override_options): Let -fpic imply
++	-mabicalls, forward port from SDE	.
++
++2009-06-11  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from upstream:
++
++	2009-06-10  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* tree.h (tree_base): Add packed_flag and user_align fields.
++	Decrease size of spare field.
++	(TYPE_USER_ALIGN): Use user_align from tree_base.
++	(DECL_USER_ALIGN): Likewise.
++	(TYPE_PACKED): Use packed_flag from tree_base.
++	(DECL_PACKED): Likewise.
++	(tree_type): Delete packed_flag and user_align fields.  Widen
++	precision field.  Widen mode field and shuffle fields to align
++	mode on an 8-bit boundary.
++	(tree_decl_common): Delete decl_flag_1 and user_align fields.
++	Renumber decl_flag_* fields.  Fix comments.  Widen
++	decl_common_unused field.
++	(DECL_HAS_VALUE_EXPR_P): Adjust for renumbering of decl_flag_*
++	fields.
++	(DECL_EXTERNAL): Likewise.
++	(DECL_BIT_FIELD): Likewise.
++	(DECL_NONADDRESSABLE_P): Likewise.
++	(TYPE_DECL_SUPRESS_DEBUG): Likewise.
++	* config/arm/arm-modes.def (XImode): Make it an INT_MODE.
++
++2009-06-11  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2009-01-14  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* tree-ssa-remove-local-statics.c (maybe_discover_new_declaration):
++	Avoid variables with aggregate and vector types.
++	(maybe_create_new_variable): Create the var_ann prior to marking
++	the symbol for renaming.
++
++	gcc/testsuite/
++	* gcc.dg/remove-local-statics-15.c: New test.
++	* gcc.dg/remove-local-statics-16.c: New test.
++
++	2008-07-21  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* tree-ssa-remove-local-statics.c
++	(find_static_nonvolatile_declarations): Don't check for potential
++	definitions if we're looking at a statement with a CALL_EXPR.
++	(compute_definedness_for_block): Reorganize logic.
++
++	gcc/testsuite/
++	* gcc.dg/remove-local-statics-13.c: New test.
++	* gcc.dg/remove-local-statics-14.c: New test.
++
++	2008-07-08  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* passes.c (init_optimization_passes): Move pass_remove_local_statics
++	later in the pass order.
++	* tree-ssa-remove-local-statics.c (rls_done): Conditionally free the
++	bitmaps and NULL out bb->aux.
++	(unstaticize_variable): Deal with GIMPLE_MODIFY_STMTs instead of
++	MODIFY_EXPRs.
++	(compute_definedness_for_block): Check for defines only if we haven't
++	found a CALL_EXPR.
++
++	2008-05-30  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* tree-ssa-remove-local-statics.c
++	(find_static_nonvolatile_declarations): Use SSA_OP_VDEF.
++	(unstaticize_variable): Likewise.
++	(dump_final_bitmaps): Remove.
++
++	2008-02-25  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* tree-ssa-remove-local-statics. (initialize_statement_dataflow):
++	Continue hash table traversal.
++	(compute_definedness_for_block): Delete useless return statement.
++	Adjust comment accordingly.
++
++	2007-03-05  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* tree-pass.h (pass_remove_local_statics): Declare.
++	* passes.c (init_optimization_passes): Add
++	pass_remove_local_statics to the optimization passes.
++	* Makefile.in (OBJS-common): Add tree-ssa-remove-local-statics.c.
++	(tree-ssa-remove-local-statics.o): New rule.
++	* tree-ssa-remove-local-statics.c: New file.
++	* c.opt (fremove-local-statics): New option.
++	* timevar.def (TV_RLS): New timevar.
++	* toplev.h (flag_remove_local_statics): Declare.
++	* cgraph.h (struct cgraph_node): Add 'ever_was_nested'.
++	* cgraph.c (cgraph_node): Set ever_was_nested in the node and
++	its parent when creating a new node.
++	gcc/doc/
++	* invoke.texi: Document -fremove-local-statics.
++	gcc/testsuite/
++	* gcc.dg/remove-local-statics-1.c: New file.
++	* gcc.dg/remove-local-statics-2.c: New file.
++	* gcc.dg/remove-local-statics-3.c: New file.
++	* gcc.dg/remove-local-statics-4.c: New file.
++	* gcc.dg/remove-local-statics-5.c: New file.
++	* gcc.dg/remove-local-statics-6.c: New file.
++	* gcc.dg/remove-local-statics-7.c: New file.
++	* gcc.dg/remove-local-statics-8.c: New file.
++	* gcc.dg/remove-local-statics-9.c: New file.
++	* gcc.dg/remove-local-statics-10.c: New file.
++	* gcc.dg/remove-local-statics-11.c: New file.
++	* gcc.dg/remove-local-statics-12.c: New file.
++
++2009-06-10  Catherine Moore  <clm@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	2008-11-23  Richard Sandiford  <rsandiford@googlemail.com>
++	* config/mips/mips.c (mips_legitimize_address): Handle
++	illegitimate CONST_INT addresses.
++
++2009-06-10  Catherine Moore  <clm@codesourcery.com>
++
++	gcc/
++	* config/mips/mips.c (mips_cp_restore_slot): Remove declaration
++	of intval and high.
++	(vr4130_swap_insns_p): Remove mis-applied patch.
++
++2009-06-10  Catherine Moore  <clm@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++	2008-03-25  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	    Julian Brown  <julian@codesourcery.com>
++	Merge from MIPS:
++	gcc/
++	* config/mips/mips-protos.h (dspalu_bypass_p): Add prototype.
++	* config/mips/mips.c (dspalu_bypass_table): New.
++	(dspalu_bypass_p): New.
++	* 24k.md (r24k_dsp_alu, r24k_dsp_mac, r24k_dsp_mac_sat)
++	(r24k_dsp_acc_ext, r24k_dsp_acc_mod): New insn reservations.
++	(r24k_int_mult, r24k_int_mthilo, r24k_dsp_mac, r24k_dsp_mac_sat)
++	(r24k_dsp_acc_ext, r24k_dsp_acc_mod, r24k_dsp_alu): New bypasses.
++	* config/mips/mips.md (dspmac, dspmacsat, accext, accmod, dspalu)
++	(dspalusat): Add insn types.
++	* config/mips/mips-dsp.md (add<DSPV:mode>3)
++	(mips_add<DSP:dspfmt1>_s_<DSP:dspfmt2>)
++	(sub<DSPV:mode>3, mips_sub<DSP:dspfmt1>_s_<DSP:dspfmt2>, mips_addsc)
++	(mips_addwc, mips_modsub, mips_raddu_w_qb, mips_absq_s_<DSPQ:dspfmt2>)
++	(mips_precrq_qb_ph, mips_precrq_ph_w, mips_precrq_rs_ph_w)
++	(mips_precrqu_s_qb_ph, mips_preceq_w_phl, mips_preceq_w_phr)
++	(mips_precequ_ph_qbl, mips_precequ_ph_qbr, mips_precequ_ph_qbla)
++	(mips_precequ_ph_qbra, mips_preceu_ph_qbl, mips_preceu_ph_qbr)
++	(mips_preceu_ph_qbla, mips_preceu_ph_qbra, mips_shll_<DSPV:dspfmt2>)
++	(mips_shll_s_<DSPQ:dspfmt2>, mips_shll_s_<DSPQ:dspfmt2>, mips_shrl_qb)
++	(mips_shra_ph, mips_shra_r_<DSPQ:dspfmt2>, mips_bitrev, mips_insv)
++	(mips_repl_qb, mips_repl_ph, mips_cmp<DSPV:dspfmt1_1>_eq_<DSPV:dspfmt2>)
++	(mips_cmp<DSPV:dspfmt1_1>_lt_<DSPV:dspfmt2>)
++	(mips_cmp<DSPV:dspfmt1_1>_le_<DSPV:dspfmt2>, mips_cmpgu_eq_qb)
++	(mips_cmpgu_lt_qb, mips_cmpgu_le_qb, mips_pick_<DSPV:dspfmt2>)
++	(mips_packrl_ph, mips_wrdsp, mips_rddsp): Change type to dspalu.
++	(mips_dpau_h_qbl, mips_dpau_h_qbr, mips_dpsu_h_qbl, mips_dpsu_h_qbr)
++	(mips_dpaq_s_w_ph, mips_dpsq_s_w_ph, mips_mulsaq_s_w_ph)
++	(mips_maq_s_w_phl, mips_maq_s_w_phr, mips_maq_sa_w_phr: Set type to
++	dspmac.
++	(mips_dpaq_sa_l_w, mips_dpsq_sa_l_w, mips_maq_sa_w_phl): Set type to
++	dspmacsat.
++	(mips_extr_w, mips_extr_r_w, mips_extr_rs_w, mips_extp, mips_extpdp):
++	Set type to accext.
++	(mips_shilo, mips_mthlip): Set type to accmod.
++	* config/mips/mips-dspr2.md (mips_absq_s_qb, mips_addu_s_ph)
++	(mips_adduh_r_qb): Set type to dspalusat.
++	(mips_addu_ph, mips_adduh_qb, mips_append, mips_balign)
++	(mips_cmpgdu_eq_qb, mips_cmpgdu_lt_qb, mips_cmpgdu_le_qb)
++	(mips_precr_qb_ph, mips_precr_sra_ph_w, mips_precr_sra_r_ph_w)
++	(mips_prepend, mips_shra_qb, mips_shra_r_qb, mips_shrl_ph)
++	(mips_subu_ph, mips_subuh_qb, mips_subuh_r_qb, mips_addqh_ph)
++	(mips_addqh_r_ph, mips_addqh_w, mips_addqh_r_w, mips_subqh_ph)
++	(mips_subqh_r_ph, mips_subqh_w, mips_subqh_r_w): Set type to dspalu.
++	(mips_dpa_w_ph, mips_dps_w_ph, mips_mulsa_w_ph, mips_dpax_w_ph)
++	(mips_dpsx_w_ph, mips_dpaqx_s_w_ph, mips_dpsqx_s_w_ph): Set type to
++	dspmac.
++	(mips_subu_s_ph): Set type to dspalusat.
++	(mips_dpaqx_sa_w_ph, mips_dpsqx_sa_w_ph): Set type to dspmacsat.
++
++	2008-02-15  Julian Brown  <julian@codesourcery.com>
++	Merge from MIPS:
++	2007-11-06  David Ung  <davidu@mips.com>
++	gcc/
++	* config/mips/mips.h (AC1HI_REGNUM, AC1LO_REGNUM, AC2HI_REGNUM)
++	(AC2LO_REGNUM, AC3HI_REGNUM, AC3LO_REGNUM): Define constants.
++
++	Merge from Sourcery G++ 4.2:
++	2008-03-25  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	    Julian Brown  <julian@codesourcery.com>
++	* 74k.md: (r74k_dsp_alu, r74k_dsp_alu_sat, r74k_dsp_mac, r74k_dsp_mac_sat)
++	(r74k_dsp_acc_ext, r74k_dsp_acc_mod): New insn reservations.
++	(r74k_dsp_mac, r74k_dsp_mac_sat, r74k_int_mult, r74k_int_mul3)
++	(r74k_dsp_mac, r74k_dsp_mac_sat): New bypasses.
++
++2009-06-10  Catherine Moore  <clm@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-02-12  Julian Brown  <julian@codesourcery.com>
++	Merge from MIPS:
++	2007-12-21  David Ung  <davidu@mips.com>
++	gcc/
++	* config/mips/mips.h (TARGET_MIPS_SDE): Define macro as 0.
++	* config/mips/mips.md (abs<mode>2): Enable abs.[sd] patterns if
++	TARGET_MIPS_SDE && TARGET_HARD_FLOAT.
++
++	2008-07-17  Catherine Moore  <clm@codesourcery.com>
++	gcc/
++	* config/mips/sde.h (TARGET_MIPS_SDE): Define to 1.
++
++2009-06-09  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-06-02  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.md (absv2sf2, negv2sf2, addv2sf3, subv2sf3,
++	mulv2sf3, divv2sf3): New expanders.
++	* config/rs6000/spe.md (spe_evabs, spe_evand, spe_evaddw,
++	spe_evdivws): Rename to use standard GCC names.
++	* config/rs6000/paired.md (negv2sf, absv2sf2, addv2sf3, subv2sf3,
++	mulv2sf3, divv2sf3): Rename to avoid conflict with the new expanders.
++
++	2007-09-19  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.c (bdesc_2arg, bdesc_1arg): Use new CODE_FOR_
++	names for renamed patterns.
++
++2009-06-09  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-04-14  Daniel Jacobowitz  <dan@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.c (rs6000_dwarf_register_span): Fix debug
++	output for other floating point modes.
++
++2009-06-09  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-11-24  Nathan Froyd  <froydnj@codesourcery.com>
++  	gcc/
++	* config/rs6000/rs6000.c (rs6000_savres_strategy): Always use
++	inline saves and restores when compiling position-independent code.
++
++	2008-11-17  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.c (rs6000_emit_epilogue): Adjust
++	computation of restore_lr.  Duplicate restoration of LR and
++	execute the appropriate one depending on whether GPRs are being
++	restored inline.
++
++	2008-11-17  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.c (rs6000_savres_routine_sym): Fix
++	computation for cache selector.  Mark the generated symbol as a
++	function.
++	(rs6000_emit_prologue): Correct condition.
++	* config/rs6000/rs6000.md (*save_gpregs_<mode>): Use explicit
++	match for register 11.
++	(*save_fpregs_<mode>): Likewise.
++	(*restore_gpregs_<mode>): Likewise.
++	(*return_and_restore_gpregs_<mode>): Likewise.
++	(*return_and_restore_fpregs_<mode>): Likewise.
++	* config/rs6000/spe.md (*save_gpregs_spe): Use explicit match for
++	register 11.
++	(*restore_gpregs_spe): Likewise.
++	(*return_and_restore_gpregs_spe): Likewise.
++
++	2008-10-24  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.c (no_global_regs_above): Fix precedence
++	problem.
++
++2009-06-09  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-07-02  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/eabi.h (NAME__MAIN, INVOKE__main): Remove.
++	* config/rs6000/t-ppccomm (LIB2FUNS_STATIC_EXTRA): Remove eabi.S.
++	(eabi.S): Remove rule.
++
++	2008-10-13  Andrew Stubbs  <ams@codesourcery.com>
++	gcc/
++	* doc/invoke.texi (PowerPC Options): -meabi option no longer places
++	__eabi function in main.
++
++2009-06-09  Catherine Moore  <clm@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-02-11  David Ung  <davidu@mips.com>
++	gcc/
++	* config/mips/mips.c (mips_output_division): When
++	GENERATE_DIVIDE_TRAPS, generate the trap instrutions
++	against zero before the actual divide.  This is friendlier
++	to out-of-order cpus like the 74k.
++
++2009-06-09  Catherine Moore  <clm@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-03-25  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	            Julian Brown  <julian@codesourcery.com>
++	Merge from MIPS:
++	gcc/
++	* config/mips/mips.c (mips_mult_madd_chain_bypass_p): New.
++	* config/mips/mips-protos.h (mips_mult_madd_chain_bypass_p): Add
++	prototype.
++	* config/mips/74k.md: Add bypasses for r74k_int_mult, r74_int_madd,
++	r74k_int_mul3.
++
++2009-06-09  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Forward port 2009-01-27  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Issue #4428
++	gcc/
++	* config/mips/mips.md (jump): Deal with $gp restoration in delay
++	slot for o32 and o64 ABIs.
++
++	gcc/testsuite/
++	* gcc.target/mips/branch-2.c: New.
++
++2009-06-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Backport from mainline:
++
++	gcc/
++	2009-06-05  Nathan Froyd  <froydnj@codesourcery.com>
++
++	* config/rs6000/eabi.asm (__eabi_convert): Don't define if
++	_RELOCATABLE.
++	(__eabi_uconvert): Likewise.
++
++2009-06-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2008-08-25  Nathan Froyd  <froydnj@codesourcery.com>
++	gcc/
++	* config/rs6000/sysv4.h (LIB_SIM_SPEC): Use LIB_DEFAULT_SPEC.
++	(STARTFILE_SIM_SPEC): Remove sim-crt0.o%s.
++	(ENDFILE_SIM_SPEC): Add -Tsim-hosted.ld.
++	(LINK_OS_SIM_SPEC): Define to empty.
++
++2009-06-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2008-02-12  Nathan Sidwell  <nathan@codesourcery.com>
++		    Daniel Jacobowitz  <dan@codesourcery.com>
++	gcc/
++	* config/rs6000/eabi-ci.asm (__init): Add _init func start.
++	(__fini): Also declare _fini for newlib.
++
++2009-06-08  Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-08-16  Daniel Jacobowitz  <dan@codesourcery.com>
++	gcc/
++	* config/rs6000/rs6000.c (rs6000_conditional_register_usage): Mark
++	call-saved AltiVec registers call-used if ! TARGET_ALTIVEC_ABI.
++	* config/rs6000/rs6000.h (CALL_USED_REGISTERS): Mark the first 20
++	AltiVec registers call-used.
++	(CALL_REALLY_USED_REGISTERS): Likewise.
++
++	gcc/testsuite/
++	* gcc.target/powerpc/altivec-consts.c: Remove -mabi=altivec.
++	* gcc.target/powerpc/altivec-varargs-1.c: Likewise.
++	* gcc.dg/vmx/vmx.exp: Likewise.
++
++2009-06-03  Mark Mitchell  <mark@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2009-02-10  Mark Mitchell  <mark@codesourcery.com>
++	libjava/classpath/
++	* m4/acinclude.m4 (CLASSPATH_TOOLEXECLIBDIR): Match libjava.
++	* configure.ac (--enable-version-specific-runtime-libs): Support.
++	* Makefile.in, */Makefile.in: Regenerated.
++	libjava/
++	* Makefile.am (pkgconfigdir): Use toolexeclibdir, not $(libdir).
++	* configure.ac (dbexecdir): Likewise.
++	* configure: Regenerated.
++
++2009-06-03  Joseph Myers  <joseph@codesourcery.com>
++
++	fixincludes/
++	* inclhack.def (glibc_string2_memset): New fix.
++	* fixincl.x: Regenerate.
++	* tests/base/bits/string2.h: Update.
++
++2009-06-03  Mark Mitchell  <mark@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2009-02-10  Mark Mitchell  <mark@codesourcery.com>
++	libjava/
++	* Makefile.am (jardir): Set to a target-specific location.
++	gcc/java/
++	* Make-lang.in: Adjust to match.
++
++	Backport from mainline:
++
++	2009-06-02  Mark Mitchell  <mark@codesourcery.com>
++	* decl.c (maybe_deduce_size_from_array_init): Use relayout_decl.
++	2009-06-02  Mark Mitchell  <mark@codesourcery.com>
++	* g++.dg/init/ref15.C: Require unwrapped targets.
++
++2009-06-03  Kazu Hirata  <kazu@codesourcery.com>
++
++	Backport from mainline:
++	gcc/
++	2009-04-14  Kazu Hirata  <kazu@codesourcery.com>
++	* config/arm/arm.c (arm_rtx_costs_1): Treat a minus with a shift
++	the same as a minus without a shift.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2008-01-23  Paul Brook  <paul@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (arm_final_prescan_insn): Use
++	TARGET_NO_SINGLE_COND_EXEC.
++	* config/arm/arm.h (TARGET_NO_SINGLE_COND_EXEC): Define.
++	* config/arm/arm.md: Add TARGET_NO_SINGLE_COND_EXEC conditions.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-03-12  Sandra Loosemore  <sandra@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (arm_final_prescan_insn):  Skip this processing
++	if TARGET_NO_COND_EXEC is true.
++	* config/arm/arm.h (TARGET_NO_COND_EXEC):  Define.
++	* config/arm/arm.md (smaxsi3, *arm_smax_insn):  Disable if
++	TARGET_NO_COND_EXEC is set.
++	(sminsi3, *arm_smin_insn): Likewise.
++	(umaxsi3, *arm_umaxsi3): Likewise.
++	(uminsi3, *arm_uminsi3): Likewise.
++	(*store_minmaxsi): Likewise.
++	(seq, sne, sgt, sle, sge, slt): Likewise.
++	(sgtu, sleu, sgeu, sltu): Likewise.
++	(sunordered, sordered): Likewise.
++	(sungt, sunge, sunlt, sunle): Likewise.
++	(movsicc, movsfcc, movdfcc): Likewise.
++	(*cond_return, *cond_return_inverted): Likewise.
++	(*compare_scc): Likewise.
++	(*cond_arith): Likewise.
++	(movcond): Likewise.
++	(anonymous define_split patterns): Likewise.
++	(define_cond_exec): Likewise.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	gcc/
++	* config/arm/arm.md (movsi): Don't split symbol refs here.
++	(define_split): New.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	gcc/
++	* config/arm/arm.c (arm_override_options): Override alignments if
++	tuning for Cortex-A8.
++	(create_fix_barrier, arm_reorg): If aligning to jumps or loops,
++	make labels have a size.
++	* config/arm/arm.md (VUNSPEC_ALIGN16, VUNSPEC_ALIGN32): New constants.
++	(align_16, align_32): New patterns.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	gcc/
++	* config/arm/vfp.md (*arm_movsi_vfp, *thumb2_movsi_vfp)
++	(*arm_movdi_vfp, *thumb2_movdi_vfp, *movsf_vfp, *thumb2_movsf_vfp)
++	(*movdf_vfp, *thumb2_movdf_vfp, *movsfcc_vfp, *thumb2_movsfcc_vfp)
++	(*movdfcc_vfp, *thumb2_movdfcc_vfp): Add neon_type.
++	* config/arm/arm.md (neon_type): Update comment.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-07-05  Mark Shinwell  <shinwell@codesourcery.com>
++
++	gcc/
++	* config/arm/thumb2.md (thumb2_movsi_insn): Split ldr and
++	str alternatives according to use of high and low regs.
++	* config/arm/vfp.md (thumb2_movsi_vfp): Likewise.
++	* config/arm/arm.h (CONDITIONAL_REGISTER_USAGE): Use high
++	regs when optimizing for size on Thumb-2.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/testsuite/
++	* gcc.target/arm/vfp-ldmdbd.c, gcc.target/arm/vfp-ldmdbs.c,
++	gcc.target/arm/vfp-ldmiad.c, gcc.target/arm/vfp-ldmias.c,
++	gcc.target/arm/vfp-stmdbd.c, gcc.target/arm/vfp-stmdbs.c,
++	gcc.target/arm/vfp-stmiad.c, gcc.target/arm/vfp-stmias.c: New.
++	* g++.dg/other/armv7m-1.C: New.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-08-12  Mark Shinwell  <shinwell@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.h (CLASS_LIKELY_SPILLED_P): Check against
++	LO_REGS only for Thumb-1.
++	(MODE_BASE_REG_CLASS): Restrict base registers to low
++	registers for Thumb-2.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2008-01-09  Julian Brown  <julian@codesourcery.com>
++
++	gcc/
++	* config/arm/neon.md (UNSPEC_MISALIGNED_ACCESS): New constant.
++	(movmisalign<mode>): Define for D and Q width registers.
++
++	gcc/testsuite/
++	* lib/target-supports.exp
++	(check_effective_target_arm_vect_no_misalign): New function.
++	(check_effective_target_vect_no_align): Use above to determine
++	whether misaligned accesses are expected for ARM.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-0x-xx  Vladimir Prus  <vladimir@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (arm_override_options): Warn if mlow-irq-latency is
++	specified in thumb mode.
++	(load_multiple_sequence): Return 0 if low irq latency is requested.
++	(store_multiple_sequence): Likewise.
++	(arm_gen_load_multiple): Load registers one-by-one if low irq latency
++	is requested.
++	(arm_gen_store_multiple): Likewise.
++	(vfp_output_fldmd): When low_irq_latency is non zero, pop each
++	register separately.
++	(vfp_emit_fstmd): When low_irq_latency is non zero, save each register
++	separately.
++	(arm_get_vfp_saved_size): Adjust saved register size calculation for
++	the above changes.
++	(print_pop_reg_by_ldr): New.
++	(arm_output_epilogue): Use print_pop_reg_by_ldr when low irq latency
++	is requested.
++	(emit_multi_reg_push): Push registers separately if low irq latency
++	is requested.
++	* config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Set __low_irq_latency__.
++	(low_irq_latency): Define.
++	* config/arm/lib1funcs.asm (do_pop, do_push): Define as variadic
++	macros. When __low_irq_latency__ is defined, push and pop registers
++	individually.
++	(div0): Use correct punctuation.
++	* config/arm/ieee754-df.S: Adjust syntax of using do_push.
++	* config/arm/ieee754-sf.S: Likewise.
++	* config/arm/bpabi.S: Likewise.
++	* config/arm/arm.opt (mlow-irq-latency): New option.
++	* config/arm/predicates.md (load_multiple_operation): Return false is
++	low irq latency is requested.
++	(store_multiple_operation): Likewise.
++	* config/arm/arm.md (movmemqi): Don't use it if low irq latency is
++	requested.
++	* doc/invoke.texi (-mlow-irq-latency): Add documentation.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-03-20  Mark Shinwell  <shinwell@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.h (arm_arch_marvell_f): Delete.
++	* config/arm/arm.c (arm_override_options): Remove uses of
++	TARGET_MARVELL_F.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-02-02  Mark Shinwell  <shinwell@codesourcery.com>
++
++	gcc/
++	* config/arm/thumb2.md: Include hwdiv.md and move instruction patterns
++	for sdiv and udiv to that file.
++	* config/arm/arm.c (all_architectures): Add marvell-f entry.
++	(ARM_ARCH_NAME_SIZE): Define.
++	(arm_arch_name): Allocate ARM_ARCH_NAME_SIZE bytes of space.
++	(arm_override_options): Be more careful writing to arm_arch_name.
++	Take setting of -mmarvell-div and TARGET_THUMB2 into account when
++	setting arm_arch_hwdiv.  Cause error if -mmarvell-div is used when
++	not targeting a Marvell core.
++	* config/arm/arm.h (arm_arch_marvell_f): New.
++	* config/arm/hwdiv.md: New.
++	* config/arm/t-arm (MD_INCLUDES): Add hwdiv.md.
++	* config.gcc: Recognize marvell-f as a supported ARM architecture.
++	* doc/invoke.texi (ARM Options): Document -mcpu=marvell-f and
++	-mmarvell-div.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-01-10  Mark Shinwell  <shinwell@codesourcery.com>
++
++	gcc/
++	* config/arm/marvell-f.md: Fix FSF address and comment capitalization.
++	* config/arm/marvell-f-vfp.md: New.
++	* config/arm/arm-cores.def: Add FL_VFPV2 for marvell-f.
++	* config/arm/arm.md: Include marvell-f-vfp.md.
++	(generic_vfp): Don't set attribute to "yes" for marvell_f tuning.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-03-22  Sandra Loosemore  <sandra@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Add code to define
++	__ARM_TUNE_MARVELL_F__.
++	* config/arm/lib1funcs.asm (ARM_DIV_BODY):  Conditionalize for
++	__ARM_TUNE_MARVELL_F__.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-03-18  Mark Shinwell  <shinwell@codesourcery.com>
++
++	gcc/
++	* config/arm/vfp.md: When targeting a Marvell core, only
++	enable patterns involving multiply-accumulate type
++	instructions when optimizing for size.
++
++2009-05-29  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-01-03  Mark Shinwell  <shinwell@codesourcery.com>
++	2007-09-19  Paul Brook  <paul@codesourcery.com>
++
++	NOT ASSIGNED TO FSF
++	Port from Marvell compiler:
++	gcc/
++	* config/arm/arm.c (arm_issue_rate): Add Marvell-F support.
++	(arm_multipass_dfa_lookahead): New.
++	(TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD): Define.
++	(FL_MARVELL_F, FL_COMPAT): New.
++	(arm_tune_marvell_f): New.
++	(arm_override_options): Set arm_tune_marvell_f as appropriate. Mask out
++	FL_COMPAT when checking cpu vs. arch.
++	* config/arm/arm.h (arm_tune_marvell_f): Declare.
++	* config/arm/arm-cores.def: Add marvell-f entry.
++	* config/arm/arm-tune.md: Regenerate.
++	* config/arm/t-arm (MD_INCLUDES): Add marvell-f.md.
++	* config/arm/arm.md: Don't use generic scheduler for marvell-f.
++	Include marvell-f.md.  Extend "insn" attribute with mov/mvn/
++	and/orr/eor cases and annotate instruction patterns accordingly.
++	* config/arm/vfp.md: Annotate likewise.
++	* config/arm/marvell-f.md: New.
++
++2009-05-28  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2008-02-18  Julian Brown  <julian@codesourcery.com>
++		    Paul Brook  <paul@codesourcery.com>
++
++	gcc/
++	* config/arm/bpabi.S (test_div_by_zero): New macro.
++	(aeabi_ldivmod): Use above macro to tailcall long long div-by-zero
++	handler.
++	(aeabi_uldivmod): Likewise.
++	* config/arm/bpabi-v6m.S (test_div_by_zero): New macro.
++	(aeabi_ldivmod, aeabi_uldivmod): Use above macro.
++	* config/arm/lib1funcs.asm (ARM_LDIV0): Tailcall int div-by-zero
++	handler. Add signed/unsigned argument, pass correct value to that
++	handler.
++	(THUMB_LDIV0): Same, for Thumb.
++	(DIV_FUNC_END): Add signed argument.
++	(WEAK): New macro.
++	(__udivsi3, __umodsi3): Add unsigned argument to DIV_FUNC_END.
++	(__divsi3, modsi3): Add signed argument to DIV_FUNC_END.
++	(__aeabi_uidivmod, __aeabi_idivmod): Check division by zero.
++	(__div0): Rename to __aeabi_idiv0, __aeabi_ldiv0 for EABI, and declare
++	those names weak.
++	* config/arm/t-bpabi (LIB1ASMFUNCS): Add _aeabi_idiv0, _aeabi_ldiv0.
++
++2009-05-28  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-06-06  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.h (VALID_IWMMXT_REG_MODE): Allow SImode.
++	(ARM_LEGITIMIZE_RELOAD_ADDRESS): Reduce range allowed for SImode
++	offsets with iWMMXt.
++	* config/arm/arm.c (arm_hard_regno_mode_ok): Update for change to
++	VALID_IWMMXT_REG_MODE.
++
++2009-05-28  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	gcc/
++	* config/arm/arm.h (ASM_OUTPUT_REG_PUSH): Handle STATIC_CHAIN_REGNUM
++	specially for Thumb-1.
++	(ASM_OUTPUT_REG_POP): Likewise.
++
++2009-05-28  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	Issue #5167
++
++	libiberty/
++	* pex-win32.c (pex_win32_pipe): Add _O_NOINHERIT.
++	(pex_win32_exec_child): Create inheritable duplicate descriptors to
++	pass to child process, and close originals (if non-stdin/stdout). Close
++	duplicates when child has spawned.
++
++2009-05-28  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-07-05  Mark Shinwell  <shinwell@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.h (BRANCH_COST): Set to 1 when optimizing for size
++	on Thumb-2.
++
++2009-05-28  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-09-19  Vladimir Prus  <vladimir@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (arm_optimization_options): Disable
++	-fmove-loop-invariants. Use very restrictive inlining heuristics.
++
++	gcc/testsuite/
++	* gcc.c-torture/execute/bcp-1.x: New.  Don't run bcp-1.c test on arm,
++	with -Os.
++	* gcc.c-torture/execute/990208-1.x: New.  Likewise.
++
++2009-05-28  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	libgcc/
++	* config.host (arm*-*-linux*, arm*-*-uclinux*, arm*-*-eabi*)
++	(arm*-*-symbianelf): Add arm/t-divmod-ef to tmake_file.
++	* Makefile.in (LIB2_DIVMOD_EXCEPTION_FLAGS): Set to previous
++	default if not set by a target-specific Makefile fragment.
++	(lib2-divmod-o, lib2-divmod-s-o): Use above.
++	* config/arm/t-divmod-ef: New.
++
++2009-05-28  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-04-17  Paul Brook  <paul@codesourcery.com>
++
++	gcc/
++	* config/arm/arm.c (TARGET_DWARF_REGISTER_SPAN): Define.
++	(arm_dwarf_register_span): New function.
++	(arm_dbx_register_number): Add VFPv3 dwarf numbering.
++
++2009-05-28  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	Issue #4515
++
++	gcc/
++	* config/arm/ieee754-df.S (cmpdf2): Avoid writing below SP.
++	* config/arm/ieee754-sf.S (cmpsf2): Likewise.
++
++2009-05-28  Julian Brown  <julian@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	gcc/
++	* config/arm/arm.c (arm_hard_regno_mode_ok): Allow 4-byte quantities
++	in core registers. Update comment.
++
++2009-05-28  Joseph Myers  <joseph@codesourcery.com>
++
++	Issue #5266
++
++	Backport:
++	gcc/
++	2009-05-28  Joseph Myers  <joseph@codesourcery.com>
++	* config/arm/lib1funcs.asm (__clear_cache): Define if
++	L_clear_cache.
++	* config/arm/linux-eabi.h (CLEAR_INSN_CACHE): Define to give an
++	error if used.
++	* config/arm/t-linux-eabi (LIB1ASMFUNCS): Add _clear_cache.
++
++2009-05-27  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-03-05  Mark Mitchell  <mark@codesourcery.com>
++
++	* configure.in (*-*-vxworks*): Remove target-libstdc++-v3 from
++	noconfigdirs.
++	* configure: Regenerated.
++
++2009-05-27  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-03-12  Richard Sandiford  <richard@codesourcery.com>
++
++	gcc/
++	* config/vx-common.h (TARGET_FLEXLM): Define.
++
++2009-05-27  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++ 	2007-08-26  Mark Mitchell  <mark@codesourcery.com>
++
++	gcc/testsuite/
++	* lib/prune.exp (prune_warnings): Extend the default
++	implementation to prune linker warnings about libm on Solaris.
++	libstdc++-v3/
++	* testsuite/lib/prune.exp (prune_g++_output): Prune linker
++	warnings about libm on Solaris.
++
++2009-05-27  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Merged from Sourcery G++ 4.3:
++
++	2007-08-26  Mark Mitchell  <mark@codesourcery.com>
++
++	fixincludes/
++	* inclhack.def (solaris_mutex_init_2): Remove precise machine
++	checks; look at <sys/types.h> to determine whether fix is
++	required.
++	(solaris_rwlock_init_1): Likewise.
++	(solaris_once_init_2): Likewise.
++	* tests/base/sys/types.h: Add output generated by
++	solaris_mutex_init_2.
++	* fixincl.x: Regenerated.
++
++2009-05-27  Catherine Moore  <clm@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	2008-11-23  Richard Sandiford  <rsandiford@googlemail.com>
++	* config/mips/mips.c (mips_legitimize_address): Handle
++	illegitimate CONST_INT addresses.
++
++2009-05-26  Sandra Loosemore  <sandra@codesourcery.com>
++	    Mark Shinwell  <shinwell@codesourcery.com>
++	    Joseph Myers  <joseph@codesourcery.com>
++
++	Revised patch merged from Sourcery G++ 4.3.
++
++	gcc/
++	* doc/invoke.texi (-falign-arrays): Document.
++	* function.h (alignment_for_aligned_arrays): Declare.
++	* function.c (get_stack_local_alignment): Use it.
++	(alignment_for_aligned_arrays): Define.
++	* cfgexpand.c (get_decl_align_unit): Use it here, too.
++	* common.opt (-falign-arrays): New.
++	* varasm.c (assemble_variable): Use alignment_for_aligned_arrays,
++	and use it irrespective of whether DATA_ALIGNMENT is defined.
++
++2009-05-26  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Forward port 2007-07-05  Richard Sandiford  <richard@codesourcery.com>
++
++	gcc/
++	* config/arm/neon-gen.ml: Include vxWorks.h rather than stdint.h
++	for VxWorks kernels.
++	* config/arm/arm_neon.h: Regenerate.
++
++2009-05-23  Mark Mitchell  <mark@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-05-23  Mark Mitchell  <mark@codesourcery.com>
++	* final.c (shorten_branches): Do not align labels for jump tables.
++	(final_scan_insn): Use JUMP_TABLE_DATA_P.
++	2009-05-23  Mark Mitchell  <mark@codesourcery.com>
++		    Maxim Kuvyrkov  <maxim@codesourcery.com>
++	* gcc.dg/falign-labels-1.c: New test.
++
++2009-05-22  Mark Mitchell  <mark@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-05-22  Mark Mitchell  <mark@codesourcery.com>
++	* config/arm/thumb2.md: Add 16-bit multiply instructions.
++	2009-05-22  Mark Mitchell  <mark@codesourcery.com>
++	* lib/target-supports.exp (check_effective_target_arm_thumb2_ok):
++	New function.
++	* gcc.target/arm/thumb2-mul-space.c: New file.
++	* gcc.target/arm/thumb2-mul-space-2.c: New file.
++	* gcc.target/arm/thumb2-mul-space-3.c: New file.
++	* gcc.target/arm/thumb2-mul-speed.c: New file.
++
++2009-05-22  Julian Brown  <julian@codesourcery.com>
++
++	gcc/
++	* gcse.c (hash_scan_set): Don't make copies of instructions the
++	target deems uncopyable.
++
++2009-05-22  Nathan Sidwell  <nathan@codesourcery.com>
++
++	* release-notes-csl.xml: Remove notes erroneously ported from
++	4.3.  They will be picked up during the document build.
++
++	Forward port 2008-09-11  Mark Mitchell  <mark@codesourcery.com>
++
++	Issue #3606
++	* release-notes-csl.xml: Document dllexport fix.
++
++	gcc/
++	* tree.c (handle_dll_attribute): Mark dllexport'd inlines as
++	non-external.
++
++	gcc/cp
++	* decl2.c (decl_needed_p): Consider dllexport'd functions needed.
++	* semantics.c (expand_or_defer_fn): Similarly.
++
++	gcc/testsuite/
++	* gcc.dg/dll-6.c: New test.
++	* gcc.dg/dll-6a.c: Likewise.
++	* gcc.dg/dll-7.c: Likewise.
++	* gcc.dg/dll-7a.c: Likewise.
++	* g++.dg/ext/dllexport2.C: Likewise.
++	* g++.dg/ext/dllexport2a.cc: Likewise.
++
++2009-05-21  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #4289
++	Backport from mainline:
++
++	2009-03-27  Sandra Loosemore  <sandra@codesourcery.com>
++
++	fixincludes/
++	* server.c (run_shell): Quote directory name passed to cd.
++
++2009-05-21  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2009-04-04  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #5104
++	PR tree-optimization/39604
++
++	gcc/testsuite
++	* g++.dg/tree-ssa/sink-1.C: New.
++
++	gcc/
++	* tree_ssa-sink.c (sink_code_in_bb): Do not sink statements out
++	of a lexical block containing variable definitions.
++
++2009-05-21  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Issue #5174
++	Backport from mainline:
++
++	2009-04-09  Sandra Loosemore  <sandra@codesourcery.com>
++
++	gcc/
++	* doc/invoke.texi (Optimize Options): Add cross-reference to
++	-Q --help=optimizers examples.
++
++2009-05-21  Mark Mitchell  <mark@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-05-21  Mark Mitchell  <mark@codesourcery.com>
++	* config/arm/neon.md (*mul<mode>3add<mode>_neon): New pattern.
++	(*mul<mode>3neg<mode>add<mode>_neon): Likewise.
++	2009-05-21  Mark Mitchell  <mark@codesourcery.com>
++	* gcc.dg/target/arm/neon-vmla-1.c: New.
++	* gcc.dg/target/arm/neon-vmls-1.c: Likewise.
++
++2009-05-21  Sandra Loosemore  <sandra@codesourcery.com>
++
++	gcc/
++	* cp/decl.c (grokdeclarator): Fix merge error.
++
++2009-05-19  Catherine Moore  <clm@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-04-15  Catherine Moore  <clm@codesourcery.com>
++	* debug.h (set_name):  Declare.
++	* dwarf2out.c (dwarf2out_set_name): Declare.
++	(dwarf2_debug_hooks): Add set_name.
++	(find_AT_string): New.
++	(add_AT_string): Call find_AT_string.
++	(dwarf2out_set_name): New.
++	* cp/decl.c (grokdeclarator): Call set_name.
++	* vmsdbgout.c (vmsdbg_debug_hooks): Add set_name_debug_nothing.
++	* debug.c (do_nothing_debug_hooks):  Likewise.
++	* dbxout.c (dbx_debug_hooks): Likewise.
++	* sdbout.c (sdb_debug_hooks): Likewise.
++
++	2009-04-17  David Edelsohn  <edelsohn@gnu.org>
++	* dbxout.c (xcoff_debug_hooks): Add set_name_debug_nothing.
++
++	2009-04-28  Catherine Moore  <clm@codesourcery.com>
++	* debug.h (set_name): Add comment.
++
++2009-05-19  Andrew Stubbs  <ams@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-04-06  Andrew Stubbs  <ams@codesourcery.com>
++	gcc/testsuite/
++	* gcc.dg/pragma-isr-trapa2.c: Skip test for FPU-less architectures.
++
++2009-05-19  Andrew Stubbs  <ams@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-04-06  Andrew Stubbs  <ams@codesourcery.com>
++	gcc/testsuite/
++	* gcc.target/sh/sh4a-memmovua.c: Include string.h instead of stdlib.h.
++
++2009-05-19  Andrew Stubbs  <ams@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-04-06  Andrew Stubbs  <ams@codesourcery.com>
++	gcc/testsuite/
++	* gcc.target/sh/sh4a-bitmovua.c (y0): Rename to y_0 to avoid a clash
++	with the built-in y0, and the subsequent warning.
++	(y1): Likewise, rename to y_1.
++
++2009-05-19  Andrew Stubbs  <ams@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-04-06  Andrew Stubbs  <ams@codesourcery.com>
++	gcc/
++	* config/sh/lib1funcs.asm (ic_invalidate): Move ICBI out of the
++	delay slot.
++	(ic_invalidate_array): Likewise.
++
++2009-05-19  Andrew Stubbs  <ams@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-04-06  Andrew Stubbs  <ams@codesourcery.com>
++	gcc/libstdc++-v3/
++	* config/cpu/sh/atomicity.h: Put the SH4A specific functions in the
++	__gnu_cxx namespace.  Remove "static inline".
++
++2009-05-19  Andrew Stubbs  <ams@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-04-02  Andrew Stubbs  <ams@codesourcery.com>
++	gcc/
++	* config/sh/linux-unwind.h: Disable when inhibit_libc is defined.
++
++2009-05-18  Nathan Sidwell  <nathan@codesourcery.com>
++
++	gcc/testsuite/
++	* g++.dg/ext/ms-1.C: Fix mixfixed misapplied patch.
++
++2009-05-18  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Backport from mainline:
++
++	2009-05-18  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	M68K TLS support.
++	gcc/
++	* configure.ac (m68k-*-*): Check if binutils support TLS.
++	* configure: Regenerate.
++	* config/m68k/predicates.md (symbolic_operand): Extend comment.
++	* config/m68k/constraints.md (Cu): New constraint.
++	* config/m68k/m68k.md (UNSPEC_GOTOFF): Remove.
++	(UNSPEC_RELOC16, UNSPEC_RELOC32): New constants.
++	(movsi): Handle TLS symbols.
++	(addsi3_5200): Handle XTLS symbols, indent.
++	* config/m68k/m68k-protos.h (m68k_legitimize_tls_address): Declare.
++	(m68k_tls_reference_p): Declare.
++	(m68k_legitimize_address): Declare.
++	(m68k_unwrap_symbol): Declare.
++	* config/m68k/m68k.opt (mxtls): New option.
++	* config/m68k/m68k.c (ggc.h): Include.
++	(m68k_output_dwarf_dtprel): Implement hook.
++	(TARGET_HAVE_TLS, TARGET_ASM_OUTPUT_DWARF_DTPREL): Define.
++	(m68k_expand_prologue): Load GOT pointer when function needs it.
++	(m68k_illegitimate_symbolic_constant_p): Handle TLS symbols.
++	(m68k_legitimate_constant_address_p): Same.
++	(m68k_decompose_address): Handle TLS references.
++	(m68k_get_gp): New static function.
++	(enum m68k_reloc): New contants.
++	(TLS_RELOC_P): New macro.
++	(m68k_wrap_symbol): New static function.
++	(m68k_unwrap_symbol): New function.
++	(m68k_final_prescan_insn_1): New static function.
++	(m68k_final_prescan_insn): New function.
++	(m68k_move_to_reg, m68k_wrap_symbol_into_got_ref): New static
++	functions.
++	(legitimize_pic_address): Handle TLS references..
++	(m68k_tls_get_addr, m68k_get_tls_get_addr)
++	(m68k_libcall_value_in_a0_p)
++	(m68k_call_tls_get_addr, m68k_read_tp, m68k_get_m68k_read_tp)
++	(m68k_call_m68k_read_tp): Helper variables and functions for ...
++	(m68k_legitimize_tls_address): Handle TLS references.
++	(m68k_tls_symbol_p, m68k_tls_reference_p_1, m68k_tls_reference_p):
++	New functions.
++	(m68k_legitimize_address): Handle TLS symbols.
++	(m68k_get_reloc_decoration): New static function.
++	(m68k_output_addr_const_extra): Handle UNSPEC_RELOC16 and
++	UNSPEC_RELOC32.
++	(m68k_output_dwarf_dtprel): Implement hook.
++	(print_operand_address): Handle UNSPEC_RELOC16 adn UNSPEC_RELOC32.
++	(m68k_libcall_value): Return result in A0 instead of D0 when asked by
++	m68k_call_* routines.
++	(sched_attr_op_type): Handle TLS symbols.
++	(gt-m68k.h): Include.
++	* config/m68k/m68k.h (FINAL_PRESCAN_INSN): Define.
++	(LEGITIMATE_PIC_OPERAND_P): Support TLS.
++	gcc/testsuite/
++	* gcc.target/m68k/tls-ie.c: New test.
++	* gcc.target/m68k/tls-le.c: New test.
++	* gcc.target/m68k/tls-gd.c: New test.
++	* gcc.target/m68k/tls-ld.c: New test.
++	* gcc.target/m68k/tls-ie-xgot.c: New test.
++	* gcc.target/m68k/tls-le-xtls.c: New test.
++	* gcc.target/m68k/tls-gd-xgot.c: New test.
++	* gcc.target/m68k/tls-ld-xgot.c: New test.
++	* gcc.target/m68k/tls-ld-xtls.c: New test.
++	* gcc.target/m68k/tls-ld-xgot-xtls.c: New test.
++
++	Merge from Sourcery G++ 4.3:
++	gcc/
++	* config/m68k/m68k.c (m68k_legitimize_address): New function.
++	* config/m68k/m68k.h (LEGITIMIZE_ADDRESS): Use it.
++	* config/m68k/m68k-proto.h (m68k_legitimize_address): Declare it.
++
++2009-05-15  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-10-23  Kazu Hirata  <kazu@codesourcery.com>
++
++	Issue 3852
++	gcc/
++	* config/arm/t-asa (MULTILIB_EXTRA_OPTS): New.
++
++	2008-05-28  Kazu Hirata  <kazu@codesourcery.com>
++
++	Issue 2895
++	gcc/
++	* config.gcc (arm*-*-linux*): Handle enable_extra_asa_multilibs.
++	enable_extra_asa_multilibs.
++	* config/arm/t-asa: New.
++
++	2008-05-28  Kazu Hirata  <kazu@codesourcery.com>
++
++	* config/arm/t-asa (MULTILIB_EXCEPTIONS): Remove
++	march=armv4t/mfpu=neon* and march=armv4t/*mfloat-abi=softfp.  Add
++	*march=armv4t*/*mfpu=neon* and *march=armv4t*/*mfloat-abi=softfp*.
++	(MULTILIB_ALIASES): Remove march?armv4t=mthumb/march?armv4t* and
++	march?armv6=mthumb/march?armv6*. Add
++	march?armv4t=mthumb/march?armv4t, march?armv6=mthumb/march?armv6,
++	and
++	march?armv6/mfloat-abi?softfp=mthumb/march?armv6/mfloat-abi?softfp.
++
++2009-05-15  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	NOT ASSIGNED TO FSF
++	COPYRIGHT CAVIUM
++	gcc/
++	* config/mips/octeon-elf-unwind.h, config/mips/octeon-elf.h,
++	config/mips/octeon.h, config/mips/t-octeon-elf: New.
++	* config.gcc: Handle mips64octeon*-wrs-elf*.
++	(mips-wrs-linux-gnu): Use mips/octeon.h.
++	* config/mips/mips-protos.h (octeon_output_shared_variable): New.
++	* config/mips/mips.c (octeon_handle_cvmx_shared_attribute,
++	octeon_select_section, octeon_unique_section,
++	octeon_output_shared_variable): New.
++	(mips_attribute_table): Add cvmx_shared.
++	(mips_in_small_data_p): Check for cvmx_shared attribute.
++
++	libgcc/
++	* config.host: Handle mips64octeon*-wrs-elf*.
++
++2009-05-15  Mark Mitchell  <mark@codesourcery.com>
++            Joseph Myers  <joseph@codesourcery.com>
++            Mark Shinwell  <shinwell@codesourcery.com>
++            Vladimir Prus  <vladimir@codesourcery.com>
++            Paul Brook  <paul@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	* config.gcc (arm-wrs-linux-gnueabi, i586-wrs-linux-gnu,
++	mips-wrs-linux-gnu, powerpc-wrs-linux-gnu, sparc-wrs-linux-gnu):
++	Handle new targets.
++	* config/arm/t-wrs-linux, config/arm/wrs-linux.h,
++	config/mips/t-wrs-linux, config/mips/wrs-linux.h,
++	config/rs6000/t-wrs-linux, config/rs6000/wrs-linux.h: New.
++	* config/sparc/linux64.h (TARGET_DEFAULT): Define differently for
++	BIARCH_32BIT_DEFAULT.
++
++2009-05-15  Sandra Loosemore  <sandra@codesourcery.com>
++
++	Backport from upstream:
++
++	2009-05-15  Sandra Loosemore  <sandra@codesourcery.com>
++
++	gcc/
++	* optabs.c (prepare_float_lib_cmp):  Test that the comparison,
++	swapped, and reversed optabs exist before trying to use them.
++
++2009-05-12  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/arm/nocrt0.h (LIB_SPEC): Undefine before defining.
++
++2009-05-12  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from ARM/hard_vfp_4_4_branch:
++
++	gcc/
++	2009-05-12  Joseph Myers  <joseph@codesourcery.com>
++	* config/arm/arm.c (aapcs_vfp_sub_candidate): Use V2SImode and
++	V4SImode as representatives of all 64-bit and 128-bit vector
++	types.  Allow vector types without vector modes.
++	(aapcs_vfp_is_call_or_return_candidate): Handle vector types
++	without vector modes like BLKmode.
++	(aapcs_vfp_allocate): Handle TImode for non-TARGET_NEON like
++	BLKmode.  Avoid unsupported vector modes or TImode moves for
++	non-TARGET_NEON.
++	(aapcs_vfp_allocate_return_reg): Likewise.
++	(arm_vector_mode_supported_p): Only support V2SImode, V4HImode and
++	V8QImode if TARGET_NEON || TARGET_IWMMXT.
++
++	2009-05-12  Joseph Myers  <joseph@codesourcery.com>
++	* config/arm/arm.c (arm_handle_pcs_attribute): New.
++	(arm_get_pcs_model): Pass attribute arguments to
++	arm_pcs_from_attribute.
++	(arm_init_cumulative_args): Use base AAPCS for conversions from
++	floating-point types to DImode.
++	(arm_attribute_table): Add pcs attribute.
++	(arm_handle_pcs_attribute): New.
++	* config/arm/bpabi.h (DECLARE_LIBRARY_RENAMES): When renaming
++	conversions from floating-point types to DImode, also declare them
++	to use base AAPCS and declare functions they call to use base
++	AAPCS and their RTABI names.
++
++	2009-05-12  Joseph Myers  <joseph@codesourcery.com>
++	* doc/invoke.texi (-mfloat-abi=@var{name}): Remove statement about
++	-mfloat-abi=hard not being supported for VFP.
++
++	2009-05-11  Kazu Hirata  <kazu@codesourcery.com>
++	* config/sparc/sparc.c (sparc_emit_float_lib_cmp): Pass a libcall
++	SYMBOL_REF to hard_libcall_value.
++
++	2009-03-05  Joseph Myers  <joseph@codesourcery.com>
++		    Richard Earnshaw  <rearnsha@arm.com>
++	* config/arm/arm.c (aapcs_layout_arg): Once a co-processor argument
++	has been put on the stack, all remaining co-processory arguments for
++	that co-processor also go on the stack.
++
++	2009-03-05  Joseph Myers  <joseph@codesourcery.com>
++	* config/arm/arm.c (arm_return_in_memory): Handle returning
++	vectors of suitable size in registers also for AAPCS case.
++
++	2009-01-13  Richard Earnshaw <rearnsha@arm.com>
++	* doc/tm.texi (TARGET_LIBCALL_VALUE): Add missing end statement.
++
++	2008-12-09  Richard Earnshaw <rearnsha@arm.com>
++	ARM Hard-VFP calling convention
++	* target-def.h (TARGET_LIBCALL_VALUE): New hook.
++	* target.h (gcc_target): Add libcall_value to table of call hooks.
++	* targhooks.h (default_libcall_value): Default implementation.
++	* targhooks.c (default_libcall_value): Likewise.
++	* doc/tm.texi (TARGET_LIBCALL_VALUE): Document it.
++	* optabs.c (expand_unop): Use it.
++	* expr.h (hard_libcall_value): Pass the function RTX through.
++	* calls.c (emit_library_call_value_1): Update call to
++	hard_libcall_value.
++	* explow.c (hard_libcall_value): Use new target hook.
++	* testsuite/lib/target-supports.exp
++	(check_effective_target_arm_hard_vfp_ok): New hook.
++	(check_effective_target_arm_neon_ok): Improve test for neon
++	availability.
++	* testsuite/gcc.target/arm/eabi1.c: Only run test in base variant.
++	* config/arm/arm.c: Include cgraph.h
++	(TARGET_FUNCTION_VALUE): Override default hook.
++	(arm_pcs_default): New variable.
++	(arm_override_options): Don't fault hard calling convention with VFP.
++	Add support for AAPCS variants.
++	(arm_function_value): Make static.  Handle AAPCS variants.
++	(arm_libcall_value): New function.
++	(arm_apply_result_size): Handle VFP registers in results.
++	(arm_return_in_memory): Rework all AAPCS variants; handle hard-vfp
++	conventions.
++	(pcs_attribute_args): New variable.
++	(arm_pcs_from_attribute): New function.
++	(arm_get_pcs_model): New function.
++	(aapcs_vfp_cum_init): New function.
++	(aapcs_vfp_sub_candidate): New function.
++	(aapcs_vfp_is_return_candidate): New function.
++	(aapcs_vfp_is_call_candidate): New function.
++	(aapcs_vfp_allocate): New function.
++	(aapcs_vfp_allocate_return_reg): New function.
++	(aapcs_vfp_advance): New function.
++	(aapcs_cp_arg_layout): New variable.
++	(aapcs_select_call_coproc): New function.
++	(aapcs_select_return_coproc): New function.
++	(aapcs_allocate_return_reg): New function.
++	(aapcs_libcall_value): New function.
++	(aapcs_layout_arg): New function.
++	(arm_init_cumulative_args): Initialize AAPCS args data.
++	(arm_function_arg): Handle AAPCS variants using new interface.
++	(arm_arg_parital_bytes): Likewise.
++	(arm_function_arg_advance): New function.
++	(arm_function_ok_for_sibcall): Ensure that sibling calls agree on
++	calling conventions.
++	(arm_setup_incoming_varargs): Handle new AAPCS args data.
++	* arm.h (NUM_VFP_ARG_REGS): Define.
++	(LIBCALL_VALUE): Update.
++	(FUNCTION_VALUE): Delete.
++	(FUNCTION_VALUE_REGNO_P): Add VFP regs.
++	(arm_pcs): New enum.
++	(CUMULATIVE_ARGS): New data to support AAPCS argument marshalling.
++	(FUNCTION_ARG_ADVANCE): Call arm_function_arg_advance.
++	(FUNCTION_ARG_REGNO_P): Add VFP regs.
++	* arm-protos.h (arm_function_arg_advance): Add.
++	(aapcs_libcall_value): Add.
++	(arm_function_value): Delete.
++
++	gcc/testsuite/
++	2009-05-12  Joseph Myers  <joseph@codesourcery.com>
++	* gcc.target/arm/eabi1.c: Do not skip for non-base ABI variants.
++	(PCS): Define macro to use base AAPCS.
++	(decl_float, __aeabi_d2f, __aeabi_f2d): Use PCS macro.
++
++	2009-05-11  Daniel Jacobowitz  <dan@codesourcery.com>
++	* lib/target-supports.exp (check_effective_target_arm_neon_ok):
++	Correct arm_neon.h typo.
++
++	2009-03-06  Richard Earnshaw  <rearnsha@arm.com>
++	* lib/target-supports.exp (check_effective_target_hard_vfp_ok): Make
++	this a linkage test.
++	* gcc.target/arm/aapcs/aapcs.exp: New framework for testing AAPCS
++	argument marshalling.
++	* abitest.h: New file.
++	* vfp1.c, vfp2.c, vfp3.c, vfp4.c, vfp5.c, vfp6.c, vfp7.c: New tests.
++	* vfp8.c, vfp9.c, vfp10.c, vfp11.c, vfp12.c, vfp13.c, vfp14.c: New.
++
++2009-05-12  Nathan Sidwell  <nathan@codesourcery.com>
++
++	gcc/testsuite/
++	* g++.dg/ext/ms-1.C: Fix misapplied patch.
++
++2009-05-12  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2009-05-12  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	* ChangeLog.csl: Add changelog for the previous commit.
++	gcc/
++	* configure: Regenerate with proper autoconf version.
++
++	2009-05-12  Maxim Kuvyrkov  <maxim@codesourcery.com>
++	gcc/
++	* common.opt (feglibc): New dummy option.
++	* opts.c (common_handle_option): Handle it.
++	* config.gcc: Handle 'eglibc' vendor.
++	* config/t-eglibc: Define multilibs for testing EGLIBC features.
++	* configure.ac (--with-eglibc-configs, EGLICB_CONFIGS): New option and
++	variable.
++	* configure: Regenerate.
++	* Makefile.in (EGLIBC_CONFIGS): Handle
++
++2009-05-11  Nathan Sidwell  <nathan@codesourcery.com>
++
++	gcc/
++	* config/m68k/t-uclinux (M68K_MLIB_CPU): Check for FL_UCLINUX.
++	* config/m68k/m68k-devices.def: Add FL_UCLINUX to 68020 and 54455
++	multilibs.
++	* config/m68k/m68k.h (FL_UCLINUX): Define.
++
++	* release-notes-csl.xml: Document.
++
++	gcc/
++	* config/m68k/m68k-devices.def (52274, 52277): New devices.
++	(5301x, 5225x): New devices.
++	(51xx): New devices.
++
++	* release-notes-csl.xml: Document new processors.
++
++	Forward port 2009-02-12  Nathan Sidwell  <nathan@codesourcery.com>
++	Issue #4620
++	gcc/
++	* config/rs6000/rs6000.c (rs6000_init_builtins): Set TYPE_NAME of
++	our distinct integral and vector types.
++	gcc/testsuite/
++	* g++.dg/ext/altivec-17.C: New.
++
++	* release-notes-csl.xml: Add note.
++
++2009-05-08  Nathan Sidwell  <nathan@codesourcery.com>
++
++	Issue 5335
++	gcc/
++	* class.c (resolve_address_of_overloaded_function): Use
++	OVL_CURRENT for error.
++	(instantiate_type): Allow FUNCTION_DECL when ms_extensions are
++	active.  Don't copy the rhs node.  Delete COMPOUND_EXPR code.
++	* typeck.c (build_compound_expr): Check RHS has known type.
++
++	gcc/testsuite/
++	* g++.dg/ext/ms-1.C: New.
++	* g++.old-deja/g++.other/overload11.C: Adjust.
++
++	* release-notes-csl.xml: Add two notes.
++
++2009-05-04  Kazu Hirata  <kazu@codesourcery.com>
++
++	Backport:
++	gcc/
++	2009-05-04  Kazu Hirata  <kazu@codesourcery.com>
++	* expmed.c (synth_mult): When trying out a shift, pass the result
++	of a signed shift.
++
++2009-05-04  Kazu Hirata  <kazu@codesourcery.com>
++
++	Backport:
++	gcc/
++	2009-05-04  Kazu Hirata  <kazu@codesourcery.com>
++	* expmed.c (shiftsub_cost): Rename to shiftsub0_cost.
++	(shiftsub1_cost): New.
++	(init_expmed): Compute shiftsub1_cost.
++	(synth_mult): Optimize multiplications by constants of the form
++	-(2^^m-1) for some constant positive integer m.
++
++2009-05-01  Andrew Stubbs  <ams@codesourcery.com>
++
++	gcc/
++	* config/sh/cs-sgxxlite-linux.h, config/sh/t-sgxxlite-linux: New.
++	* config.gcc: Add SH multilib configurations.
++
++2009-05-01  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	gcc/
++	2009-04-17  Andrew Stubbs  <ams@codesourcery.com>
++	* configure.ac: Add new AC_SUBST for TM_ENDIAN_CONFIG,
++	TM_MULTILIB_CONFIG and TM_MULTILIB_EXCEPTIONS_CONFIG.
++	(--with-multilib-list): Add default value.
++	* configure: Regenerate.
++	* Makefile.in (TM_ENDIAN_CONFIG): Define.
++	(TM_MULTILIB_CONFIG, TM_MULTILIB_EXCEPTIONS_CONFIG): Define.
++	* config.gcc (sh-*-*): Switch to using TM_ENDIAN_CONFIG,
++	TM_MULTILIB_CONFIG, and TM_MULTILIB_EXCEPTIONS_CONFIG.
++	Don't add default cpu to multilib list unnecessarily, but do enable
++	the relevant compiler option..
++	Add support for --with-multilib-list=<blank> and
++	--with-multilib-list=!<somelib> to supress unwanted multilibs.
++	* config/sh/t-sh (DEFAULT_ENDIAN, OTHER_ENDIAN): New variables.
++	(MULTILIB_ENDIAN, MULTILIB_CPUS): Delete variables.
++	(MULTILIB_OPTIONS): Redefine using OTHER_ENDIAN and
++	TM_MULTILIB_CONFIG.
++	(MULTILIB_EXCEPTIONS): Add TM_MULTILIB_EXCEPTIONS_CONFIG.
++	(MULTILIB_OSDIRNAMES): New variable.
++	* config/sh/t-1e: Delete file.
++	* config/sh/t-mlib-sh1: Delete file.
++	* config/sh/t-mlib-sh2: Delete file.
++	* config/sh/t-mlib-sh2a: Delete file.
++	* config/sh/t-mlib-sh2a-nofpu: Delete file.
++	* config/sh/t-mlib-sh2a-single: Delete file.
++	* config/sh/t-mlib-sh2a-single-only: Delete file.
++	* config/sh/t-mlib-sh2e: Delete file.
++	* config/sh/t-mlib-sh3e: Delete file.
++	* config/sh/t-mlib-sh4: Delete file.
++	* config/sh/t-mlib-sh4-nofpu: Delete file.
++	* config/sh/t-mlib-sh4-single: Delete file.
++	* config/sh/t-mlib-sh4-single-only: Delete file.
++	* config/sh/t-mlib-sh4a: Delete file.
++	* config/sh/t-mlib-sh4a-nofpu: Delete file.
++	* config/sh/t-mlib-sh4a-single: Delete file.
++	* config/sh/t-mlib-sh4a-single-only: Delete file.
++	* config/sh/t-mlib-sh4al: Delete file.
++	* config/sh/t-mlib-sh5-32media: Delete file.
++	* config/sh/t-mlib-sh5-32media-nofpu: Delete file.
++	* config/sh/t-mlib-sh5-64media: Delete file.
++	* config/sh/t-mlib-sh5-64media-nofpu: Delete file.
++	* config/sh/t-mlib-sh5-compact: Delete file.
++	* config/sh/t-mlib-sh5-compact-nofpu: Delete file.
++	* config/sh/t-linux: Don't override MULTILIB_EXCEPTIONS.
++	* doc/install.texi (Options specification): Add
++	--with-multilib-list and --with-endian.
++
++2009-05-01  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	2008-02-12  Julian Brown  <julian@codesourcery.com>
++
++	Merge from MIPS:
++
++	2008-01-16  David Ung  <davidu@mips.com>
++
++	* config/mips/sdemtk.h: Define macro TARGET_MIPS_SDEMTK.
++	* config/mips/mips.c (mips_file_start): Check against
++	TARGET_MIPS_SDEMTK which supports the TARGET_NO_FLOAT option.
++
++2009-05-01  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	2008-03-17  Julian Brown  <julian@codesourcery.com>
++	* config/mips/sdemtk.h (MIPS_ARCH_FLOAT_SPEC): Override, adding
++	-mno-float option.
++
++2009-05-01  Julian Brown  <julian@codesourcery.com>
++            Catherine Moore  <clm@codesourcery.com>
++            Sandra Loosemore  <sandra@codesourcery.com>
++            Richard Sandiford  <richard@codesourcery.com>
++            Nigel Stephens  <nigel@mips.com>
++            Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/mips/cs-sgxx-linux.h, config/mips/cs-sgxxlite-linux.h,
++	config/mips/t-sgxx-linux, config/mips/t-sgxx-sde,
++	config/mips/t-sgxxlite-linux: New.
++	* config.gcc: Add MIPS multilib configurations.
++	* config/mips/mips.opt (mips16e): Add as deprecated alias
++	for -mips16.
++	* doc/invoke.texi (Option Summary, MIPS Options): Document it.
++
++2009-04-29  Nathan Froyd  <froydnj@codesourcery.com>
++            Kazu Hirata <kazu@codesourcery.com>
++            Daniel Jacobowitz  <dan@codesourcery.com>
++            Nathan Sidwell  <nathan@codesourcery.com>
++            Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* config/rs6000/e500mc.h, config/rs6000/t-cs-eabi,
++	config/rs6000/t-cs-eabi-lite, config/rs6000/t-cs-linux,
++	config/rs6000/t-ppc-e500mc: New.
++	* config.gcc: Add Power multilib configurations.
++	* config/rs6000/eabi.h (CC1_EXTRA_SPEC, ASM_DEFAULT_SPEC): Define.
++	* config/rs6000/linux.h (CC1_EXTRA_SPEC, ASM_DEFAULT_SPEC,
++	SYSROOT_SUFFIX_SPEC): Define.
++
++2009-04-29  Joseph Myers  <joseph@codesourcery.com>
++            Daniel Jacobowitz  <dan@codesourcery.com>
++            Nathan Froyd  <froydnj@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	* config/rs6000/option-defaults.h (OPTION_DEFAULT_SPECS): Handle
++	-te500mc, -te500v1, -te500v2 and -te600.
++
++2009-04-29  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	* config/rs6000/sysv4.h (CC1_EXTRA_SPEC): Define and use.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	* config.gcc (mips*-*-*): Support arch_32 arch_64 tune_32 tune_64.
++	* config/mips/mips.h (OPTION_DEFAULT_SPECS): Add support for
++	arch_32 arch_64 tune_32 tune_64.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	gcc/
++	2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++	* config.gcc (powerpc*-*-* | rs6000-*-*): Add
++	rs6000/option-defaults.h to tm_file.  Support cpu_32, cpu_64,
++	tune_32 and tune_64.
++	* doc/install.texi (--with-cpu-32, --with-cpu-64): Document
++	support on PowerPC.
++	* config/rs6000/rs6000.h (OPTION_DEFAULT_SPECS): Move to ...
++	* config/rs6000/option-defaults.h: ... here.  New file.
++	(OPT_64, OPT_32): Define.
++	(MASK_64BIT): Define to 0 if not already defined.
++	(OPT_ARCH64, OPT_ARCH32): Define.
++	(OPTION_DEFAULT_SPECS): Add entries for cpu_32, cpu_64, tune_32
++	and tune_64.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++            Paul Brook  <paul@codesourcery.com>
++            Daniel Gutson  <dgutson@codesourcery.com>
++            Julian Brown  <julian@codesourcery.com>
++            Sandra Loosemore  <sandra@codesourcery.com>
++
++	gcc/
++	* config/arm/nocrt0.h, config/arm/t-cs-eabi,
++	config/arm/t-cs-eabi-lite, config/arm/t-cs-linux,
++	config/arm/t-cs-linux-lite, config/arm/t-cs-uclinux-eabi: New.
++	* config.gcc: Add ARM multilib configurations.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	2008-02-05  Paul Brook  <paul@codesourcery.com>
++	* doc/fragments.texi: Document MULTILIB_ALIASES.
++	* genmultilib: Add aliases.
++	* Makefile.in (s-mlib): Pass MULTILIB_ALIASES.
++
++	2009-02-03  Andrew Stubbs  <ams@codesourcery.com>
++	* config/print-sysroot-suffix.sh: Add support for MULTILIB_ALIASES.
++	* config/t-sysroot-suffix: Pass MULTILIB_ALIASES.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	gcc/
++	2009-04-07  Andrew Stubbs  <ams@codesourcery.com>
++	* config.gcc (sh-*-*): Add sysroot-suffix.h to tm_file.
++	Add t-sysroot-suffix to tmake_file.
++	* config/print-sysroot-suffix.sh: New file.
++	* config/t-sysroot-suffix: New file.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-08-18  Nathan Froyd  <froydnj@codesourcery.com>
++
++	libgomp/
++	* Makefile.am (LTLDFLAGS): Define.
++	(LINK): Define.
++	* Makefile.in: Regenerate.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	* config.gcc (i[34567]86-*-linux*): Use extra config files if
++	--enable-extra-sgxx-multilibs.
++	* config/i386/cs-linux.h, config/i386/cs-linux.opt,
++	config/i386/t-cs-linux: New.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	gcc/
++	2009-04-16  Joseph Myers  <joseph@codesourcery.com>
++	* config/mips/mips.c (mips_rtx_cost_data): Use SOFT_FP_COSTS in
++	XLR entry.
++	* config/mips/mips.h (MIPS_ISA_LEVEL_SPEC, MIPS_ARCH_FLOAT_SPEC):
++	Handle -march=xlr.
++	* config/mips/xlr.md (ir_xlr_alu): Also accept insn types move,
++	logical and signext.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	Backport:
++
++	gcc/
++	2009-04-14  Joseph Myers  <joseph@codesourcery.com>
++	* config/sol2.h (LINK_ARCH32_SPEC_BASE): Use %R with absolute
++	library paths.
++	* config/sparc/sol2-bi.h (LINK_ARCH64_SPEC_BASE): Likewise.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	2008-07-02  Joseph Myers  <joseph@codesourcery.com>
++	* c-incpath.c: Include toplev.h.
++	(merge_include_chains): Use warning instead of cpp_error for
++	system directory poisoning diagnostic.
++	* Makefile.in (c-incpath.o): Depend on toplev.h.
++	* gcc.c (LINK_COMMAND_SPEC): Pass
++	--error-poison-system-directories if
++	-Werror=poison-system-directories.
++
++	2007-06-13  Joseph Myers  <joseph@codesourcery.com>
++	* common.opt (--Wno-poison-system-directories): New.
++	* doc/invoke.texi (-Wno-poison-system-directories): Document.
++	* c-incpath.c: Include flags.h.
++	(merge_include_chains): Check flag_poison_system_directories.
++	* gcc.c (LINK_COMMAND_SPEC): Pass --no-poison-system-directories
++	to linker if -Wno-poison-system-directories.
++	* Makefile.in (c-incpath.o): Depend on $(FLAGS_H).
++
++	2007-03-20  Daniel Jacobowitz  <dan@codesourcery.com>
++	            Joseph Myers  <joseph@codesourcery.com>
++	* configure.ac (--enable-poison-system-directories): New option.
++	* configure, config.in: Regenerate.
++	* c-incpath.c (merge_include_chains): If
++	ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of
++	/usr/include, /usr/local/include or /usr/X11R6/include.
++
++2009-04-28  Mark Mitchell  <mark@codesourcery.com>
++            Vladimir Prus  <vladimir@codesourcery.com>
++            Joseph Myers  <joseph@codesourcery.com>
++            Carlos O'Donell  <carlos@codesourcery.com>
++            Daniel Jacobowitz  <dan@codesourcery.com>
++            Kazu Hirata  <kazu@codesourcery.com>
++
++	libiberty/
++	* configure.ac: Add cygpath for mingw hosts.
++	* configure: Regenerate.
++	* Makefile.in: Add cygpath.
++	* cygpath.c: New.
++	* pex-win32.c (pex_win32_open_read, pex_win32_open_write): Use
++	open not _open.
++
++	include/
++	* libiberty.h (cygpath): Declare.
++
++	config/
++	* mh-mingw (CFLAGS, BOOT_CFLAGS): Do not use -D__USE_MINGW_ACCESS.
++	Add a comment.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	2008-05-01  Carlos O'Donell  <carlos@codesourcery.com>
++
++	* Makefile.tpl (install): Call install-html and install-pdf.
++	* Makefile.in: Regenerate.
++
++	gcc/
++	* Makefile.in (install): Depend on install-html and install-pdf.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	libgomp/
++	* Makefile.am (install-data-am): Do not depend on install-html and
++	install-pdf.
++	* Makefile.in: Regenerate.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	Merge from Sourcery G++ 4.3:
++
++	libgomp/
++	2008-09-03  Nathan Froyd  <froydnj@codesourcery.com>
++	* libgomp.texi (Library Index): Renamed from "Index" to prevent
++	conflict with index.html on case-insensitive file systems.
++
++	2008-08-18  Nathan Froyd  <froydnj@codesourcery.com>
++	* Makefile.am (datarootdir, docdir, htmldir, pdfdir): Define.
++	(HTMLS_INSTALL, HTMLS_BUILD): Define.
++	($(HTMLS_BUILD)): New rule.
++	(html__strip_dir): Define.
++	(install-data-am): Add install-html and install-pdf prerequsites.
++	(install-html): Add actions.
++	(TEXI2HTML): Define.
++	* Makefile.in: Regenerate.
++	* configure.ac (datarootdir, docdir, htmldir, pdfdir): Add
++	appropriate --with options and AC_SUBSTs.
++	* configure: Regenerate.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	gcc/
++	* gcc.c (main): Add "const" to declaration of license_status.
++
++	Merge from Sourcery G++ 4.3:
++
++	gcc/
++	2008-09-04  Julian Brown  <julian@codesourcery.com>
++	* Makefile.in (CSL_LICENSELIB): Remove space after -L to appease
++	Darwin ld.
++
++	gcc/
++	2007-10-16  Joseph Myers  <joseph@codesourcery.com>
++	* gcc.c (license_me_flag): Define to 1 if not TARGET_FLEXLM.
++
++	2007-08-10  Nathan Froyd  <froydnj@codesourcery.com>
++	* gcc.c (main): Consult license_me_flag to see if failure to
++	acquire a license implies bailing out entirely.
++
++	2007-08-24  Nathan Froyd  <froydnj@codesourcery.com>
++	Issue #1892
++	* gcc.c (main): Check license_me_flag before declaring failure.
++
++	2007-08-30  Nathan Sidwell  <nathan@codesourcery.com>
++	Issue #1892
++	* gcc.c (main): Don't complain if license fails without -flicense-me
++
++	2007-04-12  Richard Sandiford  <richard@codesourcery.com>
++	* gcc.c (main): If find_a_file fails, pass the original subproc
++	to csl_subproc_license_new.
++
++	2006-12-27  Mark Mitchell  <mark@codesourcery.com>
++	NOT ASSIGNED TO FSF
++	COPYRIGHT CODESOURCERY
++	* gcc.c (main): If the license check fails, remove the generated
++	file.
++
++	2006-12-22  Mark Mitchell  <mark@codesourcery.com>
++	NOT ASSIGNED TO FSF
++	COPYRIGHT CODESOURCERY
++	* aclocal.m4: Move licensing options ...
++	* acinclude.m4: ... here.
++
++	2006-12-13  Mark Mitchell  <mark@codesourcery.com>
++	NOT ASSIGNED TO FSF
++	COPYRIGHT CODESOURCERY
++	* gcc.c (csl/license.h): Include, if required.
++	(license_checked): New variable.
++	(no_license): Remove.
++	(process_command): Set license_checked, not no_license.
++	(main): Use CodeSourcery license library.  Remove most
++	TARGET_FLEXLM code.
++	* aclocal.m4 (--with-license): New option.
++	(--with-csl-license-feature): Likewise.
++	(--with-csl-license-version): Likewise.
++	* Makefile.in (CSL_LICENSEINC): Define it.
++	(CSL_LICENSELIB): Likewise.
++	(CSL_LICENSE_PROG): Likewise.
++	(LIBS): Depend on CSL_LICENSELIB.
++	(GCC_PASSES): Depend on CSL_LICENSE_PROG.
++	(INCLUDES): Add CSL_LICENSEINC.
++	* configure.ac (CSL_AC_LICENSE_VERSION): Use it.
++	(CSL_AC_LICENSE): Likewise.
++	(CSL_AC_LICENSE_FEATURE): Likewise.
++	* config.in: Regenerated.
++	* configure: Regenerated.
++
++	2006-10-29  Richard Sandiford  <richard@codesourcery.com>
++	            Joseph Myers  <joseph@codesourcery.com>
++	* gcc.c (license_me_flag): New variable.
++	(feature_proxy_flag): New variable.
++	(no_license): New variable.
++	(process_command): Handle -flicense-me, -ffeature-proxy and
++	-fno-feature-proxy.  Initialize no_license.
++	(main): Check licenses.
++
++2009-04-28  Joseph Myers  <joseph@codesourcery.com>
++
++	* release-notes-csl.xml: New.
++
++
++Local Variables:
++mode: change-log
++change-log-default-name: "ChangeLog.csl"
++End:
+--- a/src/boehm-gc/include/private/gc_locks.h
++++ b/src/boehm-gc/include/private/gc_locks.h
+@@ -139,49 +139,35 @@
+ #      define GC_TEST_AND_SET_DEFINED
+ #    endif
+ #    if defined(POWERPC)
+-#     if 0 /* CPP_WORDSZ == 64  totally broken to use int locks with ldarx */
+-        inline static int GC_test_and_set(volatile unsigned int *addr) {
+-          unsigned long oldval;
+-          unsigned long temp = 1; /* locked value */
+-
+-          __asm__ __volatile__(
+-               "1:\tldarx %0,0,%3\n"   /* load and reserve               */
+-               "\tcmpdi %0, 0\n"       /* if load is                     */
+-               "\tbne 2f\n"            /*   non-zero, return already set */
+-               "\tstdcx. %2,0,%1\n"    /* else store conditional         */
+-               "\tbne- 1b\n"           /* retry if lost reservation      */
+-               "\tsync\n"              /* import barrier                 */
+-               "2:\t\n"                /* oldval is zero if we set       */
+-              : "=&r"(oldval), "=p"(addr)
+-              : "r"(temp), "1"(addr)
+-              : "cr0","memory");
+-          return (int)oldval;
+-        }
++#     define GC_TEST_AND_SET_DEFINED
++#     define GC_CLEAR_DEFINED
++#     if (__GNUC__>4)||((__GNUC__==4)&&(__GNUC_MINOR__>=4))
++#       define GC_test_and_set(addr) __sync_lock_test_and_set (addr, 1)
++#       define GC_clear(addr) __sync_lock_release (addr)
+ #     else
+         inline static int GC_test_and_set(volatile unsigned int *addr) {
+           int oldval;
+           int temp = 1; /* locked value */
+ 
+           __asm__ __volatile__(
+-               "1:\tlwarx %0,0,%3\n"   /* load and reserve               */
++               "\n1:\n"
++	       "\tlwarx %0,%y3\n"      /* load and reserve, 32-bits      */
+                "\tcmpwi %0, 0\n"       /* if load is                     */
+                "\tbne 2f\n"            /*   non-zero, return already set */
+-               "\tstwcx. %2,0,%1\n"    /* else store conditional         */
++               "\tstwcx. %2,%y3\n"     /* else store conditional         */
+                "\tbne- 1b\n"           /* retry if lost reservation      */
+                "\tsync\n"              /* import barrier                 */
+                "2:\t\n"                /* oldval is zero if we set       */
+-              : "=&r"(oldval), "=p"(addr)
+-              : "r"(temp), "1"(addr)
++              : "=&r"(oldval), "=m"(addr)
++              : "r"(temp), "Z"(addr)
+               : "cr0","memory");
+           return oldval;
+         }
+-#     endif
+-#     define GC_TEST_AND_SET_DEFINED
+       inline static void GC_clear(volatile unsigned int *addr) {
+ 	__asm__ __volatile__("lwsync" : : : "memory");
+         *(addr) = 0;
+       }
+-#     define GC_CLEAR_DEFINED
++#    endif
+ #    endif
+ #    if defined(ALPHA) 
+         inline static int GC_test_and_set(volatile unsigned int * addr)
+@@ -221,6 +207,12 @@
+ #       define GC_CLEAR_DEFINED
+ #    endif /* ALPHA */
+ #    ifdef ARM32
++#     define GC_TEST_AND_SET_DEFINED
++#     if (__GNUC__>4)||((__GNUC__==4)&&(__GNUC_MINOR__>=4)) && defined(__ARM_EABI__)
++#       define GC_CLEAR_DEFINED
++#       define GC_test_and_set(addr) __sync_lock_test_and_set (addr, 1)
++#       define GC_clear(addr) __sync_lock_release (addr)
++#     else
+         inline static int GC_test_and_set(volatile unsigned int *addr) {
+           int oldval;
+           /* SWP on ARM is very similar to XCHG on x86.  Doesn't lock the
+@@ -233,7 +225,7 @@
+ 			     : "memory");
+           return oldval;
+         }
+-#       define GC_TEST_AND_SET_DEFINED
++#     endif
+ #    endif /* ARM32 */
+ #    ifdef CRIS
+         inline static int GC_test_and_set(volatile unsigned int *addr) {
+--- a/src/config/mh-mingw
++++ b/src/config/mh-mingw
+@@ -1,6 +1,8 @@
+ # Add -D__USE_MINGW_ACCESS to enable the built compiler to work on Windows
+ # Vista (see PR33281 for details).
+-BOOT_CFLAGS += -D__USE_MINGW_ACCESS -Wno-pedantic-ms-format
+-CFLAGS += -D__USE_MINGW_ACCESS
++# Because we wrap access in libiberty/cygpath.c, we do not want to use
++# the MinGW wrappers for access.
++BOOT_CFLAGS += -Wno-pedantic-ms-format
++# CFLAGS += -D__USE_MINGW_ACCESS
+ # Increase stack limit to same as Linux default.
+ LDFLAGS += -Wl,--stack,8388608
+--- a/src/config/stdint.m4
++++ b/src/config/stdint.m4
+@@ -115,19 +115,19 @@
+ 
+ # Lacking an uintptr_t?  Test size of void *
+ case "$acx_cv_header_stdint:$ac_cv_type_uintptr_t" in
+-  stddef.h:* | *:no) AC_CHECK_SIZEOF(void *) ;;
++  stddef.h:* | *:no) AC_CHECK_SIZEOF(void *,,/* no standard headers */) ;;
+ esac
+ 
+ # Lacking an uint64_t?  Test size of long
+ case "$acx_cv_header_stdint:$ac_cv_type_uint64_t:$ac_cv_type_u_int64_t" in
+-  stddef.h:*:* | *:no:no) AC_CHECK_SIZEOF(long) ;;
++  stddef.h:*:* | *:no:no) AC_CHECK_SIZEOF(long,,/* no standard headers */) ;;
+ esac
+ 
+ if test $acx_cv_header_stdint = stddef.h; then
+   # Lacking a good header?  Test size of everything and deduce all types.
+-  AC_CHECK_SIZEOF(int)
+-  AC_CHECK_SIZEOF(short)
+-  AC_CHECK_SIZEOF(char)
++  AC_CHECK_SIZEOF(int,,/* no standard headers */)
++  AC_CHECK_SIZEOF(short,,/* no standard headers */)
++  AC_CHECK_SIZEOF(char,,/* no standard headers */)
+ 
+   AC_MSG_CHECKING(for type equivalent to int8_t)
+   case "$ac_cv_sizeof_char" in
+--- a/src/config/tls.m4
++++ b/src/config/tls.m4
+@@ -1,5 +1,6 @@
+ dnl Check whether the target supports TLS.
+ AC_DEFUN([GCC_CHECK_TLS], [
++  AC_REQUIRE([AC_CANONICAL_HOST])
+   GCC_ENABLE(tls, yes, [], [Use thread-local storage])
+   AC_CACHE_CHECK([whether the target supports thread-local storage],
+ 		 gcc_cv_have_tls, [
+@@ -66,7 +67,24 @@
+       [dnl This is the cross-compiling case. Assume libc supports TLS if the
+        dnl binutils and the compiler do.
+        AC_LINK_IFELSE([__thread int a; int b; int main() { return a = b; }],
+-		      [gcc_cv_have_tls=yes], [gcc_cv_have_tls=no])
++	 [chktls_save_LDFLAGS="$LDFLAGS"
++	  dnl Shared library options may depend on the host; this check
++	  dnl is only known to be needed for GNU/Linux.
++	  case $host in
++	    *-*-linux*)
++	      LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
++	      ;;
++	  esac
++	  chktls_save_CFLAGS="$CFLAGS"
++	  CFLAGS="-fPIC $CFLAGS"
++	  dnl If -shared works, test if TLS works in a shared library.
++	  AC_LINK_IFELSE([int f() { return 0; }],
++	    [AC_LINK_IFELSE([__thread int a; int b; int f() { return a = b; }],
++	      [gcc_cv_have_tls=yes],
++	      [gcc_cv_have_tls=no])],
++	    [gcc_cv_have_tls=yes])
++	  CFLAGS="$chktls_save_CFLAGS"
++	  LDFLAGS="$chktls_save_LDFLAGS"], [gcc_cv_have_tls=no])
+       ]
+     )])
+   if test "$enable_tls $gcc_cv_have_tls" = "yes yes"; then
+--- a/src/configure
++++ b/src/configure
+@@ -2277,7 +2277,7 @@
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss target-rda ${libgcj}"
+     ;;
+   *-*-vxworks*)
+-    noconfigdirs="$noconfigdirs target-newlib target-libgloss target-libiberty target-libstdc++-v3 ${libgcj}"
++    noconfigdirs="$noconfigdirs target-newlib target-libgloss target-libiberty ${libgcj}"
+     ;;
+   alpha*-dec-osf*)
+     # ld works, but does not support shared libraries.
+@@ -2338,10 +2338,17 @@
+     esac
+     libgloss_dir=arm
+     ;;
++  arm*-*-nucleuseabi)
++    noconfigdirs="$noconfigdirs ${libgcj}"
++    libgloss_dir=arm
++    ;;
+   arm*-*-symbianelf*)
+     noconfigdirs="$noconfigdirs ${libgcj} target-libiberty"
+     libgloss_dir=arm
+     ;;
++  arm*-*-mingw32*)
++    noconfigdirs="$noconfigdirs target-libgloss ${libgcj} target-libiberty"
++    ;;
+   arm-*-pe*)
+     noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+     ;;
+--- a/src/configure.ac
++++ b/src/configure.ac
+@@ -512,7 +512,7 @@
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss target-rda ${libgcj}"
+     ;;
+   *-*-vxworks*)
+-    noconfigdirs="$noconfigdirs target-newlib target-libgloss target-libiberty target-libstdc++-v3 ${libgcj}"
++    noconfigdirs="$noconfigdirs target-newlib target-libgloss target-libiberty ${libgcj}"
+     ;;
+   alpha*-dec-osf*)
+     # ld works, but does not support shared libraries.
+@@ -573,10 +573,17 @@
+     esac
+     libgloss_dir=arm
+     ;;
++  arm*-*-nucleuseabi)
++    noconfigdirs="$noconfigdirs ${libgcj}"
++    libgloss_dir=arm
++    ;;
+   arm*-*-symbianelf*)
+     noconfigdirs="$noconfigdirs ${libgcj} target-libiberty"
+     libgloss_dir=arm
+     ;;
++  arm*-*-mingw32*)
++    noconfigdirs="$noconfigdirs target-libgloss ${libgcj} target-libiberty"
++    ;;
+   arm-*-pe*)
+     noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+     ;;
+--- a/src/fixincludes/fixincl.tpl
++++ b/src/fixincludes/fixincl.tpl
+@@ -38,7 +38,7 @@
+ #ifndef SED_PROGRAM
+ #define SED_PROGRAM "/usr/bin/sed"
+ #endif
+-static char const sed_cmd_z[] = SED_PROGRAM;
++static char const sed_cmd_z[] = "sed";
+ [=
+ 
+ FOR fix =]
+--- a/src/fixincludes/inclhack.def
++++ b/src/fixincludes/inclhack.def
+@@ -1302,6 +1302,43 @@
+ };
+ 
+ 
++/* glibc's bits/string2.h (before 2004-05-26) generates bogus
++   -Wstrict-aliasing warnings from calls to memset.  */
++fix = {
++    hackname  = glibc_string2_memset;
++    files     = "bits/string2.h";
++    select    = "#ifndef _HAVE_STRING_ARCH_memset\n# if _STRING_ARCH_unaligned";
++    c_fix     = format;
++    c_fix_arg = "%0 && 0";
++    test_text = "#ifndef _HAVE_STRING_ARCH_memset\n"
++                "# if _STRING_ARCH_unaligned\n"
++                "# endif\n"
++                "#endif\n";
++};
++
++
++/* Some versions of glibc have a version of bits/string2.h that
++   produces "value computed is not used" warnings from strncpy; fix
++   this definition by using __builtin_strncpy instead as in newer
++   versions.  */
++fix = {
++    hackname  = glibc_strncpy;
++    files     = bits/string2.h;
++    bypass    = "__builtin_strncpy";
++    c_fix     = format;
++    c_fix_arg = "#  define strncpy(dest, src, n) __builtin_strncpy (dest, src, n)";
++    c_fix_arg = "#  define strncpy([^\n]*\\\\\n)*[^\n]*";
++    test_text = <<-EOT
++	#  define strncpy(dest, src, n) \
++	  (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n)      \\
++			  ? (strlen (src) + 1 >= ((size_t) (n))			      \\
++			     ? (char *) memcpy (dest, src, n)			      \\
++			     : strncpy (dest, src, n))				      \\
++			  : strncpy (dest, src, n)))
++	EOT;
++
++};
++
+ /*
+  * Fix these files to use the types we think they should for
+  * ptrdiff_t, size_t, and wchar_t.
+@@ -3006,24 +3043,32 @@
+ };
+ 
+ /*
+- * Sun Solaris defines PTHREAD_MUTEX_INITIALIZER with a trailing
+- * "0" for the last field of the pthread_mutex_t structure, which is
+- * of type upad64_t, which itself is typedef'd to int64_t, but with
+- * __STDC__ defined (e.g. by -ansi) it is a union. So change the
+- * initializer to "{0}" instead
++ * Sun Solaris defines the last field of the pthread_mutex_t structure
++ * to have type upad64_t.  Whether upad64_t is an integer type or a
++ * union depends on whether or not the headers believe that a 64-bit
++ * integer type is available.  But, PTHREAD_MUTEX_INITIALIZER is not
++ * appropriately conditionalized; it always uses "0", and never "{0}".
++ * In order to avoid warnings/errors from the compiler, we must make
++ * the initializer use braces where appropriate.
++ *
++ * Prior to Solaris 10, if __STDC__ is 1 (as when compiling with
++ * -ansi), the definition would be a union.  Beginning with Solaris
++ * 10, the headers check for __GNUC__, and will never use a union with
++ * GCC.  We check /usr/include/sys/types.h to see if it checks for
++ * __STDC__.
++ *
++ * A "mach" test for Solaris 10 is undesirable because we want to
++ * allow a compiler built for Solaris <10 to be used on Solaris >=10,
++ * but the installed version of fixincludes hard-wires the target
++ * machine to the configure-time $target, rather than automatically
++ * determining it at installation time.
+  */
+ fix = {
+     hackname = solaris_mutex_init_2;
+     select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
+     files = pthread.h;
+-    /*
+-     * On Solaris 10, this fix is unnecessary because upad64_t is
+-     * always defined correctly regardless of the definition of the
+-     * __STDC__ macro.  The first "mach" pattern matches up to
+-     * solaris9.  The second "mach" pattern will not match any two (or
+-     * more) digit solaris version, but it will match e.g. 2.5.1.
+-     */
+-    mach = '*-*-solaris2.[0-9]', '*-*-solaris2.[0-9][!0-9]*';
++    mach = '*-*-solaris*';
++    test = " -n \"`grep '#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)' \\`dirname $file\\`/sys/types.h`\"";
+     c_fix = format;
+     c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n"
+                 "%0\n"
+@@ -3034,6 +3079,7 @@
+                 "(|/\*.*\*/[ \t]*\\\\\n[ \t]*)\\{.*)"
+                 ",[ \t]*0\\}" "(|[ \t].*)$";
+     test_text =
++    "`mkdir -p sys; echo '#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)' >> sys/types.h`"
+     '#ident "@(#)pthread.h  1.26  98/04/12 SMI"'"\n"
+     "#define PTHREAD_MUTEX_INITIALIZER\t{{{0},0}, {{{0}}}, 0}\n"
+     "#define PTHREAD_COND_INITIALIZER\t{{{0}, 0}, 0}\t/* DEFAULTCV */\n"
+@@ -3045,17 +3091,14 @@
+ 
+ 
+ /*
+- * Sun Solaris defines PTHREAD_RWLOCK_INITIALIZER with a "0" for some
+- *  fields of the pthread_rwlock_t structure, which are of type
+- *  upad64_t, which itself is typedef'd to int64_t, but with __STDC__
+- *  defined (e.g. by -ansi) it is a union. So change the initializer
+- *  to "{0}" instead.
++ * See comments for solaris_mutex_init_2 re. upad64_t.
+  */
+ fix = {
+     hackname = solaris_rwlock_init_1;
+     select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
+     files = pthread.h;
+     mach = '*-*-solaris*';
++    test = " -n \"`grep '#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)' \\`dirname $file\\`/sys/types.h`\"";
+     c_fix = format;
+     c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n"
+                 "%0\n"
+@@ -3091,24 +3134,14 @@
+ 
+ 
+ /*
+- * Sun Solaris defines PTHREAD_ONCE_INIT with a "0" for some
+- *  fields of the pthread_once_t structure, which are of type
+- *  upad64_t, which itself is typedef'd to int64_t, but with __STDC__
+- *  defined (e.g. by -ansi) it is a union. So change the initializer
+- *  to "{0}" instead.  This test relies on solaris_once_init_1.
++ * See comments for solaris_mutex_init_2 re. upad64_t.
+  */
+ fix = {
+     hackname = solaris_once_init_2;
+     select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
+     files = pthread.h;
+-    /*
+-     * On Solaris 10, this fix is unnecessary because upad64_t is
+-     * always defined correctly regardless of the definition of the
+-     * __STDC__ macro.  The first "mach" pattern matches up to
+-     * solaris9.  The second "mach" pattern will not match any two (or
+-     * more) digit solaris version, but it will match e.g. 2.5.1.
+-     */
+-    mach = '*-*-solaris2.[0-9]', '*-*-solaris2.[0-9][!0-9]*';
++    mach = '*-*-solaris*';
++    test = " -n \"`grep '#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)' \\`dirname $file\\`/sys/types.h`\"";
+     c_fix = format;
+     c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n"
+                 "%0\n"
+--- a/src/fixincludes/server.c
++++ b/src/fixincludes/server.c
+@@ -266,7 +266,7 @@
+   /*  Make sure the process will pay attention to us, send the
+      supplied command, and then have it output a special marker that
+      we can find.  */
+-  fprintf (server_pair.pf_write, "cd %s\n%s\n\necho\necho %s\n",
++  fprintf (server_pair.pf_write, "cd '%s'\n%s\n\necho\necho %s\n",
+            p_cur_dir, pz_cmd, z_done);
+   fflush (server_pair.pf_write);
+ 
+--- a/src/fixincludes/tests/base/bits/string2.h
++++ b/src/fixincludes/tests/base/bits/string2.h
+@@ -16,3 +16,17 @@
+ #  define __STRING_INLINE extern __inline
+ # endif
+ #endif  /* GLIBC_C99_INLINE_3_CHECK */
++
++
++#if defined( GLIBC_STRING2_MEMSET_CHECK )
++#ifndef _HAVE_STRING_ARCH_memset
++# if _STRING_ARCH_unaligned && 0
++# endif
++#endif
++
++#endif  /* GLIBC_STRING2_MEMSET_CHECK */
++
++
++#if defined( GLIBC_STRNCPY_CHECK )
++#  define strncpy(dest, src, n) __builtin_strncpy (dest, src, n)
++#endif  /* GLIBC_STRNCPY_CHECK */
+--- a/src/fixincludes/tests/base/sys/types.h
++++ b/src/fixincludes/tests/base/sys/types.h
+@@ -28,3 +28,4 @@
+ 
+ #endif /* ushort_t */
+ #endif  /* GNU_TYPES_CHECK */
++#if  !defined(__STRICT_ANSI__) && !defined(_NO_LONGLONG)
+--- a/src/gcc/LINARO-VERSION
++++ b/src/gcc/LINARO-VERSION
+@@ -0,0 +1 @@
++4.4-2011.02-0
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -327,6 +327,8 @@
+ # It also specifies -isystem ./include to find, e.g., stddef.h.
+ GCC_CFLAGS=$(CFLAGS_FOR_TARGET) $(INTERNAL_CFLAGS) $(T_CFLAGS) $(LOOSE_WARN) -Wold-style-definition $($@-warn) -isystem ./include $(TCFLAGS)
+ 
++EGLIBC_CONFIGS = @EGLIBC_CONFIGS@
++
+ # ---------------------------------------------------
+ # Programs which produce files for the target machine
+ # ---------------------------------------------------
+@@ -408,6 +410,9 @@
+ 
+ xmake_file=@xmake_file@
+ tmake_file=@tmake_file@
++TM_ENDIAN_CONFIG=@TM_ENDIAN_CONFIG@
++TM_MULTILIB_CONFIG=@TM_MULTILIB_CONFIG@
++TM_MULTILIB_EXCEPTIONS_CONFIG=@TM_MULTILIB_EXCEPTIONS_CONFIG@
+ out_file=$(srcdir)/config/@out_file@
+ out_object_file=@out_object_file@
+ md_file=$(srcdir)/config/@md_file@
+@@ -1249,6 +1254,7 @@
+ 	tree-ssa-loop-manip.o \
+ 	tree-ssa-loop-niter.o \
+ 	tree-ssa-loop-prefetch.o \
++	tree-ssa-loop-promote.o \
+ 	tree-ssa-loop-unswitch.o \
+ 	tree-ssa-loop.o \
+ 	tree-ssa-math-opts.o \
+@@ -1258,6 +1264,7 @@
+ 	tree-ssa-pre.o \
+ 	tree-ssa-propagate.o \
+ 	tree-ssa-reassoc.o \
++	tree-ssa-remove-local-statics.o \
+ 	tree-ssa-sccvn.o \
+ 	tree-ssa-sink.o \
+ 	tree-ssa-structalias.o \
+@@ -1674,7 +1681,7 @@
+ 	$(MACHMODE_H) $(FPBIT) $(DPBIT) $(TPBIT) $(LIB2ADD) \
+ 	$(LIB2ADD_ST) $(LIB2ADDEH) $(srcdir)/emutls.c gcov-iov.h $(SFP_MACHINE)
+ 
+-libgcc.mvars: config.status Makefile $(LIB2ADD) $(LIB2ADD_ST) specs \
++libgcc.mvars: config.status Makefile $(LIB2ADD) $(LIB2ADD_ST) specs $(tmake_file) \
+ 		xgcc$(exeext)
+ 	: > tmp-libgcc.mvars
+ 	echo LIB1ASMFUNCS = '$(LIB1ASMFUNCS)' >> tmp-libgcc.mvars
+@@ -1728,7 +1735,7 @@
+ # driver program needs to select the library directory based on the
+ # switches.
+ multilib.h: s-mlib; @true
+-s-mlib: $(srcdir)/genmultilib Makefile
++s-mlib: $(srcdir)/genmultilib Makefile $(tmakefile)
+ 	if test @enable_multilib@ = yes \
+ 	   || test -n "$(MULTILIB_OSDIRNAMES)"; then \
+ 	  $(SHELL) $(srcdir)/genmultilib \
+@@ -1739,10 +1746,11 @@
+ 	    "$(MULTILIB_EXTRA_OPTS)" \
+ 	    "$(MULTILIB_EXCLUSIONS)" \
+ 	    "$(MULTILIB_OSDIRNAMES)" \
++	    "$(MULTILIB_ALIASES)" \
+ 	    "@enable_multilib@" \
+ 	    > tmp-mlib.h; \
+ 	else \
+-	  $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' no \
++	  $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' '' no \
+ 	    > tmp-mlib.h; \
+ 	fi
+ 	$(SHELL) $(srcdir)/../move-if-change tmp-mlib.h multilib.h
+@@ -1816,7 +1824,7 @@
+ 
+ incpath.o: incpath.c incpath.h $(CONFIG_H) $(SYSTEM_H) $(CPPLIB_H) \
+ 		intl.h prefix.h coretypes.h $(TM_H) cppdefault.h $(TARGET_H) \
+-		$(MACHMODE_H)
++		$(MACHMODE_H) $(FLAGS_H) toplev.h
+ 
+ c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
+     $(RTL_H) $(C_TREE_H) $(GGC_H) $(TARGET_H) $(FLAGS_H) $(FUNCTION_H) output.h \
+@@ -1900,7 +1908,7 @@
+         $(TREE_H) $(C_PRAGMA_H) $(FLAGS_H) $(TOPLEV_H) langhooks.h		\
+         $(TREE_INLINE_H) $(DIAGNOSTIC_H) intl.h debug.h $(C_COMMON_H)	\
+         opts.h options.h $(MKDEPS_H) incpath.h cppdefault.h $(TARGET_H) \
+-	$(TM_P_H) $(VARRAY_H)
++	$(TM_P_H) $(VARRAY_H) $(C_TREE_H)
+ 	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) \
+ 		$< $(OUTPUT_OPTION) @TARGET_SYSTEM_ROOT_DEFINE@
+ 
+@@ -1953,7 +1961,8 @@
+   -DTOOLDIR_BASE_PREFIX=\"$(libsubdir_to_prefix)$(prefix_to_exec_prefix)\" \
+   @TARGET_SYSTEM_ROOT_DEFINE@ \
+   $(VALGRIND_DRIVER_DEFINES) \
+-  `test "X$${SHLIB_LINK}" = "X" || test "@enable_shared@" != "yes" || echo "-DENABLE_SHARED_LIBGCC"`
++  `test "X$${SHLIB_LINK}" = "X" || test "@enable_shared@" != "yes" || echo "-DENABLE_SHARED_LIBGCC"` \
++  -DCONFIGURE_SPECS="\"@CONFIGURE_SPECS@\""
+ 
+ gcc.o: gcc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) intl.h multilib.h \
+     Makefile $(lang_specs_files) specs.h prefix.h $(GCC_H) $(FLAGS_H) \
+@@ -2058,7 +2067,7 @@
+    all-tree.def $(FLAGS_H) $(FUNCTION_H) $(PARAMS_H) \
+    $(TOPLEV_H) $(GGC_H) $(HASHTAB_H) $(TARGET_H) output.h $(TM_P_H) langhooks.h \
+    $(REAL_H) gt-tree.h tree-iterator.h $(BASIC_BLOCK_H) $(TREE_FLOW_H) \
+-   $(OBSTACK_H) pointer-set.h fixed-value.h
++   $(OBSTACK_H) pointer-set.h fixed-value.h intl.h
+ tree-dump.o: tree-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+    $(TREE_H) langhooks.h $(TOPLEV_H) $(SPLAY_TREE_H) $(TREE_DUMP_H) \
+    tree-iterator.h tree-pass.h $(DIAGNOSTIC_H) $(REAL_H) fixed-value.h
+@@ -2176,6 +2185,9 @@
+    alloc-pool.h $(BASIC_BLOCK_H) $(BITMAP_H) $(HASHTAB_H) $(GIMPLE_H) \
+    $(TREE_INLINE_H) tree-iterator.h tree-ssa-sccvn.h $(PARAMS_H) \
+    $(DBGCNT_H)
++tree-ssa-remove-local-statics.o: tree-ssa-remove-local-statics.c \
++   coretypes.h $(CONFIG_H) $(SYSTEM_H) $(BASIC_BLOCK_H) tree.h tree-pass.h \
++   $(TM_H) $(HASHTAB_H) $(BASIC_BLOCK_H)
+ tree-ssa-sccvn.o : tree-ssa-sccvn.c $(TREE_FLOW_H) $(CONFIG_H) \
+    $(SYSTEM_H) $(TREE_H) $(GGC_H) $(DIAGNOSTIC_H) $(TIMEVAR_H) $(FIBHEAP_H) \
+    $(TM_H) coretypes.h $(TREE_DUMP_H) tree-pass.h $(FLAGS_H) $(CFGLOOP_H) \
+@@ -2271,6 +2283,12 @@
+    $(CFGLOOP_H) $(PARAMS_H) langhooks.h $(BASIC_BLOCK_H) hard-reg-set.h \
+    tree-chrec.h $(TOPLEV_H) langhooks.h $(TREE_INLINE_H) $(TREE_DATA_REF_H) \
+    $(OPTABS_H)
++tree-ssa-loop-promote.o: tree-ssa-loop-promote.c \
++   coretypes.h $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TOPLEV_H) \
++   $(RTL_H) $(TM_P_H) hard-reg-set.h $(OBSTACK_H) $(BASIC_BLOCK_H) \
++   pointer-set.h intl.h $(TREE_H) $(GIMPLE_H) $(HASHTAB_H) $(DIAGNOSTIC_H) \
++   $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) $(FLAGS_H) $(TIMEVAR_H) \
++   tree-pass.h $(TM_H)
+ tree-predcom.o: tree-predcom.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(TM_P_H) \
+    $(CFGLOOP_H) $(TREE_FLOW_H) $(GGC_H) $(TREE_DATA_REF_H) $(SCEV_H) \
+    $(PARAMS_H) $(DIAGNOSTIC_H) tree-pass.h $(TM_H) coretypes.h tree-affine.h \
+@@ -2865,7 +2883,7 @@
+    $(RTL_H) $(REAL_H) $(FLAGS_H) $(EXPR_H) $(OPTABS_H) reload.h $(REGS_H) \
+    hard-reg-set.h insn-config.h $(BASIC_BLOCK_H) $(RECOG_H) output.h \
+    $(FUNCTION_H) $(TOPLEV_H) cselib.h $(TM_P_H) except.h $(TREE_H) $(MACHMODE_H) \
+-   $(OBSTACK_H) $(TIMEVAR_H) tree-pass.h $(DF_H) $(DBGCNT_H)
++   $(OBSTACK_H) $(TIMEVAR_H) tree-pass.h addresses.h $(DF_H) $(DBGCNT_H)
+ postreload-gcse.o : postreload-gcse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+    $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \
+    $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) $(FUNCTION_H) output.h $(TOPLEV_H) \
+@@ -3582,7 +3600,7 @@
+ # be rebuilt.
+ 
+ # Build the include directories.
+-stmp-int-hdrs: $(STMP_FIXINC) $(USER_H) $(UNWIND_H) fixinc_list
++stmp-int-hdrs: $(STMP_FIXINC) $(USER_H) $(UNWIND_H)
+ # Copy in the headers provided with gcc.
+ # The sed command gets just the last file name component;
+ # this is necessary because VPATH could add a dirname.
+@@ -3601,21 +3619,23 @@
+ 	done
+ 	rm -f include/unwind.h
+ 	cp $(UNWIND_H) include/unwind.h
+-	set -e; for ml in `cat fixinc_list`; do \
+-	  sysroot_headers_suffix=`echo $${ml} | sed -e 's/;.*$$//'`; \
+-	  multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \
+-	  fix_dir=include-fixed$${multi_dir}; \
+-	  if $(LIMITS_H_TEST) ; then \
+-	    cat $(srcdir)/limitx.h $(srcdir)/glimits.h $(srcdir)/limity.h > tmp-xlimits.h; \
+-	  else \
+-	    cat $(srcdir)/glimits.h > tmp-xlimits.h; \
+-	  fi; \
+-	  $(mkinstalldirs) $${fix_dir}; \
+-	  chmod a+rx $${fix_dir} || true; \
+-	  rm -f $${fix_dir}/limits.h; \
+-	  mv tmp-xlimits.h $${fix_dir}/limits.h; \
+-	  chmod a+r $${fix_dir}/limits.h; \
+-	done
++	set -e; if [ -f fixinc_list ] ; then \
++	  for ml in `cat fixinc_list`; do \
++	    sysroot_headers_suffix=`echo $${ml} | sed -e 's/;.*$$//'`; \
++	    multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \
++	    fix_dir=include-fixed$${multi_dir}; \
++	    if $(LIMITS_H_TEST) ; then \
++	      cat $(srcdir)/limitx.h $(srcdir)/glimits.h $(srcdir)/limity.h > tmp-xlimits.h; \
++	    else \
++	      cat $(srcdir)/glimits.h > tmp-xlimits.h; \
++	    fi; \
++	    $(mkinstalldirs) $${fix_dir}; \
++	    chmod a+rx $${fix_dir} || true; \
++	    rm -f $${fix_dir}/limits.h; \
++	    mv tmp-xlimits.h $${fix_dir}/limits.h; \
++	    chmod a+r $${fix_dir}/limits.h; \
++	  done; \
++	fi
+ # Install the README
+ 	rm -f include-fixed/README
+ 	cp $(srcdir)/../fixincludes/README-fixinc include-fixed/README
+@@ -3918,8 +3938,7 @@
+ 
+ # List the directories or single hmtl files which are installed by
+ # install-html. The lang.html file triggers language fragments to build
+-# html documentation. Installing language fragment documentation is not
+-# yet supported.
++# html documentation.
+ HTMLS_INSTALL=$(build_htmldir)/cpp $(build_htmldir)/gcc \
+        $(build_htmldir)/gccinstall $(build_htmldir)/gccint \
+        $(build_htmldir)/cppinternals
+@@ -4222,7 +4241,7 @@
+ 
+ html__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+ 
+-install-html: $(HTMLS_BUILD)
++install-html: $(HTMLS_BUILD) lang.install-html
+ 	@$(NORMAL_INSTALL)
+ 	test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)"
+ 	@list='$(HTMLS_INSTALL)'; for p in $$list; do \
+@@ -4340,16 +4359,18 @@
+ 
+ # Install supporting files for fixincludes to be run later.
+ install-mkheaders: stmp-int-hdrs $(STMP_FIXPROTO) install-itoolsdirs \
+-  macro_list fixinc_list
++  macro_list
+ 	$(INSTALL_DATA) $(srcdir)/gsyslimits.h \
+ 	  $(DESTDIR)$(itoolsdatadir)/gsyslimits.h
+ 	$(INSTALL_DATA) macro_list $(DESTDIR)$(itoolsdatadir)/macro_list
+-	$(INSTALL_DATA) fixinc_list $(DESTDIR)$(itoolsdatadir)/fixinc_list
+-	set -e; for ml in `cat fixinc_list`; do \
+-	  multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \
+-	  $(mkinstalldirs) $(DESTDIR)$(itoolsdatadir)/include$${multi_dir}; \
+-	  $(INSTALL_DATA) include-fixed$${multidir}/limits.h $(DESTDIR)$(itoolsdatadir)/include$${multi_dir}/limits.h; \
+-	done
++	set -e; if [ -f fixinc_list ] ; then \
++	  $(INSTALL_DATA) fixinc_list $(DESTDIR)$(itoolsdatadir)/fixinc_list; \
++	  for ml in `cat fixinc_list`; do \
++	    multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \
++	    $(mkinstalldirs) $(DESTDIR)$(itoolsdatadir)/include$${multi_dir}; \
++	    $(INSTALL_DATA) include-fixed$${multidir}/limits.h $(DESTDIR)$(itoolsdatadir)/include$${multi_dir}/limits.h; \
++	  done; \
++	fi
+ 	$(INSTALL_SCRIPT) $(srcdir)/../mkinstalldirs \
+ 		$(DESTDIR)$(itoolsdir)/mkinstalldirs ; \
+ 	if [ x$(STMP_FIXPROTO) != x ] ; then \
+--- a/src/gcc/ada/gcc-interface/Make-lang.in
++++ b/src/gcc/ada/gcc-interface/Make-lang.in
+@@ -23,7 +23,7 @@
+ #
+ # foo.all.cross, foo.start.encap, foo.rest.encap,
+ # foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
+-# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
++# foo.install-html, foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
+ # foo.mostlyclean, foo.clean, foo.distclean,
+ # foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
+ #
+@@ -450,6 +450,8 @@
+ 
+ ada.html:
+ 
++ada.install-html:
++
+ doc/gnat_ugn.dvi: doc/gnat_ugn.texi $(gcc_docdir)/include/fdl.texi	\
+ 	$(gcc_docdir)/include/gcc-common.texi gcc-vers.texi
+ 	$(TEXI2DVI) -c -I $(abs_docdir)/include -o $@ $<
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -1,5 +1,5 @@
+ # Makefile for GNU Ada Compiler (GNAT).
+-#   Copyright (C) 1994-2009 Free Software Foundation, Inc.
++#   Copyright (C) 1994-2010 Free Software Foundation, Inc.
+ 
+ #This file is part of GCC.
+ 
+@@ -1533,6 +1533,41 @@
+   LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+ 
++ifeq ($(strip $(filter-out arm% linux-gnueabi,$(arch) $(osys)-$(word 4,$(targ)))),)
++  LIBGNAT_TARGET_PAIRS = \
++  a-intnam.ads<a-intnam-linux.ads \
++  s-inmaop.adb<s-inmaop-posix.adb \
++  s-intman.adb<s-intman-posix.adb \
++  s-linux.ads<s-linux.ads \
++  s-osinte.adb<s-osinte-posix.adb \
++  s-osinte.ads<s-osinte-linux.ads \
++  s-osprim.adb<s-osprim-posix.adb \
++  s-taprop.adb<s-taprop-linux.adb \
++  s-tasinf.ads<s-tasinf-linux.ads \
++  s-tasinf.adb<s-tasinf-linux.adb \
++  s-taspri.ads<s-taspri-posix-noaltstack.ads \
++  s-tpopsp.adb<s-tpopsp-posix-foreign.adb
++
++  ifeq ($(strip $(filter-out arm%b,$(arch))),)
++    LIBGNAT_TARGET_PAIRS += \
++    system.ads<system-linux-armeb.ads
++  else
++    LIBGNAT_TARGET_PAIRS += \
++    system.ads<system-linux-armel.ads
++  endif
++
++  TOOLS_TARGET_PAIRS =  \
++    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++    indepsw.adb<indepsw-gnu.adb
++
++  EXTRA_GNATRTL_TASKING_OBJS=s-linux.o
++  EH_MECHANISM=
++  THREADSLIB = -lpthread
++  GNATLIB_SHARED = gnatlib-shared-dual
++  GMEM_LIB = gmemlib
++  LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
+ ifeq ($(strip $(filter-out sparc% linux%,$(arch) $(osys))),)
+   LIBGNAT_TARGET_PAIRS_COMMON = \
+   a-intnam.ads<a-intnam-linux.ads \
+--- a/src/gcc/ada/system-linux-armeb.ads
++++ b/src/gcc/ada/system-linux-armeb.ads
+@@ -0,0 +1,153 @@
++------------------------------------------------------------------------------
++--                                                                          --
++--                        GNAT RUN-TIME COMPONENTS                          --
++--                                                                          --
++--                               S Y S T E M                                --
++--                                                                          --
++--                                 S p e c                                  --
++--                        (GNU-Linux/ARMEB Version)                         --
++--                                                                          --
++--          Copyright (C) 1992-2010, Free Software Foundation, Inc.         --
++--                                                                          --
++-- This specification is derived from the Ada Reference Manual for use with --
++-- GNAT. The copyright notice above, and the license provisions that follow --
++-- apply solely to the  contents of the part following the private keyword. --
++--                                                                          --
++-- GNAT is free software;  you can  redistribute it  and/or modify it under --
++-- terms of the  GNU General Public License as published  by the Free Soft- --
++-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
++-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
++-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
++-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
++--                                                                          --
++-- As a special exception under Section 7 of GPL version 3, you are granted --
++-- additional permissions described in the GCC Runtime Library Exception,   --
++-- version 3.1, as published by the Free Software Foundation.               --
++--                                                                          --
++-- You should have received a copy of the GNU General Public License and    --
++-- a copy of the GCC Runtime Library Exception along with this program;     --
++-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
++-- <http://www.gnu.org/licenses/>.                                          --
++--                                                                          --
++-- GNAT was originally developed  by the GNAT team at  New York University. --
++-- Extensive contributions were provided by Ada Core Technologies Inc.      --
++--                                                                          --
++------------------------------------------------------------------------------
++
++package System is
++   pragma Pure;
++   --  Note that we take advantage of the implementation permission to make
++   --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
++   --  2005, this is Pure in any case (AI-362).
++
++   type Name is (SYSTEM_NAME_GNAT);
++   System_Name : constant Name := SYSTEM_NAME_GNAT;
++
++   --  System-Dependent Named Numbers
++
++   Min_Int               : constant := Long_Long_Integer'First;
++   Max_Int               : constant := Long_Long_Integer'Last;
++
++   Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
++   Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
++
++   Max_Base_Digits       : constant := Long_Long_Float'Digits;
++   Max_Digits            : constant := Long_Long_Float'Digits;
++
++   Max_Mantissa          : constant := 63;
++   Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
++
++   Tick                  : constant := 0.000_001;
++
++   --  Storage-related Declarations
++
++   type Address is private;
++   pragma Preelaborable_Initialization (Address);
++   Null_Address : constant Address;
++
++   Storage_Unit : constant := 8;
++   Word_Size    : constant := 32;
++   Memory_Size  : constant := 2 ** 32;
++
++   --  Address comparison
++
++   function "<"  (Left, Right : Address) return Boolean;
++   function "<=" (Left, Right : Address) return Boolean;
++   function ">"  (Left, Right : Address) return Boolean;
++   function ">=" (Left, Right : Address) return Boolean;
++   function "="  (Left, Right : Address) return Boolean;
++
++   pragma Import (Intrinsic, "<");
++   pragma Import (Intrinsic, "<=");
++   pragma Import (Intrinsic, ">");
++   pragma Import (Intrinsic, ">=");
++   pragma Import (Intrinsic, "=");
++
++   --  Other System-Dependent Declarations
++
++   type Bit_Order is (High_Order_First, Low_Order_First);
++   Default_Bit_Order : constant Bit_Order := High_Order_First;
++   pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
++
++   --  Priority-related Declarations (RM D.1)
++
++   --  0 .. 98 corresponds to the system priority range 1 .. 99.
++   --
++   --  If the scheduling policy is SCHED_FIFO or SCHED_RR the runtime makes use
++   --  of the entire range provided by the system.
++   --
++   --  If the scheduling policy is SCHED_OTHER the only valid system priority
++   --  is 1 and other values are simply ignored.
++
++   Max_Priority           : constant Positive := 97;
++   Max_Interrupt_Priority : constant Positive := 98;
++
++   subtype Any_Priority       is Integer      range  0 .. 98;
++   subtype Priority           is Any_Priority range  0 .. 97;
++   subtype Interrupt_Priority is Any_Priority range 98 .. 98;
++
++   Default_Priority : constant Priority := 48;
++
++private
++
++   type Address is mod Memory_Size;
++   Null_Address : constant Address := 0;
++
++   --------------------------------------
++   -- System Implementation Parameters --
++   --------------------------------------
++
++   --  These parameters provide information about the target that is used
++   --  by the compiler. They are in the private part of System, where they
++   --  can be accessed using the special circuitry in the Targparm unit
++   --  whose source should be consulted for more detailed descriptions
++   --  of the individual switch values.
++
++   Backend_Divide_Checks     : constant Boolean := False;
++   Backend_Overflow_Checks   : constant Boolean := False;
++   Command_Line_Args         : constant Boolean := True;
++   Configurable_Run_Time     : constant Boolean := False;
++   Denorm                    : constant Boolean := True;
++   Duration_32_Bits          : constant Boolean := False;
++   Exit_Status_Supported     : constant Boolean := True;
++   Fractional_Fixed_Ops      : constant Boolean := False;
++   Frontend_Layout           : constant Boolean := False;
++   Machine_Overflows         : constant Boolean := False;
++   Machine_Rounds            : constant Boolean := True;
++   Preallocated_Stacks       : constant Boolean := False;
++   Signed_Zeros              : constant Boolean := True;
++   Stack_Check_Default       : constant Boolean := False;
++   Stack_Check_Probes        : constant Boolean := True;
++   Stack_Check_Limits        : constant Boolean := False;
++   Support_64_Bit_Divides    : constant Boolean := True;
++   Support_Aggregates        : constant Boolean := True;
++   Support_Composite_Assign  : constant Boolean := True;
++   Support_Composite_Compare : constant Boolean := True;
++   Support_Long_Shifts       : constant Boolean := True;
++   Always_Compatible_Rep     : constant Boolean := False;
++   Suppress_Standard_Library : constant Boolean := False;
++   Use_Ada_Main_Program_Name : constant Boolean := False;
++   ZCX_By_Default            : constant Boolean := False;
++   GCC_ZCX_Support           : constant Boolean := False;
++
++end System;
+--- a/src/gcc/ada/system-linux-armel.ads
++++ b/src/gcc/ada/system-linux-armel.ads
+@@ -0,0 +1,153 @@
++------------------------------------------------------------------------------
++--                                                                          --
++--                        GNAT RUN-TIME COMPONENTS                          --
++--                                                                          --
++--                               S Y S T E M                                --
++--                                                                          --
++--                                 S p e c                                  --
++--                        (GNU-Linux/ARMEL Version)                         --
++--                                                                          --
++--          Copyright (C) 1992-2010, Free Software Foundation, Inc.         --
++--                                                                          --
++-- This specification is derived from the Ada Reference Manual for use with --
++-- GNAT. The copyright notice above, and the license provisions that follow --
++-- apply solely to the  contents of the part following the private keyword. --
++--                                                                          --
++-- GNAT is free software;  you can  redistribute it  and/or modify it under --
++-- terms of the  GNU General Public License as published  by the Free Soft- --
++-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
++-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
++-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
++-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
++--                                                                          --
++-- As a special exception under Section 7 of GPL version 3, you are granted --
++-- additional permissions described in the GCC Runtime Library Exception,   --
++-- version 3.1, as published by the Free Software Foundation.               --
++--                                                                          --
++-- You should have received a copy of the GNU General Public License and    --
++-- a copy of the GCC Runtime Library Exception along with this program;     --
++-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
++-- <http://www.gnu.org/licenses/>.                                          --
++--                                                                          --
++-- GNAT was originally developed  by the GNAT team at  New York University. --
++-- Extensive contributions were provided by Ada Core Technologies Inc.      --
++--                                                                          --
++------------------------------------------------------------------------------
++
++package System is
++   pragma Pure;
++   --  Note that we take advantage of the implementation permission to make
++   --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
++   --  2005, this is Pure in any case (AI-362).
++
++   type Name is (SYSTEM_NAME_GNAT);
++   System_Name : constant Name := SYSTEM_NAME_GNAT;
++
++   --  System-Dependent Named Numbers
++
++   Min_Int               : constant := Long_Long_Integer'First;
++   Max_Int               : constant := Long_Long_Integer'Last;
++
++   Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
++   Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
++
++   Max_Base_Digits       : constant := Long_Long_Float'Digits;
++   Max_Digits            : constant := Long_Long_Float'Digits;
++
++   Max_Mantissa          : constant := 63;
++   Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
++
++   Tick                  : constant := 0.000_001;
++
++   --  Storage-related Declarations
++
++   type Address is private;
++   pragma Preelaborable_Initialization (Address);
++   Null_Address : constant Address;
++
++   Storage_Unit : constant := 8;
++   Word_Size    : constant := 32;
++   Memory_Size  : constant := 2 ** 32;
++
++   --  Address comparison
++
++   function "<"  (Left, Right : Address) return Boolean;
++   function "<=" (Left, Right : Address) return Boolean;
++   function ">"  (Left, Right : Address) return Boolean;
++   function ">=" (Left, Right : Address) return Boolean;
++   function "="  (Left, Right : Address) return Boolean;
++
++   pragma Import (Intrinsic, "<");
++   pragma Import (Intrinsic, "<=");
++   pragma Import (Intrinsic, ">");
++   pragma Import (Intrinsic, ">=");
++   pragma Import (Intrinsic, "=");
++
++   --  Other System-Dependent Declarations
++
++   type Bit_Order is (High_Order_First, Low_Order_First);
++   Default_Bit_Order : constant Bit_Order := Low_Order_First;
++   pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
++
++   --  Priority-related Declarations (RM D.1)
++
++   --  0 .. 98 corresponds to the system priority range 1 .. 99.
++   --
++   --  If the scheduling policy is SCHED_FIFO or SCHED_RR the runtime makes use
++   --  of the entire range provided by the system.
++   --
++   --  If the scheduling policy is SCHED_OTHER the only valid system priority
++   --  is 1 and other values are simply ignored.
++
++   Max_Priority           : constant Positive := 97;
++   Max_Interrupt_Priority : constant Positive := 98;
++
++   subtype Any_Priority       is Integer      range  0 .. 98;
++   subtype Priority           is Any_Priority range  0 .. 97;
++   subtype Interrupt_Priority is Any_Priority range 98 .. 98;
++
++   Default_Priority : constant Priority := 48;
++
++private
++
++   type Address is mod Memory_Size;
++   Null_Address : constant Address := 0;
++
++   --------------------------------------
++   -- System Implementation Parameters --
++   --------------------------------------
++
++   --  These parameters provide information about the target that is used
++   --  by the compiler. They are in the private part of System, where they
++   --  can be accessed using the special circuitry in the Targparm unit
++   --  whose source should be consulted for more detailed descriptions
++   --  of the individual switch values.
++
++   Backend_Divide_Checks     : constant Boolean := False;
++   Backend_Overflow_Checks   : constant Boolean := False;
++   Command_Line_Args         : constant Boolean := True;
++   Configurable_Run_Time     : constant Boolean := False;
++   Denorm                    : constant Boolean := True;
++   Duration_32_Bits          : constant Boolean := False;
++   Exit_Status_Supported     : constant Boolean := True;
++   Fractional_Fixed_Ops      : constant Boolean := False;
++   Frontend_Layout           : constant Boolean := False;
++   Machine_Overflows         : constant Boolean := False;
++   Machine_Rounds            : constant Boolean := True;
++   Preallocated_Stacks       : constant Boolean := False;
++   Signed_Zeros              : constant Boolean := True;
++   Stack_Check_Default       : constant Boolean := False;
++   Stack_Check_Probes        : constant Boolean := True;
++   Stack_Check_Limits        : constant Boolean := False;
++   Support_64_Bit_Divides    : constant Boolean := True;
++   Support_Aggregates        : constant Boolean := True;
++   Support_Composite_Assign  : constant Boolean := True;
++   Support_Composite_Compare : constant Boolean := True;
++   Support_Long_Shifts       : constant Boolean := True;
++   Always_Compatible_Rep     : constant Boolean := False;
++   Suppress_Standard_Library : constant Boolean := False;
++   Use_Ada_Main_Program_Name : constant Boolean := False;
++   ZCX_By_Default            : constant Boolean := False;
++   GCC_ZCX_Support           : constant Boolean := False;
++
++end System;
+--- a/src/gcc/addresses.h
++++ b/src/gcc/addresses.h
+@@ -78,3 +78,42 @@
+ 
+   return ok_for_base_p_1 (regno, mode, outer_code, index_code);
+ }
++
++/* Wrapper function to unify target macros MODE_INDEX_REG_CLASS and
++   INDEX_REG_CLASS.  Arguments as for the MODE_INDEX_REG_CLASS macro.  */
++
++static inline enum reg_class
++index_reg_class (enum machine_mode mode ATTRIBUTE_UNUSED)
++{
++#ifdef MODE_INDEX_REG_CLASS
++  return MODE_INDEX_REG_CLASS (mode);
++#else
++  return INDEX_REG_CLASS;
++#endif
++}
++
++/* Wrapper function to unify target macros REGNO_MODE_OK_FOR_INDEX_P
++   and REGNO_OK_FOR_INDEX_P.  Arguments as for the
++   REGNO_MODE_OK_FOR_INDEX_P macro.  */
++
++static inline bool
++ok_for_index_p_1 (unsigned regno, enum machine_mode mode ATTRIBUTE_UNUSED)
++{
++#ifdef REGNO_MODE_OK_FOR_INDEX_P
++  return REGNO_MODE_OK_FOR_INDEX_P (regno, mode);
++#else
++  return REGNO_OK_FOR_INDEX_P (regno);
++#endif
++}
++
++/* Wrapper around ok_for_index_p_1, for use after register allocation is
++   complete.  Arguments as for the called function.  */
++
++static inline bool
++regno_ok_for_index_p (unsigned regno, enum machine_mode mode)
++{
++  if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] >= 0)
++    regno = reg_renumber[regno];
++
++  return ok_for_index_p_1 (regno, mode);
++}
+--- a/src/gcc/basic-block.h
++++ b/src/gcc/basic-block.h
+@@ -900,6 +900,10 @@
+ 
+ /* In cfgcleanup.c.  */
+ extern bool cleanup_cfg (int);
++extern int flow_find_cross_jump (int, basic_block, basic_block, rtx *, rtx *);
++extern int flow_find_head_matching_sequence (int, basic_block, basic_block,
++					     rtx *, rtx *, int);
++
+ extern bool delete_unreachable_blocks (void);
+ 
+ extern bool mark_dfs_back_edges (void);
+--- a/src/gcc/c-common.c
++++ b/src/gcc/c-common.c
+@@ -33,7 +33,6 @@
+ #include "varray.h"
+ #include "expr.h"
+ #include "c-common.h"
+-#include "diagnostic.h"
+ #include "tm_p.h"
+ #include "obstack.h"
+ #include "cpplib.h"
+@@ -42,6 +41,7 @@
+ #include "tree-inline.h"
+ #include "c-tree.h"
+ #include "toplev.h"
++#include "diagnostic.h"
+ #include "tree-iterator.h"
+ #include "hashtab.h"
+ #include "tree-mudflap.h"
+@@ -497,6 +497,10 @@
+    This is a count, since unevaluated expressions can nest.  */
+ int skip_evaluation;
+ 
++/* Whether lexing has been completed, so subsequent preprocessor
++   errors should use the compiler's input_location.  */
++bool done_lexing = false;
++
+ /* Information about how a function name is generated.  */
+ struct fname_var_t
+ {
+@@ -1021,6 +1025,8 @@
+       if (!IS_EMPTY_STMT (stmts))
+ 	saved_function_name_decls
+ 	  = tree_cons (decl, stmts, saved_function_name_decls);
++      DECL_SOURCE_LOCATION (decl) = loc;
++
+       *fname_vars[ix].decl = decl;
+       input_location = saved_location;
+     }
+@@ -7511,6 +7517,68 @@
+ #undef catenate_messages
+ }
+ 
++/* Callback from cpp_error for PFILE to print diagnostics from the
++   preprocessor.  The diagnostic is of type LEVEL, at location
++   LOCATION unless this is after lexing and the compiler's location
++   should be used instead, with column number possibly overridden by
++   COLUMN_OVERRIDE if not zero; MSG is the translated message and AP
++   the arguments.  Returns true if a diagnostic was emitted, false
++   otherwise.  */
++
++bool
++c_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level,
++	     location_t location, unsigned int column_override,
++	     const char *msg, va_list *ap)
++{
++  diagnostic_info diagnostic;
++  diagnostic_t dlevel;
++  int save_warn_system_headers = warn_system_headers;
++  bool ret;
++
++  switch (level)
++    {
++    case CPP_DL_WARNING_SYSHDR:
++      if (flag_no_output)
++	return false;
++      warn_system_headers = 1;
++      /* Fall through.  */
++    case CPP_DL_WARNING:
++      if (flag_no_output)
++	return false;
++      dlevel = DK_WARNING;
++      break;
++    case CPP_DL_PEDWARN:
++      if (flag_no_output && !flag_pedantic_errors)
++	return false;
++      dlevel = DK_PEDWARN;
++      break;
++    case CPP_DL_ERROR:
++      dlevel = DK_ERROR;
++      break;
++    case CPP_DL_ICE:
++      dlevel = DK_ICE;
++      break;
++    case CPP_DL_NOTE:
++      dlevel = DK_NOTE;
++      break;
++    case CPP_DL_FATAL:
++      dlevel = DK_FATAL;
++      break;
++    default:
++      gcc_unreachable ();
++    }
++  if (done_lexing)
++    location = input_location;
++  diagnostic_set_info_translated (&diagnostic, msg, ap,
++				  location, dlevel);
++  if (column_override)
++    diagnostic_override_column (&diagnostic, column_override);
++  ret = report_diagnostic (&diagnostic);
++  if (level == CPP_DL_WARNING_SYSHDR)
++    warn_system_headers = save_warn_system_headers;
++  return ret;
++}
++
+ /* Walk a gimplified function and warn for functions whose return value is
+    ignored and attribute((warn_unused_result)) is set.  This is done before
+    inlining, so we don't have to worry about that.  */
+--- a/src/gcc/c-common.h
++++ b/src/gcc/c-common.h
+@@ -658,6 +658,11 @@
+ 
+ extern int skip_evaluation;
+ 
++/* Whether lexing has been completed, so subsequent preprocessor
++   errors should use the compiler's input_location.  */
++
++extern bool done_lexing;
++
+ /* C types are partitioned into three subsets: object, function, and
+    incomplete types.  */
+ #define C_TYPE_OBJECT_P(type) \
+--- a/src/gcc/c-convert.c
++++ b/src/gcc/c-convert.c
+@@ -70,6 +70,7 @@
+   tree e = expr;
+   enum tree_code code = TREE_CODE (type);
+   const char *invalid_conv_diag;
++  tree ret;
+ 
+   if (type == error_mark_node
+       || expr == error_mark_node
+@@ -85,6 +86,9 @@
+ 
+   if (type == TREE_TYPE (expr))
+     return expr;
++  ret = targetm.convert_to_type (type, expr);
++  if (ret)
++      return ret;
+ 
+   if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (TREE_TYPE (expr)))
+     return fold_convert (type, expr);
+--- a/src/gcc/c-decl.c
++++ b/src/gcc/c-decl.c
+@@ -4002,6 +4002,7 @@
+   bool bitfield = width != NULL;
+   tree element_type;
+   struct c_arg_info *arg_info = 0;
++  const char *errmsg;
+ 
+   if (decl_context == FUNCDEF)
+     funcdef_flag = true, decl_context = NORMAL;
+@@ -4539,6 +4540,12 @@
+ 		error ("%qs declared as function returning an array", name);
+ 		type = integer_type_node;
+ 	      }
++	    errmsg = targetm.invalid_return_type (type);
++	    if (errmsg)
++	      {
++		error (errmsg);
++		type = integer_type_node;
++	      }
+ 
+ 	    /* Construct the function type and go to the next
+ 	       inner layer of declarator.  */
+@@ -5052,6 +5059,7 @@
+     {
+       tree parm, type, typelt;
+       unsigned int parmno;
++      const char *errmsg;
+ 
+       /* If there is a parameter of incomplete type in a definition,
+ 	 this is an error.  In a declaration this is valid, and a
+@@ -5095,6 +5103,14 @@
+ 		}
+ 	    }
+ 
++	  errmsg = targetm.invalid_parameter_type (type);
++	  if (errmsg)
++	    {
++	      error (errmsg);
++	      TREE_VALUE (typelt) = error_mark_node;
++	      TREE_TYPE (parm) = error_mark_node;
++	    }
++
+ 	  if (DECL_NAME (parm) && TREE_USED (parm))
+ 	    warn_if_shadowing (parm);
+ 	}
+@@ -8087,7 +8103,7 @@
+ 
+   /* Don't waste time on further processing if -fsyntax-only or we've
+      encountered errors.  */
+-  if (flag_syntax_only || errorcount || sorrycount || cpp_errors (parse_in))
++  if (flag_syntax_only || errorcount || sorrycount)
+     return;
+ 
+   /* Close the external scope.  */
+--- a/src/gcc/c-opts.c
++++ b/src/gcc/c-opts.c
+@@ -40,6 +40,7 @@
+ #include "mkdeps.h"
+ #include "target.h"
+ #include "tm_p.h"
++#include "c-tree.h"		/* For c_cpp_error.  */
+ 
+ #ifndef DOLLARS_IN_IDENTIFIERS
+ # define DOLLARS_IN_IDENTIFIERS true
+@@ -201,6 +202,7 @@
+ {
+   static const unsigned int lang_flags[] = {CL_C, CL_ObjC, CL_CXX, CL_ObjCXX};
+   unsigned int i, result;
++  struct cpp_callbacks *cb;
+ 
+   /* This is conditionalized only because that is the way the front
+      ends used to do it.  Maybe this should be unconditional?  */
+@@ -216,6 +218,8 @@
+ 
+   parse_in = cpp_create_reader (c_dialect_cxx () ? CLK_GNUCXX: CLK_GNUC89,
+ 				ident_hash, line_table);
++  cb = cpp_get_callbacks (parse_in);
++  cb->error = c_cpp_error;
+ 
+   cpp_opts = cpp_get_options (parse_in);
+   cpp_opts->dollars_in_ident = DOLLARS_IN_IDENTIFIERS;
+@@ -333,12 +337,12 @@
+ 	 or environment var dependency generation is used.  */
+       cpp_opts->deps.style = (code == OPT_M ? DEPS_SYSTEM: DEPS_USER);
+       flag_no_output = 1;
+-      cpp_opts->inhibit_warnings = 1;
+       break;
+ 
+     case OPT_MD:
+     case OPT_MMD:
+       cpp_opts->deps.style = (code == OPT_MD ? DEPS_SYSTEM: DEPS_USER);
++      cpp_opts->deps.need_preprocessor_output = true;
+       deps_file = arg;
+       break;
+ 
+@@ -444,7 +448,6 @@
+       break;
+ 
+     case OPT_Werror:
+-      cpp_opts->warnings_are_errors = value;
+       global_dc->warning_as_error_requested = value;
+       break;
+ 
+@@ -503,10 +506,6 @@
+       warn_strict_null_sentinel = value;
+       break;
+ 
+-    case OPT_Wsystem_headers:
+-      cpp_opts->warn_system_headers = value;
+-      break;
+-
+     case OPT_Wtraditional:
+       cpp_opts->warn_traditional = value;
+       break;
+@@ -895,8 +894,6 @@
+ 	 c_common_post_options, so that a subsequent -Wno-endif-labels
+ 	 is not overridden.  */
+     case OPT_pedantic_errors:
+-      cpp_opts->pedantic_errors = 1;
+-      /* Fall through.  */
+     case OPT_pedantic:
+       cpp_opts->pedantic = 1;
+       cpp_opts->warn_endif_labels = 1;
+@@ -971,10 +968,6 @@
+       flag_undef = 1;
+       break;
+ 
+-    case OPT_w:
+-      cpp_opts->inhibit_warnings = 1;
+-      break;
+-
+     case OPT_v:
+       verbose = true;
+       break;
+@@ -1159,10 +1152,6 @@
+ 
+   input_location = UNKNOWN_LOCATION;
+ 
+-  /* If an error has occurred in cpplib, note it so we fail
+-     immediately.  */
+-  errorcount += cpp_errors (parse_in);
+-
+   *pfilename = this_input_filename
+     = cpp_read_main_file (parse_in, in_fnames[0]);
+   /* Don't do any compilation or preprocessing if there is no input file.  */
+@@ -1274,7 +1263,8 @@
+ {
+   FILE *deps_stream = NULL;
+ 
+-  if (cpp_opts->deps.style != DEPS_NONE)
++  /* Don't write the deps file if there are errors.  */
++  if (cpp_opts->deps.style != DEPS_NONE && errorcount == 0)
+     {
+       /* If -M or -MM was seen without -MF, default output to the
+ 	 output stream.  */
+@@ -1290,7 +1280,7 @@
+ 
+   /* For performance, avoid tearing down cpplib's internal structures
+      with cpp_destroy ().  */
+-  errorcount += cpp_finish (parse_in, deps_stream);
++  cpp_finish (parse_in, deps_stream);
+ 
+   if (deps_stream && deps_stream != out_stream
+       && (ferror (deps_stream) || fclose (deps_stream)))
+--- a/src/gcc/c-ppoutput.c
++++ b/src/gcc/c-ppoutput.c
+@@ -521,6 +521,7 @@
+ 
+   if (map != NULL)
+     {
++      input_location = map->start_location;
+       if (print.first_time)
+ 	{
+ 	  /* Avoid printing foo.i when the main file is foo.c.  */
+--- a/src/gcc/c-tree.h
++++ b/src/gcc/c-tree.h
+@@ -647,4 +647,8 @@
+ extern void pedwarn_c90 (location_t, int opt, const char *, ...) ATTRIBUTE_GCC_CDIAG(3,4);
+ extern void pedwarn_c99 (location_t, int opt, const char *, ...) ATTRIBUTE_GCC_CDIAG(3,4);
+ 
++extern bool c_cpp_error (cpp_reader *, int, location_t, unsigned int,
++			 const char *, va_list *)
++     ATTRIBUTE_GCC_CDIAG(5,0);
++
+ #endif /* ! GCC_C_TREE_H */
+--- a/src/gcc/c-typeck.c
++++ b/src/gcc/c-typeck.c
+@@ -1765,6 +1765,7 @@
+   tree orig_exp;
+   tree type = TREE_TYPE (exp);
+   enum tree_code code = TREE_CODE (type);
++  tree promoted_type;
+ 
+   /* Functions and arrays have been converted during parsing.  */
+   gcc_assert (code != FUNCTION_TYPE);
+@@ -1801,6 +1802,10 @@
+   if (exp == error_mark_node)
+     return error_mark_node;
+ 
++  promoted_type = targetm.promoted_type (type);
++  if (promoted_type)
++    return convert (promoted_type, exp);
++
+   if (INTEGRAL_TYPE_P (type))
+     return perform_integral_promotions (exp);
+ 
+--- a/src/gcc/c.opt
++++ b/src/gcc/c.opt
+@@ -720,6 +720,10 @@
+ C ObjC C++ ObjC++
+ Treat the input file as already preprocessed
+ 
++fremove-local-statics
++C C++ Var(flag_remove_local_statics) Optimization
++Convert function-local static variables to automatic variables when it is safe to do so
++
+ freplace-objc-classes
+ ObjC ObjC++
+ Used in Fix-and-Continue mode to indicate that object files may be swapped in at runtime
+--- a/src/gcc/calls.c
++++ b/src/gcc/calls.c
+@@ -711,7 +711,9 @@
+ 
+ 	   For small register classes, also do this if this call uses
+ 	   register parameters.  This is to avoid reload conflicts while
+-	   loading the parameters registers.  */
++	   loading the parameters registers.
++	   
++	   Avoid creating the extra move if optimizing for size.  */
+ 
+ 	else if ((! (REG_P (args[i].value)
+ 		     || (GET_CODE (args[i].value) == SUBREG
+@@ -719,6 +721,7 @@
+ 		 && args[i].mode != BLKmode
+ 		 && rtx_cost (args[i].value, SET, optimize_insn_for_speed_p ())
+ 		    > COSTS_N_INSNS (1)
++		 && !optimize_size
+ 		 && ((SMALL_REGISTER_CLASSES && *reg_parm_seen)
+ 		     || optimize))
+ 	  args[i].value = copy_to_mode_reg (args[i].mode, args[i].value);
+@@ -3806,7 +3809,7 @@
+      cse'ing of library calls could delete a call and leave the pop.  */
+   NO_DEFER_POP;
+   valreg = (mem_value == 0 && outmode != VOIDmode
+-	    ? hard_libcall_value (outmode) : NULL_RTX);
++	    ? hard_libcall_value (outmode, orgfun) : NULL_RTX);
+ 
+   /* Stack must be properly aligned now.  */
+   gcc_assert (!(stack_pointer_delta
+@@ -4051,8 +4054,17 @@
+ 	      /* We need to make a save area.  */
+ 	      unsigned int size = arg->locate.size.constant * BITS_PER_UNIT;
+ 	      enum machine_mode save_mode = mode_for_size (size, MODE_INT, 1);
+-	      rtx adr = memory_address (save_mode, XEXP (arg->stack_slot, 0));
+-	      rtx stack_area = gen_rtx_MEM (save_mode, adr);
++	      rtx adr;
++	      rtx stack_area;
++
++	      /* We can only use save_mode if the arg is sufficiently
++	         aligned.  */
++	      if (STRICT_ALIGNMENT
++		  && GET_MODE_ALIGNMENT (save_mode) > arg->locate.boundary)
++		save_mode = BLKmode;
++
++	      adr = memory_address (save_mode, XEXP (arg->stack_slot, 0));
++	      stack_area = gen_rtx_MEM (save_mode, adr);
+ 
+ 	      if (save_mode == BLKmode)
+ 		{
+--- a/src/gcc/cfgcleanup.c
++++ b/src/gcc/cfgcleanup.c
+@@ -68,7 +68,6 @@
+ static bool try_crossjump_to_edge (int, edge, edge);
+ static bool try_crossjump_bb (int, basic_block);
+ static bool outgoing_edges_match (int, basic_block, basic_block);
+-static int flow_find_cross_jump (int, basic_block, basic_block, rtx *, rtx *);
+ static bool old_insns_match_p (int, rtx, rtx);
+ 
+ static void merge_blocks_move_predecessor_nojumps (basic_block, basic_block);
+@@ -967,13 +966,27 @@
+      be filled that clobbers a parameter expected by the subroutine.
+ 
+      ??? We take the simple route for now and assume that if they're
+-     equal, they were constructed identically.  */
++     equal, they were constructed identically.
+ 
+-  if (CALL_P (i1)
+-      && (!rtx_equal_p (CALL_INSN_FUNCTION_USAGE (i1),
++     Also check for identical exception regions.  */
++
++  if (CALL_P (i1))
++    {
++      /* Ensure the same EH region.  */
++      rtx n1 = find_reg_note (i1, REG_EH_REGION, 0);
++      rtx n2 = find_reg_note (i2, REG_EH_REGION, 0);
++
++      if (!n1 && n2)
++	return false;
++
++      if (n1 && (!n2 || XEXP (n1, 0) != XEXP (n2, 0)))
++	return false;
++
++      if (!rtx_equal_p (CALL_INSN_FUNCTION_USAGE (i1),
+ 			CALL_INSN_FUNCTION_USAGE (i2))
+-	  || SIBLING_CALL_P (i1) != SIBLING_CALL_P (i2)))
+-    return false;
++	  || SIBLING_CALL_P (i1) != SIBLING_CALL_P (i2))
++	return false;
++    }
+ 
+ #ifdef STACK_REGS
+   /* If cross_jump_death_matters is not 0, the insn's mode
+@@ -1053,7 +1066,7 @@
+    To simplify callers of this function, if the blocks match exactly,
+    store the head of the blocks in *F1 and *F2.  */
+ 
+-static int
++int
+ flow_find_cross_jump (int mode ATTRIBUTE_UNUSED, basic_block bb1,
+ 		      basic_block bb2, rtx *f1, rtx *f2)
+ {
+@@ -1155,6 +1168,108 @@
+       *f1 = last1;
+       *f2 = last2;
+     }
++
++  return ninsns;
++}
++
++/* Like flow_find_cross_jump, except start looking for a matching sequence from
++   the head of the two blocks.  Do not include jumps at the end.
++   If STOP_AFTER is nonzero, stop after finding that many matching
++   instructions.  */
++
++int
++flow_find_head_matching_sequence (int mode ATTRIBUTE_UNUSED, basic_block bb1,
++				  basic_block bb2, rtx *f1, rtx *f2,
++				  int stop_after)
++{
++  rtx i1, i2, last1, last2, beforelast1, beforelast2;
++  int ninsns = 0;
++  edge e;
++  edge_iterator ei;
++  int nehedges1 = 0, nehedges2 = 0;
++
++  FOR_EACH_EDGE (e, ei, bb1->succs)
++    if (e->flags & EDGE_EH)
++      nehedges1++;
++  FOR_EACH_EDGE (e, ei, bb2->succs)
++    if (e->flags & EDGE_EH)
++      nehedges2++;
++
++  i1 = BB_HEAD (bb1);
++  i2 = BB_HEAD (bb2);
++  last1 = beforelast1 = last2 = beforelast2 = NULL_RTX;
++
++  while (true)
++    {
++
++      /* Ignore notes.  */
++      while (!INSN_P (i1) && i1 != BB_END (bb1))
++	i1 = NEXT_INSN (i1);
++
++      while (!INSN_P (i2) && i2 != BB_END (bb2))
++	i2 = NEXT_INSN (i2);
++
++      if (NOTE_P (i1) || NOTE_P (i2)
++	  || JUMP_P (i1) || JUMP_P (i2))
++	break;
++
++      if ((i1 == BB_END (bb1) && i2 != BB_END (bb2)
++	   && nehedges1 > 0)
++	  || (i2 == BB_END (bb2) && i1 != BB_END (bb1)
++	      && nehedges2 > 0)
++	  || (i1 == BB_END (bb1) && i2 == BB_END (bb2)
++	      && nehedges1 != nehedges2))
++	break;
++
++      if (!old_insns_match_p (mode, i1, i2))
++	break;
++
++      merge_memattrs (i1, i2);
++
++      /* Don't begin a cross-jump with a NOTE insn.  */
++      if (INSN_P (i1))
++	{
++	  /* If the merged insns have different REG_EQUAL notes, then
++	     remove them.  */
++	  rtx equiv1 = find_reg_equal_equiv_note (i1);
++	  rtx equiv2 = find_reg_equal_equiv_note (i2);
++
++	  if (equiv1 && !equiv2)
++	    remove_note (i1, equiv1);
++	  else if (!equiv1 && equiv2)
++	    remove_note (i2, equiv2);
++	  else if (equiv1 && equiv2
++		   && !rtx_equal_p (XEXP (equiv1, 0), XEXP (equiv2, 0)))
++	    {
++	      remove_note (i1, equiv1);
++	      remove_note (i2, equiv2);
++	    }
++
++	  beforelast1 = last1, beforelast2 = last2;
++	  last1 = i1, last2 = i2;
++	  ninsns++;
++	}
++
++      if (i1 == BB_END (bb1) || i2 == BB_END (bb2)
++	  || (stop_after > 0 && ninsns == stop_after))
++	break;
++
++      i1 = NEXT_INSN (i1);
++      i2 = NEXT_INSN (i2);
++    }
++
++#ifdef HAVE_cc0
++  /* Don't allow a compare to be shared by cross-jumping unless the insn
++     after the compare is also shared.  */
++  if (ninsns && reg_mentioned_p (cc0_rtx, last1) && sets_cc0_p (last1))
++    last1 = beforelast1, last2 = beforelast2, ninsns--;
++#endif
++
++  if (ninsns)
++    {
++      *f1 = last1;
++      *f2 = last2;
++    }
+ 
+   return ninsns;
+ }
+--- a/src/gcc/cfgexpand.c
++++ b/src/gcc/cfgexpand.c
+@@ -448,7 +448,8 @@
+ {
+   unsigned int align;
+ 
+-  align = LOCAL_DECL_ALIGNMENT (decl);
++  align = alignment_for_aligned_arrays (TREE_TYPE (decl),
++					LOCAL_DECL_ALIGNMENT (decl));
+ 
+   if (align > MAX_SUPPORTED_STACK_ALIGNMENT)
+     align = MAX_SUPPORTED_STACK_ALIGNMENT;
+--- a/src/gcc/cgraph.c
++++ b/src/gcc/cgraph.c
+@@ -475,9 +475,11 @@
+   if (DECL_CONTEXT (decl) && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
+     {
+       node->origin = cgraph_node (DECL_CONTEXT (decl));
++      node->origin->ever_was_nested = 1;
+       node->next_nested = node->origin->nested;
+       node->origin->nested = node;
+       node->master_clone = node;
++      node->ever_was_nested = 1;
+     }
+   if (assembler_name_hash)
+     {
+--- a/src/gcc/cgraph.h
++++ b/src/gcc/cgraph.h
+@@ -185,6 +185,8 @@
+   unsigned output : 1;
+   /* Set for aliases once they got through assemble_alias.  */
+   unsigned alias : 1;
++  /* Set if the function is a nested function or has nested functions.  */
++  unsigned ever_was_nested : 1;
+ 
+   /* In non-unit-at-a-time mode the function body of inline candidates is saved
+      into clone before compiling so the function in original form can be
+--- a/src/gcc/common.opt
++++ b/src/gcc/common.opt
+@@ -153,6 +153,10 @@
+ Common Var(warn_padded) Warning
+ Warn when padding is required to align structure members
+ 
++Wpoison-system-directories
++Common Var(flag_poison_system_directories) Init(1)
++Warn for -I and -L options using system directories if cross compiling
++
+ Wshadow
+ Common Var(warn_shadow) Warning
+ Warn when one local variable shadows another
+@@ -270,6 +274,12 @@
+ fabi-version=
+ Common Joined UInteger Var(flag_abi_version) Init(2)
+ 
++falign-arrays
++Target Report Var(flag_align_arrays)
++Set the minimum alignment for array variables to be the largest power
++of two less than or equal to their total storage size, or the biggest
++alignment used on the machine, whichever is smaller.
++
+ falign-functions
+ Common Report Var(align_functions,0) Optimization UInteger
+ Align the start of functions
+@@ -467,6 +477,10 @@
+ Common Report Var(flag_early_inlining) Init(1) Optimization
+ Perform early inlining
+ 
++feglibc=
++Common Report Joined Undocumented
++EGLIBC configuration specifier, serves multilib purposes.
++
+ feliminate-dwarf2-dups
+ Common Report Var(flag_eliminate_dwarf2_dups)
+ Perform DWARF2 duplicate elimination
+@@ -895,6 +909,10 @@
+ Common Report Var(flag_profile_values)
+ Insert code to profile values of expressions
+ 
++fpromote-loop-indices
++Common Report Var(flag_promote_loop_indices) Optimization
++Promote loop indices to word-sized indices when safe
++
+ frandom-seed
+ Common
+ 
+@@ -1227,6 +1245,15 @@
+ Common Report Var(flag_tree_pre) Optimization
+ Enable SSA-PRE optimization on trees
+ 
++ftree-pre-partial-partial
++Common Report Var(flag_tree_pre_partial_partial) Optimization
++In SSA-PRE optimization on trees, enable partial-partial redundancy elimination.
++
++ftree-pre-partial-partial-obliviously
++Common Report Var(flag_tree_pre_partial_partial_obliviously) Optimization
++In SSA-PRE optimization on trees, enable partial-partial redundancy
++elimination without regard for the cost of the inserted phi nodes.
++
+ ftree-reassoc
+ Common Report Var(flag_tree_reassoc) Init(1) Optimization
+ Enable reassociation on tree level
+--- a/src/gcc/config/arm/aout.h
++++ b/src/gcc/config/arm/aout.h
+@@ -163,31 +163,45 @@
+   {"mvdx12", 39},				\
+   {"mvdx13", 40},				\
+   {"mvdx14", 41},				\
+-  {"mvdx15", 42},				\
+-  {"d0", 63}, {"q0", 63},			\
+-  {"d1", 65},					\
+-  {"d2", 67}, {"q1", 67},			\
+-  {"d3", 69},					\
+-  {"d4", 71}, {"q2", 71},			\
+-  {"d5", 73},					\
+-  {"d6", 75}, {"q3", 75},			\
+-  {"d7", 77},					\
+-  {"d8", 79}, {"q4", 79},			\
+-  {"d9", 81},					\
+-  {"d10", 83}, {"q5", 83},			\
+-  {"d11", 85},					\
+-  {"d12", 87}, {"q6", 87},			\
+-  {"d13", 89},					\
+-  {"d14", 91}, {"q7", 91},			\
+-  {"d15", 93},					\
+-  {"q8", 95},					\
+-  {"q9", 99},					\
+-  {"q10", 103},					\
+-  {"q11", 107},					\
+-  {"q12", 111},					\
+-  {"q13", 115},					\
+-  {"q14", 119},					\
+-  {"q15", 123}					\
++  {"mvdx15", 42}				\
++}
++#endif
++
++#ifndef OVERLAPPING_REGISTER_NAMES
++#define OVERLAPPING_REGISTER_NAMES		\
++{						\
++  {"d0", 63, 2},				\
++  {"d1", 65, 2},				\
++  {"d2", 67, 2},				\
++  {"d3", 69, 2},				\
++  {"d4", 71, 2},				\
++  {"d5", 73, 2},				\
++  {"d6", 75, 2},				\
++  {"d7", 77, 2},				\
++  {"d8", 79, 2},				\
++  {"d9", 81, 2},				\
++  {"d10", 83, 2},				\
++  {"d11", 85, 2},				\
++  {"d12", 87, 2},				\
++  {"d13", 89, 2},				\
++  {"d14", 91, 2},				\
++  {"d15", 93, 2},				\
++  {"q0", 63, 4},				\
++  {"q1", 67, 4},				\
++  {"q2", 71, 4},				\
++  {"q3", 75, 4},				\
++  {"q4", 79, 4},				\
++  {"q5", 83, 4},				\
++  {"q6", 87, 4},				\
++  {"q7", 91, 4},				\
++  {"q8", 95, 4},				\
++  {"q9", 99, 4},				\
++  {"q10", 103, 4},				\
++  {"q11", 107, 4},				\
++  {"q12", 111, 4},				\
++  {"q13", 115, 4},				\
++  {"q14", 119, 4},				\
++  {"q15", 123, 4}				\
+ }
+ #endif
+ 
+--- a/src/gcc/config/arm/arm-cores.def
++++ b/src/gcc/config/arm/arm-cores.def
+@@ -104,6 +104,7 @@
+ ARM_CORE("xscale",        xscale,	5TE,	                         FL_LDSCHED | FL_STRONG | FL_XSCALE, xscale)
+ ARM_CORE("iwmmxt",        iwmmxt,	5TE,	                         FL_LDSCHED | FL_STRONG | FL_XSCALE | FL_IWMMXT, xscale)
+ ARM_CORE("iwmmxt2",       iwmmxt2,	5TE,	                         FL_LDSCHED | FL_STRONG | FL_XSCALE | FL_IWMMXT, xscale)
++ARM_CORE("marvell-f",	  marvell_f,	5TE,				 FL_LDSCHED | FL_VFPV2 | FL_MARVELL_F, 9e)
+ 
+ /* V5TEJ Architecture Processors */
+ ARM_CORE("arm926ej-s",    arm926ejs,	5TEJ,	                         FL_LDSCHED, 9e)
+@@ -117,9 +118,14 @@
+ ARM_CORE("mpcorenovfp",	  mpcorenovfp,	6K,				 FL_LDSCHED, 9e)
+ ARM_CORE("mpcore",	  mpcore,	6K,				 FL_LDSCHED | FL_VFPV2, 9e)
+ ARM_CORE("arm1156t2-s",	  arm1156t2s,	6T2,				 FL_LDSCHED, 9e)
++
++/* V7 Architecture Processors */
++ARM_CORE("cortex-a5",	  cortexa5,	7A,				 FL_LDSCHED, 9e)
+ ARM_CORE("cortex-a8",	  cortexa8,	7A,				 FL_LDSCHED, 9e)
+ ARM_CORE("cortex-a9",	  cortexa9,	7A,				 FL_LDSCHED, 9e)
+ ARM_CORE("cortex-r4",	  cortexr4,	7R,				 FL_LDSCHED, 9e)
+ ARM_CORE("cortex-r4f",	  cortexr4f,	7R,				 FL_LDSCHED, 9e)
++ARM_CORE("cortex-m4",	  cortexm4,	7EM,				 FL_LDSCHED, 9e)
+ ARM_CORE("cortex-m3",	  cortexm3,	7M,				 FL_LDSCHED, 9e)
+ ARM_CORE("cortex-m1",	  cortexm1,	6M,				 FL_LDSCHED, 9e)
++ARM_CORE("cortex-m0",	  cortexm0,	6M,				 FL_LDSCHED, 9e)
+--- a/src/gcc/config/arm/arm-modes.def
++++ b/src/gcc/config/arm/arm-modes.def
+@@ -25,15 +25,26 @@
+    FIXME What format is this?  */
+ FLOAT_MODE (XF, 12, 0);
+ 
++/* Half-precision floating point */
++FLOAT_MODE (HF, 2, 0);
++ADJUST_FLOAT_FORMAT (HF, ((arm_fp16_format == ARM_FP16_FORMAT_ALTERNATIVE)
++			  ? &arm_half_format : &ieee_half_format));
++
+ /* CCFPEmode should be used with floating inequalities,
+    CCFPmode should be used with floating equalities.
+    CC_NOOVmode should be used with SImode integer equalities.
+    CC_Zmode should be used if only the Z flag is set correctly
+    CC_Nmode should be used if only the N (sign) flag is set correctly
++   CC_CZmode should be used if only the C and Z flags are correct
++   (used for DImode unsigned comparisons).
++   CC_NCVmode should be used if only the N, C, and V flags are correct
++   (used for DImode signed comparisons).
+    CCmode should be used otherwise.  */
+ 
+ CC_MODE (CC_NOOV);
+ CC_MODE (CC_Z);
++CC_MODE (CC_CZ);
++CC_MODE (CC_NCV);
+ CC_MODE (CC_SWP);
+ CC_MODE (CCFP);
+ CC_MODE (CCFPE);
+@@ -62,6 +73,4 @@
+ INT_MODE (EI, 24);
+ INT_MODE (OI, 32);
+ INT_MODE (CI, 48);
+-/* ??? This should actually have 512 bits but the precision only has 9
+-   bits.  */
+-FRACTIONAL_INT_MODE (XI, 511, 64);
++INT_MODE (XI, 64);
+--- a/src/gcc/config/arm/arm-protos.h
++++ b/src/gcc/config/arm/arm-protos.h
+@@ -1,6 +1,7 @@
+-/* Prototypes for exported functions defined in arm.c and pe.c
+-   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+-   Free Software Foundation, Inc.
++/* Prototypes for exported functions defined in arm.c, pe.c,
++   pe-cxx and pe-stubs.c.
++   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
++   2009 Free Software Foundation, Inc.
+    Contributed by Richard Earnshaw (rearnsha@arm.com)
+    Minor hacks by Nick Clifton (nickc@cygnus.com)
+ 
+@@ -42,6 +43,8 @@
+ extern unsigned int arm_dbx_register_number (unsigned int);
+ extern void arm_output_fn_unwind (FILE *, bool);
+   
++extern int arm_major_arch (void);
++extern bool arm_thumb_arch_p (void);
+ 
+ #ifdef RTX_CODE
+ extern bool arm_vector_mode_supported_p (enum machine_mode);
+@@ -49,8 +52,7 @@
+ extern int const_ok_for_arm (HOST_WIDE_INT);
+ extern int arm_split_constant (RTX_CODE, enum machine_mode, rtx,
+ 			       HOST_WIDE_INT, rtx, rtx, int);
+-extern RTX_CODE arm_canonicalize_comparison (RTX_CODE, enum machine_mode,
+-					     rtx *);
++extern RTX_CODE arm_canonicalize_comparison (RTX_CODE, rtx *, rtx *);
+ extern int legitimate_pic_operand_p (rtx);
+ extern rtx legitimize_pic_address (rtx, enum machine_mode, rtx);
+ extern rtx legitimize_tls_address (rtx, rtx);
+@@ -72,6 +74,7 @@
+ 					  enum machine_mode, int, int);
+ extern void neon_pairwise_reduce (rtx, rtx, enum machine_mode,
+ 				  rtx (*) (rtx, rtx, rtx));
++extern rtx neon_make_constant (rtx);
+ extern void neon_expand_vector_init (rtx, rtx);
+ extern void neon_lane_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
+ extern void neon_const_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
+@@ -88,7 +91,7 @@
+ 
+ extern int cirrus_memory_offset (rtx);
+ extern int arm_coproc_mem_operand (rtx, bool);
+-extern int neon_vector_mem_operand (rtx, bool);
++extern int neon_vector_mem_operand (rtx, int);
+ extern int neon_struct_mem_operand (rtx);
+ extern int arm_no_early_store_addr_dep (rtx, rtx);
+ extern int arm_no_early_alu_shift_dep (rtx, rtx);
+@@ -119,6 +122,7 @@
+ extern void arm_reload_out_hi (rtx *);
+ extern int arm_const_double_inline_cost (rtx);
+ extern bool arm_const_double_by_parts (rtx);
++extern bool arm_const_double_by_immediates (rtx);
+ extern const char *fp_immediate_constant (rtx);
+ extern void arm_emit_call_insn (rtx, rtx);
+ extern const char *output_call (rtx *);
+@@ -133,6 +137,7 @@
+ extern const char *output_move_quad (rtx *);
+ extern const char *output_move_vfp (rtx *operands);
+ extern const char *output_move_neon (rtx *operands);
++extern int arm_attr_length_move_neon (rtx);
+ extern const char *output_add_immediate (rtx *);
+ extern const char *arithmetic_instr (rtx, int);
+ extern void output_ascii_pseudo_op (FILE *, const unsigned char *, int);
+@@ -144,6 +149,7 @@
+ extern int arm_debugger_arg_offset (int, rtx);
+ extern bool arm_is_long_call_p (tree);
+ extern int    arm_emit_vector_const (FILE *, rtx);
++extern void arm_emit_fp16_const (rtx c);
+ extern const char * arm_output_load_gr (rtx *);
+ extern const char *vfp_output_fstmd (rtx *);
+ extern void arm_set_return_address (rtx, rtx);
+@@ -154,13 +160,15 @@
+ 
+ #if defined TREE_CODE
+ extern rtx arm_function_arg (CUMULATIVE_ARGS *, enum machine_mode, tree, int);
++extern void arm_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
++				      tree, bool);
+ extern void arm_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree);
+ extern bool arm_pad_arg_upward (enum machine_mode, const_tree);
+ extern bool arm_pad_reg_upward (enum machine_mode, tree, int);
+ extern bool arm_needs_doubleword_align (enum machine_mode, tree);
+-extern rtx arm_function_value(const_tree, const_tree);
+ #endif
+ extern int arm_apply_result_size (void);
++extern rtx aapcs_libcall_value (enum machine_mode);
+ 
+ #endif /* RTX_CODE */
+ 
+@@ -193,6 +201,11 @@
+ extern int arm_dllexport_name_p (const char *);
+ extern int arm_dllimport_name_p (const char *);
+ 
++/* In pe-cxx.c and pe-stubs.c  */
++extern void arm_pe_adjust_class_at_definition (tree);
++extern bool arm_pe_type_dllimport_p (tree);
++extern bool arm_pe_type_dllexport_p (tree);
++
+ #ifdef TREE_CODE
+ extern void arm_pe_unique_section (tree, int);
+ extern void arm_pe_encode_section_info (tree, rtx, int);
+--- a/src/gcc/config/arm/arm-tune.md
++++ b/src/gcc/config/arm/arm-tune.md
+@@ -1,5 +1,5 @@
+ ;; -*- buffer-read-only: t -*-
+ ;; Generated automatically by gentune.sh from arm-cores.def
+ (define_attr "tune"
+-	"arm2,arm250,arm3,arm6,arm60,arm600,arm610,arm620,arm7,arm7d,arm7di,arm70,arm700,arm700i,arm710,arm720,arm710c,arm7100,arm7500,arm7500fe,arm7m,arm7dm,arm7dmi,arm8,arm810,strongarm,strongarm110,strongarm1100,strongarm1110,arm7tdmi,arm7tdmis,arm710t,arm720t,arm740t,arm9,arm9tdmi,arm920,arm920t,arm922t,arm940t,ep9312,arm10tdmi,arm1020t,arm9e,arm946es,arm966es,arm968es,arm10e,arm1020e,arm1022e,xscale,iwmmxt,iwmmxt2,arm926ejs,arm1026ejs,arm1136js,arm1136jfs,arm1176jzs,arm1176jzfs,mpcorenovfp,mpcore,arm1156t2s,cortexa8,cortexa9,cortexr4,cortexr4f,cortexm3,cortexm1"
++	"arm2,arm250,arm3,arm6,arm60,arm600,arm610,arm620,arm7,arm7d,arm7di,arm70,arm700,arm700i,arm710,arm720,arm710c,arm7100,arm7500,arm7500fe,arm7m,arm7dm,arm7dmi,arm8,arm810,strongarm,strongarm110,strongarm1100,strongarm1110,arm7tdmi,arm7tdmis,arm710t,arm720t,arm740t,arm9,arm9tdmi,arm920,arm920t,arm922t,arm940t,ep9312,arm10tdmi,arm1020t,arm9e,arm946es,arm966es,arm968es,arm10e,arm1020e,arm1022e,xscale,iwmmxt,iwmmxt2,marvell_f,arm926ejs,arm1026ejs,arm1136js,arm1136jfs,arm1176jzs,arm1176jzfs,mpcorenovfp,mpcore,arm1156t2s,cortexa5,cortexa8,cortexa9,cortexr4,cortexr4f,cortexm4,cortexm3,cortexm1,cortexm0"
+ 	(const (symbol_ref "arm_tune")))
+--- a/src/gcc/config/arm/arm.c
++++ b/src/gcc/config/arm/arm.c
+@@ -43,6 +43,7 @@
+ #include "optabs.h"
+ #include "toplev.h"
+ #include "recog.h"
++#include "cgraph.h"
+ #include "ggc.h"
+ #include "except.h"
+ #include "c-pragma.h"
+@@ -53,6 +54,8 @@
+ #include "debug.h"
+ #include "langhooks.h"
+ #include "df.h"
++#include "intl.h"
++#include "params.h"
+ #include "libfuncs.h"
+ 
+ /* Forward definitions of types.  */
+@@ -111,6 +114,7 @@
+ static unsigned long arm_isr_value (tree);
+ static unsigned long arm_compute_func_type (void);
+ static tree arm_handle_fndecl_attribute (tree *, tree, tree, int, bool *);
++static tree arm_handle_pcs_attribute (tree *, tree, tree, int, bool *);
+ static tree arm_handle_isr_attribute (tree *, tree, tree, int, bool *);
+ #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
+ static tree arm_handle_notshared_attribute (tree *, tree, tree, int, bool *);
+@@ -124,11 +128,16 @@
+ static int count_insns_for_constant (HOST_WIDE_INT, int);
+ static int arm_get_strip_length (int);
+ static bool arm_function_ok_for_sibcall (tree, tree);
++static bool arm_return_in_memory (const_tree, const_tree);
++static rtx arm_function_value (const_tree, const_tree, bool);
++static rtx arm_libcall_value (enum machine_mode, rtx);
++
+ static void arm_internal_label (FILE *, const char *, unsigned long);
+ static void arm_output_mi_thunk (FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT,
+ 				 tree);
+ static bool arm_rtx_costs_1 (rtx, enum rtx_code, int*, bool);
+ static bool arm_size_rtx_costs (rtx, enum rtx_code, enum rtx_code, int *);
++static bool thumb2_size_rtx_costs (rtx, enum rtx_code, enum rtx_code, int *);
+ static bool arm_slowmul_rtx_costs (rtx, enum rtx_code, enum rtx_code, int *, bool);
+ static bool arm_fastmul_rtx_costs (rtx, enum rtx_code, enum rtx_code, int *, bool);
+ static bool arm_xscale_rtx_costs (rtx, enum rtx_code, enum rtx_code, int *, bool);
+@@ -149,6 +158,9 @@
+ static rtx emit_set_insn (rtx, rtx);
+ static int arm_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
+ 				  tree, bool);
++static rtx aapcs_allocate_return_reg (enum machine_mode, const_tree,
++				      const_tree);
++static int aapcs_select_return_coproc (const_tree, const_tree);
+ 
+ #ifdef OBJECT_FORMAT_ELF
+ static void arm_elf_asm_constructor (rtx, int) ATTRIBUTE_UNUSED;
+@@ -176,6 +188,7 @@
+ static bool arm_output_ttype (rtx);
+ #endif
+ static void arm_dwarf_handle_frame_unspec (const char *, rtx, int);
++static rtx arm_dwarf_register_span(rtx);
+ 
+ static tree arm_cxx_guard_type (void);
+ static bool arm_cxx_guard_mask_bit (void);
+@@ -198,6 +211,15 @@
+ static int arm_issue_rate (void);
+ static void arm_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
+ static bool arm_allocate_stack_slots_for_args (void);
++static bool arm_warn_func_result (void);
++static int arm_multipass_dfa_lookahead (void);
++static const char *arm_invalid_parameter_type (const_tree t);
++static const char *arm_invalid_return_type (const_tree t);
++static tree arm_promoted_type (const_tree t);
++static tree arm_convert_to_type (tree type, tree expr);
++static bool arm_scalar_mode_supported_p (enum machine_mode);
++static int arm_vector_min_alignment (const_tree type);
++static bool arm_vector_always_misalign(const_tree);
+ 
+ 
+ /* Initialize the GCC target structure.  */
+@@ -219,6 +241,17 @@
+ #undef  TARGET_ASM_INTEGER
+ #define TARGET_ASM_INTEGER arm_assemble_integer
+ 
++#ifdef ARM_PE
++#undef  TARGET_ASM_UNALIGNED_HI_OP
++#define TARGET_ASM_UNALIGNED_HI_OP "\t.2byte\t"
++#undef  TARGET_ASM_UNALIGNED_SI_OP
++#define TARGET_ASM_UNALIGNED_SI_OP "\t.4byte\t"
++#undef  TARGET_ASM_UNALIGNED_DI_OP
++#define TARGET_ASM_UNALIGNED_DI_OP "\t.8byte\t"
++#undef  TARGET_ASM_UNALIGNED_TI_OP
++#define TARGET_ASM_UNALIGNED_TI_OP NULL
++#endif
++
+ #undef  TARGET_ASM_FUNCTION_PROLOGUE
+ #define TARGET_ASM_FUNCTION_PROLOGUE arm_output_function_prologue
+ 
+@@ -257,6 +290,12 @@
+ #undef  TARGET_FUNCTION_OK_FOR_SIBCALL
+ #define TARGET_FUNCTION_OK_FOR_SIBCALL arm_function_ok_for_sibcall
+ 
++#undef  TARGET_FUNCTION_VALUE
++#define TARGET_FUNCTION_VALUE arm_function_value
++
++#undef  TARGET_LIBCALL_VALUE
++#define TARGET_LIBCALL_VALUE arm_libcall_value
++
+ #undef  TARGET_ASM_OUTPUT_MI_THUNK
+ #define TARGET_ASM_OUTPUT_MI_THUNK arm_output_mi_thunk
+ #undef  TARGET_ASM_CAN_OUTPUT_MI_THUNK
+@@ -300,6 +339,9 @@
+ #undef TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS
+ #define TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS arm_allocate_stack_slots_for_args
+ 
++#undef TARGET_WARN_FUNC_RESULT
++#define TARGET_WARN_FUNC_RESULT arm_warn_func_result
++
+ #undef TARGET_DEFAULT_SHORT_ENUMS
+ #define TARGET_DEFAULT_SHORT_ENUMS arm_default_short_enums
+ 
+@@ -354,6 +396,9 @@
+ #undef TARGET_ASM_TTYPE
+ #define TARGET_ASM_TTYPE arm_output_ttype
+ 
++#undef TARGET_CXX_TTYPE_REF_ENCODE
++#define TARGET_CXX_TTYPE_REF_ENCODE hook_cxx_ttype_ref_in_bit0
++
+ #undef TARGET_ARM_EABI_UNWINDER
+ #define TARGET_ARM_EABI_UNWINDER true
+ #endif /* TARGET_UNWIND_INFO */
+@@ -361,6 +406,9 @@
+ #undef TARGET_DWARF_HANDLE_FRAME_UNSPEC
+ #define TARGET_DWARF_HANDLE_FRAME_UNSPEC arm_dwarf_handle_frame_unspec
+ 
++#undef TARGET_DWARF_REGISTER_SPAN
++#define TARGET_DWARF_REGISTER_SPAN arm_dwarf_register_span
++
+ #undef  TARGET_CANNOT_COPY_INSN_P
+ #define TARGET_CANNOT_COPY_INSN_P arm_cannot_copy_insn_p
+ 
+@@ -399,6 +447,30 @@
+ #define TARGET_ASM_OUTPUT_DWARF_DTPREL arm_output_dwarf_dtprel
+ #endif
+ 
++#undef TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
++#define TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD arm_multipass_dfa_lookahead
++
++#undef TARGET_INVALID_PARAMETER_TYPE
++#define TARGET_INVALID_PARAMETER_TYPE arm_invalid_parameter_type
++
++#undef TARGET_INVALID_RETURN_TYPE
++#define TARGET_INVALID_RETURN_TYPE arm_invalid_return_type
++
++#undef TARGET_PROMOTED_TYPE
++#define TARGET_PROMOTED_TYPE arm_promoted_type
++
++#undef TARGET_CONVERT_TO_TYPE
++#define TARGET_CONVERT_TO_TYPE arm_convert_to_type
++
++#undef TARGET_SCALAR_MODE_SUPPORTED_P
++#define TARGET_SCALAR_MODE_SUPPORTED_P arm_scalar_mode_supported_p
++
++#undef TARGET_VECTOR_MIN_ALIGNMENT
++#define TARGET_VECTOR_MIN_ALIGNMENT arm_vector_min_alignment
++
++#undef TARGET_VECTOR_ALWAYS_MISALIGN
++#define TARGET_VECTOR_ALWAYS_MISALIGN arm_vector_always_misalign
++
+ struct gcc_target targetm = TARGET_INITIALIZER;
+ 
+ /* Obstack for minipool constant handling.  */
+@@ -424,18 +496,18 @@
+ /* The default processor used if not overridden by commandline.  */
+ static enum processor_type arm_default_cpu = arm_none;
+ 
+-/* Which floating point model to use.  */
+-enum arm_fp_model arm_fp_model;
+-
+-/* Which floating point hardware is available.  */
+-enum fputype arm_fpu_arch;
+-
+ /* Which floating point hardware to schedule for.  */
+-enum fputype arm_fpu_tune;
++int arm_fpu_attr;
++
++/* Which floating popint hardware to use.  */
++const struct arm_fpu_desc *arm_fpu_desc;
+ 
+ /* Whether to use floating point hardware.  */
+ enum float_abi_type arm_float_abi;
+ 
++/* Which __fp16 format to use.  */
++enum arm_fp16_format_type arm_fp16_format;
++
+ /* Which ABI to use.  */
+ enum arm_abi_type arm_abi;
+ 
+@@ -474,9 +546,19 @@
+ #define FL_DIV	      (1 << 18)	      /* Hardware divide.  */
+ #define FL_VFPV3      (1 << 19)       /* Vector Floating Point V3.  */
+ #define FL_NEON       (1 << 20)       /* Neon instructions.  */
++#define FL_MARVELL_F  (1 << 21)       /* Marvell Feroceon.  */
++#define FL_ARCH7EM    (1 << 22)	      /* Instructions present in ARMv7E-M.  */
+ 
+ #define FL_IWMMXT     (1 << 29)	      /* XScale v2 or "Intel Wireless MMX technology".  */
+ 
++/* Some flags are ignored when comparing -mcpu and -march:
++    FL_MARVELL_F so that -mcpu=marvell-f -march=v5te works.
++    FL_LDSCHED and FL_WBUF only effect tuning,
++    FL_CO_PROC, FL_VFPV2, FL_VFPV3 and FL_NEON because FP
++      coprocessors are handled separately.  */
++#define FL_COMPAT (FL_MARVELL_F | FL_LDSCHED | FL_WBUF | FL_CO_PROC | \
++		   FL_VFPV2 | FL_VFPV3 | FL_NEON)
++
+ #define FL_FOR_ARCH2	FL_NOTM
+ #define FL_FOR_ARCH3	(FL_FOR_ARCH2 | FL_MODE32)
+ #define FL_FOR_ARCH3M	(FL_FOR_ARCH3 | FL_ARCH3M)
+@@ -498,6 +580,7 @@
+ #define FL_FOR_ARCH7A	(FL_FOR_ARCH7 | FL_NOTM)
+ #define FL_FOR_ARCH7R	(FL_FOR_ARCH7A | FL_DIV)
+ #define FL_FOR_ARCH7M	(FL_FOR_ARCH7 | FL_DIV)
++#define FL_FOR_ARCH7EM  (FL_FOR_ARCH7M | FL_ARCH7EM)
+ 
+ /* The bits in this mask specify which
+    instructions we are allowed to generate.  */
+@@ -534,6 +617,9 @@
+ /* Nonzero if instructions not present in the 'M' profile can be used.  */
+ int arm_arch_notm = 0;
+ 
++/* Nonzero if instructions present in ARMv7E-M can be used.  */
++int arm_arch7em = 0;
++
+ /* Nonzero if this chip can benefit from load scheduling.  */
+ int arm_ld_sched = 0;
+ 
+@@ -552,6 +638,9 @@
+ /* Nonzero if tuning for XScale  */
+ int arm_tune_xscale = 0;
+ 
++/* Nonzero if tuning for Marvell Feroceon.  */
++int arm_tune_marvell_f = 0;
++
+ /* Nonzero if we want to tune for stores that access the write-buffer.
+    This typically means an ARM6 or ARM7 with MMU or MPU.  */
+ int arm_tune_wbuf = 0;
+@@ -562,6 +651,9 @@
+ /* Nonzero if generating Thumb instructions.  */
+ int thumb_code = 0;
+ 
++/* Nonzero if generating code for Janus2. */
++int janus2_code = 0;
++
+ /* Nonzero if we should define __THUMB_INTERWORK__ in the
+    preprocessor.
+    XXX This is a bit of a hack, it's intended to help work around
+@@ -594,6 +686,8 @@
+ /* The maximum number of insns to be used when loading a constant.  */
+ static int arm_constant_limit = 3;
+ 
++enum arm_pcs arm_pcs_default;
++
+ /* For an explanation of these variables, see final_prescan_insn below.  */
+ int arm_ccfsm_state;
+ /* arm_current_cc is also used for Thumb-2 cond_exec blocks.  */
+@@ -674,9 +768,11 @@
+   {"armv7-a", cortexa8,	  "7A",	 FL_CO_PROC |		  FL_FOR_ARCH7A, NULL},
+   {"armv7-r", cortexr4,	  "7R",	 FL_CO_PROC |		  FL_FOR_ARCH7R, NULL},
+   {"armv7-m", cortexm3,	  "7M",	 FL_CO_PROC |		  FL_FOR_ARCH7M, NULL},
++  {"armv7e-m", cortexm4,  "7EM", FL_CO_PROC |		  FL_FOR_ARCH7EM, NULL},
+   {"ep9312",  ep9312,     "4T",  FL_LDSCHED | FL_CIRRUS | FL_FOR_ARCH4, NULL},
+   {"iwmmxt",  iwmmxt,     "5TE", FL_LDSCHED | FL_STRONG | FL_FOR_ARCH5TE | FL_XSCALE | FL_IWMMXT , NULL},
+   {"iwmmxt2", iwmmxt2,     "5TE", FL_LDSCHED | FL_STRONG | FL_FOR_ARCH5TE | FL_XSCALE | FL_IWMMXT , NULL},
++  {"marvell-f", marvell_f, "5TE", FL_CO_PROC | FL_FOR_ARCH5TE | FL_MARVELL_F, NULL},
+   {NULL, arm_none, NULL, 0 , NULL}
+ };
+ 
+@@ -706,49 +802,34 @@
+ 
+ /* The name of the preprocessor macro to define for this architecture.  */
+ 
+-char arm_arch_name[] = "__ARM_ARCH_0UNK__";
+-
+-struct fpu_desc
+-{
+-  const char * name;
+-  enum fputype fpu;
+-};
+-
++#define ARM_ARCH_NAME_SIZE 25
++char arm_arch_name[ARM_ARCH_NAME_SIZE] = "__ARM_ARCH_0UNK__";
+ 
+ /* Available values for -mfpu=.  */
+ 
+-static const struct fpu_desc all_fpus[] =
++static const struct arm_fpu_desc all_fpus[] =
+ {
+-  {"fpa",	FPUTYPE_FPA},
+-  {"fpe2",	FPUTYPE_FPA_EMU2},
+-  {"fpe3",	FPUTYPE_FPA_EMU2},
+-  {"maverick",	FPUTYPE_MAVERICK},
+-  {"vfp",	FPUTYPE_VFP},
+-  {"vfp3",	FPUTYPE_VFP3},
+-  {"vfpv3",	FPUTYPE_VFP3},
+-  {"vfpv3-d16",	FPUTYPE_VFP3D16},
+-  {"neon",	FPUTYPE_NEON}
++  {"fpa",		ARM_FP_MODEL_FPA, 0, 0, false, false},
++  {"fpe2",		ARM_FP_MODEL_FPA, 2, 0, false, false},
++  {"fpe3",		ARM_FP_MODEL_FPA, 3, 0, false, false},
++  {"maverick",		ARM_FP_MODEL_MAVERICK, 0, 0, false, false},
++  {"vfp",		ARM_FP_MODEL_VFP, 2, VFP_REG_D16, false, false},
++  {"vfpv3",		ARM_FP_MODEL_VFP, 3, VFP_REG_D32, false, false},
++  {"vfpv3-fp16",	ARM_FP_MODEL_VFP, 3, VFP_REG_D32, false, true },
++  {"vfpv3-d16",		ARM_FP_MODEL_VFP, 3, VFP_REG_D16, false, false},
++  {"vfpv3xd",		ARM_FP_MODEL_VFP, 3, VFP_REG_SINGLE, false, false},
++  {"vfpv3xd-fp16",	ARM_FP_MODEL_VFP, 3, VFP_REG_SINGLE, false, true },
++  {"vfpv3-d16-fp16",	ARM_FP_MODEL_VFP, 3, VFP_REG_D16, false, true },
++  {"neon",		ARM_FP_MODEL_VFP, 3, VFP_REG_D32, true , false},
++  {"neon-fp16",		ARM_FP_MODEL_VFP, 3, VFP_REG_D32, true , true },
++  {"vfpv4",		ARM_FP_MODEL_VFP, 4, VFP_REG_D32, false, true },
++  {"vfpv4-d16",		ARM_FP_MODEL_VFP, 4, VFP_REG_D16, false, true },
++  {"fpv4-sp-d16",	ARM_FP_MODEL_VFP, 4, VFP_REG_SINGLE, false, true },
++  {"neon-vfpv4",	ARM_FP_MODEL_VFP, 4, VFP_REG_D32, true , true },
++  /* Compatibility aliases.  */
++  {"vfp3",		ARM_FP_MODEL_VFP, 3, VFP_REG_D32, false, false},
+ };
+ 
+-
+-/* Floating point models used by the different hardware.
+-   See fputype in arm.h.  */
+-
+-static const enum fputype fp_model_for_fpu[] =
+-{
+-  /* No FP hardware.  */
+-  ARM_FP_MODEL_UNKNOWN,		/* FPUTYPE_NONE  */
+-  ARM_FP_MODEL_FPA,		/* FPUTYPE_FPA  */
+-  ARM_FP_MODEL_FPA,		/* FPUTYPE_FPA_EMU2  */
+-  ARM_FP_MODEL_FPA,		/* FPUTYPE_FPA_EMU3  */
+-  ARM_FP_MODEL_MAVERICK,	/* FPUTYPE_MAVERICK  */
+-  ARM_FP_MODEL_VFP,		/* FPUTYPE_VFP  */
+-  ARM_FP_MODEL_VFP,		/* FPUTYPE_VFP3D16  */
+-  ARM_FP_MODEL_VFP,		/* FPUTYPE_VFP3  */
+-  ARM_FP_MODEL_VFP		/* FPUTYPE_NEON  */
+-};
+-
+-
+ struct float_abi
+ {
+   const char * name;
+@@ -766,6 +847,23 @@
+ };
+ 
+ 
++struct fp16_format
++{
++  const char *name;
++  enum arm_fp16_format_type fp16_format_type;
++};
++
++
++/* Available values for -mfp16-format=.  */
++
++static const struct fp16_format all_fp16_formats[] =
++{
++  {"none",		ARM_FP16_FORMAT_NONE},
++  {"ieee",		ARM_FP16_FORMAT_IEEE},
++  {"alternative",	ARM_FP16_FORMAT_ALTERNATIVE}
++};
++
++
+ struct abi_name
+ {
+   const char *name;
+@@ -924,6 +1022,44 @@
+   set_optab_libfunc (smod_optab, SImode, NULL);
+   set_optab_libfunc (umod_optab, SImode, NULL);
+ 
++  /* Half-precision float operations.  The compiler handles all operations
++     with NULL libfuncs by converting the SFmode.  */
++  switch (arm_fp16_format)
++    {
++    case ARM_FP16_FORMAT_IEEE:
++    case ARM_FP16_FORMAT_ALTERNATIVE:
++
++      /* Conversions.  */
++      set_conv_libfunc (trunc_optab, HFmode, SFmode,
++			(arm_fp16_format == ARM_FP16_FORMAT_IEEE
++			 ? "__aeabi_f2h"
++			 : "__aeabi_f2h_alt"));
++      set_conv_libfunc (sext_optab, SFmode, HFmode, 
++			(arm_fp16_format == ARM_FP16_FORMAT_IEEE
++			 ? "__aeabi_h2f"
++			 : "__aeabi_h2f_alt"));
++      
++      /* Arithmetic.  */
++      set_optab_libfunc (add_optab, HFmode, NULL);
++      set_optab_libfunc (sdiv_optab, HFmode, NULL);
++      set_optab_libfunc (smul_optab, HFmode, NULL);
++      set_optab_libfunc (neg_optab, HFmode, NULL);
++      set_optab_libfunc (sub_optab, HFmode, NULL);
++
++      /* Comparisons.  */
++      set_optab_libfunc (eq_optab, HFmode, NULL);
++      set_optab_libfunc (ne_optab, HFmode, NULL);
++      set_optab_libfunc (lt_optab, HFmode, NULL);
++      set_optab_libfunc (le_optab, HFmode, NULL);
++      set_optab_libfunc (ge_optab, HFmode, NULL);
++      set_optab_libfunc (gt_optab, HFmode, NULL);
++      set_optab_libfunc (unord_optab, HFmode, NULL);
++      break;
++
++    default:
++      break;
++    }
++
+   if (TARGET_AAPCS_BASED)
+     synchronize_libfunc = init_one_libfunc ("__sync_synchronize");
+ }
+@@ -1139,6 +1275,7 @@
+ arm_override_options (void)
+ {
+   unsigned i;
++  int len;
+   enum processor_type target_arch_cpu = arm_none;
+   enum processor_type selected_cpu = arm_none;
+ 
+@@ -1156,7 +1293,11 @@
+               {
+ 		/* Set the architecture define.  */
+ 		if (i != ARM_OPT_SET_TUNE)
+-		  sprintf (arm_arch_name, "__ARM_ARCH_%s__", sel->arch);
++		  {
++		    len = snprintf (arm_arch_name, ARM_ARCH_NAME_SIZE,
++				    "__ARM_ARCH_%s__", sel->arch);
++		    gcc_assert (len < ARM_ARCH_NAME_SIZE);
++		  }
+ 
+ 		/* Determine the processor core for which we should
+ 		   tune code-generation.  */
+@@ -1182,8 +1323,8 @@
+ 		       make sure that they are compatible.  We only generate
+ 		       a warning though, and we prefer the CPU over the
+ 		       architecture.  */
+-		    if (insn_flags != 0 && (insn_flags ^ sel->flags))
+-		      warning (0, "switch -mcpu=%s conflicts with -march= switch",
++		    if (insn_flags != 0 && ((insn_flags ^ sel->flags) & ~FL_COMPAT))
++		      warning (0, "switch -mcpu=%s conflicts with -march= switch, assuming CPU feature set",
+ 			       ptr->string);
+ 
+ 		    insn_flags = sel->flags;
+@@ -1283,7 +1424,11 @@
+ 
+ 	  insn_flags = sel->flags;
+ 	}
+-      sprintf (arm_arch_name, "__ARM_ARCH_%s__", sel->arch);
++
++      len = snprintf (arm_arch_name, ARM_ARCH_NAME_SIZE,
++		      "__ARM_ARCH_%s__", sel->arch);
++      gcc_assert (len < ARM_ARCH_NAME_SIZE);
++
+       arm_default_cpu = (enum processor_type) (sel - all_cores);
+       if (arm_tune == arm_none)
+ 	arm_tune = arm_default_cpu;
+@@ -1293,8 +1438,35 @@
+      chosen.  */
+   gcc_assert (arm_tune != arm_none);
+ 
++  if (arm_tune == cortexa8 && optimize >= 3)
++    {
++      /* These alignments were experimentally determined to improve SPECint
++	 performance on SPECCPU 2000.  */
++      if (align_functions <= 0)
++	align_functions = 16;
++      if (align_jumps <= 0)
++	align_jumps = 16;
++    }
++
+   tune_flags = all_cores[(int)arm_tune].flags;
+ 
++  if (target_fp16_format_name)
++    {
++      for (i = 0; i < ARRAY_SIZE (all_fp16_formats); i++)
++	{
++	  if (streq (all_fp16_formats[i].name, target_fp16_format_name))
++	    {
++	      arm_fp16_format = all_fp16_formats[i].fp16_format_type;
++	      break;
++	    }
++	}
++      if (i == ARRAY_SIZE (all_fp16_formats))
++	error ("invalid __fp16 format option: -mfp16-format=%s",
++	       target_fp16_format_name);
++    }
++  else
++    arm_fp16_format = ARM_FP16_FORMAT_NONE;
++
+   if (target_abi_name)
+     {
+       for (i = 0; i < ARRAY_SIZE (arm_all_abis); i++)
+@@ -1387,6 +1559,7 @@
+   arm_arch6 = (insn_flags & FL_ARCH6) != 0;
+   arm_arch6k = (insn_flags & FL_ARCH6K) != 0;
+   arm_arch_notm = (insn_flags & FL_NOTM) != 0;
++  arm_arch7em = (insn_flags & FL_ARCH7EM) != 0;
+   arm_arch_thumb2 = (insn_flags & FL_THUMB2) != 0;
+   arm_arch_xscale = (insn_flags & FL_XSCALE) != 0;
+   arm_arch_cirrus = (insn_flags & FL_CIRRUS) != 0;
+@@ -1394,12 +1567,25 @@
+   arm_ld_sched = (tune_flags & FL_LDSCHED) != 0;
+   arm_tune_strongarm = (tune_flags & FL_STRONG) != 0;
+   thumb_code = (TARGET_ARM == 0);
++  janus2_code = (TARGET_FIX_JANUS != 0);
++  if (janus2_code && TARGET_THUMB2)
++    error ("janus2 fix is not applicable when targeting a thumb2 core");
+   arm_tune_wbuf = (tune_flags & FL_WBUF) != 0;
+   arm_tune_xscale = (tune_flags & FL_XSCALE) != 0;
++  arm_tune_marvell_f = (tune_flags & FL_MARVELL_F) != 0;
+   arm_arch_iwmmxt = (insn_flags & FL_IWMMXT) != 0;
+-  arm_arch_hwdiv = (insn_flags & FL_DIV) != 0;
+   arm_tune_cortex_a9 = (arm_tune == cortexa9) != 0;
+ 
++ /* Hardware integer division is supported by some variants of the ARM
++    architecture in Thumb-2 mode.  In addition some (but not all) Marvell
++    CPUs support their own hardware integer division instructions.
++    The assembler will pick the correct encoding.  */
++  if (TARGET_MARVELL_DIV && (insn_flags & FL_MARVELL_F) == 0)
++    error ("-mmarvell-div is only supported when targeting a Marvell core");
++
++  arm_arch_hwdiv = (TARGET_ARM && TARGET_MARVELL_DIV)
++		   || (TARGET_THUMB2 && (insn_flags & FL_DIV) != 0);
++
+   /* If we are not using the default (ARM mode) section anchor offset
+      ranges, then set the correct ranges now.  */
+   if (TARGET_THUMB1)
+@@ -1438,7 +1624,6 @@
+   if (TARGET_IWMMXT_ABI && !TARGET_IWMMXT)
+     error ("iwmmxt abi requires an iwmmxt capable cpu");
+ 
+-  arm_fp_model = ARM_FP_MODEL_UNKNOWN;
+   if (target_fpu_name == NULL && target_fpe_name != NULL)
+     {
+       if (streq (target_fpe_name, "2"))
+@@ -1449,46 +1634,52 @@
+ 	error ("invalid floating point emulation option: -mfpe=%s",
+ 	       target_fpe_name);
+     }
+-  if (target_fpu_name != NULL)
+-    {
+-      /* The user specified a FPU.  */
+-      for (i = 0; i < ARRAY_SIZE (all_fpus); i++)
+-	{
+-	  if (streq (all_fpus[i].name, target_fpu_name))
+-	    {
+-	      arm_fpu_arch = all_fpus[i].fpu;
+-	      arm_fpu_tune = arm_fpu_arch;
+-	      arm_fp_model = fp_model_for_fpu[arm_fpu_arch];
+-	      break;
+-	    }
+-	}
+-      if (arm_fp_model == ARM_FP_MODEL_UNKNOWN)
+-	error ("invalid floating point option: -mfpu=%s", target_fpu_name);
+-    }
+-  else
++
++  if (target_fpu_name == NULL)
+     {
+ #ifdef FPUTYPE_DEFAULT
+-      /* Use the default if it is specified for this platform.  */
+-      arm_fpu_arch = FPUTYPE_DEFAULT;
+-      arm_fpu_tune = FPUTYPE_DEFAULT;
++      target_fpu_name = FPUTYPE_DEFAULT;
+ #else
+-      /* Pick one based on CPU type.  */
+-      /* ??? Some targets assume FPA is the default.
+-      if ((insn_flags & FL_VFP) != 0)
+-	arm_fpu_arch = FPUTYPE_VFP;
+-      else
+-      */
+       if (arm_arch_cirrus)
+-	arm_fpu_arch = FPUTYPE_MAVERICK;
++	target_fpu_name = "maverick";
+       else
+-	arm_fpu_arch = FPUTYPE_FPA_EMU2;
++	target_fpu_name = "fpe2";
+ #endif
+-      if (tune_flags & FL_CO_PROC && arm_fpu_arch == FPUTYPE_FPA_EMU2)
+-	arm_fpu_tune = FPUTYPE_FPA;
++    }
++
++  arm_fpu_desc = NULL;
++  for (i = 0; i < ARRAY_SIZE (all_fpus); i++)
++    {
++      if (streq (all_fpus[i].name, target_fpu_name))
++	{
++	  arm_fpu_desc = &all_fpus[i];
++	  break;
++	}
++    }
++  if (!arm_fpu_desc)
++    error ("invalid floating point option: -mfpu=%s", target_fpu_name);
++
++  switch (arm_fpu_desc->model)
++    {
++    case ARM_FP_MODEL_FPA:
++      if (arm_fpu_desc->rev == 2)
++	arm_fpu_attr = FPU_FPE2;
++      else if (arm_fpu_desc->rev == 3)
++	arm_fpu_attr = FPU_FPE3;
+       else
+-	arm_fpu_tune = arm_fpu_arch;
+-      arm_fp_model = fp_model_for_fpu[arm_fpu_arch];
+-      gcc_assert (arm_fp_model != ARM_FP_MODEL_UNKNOWN);
++	arm_fpu_attr = FPU_FPA;
++      break;
++
++    case ARM_FP_MODEL_MAVERICK:
++      arm_fpu_attr = FPU_MAVERICK;
++      break;
++
++    case ARM_FP_MODEL_VFP:
++      arm_fpu_attr = FPU_VFP;
++      break;
++
++    default:
++      gcc_unreachable();
+     }
+ 
+   if (target_float_abi_name != NULL)
+@@ -1509,9 +1700,6 @@
+   else
+     arm_float_abi = TARGET_DEFAULT_FLOAT_ABI;
+ 
+-  if (arm_float_abi == ARM_FLOAT_ABI_HARD && TARGET_VFP)
+-    sorry ("-mfloat-abi=hard and VFP");
+-
+   /* FPA and iWMMXt are incompatible because the insn encodings overlap.
+      VFP and iWMMXt can theoretically coexist, but it's unlikely such silicon
+      will ever exist.  GCC makes no attempt to support this combination.  */
+@@ -1522,15 +1710,40 @@
+   if (TARGET_THUMB2 && TARGET_IWMMXT)
+     sorry ("Thumb-2 iWMMXt");
+ 
++  /* __fp16 support currently assumes the core has ldrh.  */
++  if (!arm_arch4 && arm_fp16_format != ARM_FP16_FORMAT_NONE)
++    sorry ("__fp16 and no ldrh");
++
+   /* If soft-float is specified then don't use FPU.  */
+   if (TARGET_SOFT_FLOAT)
+-    arm_fpu_arch = FPUTYPE_NONE;
++    arm_fpu_attr = FPU_NONE;
++
++  if (TARGET_AAPCS_BASED)
++    {
++      if (arm_abi == ARM_ABI_IWMMXT)
++	arm_pcs_default = ARM_PCS_AAPCS_IWMMXT;
++      else if (arm_float_abi == ARM_FLOAT_ABI_HARD
++	       && TARGET_HARD_FLOAT
++	       && TARGET_VFP)
++	arm_pcs_default = ARM_PCS_AAPCS_VFP;
++      else
++	arm_pcs_default = ARM_PCS_AAPCS;
++    }
++  else
++    {
++      if (arm_float_abi == ARM_FLOAT_ABI_HARD && TARGET_VFP)
++	sorry ("-mfloat-abi=hard and VFP");
++
++      if (arm_abi == ARM_ABI_APCS)
++	arm_pcs_default = ARM_PCS_APCS;
++      else
++	arm_pcs_default = ARM_PCS_ATPCS;
++    }
+ 
+   /* For arm2/3 there is no need to do any scheduling if there is only
+      a floating point emulator, or we are doing software floating-point.  */
+   if ((TARGET_SOFT_FLOAT
+-       || arm_fpu_tune == FPUTYPE_FPA_EMU2
+-       || arm_fpu_tune == FPUTYPE_FPA_EMU3)
++       || (TARGET_FPA && arm_fpu_desc->rev))
+       && (tune_flags & FL_MODE32) == 0)
+     flag_schedule_insns = flag_schedule_insns_after_reload = 0;
+ 
+@@ -1620,8 +1833,7 @@
+ 	fix_cm3_ldrd = 0;
+     }
+ 
+-  /* ??? We might want scheduling for thumb2.  */
+-  if (TARGET_THUMB && flag_schedule_insns)
++  if (TARGET_THUMB1 && flag_schedule_insns)
+     {
+       /* Don't warn since it's on by default in -O2.  */
+       flag_schedule_insns = 0;
+@@ -1655,15 +1867,38 @@
+         max_insns_skipped = 3;
+     }
+ 
+-  /* Ideally we would want to use CFI directives to generate
+-     debug info.  However this also creates the .eh_frame
+-     section, so disable them until GAS can handle
+-     this properly.  See PR40521. */
+-  if (TARGET_AAPCS_BASED)
+-    flag_dwarf2_cfi_asm = 0;
+-
+   /* Register global variables with the garbage collector.  */
+   arm_add_gc_roots ();
++
++  if (low_irq_latency && TARGET_THUMB)
++    {
++      warning (0, 
++	       "-low-irq-latency has no effect when compiling for the Thumb");
++      low_irq_latency = 0;
++    }
++
++  /* CSL LOCAL */
++  /* Loop unrolling can be a substantial win.  At -O2, limit to 2x
++     unrolling by default to prevent excessive code growth; at -O3,
++     limit to 4x unrolling by default.  We know we are not optimizing
++     for size if this is set (see arm_optimization_options).  */
++  if (flag_unroll_loops == 2)
++    {
++      if (optimize == 2)
++	{
++	  flag_unroll_loops = 1;
++	  if (!PARAM_SET_P (PARAM_MAX_UNROLL_TIMES))
++	    set_param_value ("max-unroll-times", 2);
++	}
++      else if (optimize > 2)
++	{
++	  flag_unroll_loops = 1;
++	  if (!PARAM_SET_P (PARAM_MAX_UNROLL_TIMES))
++	    set_param_value ("max-unroll-times", 4);
++	}
++      else
++	flag_unroll_loops = 0;
++    }
+ }
+ 
+ static void
+@@ -1793,6 +2028,14 @@
+   return !IS_NAKED (arm_current_func_type ());
+ }
+ 
++static bool
++arm_warn_func_result (void)
++{
++  /* Naked functions are implemented entirely in assembly, including the
++     return sequence, so suppress warnings about this.  */
++  return !IS_NAKED (arm_current_func_type ());
++}
++
+ 
+ /* Return 1 if it is possible to return using a single instruction.
+    If SIBLING is non-null, this is a test for a return before a sibling
+@@ -2821,13 +3064,82 @@
+    immediate value easier to load.  */
+ 
+ enum rtx_code
+-arm_canonicalize_comparison (enum rtx_code code, enum machine_mode mode,
+-			     rtx * op1)
++arm_canonicalize_comparison (enum rtx_code code, rtx *op0, rtx *op1)
+ {
+-  unsigned HOST_WIDE_INT i = INTVAL (*op1);
+-  unsigned HOST_WIDE_INT maxval;
++  enum machine_mode mode;
++  unsigned HOST_WIDE_INT i, maxval;
++
++  mode = GET_MODE (*op0);
++  if (mode == VOIDmode)
++    mode = GET_MODE (*op1);
++
+   maxval = (((unsigned HOST_WIDE_INT) 1) << (GET_MODE_BITSIZE(mode) - 1)) - 1;
+ 
++  /* For DImode, we have GE/LT/GEU/LTU comparisons.  In ARM mode
++     we can also use cmp/cmpeq for GTU/LEU.  GT/LE must be either
++     reversed or (for constant OP1) adjusted to GE/LT.  Similarly
++     for GTU/LEU in Thumb mode.  */
++  if (mode == DImode)
++    {
++      rtx tem;
++
++      /* To keep things simple, always use the Cirrus cfcmp64 if it is
++	 available.  */
++      if (TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK)
++	return code;
++
++      if (code == GT || code == LE
++	  || (!TARGET_ARM && (code == GTU || code == LEU)))
++	{
++	  /* Missing comparison.  First try to use an available
++	     comparison.  */
++	  if (GET_CODE (*op1) == CONST_INT)
++	    {
++	      i = INTVAL (*op1);
++	      switch (code)
++		{
++		case GT:
++		case LE:
++		  if (i != maxval
++		      && arm_const_double_by_immediates (GEN_INT (i + 1)))
++		    {
++		      *op1 = GEN_INT (i + 1);
++		      return code == GT ? GE : LT;
++		    }
++		  break;
++		case GTU:
++		case LEU:
++		  if (i != ~((unsigned HOST_WIDE_INT) 0)
++		      && arm_const_double_by_immediates (GEN_INT (i + 1)))
++		    {
++		      *op1 = GEN_INT (i + 1);
++		      return code == GTU ? GEU : LTU;
++		    }
++		  break;
++		default:
++		  gcc_unreachable ();
++		}
++	    }
++
++	  /* If that did not work, reverse the condition.  */
++	  tem = *op0;
++	  *op0 = *op1;
++	  *op1 = tem;
++	  return swap_condition (code);
++	}
++
++      return code;
++    }
++
++  /* Comparisons smaller than DImode.  Only adjust comparisons against
++     an out-of-range constant.  */
++  if (GET_CODE (*op1) != CONST_INT
++      || const_ok_for_arm (INTVAL (*op1))
++      || const_ok_for_arm (- INTVAL (*op1)))
++    return code;
++
++  i = INTVAL (*op1);
++
+   switch (code)
+     {
+     case EQ:
+@@ -2884,14 +3196,19 @@
+ 
+ /* Define how to find the value returned by a function.  */
+ 
+-rtx
+-arm_function_value(const_tree type, const_tree func ATTRIBUTE_UNUSED)
++static rtx
++arm_function_value(const_tree type, const_tree func,
++		   bool outgoing ATTRIBUTE_UNUSED)
+ {
+   enum machine_mode mode;
+   int unsignedp ATTRIBUTE_UNUSED;
+   rtx r ATTRIBUTE_UNUSED;
+ 
+   mode = TYPE_MODE (type);
++
++  if (TARGET_AAPCS_BASED)
++    return aapcs_allocate_return_reg (mode, type, func);
++
+   /* Promote integer types.  */
+   if (INTEGRAL_TYPE_P (type))
+     PROMOTE_FUNCTION_MODE (mode, unsignedp, type);
+@@ -2908,7 +3225,57 @@
+ 	}
+     }
+ 
+-  return LIBCALL_VALUE(mode);
++  return LIBCALL_VALUE (mode);
++}
++
++rtx
++arm_libcall_value (enum machine_mode mode, rtx libcall)
++{
++  if (TARGET_AAPCS_BASED && arm_pcs_default != ARM_PCS_AAPCS
++      && GET_MODE_CLASS (mode) == MODE_FLOAT)
++    {
++      /* The following libcalls return their result in integer registers,
++	 even though they return a floating point value.  */
++      if (rtx_equal_p (libcall,
++		       convert_optab_libfunc (sfloat_optab, mode, SImode))
++	  || rtx_equal_p (libcall,
++			  convert_optab_libfunc (ufloat_optab, mode, SImode))
++	  || rtx_equal_p (libcall,
++			  convert_optab_libfunc (sfloat_optab, mode, DImode))
++	  || rtx_equal_p (libcall,
++			  convert_optab_libfunc (ufloat_optab, mode, DImode))
++	  || rtx_equal_p (libcall,
++			  convert_optab_libfunc (trunc_optab, HFmode, SFmode))
++	  || rtx_equal_p (libcall,
++			  convert_optab_libfunc (sext_optab, SFmode, HFmode)))
++	return gen_rtx_REG (mode, ARG_REGISTER(1));
++
++      /* Values from double-precision helper functions are returned in core
++	 registers if the selected core only supports single-precision
++	 arithmetic, even if we are using the hard-float ABI.  */
++      if (TARGET_VFP
++	  && (rtx_equal_p (libcall, optab_libfunc (add_optab, DFmode))
++	      || rtx_equal_p (libcall, optab_libfunc (sdiv_optab, DFmode))
++	      || rtx_equal_p (libcall, optab_libfunc (smul_optab, DFmode))
++	      || rtx_equal_p (libcall, optab_libfunc (neg_optab, DFmode))
++	      || rtx_equal_p (libcall, optab_libfunc (sub_optab, DFmode))
++	      || rtx_equal_p (libcall, optab_libfunc (eq_optab, DFmode))
++	      || rtx_equal_p (libcall, optab_libfunc (lt_optab, DFmode))
++	      || rtx_equal_p (libcall, optab_libfunc (le_optab, DFmode))
++	      || rtx_equal_p (libcall, optab_libfunc (ge_optab, DFmode))
++	      || rtx_equal_p (libcall, optab_libfunc (gt_optab, DFmode))
++	      || rtx_equal_p (libcall, optab_libfunc (unord_optab, DFmode))
++	      || rtx_equal_p (libcall, convert_optab_libfunc (sext_optab,
++							      DFmode, SFmode))
++	      || rtx_equal_p (libcall, convert_optab_libfunc (trunc_optab,
++							      SFmode, DFmode))))
++        return gen_rtx_REG (mode, ARG_REGISTER (1));
++
++      /* XXX There are other libcalls that return in integer registers,
++	 but I think they are all handled by hard insns.  */
++    }
++
++  return LIBCALL_VALUE (mode);
+ }
+ 
+ /* Determine the amount of memory needed to store the possible return
+@@ -2918,10 +3285,12 @@
+ {
+   int size = 16;
+ 
+-  if (TARGET_ARM)
++  if (TARGET_32BIT)
+     {
+       if (TARGET_HARD_FLOAT_ABI)
+ 	{
++	  if (TARGET_VFP)
++	    size += 32;
+ 	  if (TARGET_FPA)
+ 	    size += 12;
+ 	  if (TARGET_MAVERICK)
+@@ -2934,27 +3303,56 @@
+   return size;
+ }
+ 
+-/* Decide whether a type should be returned in memory (true)
+-   or in a register (false).  This is called as the target hook
+-   TARGET_RETURN_IN_MEMORY.  */
++/* Decide whether TYPE should be returned in memory (true)
++   or in a register (false).  FNTYPE is the type of the function making
++   the call.  */
+ static bool
+-arm_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED)
++arm_return_in_memory (const_tree type, const_tree fntype)
+ {
+   HOST_WIDE_INT size;
+ 
+-  size = int_size_in_bytes (type);
++  size = int_size_in_bytes (type);  /* Negative if not fixed size.  */
++
++  if (TARGET_AAPCS_BASED)
++    {
++      /* Simple, non-aggregate types (ie not including vectors and
++	 complex) are always returned in a register (or registers).
++	 We don't care about which register here, so we can short-cut
++	 some of the detail.  */
++      if (!AGGREGATE_TYPE_P (type)
++	  && TREE_CODE (type) != VECTOR_TYPE
++	  && TREE_CODE (type) != COMPLEX_TYPE)
++	return false;
++
++      /* Any return value that is no larger than one word can be
++	 returned in r0.  */
++      if (((unsigned HOST_WIDE_INT) size) <= UNITS_PER_WORD)
++	return false;
++
++      /* Check any available co-processors to see if they accept the
++	 type as a register candidate (VFP, for example, can return
++	 some aggregates in consecutive registers).  These aren't
++	 available if the call is variadic.  */
++      if (aapcs_select_return_coproc (type, fntype) >= 0)
++	return false;
++
++      /* Vector values should be returned using ARM registers, not
++	 memory (unless they're over 16 bytes, which will break since
++	 we only have four call-clobbered registers to play with).  */
++      if (TREE_CODE (type) == VECTOR_TYPE)
++	return (size < 0 || size > (4 * UNITS_PER_WORD));
++
++      /* The rest go in memory.  */
++      return true;
++    }
+ 
+-  /* Vector values should be returned using ARM registers, not memory (unless
+-     they're over 16 bytes, which will break since we only have four
+-     call-clobbered registers to play with).  */
+   if (TREE_CODE (type) == VECTOR_TYPE)
+     return (size < 0 || size > (4 * UNITS_PER_WORD));
+ 
+   if (!AGGREGATE_TYPE_P (type) &&
+-      !(TARGET_AAPCS_BASED && TREE_CODE (type) == COMPLEX_TYPE))
+-    /* All simple types are returned in registers.
+-       For AAPCS, complex types are treated the same as aggregates.  */
+-    return 0;
++      (TREE_CODE (type) != VECTOR_TYPE))
++    /* All simple types are returned in registers.  */
++    return false;
+ 
+   if (arm_abi != ARM_ABI_APCS)
+     {
+@@ -2971,7 +3369,7 @@
+      the aggregate is either huge or of variable size, and in either case
+      we will want to return it via memory and not in a register.  */
+   if (size < 0 || size > UNITS_PER_WORD)
+-    return 1;
++    return true;
+ 
+   if (TREE_CODE (type) == RECORD_TYPE)
+     {
+@@ -2991,18 +3389,18 @@
+ 	continue;
+ 
+       if (field == NULL)
+-	return 0; /* An empty structure.  Allowed by an extension to ANSI C.  */
++	return false; /* An empty structure.  Allowed by an extension to ANSI C.  */
+ 
+       /* Check that the first field is valid for returning in a register.  */
+ 
+       /* ... Floats are not allowed */
+       if (FLOAT_TYPE_P (TREE_TYPE (field)))
+-	return 1;
++	return true;
+ 
+       /* ... Aggregates that are not themselves valid for returning in
+ 	 a register are not allowed.  */
+       if (arm_return_in_memory (TREE_TYPE (field), NULL_TREE))
+-	return 1;
++	return true;
+ 
+       /* Now check the remaining fields, if any.  Only bitfields are allowed,
+ 	 since they are not addressable.  */
+@@ -3014,10 +3412,10 @@
+ 	    continue;
+ 
+ 	  if (!DECL_BIT_FIELD_TYPE (field))
+-	    return 1;
++	    return true;
+ 	}
+ 
+-      return 0;
++      return false;
+     }
+ 
+   if (TREE_CODE (type) == UNION_TYPE)
+@@ -3034,18 +3432,18 @@
+ 	    continue;
+ 
+ 	  if (FLOAT_TYPE_P (TREE_TYPE (field)))
+-	    return 1;
++	    return true;
+ 
+ 	  if (arm_return_in_memory (TREE_TYPE (field), NULL_TREE))
+-	    return 1;
++	    return true;
+ 	}
+ 
+-      return 0;
++      return false;
+     }
+ #endif /* not ARM_WINCE */
+ 
+   /* Return all other types in memory.  */
+-  return 1;
++  return true;
+ }
+ 
+ /* Indicate whether or not words of a double are in big-endian order.  */
+@@ -3070,60 +3468,851 @@
+   return 1;
+ }
+ 
+-/* Initialize a variable CUM of type CUMULATIVE_ARGS
+-   for a call to a function whose data type is FNTYPE.
+-   For a library call, FNTYPE is NULL.  */
+-void
+-arm_init_cumulative_args (CUMULATIVE_ARGS *pcum, tree fntype,
+-			  rtx libname  ATTRIBUTE_UNUSED,
+-			  tree fndecl ATTRIBUTE_UNUSED)
++const struct pcs_attribute_arg
+ {
+-  /* On the ARM, the offset starts at 0.  */
+-  pcum->nregs = 0;
+-  pcum->iwmmxt_nregs = 0;
+-  pcum->can_split = true;
++  const char *arg;
++  enum arm_pcs value;
++} pcs_attribute_args[] =
++  {
++    {"aapcs", ARM_PCS_AAPCS},
++    {"aapcs-vfp", ARM_PCS_AAPCS_VFP},
++    {"aapcs-iwmmxt", ARM_PCS_AAPCS_IWMMXT},
++    {"atpcs", ARM_PCS_ATPCS},
++    {"apcs", ARM_PCS_APCS},
++    {NULL, ARM_PCS_UNKNOWN}
++  };
+ 
+-  /* Varargs vectors are treated the same as long long.
+-     named_count avoids having to change the way arm handles 'named' */
+-  pcum->named_count = 0;
+-  pcum->nargs = 0;
++static enum arm_pcs
++arm_pcs_from_attribute (tree attr)
++{
++  const struct pcs_attribute_arg *ptr;
++  const char *arg;
+ 
+-  if (TARGET_REALLY_IWMMXT && fntype)
+-    {
+-      tree fn_arg;
++  /* Get the value of the argument.  */
++  if (TREE_VALUE (attr) == NULL_TREE
++      || TREE_CODE (TREE_VALUE (attr)) != STRING_CST)
++    return ARM_PCS_UNKNOWN;
+ 
+-      for (fn_arg = TYPE_ARG_TYPES (fntype);
+-	   fn_arg;
+-	   fn_arg = TREE_CHAIN (fn_arg))
+-	pcum->named_count += 1;
++  arg = TREE_STRING_POINTER (TREE_VALUE (attr));
+ 
+-      if (! pcum->named_count)
+-	pcum->named_count = INT_MAX;
+-    }
+-}
++  /* Check it against the list of known arguments.  */
++  for (ptr = pcs_attribute_args; ptr->arg != NULL; ptr++)
++    if (streq (arg, ptr->arg))
++      return ptr->value;
+ 
++  /* An unrecognized interrupt type.  */
++  return ARM_PCS_UNKNOWN;
++}
+ 
+-/* Return true if mode/type need doubleword alignment.  */
+-bool
+-arm_needs_doubleword_align (enum machine_mode mode, tree type)
++/* Get the PCS variant to use for this call.  TYPE is the function's type
++   specification, DECL is the specific declartion.  DECL may be null if
++   the call could be indirect or if this is a library call.  */
++static enum arm_pcs
++arm_get_pcs_model (const_tree type, const_tree decl)
+ {
+-  return (GET_MODE_ALIGNMENT (mode) > PARM_BOUNDARY
+-	  || (type && TYPE_ALIGN (type) > PARM_BOUNDARY));
+-}
++  bool user_convention = false;
++  enum arm_pcs user_pcs = arm_pcs_default;
++  tree attr;
+ 
++  gcc_assert (type);
+ 
+-/* Determine where to put an argument to a function.
+-   Value is zero to push the argument on the stack,
+-   or a hard register in which to store the argument.
++  attr = lookup_attribute ("pcs", TYPE_ATTRIBUTES (type));
++  if (attr)
++    {
++      user_pcs = arm_pcs_from_attribute (TREE_VALUE (attr));
++      user_convention = true;
++    }
+ 
+-   MODE is the argument's machine mode.
+-   TYPE is the data type of the argument (as a tree).
+-    This is null for libcalls where that information may
+-    not be available.
+-   CUM is a variable of type CUMULATIVE_ARGS which gives info about
+-    the preceding args and about the function being called.
+-   NAMED is nonzero if this argument is a named parameter
+-    (otherwise it is an extra parameter matching an ellipsis).  */
++  if (TARGET_AAPCS_BASED)
++    {
++      /* Detect varargs functions.  These always use the base rules
++	 (no argument is ever a candidate for a co-processor
++	 register).  */
++      bool base_rules = (TYPE_ARG_TYPES (type) != 0
++			 && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (type)))
++			     != void_type_node));
++      
++      if (user_convention)
++	{
++	  if (user_pcs > ARM_PCS_AAPCS_LOCAL)
++	    sorry ("Non-AAPCS derived PCS variant");
++	  else if (base_rules && user_pcs != ARM_PCS_AAPCS)
++	    error ("Variadic functions must use the base AAPCS variant");
++	}
++
++      if (base_rules)
++	return ARM_PCS_AAPCS;
++      else if (user_convention)
++	return user_pcs;
++      else if (decl && flag_unit_at_a_time)
++	{
++	  /* Local functions never leak outside this compilation unit,
++	     so we are free to use whatever conventions are
++	     appropriate.  */
++	  /* FIXME: remove CONST_CAST_TREE when cgraph is constified.  */
++	  struct cgraph_local_info *i = cgraph_local_info (CONST_CAST_TREE(decl));
++	  if (i && i->local)
++	    return ARM_PCS_AAPCS_LOCAL;
++	}
++    }
++  else if (user_convention && user_pcs != arm_pcs_default)
++    sorry ("PCS variant");
++
++  /* For everything else we use the target's default.  */
++  return arm_pcs_default;
++}
++
++
++static void
++aapcs_vfp_cum_init (CUMULATIVE_ARGS *pcum  ATTRIBUTE_UNUSED,
++		    const_tree fntype ATTRIBUTE_UNUSED,
++		    rtx libcall ATTRIBUTE_UNUSED, 
++		    const_tree fndecl ATTRIBUTE_UNUSED)
++{
++  /* Record the unallocated VFP registers.  */
++  pcum->aapcs_vfp_regs_free = (1 << NUM_VFP_ARG_REGS) - 1;
++  pcum->aapcs_vfp_reg_alloc = 0;
++}
++
++/* Walk down the type tree of TYPE counting consecutive base elements.
++   If *MODEP is VOIDmode, then set it to the first valid floating point
++   type.  If a non-floating point type is found, or if a floating point
++   type that doesn't match a non-VOIDmode *MODEP is found, then return -1,
++   otherwise return the count in the sub-tree.  */
++static int
++aapcs_vfp_sub_candidate (const_tree type, enum machine_mode *modep)
++{
++  enum machine_mode mode;
++  HOST_WIDE_INT size;
++
++  switch (TREE_CODE (type))
++    {
++    case REAL_TYPE:
++      mode = TYPE_MODE (type);
++      if (mode != DFmode && mode != SFmode)
++	return -1;
++
++      if (*modep == VOIDmode)
++	*modep = mode;
++
++      if (*modep == mode)
++	return 1;
++
++      break;
++
++    case COMPLEX_TYPE:
++      mode = TYPE_MODE (TREE_TYPE (type));
++      if (mode != DFmode && mode != SFmode)
++	return -1;
++
++      if (*modep == VOIDmode)
++	*modep = mode;
++
++      if (*modep == mode)
++	return 2;
++
++      break;
++
++    case VECTOR_TYPE:
++      /* Use V2SImode and V4SImode as representatives of all 64-bit
++	 and 128-bit vector types, whether or not those modes are
++	 supported with the present options.  */
++      size = int_size_in_bytes (type);
++      switch (size)
++	{
++	case 8:
++	  mode = V2SImode;
++	  break;
++	case 16:
++	  mode = V4SImode;
++	  break;
++	default:
++	  return -1;
++	}
++
++      if (*modep == VOIDmode)
++	*modep = mode;
++
++      /* Vector modes are considered to be opaque: two vectors are
++	 equivalent for the purposes of being homogeneous aggregates
++	 if they are the same size.  */
++      if (*modep == mode)
++	return 1;
++
++      break;
++
++    case ARRAY_TYPE:
++      {
++	int count;
++	tree index = TYPE_DOMAIN (type);
++
++	/* Can't handle incomplete types.  */
++	if (!COMPLETE_TYPE_P(type))
++	  return -1;
++
++	count = aapcs_vfp_sub_candidate (TREE_TYPE (type), modep);
++	if (count == -1
++	    || !index
++	    || !TYPE_MAX_VALUE (index)
++	    || !host_integerp (TYPE_MAX_VALUE (index), 1)
++	    || !TYPE_MIN_VALUE (index)
++	    || !host_integerp (TYPE_MIN_VALUE (index), 1)
++	    || count < 0)
++	  return -1;
++
++	count *= (1 + tree_low_cst (TYPE_MAX_VALUE (index), 1)
++		      - tree_low_cst (TYPE_MIN_VALUE (index), 1));
++
++	/* There must be no padding.  */
++	if (!host_integerp (TYPE_SIZE (type), 1)
++	    || (tree_low_cst (TYPE_SIZE (type), 1)
++		!= count * GET_MODE_BITSIZE (*modep)))
++	  return -1;
++
++	return count;
++      }
++      
++    case RECORD_TYPE:
++      {
++	int count = 0;
++	int sub_count;
++	tree field;
++
++	/* Can't handle incomplete types.  */
++	if (!COMPLETE_TYPE_P(type))
++	  return -1;
++
++	for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
++	  {
++	    if (TREE_CODE (field) != FIELD_DECL)
++	      continue;
++
++	    sub_count = aapcs_vfp_sub_candidate (TREE_TYPE (field), modep);
++	    if (sub_count < 0)
++	      return -1;
++	    count += sub_count;
++	  }
++
++	/* There must be no padding.  */
++	if (!host_integerp (TYPE_SIZE (type), 1)
++	    || (tree_low_cst (TYPE_SIZE (type), 1)
++		!= count * GET_MODE_BITSIZE (*modep)))
++	  return -1;
++
++	return count;
++      }
++
++    case UNION_TYPE:
++    case QUAL_UNION_TYPE:
++      {
++	/* These aren't very interesting except in a degenerate case.  */
++	int count = 0;
++	int sub_count;
++	tree field;
++
++	/* Can't handle incomplete types.  */
++	if (!COMPLETE_TYPE_P(type))
++	  return -1;
++
++	for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
++	  {
++	    if (TREE_CODE (field) != FIELD_DECL)
++	      continue;
++
++	    sub_count = aapcs_vfp_sub_candidate (TREE_TYPE (field), modep);
++	    if (sub_count < 0)
++	      return -1;
++	    count = count > sub_count ? count : sub_count;
++	  }
++
++	/* There must be no padding.  */
++	if (!host_integerp (TYPE_SIZE (type), 1)
++	    || (tree_low_cst (TYPE_SIZE (type), 1)
++		!= count * GET_MODE_BITSIZE (*modep)))
++	  return -1;
++
++	return count;
++      }
++
++    default:
++      break;
++    }
++
++  return -1;
++}
++
++/* Return true if PCS_VARIANT should use VFP registers.  */
++static bool
++use_vfp_abi (enum arm_pcs pcs_variant, bool is_double)
++{
++  if (pcs_variant == ARM_PCS_AAPCS_VFP)
++    return true;
++
++  if (pcs_variant != ARM_PCS_AAPCS_LOCAL)
++    return false;
++
++  return (TARGET_32BIT && TARGET_VFP && TARGET_HARD_FLOAT &&
++	  (TARGET_VFP_DOUBLE || !is_double));
++}
++
++static bool
++aapcs_vfp_is_call_or_return_candidate (enum arm_pcs pcs_variant,
++				       enum machine_mode mode, const_tree type,
++				       int *base_mode, int *count)
++{
++  enum machine_mode new_mode = VOIDmode;
++
++  if (GET_MODE_CLASS (mode) == MODE_FLOAT
++      || GET_MODE_CLASS (mode) == MODE_VECTOR_INT
++      || GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
++    {
++      *count = 1;
++      new_mode = mode;
++    }
++  else if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT)
++    {
++      *count = 2;
++      new_mode = (mode == DCmode ? DFmode : SFmode);
++    }
++  else if (type && (mode == BLKmode || TREE_CODE (type) == VECTOR_TYPE))
++    {
++      int ag_count = aapcs_vfp_sub_candidate (type, &new_mode);
++
++      if (ag_count > 0 && ag_count <= 4)
++	*count = ag_count;
++      else
++	return false;
++    }
++  else
++    return false;
++
++
++  if (!use_vfp_abi (pcs_variant, ARM_NUM_REGS (new_mode) > 1))
++    return false;
++
++  *base_mode = new_mode;
++  return true;
++}
++
++static bool
++aapcs_vfp_is_return_candidate (enum arm_pcs pcs_variant,
++			       enum machine_mode mode, const_tree type)
++{
++  int count ATTRIBUTE_UNUSED;
++  int ag_mode ATTRIBUTE_UNUSED;
++
++  if (!use_vfp_abi (pcs_variant, false))
++    return false;
++  return aapcs_vfp_is_call_or_return_candidate (pcs_variant, mode, type,
++						&ag_mode, &count);
++}
++
++static bool
++aapcs_vfp_is_call_candidate (CUMULATIVE_ARGS *pcum, enum machine_mode mode, 
++			     const_tree type)
++{
++  if (!use_vfp_abi (pcum->pcs_variant, false))
++    return false;
++
++  return aapcs_vfp_is_call_or_return_candidate (pcum->pcs_variant, mode, type,
++						&pcum->aapcs_vfp_rmode,
++						&pcum->aapcs_vfp_rcount);
++}
++
++static bool
++aapcs_vfp_allocate (CUMULATIVE_ARGS *pcum, enum machine_mode mode,
++		    const_tree type  ATTRIBUTE_UNUSED)
++{
++  int shift = GET_MODE_SIZE (pcum->aapcs_vfp_rmode) / GET_MODE_SIZE (SFmode);
++  unsigned mask = (1 << (shift * pcum->aapcs_vfp_rcount)) - 1;
++  int regno;
++  
++  for (regno = 0; regno < NUM_VFP_ARG_REGS; regno += shift)
++    if (((pcum->aapcs_vfp_regs_free >> regno) & mask) == mask)
++      {
++	pcum->aapcs_vfp_reg_alloc = mask << regno;
++	if (mode == BLKmode || (mode == TImode && !TARGET_NEON))
++	  {
++	    int i;
++	    int rcount = pcum->aapcs_vfp_rcount;
++	    int rshift = shift;
++	    enum machine_mode rmode = pcum->aapcs_vfp_rmode;
++	    rtx par;
++	    if (!TARGET_NEON)
++	      {
++		/* Avoid using unsupported vector modes.  */
++		if (rmode == V2SImode)
++		  rmode = DImode;
++		else if (rmode == V4SImode)
++		  {
++		    rmode = DImode;
++		    rcount *= 2;
++		    rshift /= 2;
++		  }
++	      }
++	    par = gen_rtx_PARALLEL (mode, rtvec_alloc (rcount));
++	    for (i = 0; i < rcount; i++)
++	      {
++		rtx tmp = gen_rtx_REG (rmode, 
++				       FIRST_VFP_REGNUM + regno + i * rshift);
++		tmp = gen_rtx_EXPR_LIST
++		  (VOIDmode, tmp, 
++		   GEN_INT (i * GET_MODE_SIZE (rmode)));
++		XVECEXP (par, 0, i) = tmp;
++	      }
++
++	    pcum->aapcs_reg = par;
++	  }
++	else
++	  pcum->aapcs_reg = gen_rtx_REG (mode, FIRST_VFP_REGNUM + regno);
++	return true;
++      }
++  return false;
++}
++
++static rtx
++aapcs_vfp_allocate_return_reg (enum arm_pcs pcs_variant ATTRIBUTE_UNUSED,
++			       enum machine_mode mode,
++			       const_tree type ATTRIBUTE_UNUSED)
++{
++  if (!use_vfp_abi (pcs_variant, false))
++    return false;
++
++  if (mode == BLKmode || (mode == TImode && !TARGET_NEON))
++    {
++      int count;
++      int ag_mode;
++      int i;
++      rtx par;
++      int shift;
++      
++      aapcs_vfp_is_call_or_return_candidate (pcs_variant, mode, type,
++					     &ag_mode, &count);
++
++      if (!TARGET_NEON)
++	{
++	  if (ag_mode == V2SImode)
++	    ag_mode = DImode;
++	  else if (ag_mode == V4SImode)
++	    {
++	      ag_mode = DImode;
++	      count *= 2;
++	    }
++	}
++      shift = GET_MODE_SIZE(ag_mode) / GET_MODE_SIZE(SFmode);
++      par = gen_rtx_PARALLEL (mode, rtvec_alloc (count));
++      for (i = 0; i < count; i++)
++	{
++	  rtx tmp = gen_rtx_REG (ag_mode, FIRST_VFP_REGNUM + i * shift);
++	  tmp = gen_rtx_EXPR_LIST (VOIDmode, tmp, 
++				   GEN_INT (i * GET_MODE_SIZE (ag_mode)));
++	  XVECEXP (par, 0, i) = tmp;
++	}
++
++      return par;
++    }
++
++  return gen_rtx_REG (mode, FIRST_VFP_REGNUM);
++}
++
++static void
++aapcs_vfp_advance (CUMULATIVE_ARGS *pcum  ATTRIBUTE_UNUSED,
++		   enum machine_mode mode  ATTRIBUTE_UNUSED,
++		   const_tree type  ATTRIBUTE_UNUSED)
++{
++  pcum->aapcs_vfp_regs_free &= ~pcum->aapcs_vfp_reg_alloc;
++  pcum->aapcs_vfp_reg_alloc = 0;
++  return;
++}
++
++#define AAPCS_CP(X)				\
++  {						\
++    aapcs_ ## X ## _cum_init,			\
++    aapcs_ ## X ## _is_call_candidate,		\
++    aapcs_ ## X ## _allocate,			\
++    aapcs_ ## X ## _is_return_candidate,	\
++    aapcs_ ## X ## _allocate_return_reg,	\
++    aapcs_ ## X ## _advance			\
++  }
++
++/* Table of co-processors that can be used to pass arguments in
++   registers.  Idealy no arugment should be a candidate for more than
++   one co-processor table entry, but the table is processed in order
++   and stops after the first match.  If that entry then fails to put
++   the argument into a co-processor register, the argument will go on
++   the stack.  */
++static struct 
++{
++  /* Initialize co-processor related state in CUMULATIVE_ARGS structure.  */
++  void (*cum_init) (CUMULATIVE_ARGS *, const_tree, rtx, const_tree);
++
++  /* Return true if an argument of mode MODE (or type TYPE if MODE is
++     BLKmode) is a candidate for this co-processor's registers; this
++     function should ignore any position-dependent state in
++     CUMULATIVE_ARGS and only use call-type dependent information.  */
++  bool (*is_call_candidate) (CUMULATIVE_ARGS *, enum machine_mode, const_tree);
++
++  /* Return true if the argument does get a co-processor register; it
++     should set aapcs_reg to an RTX of the register allocated as is
++     required for a return from FUNCTION_ARG.  */
++  bool (*allocate) (CUMULATIVE_ARGS *, enum machine_mode, const_tree);
++
++  /* Return true if a result of mode MODE (or type TYPE if MODE is
++     BLKmode) is can be returned in this co-processor's registers.  */
++  bool (*is_return_candidate) (enum arm_pcs, enum machine_mode, const_tree);
++
++  /* Allocate and return an RTX element to hold the return type of a
++     call, this routine must not fail and will only be called if
++     is_return_candidate returned true with the same parameters.  */
++  rtx (*allocate_return_reg) (enum arm_pcs, enum machine_mode, const_tree);
++
++  /* Finish processing this argument and prepare to start processing
++     the next one.  */
++  void (*advance) (CUMULATIVE_ARGS *, enum machine_mode, const_tree);
++} aapcs_cp_arg_layout[ARM_NUM_COPROC_SLOTS] =
++  {
++    AAPCS_CP(vfp)
++  };
++
++#undef AAPCS_CP
++
++static int
++aapcs_select_call_coproc (CUMULATIVE_ARGS *pcum, enum machine_mode mode, 
++			  tree type)
++{
++  int i;
++
++  for (i = 0; i < ARM_NUM_COPROC_SLOTS; i++)
++    if (aapcs_cp_arg_layout[i].is_call_candidate (pcum, mode, type))
++      return i;
++
++  return -1;
++}
++
++static int
++aapcs_select_return_coproc (const_tree type, const_tree fntype)
++{
++  /* We aren't passed a decl, so we can't check that a call is local.
++     However, it isn't clear that that would be a win anyway, since it
++     might limit some tail-calling opportunities.  */
++  enum arm_pcs pcs_variant;
++
++  if (fntype)
++    {
++      const_tree fndecl = NULL_TREE;
++
++      if (TREE_CODE (fntype) == FUNCTION_DECL)
++	{
++	  fndecl = fntype;
++	  fntype = TREE_TYPE (fntype);
++	}
++
++      pcs_variant = arm_get_pcs_model (fntype, fndecl);
++    }
++  else
++    pcs_variant = arm_pcs_default;
++
++  if (pcs_variant != ARM_PCS_AAPCS)
++    {
++      int i;
++
++      for (i = 0; i < ARM_NUM_COPROC_SLOTS; i++)
++	if (aapcs_cp_arg_layout[i].is_return_candidate (pcs_variant, 
++							TYPE_MODE (type),
++							type))
++	  return i;
++    }
++  return -1;
++}
++
++static rtx
++aapcs_allocate_return_reg (enum machine_mode mode, const_tree type,
++			   const_tree fntype)
++{
++  /* We aren't passed a decl, so we can't check that a call is local.
++     However, it isn't clear that that would be a win anyway, since it
++     might limit some tail-calling opportunities.  */
++  enum arm_pcs pcs_variant;
++
++  if (fntype)
++    {
++      const_tree fndecl = NULL_TREE;
++
++      if (TREE_CODE (fntype) == FUNCTION_DECL)
++	{
++	  fndecl = fntype;
++	  fntype = TREE_TYPE (fntype);
++	}
++
++      pcs_variant = arm_get_pcs_model (fntype, fndecl);
++    }
++  else
++    pcs_variant = arm_pcs_default;
++
++  /* Promote integer types.  */
++  if (type && INTEGRAL_TYPE_P (type))
++    PROMOTE_FUNCTION_MODE (mode, unsignedp, type);
++
++  if (pcs_variant != ARM_PCS_AAPCS)
++    {
++      int i;
++
++      for (i = 0; i < ARM_NUM_COPROC_SLOTS; i++)
++	if (aapcs_cp_arg_layout[i].is_return_candidate (pcs_variant, mode,
++							type))
++	  return aapcs_cp_arg_layout[i].allocate_return_reg (pcs_variant,
++							     mode, type);
++    }
++
++  /* Promotes small structs returned in a register to full-word size
++     for big-endian AAPCS.  */
++  if (type && arm_return_in_msb (type))
++    {
++      HOST_WIDE_INT size = int_size_in_bytes (type);
++      if (size % UNITS_PER_WORD != 0)
++	{
++	  size += UNITS_PER_WORD - size % UNITS_PER_WORD;
++	  mode = mode_for_size (size * BITS_PER_UNIT, MODE_INT, 0);
++	}
++    }
++
++  return gen_rtx_REG (mode, R0_REGNUM);
++}
++
++rtx
++aapcs_libcall_value (enum machine_mode mode)
++{
++  return aapcs_allocate_return_reg (mode, NULL_TREE, NULL_TREE);
++}
++
++/* Lay out a function argument using the AAPCS rules.  The rule
++   numbers referred to here are those in the AAPCS.  */
++static void
++aapcs_layout_arg (CUMULATIVE_ARGS *pcum, enum machine_mode mode,
++		  tree type, int named)
++{
++  int nregs, nregs2;
++  int ncrn;
++
++  /* We only need to do this once per argument.  */
++  if (pcum->aapcs_arg_processed)
++    return;
++
++  pcum->aapcs_arg_processed = true;
++
++  /* Special case: if named is false then we are handling an incoming
++     anonymous argument which is on the stack.  */
++  if (!named)
++    return;
++  
++  /* Is this a potential co-processor register candidate?  */
++  if (pcum->pcs_variant != ARM_PCS_AAPCS)
++    {
++      int slot = aapcs_select_call_coproc (pcum, mode, type);
++      pcum->aapcs_cprc_slot = slot;
++
++      /* We don't have to apply any of the rules from part B of the
++	 preparation phase, these are handled elsewhere in the
++	 compiler.  */
++
++      if (slot >= 0)
++	{
++	  /* A Co-processor register candidate goes either in its own
++	     class of registers or on the stack.  */
++	  if (!pcum->aapcs_cprc_failed[slot])
++	    {
++	      /* C1.cp - Try to allocate the argument to co-processor
++		 registers.  */
++	      if (aapcs_cp_arg_layout[slot].allocate (pcum, mode, type))
++		return;
++
++	      /* C2.cp - Put the argument on the stack and note that we
++		 can't assign any more candidates in this slot.  We also
++		 need to note that we have allocated stack space, so that
++		 we won't later try to split a non-cprc candidate between
++		 core registers and the stack.  */
++	      pcum->aapcs_cprc_failed[slot] = true;
++	      pcum->can_split = false;
++	    }
++
++	  /* We didn't get a register, so this argument goes on the
++	     stack.  */
++	  gcc_assert (pcum->can_split == false);
++	  return;
++	}
++    }
++
++  /* C3 - For double-word aligned arguments, round the NCRN up to the
++     next even number.  */
++  ncrn = pcum->aapcs_ncrn;
++  if ((ncrn & 1) && arm_needs_doubleword_align (mode, type))
++    ncrn++;
++
++  nregs = ARM_NUM_REGS2(mode, type);
++
++  /* Sigh, this test should really assert that nregs > 0, but a GCC
++     extension allows empty structs and then gives them empty size; it
++     then allows such a structure to be passed by value.  For some of
++     the code below we have to pretend that such an argument has
++     non-zero size so that we 'locate' it correctly either in
++     registers or on the stack.  */
++  gcc_assert (nregs >= 0);
++
++  nregs2 = nregs ? nregs : 1;
++
++  /* C4 - Argument fits entirely in core registers.  */
++  if (ncrn + nregs2 <= NUM_ARG_REGS)
++    {
++      pcum->aapcs_reg = gen_rtx_REG (mode, ncrn);
++      pcum->aapcs_next_ncrn = ncrn + nregs;
++      return;
++    }
++
++  /* C5 - Some core registers left and there are no arguments already
++     on the stack: split this argument between the remaining core
++     registers and the stack.  */
++  if (ncrn < NUM_ARG_REGS && pcum->can_split)
++    {
++      pcum->aapcs_reg = gen_rtx_REG (mode, ncrn);
++      pcum->aapcs_next_ncrn = NUM_ARG_REGS;
++      pcum->aapcs_partial = (NUM_ARG_REGS - ncrn) * UNITS_PER_WORD;
++      return;
++    }
++
++  /* C6 - NCRN is set to 4.  */
++  pcum->aapcs_next_ncrn = NUM_ARG_REGS;
++
++  /* C7,C8 - arugment goes on the stack.  We have nothing to do here.  */
++  return;
++}
++
++/* Initialize a variable CUM of type CUMULATIVE_ARGS
++   for a call to a function whose data type is FNTYPE.
++   For a library call, FNTYPE is NULL.  */
++void
++arm_init_cumulative_args (CUMULATIVE_ARGS *pcum, tree fntype,
++			  rtx libname,
++			  tree fndecl ATTRIBUTE_UNUSED)
++{
++  /* Long call handling.  */
++  if (fntype)
++    pcum->pcs_variant = arm_get_pcs_model (fntype, fndecl);
++  else
++    pcum->pcs_variant = arm_pcs_default;
++
++  if (pcum->pcs_variant <= ARM_PCS_AAPCS_LOCAL)
++    {
++      /* XXX We should also detect some library calls here and handle
++	 them using the base rules too; for example the floating point
++	 support functions always work this way.  */
++
++       if (rtx_equal_p (libname,
++		       convert_optab_libfunc (sfix_optab, DImode, DFmode))
++	  || rtx_equal_p (libname,
++			  convert_optab_libfunc (ufix_optab, DImode, DFmode))
++	  || rtx_equal_p (libname,
++			  convert_optab_libfunc (sfix_optab, DImode, SFmode))
++	  || rtx_equal_p (libname,
++			  convert_optab_libfunc (ufix_optab, DImode, SFmode))
++	  || rtx_equal_p (libname,
++			  convert_optab_libfunc (trunc_optab, HFmode, SFmode))
++	  || rtx_equal_p (libname,
++			  convert_optab_libfunc (sext_optab, SFmode, HFmode)))
++	pcum->pcs_variant = ARM_PCS_AAPCS;
++ 
++      /* We must pass arguments to double-precision helper functions in core
++         registers if we only have hardware support for single-precision
++	 arithmetic, even if we are using the hard-float ABI.  */
++      if (TARGET_VFP
++          && (rtx_equal_p (libname, optab_libfunc (add_optab, DFmode))
++	      || rtx_equal_p (libname, optab_libfunc (sdiv_optab, DFmode))
++	      || rtx_equal_p (libname, optab_libfunc (smul_optab, DFmode))
++	      || rtx_equal_p (libname, optab_libfunc (neg_optab, DFmode))
++	      || rtx_equal_p (libname, optab_libfunc (sub_optab, DFmode))
++	      || rtx_equal_p (libname, optab_libfunc (eq_optab, DFmode))
++	      || rtx_equal_p (libname, optab_libfunc (lt_optab, DFmode))
++	      || rtx_equal_p (libname, optab_libfunc (le_optab, DFmode))
++	      || rtx_equal_p (libname, optab_libfunc (ge_optab, DFmode))
++	      || rtx_equal_p (libname, optab_libfunc (gt_optab, DFmode))
++	      || rtx_equal_p (libname, optab_libfunc (unord_optab, DFmode))
++	      || rtx_equal_p (libname, convert_optab_libfunc (sext_optab,
++							      DFmode, SFmode))
++	      || rtx_equal_p (libname, convert_optab_libfunc (trunc_optab,
++							      SFmode, DFmode))
++	      || rtx_equal_p (libname, convert_optab_libfunc (sfix_optab,
++							      SImode, DFmode))
++	      || rtx_equal_p (libname, convert_optab_libfunc (ufix_optab,
++							      SImode, DFmode))))
++        pcum->pcs_variant = ARM_PCS_AAPCS;
++ 
++      pcum->aapcs_ncrn = pcum->aapcs_next_ncrn = 0;
++      pcum->aapcs_reg = NULL_RTX;
++      pcum->aapcs_partial = 0;
++      pcum->aapcs_arg_processed = false;
++      pcum->aapcs_cprc_slot = -1;
++      pcum->can_split = true;
++
++      if (pcum->pcs_variant != ARM_PCS_AAPCS)
++	{
++	  int i;
++
++	  for (i = 0; i < ARM_NUM_COPROC_SLOTS; i++)
++	    {
++	      pcum->aapcs_cprc_failed[i] = false;
++	      aapcs_cp_arg_layout[i].cum_init (pcum, fntype, libname, fndecl);
++	    }
++	}
++      return;
++    }
++
++  /* Legacy ABIs */
++
++  /* On the ARM, the offset starts at 0.  */
++  pcum->nregs = 0;
++  pcum->iwmmxt_nregs = 0;
++  pcum->can_split = true;
++
++  /* Varargs vectors are treated the same as long long.
++     named_count avoids having to change the way arm handles 'named' */
++  pcum->named_count = 0;
++  pcum->nargs = 0;
++
++  if (TARGET_REALLY_IWMMXT && fntype)
++    {
++      tree fn_arg;
++
++      for (fn_arg = TYPE_ARG_TYPES (fntype);
++	   fn_arg;
++	   fn_arg = TREE_CHAIN (fn_arg))
++	pcum->named_count += 1;
++
++      if (! pcum->named_count)
++	pcum->named_count = INT_MAX;
++    }
++}
++
++
++/* Return true if mode/type need doubleword alignment.  */
++bool
++arm_needs_doubleword_align (enum machine_mode mode, tree type)
++{
++  return (GET_MODE_ALIGNMENT (mode) > PARM_BOUNDARY
++	  || (type && TYPE_ALIGN (type) > PARM_BOUNDARY));
++}
++
++
++/* Determine where to put an argument to a function.
++   Value is zero to push the argument on the stack,
++   or a hard register in which to store the argument.
++
++   MODE is the argument's machine mode.
++   TYPE is the data type of the argument (as a tree).
++    This is null for libcalls where that information may
++    not be available.
++   CUM is a variable of type CUMULATIVE_ARGS which gives info about
++    the preceding args and about the function being called.
++   NAMED is nonzero if this argument is a named parameter
++    (otherwise it is an extra parameter matching an ellipsis).  */
+ 
+ rtx
+ arm_function_arg (CUMULATIVE_ARGS *pcum, enum machine_mode mode,
+@@ -3131,6 +4320,17 @@
+ {
+   int nregs;
+ 
++  /* Handle the special case quickly.  Pick an arbitrary value for op2 of
++     a call insn (op3 of a call_value insn).  */
++  if (mode == VOIDmode)
++    return const0_rtx;
++
++  if (pcum->pcs_variant <= ARM_PCS_AAPCS_LOCAL)
++    {
++      aapcs_layout_arg (pcum, mode, type, named);
++      return pcum->aapcs_reg;
++    }
++
+   /* Varargs vectors are treated the same as long long.
+      named_count avoids having to change the way arm handles 'named' */
+   if (TARGET_IWMMXT_ABI
+@@ -3172,10 +4372,16 @@
+ 
+ static int
+ arm_arg_partial_bytes (CUMULATIVE_ARGS *pcum, enum machine_mode mode,
+-		       tree type, bool named ATTRIBUTE_UNUSED)
++		       tree type, bool named)
+ {
+   int nregs = pcum->nregs;
+ 
++  if (pcum->pcs_variant <= ARM_PCS_AAPCS_LOCAL)
++    {
++      aapcs_layout_arg (pcum, mode, type, named);
++      return pcum->aapcs_partial;
++    }
++
+   if (TARGET_IWMMXT_ABI && arm_vector_mode_supported_p (mode))
+     return 0;
+ 
+@@ -3187,6 +4393,39 @@
+   return 0;
+ }
+ 
++void
++arm_function_arg_advance (CUMULATIVE_ARGS *pcum, enum machine_mode mode,
++			  tree type, bool named)
++{
++  if (pcum->pcs_variant <= ARM_PCS_AAPCS_LOCAL)
++    {
++      aapcs_layout_arg (pcum, mode, type, named);
++
++      if (pcum->aapcs_cprc_slot >= 0)
++	{
++	  aapcs_cp_arg_layout[pcum->aapcs_cprc_slot].advance (pcum, mode,
++							      type);
++	  pcum->aapcs_cprc_slot = -1;
++	}
++
++      /* Generic stuff.  */
++      pcum->aapcs_arg_processed = false;
++      pcum->aapcs_ncrn = pcum->aapcs_next_ncrn;
++      pcum->aapcs_reg = NULL_RTX;
++      pcum->aapcs_partial = 0;
++    }
++  else
++    {
++      pcum->nargs += 1;
++      if (arm_vector_mode_supported_p (mode)
++	  && pcum->named_count > pcum->nargs
++	  && TARGET_IWMMXT_ABI)
++	pcum->iwmmxt_nregs += 1;
++      else
++	pcum->nregs += ARM_NUM_REGS2 (mode, type);
++    }
++}
++
+ /* Variable sized types are passed by reference.  This is a GCC
+    extension to the ARM ABI.  */
+ 
+@@ -3237,6 +4476,8 @@
+   /* Whereas these functions are always known to reside within the 26 bit
+      addressing range.  */
+   { "short_call",   0, 0, false, true,  true,  NULL },
++  /* Specify the procedure call conventions for a function.  */
++  { "pcs",          1, 1, false, true,  true,  arm_handle_pcs_attribute },
+   /* Interrupt Service Routines have special prologue and epilogue requirements.  */
+   { "isr",          0, 1, false, false, false, arm_handle_isr_attribute },
+   { "interrupt",    0, 1, false, false, false, arm_handle_isr_attribute },
+@@ -3335,7 +4576,22 @@
+ 	    }
+ 	}
+     }
+-
++
++  return NULL_TREE;
++}
++
++/* Handle a "pcs" attribute; arguments as in struct
++   attribute_spec.handler.  */
++static tree
++arm_handle_pcs_attribute (tree *node ATTRIBUTE_UNUSED, tree name, tree args,
++			  int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
++{
++  if (arm_pcs_from_attribute (args) == ARM_PCS_UNKNOWN)
++    {
++      warning (OPT_Wattributes, "%qs attribute ignored",
++	       IDENTIFIER_POINTER (name));
++      *no_add_attrs = true;
++    }
+   return NULL_TREE;
+ }
+ 
+@@ -3500,7 +4756,7 @@
+ 
+ /* Return nonzero if it is ok to make a tail-call to DECL.  */
+ static bool
+-arm_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED)
++arm_function_ok_for_sibcall (tree decl, tree exp)
+ {
+   unsigned long func_type;
+ 
+@@ -3508,8 +4764,8 @@
+     return false;
+ 
+   /* Never tailcall something for which we have no decl, or if we
+-     are in Thumb mode.  */
+-  if (decl == NULL || TARGET_THUMB)
++     are generating code for Thumb-1.  */
++  if (decl == NULL || !TARGET_32BIT)
+     return false;
+ 
+   /* The PIC register is live on entry to VxWorks PLT entries, so we
+@@ -3533,6 +4789,21 @@
+   if (IS_INTERRUPT (func_type))
+     return false;
+ 
++  if (!VOID_TYPE_P (TREE_TYPE (DECL_RESULT (cfun->decl))))
++    {
++      /* Check that the return value locations are the same.  For
++	 example that we aren't returning a value from the sibling in
++	 a VFP register but then need to transfer it to a core
++	 register.  */
++      rtx a, b;
++
++      a = arm_function_value (TREE_TYPE (exp), decl, false);
++      b = arm_function_value (TREE_TYPE (DECL_RESULT (cfun->decl)),
++			      cfun->decl, false);
++      if (!rtx_equal_p (a, b))
++	return false;
++    }
++
+   /* Never tailcall if function may be called with a misaligned SP.  */
+   if (IS_STACKALIGN (func_type))
+     return false;
+@@ -3585,7 +4856,7 @@
+ 	}
+       else
+ 	{
+-	  rtx seq;
++	  rtx seq, insn;
+ 
+ 	  if (!cfun->machine->pic_reg)
+ 	    cfun->machine->pic_reg = gen_reg_rtx (Pmode);
+@@ -3602,6 +4873,11 @@
+ 
+ 	      seq = get_insns ();
+ 	      end_sequence ();
++
++	      for (insn = seq; insn; insn = NEXT_INSN (insn))
++		if (INSN_P (insn))
++		  INSN_LOCATOR (insn) = prologue_locator;
++
+ 	      emit_insn_after (seq, entry_of_function ());
+ 	    }
+ 	}
+@@ -4131,6 +5407,7 @@
+   if (GET_MODE_SIZE (mode) <= 4
+       && ! (arm_arch4
+ 	    && (mode == HImode
++		|| mode == HFmode
+ 		|| (mode == QImode && outer == SIGN_EXTEND))))
+     {
+       if (code == MULT)
+@@ -4159,13 +5436,15 @@
+      load.  */
+   if (arm_arch4)
+     {
+-      if (mode == HImode || (outer == SIGN_EXTEND && mode == QImode))
++      if (mode == HImode
++	  || mode == HFmode
++	  || (outer == SIGN_EXTEND && mode == QImode))
+ 	range = 256;
+       else
+ 	range = 4096;
+     }
+   else
+-    range = (mode == HImode) ? 4095 : 4096;
++    range = (mode == HImode || mode == HFmode) ? 4095 : 4096;
+ 
+   return (code == CONST_INT
+ 	  && INTVAL (index) < range
+@@ -4336,7 +5615,8 @@
+     return 1;
+ 
+   /* This is PC relative data after arm_reorg runs.  */
+-  else if (GET_MODE_SIZE (mode) >= 4 && reload_completed
++  else if ((GET_MODE_SIZE (mode) >= 4 || mode == HFmode)
++	   && reload_completed
+ 	   && (GET_CODE (x) == LABEL_REF
+ 	       || (GET_CODE (x) == CONST
+ 		   && GET_CODE (XEXP (x, 0)) == PLUS
+@@ -5035,7 +6315,7 @@
+     case UMOD:
+       if (TARGET_HARD_FLOAT && mode == SFmode)
+ 	*total = COSTS_N_INSNS (2);
+-      else if (TARGET_HARD_FLOAT && mode == DFmode)
++      else if (TARGET_HARD_FLOAT && mode == DFmode && !TARGET_VFP_SINGLE)
+ 	*total = COSTS_N_INSNS (4);
+       else
+ 	*total = COSTS_N_INSNS (20);
+@@ -5074,23 +6354,6 @@
+       return true;
+ 
+     case MINUS:
+-      if (TARGET_THUMB2)
+-	{
+-	  if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+-	    {
+-	      if (TARGET_HARD_FLOAT && (mode == SFmode || mode == DFmode))
+-		*total = COSTS_N_INSNS (1);
+-	      else
+-		*total = COSTS_N_INSNS (20);
+-	    }
+-	  else
+-	    *total = COSTS_N_INSNS (ARM_NUM_REGS (mode));
+-	  /* Thumb2 does not have RSB, so all arguments must be
+-	     registers (subtracting a constant is canonicalized as
+-	     addition of the negated constant).  */
+-	  return false;
+-	}
+-
+       if (mode == DImode)
+ 	{
+ 	  *total = COSTS_N_INSNS (ARM_NUM_REGS (mode));
+@@ -5113,7 +6376,9 @@
+ 
+       if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+ 	{
+-	  if (TARGET_HARD_FLOAT && (mode == SFmode || mode == DFmode))
++	  if (TARGET_HARD_FLOAT
++	      && (mode == SFmode
++		  || (mode == DFmode && !TARGET_VFP_SINGLE)))
+ 	    {
+ 	      *total = COSTS_N_INSNS (1);
+ 	      if (GET_CODE (XEXP (x, 0)) == CONST_DOUBLE
+@@ -5154,6 +6419,17 @@
+ 	  return true;
+ 	}
+ 
++      /* A shift as a part of RSB costs no more than RSB itself.  */
++      if (GET_CODE (XEXP (x, 0)) == MULT
++	  && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
++	  && ((INTVAL (XEXP (XEXP (x, 0), 1))
++	       & (INTVAL (XEXP (XEXP (x, 0), 1)) - 1)) == 0))
++	{
++	  *total += rtx_cost (XEXP (XEXP (x, 0), 0), code, speed);
++	  *total += rtx_cost (XEXP (x, 1), code, speed);
++	  return true;
++	}
++
+       if (subcode == MULT
+ 	  && GET_CODE (XEXP (XEXP (x, 1), 1)) == CONST_INT
+ 	  && ((INTVAL (XEXP (XEXP (x, 1), 1)) &
+@@ -5175,6 +6451,19 @@
+ 	  return true;
+ 	}
+ 
++      /* MLS is just as expensive as its underlying multiplication.
++	 Exclude a shift by a constant, which is expressed as a
++	 multiplication.  */
++      if (TARGET_32BIT && arm_arch_thumb2
++	  && GET_CODE (XEXP (x, 1)) == MULT
++	  && ! (GET_CODE (XEXP (XEXP (x, 1), 1)) == CONST_INT
++		&& ((INTVAL (XEXP (XEXP (x, 1), 1)) &
++		     (INTVAL (XEXP (XEXP (x, 1), 1)) - 1)) == 0)))
++	{
++	  /* The cost comes from the cost of the multiply.  */
++	  return false;
++	}
++
+       /* Fall through */
+ 
+     case PLUS:
+@@ -5203,7 +6492,9 @@
+ 
+       if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+ 	{
+-	  if (TARGET_HARD_FLOAT && (mode == SFmode || mode == DFmode))
++	  if (TARGET_HARD_FLOAT
++	      && (mode == SFmode
++		  || (mode == DFmode && !TARGET_VFP_SINGLE)))
+ 	    {
+ 	      *total = COSTS_N_INSNS (1);
+ 	      if (GET_CODE (XEXP (x, 1)) == CONST_DOUBLE
+@@ -5318,7 +6609,9 @@
+     case NEG:
+       if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+ 	{
+-	  if (TARGET_HARD_FLOAT && (mode == SFmode || mode == DFmode))
++	  if (TARGET_HARD_FLOAT
++	      && (mode == SFmode
++		  || (mode == DFmode && !TARGET_VFP_SINGLE)))
+ 	    {
+ 	      *total = COSTS_N_INSNS (1);
+ 	      return false;
+@@ -5469,9 +6762,11 @@
+       return true;
+ 
+     case ABS:
+-      if (GET_MODE_CLASS (mode == MODE_FLOAT))
++      if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+ 	{
+-	  if (TARGET_HARD_FLOAT && (mode == SFmode || mode == DFmode))
++	  if (TARGET_HARD_FLOAT
++	      && (mode == SFmode
++		  || (mode == DFmode && !TARGET_VFP_SINGLE)))
+ 	    {
+ 	      *total = COSTS_N_INSNS (1);
+ 	      return false;
+@@ -5574,7 +6869,19 @@
+       return true;
+ 
+     case CONST_DOUBLE:
+-      if (TARGET_HARD_FLOAT && vfp3_const_double_rtx (x))
++      if (TARGET_HARD_FLOAT && vfp3_const_double_rtx (x)
++	  && (mode == SFmode || !TARGET_VFP_SINGLE))
++	*total = COSTS_N_INSNS (1);
++      else
++	*total = COSTS_N_INSNS (4);
++      return true;
++
++    case CONST_VECTOR:
++      if (TARGET_NEON
++	  && TARGET_HARD_FLOAT
++	  && outer == SET
++	  && (VALID_NEON_DREG_MODE (mode) || VALID_NEON_QREG_MODE (mode))
++	  && neon_immediate_valid_for_move (x, mode, NULL, NULL))
+ 	*total = COSTS_N_INSNS (1);
+       else
+ 	*total = COSTS_N_INSNS (4);
+@@ -5649,7 +6956,8 @@
+       return false;
+ 
+     case MINUS:
+-      if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT)
++      if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT
++	  && (mode == SFmode || !TARGET_VFP_SINGLE))
+ 	{
+ 	  *total = COSTS_N_INSNS (1);
+ 	  return false;
+@@ -5679,7 +6987,8 @@
+       return false;
+ 
+     case PLUS:
+-      if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT)
++      if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT
++	  && (mode == SFmode || !TARGET_VFP_SINGLE))
+ 	{
+ 	  *total = COSTS_N_INSNS (1);
+ 	  return false;
+@@ -5709,7 +7018,8 @@
+       return false;
+ 
+     case NEG:
+-      if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT)
++      if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT
++	  && (mode == SFmode || !TARGET_VFP_SINGLE))
+ 	{
+ 	  *total = COSTS_N_INSNS (1);
+ 	  return false;
+@@ -5733,7 +7043,8 @@
+       return false;
+ 
+     case ABS:
+-      if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT)
++      if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT
++	  && (mode == SFmode || !TARGET_VFP_SINGLE))
+ 	*total = COSTS_N_INSNS (1);
+       else
+ 	*total = COSTS_N_INSNS (1 + ARM_NUM_REGS (mode));
+@@ -5763,60 +7074,434 @@
+ 	    case HImode:
+ 	      *total += COSTS_N_INSNS (arm_arch6 ? 1 : 2);
+ 
+-	    case SImode:
+-	      break;
++	    case SImode:
++	      break;
++
++	    default:
++	      *total += COSTS_N_INSNS (2);
++	    }
++	}
++
++      if (mode == DImode)
++	*total += COSTS_N_INSNS (1);
++
++      return false;
++
++    case CONST_INT:
++      if (const_ok_for_arm (INTVAL (x)))
++	*total = COSTS_N_INSNS (outer_code == SET ? 1 : 0);
++      else if (const_ok_for_arm (~INTVAL (x)))
++	*total = COSTS_N_INSNS (outer_code == AND ? 0 : 1);
++      else if (const_ok_for_arm (-INTVAL (x)))
++	{
++	  if (outer_code == COMPARE || outer_code == PLUS
++	      || outer_code == MINUS)
++	    *total = 0;
++	  else
++	    *total = COSTS_N_INSNS (1);
++	}
++      else
++	*total = COSTS_N_INSNS (2);
++      return true;
++
++    case CONST:
++    case LABEL_REF:
++    case SYMBOL_REF:
++      *total = COSTS_N_INSNS (2);
++      return true;
++
++    case CONST_DOUBLE:
++      *total = COSTS_N_INSNS (4);
++      return true;
++
++    case CONST_VECTOR:
++      if (TARGET_NEON
++	  && TARGET_HARD_FLOAT
++	  && outer_code == SET
++	  && (VALID_NEON_DREG_MODE (mode) || VALID_NEON_QREG_MODE (mode))
++	  && neon_immediate_valid_for_move (x, mode, NULL, NULL))
++	*total = COSTS_N_INSNS (1);
++      else
++	*total = COSTS_N_INSNS (4);
++      return true;
++
++    case HIGH:
++    case LO_SUM:
++      /* We prefer constant pool entries to MOVW/MOVT pairs, so bump the
++	 cost of these slightly.  */
++      *total = COSTS_N_INSNS (1) + 1;
++      return true;
++
++    default:
++      if (mode != VOIDmode)
++	*total = COSTS_N_INSNS (ARM_NUM_REGS (mode));
++      else
++	*total = COSTS_N_INSNS (4); /* How knows?  */
++      return false;
++    }
++}
++
++static bool
++thumb2_size_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code,
++		       int *total)
++{
++  /* Attempt to give a lower cost to RTXs which can optimistically be
++     represented as short insns, assuming that the right conditions will hold
++     later (e.g. low registers will be chosen if a short insn requires them). 
++     
++     Note that we don't make wide insns cost twice as much as narrow insns,
++     because we can't prove that a particular RTX will actually use a narrow
++     insn, because not enough information is available (e.g., we don't know
++     which hard registers pseudos will be assigned).  Consider these to be
++     "expected" sizes/weightings.
++     
++     (COSTS_NARROW_INSNS has the same weight as COSTS_N_INSNS.)  */
++
++#define COSTS_NARROW_INSNS(N) ((N) * 4)
++#define COSTS_WIDE_INSNS(N) ((N) * 6)
++#define THUMB2_LIBCALL_COST COSTS_WIDE_INSNS (2)
++  enum machine_mode mode = GET_MODE (x);
++  
++  switch (code)
++    {
++    case MEM:
++      if (REG_P (XEXP (x, 0)))
++        {
++          /* Hopefully this will use a narrow ldm/stm insn.  */
++	  *total = COSTS_NARROW_INSNS (1);
++	  return true;
++	}
++      else if ((GET_CODE (XEXP (x, 0)) == SYMBOL_REF
++	        && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)))
++	       || reg_mentioned_p (virtual_stack_vars_rtx, XEXP (x, 0))
++	       || reg_mentioned_p (stack_pointer_rtx, XEXP (x, 0)))
++	{
++          *total = COSTS_NARROW_INSNS (ARM_NUM_REGS (mode));
++	  return true;
++	}
++      else if (GET_CODE (XEXP (x, 0)) == PLUS)
++	{
++	  rtx plus = XEXP (x, 0);
++
++	  if (GET_CODE (XEXP (plus, 1)) == CONST_INT)
++            {
++	      HOST_WIDE_INT cst = INTVAL (XEXP (plus, 1));
++
++	      if (cst >= 0 && cst < 256)
++		*total = COSTS_NARROW_INSNS (ARM_NUM_REGS (mode));
++	      else
++		*total = COSTS_WIDE_INSNS (ARM_NUM_REGS (mode));
++	
++	      *total += rtx_cost (XEXP (plus, 0), code, false);
++	      
++	      return true;
++	    }
++	}
++
++      *total = COSTS_NARROW_INSNS (ARM_NUM_REGS (mode));
++      return false;
++
++    case DIV:
++    case MOD:
++    case UDIV:
++    case UMOD:
++      if (arm_arch_hwdiv)
++	*total = COSTS_WIDE_INSNS (1);
++      else
++	*total = THUMB2_LIBCALL_COST;
++      return false;
++    
++    case ROTATE:
++      if (mode == SImode && REG_P (XEXP (x, 1)))
++	{
++	  *total = COSTS_WIDE_INSNS (1) + COSTS_NARROW_INSNS (1)
++		   + rtx_cost (XEXP (x, 0), code, false);
++	  return true;
++	}
++      /* Fall through */
++
++    case ASHIFT:
++    case LSHIFTRT:
++    case ASHIFTRT:
++      if (mode == DImode && GET_CODE (XEXP (x, 1)) == CONST_INT)
++	{
++	  *total = COSTS_WIDE_INSNS (3) + rtx_cost (XEXP (x, 0), code, false);
++	  return true;
++	}
++      else if (mode == SImode)
++        {
++	  *total = COSTS_NARROW_INSNS (1);
++	  return false;
++	}
++
++      /* Needs a libcall.  */
++      *total = THUMB2_LIBCALL_COST;
++      return false;
++
++    case ROTATERT:
++      if (mode == DImode && GET_CODE (XEXP (x, 1)) == CONST_INT)
++	{
++	  *total = COSTS_WIDE_INSNS (3) + rtx_cost (XEXP (x, 0), code, false);
++	  return true;
++	}
++      else if (mode == SImode)
++        {
++	  if (GET_CODE (XEXP (x, 1)) == CONST_INT)
++	    *total = COSTS_WIDE_INSNS (1) + rtx_cost (XEXP (x, 0), code, false);
++	  else
++	    *total = COSTS_NARROW_INSNS (1)
++		     + rtx_cost (XEXP (x, 0), code, false);
++	  return true;
++	}
++
++      /* Needs a libcall.  */
++      *total = THUMB2_LIBCALL_COST;
++      return false;
++
++    case MINUS:
++      if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT
++	  && (mode == SFmode || !TARGET_VFP_SINGLE))
++	{
++	  *total = COSTS_WIDE_INSNS (1);
++	  return false;
++	}
++
++      if (mode == SImode)
++	{
++	  enum rtx_code subcode0 = GET_CODE (XEXP (x, 0));
++	  enum rtx_code subcode1 = GET_CODE (XEXP (x, 1));
++
++	  if (subcode0 == ROTATE || subcode0 == ROTATERT || subcode0 == ASHIFT
++	      || subcode0 == LSHIFTRT || subcode0 == ASHIFTRT
++	      || subcode1 == ROTATE || subcode1 == ROTATERT
++	      || subcode1 == ASHIFT || subcode1 == LSHIFTRT
++	      || subcode1 == ASHIFTRT)
++	    {
++	      /* It's just the cost of the two operands.  */
++	      *total = 0;
++	      return false;
++	    }
++
++	  if (subcode1 == CONST_INT)
++	    {
++	      HOST_WIDE_INT cst = INTVAL (XEXP (x, 1));
++
++	      if (cst >= 0 && cst < 256)
++		*total = COSTS_NARROW_INSNS (1);
++	      else
++		*total = COSTS_WIDE_INSNS (1);
++
++	      *total += rtx_cost (XEXP (x, 0), code, false);
++
++	      return true;
++	    }
++
++	  *total = COSTS_NARROW_INSNS (1);
++	  return false;
++	}
++
++      *total = COSTS_WIDE_INSNS (ARM_NUM_REGS (mode));
++      return false;
++
++    case PLUS:
++      if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT
++	  && (mode == SFmode || !TARGET_VFP_SINGLE))
++	{
++	  *total = COSTS_WIDE_INSNS (1);
++	  return false;
++	}
++
++      /* Fall through */
++    case AND: case XOR: case IOR:
++      if (mode == SImode)
++	{
++	  enum rtx_code subcode = GET_CODE (XEXP (x, 0));
++
++	  if (subcode == ROTATE || subcode == ROTATERT || subcode == ASHIFT
++	      || subcode == LSHIFTRT || subcode == ASHIFTRT
++	      || (code == AND && subcode == NOT))
++	    {
++	      /* It's just the cost of the two operands.  */
++	      *total = 0;
++	      return false;
++	    }
++
++	  if (code == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT)
++	    {
++	      HOST_WIDE_INT cst = INTVAL (XEXP (x, 1));
++
++	      if ((reg_mentioned_p (virtual_stack_vars_rtx, XEXP (x, 0))
++		   || reg_mentioned_p (stack_pointer_rtx, XEXP (x, 0)))
++		  && cst > -512 && cst < 1024)
++		/* Only approximately correct, depending on destination
++		   register.  */
++		*total = COSTS_NARROW_INSNS (1);
++	      else if (cst > -256 && cst < 256)
++	        *total = COSTS_NARROW_INSNS (1);
++	      else
++		*total = COSTS_WIDE_INSNS (1);
++
++	      *total += rtx_cost (XEXP (x, 0), code, false);
++
++	      return true;
++	    }
++	  
++	  if (subcode == MULT
++	      && power_of_two_operand (XEXP (XEXP (x, 0), 1), mode))
++	    {
++	      *total = COSTS_WIDE_INSNS (1)
++		       + rtx_cost (XEXP (x, 1), code, false);
++	      return true;
++	    }
++	}
++
++      *total = COSTS_NARROW_INSNS (ARM_NUM_REGS (mode));
++      return false;
++
++    case MULT:
++      if (mode == SImode && GET_CODE (XEXP (x, 1)) != CONST_INT)
++	{
++	  /* Might be using muls.  */
++	  *total = COSTS_NARROW_INSNS (1);
++	  return false;
++	}
++      *total = COSTS_WIDE_INSNS (ARM_NUM_REGS (mode));
++      return false;
++
++    case NEG:
++      if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT
++	  && (mode == SFmode || !TARGET_VFP_SINGLE))
++	{
++	  *total = COSTS_WIDE_INSNS (1);
++	  return false;
++	}
++
++      /* Fall through */
++    case NOT:
++      if (mode == SImode)
++        {
++	  *total = COSTS_NARROW_INSNS (1);
++	  return false;
++	}
++      *total = COSTS_WIDE_INSNS (ARM_NUM_REGS (mode));
++      return false;
++
++    case IF_THEN_ELSE:
++      *total = COSTS_NARROW_INSNS (1);
++      return false;
++
++    case COMPARE:
++      if (cc_register (XEXP (x, 0), VOIDmode))
++	*total = 0;
++      else
++	*total = COSTS_NARROW_INSNS (1);
++      return false;
+ 
+-	    default:
+-	      *total += COSTS_N_INSNS (2);
+-	    }
+-	}
++    case ABS:
++      if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT
++	  && (mode == SFmode || !TARGET_VFP_SINGLE))
++	*total = COSTS_WIDE_INSNS (1);
++      else
++	*total = COSTS_NARROW_INSNS (ARM_NUM_REGS (mode)) * 2;
++      return false;
+ 
+-      if (mode == DImode)
+-	*total += COSTS_N_INSNS (1);
++    case SIGN_EXTEND:
++      if (GET_MODE_SIZE (mode) <= 4)
++        *total = GET_CODE (XEXP (x, 0)) == MEM ? 0 : COSTS_NARROW_INSNS (1);
++      else
++        *total = COSTS_NARROW_INSNS (1)
++		 + COSTS_WIDE_INSNS (ARM_NUM_REGS (mode));
++      return false;
+ 
++    case ZERO_EXTEND:
++      if (GET_MODE_SIZE (mode) > 4)
++        *total = COSTS_WIDE_INSNS (ARM_NUM_REGS (mode) - 1);
++      else if (GET_CODE (XEXP (x, 0)) == MEM)
++        *total = 0;
++      else
++        *total = COSTS_NARROW_INSNS (1);
+       return false;
+ 
+     case CONST_INT:
+-      if (const_ok_for_arm (INTVAL (x)))
+-	*total = COSTS_N_INSNS (outer_code == SET ? 1 : 0);
+-      else if (const_ok_for_arm (~INTVAL (x)))
+-	*total = COSTS_N_INSNS (outer_code == AND ? 0 : 1);
+-      else if (const_ok_for_arm (-INTVAL (x)))
+-	{
+-	  if (outer_code == COMPARE || outer_code == PLUS
+-	      || outer_code == MINUS)
++      {
++	HOST_WIDE_INT cst = INTVAL (x);
++
++	switch (outer_code)
++          {
++	  case PLUS:
++	    if (cst > -256 && cst < 256)
++	      *total = 0;
++	    else
++	      /* See note about optabs below.  */
++	      *total = COSTS_N_INSNS (1);
++	    return true;
++
++	  case MINUS:
++	  case COMPARE:
++	    if (cst >= 0 && cst < 256)
++	      *total = 0;
++	    else
++	      /* See note about optabs below.  */
++	      *total = COSTS_N_INSNS (1);
++	    return true;
++	  
++	  case ASHIFT:
++	  case ASHIFTRT:
++	  case LSHIFTRT:
+ 	    *total = 0;
+-	  else
++	    return true;
++	  
++	  default:
++	    /* Constants are compared explicitly against COSTS_N_INSNS (1) in
++	       optabs.c, creating an alternative, larger code sequence for more
++	       expensive constants).  So, it doesn't pay to make some constants
++	       cost more than this.  */
+ 	    *total = COSTS_N_INSNS (1);
+-	}
+-      else
+-	*total = COSTS_N_INSNS (2);
+-      return true;
++	  }
++	return true;
++      }
+ 
+     case CONST:
+     case LABEL_REF:
+     case SYMBOL_REF:
+-      *total = COSTS_N_INSNS (2);
++      *total = COSTS_WIDE_INSNS (2);
+       return true;
+ 
+     case CONST_DOUBLE:
+-      *total = COSTS_N_INSNS (4);
++      *total = COSTS_WIDE_INSNS (4);
++      return true;
++
++    case CONST_VECTOR:
++      if (TARGET_NEON
++	  && TARGET_HARD_FLOAT
++	  && outer_code == SET
++	  && (VALID_NEON_DREG_MODE (mode) || VALID_NEON_QREG_MODE (mode))
++	  && neon_immediate_valid_for_move (x, mode, NULL, NULL))
++	*total = COSTS_WIDE_INSNS (1);
++      else
++	*total = COSTS_WIDE_INSNS (4);
+       return true;
+ 
+     case HIGH:
+     case LO_SUM:
+       /* We prefer constant pool entries to MOVW/MOVT pairs, so bump the
+ 	 cost of these slightly.  */
+-      *total = COSTS_N_INSNS (1) + 1;
++      *total = COSTS_WIDE_INSNS (1) + 1;
+       return true;
+ 
+     default:
+       if (mode != VOIDmode)
+-	*total = COSTS_N_INSNS (ARM_NUM_REGS (mode));
++	*total = COSTS_WIDE_INSNS (ARM_NUM_REGS (mode));
+       else
+-	*total = COSTS_N_INSNS (4); /* How knows?  */
++	/* A guess (inherited from arm_size_rtx_costs).  */
++	*total = COSTS_WIDE_INSNS (4);
+       return false;
+     }
++  
++  return true;
++#undef THUMB2_LIBCALL_COST
++#undef COSTS_WIDE_INSNS
++#undef COSTS_NARROW_INSNS
+ }
+ 
+ /* RTX costs when optimizing for size.  */
+@@ -5825,7 +7510,12 @@
+ 	       bool speed)
+ {
+   if (!speed)
+-    return arm_size_rtx_costs (x, code, outer_code, total);
++    {
++      if (TARGET_THUMB2)
++	return thumb2_size_rtx_costs (x, code, outer_code, total);
++      else
++	return arm_size_rtx_costs (x, code, outer_code, total);
++    }
+   else
+     return all_cores[(int)arm_tune].rtx_costs (x, code, outer_code, total,
+ 					       speed);
+@@ -5950,7 +7640,9 @@
+ 
+       if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+ 	{
+-	  if (TARGET_HARD_FLOAT && (mode == SFmode || mode == DFmode))
++	  if (TARGET_HARD_FLOAT
++	      && (mode == SFmode
++		  || (mode == DFmode && !TARGET_VFP_SINGLE)))
+ 	    {
+ 	      *total = COSTS_N_INSNS (1);
+ 	      return false;
+@@ -6107,7 +7799,9 @@
+ 
+       if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+ 	{
+-	  if (TARGET_HARD_FLOAT && (mode == SFmode || mode == DFmode))
++	  if (TARGET_HARD_FLOAT
++	      && (mode == SFmode
++		  || (mode == DFmode && !TARGET_VFP_SINGLE)))
+ 	    {
+ 	      *total = COSTS_N_INSNS (1);
+ 	      return false;
+@@ -6453,11 +8147,14 @@
+    vmov  i64    17    aaaaaaaa bbbbbbbb cccccccc dddddddd
+                       eeeeeeee ffffffff gggggggg hhhhhhhh
+    vmov  f32    18    aBbbbbbc defgh000 00000000 00000000
++   vmov  f32    19    00000000 00000000 00000000 00000000
+ 
+    For case 18, B = !b. Representable values are exactly those accepted by
+    vfp3_const_double_index, but are output as floating-point numbers rather
+    than indices.
+ 
++   For case 19, we will change it to vmov.i32 when assembling.
++
+    Variants 0-5 (inclusive) may also be used as immediates for the second
+    operand of VORR/VBIC instructions.
+ 
+@@ -6500,7 +8197,7 @@
+       rtx el0 = CONST_VECTOR_ELT (op, 0);
+       REAL_VALUE_TYPE r0;
+ 
+-      if (!vfp3_const_double_rtx (el0))
++      if (!vfp3_const_double_rtx (el0) && el0 != CONST0_RTX (GET_MODE (el0)))
+         return -1;
+ 
+       REAL_VALUE_FROM_CONST_DOUBLE (r0, el0);
+@@ -6522,7 +8219,10 @@
+       if (elementwidth)
+         *elementwidth = 0;
+ 
+-      return 18;
++      if (el0 == CONST0_RTX (GET_MODE (el0)))
++	return 19;
++      else
++	return 18;
+     }
+ 
+   /* Splat vector constant out into a byte vector.  */
+@@ -6753,25 +8453,198 @@
+     }
+ }
+ 
+-/* Initialize a vector with non-constant elements.  FIXME: We can do better
+-   than the current implementation (building a vector on the stack and then
+-   loading it) in many cases.  See rs6000.c.  */
++/* If VALS is a vector constant that can be loaded into a register
++   using VDUP, generate instructions to do so and return an RTX to
++   assign to the register.  Otherwise return NULL_RTX.  */
++
++static rtx
++neon_vdup_constant (rtx vals)
++{
++  enum machine_mode mode = GET_MODE (vals);
++  enum machine_mode inner_mode = GET_MODE_INNER (mode);
++  int n_elts = GET_MODE_NUNITS (mode);
++  bool all_same = true;
++  rtx x;
++  int i;
++
++  if (GET_CODE (vals) != CONST_VECTOR || GET_MODE_SIZE (inner_mode) > 4)
++    return NULL_RTX;
++
++  for (i = 0; i < n_elts; ++i)
++    {
++      x = XVECEXP (vals, 0, i);
++      if (i > 0 && !rtx_equal_p (x, XVECEXP (vals, 0, 0)))
++	all_same = false;
++    }
++
++  if (!all_same)
++    /* The elements are not all the same.  We could handle repeating
++       patterns of a mode larger than INNER_MODE here (e.g. int8x8_t
++       {0, C, 0, C, 0, C, 0, C} which can be loaded using
++       vdup.i16).  */
++    return NULL_RTX;
++
++  /* We can load this constant by using VDUP and a constant in a
++     single ARM register.  This will be cheaper than a vector
++     load.  */
++
++  x = copy_to_mode_reg (inner_mode, XVECEXP (vals, 0, 0));
++  return gen_rtx_VEC_DUPLICATE (mode, x);
++}
++
++/* Generate code to load VALS, which is a PARALLEL containing only
++   constants (for vec_init) or CONST_VECTOR, efficiently into a
++   register.  Returns an RTX to copy into the register, or NULL_RTX
++   for a PARALLEL that can not be converted into a CONST_VECTOR.  */
++
++rtx
++neon_make_constant (rtx vals)
++{
++  enum machine_mode mode = GET_MODE (vals);
++  rtx target;
++  rtx const_vec = NULL_RTX;
++  int n_elts = GET_MODE_NUNITS (mode);
++  int n_const = 0;
++  int i;
++
++  if (GET_CODE (vals) == CONST_VECTOR)
++    const_vec = vals;
++  else if (GET_CODE (vals) == PARALLEL)
++    {
++      /* A CONST_VECTOR must contain only CONST_INTs and
++	 CONST_DOUBLEs, but CONSTANT_P allows more (e.g. SYMBOL_REF).
++	 Only store valid constants in a CONST_VECTOR.  */
++      for (i = 0; i < n_elts; ++i)
++	{
++	  rtx x = XVECEXP (vals, 0, i);
++	  if (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE)
++	    n_const++;
++	}
++      if (n_const == n_elts)
++	const_vec = gen_rtx_CONST_VECTOR (mode, XVEC (vals, 0));
++    }
++  else
++    gcc_unreachable ();
++
++  if (const_vec != NULL
++      && neon_immediate_valid_for_move (const_vec, mode, NULL, NULL))
++    /* Load using VMOV.  On Cortex-A8 this takes one cycle.  */
++    return const_vec;
++  else if ((target = neon_vdup_constant (vals)) != NULL_RTX)
++    /* Loaded using VDUP.  On Cortex-A8 the VDUP takes one NEON
++       pipeline cycle; creating the constant takes one or two ARM
++       pipeline cycles.  */
++    return target;
++  else if (const_vec != NULL_RTX)
++    /* Load from constant pool.  On Cortex-A8 this takes two cycles
++       (for either double or quad vectors).  We can not take advantage
++       of single-cycle VLD1 because we need a PC-relative addressing
++       mode.  */
++    return const_vec;
++  else
++    /* A PARALLEL containing something not valid inside CONST_VECTOR.
++       We can not construct an initializer.  */
++    return NULL_RTX;
++}
++
++/* Initialize vector TARGET to VALS.  */
+ 
+ void
+ neon_expand_vector_init (rtx target, rtx vals)
+ {
+   enum machine_mode mode = GET_MODE (target);
+-  enum machine_mode inner = GET_MODE_INNER (mode);
+-  unsigned int i, n_elts = GET_MODE_NUNITS (mode);
+-  rtx mem;
++  enum machine_mode inner_mode = GET_MODE_INNER (mode);
++  int n_elts = GET_MODE_NUNITS (mode);
++  int n_var = 0, one_var = -1;
++  bool all_same = true;
++  rtx x, mem;
++  int i;
++
++  for (i = 0; i < n_elts; ++i)
++    {
++      x = XVECEXP (vals, 0, i);
++      if (!CONSTANT_P (x))
++	++n_var, one_var = i;
++
++      if (i > 0 && !rtx_equal_p (x, XVECEXP (vals, 0, 0)))
++	all_same = false;
++    }
++
++  if (n_var == 0)
++    {
++      rtx constant = neon_make_constant (vals);
++      if (constant != NULL_RTX)
++	{
++	  emit_move_insn (target, constant);
++	  return;
++	}
++    }
++
++  /* Splat a single non-constant element if we can.  */
++  if (all_same && GET_MODE_SIZE (inner_mode) <= 4)
++    {
++      x = copy_to_mode_reg (inner_mode, XVECEXP (vals, 0, 0));
++      emit_insn (gen_rtx_SET (VOIDmode, target,
++			      gen_rtx_VEC_DUPLICATE (mode, x)));
++      return;
++    }
+ 
+-  gcc_assert (VECTOR_MODE_P (mode));
++  /* One field is non-constant.  Load constant then overwrite varying
++     field.  This is more efficient than using the stack.  */
++  if (n_var == 1)
++    {
++      rtx copy = copy_rtx (vals);
++      rtx index = GEN_INT (one_var);
++
++      /* Load constant part of vector, substitute neighboring value for
++	 varying element.  */
++      XVECEXP (copy, 0, one_var) = XVECEXP (vals, 0, (one_var + 1) % n_elts);
++      neon_expand_vector_init (target, copy);
++
++      /* Insert variable.  */
++      x = copy_to_mode_reg (inner_mode, XVECEXP (vals, 0, one_var));
++      switch (mode)
++	{
++	case V8QImode:
++	  emit_insn (gen_neon_vset_lanev8qi (target, x, target, index));
++	  break;
++	case V16QImode:
++	  emit_insn (gen_neon_vset_lanev16qi (target, x, target, index));
++	  break;
++	case V4HImode:
++	  emit_insn (gen_neon_vset_lanev4hi (target, x, target, index));
++	  break;
++	case V8HImode:
++	  emit_insn (gen_neon_vset_lanev8hi (target, x, target, index));
++	  break;
++	case V2SImode:
++	  emit_insn (gen_neon_vset_lanev2si (target, x, target, index));
++	  break;
++	case V4SImode:
++	  emit_insn (gen_neon_vset_lanev4si (target, x, target, index));
++	  break;
++	case V2SFmode:
++	  emit_insn (gen_neon_vset_lanev2sf (target, x, target, index));
++	  break;
++	case V4SFmode:
++	  emit_insn (gen_neon_vset_lanev4sf (target, x, target, index));
++	  break;
++	case V2DImode:
++	  emit_insn (gen_neon_vset_lanev2di (target, x, target, index));
++	  break;
++	default:
++	  gcc_unreachable ();
++	}
++      return;
++    }
+ 
++  /* Construct the vector in memory one field at a time
++     and load the whole vector.  */
+   mem = assign_stack_temp (mode, GET_MODE_SIZE (mode), 0);
+   for (i = 0; i < n_elts; i++)
+-    emit_move_insn (adjust_address_nv (mem, inner, i * GET_MODE_SIZE (inner)),
+-                   XVECEXP (vals, 0, i));
+-
++    emit_move_insn (adjust_address_nv (mem, inner_mode,
++				    i * GET_MODE_SIZE (inner_mode)),
++		    XVECEXP (vals, 0, i));
+   emit_move_insn (target, mem);
+ }
+ 
+@@ -6930,10 +8803,13 @@
+ }
+ 
+ /* Return TRUE if OP is a memory operand which we can load or store a vector
+-   to/from. If CORE is true, we're moving from ARM registers not Neon
+-   registers.  */
++   to/from. TYPE is one of the following values:
++    0 - Vector load/stor (vldr)
++    1 - Core registers (ldm)
++    2 - Element/structure loads (vld1)
++ */
+ int
+-neon_vector_mem_operand (rtx op, bool core)
++neon_vector_mem_operand (rtx op, int type)
+ {
+   rtx ind;
+ 
+@@ -6966,23 +8842,16 @@
+     return arm_address_register_rtx_p (ind, 0);
+ 
+   /* Allow post-increment with Neon registers.  */
+-  if (!core && GET_CODE (ind) == POST_INC)
++  if ((type != 1 && GET_CODE (ind) == POST_INC)
++      || (type == 0 && GET_CODE (ind) == PRE_DEC))
+     return arm_address_register_rtx_p (XEXP (ind, 0), 0);
+ 
+-#if 0
+-  /* FIXME: We can support this too if we use VLD1/VST1.  */
+-  if (!core
+-      && GET_CODE (ind) == POST_MODIFY
+-      && arm_address_register_rtx_p (XEXP (ind, 0), 0)
+-      && GET_CODE (XEXP (ind, 1)) == PLUS
+-      && rtx_equal_p (XEXP (XEXP (ind, 1), 0), XEXP (ind, 0)))
+-    ind = XEXP (ind, 1);
+-#endif
++  /* FIXME: vld1 allows register post-modify.  */
+ 
+   /* Match:
+      (plus (reg)
+           (const)).  */
+-  if (!core
++  if (type == 0
+       && GET_CODE (ind) == PLUS
+       && GET_CODE (XEXP (ind, 0)) == REG
+       && REG_MODE_OK_FOR_BASE_P (XEXP (ind, 0), VOIDmode)
+@@ -7049,10 +8918,19 @@
+ enum reg_class
+ coproc_secondary_reload_class (enum machine_mode mode, rtx x, bool wb)
+ {
++  if (mode == HFmode)
++    {
++      if (!TARGET_NEON_FP16)
++	return GENERAL_REGS;
++      if (s_register_operand (x, mode) || neon_vector_mem_operand (x, 2))
++	return NO_REGS;
++      return GENERAL_REGS;
++    }
++
+   if (TARGET_NEON
+       && (GET_MODE_CLASS (mode) == MODE_VECTOR_INT
+           || GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
+-      && neon_vector_mem_operand (x, FALSE))
++      && neon_vector_mem_operand (x, 0))
+      return NO_REGS;
+ 
+   if (arm_coproc_mem_operand (x, wb) || s_register_operand (x, mode))
+@@ -7412,7 +9290,7 @@
+       /* Don't accept any offset that will require multiple
+ 	 instructions to handle, since this would cause the
+ 	 arith_adjacentmem pattern to output an overlong sequence.  */
+-      if (!const_ok_for_op (PLUS, val0) || !const_ok_for_op (PLUS, val1))
++      if (!const_ok_for_op (val0, PLUS) || !const_ok_for_op (val1, PLUS))
+ 	return 0;
+ 
+       /* Don't allow an eliminable register: register elimination can make
+@@ -7449,6 +9327,9 @@
+   int base_reg = -1;
+   int i;
+ 
++  if (low_irq_latency)
++    return 0;
++
+   /* Can only handle 2, 3, or 4 insns at present,
+      though could be easily extended if required.  */
+   gcc_assert (nops >= 2 && nops <= 4);
+@@ -7678,6 +9559,9 @@
+   int base_reg = -1;
+   int i;
+ 
++  if (low_irq_latency)
++    return 0;
++
+   /* Can only handle 2, 3, or 4 insns at present, though could be easily
+      extended if required.  */
+   gcc_assert (nops >= 2 && nops <= 4);
+@@ -7885,7 +9769,7 @@
+ 
+      As a compromise, we use ldr for counts of 1 or 2 regs, and ldm
+      for counts of 3 or 4 regs.  */
+-  if (arm_tune_xscale && count <= 2 && ! optimize_size)
++  if (low_irq_latency || (arm_tune_xscale && count <= 2 && ! optimize_size))
+     {
+       rtx seq;
+ 
+@@ -7948,7 +9832,7 @@
+ 
+   /* See arm_gen_load_multiple for discussion of
+      the pros/cons of ldm/stm usage for XScale.  */
+-  if (arm_tune_xscale && count <= 2 && ! optimize_size)
++  if (low_irq_latency || (arm_tune_xscale && count <= 2 && ! optimize_size))
+     {
+       rtx seq;
+ 
+@@ -8419,6 +10303,55 @@
+       && (rtx_equal_p (XEXP (x, 0), y) || rtx_equal_p (XEXP (x, 1), y)))
+     return CC_Cmode;
+ 
++  if (GET_MODE (x) == DImode || GET_MODE (y) == DImode)
++    {
++      /* To keep things simple, always use the Cirrus cfcmp64 if it is
++	 available.  */
++      if (TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK)
++	return CCmode;
++
++      switch (op)
++	{
++	case EQ:
++	case NE:
++	  /* A DImode comparison against zero can be implemented by
++	     or'ing the two halves together.  */
++	  if (y == const0_rtx)
++	    return CC_Zmode;
++
++	  /* We can do an equality test in three Thumb instructions.  */
++	  if (!TARGET_ARM)
++	    return CC_Zmode;
++
++	  /* FALLTHROUGH */
++
++	case LTU:
++	case LEU:
++	case GTU:
++	case GEU:
++	  /* DImode unsigned comparisons can be implemented by cmp +
++	     cmpeq without a scratch register.  Not worth doing in
++	     Thumb-2.  */
++	  if (TARGET_ARM)
++	    return CC_CZmode;
++
++	  /* FALLTHROUGH */
++
++	case LT:
++	case LE:
++	case GT:
++	case GE:
++	  /* DImode signed and unsigned comparisons can be implemented
++	     by cmp + sbcs with a scratch register, but that does not
++	     set the Z flag - we must reverse GT/LE/GTU/LEU.  */
++	  gcc_assert (op != EQ && op != NE);
++	  return CC_NCVmode;
++
++	default:
++	  gcc_unreachable ();
++	}
++    }
++
+   return CCmode;
+ }
+ 
+@@ -8428,10 +10361,39 @@
+ rtx
+ arm_gen_compare_reg (enum rtx_code code, rtx x, rtx y)
+ {
+-  enum machine_mode mode = SELECT_CC_MODE (code, x, y);
+-  rtx cc_reg = gen_rtx_REG (mode, CC_REGNUM);
++  enum machine_mode mode;
++  rtx cc_reg;
++  int dimode_comparison = GET_MODE (x) == DImode || GET_MODE (y) == DImode;
+ 
+-  emit_set_insn (cc_reg, gen_rtx_COMPARE (mode, x, y));
++  /* We might have X as a constant, Y as a register because of the predicates
++     used for cmpdi.  If so, force X to a register here.  */
++  if (dimode_comparison && !REG_P (x))
++    x = force_reg (DImode, x);
++
++  mode = SELECT_CC_MODE (code, x, y);
++  cc_reg = gen_rtx_REG (mode, CC_REGNUM);
++
++  if (dimode_comparison
++      && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)
++      && mode != CC_CZmode)
++    {
++      rtx clobber, set;
++
++      /* To compare two non-zero values for equality, XOR them and
++	 then compare against zero.  Not used for ARM mode; there
++	 CC_CZmode is cheaper.  */
++      if (mode == CC_Zmode && y != const0_rtx)
++	{
++	  x = expand_binop (DImode, xor_optab, x, y, NULL_RTX, 0, OPTAB_WIDEN);
++	  y = const0_rtx;
++	}
++      /* A scratch register is required.  */
++      clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (SImode));
++      set = gen_rtx_SET (VOIDmode, cc_reg, gen_rtx_COMPARE (mode, x, y));
++      emit_insn (gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, set, clobber)));
++    }
++  else
++    emit_set_insn (cc_reg, gen_rtx_COMPARE (mode, x, y));
+ 
+   return cc_reg;
+ }
+@@ -9566,7 +11528,10 @@
+       gcc_assert (GET_CODE (from) != BARRIER);
+ 
+       /* Count the length of this insn.  */
+-      count += get_attr_length (from);
++      if (LABEL_P (from) && (align_jumps > 0 || align_loops > 0))
++        count += MAX (align_jumps, align_loops);
++      else
++        count += get_attr_length (from);
+ 
+       /* If there is a jump table, add its length.  */
+       tmp = is_jump_table (from);
+@@ -9760,6 +11725,34 @@
+   return false;
+ }
+ 
++/* Return true if it is possible to inline both the high and low parts
++   of a 64-bit constant into 32-bit data processing instructions.  */
++bool
++arm_const_double_by_immediates (rtx val)
++{
++  enum machine_mode mode = GET_MODE (val);
++  rtx part;
++
++  if (mode == VOIDmode)
++    mode = DImode;
++
++  part = gen_highpart_mode (SImode, mode, val);
++
++  gcc_assert (GET_CODE (part) == CONST_INT);
++
++  if (!const_ok_for_arm (INTVAL (part)))
++    return false;
++
++  part = gen_lowpart (SImode, val);
++
++  gcc_assert (GET_CODE (part) == CONST_INT);
++
++  if (!const_ok_for_arm (INTVAL (part)))
++    return false;
++
++  return true;
++}
++
+ /* Scan INSN and note any of its operands that need fixing.
+    If DO_PUSHES is false we do not actually push any of the fixups
+    needed.  The function returns TRUE if any fixups were needed/pushed.
+@@ -9878,6 +11871,8 @@
+ 	      insn = table;
+ 	    }
+ 	}
++      else if (LABEL_P (insn) && (align_jumps > 0 || align_loops > 0))
++	address += MAX (align_jumps, align_loops);
+     }
+ 
+   fix = minipool_fix_head;
+@@ -10083,6 +12078,21 @@
+ vfp_output_fldmd (FILE * stream, unsigned int base, int reg, int count)
+ {
+   int i;
++  int offset;
++
++  if (low_irq_latency)
++    {
++      /* Output a sequence of FLDD instructions.  */
++      offset = 0;
++      for (i = reg; i < reg + count; ++i, offset += 8)
++	{
++	  fputc ('\t', stream);
++	  asm_fprintf (stream, "fldd\td%d, [%r,#%d]\n", i, base, offset);
++	}
++      asm_fprintf (stream, "\tadd\tsp, sp, #%d\n", count * 8);
++      return;
++    }
++
+ 
+   /* Workaround ARM10 VFPr1 bug.  */
+   if (count == 2 && !arm_arch6)
+@@ -10153,6 +12163,56 @@
+   rtx tmp, reg;
+   int i;
+ 
++  if (low_irq_latency)
++    {
++      int saved_size;
++      rtx sp_insn;
++
++      if (!count)
++	return 0;
++
++      saved_size = count * GET_MODE_SIZE (DFmode);
++
++      /* Since fstd does not have postdecrement addressing mode,
++	 we first decrement stack pointer and then use base+offset
++	 stores for VFP registers. The ARM EABI unwind information 
++	 can't easily describe base+offset loads, so we attach
++	 a note for the effects of the whole block in the first insn, 
++	 and  avoid marking the subsequent instructions 
++	 with RTX_FRAME_RELATED_P.  */
++      sp_insn = gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx,
++			    GEN_INT (-saved_size));
++      sp_insn = emit_insn (sp_insn);
++      RTX_FRAME_RELATED_P (sp_insn) = 1;
++
++      dwarf = gen_rtx_SEQUENCE (VOIDmode, rtvec_alloc (count + 1));
++      XVECEXP (dwarf, 0, 0) = 
++	gen_rtx_SET (VOIDmode, stack_pointer_rtx,
++		     plus_constant (stack_pointer_rtx, -saved_size));
++      
++      /* push double VFP registers to stack */
++      for (i = 0; i < count; ++i )
++	{
++	  rtx reg;
++	  rtx mem;
++	  rtx addr;
++	  rtx insn;
++	  reg = gen_rtx_REG (DFmode, base_reg + 2*i);
++	  addr = (i == 0) ? stack_pointer_rtx
++	    : gen_rtx_PLUS (SImode, stack_pointer_rtx,
++			    GEN_INT (i * GET_MODE_SIZE (DFmode)));
++	  mem = gen_frame_mem (DFmode, addr);
++	  insn = emit_move_insn (mem, reg);
++	  XVECEXP (dwarf, 0, i+1) = 
++	    gen_rtx_SET (VOIDmode, mem, reg);
++	}
++
++      REG_NOTES (sp_insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, dwarf,
++					       REG_NOTES (sp_insn));
++      
++      return saved_size;
++    }
++
+   /* Workaround ARM10 VFPr1 bug.  Data corruption can occur when exactly two
+      register pairs are stored by a store multiple insn.  We avoid this
+      by pushing an extra pair.  */
+@@ -10703,13 +12763,13 @@
+ 	    {
+ 	      if (GET_CODE (XEXP (operands[0], 0)) == PRE_MODIFY)
+ 		{
+-		  output_asm_insn ("ldr%?\t%0, [%1, %2]!", otherops);
+-		  output_asm_insn ("ldr%?\t%H0, [%1, #4]", otherops);
++		  output_asm_insn ("str%?\t%0, [%1, %2]!", otherops);
++		  output_asm_insn ("str%?\t%H0, [%1, #4]", otherops);
+ 		}
+ 	      else
+ 		{
+-		  output_asm_insn ("ldr%?\t%H0, [%1, #4]", otherops);
+-		  output_asm_insn ("ldr%?\t%0, [%1], %2", otherops);
++		  output_asm_insn ("str%?\t%H0, [%1, #4]", otherops);
++		  output_asm_insn ("str%?\t%0, [%1], %2", otherops);
+ 		}
+ 	    }
+ 	  else if (GET_CODE (XEXP (operands[0], 0)) == PRE_MODIFY)
+@@ -10767,7 +12827,7 @@
+ }
+ 
+ /* Output a move, load or store for quad-word vectors in ARM registers.  Only
+-   handles MEMs accepted by neon_vector_mem_operand with CORE=true.  */
++   handles MEMs accepted by neon_vector_mem_operand with TYPE=1.  */
+ 
+ const char *
+ output_move_quad (rtx *operands)
+@@ -10963,6 +13023,12 @@
+       ops[1] = reg;
+       break;
+ 
++    case PRE_DEC:
++      templ = "v%smdb%%?\t%%0!, %%h1";
++      ops[0] = XEXP (addr, 0);
++      ops[1] = reg;
++      break;
++    
+     case POST_MODIFY:
+       /* FIXME: Not currently enabled in neon_vector_mem_operand.  */
+       gcc_unreachable ();
+@@ -11012,6 +13078,57 @@
+   return "";
+ }
+ 
++/* Compute and return the length of neon_mov<mode>, where <mode> is
++   one of VSTRUCT modes: EI, OI, CI or XI.  */
++int
++arm_attr_length_move_neon (rtx insn)
++{
++  rtx reg, mem, addr;
++  int regno, load;
++  enum machine_mode mode;
++
++  extract_insn_cached (insn);
++
++  if (REG_P (recog_data.operand[0]) && REG_P (recog_data.operand[1]))
++    {
++      mode = GET_MODE (recog_data.operand[0]);
++      switch (mode)
++	{
++	case EImode:
++	case OImode:
++	  return 8;
++	case CImode:
++	  return 12;
++	case XImode:
++	  return 16;
++	default:
++	  gcc_unreachable ();
++	}
++    }
++
++  load = REG_P (recog_data.operand[0]);
++  reg = recog_data.operand[!load];
++  mem = recog_data.operand[load];
++
++  gcc_assert (MEM_P (mem));
++
++  mode = GET_MODE (reg);
++  regno = REGNO (reg);
++  addr = XEXP (mem, 0);
++
++  /* Strip off const from addresses like (const (plus (...))).  */
++  if (GET_CODE (addr) == CONST && GET_CODE (XEXP (addr, 0)) == PLUS)
++    addr = XEXP (addr, 0);
++
++  if (GET_CODE (addr) == LABEL_REF || GET_CODE (addr) == PLUS)
++    {
++      int insns = HARD_REGNO_NREGS (REGNO (reg), mode) / 2;
++      return insns * 4;
++    }
++  else
++    return 4;
++}
++
+ /* Output an ADD r, s, #n where n may be too big for one instruction.
+    If adding zero to one register, output nothing.  */
+ const char *
+@@ -11318,6 +13435,20 @@
+ 	  && crtl->uses_pic_offset_table)
+ 	save_reg_mask |= 1 << PIC_OFFSET_TABLE_REGNUM;
+     }
++  else if (IS_VOLATILE(func_type))
++    {
++      /* For noreturn functions we historically omitted register saves
++	 altogether.  However this really messes up debugging.  As a
++	 compromise save just the fame pointers.  Combined with the link
++	 register saved elsewhere this should be sufficient to get
++	 a backtrace.  */
++      if (frame_pointer_needed)
++	save_reg_mask |= 1 << HARD_FRAME_POINTER_REGNUM;
++      if (df_regs_ever_live_p (ARM_HARD_FRAME_POINTER_REGNUM))
++	save_reg_mask |= 1 << ARM_HARD_FRAME_POINTER_REGNUM;
++      if (df_regs_ever_live_p (THUMB_HARD_FRAME_POINTER_REGNUM))
++	save_reg_mask |= 1 << THUMB_HARD_FRAME_POINTER_REGNUM;
++    }
+   else
+     {
+       /* In the normal case we only need to save those registers
+@@ -11404,11 +13535,6 @@
+       | (1 << LR_REGNUM)
+       | (1 << PC_REGNUM);
+ 
+-  /* Volatile functions do not return, so there
+-     is no need to save any other registers.  */
+-  if (IS_VOLATILE (func_type))
+-    return save_reg_mask;
+-
+   save_reg_mask |= arm_compute_save_reg0_reg12_mask ();
+ 
+   /* Decide if we need to save the link register.
+@@ -11566,7 +13692,7 @@
+ 	      if (count > 0)
+ 		{
+ 		  /* Workaround ARM10 VFPr1 bug.  */
+-		  if (count == 2 && !arm_arch6)
++		  if (count == 2 && !arm_arch6 && !low_irq_latency)
+ 		    count++;
+ 		  saved += count * 8;
+ 		}
+@@ -11706,8 +13832,10 @@
+ 		  sprintf (instr, "ldm%sfd\t%%|sp, {", conditional);
+ 		}
+ 	    }
+-	  else
++	  else if (TARGET_ARM)
+ 	    sprintf (instr, "ldm%sfd\t%%|sp!, {", conditional);
++	  else
++	    sprintf (instr, "pop\t{");
+ 
+ 	  p = instr + strlen (instr);
+ 
+@@ -11895,6 +14023,41 @@
+   return_used_this_function = 0;
+ }
+ 
++/* Generate to STREAM a code sequence that pops registers identified 
++   in REGS_MASK from SP. SP is incremented as the result.
++*/
++static void
++print_pop_reg_by_ldr (FILE *stream, int regs_mask, int rfe)
++{
++  int reg;
++
++  gcc_assert (! (regs_mask & (1 << SP_REGNUM)));
++  
++  for (reg = 0; reg < PC_REGNUM; ++reg)
++    if (regs_mask & (1 << reg))
++      asm_fprintf (stream, "\tldr\t%r, [%r], #4\n",
++		   reg, SP_REGNUM); 
++
++  if (regs_mask & (1 << PC_REGNUM))
++    {
++      if (rfe)
++	/* When returning from exception, we need to
++	   copy SPSR to CPSR.  There are two ways to do
++	   that: the ldm instruction with "^" suffix,
++	   and movs instruction.  The latter would
++	   require that we load from stack to some
++	   scratch register, and then move to PC.
++	   Therefore, we'd need extra instruction and
++	   have to make sure we actually have a spare
++	   register.  Using ldm with a single register
++	   is simler.  */
++	asm_fprintf (stream, "\tldm\tsp!, {pc}^\n");
++      else
++	asm_fprintf (stream, "\tldr\t%r, [%r], #4\n",
++		     PC_REGNUM, SP_REGNUM); 
++    }
++}
++
+ const char *
+ arm_output_epilogue (rtx sibling)
+ {
+@@ -11955,7 +14118,7 @@
+       /* This variable is for the Virtual Frame Pointer, not VFP regs.  */
+       int vfp_offset = offsets->frame;
+ 
+-      if (arm_fpu_arch == FPUTYPE_FPA_EMU2)
++      if (TARGET_FPA_EMU2)
+ 	{
+ 	  for (reg = LAST_FPA_REGNUM; reg >= FIRST_FPA_REGNUM; reg--)
+ 	    if (df_regs_ever_live_p (reg) && !call_used_regs[reg])
+@@ -12179,7 +14342,7 @@
+ 			 SP_REGNUM, HARD_FRAME_POINTER_REGNUM);
+ 	}
+ 
+-      if (arm_fpu_arch == FPUTYPE_FPA_EMU2)
++      if (TARGET_FPA_EMU2)
+ 	{
+ 	  for (reg = FIRST_FPA_REGNUM; reg <= LAST_FPA_REGNUM; reg++)
+ 	    if (df_regs_ever_live_p (reg) && !call_used_regs[reg])
+@@ -12220,24 +14383,29 @@
+ 
+       if (TARGET_HARD_FLOAT && TARGET_VFP)
+ 	{
+-	  start_reg = FIRST_VFP_REGNUM;
+-	  for (reg = FIRST_VFP_REGNUM; reg < LAST_VFP_REGNUM; reg += 2)
++	  int end_reg = LAST_VFP_REGNUM + 1;
++
++	  /* Scan the registers in reverse order.  We need to match
++	     any groupings made in the prologue and generate matching
++	     pop operations.  */
++	  for (reg = LAST_VFP_REGNUM - 1; reg >= FIRST_VFP_REGNUM; reg -= 2)
+ 	    {
+ 	      if ((!df_regs_ever_live_p (reg) || call_used_regs[reg])
+-		  && (!df_regs_ever_live_p (reg + 1) || call_used_regs[reg + 1]))
++		  && (!df_regs_ever_live_p (reg + 1)
++		      || call_used_regs[reg + 1]))
+ 		{
+-		  if (start_reg != reg)
++		  if (end_reg > reg + 2)
+ 		    vfp_output_fldmd (f, SP_REGNUM,
+-				      (start_reg - FIRST_VFP_REGNUM) / 2,
+-				      (reg - start_reg) / 2);
+-		  start_reg = reg + 2;
++				      (reg + 2 - FIRST_VFP_REGNUM) / 2,
++				      (end_reg - (reg + 2)) / 2);
++		  end_reg = reg;
+ 		}
+ 	    }
+-	  if (start_reg != reg)
+-	    vfp_output_fldmd (f, SP_REGNUM,
+-			      (start_reg - FIRST_VFP_REGNUM) / 2,
+-			      (reg - start_reg) / 2);
++	  if (end_reg > reg + 2)
++	    vfp_output_fldmd (f, SP_REGNUM, 0,
++			      (end_reg - (reg + 2)) / 2);
+ 	}
++
+       if (TARGET_IWMMXT)
+ 	for (reg = FIRST_IWMMXT_REGNUM; reg <= LAST_IWMMXT_REGNUM; reg++)
+ 	  if (df_regs_ever_live_p (reg) && !call_used_regs[reg])
+@@ -12263,22 +14431,19 @@
+ 	 to load use the LDR instruction - it is faster.  For Thumb-2
+ 	 always use pop and the assembler will pick the best instruction.*/
+       if (TARGET_ARM && saved_regs_mask == (1 << LR_REGNUM)
+-	  && !IS_INTERRUPT(func_type))
++	  && !IS_INTERRUPT (func_type))
+ 	{
+ 	  asm_fprintf (f, "\tldr\t%r, [%r], #4\n", LR_REGNUM, SP_REGNUM);
+ 	}
+       else if (saved_regs_mask)
+ 	{
+-	  if (saved_regs_mask & (1 << SP_REGNUM))
+-	    /* Note - write back to the stack register is not enabled
+-	       (i.e. "ldmfd sp!...").  We know that the stack pointer is
+-	       in the list of registers and if we add writeback the
+-	       instruction becomes UNPREDICTABLE.  */
+-	    print_multi_reg (f, "ldmfd\t%r, ", SP_REGNUM, saved_regs_mask,
+-			     rfe);
+-	  else if (TARGET_ARM)
+-	    print_multi_reg (f, "ldmfd\t%r!, ", SP_REGNUM, saved_regs_mask,
+-			     rfe);
++	  gcc_assert ( ! (saved_regs_mask & (1 << SP_REGNUM)));
++	  if (TARGET_ARM)
++	    if (low_irq_latency)
++	      print_pop_reg_by_ldr (f, saved_regs_mask, rfe);
++	    else
++	      print_multi_reg (f, "ldmfd\t%r!, ", SP_REGNUM, saved_regs_mask,
++			       rfe);
+ 	  else
+ 	    print_multi_reg (f, "pop\t", SP_REGNUM, saved_regs_mask, 0);
+ 	}
+@@ -12399,6 +14564,32 @@
+ 
+   gcc_assert (num_regs && num_regs <= 16);
+ 
++  if (low_irq_latency)
++    {
++      rtx insn = 0;
++
++      /* Emit a series of ldr instructions rather rather than a single ldm.  */
++      /* TODO: Use ldrd where possible.  */
++      gcc_assert (! (mask & (1 << SP_REGNUM)));
++
++      for (i = LAST_ARM_REGNUM; i >= 0; --i)
++        {
++          if (mask & (1 << i))
++
++            {
++              rtx reg, where, mem;
++
++	      reg = gen_rtx_REG (SImode, i);
++	      where = gen_rtx_PRE_DEC (SImode, stack_pointer_rtx);
++	      mem = gen_rtx_MEM (SImode, where);
++	      insn = emit_move_insn (mem, reg);
++	      RTX_FRAME_RELATED_P (insn) = 1;
++            }
++        }
++
++      return insn;
++    }
++
+   /* We don't record the PC in the dwarf frame information.  */
+   num_dwarf_regs = num_regs;
+   if (mask & (1 << PC_REGNUM))
+@@ -12747,22 +14938,23 @@
+ 	{
+ 	  int reg = -1;
+ 
+-	  for (i = 4; i <= (TARGET_THUMB1 ? LAST_LO_REGNUM : 11); i++)
+-	    {
+-	      if ((offsets->saved_regs_mask & (1 << i)) == 0)
+-		{
+-		  reg = i;
+-		  break;
+-		}
+-	    }
+-
+-	  if (reg == -1 && arm_size_return_regs () <= 12
+-	      && !crtl->tail_call_emit)
++	  /* If it is safe to use r3, then do so.  This sometimes 
++	     generates better code on Thumb-2 by avoiding the need to
++	     use 32-bit push/pop instructions.  */
++	  if (!crtl->tail_call_emit
++	      && arm_size_return_regs () <= 12)
+ 	    {
+-	      /* Push/pop an argument register (r3) if all callee saved
+-	         registers are already being pushed.  */
+ 	      reg = 3;
+ 	    }
++	  else
++	    for (i = 4; i <= (TARGET_THUMB1 ? LAST_LO_REGNUM : 11); i++)
++	      {
++		if ((offsets->saved_regs_mask & (1 << i)) == 0)
++		  {
++		    reg = i;
++		    break;
++		  }
++	      }
+ 
+ 	  if (reg != -1)
+ 	    {
+@@ -12886,7 +15078,7 @@
+ 
+   /* Save any floating point call-saved registers used by this
+      function.  */
+-  if (arm_fpu_arch == FPUTYPE_FPA_EMU2)
++  if (TARGET_FPA_EMU2)
+     {
+       for (reg = LAST_FPA_REGNUM; reg >= FIRST_FPA_REGNUM; reg--)
+ 	if (df_regs_ever_live_p (reg) && !call_used_regs[reg])
+@@ -13430,6 +15622,7 @@
+ 	  fprintf (stream, HOST_WIDE_INT_PRINT_DEC, INTVAL (x));
+ 	  break;
+ 
++	case CONST:
+ 	case SYMBOL_REF:
+ 	  output_addr_const (stream, x);
+ 	  break;
+@@ -13493,7 +15686,11 @@
+ 	  {
+ 	    fprintf (stream, ", %s ", shift);
+ 	    if (val == -1)
+-	      arm_print_operand (stream, XEXP (x, 1), 0);
++              {
++	        arm_print_operand (stream, XEXP (x, 1), 0);
++                if (janus2_code)
++                  fprintf(stream, "\n\tnop");
++              }
+ 	    else
+ 	      fprintf (stream, "#" HOST_WIDE_INT_PRINT_DEC, val);
+ 	  }
+@@ -13526,8 +15723,18 @@
+ 	 the value being loaded is big-wordian or little-wordian.  The
+ 	 order of the two register loads can matter however, if the address
+ 	 of the memory location is actually held in one of the registers
+-	 being overwritten by the load.  */
++	 being overwritten by the load.
++
++	 The 'Q' and 'R' constraints are also available for 64-bit
++	 constants.  */
+     case 'Q':
++      if (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE)
++	{
++	  rtx part = gen_lowpart (SImode, x);
++	  fprintf (stream, "#" HOST_WIDE_INT_PRINT_DEC, INTVAL (part));
++	  return;
++	}
++
+       if (GET_CODE (x) != REG || REGNO (x) > LAST_ARM_REGNUM)
+ 	{
+ 	  output_operand_lossage ("invalid operand for code '%c'", code);
+@@ -13538,6 +15745,18 @@
+       return;
+ 
+     case 'R':
++      if (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE)
++	{
++	  enum machine_mode mode = GET_MODE (x);
++	  rtx part;
++
++	  if (mode == VOIDmode)
++	    mode = DImode;
++	  part = gen_highpart_mode (SImode, mode, x);
++	  fprintf (stream, "#" HOST_WIDE_INT_PRINT_DEC, INTVAL (part));
++	  return;
++	}
++
+       if (GET_CODE (x) != REG || REGNO (x) > LAST_ARM_REGNUM)
+ 	{
+ 	  output_operand_lossage ("invalid operand for code '%c'", code);
+@@ -13714,6 +15933,30 @@
+ 	}
+       return;
+ 
++    /* Print the high single-precision register of a VFP double-precision
++       register.  */
++    case 'p':
++      {
++        int mode = GET_MODE (x);
++        int regno;
++
++        if (GET_MODE_SIZE (mode) != 8 || GET_CODE (x) != REG)
++          {
++	    output_operand_lossage ("invalid operand for code '%c'", code);
++	    return;
++          }
++
++        regno = REGNO (x);
++        if (!VFP_REGNO_OK_FOR_DOUBLE (regno))
++          {
++	    output_operand_lossage ("invalid operand for code '%c'", code);
++	    return;
++          }
++
++	fprintf (stream, "s%d", regno - FIRST_VFP_REGNUM + 1);
++      }
++      return;
++
+     /* Print a VFP/Neon double precision or quad precision register name.  */
+     case 'P':
+     case 'q':
+@@ -13831,6 +16074,81 @@
+       }
+       return;
+ 
++    /* Memory operand for vld1/vst1 instruction.  */
++    case 'A':
++      {
++	rtx addr;
++	bool postinc = FALSE;
++	unsigned align;
++
++	gcc_assert (GET_CODE (x) == MEM);
++	addr = XEXP (x, 0);
++	if (GET_CODE (addr) == POST_INC)
++	  {
++	    postinc = 1;
++	    addr = XEXP (addr, 0);
++	  }
++	align = MEM_ALIGN (x) >> 3;
++	asm_fprintf (stream, "[%r", REGNO (addr));
++	if (align > GET_MODE_SIZE (GET_MODE (x)))
++	  align = GET_MODE_SIZE (GET_MODE (x));
++	if (align >= 8)
++	  asm_fprintf (stream, ", :%d", align << 3);
++	asm_fprintf (stream, "]");
++	if (postinc)
++	  fputs("!", stream);
++      }
++      return;
++
++    /* Translate an S register number into a D register number and element index.  */
++    case 'y':
++      {
++        int mode = GET_MODE (x);
++        int regno;
++
++        if (GET_MODE_SIZE (mode) != 4 || GET_CODE (x) != REG)
++          {
++	    output_operand_lossage ("invalid operand for code '%c'", code);
++	    return;
++          }
++
++        regno = REGNO (x);
++        if (!VFP_REGNO_OK_FOR_SINGLE (regno))
++          {
++	    output_operand_lossage ("invalid operand for code '%c'", code);
++	    return;
++          }
++
++	regno = regno - FIRST_VFP_REGNUM;
++	fprintf (stream, "d%d[%d]", regno / 2, regno % 2);
++      }
++      return;
++
++    /* Register specifier for vld1.16/vst1.16.  Translate the S register
++       number into a D register number and element index.  */
++    case 'z':
++      {
++        int mode = GET_MODE (x);
++        int regno;
++
++        if (GET_MODE_SIZE (mode) != 2 || GET_CODE (x) != REG)
++          {
++	    output_operand_lossage ("invalid operand for code '%c'", code);
++	    return;
++          }
++
++        regno = REGNO (x);
++        if (!VFP_REGNO_OK_FOR_SINGLE (regno))
++          {
++	    output_operand_lossage ("invalid operand for code '%c'", code);
++	    return;
++          }
++
++	regno = regno - FIRST_VFP_REGNUM;
++	fprintf (stream, "d%d[%d]", regno/2, ((regno % 2) ? 2 : 0));
++      }
++      return;
++      
+     default:
+       if (x == 0)
+ 	{
+@@ -13864,6 +16182,12 @@
+ 	default:
+ 	  gcc_assert (GET_CODE (x) != NEG);
+ 	  fputc ('#', stream);
++	  if (GET_CODE (x) == HIGH)
++	    {
++	      fputs (":lower16:", stream);
++	      x = XEXP (x, 0);
++	    }
++	    
+ 	  output_addr_const (stream, x);
+ 	  break;
+ 	}
+@@ -14133,6 +16457,28 @@
+       default: gcc_unreachable ();
+       }
+ 
++    case CC_CZmode:
++      switch (comp_code)
++	{
++	case NE: return ARM_NE;
++	case EQ: return ARM_EQ;
++	case GEU: return ARM_CS;
++	case GTU: return ARM_HI;
++	case LEU: return ARM_LS;
++	case LTU: return ARM_CC;
++	default: gcc_unreachable ();
++	}
++
++    case CC_NCVmode:
++      switch (comp_code)
++	{
++	case GE: return ARM_GE;
++	case LT: return ARM_LT;
++	case GEU: return ARM_CS;
++	case LTU: return ARM_CC;
++	default: gcc_unreachable ();
++	}
++
+     case CCmode:
+       switch (comp_code)
+ 	{
+@@ -14255,6 +16601,10 @@
+      first insn after the following code_label if REVERSE is true.  */
+   rtx start_insn = insn;
+ 
++  /* Don't do this if we're not considering conditional execution.  */
++  if (TARGET_NO_SINGLE_COND_EXEC)
++    return;
++
+   /* If in state 4, check if the target branch is reached, in order to
+      change back to state 0.  */
+   if (arm_ccfsm_state == 4)
+@@ -14628,6 +16978,11 @@
+       if (mode == DFmode)
+ 	return VFP_REGNO_OK_FOR_DOUBLE (regno);
+ 
++      /* VFP registers can hold HFmode values, but there is no point in
++	 putting them there unless we have hardware conversion insns. */
++      if (mode == HFmode)
++	return TARGET_FP16 && VFP_REGNO_OK_FOR_SINGLE (regno);
++
+       if (TARGET_NEON)
+         return (VALID_NEON_DREG_MODE (mode) && VFP_REGNO_OK_FOR_DOUBLE (regno))
+                || (VALID_NEON_QREG_MODE (mode)
+@@ -14647,16 +17002,16 @@
+ 	return mode == SImode;
+ 
+       if (IS_IWMMXT_REGNUM (regno))
+-	return VALID_IWMMXT_REG_MODE (mode);
++	return VALID_IWMMXT_REG_MODE (mode) && mode != SImode;
+     }
+   
+-  /* We allow any value to be stored in the general registers.
++  /* We allow almost any value to be stored in the general registers.
+      Restrict doubleword quantities to even register pairs so that we can
+-     use ldrd.  Do not allow Neon structure opaque modes in general registers;
+-     they would use too many.  */
++     use ldrd.  Do not allow very large Neon structure opaque modes in
++     general registers; they would use too many.  */
+   if (regno <= LAST_ARM_REGNUM)
+     return !(TARGET_LDRD && GET_MODE_SIZE (mode) > 4 && (regno & 1) != 0)
+-      && !VALID_NEON_STRUCT_MODE (mode);
++      && ARM_NUM_REGS (mode) <= 4;
+ 
+   if (regno == FRAME_POINTER_REGNUM
+       || regno == ARG_POINTER_REGNUM)
+@@ -16113,6 +18468,15 @@
+ }
+ 
+ static void
++arm_init_fp16_builtins (void)
++{
++  tree fp16_type = make_node (REAL_TYPE);
++  TYPE_PRECISION (fp16_type) = 16;
++  layout_type (fp16_type);
++  (*lang_hooks.types.register_builtin_type) (fp16_type, "__fp16");
++}
++
++static void
+ arm_init_builtins (void)
+ {
+   arm_init_tls_builtins ();
+@@ -16122,6 +18486,71 @@
+ 
+   if (TARGET_NEON)
+     arm_init_neon_builtins ();
++
++  if (arm_fp16_format)
++    arm_init_fp16_builtins ();
++}
++
++/* Implement TARGET_INVALID_PARAMETER_TYPE.  */
++
++static const char *
++arm_invalid_parameter_type (const_tree t)
++{
++  if (SCALAR_FLOAT_TYPE_P (t) && TYPE_PRECISION (t) == 16)
++    return N_("function parameters cannot have __fp16 type");
++  return NULL;
++}
++
++/* Implement TARGET_INVALID_PARAMETER_TYPE.  */
++
++static const char *
++arm_invalid_return_type (const_tree t)
++{
++  if (SCALAR_FLOAT_TYPE_P (t) && TYPE_PRECISION (t) == 16)
++    return N_("functions cannot return __fp16 type");
++  return NULL;
++}
++
++/* Implement TARGET_PROMOTED_TYPE.  */
++
++static tree
++arm_promoted_type (const_tree t)
++{
++  if (SCALAR_FLOAT_TYPE_P (t) && TYPE_PRECISION (t) == 16)
++    return float_type_node;
++  return NULL_TREE;
++}
++
++/* Implement TARGET_CONVERT_TO_TYPE.
++   Specifically, this hook implements the peculiarity of the ARM
++   half-precision floating-point C semantics that requires conversions between
++   __fp16 to or from double to do an intermediate conversion to float.  */
++
++static tree
++arm_convert_to_type (tree type, tree expr)
++{
++  tree fromtype = TREE_TYPE (expr);
++  if (!SCALAR_FLOAT_TYPE_P (fromtype) || !SCALAR_FLOAT_TYPE_P (type))
++    return NULL_TREE;
++  if ((TYPE_PRECISION (fromtype) == 16 && TYPE_PRECISION (type) > 32)
++      || (TYPE_PRECISION (type) == 16 && TYPE_PRECISION (fromtype) > 32))
++    return convert (type, convert (float_type_node, expr));
++  return NULL_TREE;
++}
++
++/* Implement TARGET_SCALAR_MODE_SUPPORTED_P.
++   This simply adds HFmode as a supported mode; even though we don't
++   implement arithmetic on this type directly, it's supported by
++   optabs conversions, much the way the double-word arithmetic is
++   special-cased in the default hook.  */
++
++static bool
++arm_scalar_mode_supported_p (enum machine_mode mode)
++{
++  if (mode == HFmode)
++    return (arm_fp16_format != ARM_FP16_FORMAT_NONE);
++  else
++    return default_scalar_mode_supported_p (mode);
+ }
+ 
+ /* Errors in the source file can cause expand_expr to return const0_rtx
+@@ -17201,6 +19630,7 @@
+   unsigned HOST_WIDE_INT mask = 0xff;
+   int i;
+ 
++  val = val & (unsigned HOST_WIDE_INT)0xffffffffu;
+   if (val == 0) /* XXX */
+     return 0;
+ 
+@@ -18288,41 +20718,8 @@
+ 	}
+       else
+ 	{
+-	  int set_float_abi_attributes = 0;
+-	  switch (arm_fpu_arch)
+-	    {
+-	    case FPUTYPE_FPA:
+-	      fpu_name = "fpa";
+-	      break;
+-	    case FPUTYPE_FPA_EMU2:
+-	      fpu_name = "fpe2";
+-	      break;
+-	    case FPUTYPE_FPA_EMU3:
+-	      fpu_name = "fpe3";
+-	      break;
+-	    case FPUTYPE_MAVERICK:
+-	      fpu_name = "maverick";
+-	      break;
+-	    case FPUTYPE_VFP:
+-	      fpu_name = "vfp";
+-	      set_float_abi_attributes = 1;
+-	      break;
+-	    case FPUTYPE_VFP3D16:
+-	      fpu_name = "vfpv3-d16";
+-	      set_float_abi_attributes = 1;
+-	      break;
+-	    case FPUTYPE_VFP3:
+-	      fpu_name = "vfpv3";
+-	      set_float_abi_attributes = 1;
+-	      break;
+-	    case FPUTYPE_NEON:
+-	      fpu_name = "neon";
+-	      set_float_abi_attributes = 1;
+-	      break;
+-	    default:
+-	      abort();
+-	    }
+-	  if (set_float_abi_attributes)
++	  fpu_name = arm_fpu_desc->name;
++	  if (arm_fp_model == ARM_FP_MODEL_VFP)
+ 	    {
+ 	      if (TARGET_HARD_FLOAT)
+ 		asm_fprintf (asm_out_file, "\t.eabi_attribute 27, 3\n");
+@@ -18372,6 +20769,11 @@
+ 	val = 6;
+       asm_fprintf (asm_out_file, "\t.eabi_attribute 30, %d\n", val);
+ 
++      /* Tag_ABI_FP_16bit_format.  */
++      if (arm_fp16_format)
++	asm_fprintf (asm_out_file, "\t.eabi_attribute 38, %d\n",
++		     (int)arm_fp16_format);
++
+       if (arm_lang_output_object_attributes_hook)
+ 	arm_lang_output_object_attributes_hook();
+     }
+@@ -18601,6 +21003,23 @@
+   return 1;
+ }
+ 
++/* Emit a fp16 constant appropriately padded to occupy a 4-byte word.
++   HFmode constant pool entries are actually loaded with ldr.  */
++void
++arm_emit_fp16_const (rtx c)
++{
++  REAL_VALUE_TYPE r;
++  long bits;
++
++  REAL_VALUE_FROM_CONST_DOUBLE (r, c);
++  bits = real_to_target (NULL, &r, HFmode);
++  if (WORDS_BIG_ENDIAN)
++    assemble_zeros (2);
++  assemble_integer (GEN_INT (bits), 2, BITS_PER_WORD, 1);
++  if (!WORDS_BIG_ENDIAN)
++    assemble_zeros (2);
++}
++
+ const char *
+ arm_output_load_gr (rtx *operands)
+ {
+@@ -18638,19 +21057,24 @@
+    that way.  */
+ 
+ static void
+-arm_setup_incoming_varargs (CUMULATIVE_ARGS *cum,
++arm_setup_incoming_varargs (CUMULATIVE_ARGS *pcum,
+ 			    enum machine_mode mode,
+ 			    tree type,
+ 			    int *pretend_size,
+ 			    int second_time ATTRIBUTE_UNUSED)
+ {
+-  int nregs = cum->nregs;
+-  if (nregs & 1
+-      && ARM_DOUBLEWORD_ALIGN
+-      && arm_needs_doubleword_align (mode, type))
+-    nregs++;
+-
++  int nregs;
++  
+   cfun->machine->uses_anonymous_args = 1;
++  if (pcum->pcs_variant <= ARM_PCS_AAPCS_LOCAL)
++    {
++      nregs = pcum->aapcs_ncrn;
++      if ((nregs & 1) && arm_needs_doubleword_align (mode, type))
++	nregs++;
++    }
++  else
++    nregs = pcum->nregs;
++  
+   if (nregs < NUM_ARG_REGS)
+     *pretend_size = (NUM_ARG_REGS - nregs) * UNITS_PER_WORD;
+ }
+@@ -19034,9 +21458,10 @@
+       || mode == V16QImode || mode == V4SFmode || mode == V2DImode))
+     return true;
+ 
+-  if ((mode == V2SImode)
+-      || (mode == V4HImode)
+-      || (mode == V8QImode))
++  if ((TARGET_NEON || TARGET_IWMMXT)
++      && ((mode == V2SImode)
++	  || (mode == V4HImode)
++	  || (mode == V8QImode)))
+     return true;
+ 
+   return false;
+@@ -19067,9 +21492,14 @@
+   if (IS_FPA_REGNUM (regno))
+     return (TARGET_AAPCS_BASED ? 96 : 16) + regno - FIRST_FPA_REGNUM;
+ 
+-  /* FIXME: VFPv3 register numbering.  */
+   if (IS_VFP_REGNUM (regno))
+-    return 64 + regno - FIRST_VFP_REGNUM;
++    {
++      /* See comment in arm_dwarf_register_span.  */
++      if (VFP_REGNO_OK_FOR_SINGLE (regno))
++	  return 64 + regno - FIRST_VFP_REGNUM;
++      else
++	  return 256 + (regno - FIRST_VFP_REGNUM) / 2;
++    }
+ 
+   if (IS_IWMMXT_GR_REGNUM (regno))
+     return 104 + regno - FIRST_IWMMXT_GR_REGNUM;
+@@ -19080,6 +21510,39 @@
+   gcc_unreachable ();
+ }
+ 
++/* Dwarf models VFPv3 registers as 32 64-bit registers.
++   GCC models tham as 64 32-bit registers, so we need to describe this to
++   the DWARF generation code.  Other registers can use the default.  */
++static rtx
++arm_dwarf_register_span(rtx rtl)
++{
++    unsigned regno;
++    int nregs;
++    int i;
++    rtx p;
++
++    regno = REGNO (rtl);
++    if (!IS_VFP_REGNUM (regno))
++	return NULL_RTX;
++
++    /* The EABI defines two VFP register ranges:
++	  64-95: Legacy VFPv2 numbering for S0-S31 (obsolescent)
++	  256-287: D0-D31
++       The recommended encodings for s0-s31 is a DW_OP_bit_piece of the
++       corresponding D register.  However gdb6.6 does not support this, so
++       we use the legacy encodings.  We also use these encodings for D0-D15
++       for compatibility with older debuggers.  */
++    if (VFP_REGNO_OK_FOR_SINGLE (regno))
++	return NULL_RTX;
++
++    nregs = GET_MODE_SIZE (GET_MODE (rtl)) / 8;
++    p = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc(nregs));
++    regno = (regno - FIRST_VFP_REGNUM) / 2;
++    for (i = 0; i < nregs; i++)
++      XVECEXP (p, 0, i) = gen_rtx_REG (DImode, 256 + regno + i);
++
++    return p;
++}
+ 
+ #ifdef TARGET_UNWIND_INFO
+ /* Emit unwind directives for a store-multiple instruction or stack pointer
+@@ -19564,8 +22027,10 @@
+     {
+     case cortexr4:
+     case cortexr4f:
++    case cortexa5:
+     case cortexa8:
+     case cortexa9:
++    case marvell_f:
+       return 2;
+ 
+     default:
+@@ -19621,7 +22086,7 @@
+       && lang_hooks.types_compatible_p (CONST_CAST_TREE (type), va_list_type))
+     {
+       static bool warned;
+-      if (!warned && warn_psabi)
++      if (!warned && warn_psabi && !in_system_header)
+ 	{
+ 	  warned = true;
+ 	  inform (input_location,
+@@ -19630,6 +22095,10 @@
+       return "St9__va_list";
+     }
+ 
++  /* Half-precision float.  */
++  if (TREE_CODE (type) == REAL_TYPE && TYPE_PRECISION (type) == 16)
++    return "Dh";
++
+   if (TREE_CODE (type) != VECTOR_TYPE)
+     return NULL;
+ 
+@@ -19686,6 +22155,110 @@
+      given on the command line.  */
+   if (level > 0)
+     flag_section_anchors = 2;
++
++  if (size)
++    {
++      /* Select optimizations that are a win for code size.
++
++	 The inlining options set below have two important
++	 consequences for functions not explicitly marked
++	 inline:
++	 - Static functions used once are inlined if
++	 sufficiently small.  Static functions used twice
++	 are not inlined.
++	 - Non-static functions are never inlined.
++	 So in effect, inlining will never cause two copies
++	 of function bodies to be created.  */
++      /* Empirical results show that these options benefit code
++	 size on arm.  */
++      /* FIXME: -fsee seems to be broken for Thumb-2.  */
++      /* flag_see = 1; */
++      flag_move_loop_invariants = 0;
++      /* In Thumb mode the function call code size overhead is typically very
++	 small, and narrow branch instructions have very limited range.
++	 Inlining even medium sized functions tends to bloat the caller and
++	 require the use of long branch instructions. On average the long
++	 branches cost more than eliminating the function call overhead saves,
++	 so we use extremely restrictive automatic inlining heuristics.  In ARM
++	 mode the results are fairly neutral, probably due to better constant
++	 pool placement. */
++      set_param_value ("max-inline-insns-single", 1);
++      set_param_value ("max-inline-insns-auto", 1);
++    }
++  else
++    {
++      /* CSL LOCAL */
++      /* Set flag_unroll_loops to a default value, so that we can tell
++	 if it was specified on the command line; see
++	 arm_override_options.  */
++      flag_unroll_loops = 2;
++      /* Promote loop indices to int where possible.  Consider moving this
++	 to -Os, also.  */
++      flag_promote_loop_indices = 1;
++    }
++}
++ 
++/* Return how many instructions to look ahead for better insn
++   scheduling.  */
++static int
++arm_multipass_dfa_lookahead (void)
++{
++  return (arm_tune == marvell_f) ? 4 : 0;
++}
++
++/* Return the minimum alignment required to load or store a
++   vector of the given type, which may be less than the
++   natural alignment of the type.  */
++
++static int
++arm_vector_min_alignment (const_tree type)
++{
++  if (TARGET_NEON)
++    {
++      /* The NEON element load and store instructions only require the
++	 alignment of the element type.  They can benefit from higher
++	 statically reported alignment, but we do not take advantage
++	 of that yet.  */
++      gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
++      return TYPE_ALIGN_UNIT (TREE_TYPE (type));
++    }
++
++  return default_vector_min_alignment (type);
++}
++
++static bool
++arm_vector_always_misalign(const_tree type ATTRIBUTE_UNUSED)
++{
++  /* On big-endian targets array loads (vld1) and vector loads (vldm)
++     use a different format.  Always use the "misaligned" array variant.
++     FIXME: this still doesn't work for big-endian because of constant
++     loads and other operations using vldm ordering.  See
++     issue 6722.  */
++  return TARGET_NEON && !BYTES_BIG_ENDIAN;
++}
++
++int
++arm_major_arch (void)
++{
++  if ((insn_flags & FL_FOR_ARCH6) == FL_FOR_ARCH6)
++    return 6;
++  else if ((insn_flags & FL_FOR_ARCH5) == FL_FOR_ARCH5)
++    return 5;
++  else if ((insn_flags & FL_FOR_ARCH4) == FL_FOR_ARCH4)
++    return 4;
++  else if ((insn_flags & FL_FOR_ARCH3) == FL_FOR_ARCH3)
++    return 3;
++  else if ((insn_flags & FL_FOR_ARCH2) == FL_FOR_ARCH2)
++    return 2;
++  
++  /* This should gives us a nice ICE somewhere.  */
++  return -1;
++}
++
++bool
++arm_thumb_arch_p (void)
++{
++  return (insn_flags & FL_THUMB) == FL_THUMB;
+ }
+ 
+ #include "gt-arm.h"
+--- a/src/gcc/config/arm/arm.h
++++ b/src/gcc/config/arm/arm.h
+@@ -84,7 +84,17 @@
+ 	if (arm_arch_iwmmxt)				\
+ 	  builtin_define ("__IWMMXT__");		\
+ 	if (TARGET_AAPCS_BASED)				\
+-	  builtin_define ("__ARM_EABI__");		\
++ 	  {						\
++ 	    if (arm_pcs_default == ARM_PCS_AAPCS_VFP)	\
++ 	      builtin_define ("__ARM_PCS_VFP");		\
++ 	    else if (arm_pcs_default == ARM_PCS_AAPCS)	\
++ 	      builtin_define ("__ARM_PCS");		\
++ 	    builtin_define ("__ARM_EABI__");		\
++ 	  }						\
++	if (arm_tune_marvell_f)				\
++	  builtin_define ("__ARM_TUNE_MARVELL_F__");	\
++	if (low_irq_latency)				\
++	  builtin_define ("__low_irq_latency__");	\
+     } while (0)
+ 
+ /* The various ARM cores.  */
+@@ -199,6 +209,13 @@
+ #define TARGET_AAPCS_BASED \
+     (arm_abi != ARM_ABI_APCS && arm_abi != ARM_ABI_ATPCS)
+ 
++/* True if we should avoid generating conditional execution instructions.  */
++#define TARGET_NO_COND_EXEC		(arm_tune_marvell_f && !optimize_size)
++/* Avoid most conditional instructions, but allow pairs with opposite
++   conditions and the same destination.  */
++#define TARGET_NO_SINGLE_COND_EXEC \
++  ((arm_tune_cortex_a9 || arm_tune_marvell_f) && !optimize_size)
++
+ #define TARGET_HARD_TP			(target_thread_pointer == TP_CP15)
+ #define TARGET_SOFT_TP			(target_thread_pointer == TP_SOFT)
+ 
+@@ -211,35 +228,43 @@
+ /* Thumb-1 only.  */
+ #define TARGET_THUMB1_ONLY		(TARGET_THUMB1 && !arm_arch_notm)
+ 
++#define TARGET_FPA_EMU2			(TARGET_FPA && arm_fpu_desc->rev == 2)
+ /* The following two macros concern the ability to execute coprocessor
+    instructions for VFPv3 or NEON.  TARGET_VFP3/TARGET_VFPD32 are currently
+    only ever tested when we know we are generating for VFP hardware; we need
+    to be more careful with TARGET_NEON as noted below.  */
+ 
+ /* FPU is has the full VFPv3/NEON register file of 32 D registers.  */
+-#define TARGET_VFPD32 (arm_fp_model == ARM_FP_MODEL_VFP \
+-		       && (arm_fpu_arch == FPUTYPE_VFP3 \
+-			   || arm_fpu_arch == FPUTYPE_NEON))
++#define TARGET_VFPD32 (TARGET_VFP && arm_arch_vfp_regs == VFP_REG_D32)
+ 
+ /* FPU supports VFPv3 instructions.  */
+-#define TARGET_VFP3 (arm_fp_model == ARM_FP_MODEL_VFP \
+-		     && (arm_fpu_arch == FPUTYPE_VFP3D16 \
+-			 || TARGET_VFPD32))
++#define TARGET_VFP3 (TARGET_VFP && arm_arch_vfp_rev >= 3)
++
++/* FPU only supports VFP single-precision instructions.  */
++#define TARGET_VFP_SINGLE (TARGET_VFP && arm_arch_vfp_regs == VFP_REG_SINGLE)
++
++/* FPU supports VFP double-precision instructions.  */
++#define TARGET_VFP_DOUBLE (TARGET_VFP && arm_arch_vfp_regs != VFP_REG_SINGLE)
++
++/* FPU supports half-precision floating-point with NEON element load/store.  */
++#define TARGET_NEON_FP16 (TARGET_VFP && arm_arch_vfp_neon && arm_arch_vfp_fp16)
++
++/* FPU supports VFP half-precision floating-point.  */
++#define TARGET_FP16 (TARGET_VFP && arm_arch_vfp_fp16)
+ 
+ /* FPU supports Neon instructions.  The setting of this macro gets
+    revealed via __ARM_NEON__ so we add extra guards upon TARGET_32BIT
+    and TARGET_HARD_FLOAT to ensure that NEON instructions are
+    available.  */
+ #define TARGET_NEON (TARGET_32BIT && TARGET_HARD_FLOAT \
+-		     && arm_fp_model == ARM_FP_MODEL_VFP \
+-		     && arm_fpu_arch == FPUTYPE_NEON)
++		     && TARGET_VFP && arm_arch_vfp_neon)
+ 
+ /* "DSP" multiply instructions, eg. SMULxy.  */
+ #define TARGET_DSP_MULTIPLY \
+-  (TARGET_32BIT && arm_arch5e && arm_arch_notm)
++  (TARGET_32BIT && arm_arch5e && (arm_arch_notm || arm_arch7em))
+ /* Integer SIMD instructions, and extend-accumulate instructions.  */
+ #define TARGET_INT_SIMD \
+-  (TARGET_32BIT && arm_arch6 && arm_arch_notm)
++  (TARGET_32BIT && arm_arch6 && (arm_arch_notm || arm_arch7em))
+ 
+ /* Should MOVW/MOVT be used in preference to a constant pool.  */
+ #define TARGET_USE_MOVT (arm_arch_thumb2 && !optimize_size)
+@@ -289,40 +314,30 @@
+   ARM_FP_MODEL_VFP
+ };
+ 
+-extern enum arm_fp_model arm_fp_model;
+-
+-/* Which floating point hardware is available.  Also update
+-   fp_model_for_fpu in arm.c when adding entries to this list.  */
+-enum fputype
+-{
+-  /* No FP hardware.  */
+-  FPUTYPE_NONE,
+-  /* Full FPA support.  */
+-  FPUTYPE_FPA,
+-  /* Emulated FPA hardware, Issue 2 emulator (no LFM/SFM).  */
+-  FPUTYPE_FPA_EMU2,
+-  /* Emulated FPA hardware, Issue 3 emulator.  */
+-  FPUTYPE_FPA_EMU3,
+-  /* Cirrus Maverick floating point co-processor.  */
+-  FPUTYPE_MAVERICK,
+-  /* VFP.  */
+-  FPUTYPE_VFP,
+-  /* VFPv3-D16.  */
+-  FPUTYPE_VFP3D16,
+-  /* VFPv3.  */
+-  FPUTYPE_VFP3,
+-  /* Neon.  */
+-  FPUTYPE_NEON
++enum vfp_reg_type {
++    VFP_REG_D16,
++    VFP_REG_D32,
++    VFP_REG_SINGLE
+ };
+ 
+-/* Recast the floating point class to be the floating point attribute.  */
+-#define arm_fpu_attr ((enum attr_fpu) arm_fpu_tune)
+-
+-/* What type of floating point to tune for */
+-extern enum fputype arm_fpu_tune;
++extern const struct arm_fpu_desc
++{
++  const char *name;
++  enum arm_fp_model model;
++  int rev;
++  enum vfp_reg_type myregs;
++  int neon;
++  int fp16;
++} *arm_fpu_desc;
++
++#define arm_fp_model arm_fpu_desc->model
++#define arm_arch_vfp_rev arm_fpu_desc->rev
++#define arm_arch_vfp_regs arm_fpu_desc->myregs
++#define arm_arch_vfp_neon arm_fpu_desc->neon
++#define arm_arch_vfp_fp16 arm_fpu_desc->fp16
+ 
+-/* What type of floating point instructions are available */
+-extern enum fputype arm_fpu_arch;
++/* Which floating point hardware to schedule for.  */
++extern int arm_fpu_attr;
+ 
+ enum float_abi_type
+ {
+@@ -337,6 +352,21 @@
+ #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFT
+ #endif
+ 
++/* Which __fp16 format to use.
++   The enumeration values correspond to the numbering for the
++   Tag_ABI_FP_16bit_format attribute.
++ */
++enum arm_fp16_format_type
++{
++  ARM_FP16_FORMAT_NONE = 0,
++  ARM_FP16_FORMAT_IEEE = 1,
++  ARM_FP16_FORMAT_ALTERNATIVE = 2
++};
++
++extern enum arm_fp16_format_type arm_fp16_format;
++#define LARGEST_EXPONENT_IS_NORMAL(bits) \
++    ((bits) == 16 && arm_fp16_format == ARM_FP16_FORMAT_ALTERNATIVE)
++
+ /* Which ABI to use.  */
+ enum arm_abi_type
+ {
+@@ -383,12 +413,18 @@
+ /* Nonzero if instructions not present in the 'M' profile can be used.  */
+ extern int arm_arch_notm;
+ 
++/* Nonzero if instructions present in ARMv7E-M can be used.  */
++extern int arm_arch7em;
++
+ /* Nonzero if this chip can benefit from load scheduling.  */
+ extern int arm_ld_sched;
+ 
+ /* Nonzero if generating thumb code.  */
+ extern int thumb_code;
+ 
++/* Nonzero if generating Janus2 code. */
++extern int janus2_code;
++
+ /* Nonzero if this chip is a StrongARM.  */
+ extern int arm_tune_strongarm;
+ 
+@@ -404,6 +440,9 @@
+ /* Nonzero if tuning for XScale.  */
+ extern int arm_tune_xscale;
+ 
++/* Nonzero if tuning for Marvell Feroceon.  */
++extern int arm_tune_marvell_f;
++
+ /* Nonzero if tuning for stores via the write buffer.  */
+ extern int arm_tune_wbuf;
+ 
+@@ -423,6 +462,10 @@
+ /* Nonzero if chip supports integer division instruction.  */
+ extern int arm_arch_hwdiv;
+ 
++/* Nonzero if we should minimize interrupt latency of the
++   generated code.  */
++extern int low_irq_latency;
++
+ #ifndef TARGET_DEFAULT
+ #define TARGET_DEFAULT  (MASK_APCS_FRAME)
+ #endif
+@@ -537,7 +580,14 @@
+ #define PREFERRED_STACK_BOUNDARY \
+     (arm_abi == ARM_ABI_ATPCS ? 64 : STACK_BOUNDARY)
+ 
+-#define FUNCTION_BOUNDARY  32
++/* There are two values that tweak function alignment: FUNCTION_BOUNDARY and
++   align_functions.  The former is used by default and the latter can override
++   the default, but only when optimizing for speed.  So FUNCTION_BOUNDARY is
++   the right place to tweak when optimizing for size.
++   In ARM mode, minimal allowed alignment is 32 bits.
++   In THUMB mode it is 16 bits; to avoid possible performance regressions
++   we use 16-bit alignment only when optimizing for size.  */
++#define FUNCTION_BOUNDARY  ((TARGET_THUMB && optimize_size) ? 16 : 32)
+ 
+ /* The lowest bit is used to indicate Thumb-mode functions, so the
+    vbit must go into the delta field of pointers to member
+@@ -757,12 +807,11 @@
+ 	fixed_regs[regno] = call_used_regs[regno] = 1;		\
+     }								\
+ 								\
+-  if (TARGET_THUMB && optimize_size)				\
+-    {								\
+-      /* When optimizing for size, it's better not to use	\
+-	 the HI regs, because of the overhead of stacking 	\
+-	 them.  */						\
+-      /* ??? Is this still true for thumb2?  */			\
++  if (TARGET_THUMB1 && optimize_size)				\
++    {                                                           \
++      /* When optimizing for size on Thumb-1, it's better not	\
++        to use the HI regs, because of the overhead of		\
++        stacking them.  */                                      \
+       for (regno = FIRST_HI_REGNUM;				\
+ 	   regno <= LAST_HI_REGNUM; ++regno)			\
+ 	fixed_regs[regno] = call_used_regs[regno] = 1;		\
+@@ -881,6 +930,9 @@
+ /* The number of (integer) argument register available.  */
+ #define NUM_ARG_REGS		4
+ 
++/* And similarly for the VFP.  */
++#define NUM_VFP_ARG_REGS	16
++
+ /* Return the register number of the N'th (integer) argument.  */
+ #define ARG_REGISTER(N) 	(N - 1)
+ 
+@@ -901,9 +953,6 @@
+ #define MUST_USE_SJLJ_EXCEPTIONS 1
+ #endif
+ 
+-/* We can generate DWARF2 Unwind info, even though we don't use it.  */
+-#define DWARF2_UNWIND_INFO 1
+-
+ /* Use r0 and r1 to pass exception handling information.  */
+ #define EH_RETURN_DATA_REGNO(N) (((N) < 2) ? N : INVALID_REGNUM)
+ 
+@@ -1059,7 +1108,7 @@
+   (GET_MODE_CLASS (MODE1) == GET_MODE_CLASS (MODE2))
+ 
+ #define VALID_IWMMXT_REG_MODE(MODE) \
+- (arm_vector_mode_supported_p (MODE) || (MODE) == DImode)
++ (arm_vector_mode_supported_p (MODE) || (MODE) == DImode || (MODE) == SImode)
+ 
+ /* Modes valid for Neon D registers.  */
+ #define VALID_NEON_DREG_MODE(MODE) \
+@@ -1191,8 +1240,8 @@
+   { 0x0000DF00, 0x00000000, 0x00000000, 0x00000000 }, /* HI_REGS */	\
+   { 0x01000000, 0x00000000, 0x00000000, 0x00000000 }, /* CC_REG */	\
+   { 0x00000000, 0x00000000, 0x00000000, 0x80000000 }, /* VFPCC_REG */	\
+-  { 0x0200DFFF, 0x00000000, 0x00000000, 0x00000000 }, /* GENERAL_REGS */ \
+-  { 0x0200FFFF, 0x00000000, 0x00000000, 0x00000000 }, /* CORE_REGS */	\
++  { 0x0000DFFF, 0x00000000, 0x00000000, 0x00000000 }, /* GENERAL_REGS */ \
++  { 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000 }, /* CORE_REGS */	\
+   { 0xFAFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF }  /* ALL_REGS */	\
+ }
+ 
+@@ -1230,11 +1279,14 @@
+      || reg_classes_intersect_p (VFP_REGS, (CLASS))	\
+    : 0)
+ 
+-/* We need to define this for LO_REGS on thumb.  Otherwise we can end up
+-   using r0-r4 for function arguments, r7 for the stack frame and don't
+-   have enough left over to do doubleword arithmetic.  */
++/* We need to define this for LO_REGS on Thumb-1.  Otherwise we can end up
++   using r0-r4 for function arguments, r7 for the stack frame and don't have
++   enough left over to do doubleword arithmetic.  For Thumb-2 all the
++   potentially problematic instructions accept high registers so this is not
++   necessary.  Care needs to be taken to avoid adding new Thumb-2 patterns
++   that require many low registers.  */
+ #define CLASS_LIKELY_SPILLED_P(CLASS)	\
+-    ((TARGET_THUMB && (CLASS) == LO_REGS)	\
++    ((TARGET_THUMB1 && (CLASS) == LO_REGS)	\
+      || (CLASS) == CC_REG)
+ 
+ /* The class value for index registers, and the one for base regs.  */
+@@ -1245,7 +1297,7 @@
+    when addressing quantities in QI or HI mode; if we don't know the
+    mode, then we must be conservative.  */
+ #define MODE_BASE_REG_CLASS(MODE)					\
+-    (TARGET_32BIT ? CORE_REGS :					\
++    (TARGET_32BIT ? (TARGET_THUMB2 ? LO_REGS : CORE_REGS) :					\
+      (((MODE) == SImode) ? BASE_REGS : LO_REGS))
+ 
+ /* For Thumb we can not support SP+reg addressing, so we return LO_REGS
+@@ -1263,7 +1315,7 @@
+    In general this is just CLASS, but for the Thumb core registers and
+    immediate constants we prefer a LO_REGS class or a subset.  */
+ #define PREFERRED_RELOAD_CLASS(X, CLASS)		\
+-  (TARGET_ARM ? (CLASS) :				\
++  (TARGET_32BIT ? (CLASS) :				\
+    ((CLASS) == GENERAL_REGS || (CLASS) == HI_REGS	\
+     || (CLASS) == NO_REGS || (CLASS) == STACK_REG	\
+    ? LO_REGS : (CLASS)))
+@@ -1346,6 +1398,9 @@
+ 	  else if (TARGET_MAVERICK && TARGET_HARD_FLOAT)		   \
+ 	    /* Need to be careful, -256 is not a valid offset.  */	   \
+ 	    low = val >= 0 ? (val & 0xff) : -((-val) & 0xff);		   \
++	  else if (TARGET_REALLY_IWMMXT && MODE == SImode)		   \
++	    /* Need to be careful, -1024 is not a valid offset.  */	   \
++	    low = val >= 0 ? (val & 0x3ff) : -((-val) & 0x3ff);		   \
+ 	  else if (MODE == SImode					   \
+ 		   || (MODE == SFmode && TARGET_SOFT_FLOAT)		   \
+ 		   || ((MODE == HImode || MODE == QImode) && ! arm_arch4)) \
+@@ -1416,13 +1471,17 @@
+ /* If defined, gives a class of registers that cannot be used as the
+    operand of a SUBREG that changes the mode of the object illegally.  */
+ 
+-/* Moves between FPA_REGS and GENERAL_REGS are two memory insns.  */
++/* Moves between FPA_REGS and GENERAL_REGS are two memory insns.
++   Moves between VFP_REGS and GENERAL_REGS are a single insn, but
++   it is typically more expensive than a single memory access.  We set
++   the cost to less than two memory accesses so that floating
++   point to integer conversion does not go through memory.  */
+ #define REGISTER_MOVE_COST(MODE, FROM, TO)		\
+   (TARGET_32BIT ?						\
+    ((FROM) == FPA_REGS && (TO) != FPA_REGS ? 20 :	\
+     (FROM) != FPA_REGS && (TO) == FPA_REGS ? 20 :	\
+-    IS_VFP_CLASS (FROM) && !IS_VFP_CLASS (TO) ? 10 :	\
+-    !IS_VFP_CLASS (FROM) && IS_VFP_CLASS (TO) ? 10 :	\
++    IS_VFP_CLASS (FROM) && !IS_VFP_CLASS (TO) ? 15 :	\
++    !IS_VFP_CLASS (FROM) && IS_VFP_CLASS (TO) ? 15 :	\
+     (FROM) == IWMMXT_REGS && (TO) != IWMMXT_REGS ? 4 :  \
+     (FROM) != IWMMXT_REGS && (TO) == IWMMXT_REGS ? 4 :  \
+     (FROM) == IWMMXT_GR_REGS || (TO) == IWMMXT_GR_REGS ? 20 :  \
+@@ -1491,9 +1550,10 @@
+ 
+ /* Define how to find the value returned by a library function
+    assuming the value has mode MODE.  */
+-#define LIBCALL_VALUE(MODE)  \
+-  (TARGET_32BIT && TARGET_HARD_FLOAT_ABI && TARGET_FPA			\
+-   && GET_MODE_CLASS (MODE) == MODE_FLOAT				\
++#define LIBCALL_VALUE(MODE)  						\
++  (TARGET_AAPCS_BASED ? aapcs_libcall_value (MODE)			\
++   : (TARGET_32BIT && TARGET_HARD_FLOAT_ABI && TARGET_FPA		\
++      && GET_MODE_CLASS (MODE) == MODE_FLOAT)				\
+    ? gen_rtx_REG (MODE, FIRST_FPA_REGNUM)				\
+    : TARGET_32BIT && TARGET_HARD_FLOAT_ABI && TARGET_MAVERICK		\
+      && GET_MODE_CLASS (MODE) == MODE_FLOAT				\
+@@ -1502,22 +1562,16 @@
+    ? gen_rtx_REG (MODE, FIRST_IWMMXT_REGNUM) 				\
+    : gen_rtx_REG (MODE, ARG_REGISTER (1)))
+ 
+-/* Define how to find the value returned by a function.
+-   VALTYPE is the data type of the value (as a tree).
+-   If the precise function being called is known, FUNC is its FUNCTION_DECL;
+-   otherwise, FUNC is 0.  */
+-#define FUNCTION_VALUE(VALTYPE, FUNC) \
+-  arm_function_value (VALTYPE, FUNC);
+-
+-/* 1 if N is a possible register number for a function value.
+-   On the ARM, only r0 and f0 can return results.  */
+-/* On a Cirrus chip, mvf0 can return results.  */
+-#define FUNCTION_VALUE_REGNO_P(REGNO)  \
+-  ((REGNO) == ARG_REGISTER (1) \
+-   || (TARGET_32BIT && ((REGNO) == FIRST_CIRRUS_FP_REGNUM)		\
+-       && TARGET_HARD_FLOAT_ABI && TARGET_MAVERICK)			\
+-   || ((REGNO) == FIRST_IWMMXT_REGNUM && TARGET_IWMMXT_ABI) \
+-   || (TARGET_32BIT && ((REGNO) == FIRST_FPA_REGNUM)			\
++/* 1 if REGNO is a possible register number for a function value.  */
++#define FUNCTION_VALUE_REGNO_P(REGNO)				\
++  ((REGNO) == ARG_REGISTER (1)					\
++   || (TARGET_AAPCS_BASED && TARGET_32BIT 			\
++       && TARGET_VFP && TARGET_HARD_FLOAT			\
++       && (REGNO) == FIRST_VFP_REGNUM)				\
++   || (TARGET_32BIT && ((REGNO) == FIRST_CIRRUS_FP_REGNUM)	\
++       && TARGET_HARD_FLOAT_ABI && TARGET_MAVERICK)		\
++   || ((REGNO) == FIRST_IWMMXT_REGNUM && TARGET_IWMMXT_ABI)	\
++   || (TARGET_32BIT && ((REGNO) == FIRST_FPA_REGNUM)		\
+        && TARGET_HARD_FLOAT_ABI && TARGET_FPA))
+ 
+ /* Amount of memory needed for an untyped call to save all possible return
+@@ -1617,9 +1671,30 @@
+    that is in text_section.  */
+ extern GTY(()) rtx thumb_call_via_label[14];
+ 
++/* The number of potential ways of assigning to a co-processor.  */
++#define ARM_NUM_COPROC_SLOTS 1
++
++/* Enumeration of procedure calling standard variants.  We don't really 
++   support all of these yet.  */
++enum arm_pcs
++{
++  ARM_PCS_AAPCS,	/* Base standard AAPCS.  */
++  ARM_PCS_AAPCS_VFP,	/* Use VFP registers for floating point values.  */
++  ARM_PCS_AAPCS_IWMMXT, /* Use iWMMXT registers for vectors.  */
++  /* This must be the last AAPCS variant.  */
++  ARM_PCS_AAPCS_LOCAL,	/* Private call within this compilation unit.  */
++  ARM_PCS_ATPCS,	/* ATPCS.  */
++  ARM_PCS_APCS,		/* APCS (legacy Linux etc).  */
++  ARM_PCS_UNKNOWN
++};
++
++/* Default procedure calling standard of current compilation unit. */
++extern enum arm_pcs arm_pcs_default;
++
++/* We can't define this inside a generator file because it needs enum
++   machine_mode.  */
+ /* A C type for declaring a variable that is used as the first argument of
+-   `FUNCTION_ARG' and other related values.  For some target machines, the
+-   type `int' suffices and can hold the number of bytes of argument so far.  */
++   `FUNCTION_ARG' and other related values.  */
+ typedef struct
+ {
+   /* This is the number of registers of arguments scanned so far.  */
+@@ -1628,9 +1703,33 @@
+   int iwmmxt_nregs;
+   int named_count;
+   int nargs;
+-  int can_split;
++  /* Which procedure call variant to use for this call.  */
++  enum arm_pcs pcs_variant;
++
++  /* AAPCS related state tracking.  */
++  int aapcs_arg_processed;  /* No need to lay out this argument again.  */
++  int aapcs_cprc_slot;      /* Index of co-processor rules to handle
++			       this argument, or -1 if using core
++			       registers.  */
++  int aapcs_ncrn;
++  int aapcs_next_ncrn;
++  rtx aapcs_reg;	    /* Register assigned to this argument.  */
++  int aapcs_partial;	    /* How many bytes are passed in regs (if
++			       split between core regs and stack.
++			       Zero otherwise.  */
++  int aapcs_cprc_failed[ARM_NUM_COPROC_SLOTS];
++  int can_split;	    /* Argument can be split between core regs
++			       and the stack.  */
++  /* Private data for tracking VFP register allocation */
++  unsigned aapcs_vfp_regs_free;
++  unsigned aapcs_vfp_reg_alloc;
++  int aapcs_vfp_rcount;
++  /* Can't include insn-modes.h because this header is needed before we
++     generate it.  */
++  int /* enum machine_mode */ aapcs_vfp_rmode;
+ } CUMULATIVE_ARGS;
+ 
++
+ /* Define where to put the arguments to a function.
+    Value is zero to push the argument on the stack,
+    or a hard register in which to store the argument.
+@@ -1674,13 +1773,7 @@
+    of mode MODE and data type TYPE.
+    (TYPE is null for libcalls where that information may not be available.)  */
+ #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)	\
+-  (CUM).nargs += 1;					\
+-  if (arm_vector_mode_supported_p (MODE)		\
+-      && (CUM).named_count > (CUM).nargs		\
+-      && TARGET_IWMMXT_ABI)				\
+-    (CUM).iwmmxt_nregs += 1;				\
+-  else							\
+-    (CUM).nregs += ARM_NUM_REGS2 (MODE, TYPE)
++  arm_function_arg_advance (&(CUM), (MODE), (TYPE), (NAMED))
+ 
+ /* If defined, a C expression that gives the alignment boundary, in bits, of an
+    argument with the specified mode and type.  If it is not defined,
+@@ -1692,9 +1785,11 @@
+ 
+ /* 1 if N is a possible register number for function argument passing.
+    On the ARM, r0-r3 are used to pass args.  */
+-#define FUNCTION_ARG_REGNO_P(REGNO)	\
+-   (IN_RANGE ((REGNO), 0, 3)		\
+-    || (TARGET_IWMMXT_ABI		\
++#define FUNCTION_ARG_REGNO_P(REGNO)					\
++   (IN_RANGE ((REGNO), 0, 3)						\
++    || (TARGET_AAPCS_BASED && TARGET_VFP && TARGET_HARD_FLOAT		\
++	&& IN_RANGE ((REGNO), FIRST_VFP_REGNUM, FIRST_VFP_REGNUM + 15))	\
++    || (TARGET_IWMMXT_ABI						\
+ 	&& IN_RANGE ((REGNO), FIRST_IWMMXT_REGNUM, FIRST_IWMMXT_REGNUM + 9)))
+ 
+ 
+@@ -1763,10 +1858,8 @@
+ 
+ /* Determine if the epilogue should be output as RTL.
+    You should override this if you define FUNCTION_EXTRA_EPILOGUE.  */
+-/* This is disabled for Thumb-2 because it will confuse the
+-   conditional insn counter.  */
+ #define USE_RETURN_INSN(ISCOND)				\
+-  (TARGET_ARM ? use_return_insn (ISCOND, NULL) : 0)
++  (TARGET_32BIT ? use_return_insn (ISCOND, NULL) : 0)
+ 
+ /* Definitions for register eliminations.
+ 
+@@ -1986,6 +2079,9 @@
+ #define TARGET_DEFAULT_WORD_RELOCATIONS 0
+ #endif
+ 
++/* Nonzero if the target uses RELA relocations.  */
++#define TARGET_USE_RELA 0
++
+ /* Nonzero if the constant value X is a legitimate general operand.
+    It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE.
+ 
+@@ -2324,7 +2420,8 @@
+ /* Try to generate sequences that don't involve branches, we can then use
+    conditional instructions */
+ #define BRANCH_COST(speed_p, predictable_p) \
+-  (TARGET_32BIT ? 4 : (optimize > 0 ? 2 : 0))
++  (TARGET_32BIT ? (TARGET_THUMB2 && optimize_size ? 1 : 4) \
++		: (optimize > 0 ? 2 : 0))
+ 
+ /* Position Independent Code.  */
+ /* We decide which register to use based on the compilation options and
+@@ -2376,22 +2473,11 @@
+    : reverse_condition (code))
+ 
+ #define CANONICALIZE_COMPARISON(CODE, OP0, OP1)				\
+-  do									\
+-    {									\
+-      if (GET_CODE (OP1) == CONST_INT					\
+-          && ! (const_ok_for_arm (INTVAL (OP1))				\
+-	        || (const_ok_for_arm (- INTVAL (OP1)))))		\
+-        {								\
+-          rtx const_op = OP1;						\
+-          CODE = arm_canonicalize_comparison ((CODE), GET_MODE (OP0),	\
+-					      &const_op);		\
+-          OP1 = const_op;						\
+-        }								\
+-    }									\
+-  while (0)
++  (CODE) = arm_canonicalize_comparison (CODE, &(OP0), &(OP1))
+ 
+ /* The arm5 clz instruction returns 32.  */
+ #define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE)  ((VALUE) = 32, 1)
++#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE)  ((VALUE) = 32, 1)
+ 
+ #undef  ASM_APP_OFF
+ #define ASM_APP_OFF (TARGET_THUMB1 ? "\t.code\t16\n" : \
+@@ -2404,6 +2490,19 @@
+       if (TARGET_ARM)					\
+ 	asm_fprintf (STREAM,"\tstmfd\t%r!,{%r}\n",	\
+ 		     STACK_POINTER_REGNUM, REGNO);	\
++      else if (TARGET_THUMB1				\
++	       && (REGNO) == STATIC_CHAIN_REGNUM)	\
++	{						\
++	  /* We can't push STATIC_CHAIN_REGNUM (r12) directly with Thumb-1.
++	     We know that ASM_OUTPUT_REG_PUSH will be matched with
++	     ASM_OUTPUT_REG_POP, and that r7 isn't used by the function
++	     profiler, so we can use it as a scratch reg.  WARNING: This isn't
++	     safe in the general case!  It may be sensitive to future changes
++	     in final.c:profile_function.  */		\
++	  asm_fprintf (STREAM, "\tpush\t{r7}\n");	\
++	  asm_fprintf (STREAM, "\tmov\tr7, %r\n", REGNO);\
++	  asm_fprintf (STREAM, "\tpush\t{r7}\n");	\
++	}						\
+       else						\
+ 	asm_fprintf (STREAM, "\tpush {%r}\n", REGNO);	\
+     } while (0)
+@@ -2415,6 +2514,14 @@
+       if (TARGET_ARM)					\
+ 	asm_fprintf (STREAM, "\tldmfd\t%r!,{%r}\n",	\
+ 		     STACK_POINTER_REGNUM, REGNO);	\
++      else if (TARGET_THUMB1				\
++	       && (REGNO) == STATIC_CHAIN_REGNUM)	\
++	{						\
++	  /* See comment in ASM_OUTPUT_REG_PUSH.  */	\
++	  asm_fprintf (STREAM, "\tpop\t{r7}\n");	\
++	  asm_fprintf (STREAM, "\tmov\t%r, r7\n", REGNO);\
++	  asm_fprintf (STREAM, "\tpop\t{r7}\n");	\
++	}						\
+       else						\
+ 	asm_fprintf (STREAM, "\tpop {%r}\n", REGNO);	\
+     } while (0)
+--- a/src/gcc/config/arm/arm.md
++++ b/src/gcc/config/arm/arm.md
+@@ -99,6 +99,7 @@
+ 			  ; correctly for PIC usage.
+    (UNSPEC_GOTSYM_OFF 24) ; The offset of the start of the the GOT from a
+ 			  ; a given symbolic address.
++   (UNSPEC_RBIT 25)	  ; rbit operation.
+   ]
+ )
+ 
+@@ -131,6 +132,8 @@
+    (VUNSPEC_WCMP_EQ  12) ; Used by the iWMMXt WCMPEQ instructions
+    (VUNSPEC_WCMP_GTU 13) ; Used by the iWMMXt WCMPGTU instructions
+    (VUNSPEC_WCMP_GT  14) ; Used by the iwMMXT WCMPGT instructions
++   (VUNSPEC_ALIGN16  15) ; Used to force 16-byte alignment.
++   (VUNSPEC_ALIGN32  16) ; Used to force 32-byte alignment.
+    (VUNSPEC_EH_RETURN 20); Use to override the return address for exception
+ 			 ; handling.
+   ]
+@@ -144,6 +147,10 @@
+ ; patterns that share the same RTL in both ARM and Thumb code.
+ (define_attr "is_thumb" "no,yes" (const (symbol_ref "thumb_code")))
+ 
++; FIX_JANUS is set to 'yes' when compiling for Janus2, it causes to
++; add a nop after shifts, in order to work around a Janus2 bug
++(define_attr "fix_janus" "no,yes" (const (symbol_ref "janus2_code")))
++
+ ; IS_STRONGARM is set to 'yes' when compiling for StrongARM, it affects
+ ; scheduling decisions for the load unit and the multiplier.
+ (define_attr "is_strongarm" "no,yes" (const (symbol_ref "arm_tune_strongarm")))
+@@ -158,7 +165,7 @@
+ ; Floating Point Unit.  If we only have floating point emulation, then there
+ ; is no point in scheduling the floating point insns.  (Well, for best
+ ; performance we should try and group them together).
+-(define_attr "fpu" "none,fpa,fpe2,fpe3,maverick,vfp,vfpv3d16,vfpv3,neon"
++(define_attr "fpu" "none,fpa,fpe2,fpe3,maverick,vfp"
+   (const (symbol_ref "arm_fpu_attr")))
+ 
+ ; LENGTH of an instruction (in bytes)
+@@ -185,7 +192,7 @@
+ ;; scheduling information.
+ 
+ (define_attr "insn"
+-        "mov,mvn,smulxy,smlaxy,smlalxy,smulwy,smlawx,mul,muls,mla,mlas,umull,umulls,umlal,umlals,smull,smulls,smlal,smlals,smlawy,smuad,smuadx,smlad,smladx,smusd,smusdx,smlsd,smlsdx,smmul,smmulr,smmla,umaal,smlald,smlsld,clz,mrs,msr,xtab,sdiv,udiv,other"
++        "mov,mvn,and,orr,eor,smulxy,smlaxy,smlalxy,smulwy,smlawx,mul,muls,mla,mlas,umull,umulls,umlal,umlals,smull,smulls,smlal,smlals,smlawy,smuad,smuadx,smlad,smladx,smusd,smusdx,smlsd,smlsdx,smmul,smmulr,smmla,umaal,smlald,smlsld,clz,mrs,msr,xtab,sdiv,udiv,other"
+         (const_string "other"))
+ 
+ ; TYPE attribute is used to detect floating point instructions which, if
+@@ -251,8 +258,6 @@
+ (define_attr "ldsched" "no,yes" (const (symbol_ref "arm_ld_sched")))
+ 
+ ;; Classification of NEON instructions for scheduling purposes.
+-;; Do not set this attribute and the "type" attribute together in
+-;; any one instruction pattern.
+ (define_attr "neon_type"
+    "neon_int_1,\
+    neon_int_2,\
+@@ -415,7 +420,7 @@
+ 
+ (define_attr "generic_sched" "yes,no"
+   (const (if_then_else 
+-          (ior (eq_attr "tune" "arm926ejs,arm1020e,arm1026ejs,arm1136js,arm1136jfs,cortexa8,cortexa9")
++          (ior (eq_attr "tune" "arm926ejs,arm1020e,arm1026ejs,arm1136js,arm1136jfs,cortexa5,cortexa8,cortexa9,marvell_f")
+ 	      (eq_attr "tune_cortexr4" "yes"))
+           (const_string "no")
+           (const_string "yes"))))
+@@ -423,20 +428,37 @@
+ (define_attr "generic_vfp" "yes,no"
+   (const (if_then_else
+ 	  (and (eq_attr "fpu" "vfp")
+-	       (eq_attr "tune" "!arm1020e,arm1022e,cortexa8,cortexa9")
++	       (eq_attr "tune" "!arm1020e,arm1022e,cortexa5,cortexa8,cortexa9,marvell_f")
+ 	       (eq_attr "tune_cortexr4" "no"))
+ 	  (const_string "yes")
+ 	  (const_string "no"))))
+ 
++; Specifies which machine an alternative is tuned for.  Used to compute
++; attribute ENABLED.
++(define_attr "alt_tune" "all,onlya8,nota8" (const_string "all"))
++
++(define_attr "enabled" ""
++  (cond [(and (eq_attr "alt_tune" "onlya8")
++	      (not (eq_attr "tune" "cortexa8")))
++	 (const_int 0)
++
++	 (and (eq_attr "alt_tune" "nota8")
++	      (eq_attr "tune" "cortexa8"))
++	 (const_int 0)]
++	(const_int 1)))
++
+ (include "arm-generic.md")
+ (include "arm926ejs.md")
+ (include "arm1020e.md")
+ (include "arm1026ejs.md")
+ (include "arm1136jfs.md")
++(include "cortex-a5.md")
+ (include "cortex-a8.md")
+ (include "cortex-a9.md")
+ (include "cortex-r4.md")
+ (include "cortex-r4f.md")
++(include "marvell-f.md")
++(include "marvell-f-vfp.md")
+ (include "vfp11.md")
+ 
+ 
+@@ -495,9 +517,10 @@
+ 	(plus:DI (match_operand:DI 1 "s_register_operand" "%0, 0")
+ 		 (match_operand:DI 2 "s_register_operand" "r,  0")))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_32BIT && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)"
++  "TARGET_32BIT && !(TARGET_HARD_FLOAT && TARGET_MAVERICK) && !TARGET_NEON"
+   "#"
+-  "TARGET_32BIT && reload_completed"
++  "TARGET_32BIT && reload_completed
++   && ! (TARGET_NEON && IS_VFP_REGNUM (REGNO (operands[0])))"
+   [(parallel [(set (reg:CC_C CC_REGNUM)
+ 		   (compare:CC_C (plus:SI (match_dup 1) (match_dup 2))
+ 				 (match_dup 1)))
+@@ -521,7 +544,7 @@
+   [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
+ 	(plus:DI (sign_extend:DI
+ 		  (match_operand:SI 2 "s_register_operand" "r,r"))
+-		 (match_operand:DI 1 "s_register_operand" "r,0")))
++		 (match_operand:DI 1 "s_register_operand" "0,r")))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_32BIT && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)"
+   "#"
+@@ -550,7 +573,7 @@
+   [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
+ 	(plus:DI (zero_extend:DI
+ 		  (match_operand:SI 2 "s_register_operand" "r,r"))
+-		 (match_operand:DI 1 "s_register_operand" "r,0")))
++		 (match_operand:DI 1 "s_register_operand" "0,r")))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_32BIT && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)"
+   "#"
+@@ -620,10 +643,11 @@
+    sub%?\\t%0, %1, #%n2
+    sub%?\\t%0, %1, #%n2
+    #"
+-  "TARGET_32BIT &&
+-   GET_CODE (operands[2]) == CONST_INT
++  "TARGET_32BIT
++   && GET_CODE (operands[2]) == CONST_INT
+    && !(const_ok_for_arm (INTVAL (operands[2]))
+-        || const_ok_for_arm (-INTVAL (operands[2])))"
++        || const_ok_for_arm (-INTVAL (operands[2])))
++   && (reload_completed || !arm_eliminable_register (operands[1]))"
+   [(clobber (const_int 0))]
+   "
+   arm_split_constant (PLUS, SImode, curr_insn,
+@@ -639,10 +663,10 @@
+ ;; register.  Trying to reload it will always fail catastrophically,
+ ;; so never allow those alternatives to match if reloading is needed.
+ 
+-(define_insn "*thumb1_addsi3"
+-  [(set (match_operand:SI          0 "register_operand" "=l,l,l,*rk,*hk,l,!k")
+-	(plus:SI (match_operand:SI 1 "register_operand" "%0,0,l,*0,*0,!k,!k")
+-		 (match_operand:SI 2 "nonmemory_operand" "I,J,lL,*hk,*rk,!M,!O")))]
++(define_insn_and_split "*thumb1_addsi3"
++  [(set (match_operand:SI          0 "register_operand" "=l,l,l,*rk,*hk,l,!k,l,l")
++	(plus:SI (match_operand:SI 1 "register_operand" "%0,0,l,*0,*0,!k,!k,0,l")
++		 (match_operand:SI 2 "nonmemory_operand" "I,J,lL,*hk,*rk,!M,!O,Pa,Pb")))]
+   "TARGET_THUMB1"
+   "*
+    static const char * const asms[] = 
+@@ -653,7 +677,9 @@
+      \"add\\t%0, %0, %2\",
+      \"add\\t%0, %0, %2\",
+      \"add\\t%0, %1, %2\",
+-     \"add\\t%0, %1, %2\"
++     \"add\\t%0, %1, %2\",
++     \"#\",
++     \"#\"
+    };
+    if ((which_alternative == 2 || which_alternative == 6)
+        && GET_CODE (operands[2]) == CONST_INT
+@@ -661,7 +687,22 @@
+      return \"sub\\t%0, %1, #%n2\";
+    return asms[which_alternative];
+   "
+-  [(set_attr "length" "2")]
++  "&& reload_completed && CONST_INT_P (operands[2])
++   && operands[1] != stack_pointer_rtx
++   && (INTVAL (operands[2]) > 255 || INTVAL (operands[2]) < -255)"
++  [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 2)))
++   (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 3)))]
++  {
++    HOST_WIDE_INT offset = INTVAL (operands[2]);
++    if (offset > 255)
++      offset = 255;
++    else if (offset < -255)
++      offset = -255;
++    
++    operands[3] = GEN_INT (offset);
++    operands[2] = GEN_INT (INTVAL (operands[2]) - offset);
++  }
++  [(set_attr "length" "2,2,2,2,2,2,2,4,4")]
+ )
+ 
+ ;; Reloading and elimination of the frame pointer can
+@@ -678,7 +719,6 @@
+   ""
+ )
+ 
+-;; ??? Make Thumb-2 variants which prefer low regs
+ (define_insn "*addsi3_compare0"
+   [(set (reg:CC_NOOV CC_REGNUM)
+ 	(compare:CC_NOOV
+@@ -687,7 +727,7 @@
+ 	 (const_int 0)))
+    (set (match_operand:SI 0 "s_register_operand" "=r,r")
+ 	(plus:SI (match_dup 1) (match_dup 2)))]
+-  "TARGET_32BIT"
++  "TARGET_ARM"
+   "@
+    add%.\\t%0, %1, %2
+    sub%.\\t%0, %1, #%n2"
+@@ -700,7 +740,7 @@
+ 	 (plus:SI (match_operand:SI 0 "s_register_operand" "r, r")
+ 		  (match_operand:SI 1 "arm_add_operand"    "rI,L"))
+ 	 (const_int 0)))]
+-  "TARGET_32BIT"
++  "TARGET_ARM"
+   "@
+    cmn%?\\t%0, %1
+    cmp%?\\t%0, #%n1"
+@@ -854,7 +894,11 @@
+   [(set_attr "conds" "use")
+    (set (attr "type") (if_then_else (match_operand 4 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ (define_insn "*addsi3_carryin_alt1"
+@@ -938,7 +982,7 @@
+   [(set (match_operand:DF          0 "s_register_operand" "")
+ 	(plus:DF (match_operand:DF 1 "s_register_operand" "")
+ 		 (match_operand:DF 2 "arm_float_add_operand" "")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_VFP_SINGLE"
+   "
+   if (TARGET_MAVERICK
+       && !cirrus_fp_register (operands[2], DFmode))
+@@ -977,7 +1021,7 @@
+ 	(minus:DI (match_operand:DI 1 "s_register_operand" "0,r,0")
+ 		  (match_operand:DI 2 "s_register_operand" "r,0,0")))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NEON"
+   "subs\\t%Q0, %Q1, %Q2\;sbc\\t%R0, %R1, %R2"
+   [(set_attr "conds" "clob")
+    (set_attr "length" "8")]
+@@ -995,7 +1039,7 @@
+ 
+ (define_insn "*subdi_di_zesidi"
+   [(set (match_operand:DI           0 "s_register_operand" "=&r,&r")
+-	(minus:DI (match_operand:DI 1 "s_register_operand"  "?r,0")
++	(minus:DI (match_operand:DI 1 "s_register_operand"  "0,r")
+ 		  (zero_extend:DI
+ 		   (match_operand:SI 2 "s_register_operand"  "r,r"))))
+    (clobber (reg:CC CC_REGNUM))]
+@@ -1007,7 +1051,7 @@
+ 
+ (define_insn "*subdi_di_sesidi"
+   [(set (match_operand:DI            0 "s_register_operand" "=&r,&r")
+-	(minus:DI (match_operand:DI  1 "s_register_operand"  "r,0")
++	(minus:DI (match_operand:DI  1 "s_register_operand"  "0,r")
+ 		  (sign_extend:DI
+ 		   (match_operand:SI 2 "s_register_operand"  "r,r"))))
+    (clobber (reg:CC CC_REGNUM))]
+@@ -1021,7 +1065,7 @@
+   [(set (match_operand:DI            0 "s_register_operand" "=&r,&r")
+ 	(minus:DI (zero_extend:DI
+ 		   (match_operand:SI 2 "s_register_operand"  "r,r"))
+-		  (match_operand:DI  1 "s_register_operand" "?r,0")))
++		  (match_operand:DI  1 "s_register_operand" "0,r")))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_ARM"
+   "rsbs\\t%Q0, %Q1, %2\;rsc\\t%R0, %R1, #0"
+@@ -1033,7 +1077,7 @@
+   [(set (match_operand:DI            0 "s_register_operand" "=&r,&r")
+ 	(minus:DI (sign_extend:DI
+ 		   (match_operand:SI 2 "s_register_operand"   "r,r"))
+-		  (match_operand:DI  1 "s_register_operand"  "?r,0")))
++		  (match_operand:DI  1 "s_register_operand"  "0,r")))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_ARM"
+   "rsbs\\t%Q0, %Q1, %2\;rsc\\t%R0, %R1, %2, asr #31"
+@@ -1176,7 +1220,7 @@
+   [(set (match_operand:DF           0 "s_register_operand" "")
+ 	(minus:DF (match_operand:DF 1 "arm_float_rhs_operand" "")
+ 		  (match_operand:DF 2 "arm_float_rhs_operand" "")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_VFP_SINGLE"
+   "
+   if (TARGET_MAVERICK)
+     {
+@@ -1202,7 +1246,7 @@
+ (define_insn "*arm_mulsi3"
+   [(set (match_operand:SI          0 "s_register_operand" "=&r,&r")
+ 	(mult:SI (match_operand:SI 2 "s_register_operand" "r,r")
+-		 (match_operand:SI 1 "s_register_operand" "%?r,0")))]
++		 (match_operand:SI 1 "s_register_operand" "%0,r")))]
+   "TARGET_32BIT && !arm_arch6"
+   "mul%?\\t%0, %2, %1"
+   [(set_attr "insn" "mul")
+@@ -1245,8 +1289,8 @@
+ 		 (match_operand:SI 2 "register_operand" "l,0,0")))]
+   "TARGET_THUMB1 && arm_arch6"
+   "@
+-   mul\\t%0, %2 
+-   mul\\t%0, %1 
++   mul\\t%0, %2
++   mul\\t%0, %1
+    mul\\t%0, %1"
+   [(set_attr "length" "2")
+    (set_attr "insn" "mul")]
+@@ -1256,7 +1300,7 @@
+   [(set (reg:CC_NOOV CC_REGNUM)
+ 	(compare:CC_NOOV (mult:SI
+ 			  (match_operand:SI 2 "s_register_operand" "r,r")
+-			  (match_operand:SI 1 "s_register_operand" "%?r,0"))
++			  (match_operand:SI 1 "s_register_operand" "%0,r"))
+ 			 (const_int 0)))
+    (set (match_operand:SI 0 "s_register_operand" "=&r,&r")
+ 	(mult:SI (match_dup 2) (match_dup 1)))]
+@@ -1284,7 +1328,7 @@
+   [(set (reg:CC_NOOV CC_REGNUM)
+ 	(compare:CC_NOOV (mult:SI
+ 			  (match_operand:SI 2 "s_register_operand" "r,r")
+-			  (match_operand:SI 1 "s_register_operand" "%?r,0"))
++			  (match_operand:SI 1 "s_register_operand" "%0,r"))
+ 			 (const_int 0)))
+    (clobber (match_scratch:SI 0 "=&r,&r"))]
+   "TARGET_ARM && !arm_arch6"
+@@ -1312,8 +1356,8 @@
+   [(set (match_operand:SI 0 "s_register_operand" "=&r,&r,&r,&r")
+ 	(plus:SI
+ 	  (mult:SI (match_operand:SI 2 "s_register_operand" "r,r,r,r")
+-		   (match_operand:SI 1 "s_register_operand" "%r,0,r,0"))
+-	  (match_operand:SI 3 "s_register_operand" "?r,r,0,0")))]
++		   (match_operand:SI 1 "s_register_operand" "%0,r,0,r"))
++	  (match_operand:SI 3 "s_register_operand" "r,r,0,0")))]
+   "TARGET_32BIT && !arm_arch6"
+   "mla%?\\t%0, %2, %1, %3"
+   [(set_attr "insn" "mla")
+@@ -1332,13 +1376,56 @@
+    (set_attr "predicable" "yes")]
+ )
+ 
++; The combiner cannot combine the first and last insns in the
++; following sequence because of the intervening insn, so help the
++; combiner with this splitter.  The combiner does attempt to split
++; this particular combination but does not know this exact split.
++; Note that the combiner puts the constant at the outermost operation
++; as a part of canonicalization.
++;
++; mul r3, r2, r1
++; <add/sub> r3, r3, <constant>
++; add r3, r3, r4
++
++(define_split
++  [(set (match_operand:SI 0 "s_register_operand" "")
++	(match_operator:SI 1 "plusminus_operator"
++	 [(plus:SI (mult:SI (match_operand:SI 2 "s_register_operand" "")
++			    (match_operand:SI 3 "s_register_operand" ""))
++		   (match_operand:SI 4 "s_register_operand" ""))
++	  (match_operand:SI 5 "arm_immediate_operand" "")]))]
++  "TARGET_32BIT"
++  [(set (match_dup 0)
++	(plus:SI (mult:SI (match_dup 2) (match_dup 3))
++		 (match_dup 4)))
++   (set (match_dup 0)
++	(match_op_dup:SI 1 [(match_dup 0) (match_dup 5)]))]
++  "")
++
++; Likewise for MLS.  MLS is available only on select architectures.
++
++(define_split
++  [(set (match_operand:SI 0 "s_register_operand" "")
++	(match_operator:SI 1 "plusminus_operator"
++	 [(minus:SI (match_operand:SI 2 "s_register_operand" "")
++		    (mult:SI (match_operand:SI 3 "s_register_operand" "")
++			     (match_operand:SI 4 "s_register_operand" "")))
++	  (match_operand:SI 5 "arm_immediate_operand" "")]))]
++  "TARGET_32BIT && arm_arch_thumb2"
++  [(set (match_dup 0)
++	(minus:SI (match_dup 2)
++		  (mult:SI (match_dup 3) (match_dup 4))))
++   (set (match_dup 0)
++	(match_op_dup:SI 1 [(match_dup 0) (match_dup 5)]))]
++  "")
++
+ (define_insn "*mulsi3addsi_compare0"
+   [(set (reg:CC_NOOV CC_REGNUM)
+ 	(compare:CC_NOOV
+ 	 (plus:SI (mult:SI
+ 		   (match_operand:SI 2 "s_register_operand" "r,r,r,r")
+-		   (match_operand:SI 1 "s_register_operand" "%r,0,r,0"))
+-		  (match_operand:SI 3 "s_register_operand" "?r,r,0,0"))
++		   (match_operand:SI 1 "s_register_operand" "%0,r,0,r"))
++		  (match_operand:SI 3 "s_register_operand" "r,r,0,0"))
+ 	 (const_int 0)))
+    (set (match_operand:SI 0 "s_register_operand" "=&r,&r,&r,&r")
+ 	(plus:SI (mult:SI (match_dup 2) (match_dup 1))
+@@ -1371,7 +1458,7 @@
+ 	(compare:CC_NOOV
+ 	 (plus:SI (mult:SI
+ 		   (match_operand:SI 2 "s_register_operand" "r,r,r,r")
+-		   (match_operand:SI 1 "s_register_operand" "%r,0,r,0"))
++		   (match_operand:SI 1 "s_register_operand" "%0,r,0,r"))
+ 		  (match_operand:SI 3 "s_register_operand" "?r,r,0,0"))
+ 	 (const_int 0)))
+    (clobber (match_scratch:SI 0 "=&r,&r,&r,&r"))]
+@@ -1551,7 +1638,7 @@
+ 	(truncate:SI
+ 	 (lshiftrt:DI
+ 	  (mult:DI
+-	   (sign_extend:DI (match_operand:SI 1 "s_register_operand" "%r,0"))
++	   (sign_extend:DI (match_operand:SI 1 "s_register_operand" "%0,r"))
+ 	   (sign_extend:DI (match_operand:SI 2 "s_register_operand" "r,r")))
+ 	  (const_int 32))))
+    (clobber (match_scratch:SI 3 "=&r,&r"))]
+@@ -1595,7 +1682,7 @@
+ 	(truncate:SI
+ 	 (lshiftrt:DI
+ 	  (mult:DI
+-	   (zero_extend:DI (match_operand:SI 1 "s_register_operand" "%r,0"))
++	   (zero_extend:DI (match_operand:SI 1 "s_register_operand" "%0,r"))
+ 	   (zero_extend:DI (match_operand:SI 2 "s_register_operand" "r,r")))
+ 	  (const_int 32))))
+    (clobber (match_scratch:SI 3 "=&r,&r"))]
+@@ -1713,7 +1800,7 @@
+   [(set (match_operand:DF          0 "s_register_operand" "")
+ 	(mult:DF (match_operand:DF 1 "s_register_operand" "")
+ 		 (match_operand:DF 2 "arm_float_rhs_operand" "")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_VFP_SINGLE"
+   "
+   if (TARGET_MAVERICK
+       && !cirrus_fp_register (operands[2], DFmode))
+@@ -1733,7 +1820,7 @@
+   [(set (match_operand:DF 0 "s_register_operand" "")
+ 	(div:DF (match_operand:DF 1 "arm_float_rhs_operand" "")
+ 		(match_operand:DF 2 "arm_float_rhs_operand" "")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP_DOUBLE)"
+   "")
+ 
+ ;; Modulo insns
+@@ -1764,6 +1851,7 @@
+ 	  [(match_operand:DI 1 "s_register_operand" "")
+ 	   (match_operand:DI 2 "s_register_operand" "")]))]
+   "TARGET_32BIT && reload_completed
++   && ! (TARGET_NEON && IS_VFP_REGNUM (REGNO (operands[0])))
+    && ! IS_IWMMXT_REGNUM (REGNO (operands[0]))"
+   [(set (match_dup 0) (match_op_dup:SI 6 [(match_dup 1) (match_dup 2)]))
+    (set (match_dup 3) (match_op_dup:SI 6 [(match_dup 4) (match_dup 5)]))]
+@@ -1837,11 +1925,19 @@
+   }"
+ )
+ 
+-(define_insn "anddi3"
++(define_expand "anddi3"
++  [(set (match_operand:DI         0 "s_register_operand" "")
++	(and:DI (match_operand:DI 1 "s_register_operand" "")
++		(match_operand:DI 2 "neon_inv_logic_op2" "")))]
++  "TARGET_32BIT"
++  ""
++)
++
++(define_insn "*anddi3_insn"
+   [(set (match_operand:DI         0 "s_register_operand" "=&r,&r")
+ 	(and:DI (match_operand:DI 1 "s_register_operand"  "%0,r")
+ 		(match_operand:DI 2 "s_register_operand"   "r,r")))]
+-  "TARGET_32BIT && ! TARGET_IWMMXT"
++  "TARGET_32BIT && !TARGET_IWMMXT && !TARGET_NEON"
+   "#"
+   [(set_attr "length" "8")]
+ )
+@@ -1850,7 +1946,7 @@
+   [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
+ 	(and:DI (zero_extend:DI
+ 		 (match_operand:SI 2 "s_register_operand" "r,r"))
+-		(match_operand:DI 1 "s_register_operand" "?r,0")))]
++		(match_operand:DI 1 "s_register_operand" "0,r")))]
+   "TARGET_32BIT"
+   "#"
+   "TARGET_32BIT && reload_completed"
+@@ -1871,7 +1967,7 @@
+   [(set (match_operand:DI          0 "s_register_operand" "=&r,&r")
+ 	(and:DI (sign_extend:DI
+ 		 (match_operand:SI 2 "s_register_operand" "r,r"))
+-		(match_operand:DI  1 "s_register_operand" "?r,0")))]
++		(match_operand:DI  1 "s_register_operand" "0,r")))]
+   "TARGET_32BIT"
+   "#"
+   [(set_attr "length" "8")]
+@@ -1960,6 +2056,7 @@
+   DONE;
+   "
+   [(set_attr "length" "4,4,16")
++   (set_attr "insn" "and")
+    (set_attr "predicable" "yes")]
+ )
+ 
+@@ -1969,7 +2066,8 @@
+ 		(match_operand:SI 2 "register_operand" "l")))]
+   "TARGET_THUMB1"
+   "and\\t%0, %0, %2"
+-  [(set_attr "length" "2")]
++  [(set_attr "length" "2")
++   (set_attr "insn" "and")]
+ )
+ 
+ (define_insn "*andsi3_compare0"
+@@ -1984,7 +2082,8 @@
+   "@
+    and%.\\t%0, %1, %2
+    bic%.\\t%0, %1, #%B2"
+-  [(set_attr "conds" "set")]
++  [(set_attr "conds" "set")
++   (set_attr "insn" "and,*")]
+ )
+ 
+ (define_insn "*andsi3_compare0_scratch"
+@@ -2280,7 +2379,7 @@
+ 	  }
+       }
+ 
+-    target = operands[0];
++    target = copy_rtx (operands[0]);
+     /* Avoid using a subreg as a subtarget, and avoid writing a paradoxical 
+        subreg as the final target.  */
+     if (GET_CODE (target) == SUBREG)
+@@ -2430,9 +2529,11 @@
+   [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
+ 	(and:DI (not:DI (match_operand:DI 1 "s_register_operand" "r,0"))
+ 		(match_operand:DI 2 "s_register_operand" "0,r")))]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NEON"
+   "#"
+-  "TARGET_32BIT && reload_completed && ! IS_IWMMXT_REGNUM (REGNO (operands[0]))"
++  "TARGET_32BIT && reload_completed
++   && ! (TARGET_NEON && IS_VFP_REGNUM (REGNO (operands[0])))
++   && ! IS_IWMMXT_REGNUM (REGNO (operands[0]))"
+   [(set (match_dup 0) (and:SI (not:SI (match_dup 1)) (match_dup 2)))
+    (set (match_dup 3) (and:SI (not:SI (match_dup 4)) (match_dup 5)))]
+   "
+@@ -2528,7 +2629,11 @@
+    (set_attr "shift" "2")
+    (set (attr "type") (if_then_else (match_operand 3 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ (define_insn "*andsi_notsi_si_compare0"
+@@ -2556,11 +2661,19 @@
+   [(set_attr "conds" "set")]
+ )
+ 
+-(define_insn "iordi3"
++(define_expand "iordi3"
++  [(set (match_operand:DI         0 "s_register_operand" "")
++	(ior:DI (match_operand:DI 1 "s_register_operand" "")
++		(match_operand:DI 2 "neon_logic_op2" "")))]
++  "TARGET_32BIT"
++  ""
++)
++
++(define_insn "*iordi3_insn"
+   [(set (match_operand:DI         0 "s_register_operand" "=&r,&r")
+ 	(ior:DI (match_operand:DI 1 "s_register_operand"  "%0,r")
+ 		(match_operand:DI 2 "s_register_operand"   "r,r")))]
+-  "TARGET_32BIT && ! TARGET_IWMMXT"
++  "TARGET_32BIT && !TARGET_IWMMXT && !TARGET_NEON"
+   "#"
+   [(set_attr "length" "8")
+    (set_attr "predicable" "yes")]
+@@ -2576,6 +2689,7 @@
+    orr%?\\t%Q0, %Q1, %2
+    #"
+   [(set_attr "length" "4,8")
++   (set_attr "insn" "orr")
+    (set_attr "predicable" "yes")]
+ )
+ 
+@@ -2583,7 +2697,7 @@
+   [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
+ 	(ior:DI (sign_extend:DI
+ 		 (match_operand:SI 2 "s_register_operand" "r,r"))
+-		(match_operand:DI 1 "s_register_operand" "?r,0")))]
++		(match_operand:DI 1 "s_register_operand" "0,r")))]
+   "TARGET_32BIT"
+   "#"
+   [(set_attr "length" "8")
+@@ -2638,7 +2752,8 @@
+ 		(match_operand:SI 2 "register_operand" "l")))]
+   "TARGET_THUMB1"
+   "orr\\t%0, %0, %2"
+-  [(set_attr "length" "2")]
++  [(set_attr "length" "2")
++   (set_attr "insn" "orr")]
+ )
+ 
+ (define_peephole2
+@@ -2663,7 +2778,8 @@
+ 	(ior:SI (match_dup 1) (match_dup 2)))]
+   "TARGET_32BIT"
+   "orr%.\\t%0, %1, %2"
+-  [(set_attr "conds" "set")]
++  [(set_attr "conds" "set")
++   (set_attr "insn" "orr")]
+ )
+ 
+ (define_insn "*iorsi3_compare0_scratch"
+@@ -2674,14 +2790,23 @@
+    (clobber (match_scratch:SI 0 "=r"))]
+   "TARGET_32BIT"
+   "orr%.\\t%0, %1, %2"
+-  [(set_attr "conds" "set")]
++  [(set_attr "conds" "set")
++   (set_attr "insn" "orr")]
++)
++
++(define_expand "xordi3"
++  [(set (match_operand:DI         0 "s_register_operand" "")
++	(xor:DI (match_operand:DI 1 "s_register_operand" "")
++		(match_operand:DI 2 "s_register_operand" "")))]
++  "TARGET_32BIT"
++  ""
+ )
+ 
+-(define_insn "xordi3"
++(define_insn "*xordi3_insn"
+   [(set (match_operand:DI         0 "s_register_operand" "=&r,&r")
+ 	(xor:DI (match_operand:DI 1 "s_register_operand"  "%0,r")
+ 		(match_operand:DI 2 "s_register_operand"   "r,r")))]
+-  "TARGET_32BIT && !TARGET_IWMMXT"
++  "TARGET_32BIT && !TARGET_IWMMXT && !TARGET_NEON"
+   "#"
+   [(set_attr "length" "8")
+    (set_attr "predicable" "yes")]
+@@ -2697,14 +2822,15 @@
+    eor%?\\t%Q0, %Q1, %2
+    #"
+   [(set_attr "length" "4,8")
+-   (set_attr "predicable" "yes")]
++   (set_attr "predicable" "yes")
++   (set_attr "insn" "eor")]
+ )
+ 
+ (define_insn "*xordi_sesidi_di"
+   [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
+ 	(xor:DI (sign_extend:DI
+ 		 (match_operand:SI 2 "s_register_operand" "r,r"))
+-		(match_operand:DI 1 "s_register_operand" "?r,0")))]
++		(match_operand:DI 1 "s_register_operand" "0,r")))]
+   "TARGET_32BIT"
+   "#"
+   [(set_attr "length" "8")
+@@ -2728,7 +2854,8 @@
+ 		(match_operand:SI 2 "arm_rhs_operand" "rI")))]
+   "TARGET_32BIT"
+   "eor%?\\t%0, %1, %2"
+-  [(set_attr "predicable" "yes")]
++  [(set_attr "predicable" "yes")
++   (set_attr "insn" "eor")]
+ )
+ 
+ (define_insn "*thumb1_xorsi3"
+@@ -2737,7 +2864,8 @@
+ 		(match_operand:SI 2 "register_operand" "l")))]
+   "TARGET_THUMB1"
+   "eor\\t%0, %0, %2"
+-  [(set_attr "length" "2")]
++  [(set_attr "length" "2")
++   (set_attr "insn" "eor")]
+ )
+ 
+ (define_insn "*xorsi3_compare0"
+@@ -2749,7 +2877,8 @@
+ 	(xor:SI (match_dup 1) (match_dup 2)))]
+   "TARGET_32BIT"
+   "eor%.\\t%0, %1, %2"
+-  [(set_attr "conds" "set")]
++  [(set_attr "conds" "set")
++   (set_attr "insn" "eor")]
+ )
+ 
+ (define_insn "*xorsi3_compare0_scratch"
+@@ -2781,7 +2910,7 @@
+ 
+ (define_insn "*andsi_iorsi3_notsi"
+   [(set (match_operand:SI 0 "s_register_operand" "=&r,&r,&r")
+-	(and:SI (ior:SI (match_operand:SI 1 "s_register_operand" "r,r,0")
++	(and:SI (ior:SI (match_operand:SI 1 "s_register_operand" "%0,r,r")
+ 			(match_operand:SI 2 "arm_rhs_operand" "rI,0,rI"))
+ 		(not:SI (match_operand:SI 3 "arm_rhs_operand" "rI,rI,rI"))))]
+   "TARGET_32BIT"
+@@ -2906,7 +3035,7 @@
+ 	 (smax:SI (match_operand:SI 1 "s_register_operand" "")
+ 		  (match_operand:SI 2 "arm_rhs_operand" "")))
+     (clobber (reg:CC CC_REGNUM))])]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
+   "
+   if (operands[2] == const0_rtx || operands[2] == constm1_rtx)
+     {
+@@ -2933,7 +3062,8 @@
+ 		 (const_int -1)))]
+   "TARGET_32BIT"
+   "orr%?\\t%0, %1, %1, asr #31"
+-  [(set_attr "predicable" "yes")]
++  [(set_attr "predicable" "yes")
++   (set_attr "insn" "orr")]
+ )
+ 
+ (define_insn "*arm_smax_insn"
+@@ -2941,7 +3071,7 @@
+ 	(smax:SI (match_operand:SI 1 "s_register_operand"  "%0,?r")
+ 		 (match_operand:SI 2 "arm_rhs_operand"    "rI,rI")))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_COND_EXEC"
+   "@
+    cmp\\t%1, %2\;movlt\\t%0, %2
+    cmp\\t%1, %2\;movge\\t%0, %1\;movlt\\t%0, %2"
+@@ -2955,7 +3085,7 @@
+ 	 (smin:SI (match_operand:SI 1 "s_register_operand" "")
+ 		  (match_operand:SI 2 "arm_rhs_operand" "")))
+     (clobber (reg:CC CC_REGNUM))])]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
+   "
+   if (operands[2] == const0_rtx)
+     {
+@@ -2973,7 +3103,8 @@
+ 		 (const_int 0)))]
+   "TARGET_32BIT"
+   "and%?\\t%0, %1, %1, asr #31"
+-  [(set_attr "predicable" "yes")]
++  [(set_attr "predicable" "yes")
++   (set_attr "insn" "and")]
+ )
+ 
+ (define_insn "*arm_smin_insn"
+@@ -2981,7 +3112,7 @@
+ 	(smin:SI (match_operand:SI 1 "s_register_operand" "%0,?r")
+ 		 (match_operand:SI 2 "arm_rhs_operand" "rI,rI")))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM  && !TARGET_NO_COND_EXEC"
+   "@
+    cmp\\t%1, %2\;movge\\t%0, %2
+    cmp\\t%1, %2\;movlt\\t%0, %1\;movge\\t%0, %2"
+@@ -2995,7 +3126,7 @@
+ 	 (umax:SI (match_operand:SI 1 "s_register_operand" "")
+ 		  (match_operand:SI 2 "arm_rhs_operand" "")))
+     (clobber (reg:CC CC_REGNUM))])]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
+   ""
+ )
+ 
+@@ -3004,7 +3135,7 @@
+ 	(umax:SI (match_operand:SI 1 "s_register_operand" "0,r,?r")
+ 		 (match_operand:SI 2 "arm_rhs_operand" "rI,0,rI")))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM  && !TARGET_NO_COND_EXEC"
+   "@
+    cmp\\t%1, %2\;movcc\\t%0, %2
+    cmp\\t%1, %2\;movcs\\t%0, %1
+@@ -3019,7 +3150,7 @@
+ 	 (umin:SI (match_operand:SI 1 "s_register_operand" "")
+ 		  (match_operand:SI 2 "arm_rhs_operand" "")))
+     (clobber (reg:CC CC_REGNUM))])]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
+   ""
+ )
+ 
+@@ -3028,7 +3159,7 @@
+ 	(umin:SI (match_operand:SI 1 "s_register_operand" "0,r,?r")
+ 		 (match_operand:SI 2 "arm_rhs_operand" "rI,0,rI")))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_COND_EXEC"
+   "@
+    cmp\\t%1, %2\;movcs\\t%0, %2
+    cmp\\t%1, %2\;movcc\\t%0, %1
+@@ -3043,7 +3174,7 @@
+ 	 [(match_operand:SI 1 "s_register_operand" "r")
+ 	  (match_operand:SI 2 "s_register_operand" "r")]))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
+   "*
+   operands[3] = gen_rtx_fmt_ee (minmax_code (operands[3]), SImode,
+ 				operands[1], operands[2]);
+@@ -3135,7 +3266,7 @@
+ 
+ (define_insn "arm_ashldi3_1bit"
+   [(set (match_operand:DI            0 "s_register_operand" "=&r,r")
+-        (ashift:DI (match_operand:DI 1 "s_register_operand" "?r,0")
++        (ashift:DI (match_operand:DI 1 "s_register_operand" "0,r")
+                    (const_int 1)))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_32BIT"
+@@ -3163,11 +3294,23 @@
+   [(set (match_operand:SI            0 "register_operand" "=l,l")
+ 	(ashift:SI (match_operand:SI 1 "register_operand" "l,0")
+ 		   (match_operand:SI 2 "nonmemory_operand" "N,l")))]
+-  "TARGET_THUMB1"
++  "TARGET_THUMB1 && !janus2_code"
+   "lsl\\t%0, %1, %2"
+   [(set_attr "length" "2")]
+ )
+ 
++(define_insn "*thumb1_ashlsi3_janus2"
++  [(set (match_operand:SI            0 "register_operand" "=l,l")
++        (ashift:SI (match_operand:SI 1 "register_operand" "l,0")
++                   (match_operand:SI 2 "nonmemory_operand" "N,l")))]
++  "TARGET_THUMB1 && janus2_code"
++  "@
++  lsl\\t%0, %1, %2
++  lsl\\t%0, %1, %2\;nop"
++  [(set_attr "length" "2,4")]
++)
++
++
+ (define_expand "ashrdi3"
+   [(set (match_operand:DI              0 "s_register_operand" "")
+         (ashiftrt:DI (match_operand:DI 1 "s_register_operand" "")
+@@ -3194,12 +3337,13 @@
+ 
+ (define_insn "arm_ashrdi3_1bit"
+   [(set (match_operand:DI              0 "s_register_operand" "=&r,r")
+-        (ashiftrt:DI (match_operand:DI 1 "s_register_operand" "?r,0")
++        (ashiftrt:DI (match_operand:DI 1 "s_register_operand" "0,r")
+                      (const_int 1)))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_32BIT"
+   "movs\\t%R0, %R1, asr #1\;mov\\t%Q0, %Q1, rrx"
+   [(set_attr "conds" "clob")
++   (set_attr "insn" "mov")
+    (set_attr "length" "8")]
+ )
+ 
+@@ -3219,11 +3363,22 @@
+   [(set (match_operand:SI              0 "register_operand" "=l,l")
+ 	(ashiftrt:SI (match_operand:SI 1 "register_operand" "l,0")
+ 		     (match_operand:SI 2 "nonmemory_operand" "N,l")))]
+-  "TARGET_THUMB1"
++  "TARGET_THUMB1 && !janus2_code"
+   "asr\\t%0, %1, %2"
+   [(set_attr "length" "2")]
+ )
+ 
++(define_insn "*thumb1_ashrsi3_janus2"
++  [(set (match_operand:SI              0 "register_operand" "=l,l")
++        (ashiftrt:SI (match_operand:SI 1 "register_operand" "l,0")
++                     (match_operand:SI 2 "nonmemory_operand" "N,l")))]
++  "TARGET_THUMB1 && janus2_code"
++  "@
++  asr\\t%0, %1, %2
++  asr\\t%0, %1, %2\;nop"
++  [(set_attr "length" "2,4")]
++)
++
+ (define_expand "lshrdi3"
+   [(set (match_operand:DI              0 "s_register_operand" "")
+         (lshiftrt:DI (match_operand:DI 1 "s_register_operand" "")
+@@ -3250,12 +3405,13 @@
+ 
+ (define_insn "arm_lshrdi3_1bit"
+   [(set (match_operand:DI              0 "s_register_operand" "=&r,r")
+-        (lshiftrt:DI (match_operand:DI 1 "s_register_operand" "?r,0")
++        (lshiftrt:DI (match_operand:DI 1 "s_register_operand" "0,r")
+                      (const_int 1)))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_32BIT"
+   "movs\\t%R0, %R1, lsr #1\;mov\\t%Q0, %Q1, rrx"
+   [(set_attr "conds" "clob")
++   (set_attr "insn" "mov")
+    (set_attr "length" "8")]
+ )
+ 
+@@ -3278,11 +3434,22 @@
+   [(set (match_operand:SI              0 "register_operand" "=l,l")
+ 	(lshiftrt:SI (match_operand:SI 1 "register_operand" "l,0")
+ 		     (match_operand:SI 2 "nonmemory_operand" "N,l")))]
+-  "TARGET_THUMB1"
++  "TARGET_THUMB1 && !janus2_code"
+   "lsr\\t%0, %1, %2"
+   [(set_attr "length" "2")]
+ )
+ 
++(define_insn "*thumb1_lshrsi3_janus2"
++  [(set (match_operand:SI              0 "register_operand" "=l,l")
++        (lshiftrt:SI (match_operand:SI 1 "register_operand" "l,0")
++                     (match_operand:SI 2 "nonmemory_operand" "N,l")))]
++  "TARGET_THUMB1 && janus2_code"
++  "@
++  lsr\\t%0, %1, %2
++  lsr\\t%0, %1, %2; nop"
++  [(set_attr "length" "2,4")]
++)
++
+ (define_expand "rotlsi3"
+   [(set (match_operand:SI              0 "s_register_operand" "")
+ 	(rotatert:SI (match_operand:SI 1 "s_register_operand" "")
+@@ -3324,11 +3491,20 @@
+   [(set (match_operand:SI              0 "register_operand" "=l")
+ 	(rotatert:SI (match_operand:SI 1 "register_operand" "0")
+ 		     (match_operand:SI 2 "register_operand" "l")))]
+-  "TARGET_THUMB1"
++  "TARGET_THUMB1 && !janus2_code"
+   "ror\\t%0, %0, %2"
+   [(set_attr "length" "2")]
+ )
+ 
++(define_insn "*thumb1_rotrsi3_janus2"
++  [(set (match_operand:SI              0 "register_operand" "=l")
++        (rotatert:SI (match_operand:SI 1 "register_operand" "0")
++                     (match_operand:SI 2 "register_operand" "l")))]
++  "TARGET_THUMB1 && janus2_code"
++  "ror\\t%0, %0, %2; nop"
++  [(set_attr "length" "4")]
++)
++
+ (define_insn "*arm_shiftsi3"
+   [(set (match_operand:SI   0 "s_register_operand" "=r")
+ 	(match_operator:SI  3 "shift_operator"
+@@ -3340,7 +3516,11 @@
+    (set_attr "shift" "1")
+    (set (attr "type") (if_then_else (match_operand 2 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ (define_insn "*shiftsi3_compare0"
+@@ -3357,7 +3537,11 @@
+    (set_attr "shift" "1")
+    (set (attr "type") (if_then_else (match_operand 2 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ (define_insn "*shiftsi3_compare0_scratch"
+@@ -3370,7 +3554,11 @@
+   "TARGET_32BIT"
+   "* return arm_output_shift(operands, 1);"
+   [(set_attr "conds" "set")
+-   (set_attr "shift" "1")]
++   (set_attr "shift" "1")
++   (set (attr "length") (if_then_else (and (match_operand 2 "s_register_operand" "")
++                                           (eq_attr "fix_janus" "yes"))
++                                      (const_int 8)
++                                      (const_int 4)))]
+ )
+ 
+ (define_insn "*arm_notsi_shiftsi"
+@@ -3382,9 +3570,14 @@
+   "mvn%?\\t%0, %1%S3"
+   [(set_attr "predicable" "yes")
+    (set_attr "shift" "1")
++   (set_attr "insn" "mvn")
+    (set (attr "type") (if_then_else (match_operand 2 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ (define_insn "*arm_notsi_shiftsi_compare0"
+@@ -3399,9 +3592,14 @@
+   "mvn%.\\t%0, %1%S3"
+   [(set_attr "conds" "set")
+    (set_attr "shift" "1")
++   (set_attr "insn" "mvn")
+    (set (attr "type") (if_then_else (match_operand 2 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ (define_insn "*arm_not_shiftsi_compare0_scratch"
+@@ -3415,9 +3613,14 @@
+   "mvn%.\\t%0, %1%S3"
+   [(set_attr "conds" "set")
+    (set_attr "shift" "1")
++   (set_attr "insn" "mvn")
+    (set (attr "type") (if_then_else (match_operand 2 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ ;; We don't really have extzv, but defining this using shifts helps
+@@ -3497,10 +3700,10 @@
+ )
+ 
+ ;; The constraints here are to prevent a *partial* overlap (where %Q0 == %R1).
+-;; The second alternative is to allow the common case of a *full* overlap.
++;; The first alternative allows the common case of a *full* overlap.
+ (define_insn "*arm_negdi2"
+   [(set (match_operand:DI         0 "s_register_operand" "=&r,r")
+-	(neg:DI (match_operand:DI 1 "s_register_operand"  "?r,0")))
++	(neg:DI (match_operand:DI 1 "s_register_operand"  "0,r")))
+    (clobber (reg:CC CC_REGNUM))]
+   "TARGET_ARM"
+   "rsbs\\t%Q0, %Q1, #0\;rsc\\t%R0, %R1, #0"
+@@ -3550,12 +3753,12 @@
+ (define_expand "negdf2"
+   [(set (match_operand:DF         0 "s_register_operand" "")
+ 	(neg:DF (match_operand:DF 1 "s_register_operand" "")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP_DOUBLE)"
+   "")
+ 
+ ;; abssi2 doesn't really clobber the condition codes if a different register
+ ;; is being set.  To keep things simple, assume during rtl manipulations that
+-;; it does, but tell the final scan operator the truth.  Similarly for
++;; it does, and the splitter will eliminate it.  Similarly for
+ ;; (neg (abs...))
+ 
+ (define_expand "abssi2"
+@@ -3567,22 +3770,28 @@
+   "
+   if (TARGET_THUMB1)
+     operands[2] = gen_rtx_SCRATCH (SImode);
++  else if (TARGET_NO_SINGLE_COND_EXEC)
++    {
++      emit_insn(gen_rtx_SET(VOIDmode, operands[0],
++			    gen_rtx_ABS(SImode, operands[1])));
++      DONE;
++    }
+   else
+     operands[2] = gen_rtx_REG (CCmode, CC_REGNUM);
+ ")
+ 
+ (define_insn "*arm_abssi2"
+-  [(set (match_operand:SI 0 "s_register_operand" "=r,&r")
+-	(abs:SI (match_operand:SI 1 "s_register_operand" "0,r")))
++  [(set (match_operand:SI         0 "s_register_operand" "=r")
++	(abs:SI (match_operand:SI 1 "s_register_operand" "r")))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
+-  "@
+-   cmp\\t%0, #0\;rsblt\\t%0, %0, #0
+-   eor%?\\t%0, %1, %1, asr #31\;sub%?\\t%0, %0, %1, asr #31"
+-  [(set_attr "conds" "clob,*")
+-   (set_attr "shift" "1")
++  "TARGET_32BIT && !TARGET_NO_SINGLE_COND_EXEC"
++  "#"
++  [(set_attr "shift" "1")
+    ;; predicable can't be set based on the variant, so left as no
+-   (set_attr "length" "8")]
++   (set (attr "length")
++	(if_then_else (eq_attr "is_thumb" "yes")
++		      (const_int 10)
++		      (const_int 8)))]
+ )
+ 
+ (define_insn_and_split "*thumb1_abssi2"
+@@ -3600,17 +3809,17 @@
+ )
+ 
+ (define_insn "*arm_neg_abssi2"
+-  [(set (match_operand:SI 0 "s_register_operand" "=r,&r")
+-	(neg:SI (abs:SI (match_operand:SI 1 "s_register_operand" "0,r"))))
++  [(set (match_operand:SI 0 "s_register_operand" "=r")
++	(neg:SI (abs:SI (match_operand:SI 1 "s_register_operand" "r"))))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
+-  "@
+-   cmp\\t%0, #0\;rsbgt\\t%0, %0, #0
+-   eor%?\\t%0, %1, %1, asr #31\;rsb%?\\t%0, %0, %1, asr #31"
+-  [(set_attr "conds" "clob,*")
+-   (set_attr "shift" "1")
++  "TARGET_32BIT && !TARGET_NO_SINGLE_COND_EXEC"
++  "#"
++  [(set_attr "shift" "1")
+    ;; predicable can't be set based on the variant, so left as no
+-   (set_attr "length" "8")]
++   (set (attr "length")
++	(if_then_else (eq_attr "is_thumb" "yes")
++		      (const_int 10)
++		      (const_int 8)))]
+ )
+ 
+ (define_insn_and_split "*thumb1_neg_abssi2"
+@@ -3627,6 +3836,93 @@
+   [(set_attr "length" "6")]
+ )
+ 
++;; Simplified version for when avoiding conditional execution
++(define_insn "*arm_nocond_abssi2"
++  [(set (match_operand:SI         0 "s_register_operand" "=&r")
++	(abs:SI (match_operand:SI 1 "s_register_operand" "r")))]
++  "TARGET_32BIT && TARGET_NO_SINGLE_COND_EXEC"
++  "#"
++  [(set_attr "shift" "1")
++   (set_attr "length" "8")
++   (set_attr "predicable" "yes")]
++)
++
++(define_insn "*arm_nocond_neg_abssi2"
++  [(set (match_operand:SI         0 "s_register_operand" "=&r")
++	(neg:SI (abs:SI (match_operand:SI 1 "s_register_operand" "r"))))]
++  "TARGET_32BIT && TARGET_NO_SINGLE_COND_EXEC"
++  "#"
++  [(set_attr "shift" "1")
++   (set_attr "length" "8")
++   (set_attr "predicable" "yes")]
++)
++
++;; Splitters for ABS patterns.
++
++(define_split
++  [(set (match_operand:SI         0 "s_register_operand" "")
++	(abs:SI (match_operand:SI 1 "s_register_operand" "")))
++   (clobber (reg:CC CC_REGNUM))]
++  "TARGET_32BIT && reload_completed && rtx_equal_p(operands[0], operands[1])"
++  [(set (reg:CC CC_REGNUM) (compare:CC (match_dup 1) (const_int 0)))
++   (cond_exec (lt (reg:CC CC_REGNUM) (const_int 0))
++	      (set (match_dup 0) (neg:SI (match_dup 1))))]
++)
++
++(define_split
++  [(set (match_operand:SI         0 "s_register_operand" "")
++	(neg:SI (abs:SI (match_operand:SI 1 "s_register_operand" ""))))
++   (clobber (reg:CC CC_REGNUM))]
++  "TARGET_32BIT && reload_completed && rtx_equal_p(operands[0], operands[1])"
++  [(set (reg:CC CC_REGNUM) (compare:CC (match_dup 1) (const_int 0)))
++   (cond_exec (gt (reg:CC CC_REGNUM) (const_int 0))
++	      (set (match_dup 0) (neg:SI (match_dup 1))))]
++)
++
++;; GCC does not add/remove clobbers when matching splitters, so we need
++;; variants with and without the CC clobber.
++(define_split
++  [(set (match_operand:SI         0 "s_register_operand" "")
++	(abs:SI (match_operand:SI 1 "s_register_operand" "")))]
++  "TARGET_32BIT && reload_completed && !rtx_equal_p(operands[0], operands[1])"
++  [(set (match_dup 0) (xor:SI (ashiftrt:SI (match_dup 1) (const_int 31))
++			      (match_dup 1)))
++   (set (match_dup 0) (minus:SI (match_dup 0)
++				(ashiftrt:SI (match_dup 1) (const_int 31))))]
++)
++
++(define_split
++  [(set (match_operand:SI         0 "s_register_operand" "")
++	(abs:SI (match_operand:SI 1 "s_register_operand" "")))
++   (clobber (reg:CC CC_REGNUM))]
++  "TARGET_32BIT && reload_completed && !rtx_equal_p(operands[0], operands[1])"
++  [(set (match_dup 0) (xor:SI (ashiftrt:SI (match_dup 1) (const_int 31))
++			      (match_dup 1)))
++   (set (match_dup 0) (minus:SI (match_dup 0)
++				(ashiftrt:SI (match_dup 1) (const_int 31))))]
++)
++
++(define_split
++  [(set (match_operand:SI         0 "s_register_operand" "")
++	(neg:SI (abs:SI (match_operand:SI 1 "s_register_operand" ""))))]
++  "TARGET_32BIT && reload_completed && !rtx_equal_p(operands[0], operands[1])"
++  [(set (match_dup 0) (xor:SI (ashiftrt:SI (match_dup 1) (const_int 31))
++			      (match_dup 1)))
++   (set (match_dup 0) (minus:SI (ashiftrt:SI (match_dup 1) (const_int 31))
++				(match_dup 0)))]
++)
++
++(define_split
++  [(set (match_operand:SI         0 "s_register_operand" "")
++	(neg:SI (abs:SI (match_operand:SI 1 "s_register_operand" ""))))
++   (clobber (reg:CC CC_REGNUM))]
++  "TARGET_32BIT && reload_completed && !rtx_equal_p(operands[0], operands[1])"
++  [(set (match_dup 0) (xor:SI (ashiftrt:SI (match_dup 1) (const_int 31))
++			      (match_dup 1)))
++   (set (match_dup 0) (minus:SI (ashiftrt:SI (match_dup 1) (const_int 31))
++				(match_dup 0)))]
++)
++
+ (define_expand "abssf2"
+   [(set (match_operand:SF         0 "s_register_operand" "")
+ 	(abs:SF (match_operand:SF 1 "s_register_operand" "")))]
+@@ -3636,7 +3932,7 @@
+ (define_expand "absdf2"
+   [(set (match_operand:DF         0 "s_register_operand" "")
+ 	(abs:DF (match_operand:DF 1 "s_register_operand" "")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_VFP_SINGLE"
+   "")
+ 
+ (define_expand "sqrtsf2"
+@@ -3648,12 +3944,12 @@
+ (define_expand "sqrtdf2"
+   [(set (match_operand:DF 0 "s_register_operand" "")
+ 	(sqrt:DF (match_operand:DF 1 "s_register_operand" "")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP_DOUBLE)"
+   "")
+ 
+ (define_insn_and_split "one_cmpldi2"
+   [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
+-	(not:DI (match_operand:DI 1 "s_register_operand" "?r,0")))]
++	(not:DI (match_operand:DI 1 "s_register_operand" "0,r")))]
+   "TARGET_32BIT"
+   "#"
+   "TARGET_32BIT && reload_completed"
+@@ -3682,7 +3978,8 @@
+ 	(not:SI (match_operand:SI 1 "s_register_operand"  "r")))]
+   "TARGET_32BIT"
+   "mvn%?\\t%0, %1"
+-  [(set_attr "predicable" "yes")]
++  [(set_attr "predicable" "yes")
++   (set_attr "insn" "mvn")]
+ )
+ 
+ (define_insn "*thumb1_one_cmplsi2"
+@@ -3690,7 +3987,8 @@
+ 	(not:SI (match_operand:SI 1 "register_operand"  "l")))]
+   "TARGET_THUMB1"
+   "mvn\\t%0, %1"
+-  [(set_attr "length" "2")]
++  [(set_attr "length" "2")
++   (set_attr "insn" "mvn")]
+ )
+ 
+ (define_insn "*notsi_compare0"
+@@ -3701,7 +3999,8 @@
+ 	(not:SI (match_dup 1)))]
+   "TARGET_32BIT"
+   "mvn%.\\t%0, %1"
+-  [(set_attr "conds" "set")]
++  [(set_attr "conds" "set")
++   (set_attr "insn" "mvn")]
+ )
+ 
+ (define_insn "*notsi_compare0_scratch"
+@@ -3711,11 +4010,40 @@
+    (clobber (match_scratch:SI 0 "=r"))]
+   "TARGET_32BIT"
+   "mvn%.\\t%0, %1"
+-  [(set_attr "conds" "set")]
++  [(set_attr "conds" "set")
++   (set_attr "insn" "mvn")]
+ )
+ 
+ ;; Fixed <--> Floating conversion insns
+ 
++(define_expand "floatsihf2"
++  [(set (match_operand:HF           0 "general_operand" "")
++	(float:HF (match_operand:SI 1 "general_operand" "")))]
++  "TARGET_EITHER"
++  "
++  {
++    rtx op1 = gen_reg_rtx (SFmode);
++    expand_float (op1, operands[1], 0);
++    op1 = convert_to_mode (HFmode, op1, 0);
++    emit_move_insn (operands[0], op1);
++    DONE;
++  }"
++)
++
++(define_expand "floatdihf2"
++  [(set (match_operand:HF           0 "general_operand" "")
++	(float:HF (match_operand:DI 1 "general_operand" "")))]
++  "TARGET_EITHER"
++  "
++  {
++    rtx op1 = gen_reg_rtx (SFmode);
++    expand_float (op1, operands[1], 0);
++    op1 = convert_to_mode (HFmode, op1, 0);
++    emit_move_insn (operands[0], op1);
++    DONE;
++  }"
++)
++
+ (define_expand "floatsisf2"
+   [(set (match_operand:SF           0 "s_register_operand" "")
+ 	(float:SF (match_operand:SI 1 "s_register_operand" "")))]
+@@ -3731,7 +4059,7 @@
+ (define_expand "floatsidf2"
+   [(set (match_operand:DF           0 "s_register_operand" "")
+ 	(float:DF (match_operand:SI 1 "s_register_operand" "")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_VFP_SINGLE"
+   "
+   if (TARGET_MAVERICK)
+     {
+@@ -3740,6 +4068,30 @@
+     }
+ ")
+ 
++(define_expand "fix_trunchfsi2"
++  [(set (match_operand:SI         0 "general_operand" "")
++	(fix:SI (fix:HF (match_operand:HF 1 "general_operand"  ""))))]
++  "TARGET_EITHER"
++  "
++  {
++    rtx op1 = convert_to_mode (SFmode, operands[1], 0);
++    expand_fix (operands[0], op1, 0);
++    DONE;
++  }"
++)
++
++(define_expand "fix_trunchfdi2"
++  [(set (match_operand:DI         0 "general_operand" "")
++	(fix:DI (fix:HF (match_operand:HF 1 "general_operand"  ""))))]
++  "TARGET_EITHER"
++  "
++  {
++    rtx op1 = convert_to_mode (SFmode, operands[1], 0);
++    expand_fix (operands[0], op1, 0);
++    DONE;
++  }"
++)
++
+ (define_expand "fix_truncsfsi2"
+   [(set (match_operand:SI         0 "s_register_operand" "")
+ 	(fix:SI (fix:SF (match_operand:SF 1 "s_register_operand"  ""))))]
+@@ -3759,7 +4111,7 @@
+ (define_expand "fix_truncdfsi2"
+   [(set (match_operand:SI         0 "s_register_operand" "")
+ 	(fix:SI (fix:DF (match_operand:DF 1 "s_register_operand"  ""))))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_VFP_SINGLE"
+   "
+   if (TARGET_MAVERICK)
+     {
+@@ -3776,9 +4128,25 @@
+   [(set (match_operand:SF  0 "s_register_operand" "")
+ 	(float_truncate:SF
+  	 (match_operand:DF 1 "s_register_operand" "")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_VFP_SINGLE"
+   ""
+ )
++
++/* DFmode -> HFmode conversions have to go through SFmode.  */
++(define_expand "truncdfhf2"
++  [(set (match_operand:HF  0 "general_operand" "")
++	(float_truncate:HF
++ 	 (match_operand:DF 1 "general_operand" "")))]
++  "TARGET_EITHER"
++  "
++  {
++    rtx op1;
++    op1 = convert_to_mode (SFmode, operands[1], 0);
++    op1 = convert_to_mode (HFmode, op1, 0);
++    emit_move_insn (operands[0], op1);
++    DONE;
++  }"
++)
+ 
+ ;; Zero and sign extension instructions.
+ 
+@@ -3800,6 +4168,7 @@
+     return \"mov%?\\t%R0, #0\";
+   "
+   [(set_attr "length" "8")
++   (set_attr "insn" "mov")
+    (set_attr "predicable" "yes")]
+ )
+ 
+@@ -3843,6 +4212,7 @@
+   "
+   [(set_attr "length" "8")
+    (set_attr "shift" "1")
++   (set_attr "insn" "mov")
+    (set_attr "predicable" "yes")]
+ )
+ 
+@@ -4123,6 +4493,28 @@
+   ""
+ )
+ 
++(define_code_iterator ior_xor [ior xor])
++
++(define_split
++  [(set (match_operand:SI 0 "s_register_operand" "")
++	(ior_xor:SI (and:SI (ashift:SI
++			     (match_operand:SI 1 "s_register_operand" "")
++			     (match_operand:SI 2 "const_int_operand" ""))
++			    (match_operand:SI 3 "const_int_operand" ""))
++		    (zero_extend:SI
++		     (match_operator 5 "subreg_lowpart_operator"
++		      [(match_operand:SI 4 "s_register_operand" "")]))))]
++  "TARGET_32BIT
++   && (INTVAL (operands[3])
++       == (GET_MODE_MASK (GET_MODE (operands[5]))
++           & (GET_MODE_MASK (GET_MODE (operands[5]))
++	      << (INTVAL (operands[2])))))"
++  [(set (match_dup 0) (ior_xor:SI (ashift:SI (match_dup 1) (match_dup 2))
++				  (match_dup 4)))
++   (set (match_dup 0) (zero_extend:SI (match_dup 5)))]
++  "operands[5] = gen_lowpart (GET_MODE (operands[5]), operands[0]);"
++)
++
+ (define_insn "*compareqi_eq0"
+   [(set (reg:CC_Z CC_REGNUM)
+ 	(compare:CC_Z (match_operand:QI 0 "s_register_operand" "r")
+@@ -4639,9 +5031,24 @@
+ (define_expand "extendsfdf2"
+   [(set (match_operand:DF                  0 "s_register_operand" "")
+ 	(float_extend:DF (match_operand:SF 1 "s_register_operand"  "")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_VFP_SINGLE"
+   ""
+ )
++
++/* HFmode -> DFmode conversions have to go through SFmode.  */
++(define_expand "extendhfdf2"
++  [(set (match_operand:DF                  0 "general_operand" "")
++	(float_extend:DF (match_operand:HF 1 "general_operand"  "")))]
++  "TARGET_EITHER"
++  "
++  {
++    rtx op1;
++    op1 = convert_to_mode (SFmode, operands[1], 0);
++    op1 = convert_to_mode (DFmode, op1, 0);
++    emit_insn (gen_movdf (operands[0], op1));
++    DONE;
++  }"
++)
+ 
+ ;; Move insns (including loads and stores)
+ 
+@@ -4877,6 +5284,7 @@
+   }"
+   [(set_attr "length" "4,4,6,2,2,6,4,4")
+    (set_attr "type" "*,*,*,load2,store2,load2,store2,*")
++   (set_attr "insn" "*,mov,*,*,*,*,*,mov")
+    (set_attr "pool_range" "*,*,*,*,*,1020,*,*")]
+ )
+ 
+@@ -4903,14 +5311,6 @@
+ 			       optimize && can_create_pseudo_p ());
+           DONE;
+         }
+-
+-      if (TARGET_USE_MOVT && !target_word_relocations
+-	  && GET_CODE (operands[1]) == SYMBOL_REF
+-	  && !flag_pic && !arm_tls_referenced_p (operands[1]))
+-	{
+-	  arm_emit_movpair (operands[0], operands[1]);
+-	  DONE;
+-	}
+     }
+   else /* TARGET_THUMB1...  */
+     {
+@@ -4984,18 +5384,9 @@
+    (set_attr "length" "4")]
+ )
+ 
+-(define_insn "*arm_movw"
+-  [(set (match_operand:SI 0 "nonimmediate_operand" "=r")
+-	(high:SI (match_operand:SI 1 "general_operand"      "i")))]
+-  "TARGET_32BIT"
+-  "movw%?\t%0, #:lower16:%c1"
+-  [(set_attr "predicable" "yes")
+-   (set_attr "length" "4")]
+-)
+-
+ (define_insn "*arm_movsi_insn"
+   [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m")
+-	(match_operand:SI 1 "general_operand"      "rk, I,K,N,mi,rk"))]
++	(match_operand:SI 1 "general_operand"      "rk, I,K,j,mi,rk"))]
+   "TARGET_ARM && ! TARGET_IWMMXT
+    && !(TARGET_HARD_FLOAT && TARGET_VFP)
+    && (   register_operand (operands[0], SImode)
+@@ -5008,6 +5399,7 @@
+    ldr%?\\t%0, %1
+    str%?\\t%1, %0"
+   [(set_attr "type" "*,*,*,*,load1,store1")
++   (set_attr "insn" "mov,mov,mvn,mov,*,*")
+    (set_attr "predicable" "yes")
+    (set_attr "pool_range" "*,*,*,*,4096,*")
+    (set_attr "neg_pool_range" "*,*,*,*,4084,*")]
+@@ -5027,9 +5419,33 @@
+   "
+ )
+ 
++(define_split
++  [(set (match_operand:SI 0 "arm_general_register_operand" "")
++	(match_operand:SI 1 "general_operand" ""))]
++  "TARGET_32BIT
++   && TARGET_USE_MOVT
++   && (GET_CODE (operands[1]) == SYMBOL_REF
++       || (GET_CODE (operands[1]) == CONST
++	   && GET_CODE (XEXP (operands[1], 0)) == PLUS
++	   && GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == SYMBOL_REF
++	   && GET_CODE (XEXP (XEXP (operands[1], 0), 1)) == CONST_INT
++	   /* The targets that use RELA relocations can have arbitrary
++	      offset.  The others targets, which use REL relocations,
++	      have limited offset encodings.  */
++	   && (TARGET_USE_RELA
++	       || (INTVAL (XEXP (XEXP (operands[1], 0), 1)) >= -0x8000
++		   && INTVAL (XEXP (XEXP (operands[1], 0), 1)) <= 0x7fff))))
++   && !flag_pic && !target_word_relocations
++   && !arm_tls_referenced_p (operands[1])"
++  [(clobber (const_int 0))]
++{
++  arm_emit_movpair (operands[0], operands[1]);
++  DONE;
++})
++
+ (define_insn "*thumb1_movsi_insn"
+-  [(set (match_operand:SI 0 "nonimmediate_operand" "=l,l,l,l,l,>,l, m,*lhk")
+-	(match_operand:SI 1 "general_operand"      "l, I,J,K,>,l,mi,l,*lhk"))]
++  [(set (match_operand:SI 0 "nonimmediate_operand" "=l,l,l,l,l,>,l, m,*l*h*k")
++	(match_operand:SI 1 "general_operand"      "l, I,J,K,>,l,mi,l,*l*h*k"))]
+   "TARGET_THUMB1
+    && (   register_operand (operands[0], SImode) 
+        || register_operand (operands[1], SImode))"
+@@ -5065,7 +5481,7 @@
+    (set (match_dup 0) (ashift:SI (match_dup 0) (match_dup 2)))]
+   "
+   {
+-    unsigned HOST_WIDE_INT val = INTVAL (operands[1]);
++    unsigned HOST_WIDE_INT val = INTVAL (operands[1]) & 0xffffffffu;
+     unsigned HOST_WIDE_INT mask = 0xff;
+     int i;
+     
+@@ -5627,6 +6043,7 @@
+    ldr%(h%)\\t%0, %1\\t%@ movhi"
+   [(set_attr "type" "*,*,store1,load1")
+    (set_attr "predicable" "yes")
++   (set_attr "insn" "mov,mvn,*,*")
+    (set_attr "pool_range" "*,*,*,256")
+    (set_attr "neg_pool_range" "*,*,*,244")]
+ )
+@@ -5638,7 +6055,8 @@
+   "@
+    mov%?\\t%0, %1\\t%@ movhi
+    mvn%?\\t%0, #%B1\\t%@ movhi"
+-  [(set_attr "predicable" "yes")]
++  [(set_attr "predicable" "yes")
++   (set_attr "insn" "mov,mvn")]
+ )
+ 
+ (define_expand "thumb_movhi_clobber"
+@@ -5769,6 +6187,7 @@
+    ldr%(b%)\\t%0, %1
+    str%(b%)\\t%1, %0"
+   [(set_attr "type" "*,*,load1,store1")
++   (set_attr "insn" "mov,mvn,*,*")
+    (set_attr "predicable" "yes")]
+ )
+ 
+@@ -5787,9 +6206,111 @@
+    mov\\t%0, %1"
+   [(set_attr "length" "2")
+    (set_attr "type" "*,load1,store1,*,*,*")
++   (set_attr "insn" "*,*,*,mov,mov,mov")
+    (set_attr "pool_range" "*,32,*,*,*,*")]
+ )
+ 
++;; HFmode moves
++(define_expand "movhf"
++  [(set (match_operand:HF 0 "general_operand" "")
++	(match_operand:HF 1 "general_operand" ""))]
++  "TARGET_EITHER"
++  "
++  if (TARGET_32BIT)
++    {
++      if (GET_CODE (operands[0]) == MEM)
++        operands[1] = force_reg (HFmode, operands[1]);
++    }
++  else /* TARGET_THUMB1 */
++    {
++      if (can_create_pseudo_p ())
++        {
++           if (GET_CODE (operands[0]) != REG)
++	     operands[1] = force_reg (HFmode, operands[1]);
++        }
++    }
++  "
++)
++
++(define_insn "*arm32_movhf"
++  [(set (match_operand:HF 0 "nonimmediate_operand" "=r,m,r,r")
++	(match_operand:HF 1 "general_operand"	   " m,r,r,F"))]
++  "TARGET_32BIT && !(TARGET_HARD_FLOAT && TARGET_FP16)
++   && (	  s_register_operand (operands[0], HFmode)
++       || s_register_operand (operands[1], HFmode))"
++  "*
++  switch (which_alternative)
++    {
++    case 0:	/* ARM register from memory */
++      return \"ldr%(h%)\\t%0, %1\\t%@ __fp16\";
++    case 1:	/* memory from ARM register */
++      return \"str%(h%)\\t%1, %0\\t%@ __fp16\";
++    case 2:	/* ARM register from ARM register */
++      return \"mov%?\\t%0, %1\\t%@ __fp16\";
++    case 3:	/* ARM register from constant */
++      {
++	REAL_VALUE_TYPE r;
++	long bits;
++	rtx ops[4];
++
++	REAL_VALUE_FROM_CONST_DOUBLE (r, operands[1]);
++	bits = real_to_target (NULL, &r, HFmode);
++	ops[0] = operands[0];
++	ops[1] = GEN_INT (bits);
++	ops[2] = GEN_INT (bits & 0xff00);
++	ops[3] = GEN_INT (bits & 0x00ff);
++
++	if (arm_arch_thumb2)
++	  output_asm_insn (\"movw%?\\t%0, %1\", ops);
++	else
++	  output_asm_insn (\"mov%?\\t%0, %2\;orr%?\\t%0, %0, %3\", ops);
++	return \"\";
++       }
++    default:
++      gcc_unreachable ();
++    }
++  "
++  [(set_attr "conds" "unconditional")
++   (set_attr "type" "load1,store1,*,*")
++   (set_attr "length" "4,4,4,8")
++   (set_attr "predicable" "yes")
++   ]
++)
++
++(define_insn "*thumb1_movhf"
++  [(set (match_operand:HF     0 "nonimmediate_operand" "=l,l,m,*r,*h")
++	(match_operand:HF     1 "general_operand"      "l,mF,l,*h,*r"))]
++  "TARGET_THUMB1
++   && (	  s_register_operand (operands[0], HFmode) 
++       || s_register_operand (operands[1], HFmode))"
++  "*
++  switch (which_alternative)
++    {
++    case 1:
++      {
++	rtx addr;
++	gcc_assert (GET_CODE(operands[1]) == MEM);
++	addr = XEXP (operands[1], 0);
++	if (GET_CODE (addr) == LABEL_REF
++	    || (GET_CODE (addr) == CONST
++		&& GET_CODE (XEXP (addr, 0)) == PLUS
++		&& GET_CODE (XEXP (XEXP (addr, 0), 0)) == LABEL_REF
++		&& GET_CODE (XEXP (XEXP (addr, 0), 1)) == CONST_INT))
++	  {
++	    /* Constant pool entry.  */
++	    return \"ldr\\t%0, %1\";
++	  }
++	return \"ldrh\\t%0, %1\";
++      }
++    case 2: return \"strh\\t%1, %0\";
++    default: return \"mov\\t%0, %1\";
++    }
++  "
++  [(set_attr "length" "2")
++   (set_attr "type" "*,load1,store1,*,*")
++   (set_attr "pool_range" "*,1020,*,*,*")]
++)
++
+ (define_expand "movsf"
+   [(set (match_operand:SF 0 "general_operand" "")
+ 	(match_operand:SF 1 "general_operand" ""))]
+@@ -5842,6 +6363,7 @@
+   [(set_attr "length" "4,4,4")
+    (set_attr "predicable" "yes")
+    (set_attr "type" "*,load1,store1")
++   (set_attr "insn" "mov,*,*")
+    (set_attr "pool_range" "*,4096,*")
+    (set_attr "neg_pool_range" "*,4084,*")]
+ )
+@@ -6297,7 +6819,7 @@
+    (match_operand:BLK 1 "general_operand" "")
+    (match_operand:SI 2 "const_int_operand" "")
+    (match_operand:SI 3 "const_int_operand" "")]
+-  "TARGET_EITHER"
++  "TARGET_EITHER && !low_irq_latency"
+   "
+   if (TARGET_32BIT)
+     {
+@@ -7476,7 +7998,7 @@
+ (define_expand "cmpdf"
+   [(match_operand:DF 0 "s_register_operand" "")
+    (match_operand:DF 1 "arm_float_compare_operand" "")]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_VFP_SINGLE"
+   "
+   arm_compare_op0 = operands[0];
+   arm_compare_op1 = operands[1];
+@@ -7507,7 +8029,11 @@
+    (set_attr "shift" "1")
+    (set (attr "type") (if_then_else (match_operand 2 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ (define_insn "*arm_cmpsi_shiftsi_swp"
+@@ -7522,7 +8048,11 @@
+    (set_attr "shift" "1")
+    (set (attr "type") (if_then_else (match_operand 2 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ (define_insn "*arm_cmpsi_negshiftsi_si"
+@@ -7537,9 +8067,75 @@
+   [(set_attr "conds" "set")
+    (set (attr "type") (if_then_else (match_operand 3 "const_int_operand" "")
+ 				    (const_string "alu_shift")
+-				    (const_string "alu_shift_reg")))]
++                                    (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
++)
++
++;; DImode comparisons.  The generic code generates branches that
++;; if-conversion can not reduce to a conditional compare, so we do
++;; that directly.
++
++(define_insn "*arm_cmpdi_insn"
++  [(set (reg:CC_NCV CC_REGNUM)
++	(compare:CC_NCV (match_operand:DI 0 "s_register_operand" "r")
++			(match_operand:DI 1 "arm_di_operand"	   "rDi")))
++   (clobber (match_scratch:SI 2 "=r"))]
++  "TARGET_32BIT && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)"
++  "cmp\\t%Q0, %Q1\;sbcs\\t%2, %R0, %R1"
++  [(set_attr "conds" "set")
++   (set_attr "length" "8")]
++)
++
++(define_insn "*arm_cmpdi_unsigned"
++  [(set (reg:CC_CZ CC_REGNUM)
++	(compare:CC_CZ (match_operand:DI 0 "s_register_operand" "r")
++		       (match_operand:DI 1 "arm_di_operand"	"rDi")))]
++  "TARGET_ARM"
++  "cmp%?\\t%R0, %R1\;cmpeq\\t%Q0, %Q1"
++  [(set_attr "conds" "set")
++   (set_attr "length" "8")]
++)
++
++(define_insn "*arm_cmpdi_zero"
++  [(set (reg:CC_Z CC_REGNUM)
++	(compare:CC_Z (match_operand:DI 0 "s_register_operand" "r")
++		      (const_int 0)))
++   (clobber (match_scratch:SI 1 "=r"))]
++  "TARGET_32BIT"
++  "orr%.\\t%1, %Q0, %R0"
++  [(set_attr "conds" "set")
++   (set_attr "insn" "orr")]
+ )
+ 
++(define_insn "*thumb_cmpdi_zero"
++  [(set (reg:CC_Z CC_REGNUM)
++	(compare:CC_Z (match_operand:DI 0 "s_register_operand" "l")
++		      (const_int 0)))
++   (clobber (match_scratch:SI 1 "=l"))]
++  "TARGET_THUMB1"
++  "orr\\t%1, %Q0, %R0"
++  [(set_attr "conds" "set")
++   (set_attr "insn" "orr")
++   (set_attr "length" "2")]
++)
++
++(define_expand "cmpdi"
++  [(match_operand:DI 0 "cmpdi_operand" "")
++   (match_operand:DI 1 "cmpdi_operand" "")]
++  "TARGET_32BIT"
++  "{
++     /* We should not have two constants.  */
++     gcc_assert (GET_MODE (operands[0]) == DImode
++		 || GET_MODE (operands[1]) == DImode);
++
++     arm_compare_op0 = operands[0];
++     arm_compare_op1 = operands[1];
++     DONE;
++   }")
++
+ ;; Cirrus SF compare instruction
+ (define_insn "*cirrus_cmpsf"
+   [(set (reg:CCFP CC_REGNUM)
+@@ -7562,17 +8158,6 @@
+    (set_attr "cirrus" "compare")]
+ )
+ 
+-;; Cirrus DI compare instruction
+-(define_expand "cmpdi"
+-  [(match_operand:DI 0 "cirrus_fp_register" "")
+-   (match_operand:DI 1 "cirrus_fp_register" "")]
+-  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK"
+-  "{
+-     arm_compare_op0 = operands[0];
+-     arm_compare_op1 = operands[1];
+-     DONE;
+-   }")
+-
+ (define_insn "*cirrus_cmpdi"
+   [(set (reg:CC CC_REGNUM)
+ 	(compare:CC (match_operand:DI 0 "cirrus_fp_register" "v")
+@@ -7624,8 +8209,18 @@
+ 		      (label_ref (match_operand 0 "" ""))
+ 		      (pc)))]
+   "TARGET_32BIT"
+-  "operands[1] = arm_gen_compare_reg (GT, arm_compare_op0, arm_compare_op1);"
+-)
++{
++  if (GET_MODE (arm_compare_op0) == DImode
++      || GET_MODE (arm_compare_op1) == DImode)
++    {
++      rtx tem = arm_compare_op0;
++      arm_compare_op0 = arm_compare_op1;
++      arm_compare_op1 = tem;
++      emit_insn (gen_blt (operands[0]));
++      DONE;
++    }
++  operands[1] = arm_gen_compare_reg (GT, arm_compare_op0, arm_compare_op1);
++})
+ 
+ (define_expand "ble"
+   [(set (pc)
+@@ -7633,8 +8228,18 @@
+ 		      (label_ref (match_operand 0 "" ""))
+ 		      (pc)))]
+   "TARGET_32BIT"
+-  "operands[1] = arm_gen_compare_reg (LE, arm_compare_op0, arm_compare_op1);"
+-)
++{
++  if (GET_MODE (arm_compare_op0) == DImode
++      || GET_MODE (arm_compare_op1) == DImode)
++    {
++      rtx tem = arm_compare_op0;
++      arm_compare_op0 = arm_compare_op1;
++      arm_compare_op1 = tem;
++      emit_insn (gen_bge (operands[0]));
++      DONE;
++    }
++  operands[1] = arm_gen_compare_reg (LE, arm_compare_op0, arm_compare_op1);
++})
+ 
+ (define_expand "bge"
+   [(set (pc)
+@@ -7660,8 +8265,18 @@
+ 		      (label_ref (match_operand 0 "" ""))
+ 		      (pc)))]
+   "TARGET_32BIT"
+-  "operands[1] = arm_gen_compare_reg (GTU, arm_compare_op0, arm_compare_op1);"
+-)
++{
++  if (!TARGET_ARM && (GET_MODE (arm_compare_op0) == DImode
++		      || GET_MODE (arm_compare_op1) == DImode))
++    {
++      rtx tem = arm_compare_op0;
++      arm_compare_op0 = arm_compare_op1;
++      arm_compare_op1 = tem;
++      emit_insn (gen_bltu (operands[0]));
++      DONE;
++    }
++  operands[1] = arm_gen_compare_reg (GTU, arm_compare_op0, arm_compare_op1);
++})
+ 
+ (define_expand "bleu"
+   [(set (pc)
+@@ -7669,8 +8284,18 @@
+ 		      (label_ref (match_operand 0 "" ""))
+ 		      (pc)))]
+   "TARGET_32BIT"
+-  "operands[1] = arm_gen_compare_reg (LEU, arm_compare_op0, arm_compare_op1);"
+-)
++{
++  if (!TARGET_ARM && (GET_MODE (arm_compare_op0) == DImode
++		      || GET_MODE (arm_compare_op1) == DImode))
++    {
++      rtx tem = arm_compare_op0;
++      arm_compare_op0 = arm_compare_op1;
++      arm_compare_op1 = tem;
++      emit_insn (gen_bgeu (operands[0]));
++      DONE;
++    }
++  operands[1] = arm_gen_compare_reg (LEU, arm_compare_op0, arm_compare_op1);
++})
+ 
+ (define_expand "bgeu"
+   [(set (pc)
+@@ -7879,77 +8504,117 @@
+ (define_expand "seq"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(eq:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
+   "operands[1] = arm_gen_compare_reg (EQ, arm_compare_op0, arm_compare_op1);"
+ )
+ 
+ (define_expand "sne"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(ne:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
+   "operands[1] = arm_gen_compare_reg (NE, arm_compare_op0, arm_compare_op1);"
+ )
+ 
+ (define_expand "sgt"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(gt:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT"
+-  "operands[1] = arm_gen_compare_reg (GT, arm_compare_op0, arm_compare_op1);"
+-)
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
++{
++  if (GET_MODE (arm_compare_op0) == DImode
++      || GET_MODE (arm_compare_op1) == DImode)
++    {
++      rtx tem = arm_compare_op0;
++      arm_compare_op0 = arm_compare_op1;
++      arm_compare_op1 = tem;
++      emit_insn (gen_slt (operands[0]));
++      DONE;
++    }
++  operands[1] = arm_gen_compare_reg (GT, arm_compare_op0, arm_compare_op1);
++})
+ 
+ (define_expand "sle"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(le:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT"
+-  "operands[1] = arm_gen_compare_reg (LE, arm_compare_op0, arm_compare_op1);"
+-)
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
++{
++  if (GET_MODE (arm_compare_op0) == DImode
++      || GET_MODE (arm_compare_op1) == DImode)
++    {
++      rtx tem = arm_compare_op0;
++      arm_compare_op0 = arm_compare_op1;
++      arm_compare_op1 = tem;
++      emit_insn (gen_sge (operands[0]));
++      DONE;
++    }
++  operands[1] = arm_gen_compare_reg (LE, arm_compare_op0, arm_compare_op1);
++})
+ 
+ (define_expand "sge"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(ge:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
+   "operands[1] = arm_gen_compare_reg (GE, arm_compare_op0, arm_compare_op1);"
+ )
+ 
+ (define_expand "slt"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(lt:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
+   "operands[1] = arm_gen_compare_reg (LT, arm_compare_op0, arm_compare_op1);"
+ )
+ 
+ (define_expand "sgtu"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(gtu:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT"
+-  "operands[1] = arm_gen_compare_reg (GTU, arm_compare_op0, arm_compare_op1);"
+-)
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
++{
++  if (!TARGET_ARM && (GET_MODE (arm_compare_op0) == DImode
++		      || GET_MODE (arm_compare_op1) == DImode))
++    {
++      rtx tem = arm_compare_op0;
++      arm_compare_op0 = arm_compare_op1;
++      arm_compare_op1 = tem;
++      emit_insn (gen_sltu (operands[0]));
++      DONE;
++    }
++  operands[1] = arm_gen_compare_reg (GTU, arm_compare_op0, arm_compare_op1);
++})
+ 
+ (define_expand "sleu"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(leu:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT"
+-  "operands[1] = arm_gen_compare_reg (LEU, arm_compare_op0, arm_compare_op1);"
+-)
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
++{
++  if (!TARGET_ARM && (GET_MODE (arm_compare_op0) == DImode
++		      || GET_MODE (arm_compare_op1) == DImode))
++    {
++      rtx tem = arm_compare_op0;
++      arm_compare_op0 = arm_compare_op1;
++      arm_compare_op1 = tem;
++      emit_insn (gen_sgeu (operands[0]));
++      DONE;
++    }
++  operands[1] = arm_gen_compare_reg (LEU, arm_compare_op0, arm_compare_op1);
++})
+ 
+ (define_expand "sgeu"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(geu:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
+   "operands[1] = arm_gen_compare_reg (GEU, arm_compare_op0, arm_compare_op1);"
+ )
+ 
+ (define_expand "sltu"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(ltu:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
+   "operands[1] = arm_gen_compare_reg (LTU, arm_compare_op0, arm_compare_op1);"
+ )
+ 
+ (define_expand "sunordered"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(unordered:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP) && !TARGET_NO_COND_EXEC"
+   "operands[1] = arm_gen_compare_reg (UNORDERED, arm_compare_op0,
+ 				      arm_compare_op1);"
+ )
+@@ -7957,7 +8622,7 @@
+ (define_expand "sordered"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(ordered:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP) && !TARGET_NO_COND_EXEC"
+   "operands[1] = arm_gen_compare_reg (ORDERED, arm_compare_op0,
+ 				      arm_compare_op1);"
+ )
+@@ -7965,7 +8630,7 @@
+ (define_expand "sungt"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(ungt:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP) && !TARGET_NO_COND_EXEC"
+   "operands[1] = arm_gen_compare_reg (UNGT, arm_compare_op0,
+ 				      arm_compare_op1);"
+ )
+@@ -7973,7 +8638,7 @@
+ (define_expand "sunge"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(unge:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP) && !TARGET_NO_COND_EXEC"
+   "operands[1] = arm_gen_compare_reg (UNGE, arm_compare_op0,
+ 				      arm_compare_op1);"
+ )
+@@ -7981,7 +8646,7 @@
+ (define_expand "sunlt"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(unlt:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP) && !TARGET_NO_COND_EXEC"
+   "operands[1] = arm_gen_compare_reg (UNLT, arm_compare_op0,
+ 				      arm_compare_op1);"
+ )
+@@ -7989,7 +8654,7 @@
+ (define_expand "sunle"
+   [(set (match_operand:SI 0 "s_register_operand" "")
+ 	(unle:SI (match_dup 1) (const_int 0)))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP) && !TARGET_NO_COND_EXEC"
+   "operands[1] = arm_gen_compare_reg (UNLE, arm_compare_op0,
+ 				      arm_compare_op1);"
+ )
+@@ -8018,6 +8683,7 @@
+   "TARGET_ARM"
+   "mov%D1\\t%0, #0\;mov%d1\\t%0, #1"
+   [(set_attr "conds" "use")
++   (set_attr "insn" "mov")
+    (set_attr "length" "8")]
+ )
+ 
+@@ -8028,6 +8694,7 @@
+   "TARGET_ARM"
+   "mov%D1\\t%0, #0\;mvn%d1\\t%0, #0"
+   [(set_attr "conds" "use")
++   (set_attr "insn" "mov")
+    (set_attr "length" "8")]
+ )
+ 
+@@ -8038,6 +8705,7 @@
+   "TARGET_ARM"
+   "mov%D1\\t%0, #0\;mvn%d1\\t%0, #1"
+   [(set_attr "conds" "use")
++   (set_attr "insn" "mov")
+    (set_attr "length" "8")]
+ )
+ 
+@@ -8241,7 +8909,7 @@
+ 	(if_then_else:SI (match_operand 1 "arm_comparison_operator" "")
+ 			 (match_operand:SI 2 "arm_not_operand" "")
+ 			 (match_operand:SI 3 "arm_not_operand" "")))]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NO_COND_EXEC"
+   "
+   {
+     enum rtx_code code = GET_CODE (operands[1]);
+@@ -8250,6 +8918,16 @@
+     if (code == UNEQ || code == LTGT)
+       FAIL;
+ 
++    if ((code == GT || code == LE)
++	&& (GET_MODE (arm_compare_op0) == DImode
++	    || GET_MODE (arm_compare_op1) == DImode))
++      {
++	rtx tem = arm_compare_op0;
++	arm_compare_op0 = arm_compare_op1;
++	arm_compare_op1 = tem;
++	code = swap_condition (code);
++      }
++
+     ccreg = arm_gen_compare_reg (code, arm_compare_op0, arm_compare_op1);
+     operands[1] = gen_rtx_fmt_ee (code, VOIDmode, ccreg, const0_rtx);
+   }"
+@@ -8260,7 +8938,7 @@
+ 	(if_then_else:SF (match_operand 1 "arm_comparison_operator" "")
+ 			 (match_operand:SF 2 "s_register_operand" "")
+ 			 (match_operand:SF 3 "nonmemory_operand" "")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_NO_COND_EXEC"
+   "
+   {
+     enum rtx_code code = GET_CODE (operands[1]);
+@@ -8269,6 +8947,16 @@
+     if (code == UNEQ || code == LTGT)
+       FAIL;
+ 
++    if ((code == GT || code == LE)
++	&& (GET_MODE (arm_compare_op0) == DImode
++	    || GET_MODE (arm_compare_op1) == DImode))
++      {
++	rtx tem = arm_compare_op0;
++	arm_compare_op0 = arm_compare_op1;
++	arm_compare_op1 = tem;
++	code = swap_condition (code);
++      }
++
+     /* When compiling for SOFT_FLOAT, ensure both arms are in registers. 
+        Otherwise, ensure it is a valid FP add operand */
+     if ((!(TARGET_HARD_FLOAT && TARGET_FPA))
+@@ -8285,7 +8973,7 @@
+ 	(if_then_else:DF (match_operand 1 "arm_comparison_operator" "")
+ 			 (match_operand:DF 2 "s_register_operand" "")
+ 			 (match_operand:DF 3 "arm_float_add_operand" "")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP)"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP_DOUBLE) && !TARGET_NO_COND_EXEC"
+   "
+   {
+     enum rtx_code code = GET_CODE (operands[1]);
+@@ -8294,6 +8982,16 @@
+     if (code == UNEQ || code == LTGT)
+       FAIL;
+ 
++    if ((code == GT || code == LE)
++	&& (GET_MODE (arm_compare_op0) == DImode
++	    || GET_MODE (arm_compare_op1) == DImode))
++      {
++	rtx tem = arm_compare_op0;
++	arm_compare_op0 = arm_compare_op1;
++	arm_compare_op1 = tem;
++	code = swap_condition (code);
++      }
++
+     ccreg = arm_gen_compare_reg (code, arm_compare_op0, arm_compare_op1);
+     operands[1] = gen_rtx_fmt_ee (code, VOIDmode, ccreg, const0_rtx);
+   }"
+@@ -8317,7 +9015,8 @@
+    mvn%d3\\t%0, #%B1\;mov%D3\\t%0, %2
+    mvn%d3\\t%0, #%B1\;mvn%D3\\t%0, #%B2"
+   [(set_attr "length" "4,4,4,4,8,8,8,8")
+-   (set_attr "conds" "use")]
++   (set_attr "conds" "use")
++   (set_attr "insn" "mov,mvn,mov,mvn,mov,mov,mvn,mvn")]
+ )
+ 
+ (define_insn "*movsfcc_soft_insn"
+@@ -8330,7 +9029,8 @@
+   "@
+    mov%D3\\t%0, %2
+    mov%d3\\t%0, %1"
+-  [(set_attr "conds" "use")]
++  [(set_attr "conds" "use")
++   (set_attr "insn" "mov")]
+ )
+ 
+ 
+@@ -8553,7 +9253,7 @@
+    (set_attr "type" "call")]
+ )
+ 
+-;; Note: see *call_mem
++;; Note: see *call_mem.
+ 
+ (define_insn "*call_value_mem"
+   [(set (match_operand 0 "" "")
+@@ -8610,7 +9310,7 @@
+ 	 (match_operand 1 "" ""))
+    (use (match_operand 2 "" ""))
+    (clobber (reg:SI LR_REGNUM))]
+-  "TARGET_ARM
++  "TARGET_32BIT
+    && (GET_CODE (operands[0]) == SYMBOL_REF)
+    && !arm_is_long_call_p (SYMBOL_REF_DECL (operands[0]))"
+   "*
+@@ -8626,7 +9326,7 @@
+ 	(match_operand:SI 2 "" "")))
+    (use (match_operand 3 "" ""))
+    (clobber (reg:SI LR_REGNUM))]
+-  "TARGET_ARM
++  "TARGET_32BIT
+    && (GET_CODE (operands[1]) == SYMBOL_REF)
+    && !arm_is_long_call_p (SYMBOL_REF_DECL (operands[1]))"
+   "*
+@@ -8641,7 +9341,7 @@
+ 	 (match_operand:SI 1 "" ""))
+    (use (match_operand 2 "" ""))
+    (clobber (reg:SI LR_REGNUM))]
+-  "TARGET_THUMB
++  "TARGET_THUMB1
+    && GET_CODE (operands[0]) == SYMBOL_REF
+    && !arm_is_long_call_p (SYMBOL_REF_DECL (operands[0]))"
+   "bl\\t%a0"
+@@ -8655,7 +9355,7 @@
+ 	      (match_operand 2 "" "")))
+    (use (match_operand 3 "" ""))
+    (clobber (reg:SI LR_REGNUM))]
+-  "TARGET_THUMB
++  "TARGET_THUMB1
+    && GET_CODE (operands[1]) == SYMBOL_REF
+    && !arm_is_long_call_p (SYMBOL_REF_DECL (operands[1]))"
+   "bl\\t%a1"
+@@ -8669,7 +9369,7 @@
+ 		    (match_operand 1 "general_operand" ""))
+ 	      (return)
+ 	      (use (match_operand 2 "" ""))])]
+-  "TARGET_ARM"
++  "TARGET_32BIT"
+   "
+   {
+     if (operands[2] == NULL_RTX)
+@@ -8683,7 +9383,7 @@
+ 			 (match_operand 2 "general_operand" "")))
+ 	      (return)
+ 	      (use (match_operand 3 "" ""))])]
+-  "TARGET_ARM"
++  "TARGET_32BIT"
+   "
+   {
+     if (operands[3] == NULL_RTX)
+@@ -8696,7 +9396,7 @@
+ 	(match_operand 1 "" ""))
+   (return)
+   (use (match_operand 2 "" ""))]
+-  "TARGET_ARM && GET_CODE (operands[0]) == SYMBOL_REF"
++  "TARGET_32BIT && GET_CODE (operands[0]) == SYMBOL_REF"
+   "*
+   return NEED_PLT_RELOC ? \"b%?\\t%a0(PLT)\" : \"b%?\\t%a0\";
+   "
+@@ -8709,15 +9409,20 @@
+ 	     (match_operand 2 "" "")))
+   (return)
+   (use (match_operand 3 "" ""))]
+-  "TARGET_ARM && GET_CODE (operands[1]) == SYMBOL_REF"
++  "TARGET_32BIT && GET_CODE (operands[1]) == SYMBOL_REF"
+   "*
+   return NEED_PLT_RELOC ? \"b%?\\t%a1(PLT)\" : \"b%?\\t%a1\";
+   "
+   [(set_attr "type" "call")]
+ )
+ 
++(define_expand "return"
++  [(return)]
++  "TARGET_32BIT && USE_RETURN_INSN (FALSE)"
++  "")
++
+ ;; Often the return insn will be the same as loading from memory, so set attr
+-(define_insn "return"
++(define_insn "*arm_return"
+   [(return)]
+   "TARGET_ARM && USE_RETURN_INSN (FALSE)"
+   "*
+@@ -8734,13 +9439,26 @@
+    (set_attr "predicable" "yes")]
+ )
+ 
++;; Note: this is not predicable, to avoid issues with linker-generated
++;; interworking stubs.
++(define_insn "*thumb2_return"
++  [(return)]
++  "TARGET_THUMB2 && USE_RETURN_INSN (FALSE)"
++  "*
++  {
++    return output_return_instruction (const_true_rtx, TRUE, FALSE);
++  }"
++  [(set_attr "type" "load1")
++   (set_attr "length" "12")]
++)
++
+ (define_insn "*cond_return"
+   [(set (pc)
+         (if_then_else (match_operator 0 "arm_comparison_operator"
+ 		       [(match_operand 1 "cc_register" "") (const_int 0)])
+                       (return)
+                       (pc)))]
+-  "TARGET_ARM && USE_RETURN_INSN (TRUE)"
++  "TARGET_ARM && USE_RETURN_INSN (TRUE) && !TARGET_NO_COND_EXEC"
+   "*
+   {
+     if (arm_ccfsm_state == 2)
+@@ -8761,7 +9479,7 @@
+ 		       [(match_operand 1 "cc_register" "") (const_int 0)])
+                       (pc)
+ 		      (return)))]
+-  "TARGET_ARM && USE_RETURN_INSN (TRUE)"
++  "TARGET_ARM && USE_RETURN_INSN (TRUE) && !TARGET_NO_COND_EXEC"
+   "*
+   {
+     if (arm_ccfsm_state == 2)
+@@ -9072,14 +9790,18 @@
+           [(match_operator:SI 3 "shift_operator"
+              [(match_operand:SI 4 "s_register_operand" "r")
+               (match_operand:SI 5 "reg_or_int_operand" "rI")])
+-           (match_operand:SI 2 "s_register_operand" "r")]))]
++           (match_operand:SI 2 "s_register_operand" "rk")]))]
+   "TARGET_ARM"
+   "%i1%?\\t%0, %2, %4%S3"
+   [(set_attr "predicable" "yes")
+    (set_attr "shift" "4")
+    (set (attr "type") (if_then_else (match_operand 5 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ (define_split
+@@ -9117,7 +9839,11 @@
+    (set_attr "shift" "4")
+    (set (attr "type") (if_then_else (match_operand 5 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ (define_insn "*arith_shiftsi_compare0_scratch"
+@@ -9135,7 +9861,11 @@
+    (set_attr "shift" "4")
+    (set (attr "type") (if_then_else (match_operand 5 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ (define_insn "*sub_shiftsi"
+@@ -9150,7 +9880,11 @@
+    (set_attr "shift" "3")
+    (set (attr "type") (if_then_else (match_operand 4 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ (define_insn "*sub_shiftsi_compare0"
+@@ -9170,7 +9904,11 @@
+    (set_attr "shift" "3")
+    (set (attr "type") (if_then_else (match_operand 4 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ (define_insn "*sub_shiftsi_compare0_scratch"
+@@ -9188,7 +9926,11 @@
+    (set_attr "shift" "3")
+    (set (attr "type") (if_then_else (match_operand 4 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 8)
++                                        (const_int 4)))]
+ )
+ 
+ 
+@@ -9201,6 +9943,7 @@
+   "TARGET_ARM"
+   "mov%D1\\t%0, #0\;and%d1\\t%0, %2, #1"
+   [(set_attr "conds" "use")
++   (set_attr "insn" "mov")
+    (set_attr "length" "8")]
+ )
+ 
+@@ -9214,6 +9957,7 @@
+    orr%d2\\t%0, %1, #1
+    mov%D2\\t%0, %1\;orr%d2\\t%0, %1, #1"
+   [(set_attr "conds" "use")
++   (set_attr "insn" "orr")
+    (set_attr "length" "4,8")]
+ )
+ 
+@@ -9223,7 +9967,7 @@
+ 	 [(match_operand:SI 2 "s_register_operand" "r,r")
+ 	  (match_operand:SI 3 "arm_add_operand" "rI,L")]))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_COND_EXEC"
+   "*
+     if (operands[3] == const0_rtx)
+       {
+@@ -9278,6 +10022,7 @@
+     return \"\";
+   "
+   [(set_attr "conds" "use")
++   (set_attr "insn" "mov")
+    (set_attr "length" "4,4,8")]
+ )
+ 
+@@ -9289,7 +10034,7 @@
+ 	    (match_operand:SI 3 "arm_rhs_operand" "rI,rI")])
+           (match_operand:SI 1 "s_register_operand" "0,?r")]))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_SINGLE_COND_EXEC"
+   "*
+     if (GET_CODE (operands[4]) == LT && operands[3] == const0_rtx)
+       return \"%i5\\t%0, %1, %2, lsr #31\";
+@@ -9685,7 +10430,7 @@
+ 	 (match_operand:SI 1 "arm_rhs_operand" "0,rI,?rI")
+ 	 (match_operand:SI 2 "arm_rhs_operand" "rI,0,rI")))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_COND_EXEC"
+   "*
+   if (GET_CODE (operands[5]) == LT
+       && (operands[4] == const0_rtx))
+@@ -9751,7 +10496,7 @@
+ 			  (match_operand:SI 3 "arm_add_operand" "rIL,rIL"))
+ 			 (match_operand:SI 1 "arm_rhs_operand" "0,?rI")))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_SINGLE_COND_EXEC"
+   "#"
+   [(set_attr "conds" "clob")
+    (set_attr "length" "8,12")]
+@@ -9787,7 +10532,7 @@
+ 			  (match_operand:SI 2 "s_register_operand" "r,r")
+ 			  (match_operand:SI 3 "arm_add_operand" "rIL,rIL"))))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_SINGLE_COND_EXEC"
+   "#"
+   [(set_attr "conds" "clob")
+    (set_attr "length" "8,12")]
+@@ -9825,7 +10570,7 @@
+ 			  [(match_operand:SI 3 "s_register_operand" "r")
+ 			   (match_operand:SI 4 "arm_rhs_operand" "rI")])))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_SINGLE_COND_EXEC"
+   "#"
+   [(set_attr "conds" "clob")
+    (set_attr "length" "12")]
+@@ -9975,7 +10720,7 @@
+ 	 (not:SI
+ 	  (match_operand:SI 2 "s_register_operand" "r,r"))))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_SINGLE_COND_EXEC"
+   "#"
+   [(set_attr "conds" "clob")
+    (set_attr "length" "8,12")]
+@@ -9994,6 +10739,7 @@
+    mov%d4\\t%0, %1\;mvn%D4\\t%0, %2
+    mvn%d4\\t%0, #%B1\;mvn%D4\\t%0, %2"
+   [(set_attr "conds" "use")
++   (set_attr "insn" "mvn")
+    (set_attr "length" "4,8,8")]
+ )
+ 
+@@ -10007,7 +10753,7 @@
+ 	  (match_operand:SI 2 "s_register_operand" "r,r"))
+ 	 (match_operand:SI 1 "arm_not_operand" "0,?rIK")))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_SINGLE_COND_EXEC"
+   "#"
+   [(set_attr "conds" "clob")
+    (set_attr "length" "8,12")]
+@@ -10026,6 +10772,7 @@
+    mov%D4\\t%0, %1\;mvn%d4\\t%0, %2
+    mvn%D4\\t%0, #%B1\;mvn%d4\\t%0, %2"
+   [(set_attr "conds" "use")
++   (set_attr "insn" "mvn")
+    (set_attr "length" "4,8,8")]
+ )
+ 
+@@ -10040,7 +10787,7 @@
+ 	   (match_operand:SI 3 "arm_rhs_operand" "rM,rM")])
+ 	 (match_operand:SI 1 "arm_not_operand" "0,?rIK")))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_SINGLE_COND_EXEC"
+   "#"
+   [(set_attr "conds" "clob")
+    (set_attr "length" "8,12")]
+@@ -10062,10 +10809,23 @@
+    mvn%D5\\t%0, #%B1\;mov%d5\\t%0, %2%S4"
+   [(set_attr "conds" "use")
+    (set_attr "shift" "2")
+-   (set_attr "length" "4,8,8")
++   (set_attr "insn" "mov")
+    (set (attr "type") (if_then_else (match_operand 3 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set_attr_alternative "length"
++           [(if_then_else (and (eq_attr "type" "alu_shift_reg")
++                               (eq_attr "fix_janus" "yes"))
++                          (const_int 8)
++                          (const_int 4))
++            (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                               (eq_attr "fix_janus" "yes"))
++                          (const_int 12)
++                          (const_int 8))
++            (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                               (eq_attr "fix_janus" "yes"))
++                          (const_int 12)
++                          (const_int 8))])]
+ )
+ 
+ (define_insn "*ifcompare_move_shift"
+@@ -10079,7 +10839,7 @@
+ 	  [(match_operand:SI 2 "s_register_operand" "r,r")
+ 	   (match_operand:SI 3 "arm_rhs_operand" "rM,rM")])))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_SINGLE_COND_EXEC"
+   "#"
+   [(set_attr "conds" "clob")
+    (set_attr "length" "8,12")]
+@@ -10101,10 +10861,24 @@
+    mvn%d5\\t%0, #%B1\;mov%D5\\t%0, %2%S4"
+   [(set_attr "conds" "use")
+    (set_attr "shift" "2")
+-   (set_attr "length" "4,8,8")
++   (set_attr "insn" "mov")
+    (set (attr "type") (if_then_else (match_operand 3 "const_int_operand" "")
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set_attr_alternative "length"
++        [(if_then_else (and (eq_attr "type" "alu_shift_reg")
++                            (eq_attr "fix_janus" "yes"))
++                       (const_int 8)
++                       (const_int 4))
++         (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                            (eq_attr "fix_janus" "yes"))
++                       (const_int 12)
++                       (const_int 8))
++         (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                            (eq_attr "fix_janus" "yes"))
++                       (const_int 12)
++                       (const_int 8))])
++     (set_attr "insn" "mov")]
+ )
+ 
+ (define_insn "*ifcompare_shift_shift"
+@@ -10120,7 +10894,7 @@
+ 	  [(match_operand:SI 3 "s_register_operand" "r")
+ 	   (match_operand:SI 4 "arm_rhs_operand" "rM")])))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_SINGLE_COND_EXEC"
+   "#"
+   [(set_attr "conds" "clob")
+    (set_attr "length" "12")]
+@@ -10141,12 +10915,16 @@
+   "mov%d5\\t%0, %1%S6\;mov%D5\\t%0, %3%S7"
+   [(set_attr "conds" "use")
+    (set_attr "shift" "1")
+-   (set_attr "length" "8")
++   (set_attr "insn" "mov")
+    (set (attr "type") (if_then_else
+ 		        (and (match_operand 2 "const_int_operand" "")
+                              (match_operand 4 "const_int_operand" ""))
+ 		      (const_string "alu_shift")
+-		      (const_string "alu_shift_reg")))]
++                      (const_string "alu_shift_reg")))
++     (set (attr "length") (if_then_else (and (eq_attr "type" "alu_shift_reg")
++                                             (eq_attr "fix_janus" "yes"))
++                                        (const_int 16)
++                                        (const_int 8)))]
+ )
+ 
+ (define_insn "*ifcompare_not_arith"
+@@ -10160,7 +10938,7 @@
+ 	  [(match_operand:SI 2 "s_register_operand" "r")
+ 	   (match_operand:SI 3 "arm_rhs_operand" "rI")])))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_SINGLE_COND_EXEC"
+   "#"
+   [(set_attr "conds" "clob")
+    (set_attr "length" "12")]
+@@ -10178,6 +10956,7 @@
+   "TARGET_ARM"
+   "mvn%d5\\t%0, %1\;%I6%D5\\t%0, %2, %3"
+   [(set_attr "conds" "use")
++   (set_attr "insn" "mvn")
+    (set_attr "length" "8")]
+ )
+ 
+@@ -10192,7 +10971,7 @@
+ 	   (match_operand:SI 3 "arm_rhs_operand" "rI")])
+ 	 (not:SI (match_operand:SI 1 "s_register_operand" "r"))))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_SINGLE_COND_EXEC"
+   "#"
+   [(set_attr "conds" "clob")
+    (set_attr "length" "12")]
+@@ -10210,6 +10989,7 @@
+   "TARGET_ARM"
+   "mvn%D5\\t%0, %1\;%I6%d5\\t%0, %2, %3"
+   [(set_attr "conds" "use")
++   (set_attr "insn" "mvn")
+    (set_attr "length" "8")]
+ )
+ 
+@@ -10222,7 +11002,7 @@
+ 	 (neg:SI (match_operand:SI 2 "s_register_operand" "r,r"))
+ 	 (match_operand:SI 1 "arm_not_operand" "0,?rIK")))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_SINGLE_COND_EXEC"
+   "#"
+   [(set_attr "conds" "clob")
+    (set_attr "length" "8,12")]
+@@ -10253,7 +11033,7 @@
+ 	 (match_operand:SI 1 "arm_not_operand" "0,?rIK")
+ 	 (neg:SI (match_operand:SI 2 "s_register_operand" "r,r"))))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM"
++  "TARGET_ARM && !TARGET_NO_SINGLE_COND_EXEC"
+   "#"
+   [(set_attr "conds" "clob")
+    (set_attr "length" "8,12")]
+@@ -10621,7 +11401,7 @@
+ 			 (match_dup 0)
+ 			 (match_operand 4 "" "")))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM && reload_completed"
++  "TARGET_ARM && reload_completed && !TARGET_NO_SINGLE_COND_EXEC"
+   [(set (match_dup 5) (match_dup 6))
+    (cond_exec (match_dup 7)
+ 	      (set (match_dup 0) (match_dup 4)))]
+@@ -10649,7 +11429,7 @@
+ 			 (match_operand 4 "" "")
+ 			 (match_dup 0)))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM && reload_completed"
++  "TARGET_ARM && reload_completed && !TARGET_NO_SINGLE_COND_EXEC"
+   [(set (match_dup 5) (match_dup 6))
+    (cond_exec (match_op_dup 1 [(match_dup 5) (const_int 0)])
+ 	      (set (match_dup 0) (match_dup 4)))]
+@@ -10670,7 +11450,7 @@
+ 			 (match_operand 4 "" "")
+ 			 (match_operand 5 "" "")))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM && reload_completed"
++  "TARGET_ARM && reload_completed && !TARGET_NO_SINGLE_COND_EXEC"
+   [(set (match_dup 6) (match_dup 7))
+    (cond_exec (match_op_dup 1 [(match_dup 6) (const_int 0)])
+ 	      (set (match_dup 0) (match_dup 4)))
+@@ -10702,7 +11482,7 @@
+ 			 (not:SI
+ 			  (match_operand:SI 5 "s_register_operand" ""))))
+    (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_ARM && reload_completed"
++  "TARGET_ARM && reload_completed && !TARGET_NO_SINGLE_COND_EXEC"
+   [(set (match_dup 6) (match_dup 7))
+    (cond_exec (match_op_dup 1 [(match_dup 6) (const_int 0)])
+ 	      (set (match_dup 0) (match_dup 4)))
+@@ -10737,6 +11517,7 @@
+    mvn%D4\\t%0, %2
+    mov%d4\\t%0, %1\;mvn%D4\\t%0, %2"
+   [(set_attr "conds" "use")
++   (set_attr "insn" "mvn")
+    (set_attr "length" "4,8")]
+ )
+ 
+@@ -10871,6 +11652,24 @@
+   "
+ )
+ 
++(define_insn "align_16"
++  [(unspec_volatile [(const_int 0)] VUNSPEC_ALIGN16)]
++  "TARGET_EITHER"
++  "*
++  assemble_align (128);
++  return \"\";
++  "
++)
++
++(define_insn "align_32"
++  [(unspec_volatile [(const_int 0)] VUNSPEC_ALIGN32)]
++  "TARGET_EITHER"
++  "*
++  assemble_align (256);
++  return \"\";
++  "
++)
++
+ (define_insn "consttable_end"
+   [(unspec_volatile [(const_int 0)] VUNSPEC_POOL_END)]
+   "TARGET_EITHER"
+@@ -10897,6 +11696,7 @@
+   "TARGET_THUMB1"
+   "*
+   making_const_table = TRUE;
++  gcc_assert (GET_MODE_CLASS (GET_MODE (operands[0])) != MODE_FLOAT);
+   assemble_integer (operands[0], 2, BITS_PER_WORD, 1);
+   assemble_zeros (2);
+   return \"\";
+@@ -10909,19 +11709,30 @@
+   "TARGET_EITHER"
+   "*
+   {
++    rtx x = operands[0];
+     making_const_table = TRUE;
+-    switch (GET_MODE_CLASS (GET_MODE (operands[0])))
++    switch (GET_MODE_CLASS (GET_MODE (x)))
+       {
+       case MODE_FLOAT:
+-      {
+-        REAL_VALUE_TYPE r;
+-        REAL_VALUE_FROM_CONST_DOUBLE (r, operands[0]);
+-        assemble_real (r, GET_MODE (operands[0]), BITS_PER_WORD);
+-        break;
+-      }
++        if (GET_MODE (x) == HFmode)
++	  arm_emit_fp16_const (x);
++	else
++ 	  {
++	    REAL_VALUE_TYPE r;
++	    REAL_VALUE_FROM_CONST_DOUBLE (r, x);
++	    assemble_real (r, GET_MODE (x), BITS_PER_WORD);
++	  }
++	break;
+       default:
+-        assemble_integer (operands[0], 4, BITS_PER_WORD, 1);
+-	mark_symbol_refs_as_used (operands[0]);
++	/* XXX: Sometimes gcc does something really dumb and ends up with
++	   a HIGH in a constant pool entry, usually because it's trying to
++	   load into a VFP register.  We know this will always be used in
++	   combination with a LO_SUM which ignores the high bits, so just
++	   strip off the HIGH.  */
++	if (GET_CODE (x) == HIGH)
++	  x = XEXP (x, 0);
++        assemble_integer (x, 4, BITS_PER_WORD, 1);
++	mark_symbol_refs_as_used (x);
+         break;
+       }
+     return \"\";
+@@ -11015,6 +11826,28 @@
+   [(set_attr "predicable" "yes")
+    (set_attr "insn" "clz")])
+ 
++(define_insn "rbitsi2"
++  [(set (match_operand:SI 0 "s_register_operand" "=r")
++	(unspec:SI [(match_operand:SI 1 "s_register_operand" "r")] UNSPEC_RBIT))]
++  "TARGET_32BIT && arm_arch_thumb2"
++  "rbit%?\\t%0, %1"
++  [(set_attr "predicable" "yes")
++   (set_attr "insn" "clz")])
++
++(define_expand "ctzsi2"
++ [(set (match_operand:SI           0 "s_register_operand" "")
++       (ctz:SI (match_operand:SI  1 "s_register_operand" "")))]
++  "TARGET_32BIT && arm_arch_thumb2"
++  "
++   {
++     rtx tmp = gen_reg_rtx (SImode); 
++     emit_insn (gen_rbitsi2 (tmp, operands[1]));
++     emit_insn (gen_clzsi2 (operands[0], tmp));
++   }
++   DONE;
++  "
++)
++
+ ;; V5E instructions.
+ 
+ (define_insn "prefetch"
+@@ -11024,13 +11857,15 @@
+   "TARGET_32BIT && arm_arch5e"
+   "pld\\t%a0")
+ 
+-;; General predication pattern
++;; General predication pattern.
++;; Conditional branches are available as both arm_cond_branch and
++;; predicated arm_jump, so it doesn't matter if we disable the latter.
+ 
+ (define_cond_exec
+   [(match_operator 0 "arm_comparison_operator"
+     [(match_operand 1 "cc_register" "")
+      (const_int 0)])]
+-  "TARGET_32BIT"
++  "TARGET_32BIT && !TARGET_NO_SINGLE_COND_EXEC"
+   ""
+ )
+ 
+--- a/src/gcc/config/arm/arm.opt
++++ b/src/gcc/config/arm/arm.opt
+@@ -78,6 +78,10 @@
+ mfp=
+ Target RejectNegative Joined Undocumented Var(target_fpe_name)
+ 
++mfp16-format=
++Target RejectNegative Joined Var(target_fp16_format_name)
++Specify the __fp16 floating-point format
++
+ ;; Now ignored.
+ mfpe
+ Target RejectNegative Mask(FPE) Undocumented
+@@ -93,6 +97,10 @@
+ Target RejectNegative
+ Alias for -mfloat-abi=hard
+ 
++mfix-janus-2cc
++Target Report Mask(FIX_JANUS)
++Work around hardware errata for Avalent Janus 2CC cores.
++
+ mlittle-endian
+ Target Report RejectNegative InverseMask(BIG_END)
+ Assume target CPU is configured as little endian
+@@ -101,6 +109,10 @@
+ Target Report Mask(LONG_CALLS)
+ Generate call insns as indirect calls, if necessary
+ 
++mmarvell-div
++Target Report Mask(MARVELL_DIV)
++Generate hardware integer division instructions supported by some Marvell cores.
++
+ mpic-register=
+ Target RejectNegative Joined Var(arm_pic_register_string)
+ Specify the register to be used for PIC addressing
+@@ -157,6 +169,10 @@
+ Target Report Mask(NEON_VECTORIZE_QUAD)
+ Use Neon quad-word (rather than double-word) registers for vectorization
+ 
++mlow-irq-latency
++Target Report Var(low_irq_latency)
++Try to reduce interrupt latency of the generated code
++
+ mword-relocations
+ Target Report Var(target_word_relocations) Init(TARGET_DEFAULT_WORD_RELOCATIONS)
+ Only generate absolute relocations on word sized values.
+--- a/src/gcc/config/arm/arm_neon.h
++++ b/src/gcc/config/arm/arm_neon.h
+@@ -36,7 +36,11 @@
+ extern "C" {
+ #endif
+ 
++#if defined (__vxworks) && defined (_WRS_KERNEL)
++#include <vxWorks.h>
++#else
+ #include <stdint.h>
++#endif
+ 
+ typedef __builtin_neon_qi int8x8_t	__attribute__ ((__vector_size__ (8)));
+ typedef __builtin_neon_hi int16x4_t	__attribute__ ((__vector_size__ (8)));
+@@ -61,7 +65,7 @@
+ typedef __builtin_neon_usi uint32x4_t	__attribute__ ((__vector_size__ (16)));
+ typedef __builtin_neon_udi uint64x2_t	__attribute__ ((__vector_size__ (16)));
+ 
+-typedef __builtin_neon_sf float32_t;
++typedef float float32_t;
+ typedef __builtin_neon_poly8 poly8_t;
+ typedef __builtin_neon_poly16 poly16_t;
+ 
+@@ -5085,7 +5089,7 @@
+ __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+ vset_lane_f32 (float32_t __a, float32x2_t __b, const int __c)
+ {
+-  return (float32x2_t)__builtin_neon_vset_lanev2sf (__a, __b, __c);
++  return (float32x2_t)__builtin_neon_vset_lanev2sf ((__builtin_neon_sf) __a, __b, __c);
+ }
+ 
+ __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+@@ -5151,7 +5155,7 @@
+ __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+ vsetq_lane_f32 (float32_t __a, float32x4_t __b, const int __c)
+ {
+-  return (float32x4_t)__builtin_neon_vset_lanev4sf (__a, __b, __c);
++  return (float32x4_t)__builtin_neon_vset_lanev4sf ((__builtin_neon_sf) __a, __b, __c);
+ }
+ 
+ __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+@@ -5283,7 +5287,7 @@
+ __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+ vdup_n_f32 (float32_t __a)
+ {
+-  return (float32x2_t)__builtin_neon_vdup_nv2sf (__a);
++  return (float32x2_t)__builtin_neon_vdup_nv2sf ((__builtin_neon_sf) __a);
+ }
+ 
+ __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+@@ -5349,7 +5353,7 @@
+ __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+ vdupq_n_f32 (float32_t __a)
+ {
+-  return (float32x4_t)__builtin_neon_vdup_nv4sf (__a);
++  return (float32x4_t)__builtin_neon_vdup_nv4sf ((__builtin_neon_sf) __a);
+ }
+ 
+ __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+@@ -5415,7 +5419,7 @@
+ __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+ vmov_n_f32 (float32_t __a)
+ {
+-  return (float32x2_t)__builtin_neon_vdup_nv2sf (__a);
++  return (float32x2_t)__builtin_neon_vdup_nv2sf ((__builtin_neon_sf) __a);
+ }
+ 
+ __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+@@ -5481,7 +5485,7 @@
+ __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+ vmovq_n_f32 (float32_t __a)
+ {
+-  return (float32x4_t)__builtin_neon_vdup_nv4sf (__a);
++  return (float32x4_t)__builtin_neon_vdup_nv4sf ((__builtin_neon_sf) __a);
+ }
+ 
+ __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+@@ -6591,7 +6595,7 @@
+ __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+ vmul_n_f32 (float32x2_t __a, float32_t __b)
+ {
+-  return (float32x2_t)__builtin_neon_vmul_nv2sf (__a, __b, 3);
++  return (float32x2_t)__builtin_neon_vmul_nv2sf (__a, (__builtin_neon_sf) __b, 3);
+ }
+ 
+ __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+@@ -6621,7 +6625,7 @@
+ __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+ vmulq_n_f32 (float32x4_t __a, float32_t __b)
+ {
+-  return (float32x4_t)__builtin_neon_vmul_nv4sf (__a, __b, 3);
++  return (float32x4_t)__builtin_neon_vmul_nv4sf (__a, (__builtin_neon_sf) __b, 3);
+ }
+ 
+ __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+@@ -6735,7 +6739,7 @@
+ __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+ vmla_n_f32 (float32x2_t __a, float32x2_t __b, float32_t __c)
+ {
+-  return (float32x2_t)__builtin_neon_vmla_nv2sf (__a, __b, __c, 3);
++  return (float32x2_t)__builtin_neon_vmla_nv2sf (__a, __b, (__builtin_neon_sf) __c, 3);
+ }
+ 
+ __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+@@ -6765,7 +6769,7 @@
+ __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+ vmlaq_n_f32 (float32x4_t __a, float32x4_t __b, float32_t __c)
+ {
+-  return (float32x4_t)__builtin_neon_vmla_nv4sf (__a, __b, __c, 3);
++  return (float32x4_t)__builtin_neon_vmla_nv4sf (__a, __b, (__builtin_neon_sf) __c, 3);
+ }
+ 
+ __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+@@ -6831,7 +6835,7 @@
+ __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+ vmls_n_f32 (float32x2_t __a, float32x2_t __b, float32_t __c)
+ {
+-  return (float32x2_t)__builtin_neon_vmls_nv2sf (__a, __b, __c, 3);
++  return (float32x2_t)__builtin_neon_vmls_nv2sf (__a, __b, (__builtin_neon_sf) __c, 3);
+ }
+ 
+ __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+@@ -6861,7 +6865,7 @@
+ __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+ vmlsq_n_f32 (float32x4_t __a, float32x4_t __b, float32_t __c)
+ {
+-  return (float32x4_t)__builtin_neon_vmls_nv4sf (__a, __b, __c, 3);
++  return (float32x4_t)__builtin_neon_vmls_nv4sf (__a, __b, (__builtin_neon_sf) __c, 3);
+ }
+ 
+ __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+@@ -7851,7 +7855,7 @@
+ __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+ vld1_f32 (const float32_t * __a)
+ {
+-  return (float32x2_t)__builtin_neon_vld1v2sf (__a);
++  return (float32x2_t)__builtin_neon_vld1v2sf ((const __builtin_neon_sf *) __a);
+ }
+ 
+ __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+@@ -7917,7 +7921,7 @@
+ __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+ vld1q_f32 (const float32_t * __a)
+ {
+-  return (float32x4_t)__builtin_neon_vld1v4sf (__a);
++  return (float32x4_t)__builtin_neon_vld1v4sf ((const __builtin_neon_sf *) __a);
+ }
+ 
+ __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+@@ -7977,7 +7981,7 @@
+ __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+ vld1_lane_f32 (const float32_t * __a, float32x2_t __b, const int __c)
+ {
+-  return (float32x2_t)__builtin_neon_vld1_lanev2sf (__a, __b, __c);
++  return (float32x2_t)__builtin_neon_vld1_lanev2sf ((const __builtin_neon_sf *) __a, __b, __c);
+ }
+ 
+ __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+@@ -8043,7 +8047,7 @@
+ __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+ vld1q_lane_f32 (const float32_t * __a, float32x4_t __b, const int __c)
+ {
+-  return (float32x4_t)__builtin_neon_vld1_lanev4sf (__a, __b, __c);
++  return (float32x4_t)__builtin_neon_vld1_lanev4sf ((const __builtin_neon_sf *) __a, __b, __c);
+ }
+ 
+ __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+@@ -8109,7 +8113,7 @@
+ __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
+ vld1_dup_f32 (const float32_t * __a)
+ {
+-  return (float32x2_t)__builtin_neon_vld1_dupv2sf (__a);
++  return (float32x2_t)__builtin_neon_vld1_dupv2sf ((const __builtin_neon_sf *) __a);
+ }
+ 
+ __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+@@ -8175,7 +8179,7 @@
+ __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
+ vld1q_dup_f32 (const float32_t * __a)
+ {
+-  return (float32x4_t)__builtin_neon_vld1_dupv4sf (__a);
++  return (float32x4_t)__builtin_neon_vld1_dupv4sf ((const __builtin_neon_sf *) __a);
+ }
+ 
+ __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+@@ -8247,7 +8251,7 @@
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+ vst1_f32 (float32_t * __a, float32x2_t __b)
+ {
+-  __builtin_neon_vst1v2sf (__a, __b);
++  __builtin_neon_vst1v2sf ((__builtin_neon_sf *) __a, __b);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -8313,7 +8317,7 @@
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+ vst1q_f32 (float32_t * __a, float32x4_t __b)
+ {
+-  __builtin_neon_vst1v4sf (__a, __b);
++  __builtin_neon_vst1v4sf ((__builtin_neon_sf *) __a, __b);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -8373,7 +8377,7 @@
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+ vst1_lane_f32 (float32_t * __a, float32x2_t __b, const int __c)
+ {
+-  __builtin_neon_vst1_lanev2sf (__a, __b, __c);
++  __builtin_neon_vst1_lanev2sf ((__builtin_neon_sf *) __a, __b, __c);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -8439,7 +8443,7 @@
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+ vst1q_lane_f32 (float32_t * __a, float32x4_t __b, const int __c)
+ {
+-  __builtin_neon_vst1_lanev4sf (__a, __b, __c);
++  __builtin_neon_vst1_lanev4sf ((__builtin_neon_sf *) __a, __b, __c);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -8512,7 +8516,7 @@
+ vld2_f32 (const float32_t * __a)
+ {
+   union { float32x2x2_t __i; __builtin_neon_ti __o; } __rv;
+-  __rv.__o = __builtin_neon_vld2v2sf (__a);
++  __rv.__o = __builtin_neon_vld2v2sf ((const __builtin_neon_sf *) __a);
+   return __rv.__i;
+ }
+ 
+@@ -8600,7 +8604,7 @@
+ vld2q_f32 (const float32_t * __a)
+ {
+   union { float32x4x2_t __i; __builtin_neon_oi __o; } __rv;
+-  __rv.__o = __builtin_neon_vld2v4sf (__a);
++  __rv.__o = __builtin_neon_vld2v4sf ((const __builtin_neon_sf *) __a);
+   return __rv.__i;
+ }
+ 
+@@ -8676,7 +8680,7 @@
+ {
+   union { float32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+   union { float32x2x2_t __i; __builtin_neon_ti __o; } __rv;
+-  __rv.__o = __builtin_neon_vld2_lanev2sf (__a, __bu.__o, __c);
++  __rv.__o = __builtin_neon_vld2_lanev2sf ((const __builtin_neon_sf *) __a, __bu.__o, __c);
+   return __rv.__i;
+ }
+ 
+@@ -8748,7 +8752,7 @@
+ {
+   union { float32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+   union { float32x4x2_t __i; __builtin_neon_oi __o; } __rv;
+-  __rv.__o = __builtin_neon_vld2_lanev4sf (__a, __bu.__o, __c);
++  __rv.__o = __builtin_neon_vld2_lanev4sf ((const __builtin_neon_sf *) __a, __bu.__o, __c);
+   return __rv.__i;
+ }
+ 
+@@ -8807,7 +8811,7 @@
+ vld2_dup_f32 (const float32_t * __a)
+ {
+   union { float32x2x2_t __i; __builtin_neon_ti __o; } __rv;
+-  __rv.__o = __builtin_neon_vld2_dupv2sf (__a);
++  __rv.__o = __builtin_neon_vld2_dupv2sf ((const __builtin_neon_sf *) __a);
+   return __rv.__i;
+ }
+ 
+@@ -8892,7 +8896,7 @@
+ vst2_f32 (float32_t * __a, float32x2x2_t __b)
+ {
+   union { float32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+-  __builtin_neon_vst2v2sf (__a, __bu.__o);
++  __builtin_neon_vst2v2sf ((__builtin_neon_sf *) __a, __bu.__o);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -8969,7 +8973,7 @@
+ vst2q_f32 (float32_t * __a, float32x4x2_t __b)
+ {
+   union { float32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+-  __builtin_neon_vst2v4sf (__a, __bu.__o);
++  __builtin_neon_vst2v4sf ((__builtin_neon_sf *) __a, __bu.__o);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -9032,7 +9036,7 @@
+ vst2_lane_f32 (float32_t * __a, float32x2x2_t __b, const int __c)
+ {
+   union { float32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b };
+-  __builtin_neon_vst2_lanev2sf (__a, __bu.__o, __c);
++  __builtin_neon_vst2_lanev2sf ((__builtin_neon_sf *) __a, __bu.__o, __c);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -9088,7 +9092,7 @@
+ vst2q_lane_f32 (float32_t * __a, float32x4x2_t __b, const int __c)
+ {
+   union { float32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b };
+-  __builtin_neon_vst2_lanev4sf (__a, __bu.__o, __c);
++  __builtin_neon_vst2_lanev4sf ((__builtin_neon_sf *) __a, __bu.__o, __c);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -9140,7 +9144,7 @@
+ vld3_f32 (const float32_t * __a)
+ {
+   union { float32x2x3_t __i; __builtin_neon_ei __o; } __rv;
+-  __rv.__o = __builtin_neon_vld3v2sf (__a);
++  __rv.__o = __builtin_neon_vld3v2sf ((const __builtin_neon_sf *) __a);
+   return __rv.__i;
+ }
+ 
+@@ -9228,7 +9232,7 @@
+ vld3q_f32 (const float32_t * __a)
+ {
+   union { float32x4x3_t __i; __builtin_neon_ci __o; } __rv;
+-  __rv.__o = __builtin_neon_vld3v4sf (__a);
++  __rv.__o = __builtin_neon_vld3v4sf ((const __builtin_neon_sf *) __a);
+   return __rv.__i;
+ }
+ 
+@@ -9304,7 +9308,7 @@
+ {
+   union { float32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+   union { float32x2x3_t __i; __builtin_neon_ei __o; } __rv;
+-  __rv.__o = __builtin_neon_vld3_lanev2sf (__a, __bu.__o, __c);
++  __rv.__o = __builtin_neon_vld3_lanev2sf ((const __builtin_neon_sf *) __a, __bu.__o, __c);
+   return __rv.__i;
+ }
+ 
+@@ -9376,7 +9380,7 @@
+ {
+   union { float32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+   union { float32x4x3_t __i; __builtin_neon_ci __o; } __rv;
+-  __rv.__o = __builtin_neon_vld3_lanev4sf (__a, __bu.__o, __c);
++  __rv.__o = __builtin_neon_vld3_lanev4sf ((const __builtin_neon_sf *) __a, __bu.__o, __c);
+   return __rv.__i;
+ }
+ 
+@@ -9435,7 +9439,7 @@
+ vld3_dup_f32 (const float32_t * __a)
+ {
+   union { float32x2x3_t __i; __builtin_neon_ei __o; } __rv;
+-  __rv.__o = __builtin_neon_vld3_dupv2sf (__a);
++  __rv.__o = __builtin_neon_vld3_dupv2sf ((const __builtin_neon_sf *) __a);
+   return __rv.__i;
+ }
+ 
+@@ -9520,7 +9524,7 @@
+ vst3_f32 (float32_t * __a, float32x2x3_t __b)
+ {
+   union { float32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+-  __builtin_neon_vst3v2sf (__a, __bu.__o);
++  __builtin_neon_vst3v2sf ((__builtin_neon_sf *) __a, __bu.__o);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -9597,7 +9601,7 @@
+ vst3q_f32 (float32_t * __a, float32x4x3_t __b)
+ {
+   union { float32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+-  __builtin_neon_vst3v4sf (__a, __bu.__o);
++  __builtin_neon_vst3v4sf ((__builtin_neon_sf *) __a, __bu.__o);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -9660,7 +9664,7 @@
+ vst3_lane_f32 (float32_t * __a, float32x2x3_t __b, const int __c)
+ {
+   union { float32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b };
+-  __builtin_neon_vst3_lanev2sf (__a, __bu.__o, __c);
++  __builtin_neon_vst3_lanev2sf ((__builtin_neon_sf *) __a, __bu.__o, __c);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -9716,7 +9720,7 @@
+ vst3q_lane_f32 (float32_t * __a, float32x4x3_t __b, const int __c)
+ {
+   union { float32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b };
+-  __builtin_neon_vst3_lanev4sf (__a, __bu.__o, __c);
++  __builtin_neon_vst3_lanev4sf ((__builtin_neon_sf *) __a, __bu.__o, __c);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -9768,7 +9772,7 @@
+ vld4_f32 (const float32_t * __a)
+ {
+   union { float32x2x4_t __i; __builtin_neon_oi __o; } __rv;
+-  __rv.__o = __builtin_neon_vld4v2sf (__a);
++  __rv.__o = __builtin_neon_vld4v2sf ((const __builtin_neon_sf *) __a);
+   return __rv.__i;
+ }
+ 
+@@ -9856,7 +9860,7 @@
+ vld4q_f32 (const float32_t * __a)
+ {
+   union { float32x4x4_t __i; __builtin_neon_xi __o; } __rv;
+-  __rv.__o = __builtin_neon_vld4v4sf (__a);
++  __rv.__o = __builtin_neon_vld4v4sf ((const __builtin_neon_sf *) __a);
+   return __rv.__i;
+ }
+ 
+@@ -9932,7 +9936,7 @@
+ {
+   union { float32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+   union { float32x2x4_t __i; __builtin_neon_oi __o; } __rv;
+-  __rv.__o = __builtin_neon_vld4_lanev2sf (__a, __bu.__o, __c);
++  __rv.__o = __builtin_neon_vld4_lanev2sf ((const __builtin_neon_sf *) __a, __bu.__o, __c);
+   return __rv.__i;
+ }
+ 
+@@ -10004,7 +10008,7 @@
+ {
+   union { float32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+   union { float32x4x4_t __i; __builtin_neon_xi __o; } __rv;
+-  __rv.__o = __builtin_neon_vld4_lanev4sf (__a, __bu.__o, __c);
++  __rv.__o = __builtin_neon_vld4_lanev4sf ((const __builtin_neon_sf *) __a, __bu.__o, __c);
+   return __rv.__i;
+ }
+ 
+@@ -10063,7 +10067,7 @@
+ vld4_dup_f32 (const float32_t * __a)
+ {
+   union { float32x2x4_t __i; __builtin_neon_oi __o; } __rv;
+-  __rv.__o = __builtin_neon_vld4_dupv2sf (__a);
++  __rv.__o = __builtin_neon_vld4_dupv2sf ((const __builtin_neon_sf *) __a);
+   return __rv.__i;
+ }
+ 
+@@ -10148,7 +10152,7 @@
+ vst4_f32 (float32_t * __a, float32x2x4_t __b)
+ {
+   union { float32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+-  __builtin_neon_vst4v2sf (__a, __bu.__o);
++  __builtin_neon_vst4v2sf ((__builtin_neon_sf *) __a, __bu.__o);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -10225,7 +10229,7 @@
+ vst4q_f32 (float32_t * __a, float32x4x4_t __b)
+ {
+   union { float32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+-  __builtin_neon_vst4v4sf (__a, __bu.__o);
++  __builtin_neon_vst4v4sf ((__builtin_neon_sf *) __a, __bu.__o);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -10288,7 +10292,7 @@
+ vst4_lane_f32 (float32_t * __a, float32x2x4_t __b, const int __c)
+ {
+   union { float32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b };
+-  __builtin_neon_vst4_lanev2sf (__a, __bu.__o, __c);
++  __builtin_neon_vst4_lanev2sf ((__builtin_neon_sf *) __a, __bu.__o, __c);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+@@ -10344,7 +10348,7 @@
+ vst4q_lane_f32 (float32_t * __a, float32x4x4_t __b, const int __c)
+ {
+   union { float32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b };
+-  __builtin_neon_vst4_lanev4sf (__a, __bu.__o, __c);
++  __builtin_neon_vst4_lanev4sf ((__builtin_neon_sf *) __a, __bu.__o, __c);
+ }
+ 
+ __extension__ static __inline void __attribute__ ((__always_inline__))
+--- a/src/gcc/config/arm/bpabi-v6m.S
++++ b/src/gcc/config/arm/bpabi-v6m.S
+@@ -69,9 +69,52 @@
+ 
+ #endif /* L_aeabi_ulcmp */
+ 
++.macro test_div_by_zero signed
++	cmp	yyh, #0
++	bne	7f
++	cmp	yyl, #0
++	bne	7f
++	cmp	xxh, #0
++	bne	2f
++	cmp	xxl, #0
++2:
++	.ifc	\signed, unsigned
++	beq	3f
++	mov	xxh, #0
++	mvn	xxh, xxh		@ 0xffffffff
++	mov	xxl, xxh
++3:
++	.else
++	beq	5f
++	blt	6f
++	mov	xxl, #0
++	mvn	xxl, xxl		@ 0xffffffff
++	lsr	xxh, xxl, #1		@ 0x7fffffff
++	b	5f
++6:	mov	xxh, #0x80
++	lsl	xxh, xxh, #24		@ 0x80000000
++	mov	xxl, #0
++5:
++	.endif
++	@ tailcalls are tricky on v6-m.
++	push	{r0, r1, r2}
++	ldr	r0, 1f
++	adr	r1, 1f
++	add	r0, r1
++	str	r0, [sp, #8]
++	@ We know we are not on armv4t, so pop pc is safe.
++	pop	{r0, r1, pc}
++	.align	2
++1:
++	.word	__aeabi_ldiv0 - 1b
++7:
++.endm
++
+ #ifdef L_aeabi_ldivmod
+ 
+ FUNC_START aeabi_ldivmod
++	test_div_by_zero signed
++
+ 	push {r0, r1}
+ 	mov r0, sp
+ 	push {r0, lr}
+@@ -89,6 +132,8 @@
+ #ifdef L_aeabi_uldivmod
+ 
+ FUNC_START aeabi_uldivmod
++	test_div_by_zero unsigned
++
+ 	push {r0, r1}
+ 	mov r0, sp
+ 	push {r0, lr}
+--- a/src/gcc/config/arm/bpabi.S
++++ b/src/gcc/config/arm/bpabi.S
+@@ -64,20 +64,69 @@
+ 
+ #endif /* L_aeabi_ulcmp */
+ 
++.macro test_div_by_zero signed
++/* Tail-call to divide-by-zero handlers which may be overridden by the user,
++   so unwinding works properly.  */
++#if defined(__thumb2__)
++	cbnz	yyh, 1f
++	cbnz	yyl, 1f
++	cmp	xxh, #0
++	do_it	eq
++	cmpeq	xxl, #0
++	.ifc \signed, unsigned
++	beq	2f
++	mov	xxh, #0xffffffff
++	mov	xxl, xxh
++2:
++	.else
++	do_it	lt, t
++	movlt	xxl, #0
++	movlt	xxh, #0x80000000
++	do_it	gt, t
++	movgt	xxh, #0x7fffffff
++	movgt	xxl, #0xffffffff
++	.endif
++	b	SYM (__aeabi_ldiv0) __PLT__
++1:
++#else
++	/* Note: Thumb-1 code calls via an ARM shim on processors which
++	   support ARM mode.  */
++	cmp	yyh, #0
++	cmpeq	yyl, #0
++	bne	2f
++	cmp	xxh, #0
++	cmpeq	xxl, #0
++	.ifc \signed, unsigned
++	movne	xxh, #0xffffffff
++	movne	xxl, #0xffffffff
++	.else
++	movlt	xxh, #0x80000000
++	movlt	xxl, #0
++	movgt	xxh, #0x7fffffff
++	movgt	xxl, #0xffffffff
++	.endif
++	b	SYM (__aeabi_ldiv0) __PLT__
++2:
++#endif
++.endm
++
+ #ifdef L_aeabi_ldivmod
+ 
+ ARM_FUNC_START aeabi_ldivmod
++	test_div_by_zero signed
++
+ 	sub sp, sp, #8
+-#if defined(__thumb2__)
++/* Low latency and Thumb-2 do_push implementations can't push sp directly.  */
++#if defined(__thumb2__) || defined(__irq_low_latency__)
+ 	mov ip, sp
+-	push {ip, lr}
++	do_push (ip, lr)
+ #else
+-	do_push {sp, lr}
++	stmfd sp!, {sp, lr}
+ #endif
+ 	bl SYM(__gnu_ldivmod_helper) __PLT__
+ 	ldr lr, [sp, #4]
+ 	add sp, sp, #8
+-	do_pop {r2, r3}
++	do_pop (r2, r3)
+ 	RET
+ 	
+ #endif /* L_aeabi_ldivmod */
+@@ -85,17 +134,20 @@
+ #ifdef L_aeabi_uldivmod
+ 
+ ARM_FUNC_START aeabi_uldivmod
++	test_div_by_zero unsigned
++
+ 	sub sp, sp, #8
+-#if defined(__thumb2__)
++/* Low latency and Thumb-2 do_push implementations can't push sp directly.  */
++#if defined(__thumb2__) || defined(__irq_low_latency__)
+ 	mov ip, sp
+-	push {ip, lr}
++	do_push (ip, lr)
+ #else
+-	do_push {sp, lr}
++	stmfd sp!, {sp, lr}
+ #endif
+ 	bl SYM(__gnu_uldivmod_helper) __PLT__
+ 	ldr lr, [sp, #4]
+ 	add sp, sp, #8
+-	do_pop {r2, r3}
++	do_pop (r2, r3)
+ 	RET
+ 	
+ #endif /* L_aeabi_divmod */
+--- a/src/gcc/config/arm/bpabi.h
++++ b/src/gcc/config/arm/bpabi.h
+@@ -26,11 +26,12 @@
+ #define TARGET_BPABI (TARGET_AAPCS_BASED)
+ 
+ /* BPABI targets use EABI frame unwinding tables.  */
++#define DWARF2_UNWIND_INFO 0
+ #define TARGET_UNWIND_INFO 1
+ 
+ /* Section 4.1 of the AAPCS requires the use of VFP format.  */
+ #undef  FPUTYPE_DEFAULT
+-#define FPUTYPE_DEFAULT FPUTYPE_VFP
++#define FPUTYPE_DEFAULT "vfp"
+ 
+ /* TARGET_BIG_ENDIAN_DEFAULT is set in
+    config.gcc for big endian configurations.  */
+@@ -53,6 +54,8 @@
+ 
+ #define TARGET_FIX_V4BX_SPEC " %{mcpu=arm8|mcpu=arm810|mcpu=strongarm*|march=armv4:--fix-v4bx}"
+ 
++#define BE8_LINK_SPEC " %{mbig-endian:%{march=armv7-a|mcpu=cortex-a5|mcpu=cortex-a8|mcpu=cortex-a9:%{!r:--be8}}}"
++
+ /* Tell the assembler to build BPABI binaries.  */
+ #undef  SUBTARGET_EXTRA_ASM_SPEC
+ #define SUBTARGET_EXTRA_ASM_SPEC "%{mabi=apcs-gnu|mabi=atpcs:-meabi=gnu;:-meabi=5}" TARGET_FIX_V4BX_SPEC
+@@ -65,7 +68,7 @@
+ #define BPABI_LINK_SPEC \
+   "%{mbig-endian:-EB} %{mlittle-endian:-EL} "		\
+   "%{static:-Bstatic} %{shared:-shared} %{symbolic:-Bsymbolic} "	\
+-  "-X" SUBTARGET_EXTRA_LINK_SPEC TARGET_FIX_V4BX_SPEC
++  "-X" SUBTARGET_EXTRA_LINK_SPEC TARGET_FIX_V4BX_SPEC BE8_LINK_SPEC
+ 
+ #undef  LINK_SPEC
+ #define LINK_SPEC BPABI_LINK_SPEC
+@@ -90,16 +93,22 @@
+ #define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (muldi3, lmul)
+ #endif
+ #ifdef L_fixdfdi
+-#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixdfdi, d2lz)
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixdfdi, d2lz) \
++  extern DWtype __fixdfdi (DFtype) __attribute__((pcs("aapcs"))); \
++  extern UDWtype __fixunsdfdi (DFtype) __asm__("__aeabi_d2ulz") __attribute__((pcs("aapcs")));
+ #endif
+ #ifdef L_fixunsdfdi
+-#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunsdfdi, d2ulz)
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunsdfdi, d2ulz) \
++  extern UDWtype __fixunsdfdi (DFtype) __attribute__((pcs("aapcs")));
+ #endif
+ #ifdef L_fixsfdi
+-#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixsfdi, f2lz)
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixsfdi, f2lz) \
++  extern DWtype __fixsfdi (SFtype) __attribute__((pcs("aapcs"))); \
++  extern UDWtype __fixunssfdi (SFtype) __asm__("__aeabi_f2ulz") __attribute__((pcs("aapcs")));
+ #endif
+ #ifdef L_fixunssfdi
+-#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunssfdi, f2ulz)
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunssfdi, f2ulz) \
++  extern UDWtype __fixunssfdi (SFtype) __attribute__((pcs("aapcs")));
+ #endif
+ #ifdef L_floatdidf
+ #define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatdidf, l2d)
+--- a/src/gcc/config/arm/constraints.md
++++ b/src/gcc/config/arm/constraints.md
+@@ -25,15 +25,17 @@
+ ;; In ARM state, 'l' is an alias for 'r'
+ 
+ ;; The following normal constraints have been used:
+-;; in ARM/Thumb-2 state: G, H, I, J, K, L, M
++;; in ARM/Thumb-2 state: G, H, I, j, J, K, L, M
+ ;; in Thumb-1 state: I, J, K, L, M, N, O
+ 
+ ;; The following multi-letter normal constraints have been used:
+-;; in ARM/Thumb-2 state: Da, Db, Dc, Dn, Dl, DL, Dv
++;; in ARM/Thumb-2 state: D0, Da, Db, Dc, Di, Dn, Dl, DL, Dv, Dy
++;; in Thumb-1 state: Pa, Pb
++;; in Thumb-2 state: Ps, Pt, Pu
+ ;; in Thumb-2 state: Ps, Pt
+ 
+ ;; The following memory constraints have been used:
+-;; in ARM/Thumb-2 state: Q, Ut, Uv, Uy, Un, Us
++;; in ARM/Thumb-2 state: Q, Ut, Uv, Uy, Un, Um, Us
+ ;; in ARM state: Uq
+ 
+ 
+@@ -66,6 +68,13 @@
+ (define_register_constraint "h" "TARGET_THUMB ? HI_REGS : NO_REGS"
+  "In Thumb state the core registers @code{r8}-@code{r15}.")
+ 
++(define_constraint "j"
++ "A constant suitable for a MOVW instruction. (ARM/Thumb-2)"
++ (and (match_test "TARGET_32BIT && arm_arch_thumb2")
++      (ior (match_code "high")
++	   (and (match_code "const_int")
++                (match_test "(ival & 0xffff0000) == 0")))))
++
+ (define_register_constraint "k" "STACK_REG"
+  "@internal The stack register.")
+ 
+@@ -117,11 +126,9 @@
+ 		   : ((ival >= 0 && ival <= 1020) && ((ival & 3) == 0))")))
+ 
+ (define_constraint "N"
+- "In ARM/Thumb-2 state a constant suitable for a MOVW instruction.
+-  In Thumb-1 state a constant in the range 0-31."
++ "Thumb-1 state a constant in the range 0-31."
+  (and (match_code "const_int")
+-      (match_test "TARGET_32BIT ? arm_arch_thumb2 && ((ival & 0xffff0000) == 0)
+-				: (ival >= 0 && ival <= 31)")))
++      (match_test "!TARGET_32BIT && (ival >= 0 && ival <= 31)")))
+ 
+ (define_constraint "O"
+  "In Thumb-1 state a constant that is a multiple of 4 in the range
+@@ -130,6 +137,18 @@
+       (match_test "TARGET_THUMB1 && ival >= -508 && ival <= 508
+ 		   && ((ival & 3) == 0)")))
+ 
++(define_constraint "Pa"
++  "@internal In Thumb-1 state a constant in the range -510 to +510"
++  (and (match_code "const_int")
++       (match_test "TARGET_THUMB1 && ival >= -510 && ival <= 510
++		    && (ival > 255 || ival < -255)")))
++
++(define_constraint "Pb"
++  "@internal In Thumb-1 state a constant in the range -262 to +262"
++  (and (match_code "const_int")
++       (match_test "TARGET_THUMB1 && ival >= -262 && ival <= 262
++		    && (ival > 255 || ival < -255)")))
++
+ (define_constraint "Ps"
+   "@internal In Thumb-2 state a constant in the range -255 to +255"
+   (and (match_code "const_int")
+@@ -140,6 +159,11 @@
+   (and (match_code "const_int")
+        (match_test "TARGET_THUMB2 && ival >= -7 && ival <= 7")))
+ 
++(define_constraint "Pu"
++  "@internal In Thumb-2 state a constant in the range -255 to 0"
++  (and (match_code "const_int")
++       (match_test "TARGET_THUMB2 && ival >= -255 && ival <= 0")))
++
+ (define_constraint "G"
+  "In ARM/Thumb-2 state a valid FPA immediate constant."
+  (and (match_code "const_double")
+@@ -150,6 +174,13 @@
+  (and (match_code "const_double")
+       (match_test "TARGET_32BIT && neg_const_double_rtx_ok_for_fpa (op)")))
+ 
++(define_constraint "D0"
++ "@internal
++  In ARM/Thumb-2 state a 0.0 floating point constant which can
++  be loaded with a Neon vmov immediate instruction."
++ (and (match_code "const_double")
++      (match_test "TARGET_NEON && op == CONST0_RTX (mode)")))
++
+ (define_constraint "Da"
+  "@internal
+   In ARM/Thumb-2 state a const_int, const_double or const_vector that can
+@@ -173,6 +204,13 @@
+       (match_test "TARGET_32BIT && arm_const_double_inline_cost (op) == 4
+ 		   && !(optimize_size || arm_ld_sched)")))
+ 
++(define_constraint "Di"
++ "@internal
++  In ARM/Thumb-2 state a const_int or const_double where both the high
++  and low SImode words can be generated as immediates in 32-bit instructions."
++ (and (match_code "const_double,const_int")
++      (match_test "TARGET_32BIT && arm_const_double_by_immediates (op)")))
++
+ (define_constraint "Dn"
+  "@internal
+   In ARM/Thumb-2 state a const_vector which can be loaded with a Neon vmov
+@@ -200,10 +238,17 @@
+ (define_constraint "Dv"
+  "@internal
+   In ARM/Thumb-2 state a const_double which can be used with a VFP fconsts
+-  or fconstd instruction."
++  instruction."
+  (and (match_code "const_double")
+       (match_test "TARGET_32BIT && vfp3_const_double_rtx (op)")))
+ 
++(define_constraint "Dy"
++ "@internal
++  In ARM/Thumb-2 state a const_double which can be used with a VFP fconstd
++  instruction."
++ (and (match_code "const_double")
++      (match_test "TARGET_32BIT && TARGET_VFP_DOUBLE && vfp3_const_double_rtx (op)")))
++
+ (define_memory_constraint "Ut"
+  "@internal
+   In ARM/Thumb-2 state an address valid for loading/storing opaque structure
+@@ -225,17 +270,24 @@
+ 
+ (define_memory_constraint "Un"
+  "@internal
++  In ARM/Thumb-2 state a valid address for Neon doubleword vector
++  load/store instructions."
++ (and (match_code "mem")
++      (match_test "TARGET_32BIT && neon_vector_mem_operand (op, 0)")))
++
++(define_memory_constraint "Um"
++ "@internal
+   In ARM/Thumb-2 state a valid address for Neon element and structure
+   load/store instructions."
+  (and (match_code "mem")
+-      (match_test "TARGET_32BIT && neon_vector_mem_operand (op, FALSE)")))
++      (match_test "TARGET_32BIT && neon_vector_mem_operand (op, 2)")))
+ 
+ (define_memory_constraint "Us"
+  "@internal
+   In ARM/Thumb-2 state a valid address for non-offset loads/stores of
+   quad-word values in four ARM registers."
+  (and (match_code "mem")
+-      (match_test "TARGET_32BIT && neon_vector_mem_operand (op, TRUE)")))
++      (match_test "TARGET_32BIT && neon_vector_mem_operand (op, 1)")))
+ 
+ (define_memory_constraint "Uq"
+  "@internal
+--- a/src/gcc/config/arm/cortex-a5.md
++++ b/src/gcc/config/arm/cortex-a5.md
+@@ -0,0 +1,310 @@
++;; ARM Cortex-A5 pipeline description
++;; Copyright (C) 2010 Free Software Foundation, Inc.
++;; Contributed by CodeSourcery.
++;;
++;; This file is part of GCC.
++;;
++;; GCC is free software; you can redistribute it and/or modify it
++;; under the terms of the GNU General Public License as published by
++;; the Free Software Foundation; either version 3, or (at your option)
++;; any later version.
++;;
++;; GCC is distributed in the hope that it will be useful, but
++;; WITHOUT ANY WARRANTY; without even the implied warranty of
++;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++;; General Public License for more details.
++;;
++;; You should have received a copy of the GNU General Public License
++;; along with GCC; see the file COPYING3.  If not see
++;; <http://www.gnu.org/licenses/>.
++
++(define_automaton "cortex_a5")
++
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++;; Functional units.
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++
++;; The integer (ALU) pipeline.  There are five DPU pipeline stages. However the
++;; decode/issue stages operate the same for all instructions, so do not model
++;; them.  We only need to model the first execute stage because instructions
++;; always advance one stage per cycle in order. Only branch instructions may
++;; dual-issue, so a single unit  covers all of the LS, ALU, MAC and FPU
++;; pipelines.
++
++(define_cpu_unit "cortex_a5_ex1" "cortex_a5")
++
++;; The branch pipeline.  Branches can dual-issue with other instructions
++;; (except when those instructions take multiple cycles to issue).
++
++(define_cpu_unit "cortex_a5_branch" "cortex_a5")
++
++;; Pseudo-unit for blocking the multiply pipeline when a double-precision
++;; multiply is in progress.
++
++(define_cpu_unit "cortex_a5_fpmul_pipe" "cortex_a5")
++
++;; The floating-point add pipeline (ex1/f1 stage), used to model the usage
++;; of the add pipeline by fmac instructions, etc.
++
++(define_cpu_unit "cortex_a5_fpadd_pipe" "cortex_a5")
++
++;; Floating-point div/sqrt (long latency, out-of-order completion).
++
++(define_cpu_unit "cortex_a5_fp_div_sqrt" "cortex_a5")
++
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++;; ALU instructions.
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++
++(define_insn_reservation "cortex_a5_alu" 2
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "alu"))
++  "cortex_a5_ex1")
++
++(define_insn_reservation "cortex_a5_alu_shift" 2
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "alu_shift,alu_shift_reg"))
++  "cortex_a5_ex1")
++
++;; Forwarding path for unshifted operands.
++
++(define_bypass 1 "cortex_a5_alu,cortex_a5_alu_shift"
++  "cortex_a5_alu")
++
++(define_bypass 1 "cortex_a5_alu,cortex_a5_alu_shift"
++  "cortex_a5_alu_shift"
++  "arm_no_early_alu_shift_dep")
++
++;; The multiplier pipeline can forward results from wr stage only (so I don't
++;; think there's any need to specify bypasses).
++
++(define_insn_reservation "cortex_a5_mul" 2
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "mult"))
++  "cortex_a5_ex1")
++
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++;; Load/store instructions.
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++
++;; Address-generation happens in the issue stage, which is one stage behind
++;; the ex1 stage (the first stage we care about for scheduling purposes). The
++;; dc1 stage is parallel with ex1, dc2 with ex2 and rot with wr.
++
++;; FIXME: These might not be entirely accurate for load2, load3, load4. I think
++;; they make sense since there's a 32-bit interface between the DPU and the DCU,
++;; so we can't load more than that per cycle.  The store2, store3, store4
++;; reservations are similarly guessed.
++
++(define_insn_reservation "cortex_a5_load1" 2
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "load_byte,load1"))
++  "cortex_a5_ex1")
++
++(define_insn_reservation "cortex_a5_store1" 0
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "store1"))
++  "cortex_a5_ex1")
++
++(define_insn_reservation "cortex_a5_load2" 3
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "load2"))
++  "cortex_a5_ex1+cortex_a5_branch, cortex_a5_ex1")
++
++(define_insn_reservation "cortex_a5_store2" 0
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "store2"))
++  "cortex_a5_ex1+cortex_a5_branch, cortex_a5_ex1")
++
++(define_insn_reservation "cortex_a5_load3" 4
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "load3"))
++  "cortex_a5_ex1+cortex_a5_branch, cortex_a5_ex1+cortex_a5_branch,\
++   cortex_a5_ex1")
++
++(define_insn_reservation "cortex_a5_store3" 0
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "store3"))
++  "cortex_a5_ex1+cortex_a5_branch, cortex_a5_ex1+cortex_a5_branch,\
++   cortex_a5_ex1")
++
++(define_insn_reservation "cortex_a5_load4" 5
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "load3"))
++  "cortex_a5_ex1+cortex_a5_branch, cortex_a5_ex1+cortex_a5_branch,\
++   cortex_a5_ex1+cortex_a5_branch, cortex_a5_ex1")
++
++(define_insn_reservation "cortex_a5_store4" 0
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "store3"))
++  "cortex_a5_ex1+cortex_a5_branch, cortex_a5_ex1+cortex_a5_branch,\
++   cortex_a5_ex1+cortex_a5_branch, cortex_a5_ex1")
++
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++;; Branches.
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++
++;; Direct branches are the only instructions we can dual-issue (also IT and
++;; nop, but those aren't very interesting for scheduling).  (The latency here
++;; is meant to represent when the branch actually takes place, but may not be
++;; entirely correct.)
++
++(define_insn_reservation "cortex_a5_branch" 3
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "branch,call"))
++  "cortex_a5_branch")
++
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++;; Floating-point arithmetic.
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++
++(define_insn_reservation "cortex_a5_fpalu" 4
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "ffariths, fadds, ffarithd, faddd, fcpys, fmuls, f_cvt,\
++			fcmps, fcmpd"))
++  "cortex_a5_ex1+cortex_a5_fpadd_pipe")
++
++;; For fconsts and fconstd, 8-bit immediate data is passed directly from
++;; f1 to f3 (which I think reduces the latency by one cycle).
++
++(define_insn_reservation "cortex_a5_fconst" 3
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "fconsts,fconstd"))
++  "cortex_a5_ex1+cortex_a5_fpadd_pipe")
++
++;; We should try not to attempt to issue a single-precision multiplication in
++;; the middle of a double-precision multiplication operation (the usage of
++;; cortex_a5_fpmul_pipe).
++
++(define_insn_reservation "cortex_a5_fpmuls" 4
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "fmuls"))
++  "cortex_a5_ex1+cortex_a5_fpmul_pipe")
++
++;; For single-precision multiply-accumulate, the add (accumulate) is issued
++;; whilst the multiply is in F4.  The multiply result can then be forwarded
++;; from F5 to F1.  The issue unit is only used once (when we first start
++;; processing the instruction), but the usage of the FP add pipeline could
++;; block other instructions attempting to use it simultaneously.  We try to
++;; avoid that using cortex_a5_fpadd_pipe.
++
++(define_insn_reservation "cortex_a5_fpmacs" 8
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "fmacs"))
++  "cortex_a5_ex1+cortex_a5_fpmul_pipe, nothing*3, cortex_a5_fpadd_pipe")
++
++;; Non-multiply instructions can issue in the middle two instructions of a
++;; double-precision multiply.  Note that it isn't entirely clear when a branch
++;; can dual-issue when a multi-cycle multiplication is in progress; we ignore
++;; that for now though.
++
++(define_insn_reservation "cortex_a5_fpmuld" 7
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "fmuld"))
++  "cortex_a5_ex1+cortex_a5_fpmul_pipe, cortex_a5_fpmul_pipe*2,\
++   cortex_a5_ex1+cortex_a5_fpmul_pipe")
++
++(define_insn_reservation "cortex_a5_fpmacd" 11
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "fmacd"))
++  "cortex_a5_ex1+cortex_a5_fpmul_pipe, cortex_a5_fpmul_pipe*2,\
++   cortex_a5_ex1+cortex_a5_fpmul_pipe, nothing*3, cortex_a5_fpadd_pipe")
++
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++;; Floating-point divide/square root instructions.
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++
++;; ??? Not sure if the 14 cycles taken for single-precision divide to complete
++;; includes the time taken for the special instruction used to collect the
++;; result to travel down the multiply pipeline, or not.  Assuming so.  (If
++;; that's wrong, the latency should be increased by a few cycles.)
++
++;; fsqrt takes one cycle less, but that is not modelled, nor is the use of the
++;; multiply pipeline to collect the divide/square-root result.
++
++(define_insn_reservation "cortex_a5_fdivs" 14
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "fdivs"))
++  "cortex_a5_ex1, cortex_a5_fp_div_sqrt * 13")
++
++;; ??? Similarly for fdivd.
++
++(define_insn_reservation "cortex_a5_fdivd" 29
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "fdivd"))
++  "cortex_a5_ex1, cortex_a5_fp_div_sqrt * 28")
++
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++;; VFP to/from core transfers.
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++
++;; FP loads take data from wr/rot/f3.  Might need to define bypasses to model
++;; this?
++
++;; Core-to-VFP transfers use the multiply pipeline.
++;; Not sure about this at all... I think we need some bypasses too.
++
++(define_insn_reservation "cortex_a5_r2f" 4
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "r_2_f"))
++  "cortex_a5_ex1")
++
++;; Not sure about this either. 6.8.7 says "Additionally, the store pipe used
++;; for store and FP->core register transfers can forward into the F2 and F3
++;; stages."
++;; This doesn't correspond to what we have though.
++
++(define_insn_reservation "cortex_a5_f2r" 2
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "f_2_r"))
++  "cortex_a5_ex1")
++
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++;; VFP flag transfer.
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++
++;; ??? The flag forwarding described in section 6.8.11 of the Cortex-A5 DPU
++;; specification (from fmstat to the ex2 stage of the second instruction) is
++;; not modeled at present.
++
++(define_insn_reservation "cortex_a5_f_flags" 4
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "f_flag"))
++  "cortex_a5_ex1")
++
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++;; VFP load/store.
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++
++(define_insn_reservation "cortex_a5_f_loads" 4
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "f_loads"))
++  "cortex_a5_ex1")
++
++(define_insn_reservation "cortex_a5_f_loadd" 5
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "f_load,f_loadd"))
++  "cortex_a5_ex1+cortex_a5_branch, cortex_a5_ex1")
++
++(define_insn_reservation "cortex_a5_f_stores" 0
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "f_stores"))
++  "cortex_a5_ex1")
++
++(define_insn_reservation "cortex_a5_f_stored" 0
++  (and (eq_attr "tune" "cortexa5")
++       (eq_attr "type" "f_store,f_stored"))
++  "cortex_a5_ex1+cortex_a5_branch, cortex_a5_ex1")
++
++;; Load-to-use for floating-point values has a penalty of one cycle, i.e. a
++;; latency of two (6.8.3).
++
++(define_bypass 2 "cortex_a5_f_loads"
++                 "cortex_a5_fpalu, cortex_a5_fpmacs, cortex_a5_fpmuld,\
++		  cortex_a5_fpmacd, cortex_a5_fdivs, cortex_a5_fdivd,\
++		  cortex_a5_f2r")
++
++(define_bypass 3 "cortex_a5_f_loadd"
++                 "cortex_a5_fpalu, cortex_a5_fpmacs, cortex_a5_fpmuld,\
++		  cortex_a5_fpmacd, cortex_a5_fdivs, cortex_a5_fdivd,\
++		  cortex_a5_f2r")
+--- a/src/gcc/config/arm/cortex-a9.md
++++ b/src/gcc/config/arm/cortex-a9.md
+@@ -1,6 +1,8 @@
+-;; ARM Cortex-A9 VFP pipeline description
+-;; Copyright (C) 2008 Free Software Foundation, Inc.
+-;; Written by CodeSourcery.
++;; ARM Cortex-A9 pipeline description
++;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
++;; Originally written by CodeSourcery for VFP.
++;;
++;; Integer core pipeline description contributed by ARM Ltd.
+ ;;
+ ;; This file is part of GCC.
+ ;;
+@@ -20,9 +22,181 @@
+ 
+ (define_automaton "cortex_a9")
+ 
+-;; FIXME: We model a single pipeline for all instructions.
+-;; Is dual-issue possible, and do we have other pipelines?
+-(define_cpu_unit "cortex_a9_vfp" "cortex_a9")
++;; The Cortex-A9 integer core is modelled as a dual issue pipeline that has
++;; the following components.
++;; 1. 1 Load Store Pipeline.
++;; 2. P0 / main pipeline for data processing instructions.
++;; 3. P1 / Dual pipeline for Data processing instructions.
++;; 4. MAC pipeline for multiply as well as multiply
++;;    and accumulate instructions.
++;; 5. 1 VFP / Neon pipeline.
++;; The Load/Store and VFP/Neon pipeline are multiplexed.
++;; The P0 / main pipeline and M1 stage of the MAC pipeline are
++;;   multiplexed.
++;; The P1 / dual pipeline and M2 stage of the MAC pipeline are
++;;   multiplexed.
++;; There are only 4 register read ports and hence at any point of
++;; time we can't have issues down the E1 and the E2 ports unless
++;; of course there are bypass paths that get exercised.
++;; Both P0 and P1 have 2 stages E1 and E2.
++;; Data processing instructions issue to E1 or E2 depending on
++;; whether they have an early shift or not.
++
++
++(define_cpu_unit "cortex_a9_vfp, cortex_a9_ls" "cortex_a9")
++(define_cpu_unit "cortex_a9_p0_e1, cortex_a9_p0_e2" "cortex_a9")
++(define_cpu_unit "cortex_a9_p1_e1, cortex_a9_p1_e2" "cortex_a9")
++(define_cpu_unit "cortex_a9_p0_wb, cortex_a9_p1_wb" "cortex_a9")
++(define_cpu_unit "cortex_a9_mac_m1, cortex_a9_mac_m2" "cortex_a9")
++(define_cpu_unit "cortex_a9_branch, cortex_a9_issue_branch" "cortex_a9")
++
++(define_reservation "cortex_a9_p0_default" "cortex_a9_p0_e2, cortex_a9_p0_wb")
++(define_reservation "cortex_a9_p1_default" "cortex_a9_p1_e2, cortex_a9_p1_wb")
++(define_reservation "cortex_a9_p0_shift" "cortex_a9_p0_e1, cortex_a9_p0_default")
++(define_reservation "cortex_a9_p1_shift" "cortex_a9_p1_e1, cortex_a9_p1_default")
++
++(define_reservation "cortex_a9_multcycle1"
++  "cortex_a9_p0_e2 + cortex_a9_mac_m1 + cortex_a9_mac_m2 + \
++cortex_a9_p1_e2 + cortex_a9_p0_e1 + cortex_a9_p1_e1")
++
++(define_reservation "cortex_a9_mult16"
++  "cortex_a9_mac_m1, cortex_a9_mac_m2, cortex_a9_p0_wb")
++(define_reservation "cortex_a9_mac16"
++  "cortex_a9_multcycle1, cortex_a9_mac_m2, cortex_a9_p0_wb")
++(define_reservation "cortex_a9_mult"
++  "cortex_a9_mac_m1*2, cortex_a9_mac_m2, cortex_a9_p0_wb")
++(define_reservation "cortex_a9_mac"
++  "cortex_a9_multcycle1*2 ,cortex_a9_mac_m2, cortex_a9_p0_wb")
++
++
++;; Issue at the same time along the load store pipeline and
++;; the VFP / Neon pipeline is not possible.
++;; FIXME:: At some point we need to model the issue
++;; of the load store and the vfp being shared rather than anything else.
++
++(exclusion_set "cortex_a9_ls" "cortex_a9_vfp")
++
++
++;; Default data processing instruction without any shift
++;; The only exception to this is the mov instruction
++;; which can go down E2 without any problem.
++(define_insn_reservation "cortex_a9_dp" 2
++  (and (eq_attr "tune" "cortexa9")
++       (ior (eq_attr "type" "alu")
++	    (and (eq_attr "type" "alu_shift_reg, alu_shift")
++		 (eq_attr "insn" "mov"))))
++  "cortex_a9_p0_default|cortex_a9_p1_default")
++
++;; An instruction using the shifter will go down E1.
++(define_insn_reservation "cortex_a9_dp_shift" 3
++   (and (eq_attr "tune" "cortexa9")
++	(and (eq_attr "type" "alu_shift_reg, alu_shift")
++	     (not (eq_attr "insn" "mov"))))
++   "cortex_a9_p0_shift | cortex_a9_p1_shift")
++
++;; Loads have a latency of 4 cycles.
++;; We don't model autoincrement instructions. These
++;; instructions use the load store pipeline and 1 of
++;; the E2 units to write back the result of the increment.
++
++(define_insn_reservation "cortex_a9_load1_2" 4
++  (and (eq_attr "tune" "cortexa9")
++       (eq_attr "type" "load1, load2, load_byte"))
++  "cortex_a9_ls")
++
++;; Loads multiples and store multiples can't be issued for 2 cycles in a
++;; row. The description below assumes that addresses are 64 bit aligned.
++;; If not, there is an extra cycle latency which is not modelled.
++
++;; FIXME:: This bit might need to be reworked when we get to
++;; tuning for the VFP because strictly speaking the ldm
++;; is sent to the LSU unit as is and there is only an
++;; issue restriction between the LSU and the VFP/ Neon unit.
++
++(define_insn_reservation "cortex_a9_load3_4" 5
++  (and (eq_attr "tune" "cortexa9")
++       (eq_attr "type" "load3, load4"))
++  "cortex_a9_ls, cortex_a9_ls")
++
++(define_insn_reservation "cortex_a9_store1_2" 0
++  (and (eq_attr "tune" "cortexa9")
++       (eq_attr "type" "store1, store2"))
++  "cortex_a9_ls")
++
++;; Almost all our store multiples use an auto-increment
++;; form. Don't issue back to back load and store multiples
++;; because the load store unit will stall.
++(define_insn_reservation "cortex_a9_store3_4" 0
++  (and (eq_attr "tune" "cortexa9")
++       (eq_attr "type" "store3, store4"))
++  "cortex_a9_ls+(cortex_a9_p0_default | cortex_a9_p1_default), cortex_a9_ls")
++
++;; We get 16*16 multiply / mac results in 3 cycles.
++(define_insn_reservation "cortex_a9_mult16" 3
++  (and (eq_attr "tune" "cortexa9")
++       (eq_attr "insn" "smulxy"))
++       "cortex_a9_mult16")
++
++;; The 16*16 mac is slightly different that it
++;; reserves M1 and M2 in the same cycle.
++(define_insn_reservation "cortex_a9_mac16" 3
++  (and (eq_attr "tune" "cortexa9")
++       (eq_attr "insn" "smlaxy"))
++  "cortex_a9_mac16")
++
++
++(define_insn_reservation "cortex_a9_multiply" 4
++  (and (eq_attr "tune" "cortexa9")
++       (eq_attr "insn" "mul"))
++       "cortex_a9_mult")
++
++(define_insn_reservation "cortex_a9_mac" 4
++  (and (eq_attr "tune" "cortexa9")
++       (eq_attr "insn" "mla"))
++       "cortex_a9_mac")
++
++;; An instruction with a result in E2 can be forwarded
++;; to E2 or E1 or M1 or the load store unit in the next cycle.
++
++(define_bypass 1 "cortex_a9_dp"
++                 "cortex_a9_dp_shift, cortex_a9_multiply,
++ cortex_a9_load1_2, cortex_a9_dp, cortex_a9_store1_2,
++ cortex_a9_mult16, cortex_a9_mac16, cortex_a9_mac, cortex_a9_store3_4, cortex_a9_load3_4")
++
++(define_bypass 2 "cortex_a9_dp_shift"
++                 "cortex_a9_dp_shift, cortex_a9_multiply,
++ cortex_a9_load1_2, cortex_a9_dp, cortex_a9_store1_2,
++ cortex_a9_mult16, cortex_a9_mac16, cortex_a9_mac, cortex_a9_store3_4, cortex_a9_load3_4")
++
++;; An instruction in the load store pipeline can provide
++;; read access to a DP instruction in the P0 default pipeline
++;; before the writeback stage.
++
++(define_bypass 3 "cortex_a9_load1_2" "cortex_a9_dp, cortex_a9_load1_2,
++cortex_a9_store3_4, cortex_a9_store1_2")
++
++(define_bypass 4 "cortex_a9_load3_4" "cortex_a9_dp, cortex_a9_load1_2,
++cortex_a9_store3_4, cortex_a9_store1_2,  cortex_a9_load3_4")
++
++;; Calls and branches.
++
++;; Branch instructions
++
++(define_insn_reservation "cortex_a9_branch" 0
++  (and (eq_attr "tune" "cortexa9")
++       (eq_attr "type" "branch"))
++  "cortex_a9_branch")
++
++;; Call latencies are essentially 0 but make sure
++;; dual issue doesn't happen i.e the next instruction
++;; starts at the next cycle.
++(define_insn_reservation "cortex_a9_call"  0
++  (and (eq_attr "tune" "cortexa9")
++       (eq_attr "type" "call"))
++  "cortex_a9_issue_branch + cortex_a9_multcycle1 + cortex_a9_ls + cortex_a9_vfp")
++
++
++;; Pipelining for VFP instructions.
+ 
+ (define_insn_reservation "cortex_a9_ffarith" 1
+  (and (eq_attr "tune" "cortexa9")
+--- a/src/gcc/config/arm/cygming.opt
++++ b/src/gcc/config/arm/cygming.opt
+@@ -0,0 +1,36 @@
++; Cygwin- and MinGW-specific options.
++
++; Copyright (C) 2005 Free Software Foundation, Inc.
++;
++; This file is part of GCC.
++;
++; GCC is free software; you can redistribute it and/or modify it under
++; the terms of the GNU General Public License as published by the Free
++; Software Foundation; either version 3, or (at your option) any later
++; version.
++;
++; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
++; WARRANTY; without even the implied warranty of MERCHANTABILITY or
++; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++; for more details.
++;
++; You should have received a copy of the GNU General Public License
++; along with GCC; see the file COPYING3.  If not see
++; <http://www.gnu.org/licenses/>.
++
++mcygwin
++Target
++Use the Cygwin interface
++
++; ### TODO make this work.
++; mnop-fun-dllimport
++; Target Report Var(TARGET_NOP_FUN_DLLIMPORT)
++; Ignore dllimport for functions
++
++mthreads
++Target RejectNegative
++Use Mingw-specific thread support
++
++mwin32
++Target
++Set Windows defines
+--- a/src/gcc/config/arm/eabi-memcpy.c
++++ b/src/gcc/config/arm/eabi-memcpy.c
+@@ -0,0 +1,108 @@
++/* Simple implementation of memcpy/memmove for targets that don't provide
++   their own.
++
++   copyright (c) 2010  free software foundation, inc.
++   contributed by codesourcery.
++
++   this file is free software; you can redistribute it and/or modify it
++   under the terms of the gnu general public license as published by the
++   free software foundation; either version 3, or (at your option) any
++   later version.
++
++   this file is distributed in the hope that it will be useful, but
++   without any warranty; without even the implied warranty of
++   merchantability or fitness for a particular purpose.  see the gnu
++   general public license for more details.
++
++   under section 7 of gpl version 3, you are granted additional
++   permissions described in the gcc runtime library exception, version
++   3.1, as published by the free software foundation.
++
++   you should have received a copy of the gnu general public license and
++   a copy of the gcc runtime library exception along with this program;
++   see the files copying3 and copying.runtime respectively.  if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++
++/* Define ALIASNAME as a strong alias for NAME.  */
++#define strong_alias(name, aliasname) \
++  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
++
++/* Nonzero if either X or Y is not aligned on a "long" boundary.  */
++#define UNALIGNED(X, Y) \
++  (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1)))
++
++/* How many bytes are copied each iteration of the 4X unrolled loop.  */
++#define BIGBLOCKSIZE    (sizeof (long) << 2)
++
++/* How many bytes are copied each iteration of the word copy loop.  */
++#define LITTLEBLOCKSIZE (sizeof (long))
++
++/* Threshhold for punting to the byte copier.  */
++#define TOO_SMALL(LEN)  ((LEN) < BIGBLOCKSIZE)
++
++void
++__aeabi_memcpy (void *dst0, const void *src0, unsigned long len)
++{
++  char *dst = dst0;
++  const char *src = src0;
++  long *aligned_dst;
++  const long *aligned_src;
++
++  /* If the size is small, or either SRC or DST is unaligned,
++     then punt into the byte copy loop.  This should be rare.  */
++  if (!TOO_SMALL(len) && !UNALIGNED (src, dst))
++    {
++      aligned_dst = (long *)dst;
++      aligned_src = (const long *)src;
++
++      /* Copy 4X long words at a time if possible.  */
++      while (len >= BIGBLOCKSIZE)
++        {
++          *aligned_dst++ = *aligned_src++;
++          *aligned_dst++ = *aligned_src++;
++          *aligned_dst++ = *aligned_src++;
++          *aligned_dst++ = *aligned_src++;
++          len -= BIGBLOCKSIZE;
++        }
++
++      /* Copy one long word at a time if possible.  */
++      while (len >= LITTLEBLOCKSIZE)
++        {
++          *aligned_dst++ = *aligned_src++;
++          len -= LITTLEBLOCKSIZE;
++        }
++
++       /* Pick up any residual with a byte copier.  */
++      dst = (char *)aligned_dst;
++      src = (const char *)aligned_src;
++    }
++
++  while (len--)
++    *dst++ = *src++;
++}
++
++void
++__aeabi_memmove (void *dst_void, const void *src_void, unsigned long len)
++{
++  char *dst = dst_void;
++  const char *src = src_void;
++
++  if (src < dst && dst < src + len)
++    {
++      /* Destructive overlap...have to copy backwards */
++      src += len;
++      dst += len;
++      while (len--)
++	{
++	  *--dst = *--src;
++	}
++    }
++  else
++    __aeabi_memcpy (dst_void, src_void, len);
++}
++
++strong_alias(__aeabi_memcpy, __aeabi_memcpy4)
++strong_alias(__aeabi_memcpy, __aeabi_memcpy8)
++strong_alias(__aeabi_memmove, __aeabi_memmove4)
++strong_alias(__aeabi_memmove, __aeabi_memmove8)
+--- a/src/gcc/config/arm/eabi-memset.c
++++ b/src/gcc/config/arm/eabi-memset.c
+@@ -0,0 +1,97 @@
++/* Simple implementation of memset/memclr for targets that don't provide
++   their own.
++
++   copyright (c) 2010  free software foundation, inc.
++   contributed by codesourcery.
++
++   this file is free software; you can redistribute it and/or modify it
++   under the terms of the gnu general public license as published by the
++   free software foundation; either version 3, or (at your option) any
++   later version.
++
++   this file is distributed in the hope that it will be useful, but
++   without any warranty; without even the implied warranty of
++   merchantability or fitness for a particular purpose.  see the gnu
++   general public license for more details.
++
++   under section 7 of gpl version 3, you are granted additional
++   permissions described in the gcc runtime library exception, version
++   3.1, as published by the free software foundation.
++
++   you should have received a copy of the gnu general public license and
++   a copy of the gcc runtime library exception along with this program;
++   see the files copying3 and copying.runtime respectively.  if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++
++/* Define ALIASNAME as a strong alias for NAME.  */
++#define strong_alias(name, aliasname) \
++  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
++
++#define LBLOCKSIZE (sizeof(long))
++#define UNALIGNED(X)   ((long)X & (LBLOCKSIZE - 1))
++#define TOO_SMALL(LEN) ((LEN) < LBLOCKSIZE)
++
++void
++__aeabi_memset (void *m, unsigned long n, int c)
++{
++  char *s = (char *)m;
++  int i;
++  unsigned long buffer;
++  unsigned long *aligned_addr;
++  unsigned int d = c & 0xff;	/* To avoid sign extension, copy C to an
++				   unsigned variable.  */
++
++  while (UNALIGNED (s))
++    {
++      if (n--)
++        *s++ = (char) c;
++      else
++        return;
++    }
++
++  if (!TOO_SMALL (n))
++    {
++      /* If we get this far, we know that n is large and s is word-aligned. */
++      aligned_addr = (unsigned long *)s;
++
++      /* Store D into each char sized location in BUFFER so that
++         we can set large blocks quickly.  */
++      buffer = (d << 8) | d;
++      buffer |= (buffer << 16);
++      for (i = 32; i < LBLOCKSIZE * 8; i <<= 1)
++        buffer = (buffer << i) | buffer;
++
++      /* Unroll the loop.  */
++      while (n >= LBLOCKSIZE * 4)
++        {
++          *aligned_addr++ = buffer;
++          *aligned_addr++ = buffer;
++          *aligned_addr++ = buffer;
++          *aligned_addr++ = buffer;
++          n -= 4 * LBLOCKSIZE;
++        }
++
++      while (n >= LBLOCKSIZE)
++        {
++          *aligned_addr++ = buffer;
++          n -= LBLOCKSIZE;
++        }
++      /* Pick up the remainder with a bytewise loop.  */
++      s = (char *)aligned_addr;
++    }
++
++  while (n--)
++    *s++ = (char) c;
++}
++
++void
++__aeabi_memclr (void *m, unsigned long n)
++{
++  __aeabi_memset (m, n, 0);
++}
++
++strong_alias(__aeabi_memset, __aeabi_memset4)
++strong_alias(__aeabi_memset, __aeabi_memset8)
++strong_alias(__aeabi_memclr, __aeabi_memclr4)
++strong_alias(__aeabi_memclr, __aeabi_memclr8)
+--- a/src/gcc/config/arm/elf.h
++++ b/src/gcc/config/arm/elf.h
+@@ -63,6 +63,7 @@
+ %{mthumb-interwork:-mthumb-interwork} \
+ %{msoft-float:-mfloat-abi=soft} %{mhard-float:-mfloat-abi=hard} \
+ %{mfloat-abi=*} %{mfpu=*} \
++%{mthumb:%{!-mimplicit-it=*:-mimplicit-it=thumb}} \
+ %(subtarget_extra_asm_spec)"
+ #endif
+ 
+--- a/src/gcc/config/arm/fp16.c
++++ b/src/gcc/config/arm/fp16.c
+@@ -0,0 +1,152 @@
++/* Half-float conversion routines.
++
++   Copyright (C) 2008, 2009 Free Software Foundation, Inc.
++   Contributed by CodeSourcery.
++
++   This file is free software; you can redistribute it and/or modify it
++   under the terms of the GNU General Public License as published by the
++   Free Software Foundation; either version 3, or (at your option) any
++   later version.
++
++   This file is distributed in the hope that it will be useful, but
++   WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   General Public License for more details.
++
++   Under Section 7 of GPL version 3, you are granted additional
++   permissions described in the GCC Runtime Library Exception, version
++   3.1, as published by the Free Software Foundation.
++
++   You should have received a copy of the GNU General Public License and
++   a copy of the GCC Runtime Library Exception along with this program;
++   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
++   <http://www.gnu.org/licenses/>.  */
++
++static inline unsigned int
++__gnu_f2h_internal(unsigned int a, int ieee)
++{
++  unsigned int sign = (a >> 16) & 0x8000;
++  int aexp = (a >> 23) & 0xff;
++  unsigned int mantissa = a & 0x007fffff;
++  unsigned int mask;
++  unsigned int increment;
++
++  if (aexp == 0xff)
++    {
++      if (!ieee)
++	return sign;
++      return sign | 0x7e00 | (mantissa >> 13);
++    }
++  
++  if (aexp == 0 && mantissa == 0)
++    return sign;
++
++  aexp -= 127;
++
++  /* Decimal point between bits 22 and 23.  */
++  mantissa |= 0x00800000;
++  if (aexp < -14)
++    {
++      mask = 0x007fffff;
++      if (aexp < -25)
++	aexp = -26;
++      else if (aexp != -25)
++	mask >>= 24 + aexp;
++    }
++  else
++    mask = 0x00001fff;
++
++  /* Round.  */
++  if (mantissa & mask)
++    {
++      increment = (mask + 1) >> 1;
++      if ((mantissa & mask) == increment)
++	increment = mantissa & (increment << 1);
++      mantissa += increment;
++      if (mantissa >= 0x01000000)
++       	{
++	  mantissa >>= 1;
++	  aexp++;
++	}
++    }
++
++  if (ieee)
++    {
++      if (aexp > 15)
++	return sign | 0x7c00;
++    }
++  else
++    {
++      if (aexp > 16)
++	return sign | 0x7fff;
++    }
++
++  if (aexp < -24)
++    return sign;
++
++  if (aexp < -14)
++    {
++      mantissa >>= -14 - aexp;
++      aexp = -14;
++    }
++
++  /* We leave the leading 1 in the mantissa, and subtract one
++     from the exponent bias to compensate.  */
++  return sign | (((aexp + 14) << 10) + (mantissa >> 13));
++}
++
++static inline unsigned int
++__gnu_h2f_internal(unsigned int a, int ieee)
++{
++  unsigned int sign = (a & 0x00008000) << 16;
++  int aexp = (a >> 10) & 0x1f;
++  unsigned int mantissa = a & 0x3ff;
++
++  if (aexp == 0x1f && ieee)
++    return sign | 0x7f800000 | (mantissa << 13);
++
++  if (aexp == 0)
++    {
++      int shift;
++
++      if (mantissa == 0)
++	return sign;
++
++      shift = __builtin_clz(mantissa) - 21;
++      mantissa <<= shift;
++      aexp = -shift;
++    }
++
++  return sign | (((aexp + 0x70) << 23) + (mantissa << 13));
++}
++
++#define ALIAS(src, dst) \
++  typeof (src) dst __attribute__ ((alias (#src)));
++
++unsigned int
++__gnu_f2h_ieee(unsigned int a)
++{
++  return __gnu_f2h_internal(a, 1);
++}
++ALIAS (__gnu_f2h_ieee, __aeabi_f2h)
++
++unsigned int
++__gnu_h2f_ieee(unsigned int a)
++{
++  return __gnu_h2f_internal(a, 1);
++}
++ALIAS (__gnu_h2f_ieee, __aeabi_h2f)
++
++unsigned int
++__gnu_f2h_alternative(unsigned int x)
++{
++  return __gnu_f2h_internal(x, 0);
++}
++ALIAS (__gnu_f2h_alternative, __aeabi_f2h_alt)
++
++unsigned int
++__gnu_h2f_alternative(unsigned int a)
++{
++  return __gnu_h2f_internal(a, 0);
++}
++ALIAS (__gnu_h2f_alternative, __aeabi_h2f_alt)
+--- a/src/gcc/config/arm/fpa.md
++++ b/src/gcc/config/arm/fpa.md
+@@ -599,10 +599,10 @@
+     {
+     default:
+     case 0: return \"mvf%?e\\t%0, %1\";
+-    case 1: if (arm_fpu_arch == FPUTYPE_FPA_EMU2)
++    case 1: if (TARGET_FPA_EMU2)
+ 	      return \"ldf%?e\\t%0, %1\";
+ 	    return \"lfm%?\\t%0, 1, %1\";
+-    case 2: if (arm_fpu_arch == FPUTYPE_FPA_EMU2)
++    case 2: if (TARGET_FPA_EMU2)
+ 	      return \"stf%?e\\t%1, %0\";
+ 	    return \"sfm%?\\t%1, 1, %0\";
+     }
+--- a/src/gcc/config/arm/hwdiv.md
++++ b/src/gcc/config/arm/hwdiv.md
+@@ -0,0 +1,41 @@
++;; ARM instruction patterns for hardware division 
++;; Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
++;; Written by CodeSourcery, LLC.
++;;
++;; This file is part of GCC.
++;;
++;; GCC is free software; you can redistribute it and/or modify it
++;; under the terms of the GNU General Public License as published by
++;; the Free Software Foundation; either version 2, or (at your option)
++;; any later version.
++;;
++;; GCC is distributed in the hope that it will be useful, but
++;; WITHOUT ANY WARRANTY; without even the implied warranty of
++;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++;; General Public License for more details.
++;;
++;; You should have received a copy of the GNU General Public License
++;; along with GCC; see the file COPYING.  If not, write to
++;; the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++;; Boston, MA 02110-1301, USA.
++
++(define_insn "divsi3"
++  [(set (match_operand:SI	  0 "s_register_operand" "=r")
++	(div:SI (match_operand:SI 1 "s_register_operand"  "r")
++		(match_operand:SI 2 "s_register_operand"  "r")))]
++  "arm_arch_hwdiv"
++  "sdiv%?\t%0, %1, %2"
++  [(set_attr "predicable" "yes")
++   (set_attr "insn" "sdiv")]
++)
++
++(define_insn "udivsi3"
++  [(set (match_operand:SI	   0 "s_register_operand" "=r")
++	(udiv:SI (match_operand:SI 1 "s_register_operand"  "r")
++		 (match_operand:SI 2 "s_register_operand"  "r")))]
++  "arm_arch_hwdiv"
++  "udiv%?\t%0, %1, %2"
++  [(set_attr "predicable" "yes")
++   (set_attr "insn" "udiv")]
++)
++
+--- a/src/gcc/config/arm/ieee754-df.S
++++ b/src/gcc/config/arm/ieee754-df.S
+@@ -83,7 +83,7 @@
+ ARM_FUNC_START adddf3
+ ARM_FUNC_ALIAS aeabi_dadd adddf3
+ 
+-1:	do_push	{r4, r5, lr}
++1:	do_push	(r4, r5, lr)
+ 
+ 	@ Look for zeroes, equal values, INF, or NAN.
+ 	shift1	lsl, r4, xh, #1
+@@ -427,7 +427,7 @@
+ 	do_it	eq, t
+ 	moveq	r1, #0
+ 	RETc(eq)
+-	do_push	{r4, r5, lr}
++	do_push	(r4, r5, lr)
+ 	mov	r4, #0x400		@ initial exponent
+ 	add	r4, r4, #(52-1 - 1)
+ 	mov	r5, #0			@ sign bit is 0
+@@ -447,7 +447,7 @@
+ 	do_it	eq, t
+ 	moveq	r1, #0
+ 	RETc(eq)
+-	do_push	{r4, r5, lr}
++	do_push	(r4, r5, lr)
+ 	mov	r4, #0x400		@ initial exponent
+ 	add	r4, r4, #(52-1 - 1)
+ 	ands	r5, r0, #0x80000000	@ sign bit in r5
+@@ -481,7 +481,7 @@
+ 	RETc(eq)			@ we are done already.
+ 
+ 	@ value was denormalized.  We can normalize it now.
+-	do_push	{r4, r5, lr}
++	do_push	(r4, r5, lr)
+ 	mov	r4, #0x380		@ setup corresponding exponent
+ 	and	r5, xh, #0x80000000	@ move sign bit in r5
+ 	bic	xh, xh, #0x80000000
+@@ -508,9 +508,9 @@
+ 	@ compatibility.
+ 	adr	ip, LSYM(f0_ret)
+ 	@ Push pc as well so that RETLDM works correctly.
+-	do_push	{r4, r5, ip, lr, pc}
++	do_push	(r4, r5, ip, lr, pc)
+ #else
+-	do_push	{r4, r5, lr}
++	do_push	(r4, r5, lr)
+ #endif
+ 
+ 	mov	r5, #0
+@@ -534,9 +534,9 @@
+ 	@ compatibility.
+ 	adr	ip, LSYM(f0_ret)
+ 	@ Push pc as well so that RETLDM works correctly.
+-	do_push	{r4, r5, ip, lr, pc}
++	do_push	(r4, r5, ip, lr, pc)
+ #else
+-	do_push	{r4, r5, lr}
++	do_push	(r4, r5, lr)
+ #endif
+ 
+ 	ands	r5, ah, #0x80000000	@ sign bit in r5
+@@ -585,7 +585,7 @@
+ 	@ Legacy code expects the result to be returned in f0.  Copy it
+ 	@ there as well.
+ LSYM(f0_ret):
+-	do_push	{r0, r1}
++	do_push	(r0, r1)
+ 	ldfd	f0, [sp], #8
+ 	RETLDM
+ 
+@@ -602,7 +602,7 @@
+ 
+ ARM_FUNC_START muldf3
+ ARM_FUNC_ALIAS aeabi_dmul muldf3
+-	do_push	{r4, r5, r6, lr}
++	do_push	(r4, r5, r6, lr)
+ 
+ 	@ Mask out exponents, trap any zero/denormal/INF/NAN.
+ 	mov	ip, #0xff
+@@ -910,7 +910,7 @@
+ ARM_FUNC_START divdf3
+ ARM_FUNC_ALIAS aeabi_ddiv divdf3
+ 	
+-	do_push	{r4, r5, r6, lr}
++	do_push	(r4, r5, r6, lr)
+ 
+ 	@ Mask out exponents, trap any zero/denormal/INF/NAN.
+ 	mov	ip, #0xff
+@@ -1195,7 +1195,7 @@
+ 
+ 	@ The status-returning routines are required to preserve all
+ 	@ registers except ip, lr, and cpsr.
+-6:	do_push	{r0, lr}
++6:	do_push	(r0, lr)
+ 	ARM_CALL cmpdf2
+ 	@ Set the Z flag correctly, and the C flag unconditionally.
+ 	cmp	r0, #0
+--- a/src/gcc/config/arm/ieee754-sf.S
++++ b/src/gcc/config/arm/ieee754-sf.S
+@@ -481,7 +481,7 @@
+ 	and	r3, ip, #0x80000000
+ 
+ 	@ Well, no way to make it shorter without the umull instruction.
+-	do_push	{r3, r4, r5}
++	do_push	(r3, r4, r5)
+ 	mov	r4, r0, lsr #16
+ 	mov	r5, r1, lsr #16
+ 	bic	r0, r0, r4, lsl #16
+@@ -492,7 +492,7 @@
+ 	mla	r0, r4, r1, r0
+ 	adds	r3, r3, r0, lsl #16
+ 	adc	r1, ip, r0, lsr #16
+-	do_pop	{r0, r4, r5}
++	do_pop	(r0, r4, r5)
+ 
+ #else
+ 
+@@ -882,7 +882,7 @@
+ 
+ 	@ The status-returning routines are required to preserve all
+ 	@ registers except ip, lr, and cpsr.
+-6:	do_push	{r0, r1, r2, r3, lr}
++6:	do_push	(r0, r1, r2, r3, lr)
+ 	ARM_CALL cmpsf2
+ 	@ Set the Z flag correctly, and the C flag unconditionally.
+ 	cmp	r0, #0
+--- a/src/gcc/config/arm/lib1funcs.asm
++++ b/src/gcc/config/arm/lib1funcs.asm
+@@ -27,8 +27,17 @@
+ #if defined(__ELF__) && defined(__linux__)
+ .section .note.GNU-stack,"",%progbits
+ .previous
+-#endif
++#endif  /* __ELF__ and __linux__ */
+ 
++#ifdef __ARM_EABI__
++/* Some attributes that are common to all routines in this file.  */
++       /* Tag_ABI_align8_needed: This code does not require 8-byte
++          alignment from the caller.  */
++       /* .eabi_attribute 24, 0  -- default setting.  */
++       /* Tag_ABI_align8_preserved: This code preserves 8-byte 
++          alignment in any callee.  */
++       .eabi_attribute 25, 1
++#endif /* __ARM_EABI__ */
+ /* ------------------------------------------------------------------------ */
+ 
+ /* We need to know what prefix to add to function names.  */
+@@ -234,8 +243,8 @@
+ .macro shift1 op, arg0, arg1, arg2
+ 	\op	\arg0, \arg1, \arg2
+ .endm
+-#define do_push	push
+-#define do_pop	pop
++#define do_push(...)	push {__VA_ARGS__}
++#define do_pop(...)	pop {__VA_ARGS__}
+ #define COND(op1, op2, cond) op1 ## op2 ## cond
+ /* Perform an arithmetic operation with a variable shift operand.  This
+    requires two instructions and a scratch register on Thumb-2.  */
+@@ -249,24 +258,133 @@
+ .macro shift1 op, arg0, arg1, arg2
+ 	mov	\arg0, \arg1, \op \arg2
+ .endm
+-#define do_push	stmfd sp!,
+-#define do_pop	ldmfd sp!,
++#if defined(__low_irq_latency__)        
++#define do_push(...) \
++  _buildN1(do_push, _buildC1(__VA_ARGS__))( __VA_ARGS__)
++#define _buildN1(BASE, X)	_buildN2(BASE, X)
++#define _buildN2(BASE, X)	BASE##X
++#define _buildC1(...)		_buildC2(__VA_ARGS__,9,8,7,6,5,4,3,2,1)
++#define _buildC2(a1,a2,a3,a4,a5,a6,a7,a8,a9,c,...) c
++        
++#define do_push1(r1) str r1, [sp, #-4]!
++#define do_push2(r1, r2) str r2, [sp, #-4]! ; str r1, [sp, #-4]!
++#define do_push3(r1, r2, r3) str r3, [sp, #-4]! ; str r2, [sp, #-4]!; str r1, [sp, #-4]!
++#define do_push4(r1, r2, r3, r4) \
++        do_push3 (r2, r3, r4);\
++        do_push1 (r1)
++#define do_push5(r1, r2, r3, r4, r5) \
++        do_push4 (r2, r3, r4, r5);\
++        do_push1 (r1)
++        
++#define do_pop(...) \
++_buildN1(do_pop, _buildC1(__VA_ARGS__))( __VA_ARGS__)
++        
++#define do_pop1(r1) ldr r1, [sp], #4
++#define do_pop2(r1, r2) ldr r1, [sp], #4 ; ldr r2, [sp], #4
++#define do_pop3(r1, r2, r3) ldr r1, [sp], #4 ; str r2, [sp], #4; str r3, [sp], #4
++#define do_pop4(r1, r2, r3, r4) \
++        do_pop1 (r1);\
++        do_pup3 (r2, r3, r4)
++#define do_pop5(r1, r2, r3, r4, r5) \
++        do_pop1 (r1);\
++        do_pop4 (r2, r3, r4, r5)
++#else
++#define do_push(...)    stmfd sp!, { __VA_ARGS__}
++#define do_pop(...)     ldmfd sp!, {__VA_ARGS__}
++#endif
++
++        
+ #define COND(op1, op2, cond) op1 ## cond ## op2
+ .macro shiftop name, dest, src1, src2, shiftop, shiftreg, tmp
+ 	\name \dest, \src1, \src2, \shiftop \shiftreg
+ .endm
+ #endif
+ 
+-.macro ARM_LDIV0 name
++#ifdef __ARM_EABI__
++.macro ARM_LDIV0 name signed
++	cmp	r0, #0
++	.ifc	\signed, unsigned
++	movne	r0, #0xffffffff
++	.else
++	movgt	r0, #0x7fffffff
++	movlt	r0, #0x80000000
++	.endif
++	b	SYM (__aeabi_idiv0) __PLT__
++.endm
++#else
++.macro ARM_LDIV0 name signed
+ 	str	lr, [sp, #-8]!
+ 98:	cfi_push 98b - __\name, 0xe, -0x8, 0x8
+ 	bl	SYM (__div0) __PLT__
+ 	mov	r0, #0			@ About as wrong as it could be.
+ 	RETLDM	unwind=98b
+ .endm
++#endif
+ 
+ 
+-.macro THUMB_LDIV0 name
++#ifdef __ARM_EABI__
++.macro THUMB_LDIV0 name signed
++#if defined(__ARM_ARCH_6M__)
++	.ifc \signed, unsigned
++	cmp	r0, #0
++	beq	1f
++	mov	r0, #0
++	mvn	r0, r0		@ 0xffffffff
++1:
++	.else
++	cmp	r0, #0
++	beq	2f
++	blt	3f
++	mov	r0, #0
++	mvn	r0, r0
++	lsr	r0, r0, #1	@ 0x7fffffff
++	b	2f
++3:	mov	r0, #0x80
++	lsl	r0, r0, #24	@ 0x80000000
++2:
++	.endif
++	push	{r0, r1, r2}
++	ldr	r0, 4f
++	adr	r1, 4f
++	add	r0, r1
++	str	r0, [sp, #8]
++	@ We know we are not on armv4t, so pop pc is safe.
++	pop	{r0, r1, pc}
++	.align	2
++4:
++	.word	__aeabi_idiv0 - 4b
++#elif defined(__thumb2__)
++	.syntax unified
++	.ifc \signed, unsigned
++	cbz	r0, 1f
++	mov	r0, #0xffffffff
++1:
++	.else
++	cmp	r0, #0
++	do_it	gt
++	movgt	r0, #0x7fffffff
++	do_it	lt
++	movlt	r0, #0x80000000
++	.endif
++	b.w	SYM(__aeabi_idiv0) __PLT__
++#else
++	.align	2
++	bx	pc
++	nop
++	.arm
++	cmp	r0, #0
++	.ifc	\signed, unsigned
++	movne	r0, #0xffffffff
++	.else
++	movgt	r0, #0x7fffffff
++	movlt	r0, #0x80000000
++	.endif
++	b	SYM(__aeabi_idiv0) __PLT__
++	.thumb
++#endif
++.endm
++#else
++.macro THUMB_LDIV0 name signed
+ 	push	{ r1, lr }
+ 98:	cfi_push 98b - __\name, 0xe, -0x4, 0x8
+ 	bl	SYM (__div0)
+@@ -278,18 +396,19 @@
+ 	pop	{ r1, pc }
+ #endif
+ .endm
++#endif
+ 
+ .macro FUNC_END name
+ 	SIZE (__\name)
+ .endm
+ 
+-.macro DIV_FUNC_END name
++.macro DIV_FUNC_END name signed
+ 	cfi_start	__\name, LSYM(Lend_div0)
+ LSYM(Ldiv0):
+ #ifdef __thumb__
+-	THUMB_LDIV0 \name
++	THUMB_LDIV0 \name \signed
+ #else
+-	ARM_LDIV0 \name
++	ARM_LDIV0 \name \signed
+ #endif
+ 	cfi_end	LSYM(Lend_div0)
+ 	FUNC_END \name
+@@ -414,6 +533,12 @@
+ #define yyl r2
+ #endif	
+ 
++#ifdef __ARM_EABI__
++.macro	WEAK name
++	.weak SYM (__\name)
++.endm
++#endif
++
+ #ifdef __thumb__
+ /* Register aliases.  */
+ 
+@@ -438,6 +563,43 @@
+ 
+ #if __ARM_ARCH__ >= 5 && ! defined (__OPTIMIZE_SIZE__)
+ 
++#if defined (__thumb2__)
++	clz	\curbit, \dividend
++	clz	\result, \divisor
++	sub	\curbit, \result, \curbit
++	rsb	\curbit, \curbit, #31
++	adr	\result, 1f
++	add	\curbit, \result, \curbit, lsl #4
++	mov	\result, #0
++	mov	pc, \curbit
++.p2align 3
++1:
++	.set	shift, 32
++	.rept	32
++	.set	shift, shift - 1
++	cmp.w	\dividend, \divisor, lsl #shift
++	nop.n
++	adc.w	\result, \result, \result
++	it	cs
++	subcs.w	\dividend, \dividend, \divisor, lsl #shift
++	.endr
++#elif defined(__ARM_TUNE_MARVELL_F__)
++	clz	\curbit, \dividend
++	clz	\result, \divisor
++	sub	\curbit, \result, \curbit
++	mov	\divisor, \divisor, lsl \curbit
++	rsb	\curbit, \curbit, #31
++	mov	\curbit, \curbit, lsl #2
++	mov	\result, #0
++	add	pc, pc, \curbit, lsl #2
++	nop
++	.rept	32
++	cmp	\dividend, \divisor
++	subcs	\dividend, \dividend, \divisor
++	mov	\divisor, \divisor, lsr #1
++	adc	\result, \result, \result
++	.endr
++#else  /* ! defined(__ARM_TUNE_MARVELL_F__) */
+ 	clz	\curbit, \dividend
+ 	clz	\result, \divisor
+ 	sub	\curbit, \result, \curbit
+@@ -453,6 +615,7 @@
+ 	adc	\result, \result, \result
+ 	subcs	\dividend, \dividend, \divisor, lsl #shift
+ 	.endr
++#endif /* defined(__ARM_TUNE_MARVELL_F__) */
+ 
+ #else /* __ARM_ARCH__ < 5 || defined (__OPTIMIZE_SIZE__) */
+ #if __ARM_ARCH__ >= 5
+@@ -500,18 +663,23 @@
+ 
+ 	@ Division loop
+ 1:	cmp	\dividend, \divisor
++	do_it	hs, t
+ 	subhs	\dividend, \dividend, \divisor
+ 	orrhs	\result,   \result,   \curbit
+ 	cmp	\dividend, \divisor,  lsr #1
++	do_it	hs, t
+ 	subhs	\dividend, \dividend, \divisor, lsr #1
+ 	orrhs	\result,   \result,   \curbit,  lsr #1
+ 	cmp	\dividend, \divisor,  lsr #2
++	do_it	hs, t
+ 	subhs	\dividend, \dividend, \divisor, lsr #2
+ 	orrhs	\result,   \result,   \curbit,  lsr #2
+ 	cmp	\dividend, \divisor,  lsr #3
++	do_it	hs, t
+ 	subhs	\dividend, \dividend, \divisor, lsr #3
+ 	orrhs	\result,   \result,   \curbit,  lsr #3
+ 	cmp	\dividend, #0			@ Early termination?
++	do_it	ne, t
+ 	movnes	\curbit,   \curbit,  lsr #4	@ No, any more bits to do?
+ 	movne	\divisor,  \divisor, lsr #4
+ 	bne	1b
+@@ -800,13 +968,14 @@
+ /* ------------------------------------------------------------------------ */
+ #ifdef L_udivsi3
+ 
++#if defined(__ARM_ARCH_6M__)
++
+ 	FUNC_START udivsi3
+ 	FUNC_ALIAS aeabi_uidiv udivsi3
+ 
+-#ifdef __thumb__
+-
+ 	cmp	divisor, #0
+ 	beq	LSYM(Ldiv0)
++LSYM(udivsi3_nodiv0):
+ 	mov	curbit, #1
+ 	mov	result, #0
+ 	
+@@ -820,9 +989,16 @@
+ 	pop	{ work }
+ 	RET
+ 
+-#else /* ARM version.  */
++#else /* ARM/Thumb-2 version.  */
++
++	ARM_FUNC_START udivsi3
++	ARM_FUNC_ALIAS aeabi_uidiv udivsi3
+ 
++	/* Note: if called via udivsi3_nodiv0, this will unnecessarily check
++	   for division-by-zero a second time.  */
++LSYM(udivsi3_nodiv0):
+ 	subs	r2, r1, #1
++	do_it	eq
+ 	RETc(eq)
+ 	bcc	LSYM(Ldiv0)
+ 	cmp	r0, r1
+@@ -835,7 +1011,8 @@
+ 	mov	r0, r2
+ 	RET	
+ 
+-11:	moveq	r0, #1
++11:	do_it	eq, e
++	moveq	r0, #1
+ 	movne	r0, #0
+ 	RET
+ 
+@@ -846,19 +1023,24 @@
+ 
+ #endif /* ARM version */
+ 
+-	DIV_FUNC_END udivsi3
++	DIV_FUNC_END udivsi3 unsigned
+ 
++#if defined(__ARM_ARCH_6M__)
+ FUNC_START aeabi_uidivmod
+-#ifdef __thumb__
++	cmp	r1, #0
++	beq	LSYM(Ldiv0)
+ 	push	{r0, r1, lr}
+-	bl	SYM(__udivsi3)
++	bl	LSYM(udivsi3_nodiv0)
+ 	POP	{r1, r2, r3}
+ 	mul	r2, r0
+ 	sub	r1, r1, r2
+ 	bx	r3
+ #else
++ARM_FUNC_START aeabi_uidivmod
++	cmp	r1, #0
++	beq	LSYM(Ldiv0)
+ 	stmfd	sp!, { r0, r1, lr }
+-	bl	SYM(__udivsi3)
++	bl	LSYM(udivsi3_nodiv0)
+ 	ldmfd	sp!, { r1, r2, lr }
+ 	mul	r3, r2, r0
+ 	sub	r1, r1, r3
+@@ -905,19 +1087,20 @@
+ 
+ #endif /* ARM version.  */
+ 	
+-	DIV_FUNC_END umodsi3
++	DIV_FUNC_END umodsi3 unsigned
+ 
+ #endif /* L_umodsi3 */
+ /* ------------------------------------------------------------------------ */
+ #ifdef L_divsi3
+ 
++#if defined(__ARM_ARCH_6M__)
++
+ 	FUNC_START divsi3	
+ 	FUNC_ALIAS aeabi_idiv divsi3
+ 
+-#ifdef __thumb__
+ 	cmp	divisor, #0
+ 	beq	LSYM(Ldiv0)
+-	
++LSYM(divsi3_nodiv0):
+ 	push	{ work }
+ 	mov	work, dividend
+ 	eor	work, divisor		@ Save the sign of the result.
+@@ -946,15 +1129,21 @@
+ 	pop	{ work }
+ 	RET
+ 
+-#else /* ARM version.  */
++#else /* ARM/Thumb-2 version.  */
+ 	
++	ARM_FUNC_START divsi3	
++	ARM_FUNC_ALIAS aeabi_idiv divsi3
++
+ 	cmp	r1, #0
+-	eor	ip, r0, r1			@ save the sign of the result.
+ 	beq	LSYM(Ldiv0)
++LSYM(divsi3_nodiv0):
++	eor	ip, r0, r1			@ save the sign of the result.
++	do_it	mi
+ 	rsbmi	r1, r1, #0			@ loops below use unsigned.
+ 	subs	r2, r1, #1			@ division by 1 or -1 ?
+ 	beq	10f
+ 	movs	r3, r0
++	do_it	mi
+ 	rsbmi	r3, r0, #0			@ positive dividend value
+ 	cmp	r3, r1
+ 	bls	11f
+@@ -964,14 +1153,18 @@
+ 	ARM_DIV_BODY r3, r1, r0, r2
+ 	
+ 	cmp	ip, #0
++	do_it	mi
+ 	rsbmi	r0, r0, #0
+ 	RET	
+ 
+ 10:	teq	ip, r0				@ same sign ?
++	do_it	mi
+ 	rsbmi	r0, r0, #0
+ 	RET	
+ 
+-11:	movlo	r0, #0
++11:	do_it	lo
++	movlo	r0, #0
++	do_it	eq,t
+ 	moveq	r0, ip, asr #31
+ 	orreq	r0, r0, #1
+ 	RET
+@@ -980,24 +1173,30 @@
+ 
+ 	cmp	ip, #0
+ 	mov	r0, r3, lsr r2
++	do_it	mi
+ 	rsbmi	r0, r0, #0
+ 	RET
+ 
+ #endif /* ARM version */
+ 	
+-	DIV_FUNC_END divsi3
++	DIV_FUNC_END divsi3 signed
+ 
++#if defined(__ARM_ARCH_6M__)
+ FUNC_START aeabi_idivmod
+-#ifdef __thumb__
++	cmp	r1, #0
++	beq	LSYM(Ldiv0)
+ 	push	{r0, r1, lr}
+-	bl	SYM(__divsi3)
++	bl	LSYM(divsi3_nodiv0)
+ 	POP	{r1, r2, r3}
+ 	mul	r2, r0
+ 	sub	r1, r1, r2
+ 	bx	r3
+ #else
++ARM_FUNC_START aeabi_idivmod
++	cmp	r1, #0
++	beq	LSYM(Ldiv0)
+ 	stmfd	sp!, { r0, r1, lr }
+-	bl	SYM(__divsi3)
++	bl	LSYM(divsi3_nodiv0)
+ 	ldmfd	sp!, { r1, r2, lr }
+ 	mul	r3, r2, r0
+ 	sub	r1, r1, r3
+@@ -1063,21 +1262,25 @@
+ 
+ #endif /* ARM version */
+ 	
+-	DIV_FUNC_END modsi3
++	DIV_FUNC_END modsi3 signed
+ 
+ #endif /* L_modsi3 */
+ /* ------------------------------------------------------------------------ */
+ #ifdef L_dvmd_tls
+ 
+-	FUNC_START div0
+-	FUNC_ALIAS aeabi_idiv0 div0
+-	FUNC_ALIAS aeabi_ldiv0 div0
+-
++#ifdef __ARM_EABI__
++	WEAK aeabi_idiv0
++	WEAK aeabi_ldiv0
++	FUNC_START aeabi_idiv0
++	FUNC_START aeabi_ldiv0
+ 	RET
+-
+ 	FUNC_END aeabi_ldiv0
+ 	FUNC_END aeabi_idiv0
++#else
++	FUNC_START div0
++	RET
+ 	FUNC_END div0
++#endif
+ 	
+ #endif /* L_divmodsi_tools */
+ /* ------------------------------------------------------------------------ */
+@@ -1087,16 +1290,49 @@
+ /* Constant taken from <asm/signal.h>.  */
+ #define SIGFPE	8
+ 
++#ifdef __ARM_EABI__
++	WEAK aeabi_idiv0
++	WEAK aeabi_ldiv0
++	ARM_FUNC_START aeabi_idiv0
++	ARM_FUNC_START aeabi_ldiv0
++#else
+ 	ARM_FUNC_START div0
++#endif
+ 
+-	do_push	{r1, lr}
++	do_push	(r1, lr)
+ 	mov	r0, #SIGFPE
+ 	bl	SYM(raise) __PLT__
+ 	RETLDM	r1
+ 
++#ifdef __ARM_EABI__
++	FUNC_END aeabi_ldiv0
++	FUNC_END aeabi_idiv0
++#else
+ 	FUNC_END div0
++#endif
+ 	
+ #endif /* L_dvmd_lnx */
++#ifdef L_clear_cache
++#if defined __ARM_EABI__ && defined __linux__
++@ EABI GNU/Linux call to cacheflush syscall.
++	ARM_FUNC_START clear_cache
++	do_push	(r7)
++#if __ARM_ARCH__ >= 7 || defined(__ARM_ARCH_6T2__)
++	movw	r7, #2
++	movt	r7, #0xf
++#else
++	mov	r7, #0xf0000
++	add	r7, r7, #2
++#endif
++	mov	r2, #0
++	swi	0
++	do_pop	(r7)
++	RET
++	FUNC_END clear_cache
++#else
++#error "This is only for ARM EABI GNU/Linux"
++#endif
++#endif /* L_clear_cache */
+ /* ------------------------------------------------------------------------ */
+ /* Dword shift operations.  */
+ /* All the following Dword shift variants rely on the fact that
+@@ -1114,9 +1350,6 @@
+ #define ah	r1
+ #endif
+ 
+-/* Prevent __aeabi double-word shifts from being produced on SymbianOS.  */
+-#ifndef __symbian__
+-
+ #ifdef L_lshrdi3
+ 
+ 	FUNC_START lshrdi3
+@@ -1218,8 +1451,6 @@
+ 
+ #endif
+ 
+-#endif /* __symbian__ */
+-
+ #if ((__ARM_ARCH__ > 5) && !defined(__ARM_ARCH_6M__)) \
+     || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \
+     || defined(__ARM_ARCH_5TEJ__)
+@@ -1293,7 +1524,7 @@
+ 	push	{r4, lr}
+ # else
+ ARM_FUNC_START clzdi2
+-	do_push	{r4, lr}
++	do_push	(r4, lr)
+ # endif
+ 	cmp	xxh, #0
+ 	bne	1f
+@@ -1515,7 +1746,6 @@
+ #endif /* !__thumb2__ */
+ #endif /* Arch supports thumb.  */
+ 
+-#ifndef __symbian__
+ #ifndef __ARM_ARCH_6M__
+ #include "ieee754-df.S"
+ #include "ieee754-sf.S"
+@@ -1523,4 +1753,3 @@
+ #else /* __ARM_ARCH_6M__ */
+ #include "bpabi-v6m.S"
+ #endif /* __ARM_ARCH_6M__ */
+-#endif /* !__symbian__ */
+--- a/src/gcc/config/arm/libunwind.S
++++ b/src/gcc/config/arm/libunwind.S
+@@ -27,8 +27,6 @@
+ .previous
+ #endif
+ 
+-#ifndef __symbian__
+-
+ #include "lib1funcs.asm"
+ 
+ .macro UNPREFIX name
+@@ -348,5 +346,3 @@
+ UNWIND_WRAPPER _Unwind_Resume_or_Rethrow 1
+ UNWIND_WRAPPER _Unwind_ForcedUnwind 3
+ UNWIND_WRAPPER _Unwind_Backtrace 2
+-
+-#endif  /* ndef __symbian__ */
+--- a/src/gcc/config/arm/linux-eabi.h
++++ b/src/gcc/config/arm/linux-eabi.h
+@@ -66,22 +66,14 @@
+ /* At this point, bpabi.h will have clobbered LINK_SPEC.  We want to
+    use the GNU/Linux version, not the generic BPABI version.  */
+ #undef  LINK_SPEC
+-#define LINK_SPEC LINUX_TARGET_LINK_SPEC
++#define LINK_SPEC LINUX_TARGET_LINK_SPEC BE8_LINK_SPEC
+ 
+ /* Use the default LIBGCC_SPEC, not the version in linux-elf.h, as we
+    do not use -lfloat.  */
+ #undef LIBGCC_SPEC
+ 
+-/* Clear the instruction cache from `beg' to `end'.  This makes an
+-   inline system call to SYS_cacheflush.  */
++/* Clear the instruction cache from `beg' to `end'.  This is
++   implemented in lib1funcs.asm, so ensure an error if this definition
++   is used.  */
+ #undef  CLEAR_INSN_CACHE
+-#define CLEAR_INSN_CACHE(BEG, END)					\
+-{									\
+-  register unsigned long _beg __asm ("a1") = (unsigned long) (BEG);	\
+-  register unsigned long _end __asm ("a2") = (unsigned long) (END);	\
+-  register unsigned long _flg __asm ("a3") = 0;				\
+-  register unsigned long _scno __asm ("r7") = 0xf0002;			\
+-  __asm __volatile ("swi 0		@ sys_cacheflush"		\
+-		    : "=r" (_beg)					\
+-		    : "0" (_beg), "r" (_end), "r" (_flg), "r" (_scno));	\
+-}
++#define CLEAR_INSN_CACHE(BEG, END) not used
+--- a/src/gcc/config/arm/linux-elf.h
++++ b/src/gcc/config/arm/linux-elf.h
+@@ -98,7 +98,7 @@
+ 
+ /* NWFPE always understands FPA instructions.  */
+ #undef  FPUTYPE_DEFAULT
+-#define FPUTYPE_DEFAULT FPUTYPE_FPA_EMU3
++#define FPUTYPE_DEFAULT "fpe3"
+ 
+ /* Call the function profiler with a given profile label.  */
+ #undef  ARM_FUNCTION_PROFILER
+--- a/src/gcc/config/arm/marvell-f-vfp.md
++++ b/src/gcc/config/arm/marvell-f-vfp.md
+@@ -0,0 +1,153 @@
++;; Marvell 2850 VFP pipeline description
++;; Copyright (C) 2007 Free Software Foundation, Inc.
++;; Written by CodeSourcery, Inc.
++
++;; This file is part of GCC.
++
++;; GCC is distributed in the hope that it will be useful, but WITHOUT
++;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
++;; License for more details.
++
++;; You should have received a copy of the GNU General Public License
++;; along with GCC; see the file COPYING.  If not, write to
++;; the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++;; Boston, MA 02110-1301, USA.
++
++;; This automaton provides a pipeline description for the Marvell
++;; 2850 core.
++;;
++;; The model given here assumes that the condition for all conditional
++;; instructions is "true", i.e., that all of the instructions are
++;; actually executed.
++
++(define_automaton "marvell_f_vfp")
++
++;; This is a single-issue VFPv2 implementation with the following execution
++;; units:
++;;
++;; 1. Addition/subtraction unit; takes three cycles, pipelined.
++;; 2. Multiplication unit; takes four cycles, pipelined.
++;; 3. Add buffer, used for multiply-accumulate (see below).
++;; 4. Divide/square root unit, not pipelined.
++;;    For single-precision: takes sixteen cycles, can accept another insn
++;;			    after fifteen cycles.
++;;    For double-precision: takes thirty-one cycles, can accept another insn
++;;			    after thirty cycles.
++;; 5. Single-cycle unit, pipelined.
++;;    This does absolute value/copy/negate/compare in one cycle and
++;;    conversion in two cycles.
++;;
++;; When all three operands of a multiply-accumulate instruction are ready,
++;; one is issued to the add buffer (which can hold six operands in a FIFO)
++;; and the two to be multiplied are issued to the multiply unit.  After
++;; four cycles in the multiply unit, one cycle is taken to issue the
++;; operand from the add buffer plus the multiplication result to the
++;; addition/subtraction unit.  That issue takes priority over any add/sub
++;; instruction waiting at the normal issue stage, but may be performed in
++;; parallel with the issue of a non-add/sub instruction.  The total time
++;; for a multiply-accumulate instruction to pass through the execution
++;; units is hence eight cycles.
++;;
++;; We do not need to explicitly model the add buffer because it can
++;; always issue the instruction at the head of its FIFO (due to the above
++;; priority rule) and there are more spaces in the add buffer (six) than
++;; there are stages (four) in the multiplication unit.
++;;
++;; Two instructions may be retired at once from the head of an 8-entry
++;; reorder buffer.  Data from these first two instructions only may be
++;; forwarded to the inputs of the issue unit.  We assume that the
++;; pressure on the reorder buffer will be sufficiently low that every
++;; instruction entering it will be eligible for data forwarding.  Since
++;; data is forwarded to the issue unit and not the execution units (so
++;; for example single-cycle instructions cannot be issued back-to-back),
++;; the latencies given below are the cycle counts above plus one.
++
++(define_cpu_unit "mf_vfp_issue" "marvell_f_vfp")
++(define_cpu_unit "mf_vfp_add" "marvell_f_vfp")
++(define_cpu_unit "mf_vfp_mul" "marvell_f_vfp")
++(define_cpu_unit "mf_vfp_div" "marvell_f_vfp")
++(define_cpu_unit "mf_vfp_single_cycle" "marvell_f_vfp")
++
++;; An attribute to indicate whether our reservations are applicable.
++
++(define_attr "marvell_f_vfp" "yes,no"
++  (const (if_then_else (and (eq_attr "tune" "marvell_f")
++                            (eq_attr "fpu" "vfp"))
++                       (const_string "yes") (const_string "no"))))
++
++;; Reservations of functional units.  The nothing*2 reservations at the
++;; start of many of the reservation strings correspond to the decode
++;; stages.  We need to have these reservations so that we can correctly
++;; reserve parts of the core's A1 pipeline for loads and stores.  For
++;; that case (since loads skip E1) the pipelines line up thus:
++;;	A1 pipe:	Issue	E2	OF	WR	WB	 ...
++;;	VFP pipe:	Fetch	Decode1	Decode2	Issue	Execute1 ...
++;; For a load, we need to make a reservation of E2, and thus we must
++;; use Decode1 as the starting point for all VFP reservations here.
++;;
++;; For reservations of pipelined VFP execution units we only reserve
++;; the execution unit for the first execution cycle, omitting any trailing
++;; "nothing" reservations.
++
++(define_insn_reservation "marvell_f_vfp_add" 4
++  (and (eq_attr "marvell_f_vfp" "yes")
++       (eq_attr "type" "farith"))
++  "nothing*2,mf_vfp_issue,mf_vfp_add")
++
++(define_insn_reservation "marvell_f_vfp_mul" 5
++  (and (eq_attr "marvell_f_vfp" "yes")
++       (eq_attr "type" "fmuls,fmuld"))
++  "nothing*2,mf_vfp_issue,mf_vfp_mul")
++
++(define_insn_reservation "marvell_f_vfp_divs" 17
++  (and (eq_attr "marvell_f_vfp" "yes")
++       (eq_attr "type" "fdivs"))
++  "nothing*2,mf_vfp_issue,mf_vfp_div*15")
++
++(define_insn_reservation "marvell_f_vfp_divd" 32
++  (and (eq_attr "marvell_f_vfp" "yes")
++       (eq_attr "type" "fdivd"))
++  "nothing*2,mf_vfp_issue,mf_vfp_div*30")
++
++;; The DFA lookahead is small enough that the "add" reservation here
++;; will always take priority over any addition/subtraction instruction
++;; issued five cycles after the multiply-accumulate instruction, as
++;; required.
++(define_insn_reservation "marvell_f_vfp_mac" 9
++  (and (eq_attr "marvell_f_vfp" "yes")
++       (eq_attr "type" "fmacs,fmacd"))
++  "nothing*2,mf_vfp_issue,mf_vfp_mul,nothing*4,mf_vfp_add")
++
++(define_insn_reservation "marvell_f_vfp_single" 2
++  (and (eq_attr "marvell_f_vfp" "yes")
++       (eq_attr "type" "ffarith"))
++  "nothing*2,mf_vfp_issue,mf_vfp_single_cycle")
++
++(define_insn_reservation "marvell_f_vfp_convert" 3
++  (and (eq_attr "marvell_f_vfp" "yes")
++       (eq_attr "type" "f_cvt"))
++  "nothing*2,mf_vfp_issue,mf_vfp_single_cycle")
++
++(define_insn_reservation "marvell_f_vfp_load" 2
++  (and (eq_attr "marvell_f_vfp" "yes")
++       (eq_attr "type" "f_loads,f_loadd"))
++  "a1_e2+sram,a1_of,a1_wr+mf_vfp_issue,a1_wb+mf_vfp_single_cycle")
++
++(define_insn_reservation "marvell_f_vfp_from_core" 2
++  (and (eq_attr "marvell_f_vfp" "yes")
++       (eq_attr "type" "r_2_f"))
++  "a1_e2,a1_of,a1_wr+mf_vfp_issue,a1_wb+mf_vfp_single_cycle")
++
++;; The interaction between the core and VFP pipelines during VFP
++;; store operations and core <-> VFP moves is not clear, so we guess.
++(define_insn_reservation "marvell_f_vfp_store" 3
++  (and (eq_attr "marvell_f_vfp" "yes")
++       (eq_attr "type" "f_stores,f_stored"))
++  "a1_e2,a1_of,mf_vfp_issue,a1_wr+sram+mf_vfp_single_cycle")
++
++(define_insn_reservation "marvell_f_vfp_to_core" 4
++  (and (eq_attr "marvell_f_vfp" "yes")
++       (eq_attr "type" "f_2_r"))
++  "a1_e2,a1_of,a1_wr+mf_vfp_issue,a1_wb+mf_vfp_single_cycle")
++
+--- a/src/gcc/config/arm/marvell-f.md
++++ b/src/gcc/config/arm/marvell-f.md
+@@ -0,0 +1,365 @@
++;; Marvell 2850 pipeline description
++;; Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
++;; Written by Marvell and CodeSourcery, Inc.
++
++;; This file is part of GCC.
++
++;; GCC is free software; you can redistribute it and/or modify it
++;; under the terms of the GNU General Public License as published
++;; by the Free Software Foundation; either version 2, or (at your
++;; option) any later version.
++
++;; GCC is distributed in the hope that it will be useful, but WITHOUT
++;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
++;; License for more details.
++
++;; You should have received a copy of the GNU General Public License
++;; along with GCC; see the file COPYING.  If not, write to
++;; the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++;; Boston, MA 02110-1301, USA.
++
++;; This automaton provides a pipeline description for the Marvell
++;; 2850 core.
++;;
++;; The model given here assumes that the condition for all conditional
++;; instructions is "true", i.e., that all of the instructions are
++;; actually executed.
++
++(define_automaton "marvell_f")
++
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++;; Pipelines
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++
++;; This is a dual-issue processor with three pipelines:
++;;
++;; 1. Arithmetic and load/store pipeline A1.
++;;    Issue | E1 | E2 | OF | WR | WB  for load-store instructions
++;;    Issue | E1 | E2 | WB  for arithmetic instructions
++;;
++;; 2. Arithmetic pipeline A2.
++;;    Issue | E1 | E2 | WB
++;;
++;; 3. Multiply and multiply-accumulate pipeline.
++;;    Issue | MAC1 | MAC2 | MAC3 | WB
++;;
++;; There are various bypasses modelled to a greater or lesser extent.
++;;
++;; Latencies in this file correspond to the number of cycles after
++;; the issue stage that it takes for the result of the instruction to
++;; be computed, or for its side-effects to occur.
++
++(define_cpu_unit "a1_e1,a1_e2,a1_of,a1_wr,a1_wb" "marvell_f") ; ALU 1
++(define_cpu_unit "a2_e1,a2_e2,a2_wb" "marvell_f")             ; ALU 2
++(define_cpu_unit "m_1,m_2,m_3,m_wb" "marvell_f")              ; MAC
++
++;; We define an SRAM cpu unit to enable us to describe conflicts
++;; between loads at the E2 stage and stores at the WR stage.
++
++(define_cpu_unit "sram" "marvell_f")
++
++;; Handling of dual-issue constraints.
++;;
++;; Certain pairs of instructions can be issued in parallel, and certain
++;; pairs cannot.  We divide a subset of the instructions into groups as
++;; follows.
++;;
++;; - data processing 1 (mov, mvn);
++;; - data processing 2 (adc, add, and, bic, cmn, cmp, eor, orr, rsb,
++;;                      rsc, sbc, sub, teq, tst);
++;; - load single (ldr, ldrb, ldrbt, ldrt, ldrh, ldrsb, ldrsh);
++;; - store single (str, strb, strbt, strt, strh);
++;; - swap (swp, swpb);
++;; - pld;
++;; - count leading zeros and DSP add/sub (clz, qadd, qdadd, qsub, qdsub);
++;; - multiply 2 (mul, muls, smull, umull, smulxy, smulls, umulls);
++;; - multiply 3 (mla, mlas, smlal, umlal, smlaxy, smlalxy, smlawx,
++;;               smlawy, smlals, umlals);
++;; - branches (b, bl, blx, bx).
++;;
++;; Ignoring conditional execution, it is a good approximation to the core
++;; to model that two instructions may only be issued in parallel if the
++;; following conditions are met.
++;; I.   The instructions both fall into one of the above groups and their
++;;      corresponding groups have a entry in the matrix below that is not X.
++;; II.  The second instruction does not read any register updated by the
++;;      first instruction (already enforced by the GCC scheduler).
++;; III. The second instruction does not need the carry flag updated by the
++;;      first instruction.  Currently we do not model this.
++;;
++;; First	Second instruction group
++;; insn
++;;		DP1  DP2  L    S    SWP  PLD  CLZ  M2   M3   B
++;;
++;;	DP1	ok   ok   ok   ok   ok   ok   ok   ok   ok   ok
++;;	DP2(1)  ok   ok   ok   ok   ok   ok   ok   ok   ok   ok
++;;	DP2(2)  ok   (2)  ok   (4)  ok   ok   ok   ok   X    ok
++;;	L   }
++;;	SWP }   ok   ok   X    X    X    X    ok   ok   ok   ok
++;;	PLD }
++;;      S(3)	ok   ok   X    X    X    X    ok   ok   ok   ok
++;;      S(4)	ok   (2)  X    X    X    X    ok   ok   X    ok
++;;	CLZ     ok   ok   ok   ok   ok   ok   ok   ok   ok   ok
++;;	M2	ok   ok   ok   ok   ok   ok   ok   X    X    ok
++;;	M3	ok   (2)  ok   (4)  ok   ok   ok   X    X    ok
++;;	B	ok   ok   ok   ok   ok   ok   ok   ok   ok   ok
++;;
++;; (1) without register shift
++;; (2) with register shift
++;; (3) with immediate offset
++;; (4) with register offset
++;;
++;; We define a fake cpu unit "reg_shift_lock" to enforce constraints
++;; between instructions in groups DP2(2) and M3.  All other
++;; constraints are enforced automatically by virtue of the limited
++;; number of pipelines available for the various operations, with
++;; the exception of constraints involving S(4) that we do not model.
++
++(define_cpu_unit "reg_shift_lock" "marvell_f")
++
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++;; ALU instructions
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++
++;; 1. Certain logic operations can be retired after the E1 stage if
++;; the pipeline is not already retiring another instruction.  In this
++;; model we assume this behaviour always holds for mov, mvn, and, orr, eor
++;; instructions.  If a register shift is involved and the instruction is
++;; not mov or mvn, then a dual-issue constraint must be enforced.
++
++;; The first two cases are separate so they can be identified for
++;; bypasses below.
++
++(define_insn_reservation "marvell_f_alu_early_retire" 1
++  (and (eq_attr "tune" "marvell_f")
++       (and (eq_attr "type" "alu")
++            (eq_attr "insn" "mov,mvn,and,orr,eor")))
++  "(a1_e1,a1_wb)|(a2_e1,a2_wb)")
++
++(define_insn_reservation "marvell_f_alu_early_retire_shift" 1
++  (and (eq_attr "tune" "marvell_f")
++       (and (eq_attr "type" "alu_shift_reg")
++            (eq_attr "insn" "mov,mvn,and,orr,eor")))
++  "(a1_e1,a1_wb)|(a2_e1,a2_wb)")
++
++(define_insn_reservation "marvell_f_alu_early_retire_reg_shift1" 1
++  (and (eq_attr "tune" "marvell_f")
++       (and (eq_attr "type" "alu_shift_reg")
++            (eq_attr "insn" "mov,mvn")))
++  "(a1_e1,a1_wb)|(a2_e1,a2_wb)")
++
++(define_insn_reservation "marvell_f_alu_early_retire_reg_shift2" 1
++  (and (eq_attr "tune" "marvell_f")
++       (and (eq_attr "type" "alu_shift_reg")
++            (eq_attr "insn" "and,orr,eor")))
++  "(reg_shift_lock+a1_e1,a1_wb)|(reg_shift_lock+a2_e1,a2_wb)")
++
++;; 2. ALU operations with no shifted operand.  These bypass the E1 stage if
++;; the E2 stage of the corresponding pipeline is clear; here, we always
++;; model this scenario [*].  We give the operation a latency of 1 yet reserve
++;; both E1 and E2 for it (thus preventing the GCC scheduler, in the case
++;; where both E1 and E2 of one pipeline are clear, from issuing one
++;; instruction to each).
++;;
++;; [*] The non-bypass case is a latency of two, reserving E1 on the first
++;;     cycle and E2 on the next.  Due to the way the scheduler works we
++;;     have to choose between taking this as the default and taking the
++;;     above case (with latency one) as the default; we choose the latter.
++
++(define_insn_reservation "marvell_f_alu_op_bypass_e1" 1
++  (and (eq_attr "tune" "marvell_f")
++       (and (eq_attr "type" "alu")
++            (not (eq_attr "insn" "mov,mvn,and,orr,eor"))))
++  "(a1_e1+a1_e2,a1_wb)|(a2_e1+a2_e2,a2_wb)")
++
++;; 3. ALU operations with a shift-by-constant operand.
++
++(define_insn_reservation "marvell_f_alu_shift_op" 2
++  (and (eq_attr "tune" "marvell_f")
++       (and (eq_attr "type" "alu_shift")
++            (not (eq_attr "insn" "mov,mvn,and,orr,eor"))))
++  "(a1_e1,a1_e2,a1_wb)|(a2_e1,a2_e2,a2_wb)")
++
++;; 4. ALU operations with a shift-by-register operand.  Since the
++;; instruction is never mov or mvn, a dual-issue constraint must
++;; be enforced.
++
++(define_insn_reservation "marvell_f_alu_shift_reg_op" 2
++  (and (eq_attr "tune" "marvell_f")
++       (and (eq_attr "type" "alu_shift_reg")
++            (not (eq_attr "insn" "mov,mvn,and,orr,eor"))))
++  "(reg_shift_lock+a1_e1,a1_e2,a1_wb)|(reg_shift_lock+a2_e1,a2_e2,a2_wb)")
++
++;; Given an ALU operation with shift (I1) followed by another ALU
++;; operation (I2), with I2 depending on the destination register Rd of I1
++;; and with I2 not using that value as the amount or the starting value for
++;; a shift, then I1 and I2 may be issued to the same pipeline on
++;; consecutive cycles.  In terms of this model that corresponds to I1
++;; having a latency of one cycle.  There are three cases for various
++;; I1 and I2 as follows.
++
++;; (a) I1 has a constant or register shift and I2 doesn't have a shift at all.
++(define_bypass 1 "marvell_f_alu_shift_op,\
++	          marvell_f_alu_shift_reg_op"
++	       "marvell_f_alu_op_bypass_e1,marvell_f_alu_early_retire")
++
++;; (b) I1 has a constant or register shift and I2 has a constant shift.
++;; Rd must not provide the starting value for the shift.
++(define_bypass 1 "marvell_f_alu_shift_op,\
++	          marvell_f_alu_shift_reg_op"
++	       "marvell_f_alu_shift_op,marvell_f_alu_early_retire_shift"
++	       "arm_no_early_alu_shift_value_dep")
++
++;; (c) I1 has a constant or register shift and I2 has a register shift.
++;; Rd must not provide the amount by which to shift.
++(define_bypass 1 "marvell_f_alu_shift_op,\
++	          marvell_f_alu_shift_reg_op"
++	       "marvell_f_alu_shift_reg_op,\
++	        marvell_f_alu_early_retire_reg_shift1,\
++	        marvell_f_alu_early_retire_reg_shift2"
++	       "arm_no_early_alu_shift_dep")
++
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++;; Multiplication instructions
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++
++;; Multiplication instructions in group "Multiply 2".
++
++(define_insn_reservation "marvell_f_multiply_2" 3
++  (and (eq_attr "tune" "marvell_f")
++       (eq_attr "insn" "mul,muls,smull,umull,smulxy,smulls,umulls"))
++  "m_1,m_2,m_3,m_wb")
++
++;; Multiplication instructions in group "Multiply 3".  There is a
++;; dual-issue constraint with non-multiplication ALU instructions
++;; to be respected here.
++
++(define_insn_reservation "marvell_f_multiply_3" 3
++  (and (eq_attr "tune" "marvell_f")
++       (eq_attr "insn" "mla,mlas,smlal,umlal,smlaxy,smlalxy,smlawx,\
++                        smlawy,smlals,umlals"))
++  "reg_shift_lock+m_1,m_2,m_3,m_wb")
++
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++;; Branch instructions
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++
++;; Conditional backward b instructions can have a zero-cycle penalty, and
++;; other conditional b and bl instructions have a one-cycle penalty if
++;; predicted correctly.  Currently we model the zero-cycle case for all
++;; branches.
++
++(define_insn_reservation "marvell_f_branches" 0
++ (and (eq_attr "tune" "marvell_f")
++      (eq_attr "type" "branch"))
++ "nothing")
++
++;; Call latencies are not predictable; a semi-arbitrary very large
++;; number is used as "positive infinity" for such latencies.
++
++(define_insn_reservation "marvell_f_call" 32 
++ (and (eq_attr "tune" "marvell_f")
++      (eq_attr "type" "call"))
++ "nothing")
++
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++;; Load/store instructions
++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++
++;; The models for load/store instructions do not accurately describe
++;; the difference between operations with a base register writeback.
++;; These models assume that all memory references hit in dcache.
++
++;; 1. Load/store for single registers.
++
++;; The worst case for a load is when the load result is needed in E1
++;; (for example for a register shift), giving a latency of four.  Loads
++;; skip E1 and access memory at the E2 stage.
++
++(define_insn_reservation "marvell_f_load1" 4
++ (and (eq_attr "tune" "marvell_f")
++      (eq_attr "type" "load1,load_byte"))
++ "a1_e2+sram,a1_of,a1_wr,a1_wb")
++
++;; The result for a load may be bypassed (to be available at the same
++;; time as the load arrives in the WR stage, so effectively at the OF
++;; stage) to the Rn operand at E2 with a latency of two.  The result may
++;; be bypassed to a non-Rn operand at E2 with a latency of three.  For
++;; instructions without shifts, detection of an Rn bypass situation is
++;; difficult (because some of the instruction patterns switch their
++;; operands), and so we do not model that here.  For instructions with
++;; shifts, the operand used at E2 will always be Rn, and so we can
++;; model the latency-two bypass for these.
++
++(define_bypass 2 "marvell_f_load1"
++               "marvell_f_alu_shift_op"
++	       "arm_no_early_alu_shift_value_dep")
++
++(define_bypass 2 "marvell_f_load1"
++               "marvell_f_alu_shift_reg_op"
++	       "arm_no_early_alu_shift_dep")
++
++;; Stores write at the WR stage and loads read at the E2 stage, giving
++;; a store latency of three.
++
++(define_insn_reservation "marvell_f_store1" 3
++ (and (eq_attr "tune" "marvell_f")
++      (eq_attr "type" "store1"))
++ "a1_e2,a1_of,a1_wr+sram,a1_wb")
++
++;; 2. Load/store for two consecutive registers.  These may be dealt
++;; with in the same number of cycles as single loads and stores.
++
++(define_insn_reservation "marvell_f_load2" 4
++ (and (eq_attr "tune" "marvell_f")
++      (eq_attr "type" "load2"))
++ "a1_e2+sram,a1_of,a1_wr,a1_wb")
++
++(define_insn_reservation "marvell_f_store2" 3
++ (and (eq_attr "tune" "marvell_f")
++      (eq_attr "type" "store2"))
++ "a1_e2,a1_of,a1_wr+sram,a1_wb")
++
++;; The first word of a doubleword load is eligible for the latency-two
++;; bypass described above for single loads, but this is not modelled here.
++;; We do however assume that either word may also be bypassed with
++;; latency three for ALU operations with shifts (where the shift value and
++;; amount do not depend on the loaded value) and latency four for ALU
++;; operations without shifts.  The latency four case is of course the default.
++
++(define_bypass 3 "marvell_f_load2"
++               "marvell_f_alu_shift_op"
++	       "arm_no_early_alu_shift_value_dep")
++
++(define_bypass 3 "marvell_f_load2"
++               "marvell_f_alu_shift_reg_op"
++	       "arm_no_early_alu_shift_dep")
++
++;; 3. Load/store for more than two registers.
++
++;; These instructions stall for an extra cycle in the decode stage;
++;; individual load/store instructions for each register are then issued.
++;; The load/store multiple instruction itself is removed from the decode
++;; stage at the same time as the final load/store instruction is issued.
++;; To complicate matters, pairs of loads/stores referencing two
++;; consecutive registers will be issued together as doubleword operations.
++;; We model a 3-word load as an LDR plus an LDRD, and a 4-word load
++;; as two LDRDs; thus, these are allocated the same latencies (the
++;; latency for two consecutive loads plus one for the setup stall).
++;; The extra stall is modelled by reserving E1.
++
++(define_insn_reservation "marvell_f_load3_4" 6
++ (and (eq_attr "tune" "marvell_f")
++      (eq_attr "type" "load3,load4"))
++ "a1_e1,a1_e1+a1_e2+sram,a1_e2+sram+a1_of,a1_of+a1_wr,a1_wr+a1_wb,a1_wb")
++
++;; Bypasses are possible for ldm as for single loads, but we do not
++;; model them here since the order of the constituent loads is
++;; difficult to predict.
++
++(define_insn_reservation "marvell_f_store3_4" 5
++ (and (eq_attr "tune" "marvell_f")
++      (eq_attr "type" "store3,store4"))
++ "a1_e1,a1_e1+a1_e2,a1_e2+a1_of,a1_of+a1_wr+sram,a1_wr+sram+a1_wb,a1_wb")
++
+--- a/src/gcc/config/arm/mingw32.h
++++ b/src/gcc/config/arm/mingw32.h
+@@ -0,0 +1,140 @@
++/* Operating system specific defines to be used when targeting GCC for
++   hosting on Windows CE, using GNU tools and the Windows32 API Library.
++   Copyright (C) 2006
++   Free Software Foundation, Inc.
++
++   This file is part of GCC.
++
++   GCC is free software; you can redistribute it and/or modify it
++   under the terms of the GNU General Public License as published
++   by the Free Software Foundation; either version 3, or (at your
++   option) any later version.
++
++   GCC is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
++   License for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with GCC; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++#undef TARGET_VERSION
++#define TARGET_VERSION fprintf (stderr, " (arm MinGW)"); 
++
++#undef EXTRA_OS_CPP_BUILTINS
++#define EXTRA_OS_CPP_BUILTINS()					\
++  do								\
++    {								\
++      builtin_define ("_WIN32");				\
++      builtin_define_std ("WIN32");				\
++      builtin_define_std ("WINNT");				\
++    }								\
++  while (0)
++
++#undef STANDARD_INCLUDE_DIR
++#define STANDARD_INCLUDE_DIR "/mingw/include"
++
++#undef CPP_SPEC
++#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT} \
++-D__COREDLL__ -D__MINGW32__ -D__MINGW32CE__ -D__CEGCC_VERSION__ \
++%{!nostdinc: -idirafter ../include/w32api%s -idirafter ../../include/w32api%s }"
++
++#undef LIB_SPEC
++#define LIB_SPEC "%{pg:-lgmon} -lcoredll"
++
++/* Include in the mingw32 libraries with libgcc */
++#undef LINK_SPEC
++#define LINK_SPEC "%{shared|mdll: --shared} \
++  %{static:-Bstatic} %{!static:-Bdynamic} \
++  %{shared|mdll: -e DllMainCRTStartup}"
++
++#undef STARTFILE_SPEC
++#define STARTFILE_SPEC "%{shared|mdll:dllcrt3%O%s} \
++  %{!shared:%{!mdll:crt3%O%s}} %{pg:gcrt3%O%s}"
++
++/* Override startfile prefix defaults.  */
++#ifndef STANDARD_STARTFILE_PREFIX_1
++#define STANDARD_STARTFILE_PREFIX_1 "/mingw/lib/"
++#endif
++#ifndef STANDARD_STARTFILE_PREFIX_2
++#define STANDARD_STARTFILE_PREFIX_2 ""
++#endif
++
++/* Output STRING, a string representing a filename, to FILE.
++   We canonicalize it to be in Unix format (backslashes are replaced
++   forward slashes.  */
++#undef OUTPUT_QUOTED_STRING
++#define OUTPUT_QUOTED_STRING(FILE, STRING)               \
++do {						         \
++  char c;					         \
++						         \
++  putc ('\"', asm_file);			         \
++						         \
++  while ((c = *string++) != 0)			         \
++    {						         \
++      if (c == '\\')				         \
++	c = '/';				         \
++						         \
++      if (ISPRINT (c))                                   \
++        {                                                \
++          if (c == '\"')			         \
++	    putc ('\\', asm_file);		         \
++          putc (c, asm_file);			         \
++        }                                                \
++      else                                               \
++        fprintf (asm_file, "\\%03o", (unsigned char) c); \
++    }						         \
++						         \
++  putc ('\"', asm_file);			         \
++} while (0)
++
++/*
++ * See the message from Dave Korn dated 2009/06/01 15:44 on the cegcc mailing
++ * list, and the gcc ChangeLog entry dated 2009-01-21, also by Dave.
++ *
++ * Based on that, we're replacing LIBGCC_SPEC by SHARED_LIBGCC_SPEC and
++ * REAL_GCC_SPEC. This is based on cygwin's definition, which we extend
++ * with the other libraries we need.
++ *
++ * The old definition :
++  "%{mthreads:-lmingwthrd} -lmingw32 -lgcc -lceoldname -lmingwex -lcoredll"
++ *
++ */
++#undef LIBGCC_SPEC
++
++#undef SHARED_LIBGCC_SPEC
++#ifdef ENABLE_SHARED_LIBGCC
++#define SHARED_LIBGCC_SPEC " \
++ %{mthreads:-lmingwthrd} -lmingw32 \
++ %{static|static-libgcc:-lgcc -lgcc_eh} \
++ %{!static: \
++   %{!static-libgcc: \
++     %{!shared: \
++       %{!shared-libgcc:-lgcc -lgcc_eh} \
++       %{shared-libgcc:-lgcc_s -lgcc} \
++      } \
++     %{shared:-lgcc_s -lgcc} \
++    } \
++  } \
++  -lceoldname -lmingwex -lcoredll"
++#else
++#define SHARED_LIBGCC_SPEC \
++  "%{mthreads:-lmingwthrd} -lmingw32 -lgcc -lceoldname -lmingwex -lcoredll"
++#endif
++
++#undef REAL_LIBGCC_SPEC
++#define REAL_LIBGCC_SPEC SHARED_LIBGCC_SPEC
++
++/* On mingw32ce, the reference chain goes like
++   WinMainCRTStartup(entry)->WinMain->main.  So,
++   libgfortranbegin.a(fmain.o:main) must be seen after
++   libmingw.a(WinMain).  */
++#define FORTRAN_INIT "-Wl,-lmingw32,-lgfortranbegin"
++
++/* Only include windows.h when needed, to avoid conflicts with
++   fp-bit.c in the definition of FLOAT.  */
++#if defined(IN_LIBGCC2) && (defined(L_trampoline))
++# define WIN32_LEAN_AND_MEAN
++# include <windows.h>
++#endif
+--- a/src/gcc/config/arm/montavista-linux.h
++++ b/src/gcc/config/arm/montavista-linux.h
+@@ -0,0 +1,33 @@
++/* MontaVista GNU/Linux Configuration.
++   Copyright (C) 2009
++   Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 3, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++/* Add -tarmv6 and -tthumb2 options for convenience in generating multilibs.
++*/
++#undef CC1_SPEC
++#define CC1_SPEC "							\
++ %{tarmv6:      -march=armv6 -mfloat-abi=softfp ;			\
++   tthumb2:     -mthumb -march=armv7-a -mfloat-abi=softfp ;             \
++   :            -march=armv5t}"
++
++/* The various C libraries each have their own subdirectory.  */
++#undef SYSROOT_SUFFIX_SPEC
++#define SYSROOT_SUFFIX_SPEC					\
++  "%{tarmv6:/armv6 ;			                        \
++     tthumb2:/thumb2}"
+--- a/src/gcc/config/arm/msformat-c.c
++++ b/src/gcc/config/arm/msformat-c.c
+@@ -0,0 +1,197 @@
++/* Check calls to formatted I/O functions (-Wformat).
++   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
++   2001, 2002, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 3, or (at your option) any later
++version.
++
++GCC is distributed in the hope that it will be useful, but WITHOUT ANY
++WARRANTY; without even the implied warranty of MERCHANTABILITY or
++FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++#include "config.h"
++#include "system.h"
++#include "coretypes.h"
++#include "tm.h"
++#include "tree.h"
++#include "flags.h"
++#include "c-common.h"
++#include "toplev.h"
++#include "intl.h"
++#include "diagnostic.h"
++#include "langhooks.h"
++#include "c-format.h"
++#include "alloc-pool.h"
++
++/* Mingw specific format attributes ms_printf, ms_scanf, and ms_strftime.  */
++
++static format_length_info ms_printf_length_specs[] =
++{
++  { "h", FMT_LEN_h, STD_C89, NULL, 0, 0 },
++  { "l", FMT_LEN_l, STD_C89, NULL, 0, 0 },
++  { "I32", FMT_LEN_l, STD_EXT, NULL, 0, 0 },
++  { "I64", FMT_LEN_ll, STD_EXT, NULL, 0, 0 },
++  { "I", FMT_LEN_L, STD_EXT, NULL, 0, 0 },
++  { NULL, 0, 0, NULL, 0, 0 }
++};
++
++static const format_flag_spec ms_printf_flag_specs[] =
++{
++  { ' ',  0, 0, N_("' ' flag"),        N_("the ' ' printf flag"),              STD_C89 },
++  { '+',  0, 0, N_("'+' flag"),        N_("the '+' printf flag"),              STD_C89 },
++  { '#',  0, 0, N_("'#' flag"),        N_("the '#' printf flag"),              STD_C89 },
++  { '0',  0, 0, N_("'0' flag"),        N_("the '0' printf flag"),              STD_C89 },
++  { '-',  0, 0, N_("'-' flag"),        N_("the '-' printf flag"),              STD_C89 },
++  { '\'', 0, 0, N_("''' flag"),        N_("the ''' printf flag"),              STD_EXT },
++  { 'w',  0, 0, N_("field width"),     N_("field width in printf format"),     STD_C89 },
++  { 'p',  0, 0, N_("precision"),       N_("precision in printf format"),       STD_C89 },
++  { 'L',  0, 0, N_("length modifier"), N_("length modifier in printf format"), STD_C89 },
++  { 0, 0, 0, NULL, NULL, 0 }
++};
++
++static const format_flag_pair ms_printf_flag_pairs[] =
++{
++  { ' ', '+', 1, 0   },
++  { '0', '-', 1, 0   }, { '0', 'p', 1, 'i' },
++  { 0, 0, 0, 0 }
++};
++
++static const format_flag_spec ms_scanf_flag_specs[] =
++{
++  { '*',  0, 0, N_("assignment suppression"), N_("the assignment suppression scanf feature"), STD_C89 },
++  { 'a',  0, 0, N_("'a' flag"),               N_("the 'a' scanf flag"),                       STD_EXT },
++  { 'w',  0, 0, N_("field width"),            N_("field width in scanf format"),              STD_C89 },
++  { 'L',  0, 0, N_("length modifier"),        N_("length modifier in scanf format"),          STD_C89 },
++  { '\'', 0, 0, N_("''' flag"),               N_("the ''' scanf flag"),                       STD_EXT },
++  { 0, 0, 0, NULL, NULL, 0 }
++};
++
++static const format_flag_pair ms_scanf_flag_pairs[] =
++{
++  { '*', 'L', 0, 0 },
++  { 0, 0, 0, 0 }
++};
++
++static const format_flag_spec ms_strftime_flag_specs[] =
++{
++  { '#', 0,   0, N_("'#' flag"),     N_("the '#' strftime flag"),          STD_EXT },
++  { 0, 0, 0, NULL, NULL, 0 }
++};
++
++static const format_flag_pair ms_strftime_flag_pairs[] =
++{
++  { 0, 0, 0, 0 }
++};
++
++static const format_char_info ms_print_char_table[] =
++{
++  /* C89 conversion specifiers.  */
++  { "di",  0, STD_C89, { T89_I,   BADLEN,  T89_S,   T89_L,   T9L_LL,  T99_SST,  BADLEN, BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +'",  "i",  NULL },
++  { "oxX", 0, STD_C89, { T89_UI,  BADLEN,  T89_US,  T89_UL,  T9L_ULL, T99_ST, BADLEN, BADLEN, BADLEN, BADLEN,  BADLEN,  BADLEN }, "-wp0#",     "i",  NULL },
++  { "u",   0, STD_C89, { T89_UI,  BADLEN,  T89_US,  T89_UL,  T9L_ULL, T99_ST, BADLEN, BADLEN, BADLEN, BADLEN,  BADLEN,  BADLEN }, "-wp0'",    "i",  NULL },
++  { "fgG", 0, STD_C89, { T89_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN, BADLEN, BADLEN }, "-wp0 +#'", "",   NULL },
++  { "eE",  0, STD_C89, { T89_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN, BADLEN, BADLEN }, "-wp0 +#",  "",   NULL },
++  { "c",   0, STD_C89, { T89_I,   BADLEN,  T89_S,  T94_WI,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-w",        "",   NULL },
++  { "s",   1, STD_C89, { T89_C,   BADLEN,  T89_S,  T94_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp",       "cR", NULL },
++  { "p",   1, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-w",        "c",  NULL },
++  { "n",   1, STD_C89, { T89_I,   BADLEN,  T89_S,   T89_L,   T9L_LL,  BADLEN,  BADLEN, BADLEN,  T99_IM,  BADLEN,  BADLEN,  BADLEN }, "",          "W",  NULL },
++  /* X/Open conversion specifiers.  */
++  { "C",   0, STD_EXT, { TEX_WI,  BADLEN,  T89_S,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-w",        "",   NULL },
++  { "S",   1, STD_EXT, { TEX_W,   BADLEN,  T89_S,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp",       "R",  NULL },
++  { NULL,  0, 0, NOLENGTHS, NULL, NULL, NULL }
++};
++
++static const format_char_info ms_scan_char_table[] =
++{
++  /* C89 conversion specifiers.  */
++  { "di",    1, STD_C89, { T89_I,   BADLEN,  T89_S,   T89_L,   T9L_LL,  T99_SST,  BADLEN, BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "*w'", "W",   NULL },
++  { "u",     1, STD_C89, { T89_UI,  BADLEN,  T89_US,  T89_UL,  T9L_ULL, T99_ST, BADLEN,  BADLEN, BADLEN, BADLEN,  BADLEN,  BADLEN }, "*w'", "W",   NULL },
++  { "oxX",   1, STD_C89, { T89_UI,  BADLEN,  T89_US,  T89_UL,  T9L_ULL, T99_ST, BADLEN,  BADLEN, BADLEN, BADLEN,  BADLEN,  BADLEN }, "*w",   "W",   NULL },
++  { "efgEG", 1, STD_C89, { T89_F,   BADLEN,  BADLEN,  T89_D,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN, BADLEN, BADLEN }, "*w'",  "W",   NULL },
++  { "c",     1, STD_C89, { T89_C,   BADLEN,  T89_S,  T94_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "*w",   "cW",  NULL },
++  { "s",     1, STD_C89, { T89_C,   BADLEN,  T89_S,  T94_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "*aw",  "cW",  NULL },
++  { "[",     1, STD_C89, { T89_C,   BADLEN,  BADLEN,  T94_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "*aw",  "cW[", NULL },
++  { "p",     2, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "*w",   "W",   NULL },
++  { "n",     1, STD_C89, { T89_I,   BADLEN,  T89_S,   T89_L,   T9L_LL,  BADLEN,  BADLEN, BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "",     "W",   NULL },
++  /* X/Open conversion specifiers.  */
++  { "C",     1, STD_EXT, { TEX_W,   BADLEN,  T89_S,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "*w",   "W",   NULL },
++  { "S",     1, STD_EXT, { TEX_W,   BADLEN,  T89_S,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "*aw",  "W",   NULL },
++  { NULL, 0, 0, NOLENGTHS, NULL, NULL, NULL }
++};
++
++static const format_char_info ms_time_char_table[] =
++{
++  /* C89 conversion specifiers.  */
++  { "ABZab",		0, STD_C89, NOLENGTHS, "#",     "",   NULL },
++  { "cx",		0, STD_C89, NOLENGTHS, "#",      "3",  NULL },
++  { "HIMSUWdmw",	0, STD_C89, NOLENGTHS, "#",  "",   NULL },
++  { "j",		0, STD_C89, NOLENGTHS, "#",  "",  NULL },
++  { "p",		0, STD_C89, NOLENGTHS, "#",      "",   NULL },
++  { "X",		0, STD_C89, NOLENGTHS, "#",      "",   NULL },
++  { "y",		0, STD_C89, NOLENGTHS, "#", "4",  NULL },
++  { "Y",		0, STD_C89, NOLENGTHS, "#", "",  NULL },
++  { "%",		0, STD_C89, NOLENGTHS, "",       "",   NULL },
++  /* C99 conversion specifiers.  */
++  { "z",		0, STD_C99, NOLENGTHS, "#",      "",  NULL },
++  { NULL,		0, 0, NOLENGTHS, NULL, NULL, NULL }
++};
++
++const format_kind_info mingw_format_attributes[3] =
++{
++  { "ms_printf",   ms_printf_length_specs,  ms_print_char_table, " +#0-'", NULL,
++    ms_printf_flag_specs, ms_printf_flag_pairs,
++    FMT_FLAG_ARG_CONVERT|FMT_FLAG_DOLLAR_MULTIPLE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_EMPTY_PREC_OK,
++    'w', 0, 'p', 0, 'L', 0,
++    &integer_type_node, &integer_type_node
++  },
++  { "ms_scanf",    ms_printf_length_specs,   ms_scan_char_table,  "*'", NULL,
++    ms_scanf_flag_specs, ms_scanf_flag_pairs,
++    FMT_FLAG_ARG_CONVERT|FMT_FLAG_SCANF_A_KLUDGE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_ZERO_WIDTH_BAD|FMT_FLAG_DOLLAR_GAP_POINTER_OK,
++    'w', 0, 0, '*', 'L', 0,
++    NULL, NULL
++  },
++  { "ms_strftime", NULL,                 ms_time_char_table,  "", "#",
++    ms_strftime_flag_specs, ms_strftime_flag_pairs,
++    FMT_FLAG_FANCY_PERCENT_OK, 0, 0, 0, 0, 0, 0,
++    NULL, NULL
++  }
++};
++
++/* Default overrides for printf, scanf and strftime.  */
++const target_ovr_attr mingw_format_attribute_overrides[4] =
++{
++  { "ms_printf", "printf" },
++  { "ms_scanf", "scanf" },
++  { "ms_strftime", "strftime" }
++};
++
++/* Setup for option Wpedantic-ms-format.  */
++
++#ifdef TARGET_OVERRIDES_FORMAT_INIT
++
++/* Make sure TARGET_OVERRIDES_FORMAT_INIT is prototyped.  */
++extern void TARGET_OVERRIDES_FORMAT_INIT (void);
++
++/* Helper.  */
++#define C89_OR_EXT (warn_pedantic_ms_format ? STD_EXT : STD_C89)
++
++void
++TARGET_OVERRIDES_FORMAT_INIT (void)
++{
++  ms_printf_length_specs[2].std = C89_OR_EXT; /* I32 */
++  ms_printf_length_specs[3].std = C89_OR_EXT; /* I64 */
++  ms_printf_length_specs[4].std = C89_OR_EXT; /* I */
++}
++
++#undef C89_OR_EXT
++
++#endif
+--- a/src/gcc/config/arm/neon-docgen.ml
++++ b/src/gcc/config/arm/neon-docgen.ml
+@@ -214,6 +214,7 @@
+     | Element_of_dreg -> (analyze_shape_elt reg_no Dreg) ^ "[@var{0}]"
+     | Element_of_qreg -> (analyze_shape_elt reg_no Qreg) ^ "[@var{0}]"
+     | All_elements_of_dreg -> (analyze_shape_elt reg_no Dreg) ^ "[]"
++    | Alternatives alts -> (analyze_shape_elt reg_no (List.hd alts))
+   in
+     match shape with
+       All (n, elt) -> commas (analyze_shape_elt 0) (n_things n elt) ""
+--- a/src/gcc/config/arm/neon-gen.ml
++++ b/src/gcc/config/arm/neon-gen.ml
+@@ -122,6 +122,7 @@
+   | T_uint16 | T_int16 -> T_intHI
+   | T_uint32 | T_int32 -> T_intSI
+   | T_uint64 | T_int64 -> T_intDI
++  | T_float32 -> T_floatSF
+   | T_poly8 -> T_intQI
+   | T_poly16 -> T_intHI
+   | T_arrayof (n, elt) -> T_arrayof (n, signed_ctype elt)
+@@ -320,7 +321,7 @@
+     typeinfo;
+   Format.print_newline ();
+   (* Extra types not in <stdint.h>.  *)
+-  Format.printf "typedef __builtin_neon_sf float32_t;\n";
++  Format.printf "typedef float float32_t;\n";
+   Format.printf "typedef __builtin_neon_poly8 poly8_t;\n";
+   Format.printf "typedef __builtin_neon_poly16 poly16_t;\n"
+ 
+@@ -399,7 +400,11 @@
+ "extern \"C\" {";
+ "#endif";
+ "";
++"#if defined (__vxworks) && defined (_WRS_KERNEL)";
++"#include <vxWorks.h>";
++"#else";
+ "#include <stdint.h>";
++"#endif";
+ ""];
+   deftypes ();
+   arrtypes ();
+--- a/src/gcc/config/arm/neon-testgen.ml
++++ b/src/gcc/config/arm/neon-testgen.ml
+@@ -51,8 +51,8 @@
+   Printf.fprintf chan "/* This file was autogenerated by neon-testgen.  */\n\n";
+   Printf.fprintf chan "/* { dg-do assemble } */\n";
+   Printf.fprintf chan "/* { dg-require-effective-target arm_neon_ok } */\n";
+-  Printf.fprintf chan
+-                 "/* { dg-options \"-save-temps -O0 -mfpu=neon -mfloat-abi=softfp\" } */\n";
++  Printf.fprintf chan "/* { dg-options \"-save-temps -O0\" } */\n";
++  Printf.fprintf chan "/* { dg-add-options arm_neon } */\n";
+   Printf.fprintf chan "\n#include \"arm_neon.h\"\n\n";
+   Printf.fprintf chan "void test_%s (void)\n{\n" test_name
+ 
+@@ -181,6 +181,7 @@
+     | Element_of_dreg -> (analyze_shape_elt Dreg) ^ "\\\\\\[\\[0-9\\]+\\\\\\]"
+     | Element_of_qreg -> (analyze_shape_elt Qreg) ^ "\\\\\\[\\[0-9\\]+\\\\\\]"
+     | All_elements_of_dreg -> (analyze_shape_elt Dreg) ^ "\\\\\\[\\\\\\]"
++    | Alternatives (elts) -> "(" ^ (String.concat "|" (List.map analyze_shape_elt elts)) ^ ")"
+   in
+     match shape with
+       All (n, elt) -> commas analyze_shape_elt (n_things n elt) ""
+--- a/src/gcc/config/arm/neon.md
++++ b/src/gcc/config/arm/neon.md
+@@ -22,17 +22,11 @@
+ (define_constants
+   [(UNSPEC_ASHIFT_SIGNED	65)
+    (UNSPEC_ASHIFT_UNSIGNED	66)
+-   (UNSPEC_VABA			67)
+-   (UNSPEC_VABAL		68)
+    (UNSPEC_VABD			69)
+    (UNSPEC_VABDL		70)
+-   (UNSPEC_VABS			71)
+-   (UNSPEC_VADD			72)
+    (UNSPEC_VADDHN		73)
+    (UNSPEC_VADDL		74)
+    (UNSPEC_VADDW		75)
+-   (UNSPEC_VAND			76)
+-   (UNSPEC_VBIC			77)
+    (UNSPEC_VBSL			78)
+    (UNSPEC_VCAGE		79)
+    (UNSPEC_VCAGT		80)
+@@ -40,18 +34,9 @@
+    (UNSPEC_VCGE			82)
+    (UNSPEC_VCGT			83)
+    (UNSPEC_VCLS			84)
+-   (UNSPEC_VCLZ			85)
+-   (UNSPEC_VCNT			86)
+-   (UNSPEC_VCOMBINE		87)
+    (UNSPEC_VCVT			88)
+    (UNSPEC_VCVT_N		89)
+-   (UNSPEC_VDUP_LANE		90)
+-   (UNSPEC_VDUP_N		91)
+-   (UNSPEC_VEOR			92)
+    (UNSPEC_VEXT			93)
+-   (UNSPEC_VGET_HIGH		94)
+-   (UNSPEC_VGET_LANE		95)
+-   (UNSPEC_VGET_LOW		96)
+    (UNSPEC_VHADD		97)
+    (UNSPEC_VHSUB		98)
+    (UNSPEC_VLD1			99)
+@@ -72,11 +57,9 @@
+    (UNSPEC_VLD4_LANE		114)
+    (UNSPEC_VMAX			115)
+    (UNSPEC_VMIN			116)
+-   (UNSPEC_VMLA			117)
+    (UNSPEC_VMLAL		118)
+    (UNSPEC_VMLA_LANE		119)
+    (UNSPEC_VMLAL_LANE		120)
+-   (UNSPEC_VMLS			121)
+    (UNSPEC_VMLSL		122)
+    (UNSPEC_VMLS_LANE		123)
+    (UNSPEC_VMLSL_LANE		124)
+@@ -86,10 +69,6 @@
+    (UNSPEC_VMULL		128)
+    (UNSPEC_VMUL_LANE		129)
+    (UNSPEC_VMULL_LANE		130)
+-   (UNSPEC_VMUL_N		131)
+-   (UNSPEC_VMVN			132)
+-   (UNSPEC_VORN			133)
+-   (UNSPEC_VORR			134)
+    (UNSPEC_VPADAL		135)
+    (UNSPEC_VPADD		136)
+    (UNSPEC_VPADDL		137)
+@@ -125,7 +104,6 @@
+    (UNSPEC_VREV64		167)
+    (UNSPEC_VRSQRTE		168)
+    (UNSPEC_VRSQRTS		169)
+-   (UNSPEC_VSET_LANE		170)
+    (UNSPEC_VSHL			171)
+    (UNSPEC_VSHLL_N		172)
+    (UNSPEC_VSHL_N		173)
+@@ -147,7 +125,6 @@
+    (UNSPEC_VST4B		189)
+    (UNSPEC_VST4_LANE		190)
+    (UNSPEC_VSTRUCTDUMMY		191)
+-   (UNSPEC_VSUB			192)
+    (UNSPEC_VSUBHN		193)
+    (UNSPEC_VSUBL		194)
+    (UNSPEC_VSUBW		195)
+@@ -159,7 +136,8 @@
+    (UNSPEC_VUZP1		201)
+    (UNSPEC_VUZP2		202)
+    (UNSPEC_VZIP1		203)
+-   (UNSPEC_VZIP2		204)])
++   (UNSPEC_VZIP2		204)
++   (UNSPEC_MISALIGNED_ACCESS	205)])
+ 
+ ;; Double-width vector modes.
+ (define_mode_iterator VD [V8QI V4HI V2SI V2SF])
+@@ -185,9 +163,6 @@
+ ;; Opaque structure types wider than TImode.
+ (define_mode_iterator VSTRUCT [EI OI CI XI])
+ 
+-;; Number of instructions needed to load/store struct elements. FIXME!
+-(define_mode_attr V_slen [(EI "2") (OI "2") (CI "3") (XI "4")])
+-
+ ;; Opaque structure types used in table lookups (except vtbl1/vtbx1).
+ (define_mode_iterator VTAB [TI EI OI])
+ 
+@@ -335,6 +310,14 @@
+ 				  (V4HI "V2SI") (V8HI "V4SI")
+ 				  (V2SI "DI")   (V4SI "V2DI")])
+ 
++;; Double-sized modes with the same element size.
++;; Used for neon_vdup_lane, where the second operand is double-sized
++;; even when the first one is quad.
++(define_mode_attr V_double_vector_mode [(V16QI "V8QI") (V8HI "V4HI")
++                                        (V4SI "V2SI") (V4SF "V2SF")
++                                        (V8QI "V8QI") (V4HI "V4HI")
++                                        (V2SI "V2SI") (V2SF "V2SF")])
++
+ ;; Mode of result of comparison operations (and bit-select operand 1).
+ (define_mode_attr V_cmp_result [(V8QI "V8QI") (V16QI "V16QI")
+ 			        (V4HI "V4HI") (V8HI  "V8HI")
+@@ -459,7 +442,9 @@
+ 	  "=w,Uv,w, w,  ?r,?w,?r,?r, ?Us")
+ 	(match_operand:VD 1 "general_operand"
+ 	  " w,w, Dn,Uvi, w, r, r, Usi,r"))]
+-  "TARGET_NEON"
++  "TARGET_NEON
++   && (register_operand (operands[0], <MODE>mode)
++       || register_operand (operands[1], <MODE>mode))"
+ {
+   if (which_alternative == 2)
+     {
+@@ -481,7 +466,7 @@
+ 
+   /* FIXME: If the memory layout is changed in big-endian mode, output_move_vfp
+      below must be changed to output_move_neon (which will use the
+-     element/structure loads/stores), and the constraint changed to 'Un' instead
++     element/structure loads/stores), and the constraint changed to 'Um' instead
+      of 'Uv'.  */
+ 
+   switch (which_alternative)
+@@ -506,7 +491,9 @@
+   	  "=w,Un,w, w,  ?r,?w,?r,?r,  ?Us")
+ 	(match_operand:VQXMOV 1 "general_operand"
+ 	  " w,w, Dn,Uni, w, r, r, Usi, r"))]
+-  "TARGET_NEON"
++  "TARGET_NEON
++   && (register_operand (operands[0], <MODE>mode)
++       || register_operand (operands[1], <MODE>mode))"
+ {
+   if (which_alternative == 2)
+     {
+@@ -549,6 +536,11 @@
+ 	(match_operand:TI 1 "general_operand" ""))]
+   "TARGET_NEON"
+ {
++  if (can_create_pseudo_p ())
++    {
++      if (GET_CODE (operands[0]) != REG)
++	operands[1] = force_reg (TImode, operands[1]);
++    }
+ })
+ 
+ (define_expand "mov<mode>"
+@@ -556,12 +548,19 @@
+ 	(match_operand:VSTRUCT 1 "general_operand" ""))]
+   "TARGET_NEON"
+ {
++  if (can_create_pseudo_p ())
++    {
++      if (GET_CODE (operands[0]) != REG)
++	operands[1] = force_reg (<MODE>mode, operands[1]);
++    }
+ })
+ 
+ (define_insn "*neon_mov<mode>"
+   [(set (match_operand:VSTRUCT 0 "nonimmediate_operand"	"=w,Ut,w")
+ 	(match_operand:VSTRUCT 1 "general_operand"	" w,w, Ut"))]
+-  "TARGET_NEON"
++  "TARGET_NEON
++   && (register_operand (operands[0], <MODE>mode)
++       || register_operand (operands[1], <MODE>mode))"
+ {
+   switch (which_alternative)
+     {
+@@ -571,7 +570,7 @@
+     }
+ }
+   [(set_attr "neon_type" "neon_int_1,neon_stm_2,neon_ldm_2")
+-   (set_attr "length" "<V_slen>,<V_slen>,<V_slen>")])
++   (set (attr "length") (symbol_ref "arm_attr_length_move_neon (insn)"))])
+ 
+ (define_split
+   [(set (match_operand:EI 0 "s_register_operand" "")
+@@ -658,6 +657,49 @@
+   neon_disambiguate_copy (operands, dest, src, 4);
+ })
+ 
++(define_expand "movmisalign<mode>"
++  [(set (match_operand:VDQX 0 "nonimmediate_operand"	      "")
++	(unspec:VDQX [(match_operand:VDQX 1 "general_operand" "")]
++		     UNSPEC_MISALIGNED_ACCESS))]
++  "TARGET_NEON && !BYTES_BIG_ENDIAN"
++{
++  if (!s_register_operand (operands[0], <MODE>mode)
++      && !s_register_operand (operands[1], <MODE>mode))
++    FAIL;
++})
++
++(define_insn "*movmisalign<mode>_neon_store"
++  [(set (match_operand:VDX 0 "memory_operand"                  "=Um")
++	(unspec:VDX [(match_operand:VDX 1 "s_register_operand" " w")]
++		    UNSPEC_MISALIGNED_ACCESS))]
++  "TARGET_NEON && !BYTES_BIG_ENDIAN"
++  "vst1.<V_sz_elem>\t{%P1}, %A0"
++  [(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs")])
++
++(define_insn "*movmisalign<mode>_neon_load"
++  [(set (match_operand:VDX 0 "s_register_operand"          "=w")
++	(unspec:VDX [(match_operand:VDX 1 "memory_operand" " Um")]
++		    UNSPEC_MISALIGNED_ACCESS))]
++  "TARGET_NEON && !BYTES_BIG_ENDIAN"
++  "vld1.<V_sz_elem>\t{%P0}, %A1"
++  [(set_attr "neon_type" "neon_vld1_1_2_regs")])
++
++(define_insn "*movmisalign<mode>_neon_store"
++  [(set (match_operand:VQX 0 "memory_operand"                  "=Um")
++	(unspec:VQX [(match_operand:VQX 1 "s_register_operand" " w")]
++		    UNSPEC_MISALIGNED_ACCESS))]
++  "TARGET_NEON && !BYTES_BIG_ENDIAN"
++  "vst1.<V_sz_elem>\t{%q1}, %A0"
++  [(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs")])
++
++(define_insn "*movmisalign<mode>_neon_load"
++  [(set (match_operand:VQX 0 "s_register_operand"           "=w")
++	(unspec:VQX [(match_operand:VQX 1 "memory_operand"  " Um")]
++		    UNSPEC_MISALIGNED_ACCESS))]
++  "TARGET_NEON && !BYTES_BIG_ENDIAN"
++  "vld1.<V_sz_elem>\t{%q0}, %A1"
++  [(set_attr "neon_type" "neon_vld1_1_2_regs")])
++
+ (define_insn "vec_set<mode>_internal"
+   [(set (match_operand:VD 0 "s_register_operand" "=w")
+         (vec_merge:VD
+@@ -672,7 +714,7 @@
+     elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
+   operands[2] = GEN_INT (elt);
+   
+-  return "vmov%?.<V_uf_sclr>\t%P0[%c2], %1";
++  return "vmov%?.<V_sz_elem>\t%P0[%c2], %1";
+ }
+   [(set_attr "predicable" "yes")
+    (set_attr "neon_type" "neon_mcr")])
+@@ -698,7 +740,7 @@
+   operands[0] = gen_rtx_REG (<V_HALF>mode, regno + hi);
+   operands[2] = GEN_INT (elt);
+ 
+-  return "vmov%?.<V_uf_sclr>\t%P0[%c2], %1";
++  return "vmov%?.<V_sz_elem>\t%P0[%c2], %1";
+ }
+   [(set_attr "predicable" "yes")
+    (set_attr "neon_type" "neon_mcr")]
+@@ -718,7 +760,7 @@
+ 
+   operands[0] = gen_rtx_REG (DImode, regno);
+ 
+-  return "vmov%?.64\t%P0, %Q1, %R1";
++  return "vmov%?\t%P0, %Q1, %R1";
+ }
+   [(set_attr "predicable" "yes")
+    (set_attr "neon_type" "neon_mcr_2_mcrr")]
+@@ -786,11 +828,11 @@
+           (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
+   "TARGET_NEON"
+ {
+-  int regno = REGNO (operands[1]) + INTVAL (operands[2]);
++  int regno = REGNO (operands[1]) + 2 * INTVAL (operands[2]);
+ 
+   operands[1] = gen_rtx_REG (DImode, regno);
+ 
+-  return "vmov%?.64\t%Q0, %R0, %P1";
++  return "vmov%?\t%Q0, %R0, %P1  @ v2di";
+ }
+   [(set_attr "predicable" "yes")
+    (set_attr "neon_type" "neon_int_1")]
+@@ -807,11 +849,8 @@
+ 
+ ;; Doubleword and quadword arithmetic.
+ 
+-;; NOTE: vadd/vsub and some other instructions also support 64-bit integer
+-;; element size, which we could potentially use for "long long" operations. We
+-;; don't want to do this at present though, because moving values from the
+-;; vector unit to the ARM core is currently slow and 64-bit addition (etc.) is
+-;; easy to do with ARM instructions anyway.
++;; NOTE: some other instructions also support 64-bit integer
++;; element size, which we could potentially use for "long long" operations.
+ 
+ (define_insn "*add<mode>3_neon"
+   [(set (match_operand:VDQ 0 "s_register_operand" "=w")
+@@ -827,6 +866,28 @@
+                     (const_string "neon_int_1")))]
+ )
+ 
++(define_insn "adddi3_neon"
++  [(set (match_operand:DI 0 "s_register_operand" "=w,?w,&r,&r")
++        (plus:DI (match_operand:DI 1 "s_register_operand" "%w,w,0,0")
++                 (match_operand:DI 2 "s_register_operand" "w,w,r,0")))
++   (clobber (reg:CC CC_REGNUM))]
++  "TARGET_NEON"
++{
++  switch (which_alternative)
++    {
++    case 0: /* fall through */
++    case 1: return "vadd.i64\t%P0, %P1, %P2";
++    case 2: return "#";
++    case 3: return "#";
++    default: gcc_unreachable ();
++    }
++}
++  [(set_attr "neon_type" "neon_int_1,neon_int_1,*,*")
++   (set_attr "conds" "*,*,clob,clob")
++   (set_attr "length" "*,*,8,8")
++   (set_attr "alt_tune" "nota8,onlya8,*,*")]
++)
++
+ (define_insn "*sub<mode>3_neon"
+   [(set (match_operand:VDQ 0 "s_register_operand" "=w")
+         (minus:VDQ (match_operand:VDQ 1 "s_register_operand" "w")
+@@ -841,6 +902,29 @@
+                     (const_string "neon_int_2")))]
+ )
+ 
++(define_insn "subdi3_neon"
++  [(set (match_operand:DI 0 "s_register_operand" "=w,?w,&r,&r,&r")
++        (minus:DI (match_operand:DI 1 "s_register_operand" "w,w,0,r,0")
++                  (match_operand:DI 2 "s_register_operand" "w,w,r,0,0")))
++   (clobber (reg:CC CC_REGNUM))]
++  "TARGET_NEON"
++{
++  switch (which_alternative)
++    {
++    case 0: /* fall through */
++    case 1: return "vsub.i64\t%P0, %P1, %P2";
++    case 2: /* fall through */ 
++    case 3: /* fall through */
++    case 4: return  "subs\\t%Q0, %Q1, %Q2\;sbc\\t%R0, %R1, %R2";
++    default: gcc_unreachable ();
++    }
++}
++  [(set_attr "neon_type" "neon_int_2,neon_int_2,*,*,*")
++   (set_attr "conds" "*,*,clob,clob,clob")
++   (set_attr "length" "*,*,8,8,8")
++   (set_attr "alt_tune" "nota8,onlya8,*,*,*")]
++)
++
+ (define_insn "*mul<mode>3_neon"
+   [(set (match_operand:VDQ 0 "s_register_operand" "=w")
+         (mult:VDQ (match_operand:VDQ 1 "s_register_operand" "w")
+@@ -862,6 +946,50 @@
+                                     (const_string "neon_mul_qqq_8_16_32_ddd_32")))))]
+ )
+ 
++(define_insn "mul<mode>3add<mode>_neon"
++  [(set (match_operand:VDQ 0 "s_register_operand" "=w")
++        (plus:VDQ (mult:VDQ (match_operand:VDQ 2 "s_register_operand" "w")
++                            (match_operand:VDQ 3 "s_register_operand" "w"))
++		  (match_operand:VDQ 1 "s_register_operand" "0")))]
++  "TARGET_NEON"
++  "vmla.<V_if_elem>\t%<V_reg>0, %<V_reg>2, %<V_reg>3"
++  [(set (attr "neon_type")
++      (if_then_else (ne (symbol_ref "<Is_float_mode>") (const_int 0))
++                    (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
++                                  (const_string "neon_fp_vmla_ddd")
++                                  (const_string "neon_fp_vmla_qqq"))
++                    (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
++                                  (if_then_else
++                                    (ne (symbol_ref "<Scalar_mul_8_16>") (const_int 0))
++                                    (const_string "neon_mla_ddd_8_16_qdd_16_8_long_32_16_long")
++                                    (const_string "neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long"))
++                                  (if_then_else (ne (symbol_ref "<Scalar_mul_8_16>") (const_int 0))
++                                    (const_string "neon_mla_qqq_8_16")
++                                    (const_string "neon_mla_qqq_32_qqd_32_scalar")))))]
++)
++
++(define_insn "mul<mode>3neg<mode>add<mode>_neon"
++  [(set (match_operand:VDQ 0 "s_register_operand" "=w")
++        (minus:VDQ (match_operand:VDQ 1 "s_register_operand" "0")
++                   (mult:VDQ (match_operand:VDQ 2 "s_register_operand" "w")
++                             (match_operand:VDQ 3 "s_register_operand" "w"))))]
++  "TARGET_NEON"
++  "vmls.<V_if_elem>\t%<V_reg>0, %<V_reg>2, %<V_reg>3"
++  [(set (attr "neon_type")
++      (if_then_else (ne (symbol_ref "<Is_float_mode>") (const_int 0))
++                    (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
++                                  (const_string "neon_fp_vmla_ddd")
++                                  (const_string "neon_fp_vmla_qqq"))
++                    (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
++                                  (if_then_else
++                                    (ne (symbol_ref "<Scalar_mul_8_16>") (const_int 0))
++                                    (const_string "neon_mla_ddd_8_16_qdd_16_8_long_32_16_long")
++                                    (const_string "neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long"))
++                                  (if_then_else (ne (symbol_ref "<Scalar_mul_8_16>") (const_int 0))
++                                    (const_string "neon_mla_qqq_8_16")
++                                    (const_string "neon_mla_qqq_32_qqd_32_scalar")))))]
++)
++
+ (define_insn "ior<mode>3"
+   [(set (match_operand:VDQ 0 "s_register_operand" "=w,w")
+ 	(ior:VDQ (match_operand:VDQ 1 "s_register_operand" "w,0")
+@@ -880,21 +1008,26 @@
+ )
+ 
+ (define_insn "iordi3_neon"
+-  [(set (match_operand:DI 0 "s_register_operand" "=w,w")
+-	(unspec:DI [(match_operand:DI 1 "s_register_operand" "w,0")
+-		    (match_operand:DI 2 "neon_logic_op2" "w,Dl")]
+-                    UNSPEC_VORR))]
++  [(set (match_operand:DI 0 "s_register_operand" "=w,?w,w,?w,&r,&r")
++        (ior:DI (match_operand:DI 1 "s_register_operand" "%w,w,0,0,0,r")
++		(match_operand:DI 2 "neon_logic_op2" "w,w,Dl,Dl,r,r")))]
+   "TARGET_NEON"
+ {
+   switch (which_alternative)
+     {
+-    case 0: return "vorr\t%P0, %P1, %P2";
+-    case 1: return neon_output_logic_immediate ("vorr", &operands[2],
++    case 0: /* fall through */
++    case 1: return "vorr\t%P0, %P1, %P2";
++    case 2: /* fall through */
++    case 3: return neon_output_logic_immediate ("vorr", &operands[2],
+ 		     DImode, 0, VALID_NEON_QREG_MODE (DImode));
++    case 4: return "#";
++    case 5: return "#";
+     default: gcc_unreachable ();
+     }
+ }
+-  [(set_attr "neon_type" "neon_int_1")]
++  [(set_attr "neon_type" "neon_int_1,neon_int_1,neon_int_1,neon_int_1,*,*")
++   (set_attr "length" "*,*,*,*,8,8")
++   (set_attr "alt_tune" "nota8,onlya8,nota8,onlya8,*,*")]
+ )
+ 
+ ;; The concrete forms of the Neon immediate-logic instructions are vbic and
+@@ -920,21 +1053,26 @@
+ )
+ 
+ (define_insn "anddi3_neon"
+-  [(set (match_operand:DI 0 "s_register_operand" "=w,w")
+-	(unspec:DI [(match_operand:DI 1 "s_register_operand" "w,0")
+-		    (match_operand:DI 2 "neon_inv_logic_op2" "w,DL")]
+-                    UNSPEC_VAND))]
++  [(set (match_operand:DI 0 "s_register_operand" "=w,?w,w,?w,&r,&r")
++        (and:DI (match_operand:DI 1 "s_register_operand" "%w,w,0,0,0,r")
++		(match_operand:DI 2 "neon_inv_logic_op2" "w,w,DL,DL,r,r")))]
+   "TARGET_NEON"
+ {
+   switch (which_alternative)
+     {
+-    case 0: return "vand\t%P0, %P1, %P2";
+-    case 1: return neon_output_logic_immediate ("vand", &operands[2],
++    case 0: /* fall through */
++    case 1: return "vand\t%P0, %P1, %P2";
++    case 2: /* fall through */
++    case 3: return neon_output_logic_immediate ("vand", &operands[2],
+     		     DImode, 1, VALID_NEON_QREG_MODE (DImode));
++    case 4: return "#";
++    case 5: return "#";
+     default: gcc_unreachable ();
+     }
+ }
+-  [(set_attr "neon_type" "neon_int_1")]
++  [(set_attr "neon_type" "neon_int_1,neon_int_1,neon_int_1,neon_int_1,*,*")
++   (set_attr "length" "*,*,*,*,8,8")
++   (set_attr "alt_tune" "nota8,onlya8,nota8,onlya8,*,*")]
+ )
+ 
+ (define_insn "orn<mode>3_neon"
+@@ -948,9 +1086,8 @@
+ 
+ (define_insn "orndi3_neon"
+   [(set (match_operand:DI 0 "s_register_operand" "=w")
+-	(unspec:DI [(match_operand:DI 1 "s_register_operand" "w")
+-		    (match_operand:DI 2 "s_register_operand" "w")]
+-                    UNSPEC_VORN))]
++	(ior:DI (match_operand:DI 1 "s_register_operand" "w")
++	         (not:DI (match_operand:DI 2 "s_register_operand" "w"))))]
+   "TARGET_NEON"
+   "vorn\t%P0, %P1, %P2"
+   [(set_attr "neon_type" "neon_int_1")]
+@@ -965,14 +1102,18 @@
+   [(set_attr "neon_type" "neon_int_1")]
+ )
+ 
++;; Compare to *anddi_notdi_di.
+ (define_insn "bicdi3_neon"
+-  [(set (match_operand:DI 0 "s_register_operand" "=w")
+-	(unspec:DI [(match_operand:DI 1 "s_register_operand" "w")
+-		     (match_operand:DI 2 "s_register_operand" "w")]
+-                    UNSPEC_VBIC))]
+-  "TARGET_NEON"
+-  "vbic\t%P0, %P1, %P2"
+-  [(set_attr "neon_type" "neon_int_1")]
++  [(set (match_operand:DI 0 "s_register_operand" "=w,=&r,&r")
++        (and:DI (not:DI (match_operand:DI 2 "s_register_operand" "w,r,0"))
++		(match_operand:DI 1 "s_register_operand" "w,0,r")))]
++  "TARGET_NEON"
++  "@
++   vbic\t%P0, %P1, %P2
++   #
++   #"
++  [(set_attr "neon_type" "neon_int_1,*,*")
++   (set_attr "length" "*,8,8")]
+ )
+ 
+ (define_insn "xor<mode>3"
+@@ -985,13 +1126,18 @@
+ )
+ 
+ (define_insn "xordi3_neon"
+-  [(set (match_operand:DI 0 "s_register_operand" "=w")
+-	(unspec:DI [(match_operand:DI 1 "s_register_operand" "w")
+-		     (match_operand:DI 2 "s_register_operand" "w")]
+-                    UNSPEC_VEOR))]
+-  "TARGET_NEON"
+-  "veor\t%P0, %P1, %P2"
+-  [(set_attr "neon_type" "neon_int_1")]
++  [(set (match_operand:DI 0 "s_register_operand" "=w,?w,&r,&r")
++        (xor:DI (match_operand:DI 1 "s_register_operand" "%w,w,0,r")
++	        (match_operand:DI 2 "s_register_operand" "w,w,r,r")))]
++  "TARGET_NEON"
++  "@
++   veor\t%P0, %P1, %P2
++   veor\t%P0, %P1, %P2
++   #
++   #"
++  [(set_attr "neon_type" "neon_int_1,neon_int_1,*,*")
++   (set_attr "length" "*,*,8,8")
++   (set_attr "alt_tune" "nota8,onlya8,*,*")]
+ )
+ 
+ (define_insn "one_cmpl<mode>2"
+@@ -1015,6 +1161,16 @@
+                     (const_string "neon_int_3")))]
+ )
+ 
++(define_expand "neon_vabs<mode>"
++  [(match_operand:VDQW 0 "s_register_operand" "")
++   (match_operand:VDQW 1 "s_register_operand" "")
++   (match_operand:SI 2 "immediate_operand" "")]
++  "TARGET_NEON"
++{
++  emit_insn (gen_abs<mode>2 (operands[0], operands[1]));
++  DONE;
++})
++
+ (define_insn "neg<mode>2"
+   [(set (match_operand:VDQW 0 "s_register_operand" "=w")
+ 	(neg:VDQW (match_operand:VDQW 1 "s_register_operand" "w")))]
+@@ -1074,7 +1230,7 @@
+ ; generic vectorizer code.  It ends up creating a V2DI constructor with
+ ; SImode elements.
+ 
+-(define_insn "ashl<mode>3"
++(define_insn "vashl<mode>3"
+   [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
+ 	(ashift:VDQIW (match_operand:VDQIW 1 "s_register_operand" "w")
+ 		      (match_operand:VDQIW 2 "s_register_operand" "w")))]
+@@ -1120,7 +1276,7 @@
+                     (const_string "neon_shift_3")))]
+ )
+ 
+-(define_expand "ashr<mode>3"
++(define_expand "vashr<mode>3"
+   [(set (match_operand:VDQIW 0 "s_register_operand" "")
+ 	(ashiftrt:VDQIW (match_operand:VDQIW 1 "s_register_operand" "")
+ 			(match_operand:VDQIW 2 "s_register_operand" "")))]
+@@ -1134,7 +1290,7 @@
+   DONE;
+ })
+ 
+-(define_expand "lshr<mode>3"
++(define_expand "vlshr<mode>3"
+   [(set (match_operand:VDQIW 0 "s_register_operand" "")
+ 	(lshiftrt:VDQIW (match_operand:VDQIW 1 "s_register_operand" "")
+ 			(match_operand:VDQIW 2 "s_register_operand" "")))]
+@@ -1651,21 +1807,17 @@
+ 
+ ; good for plain vadd, vaddq.
+ 
+-(define_insn "neon_vadd<mode>"
+-  [(set (match_operand:VDQX 0 "s_register_operand" "=w")
+-        (unspec:VDQX [(match_operand:VDQX 1 "s_register_operand" "w")
+-		      (match_operand:VDQX 2 "s_register_operand" "w")
+-                      (match_operand:SI 3 "immediate_operand" "i")]
+-                     UNSPEC_VADD))]
++(define_expand "neon_vadd<mode>"
++  [(match_operand:VDQX 0 "s_register_operand" "=w")
++   (match_operand:VDQX 1 "s_register_operand" "w")
++   (match_operand:VDQX 2 "s_register_operand" "w")
++   (match_operand:SI 3 "immediate_operand" "i")]
+   "TARGET_NEON"
+-  "vadd.<V_if_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
+-  [(set (attr "neon_type")
+-      (if_then_else (ne (symbol_ref "<Is_float_mode>") (const_int 0))
+-                    (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
+-                                  (const_string "neon_fp_vadd_ddd_vabs_dd")
+-                                  (const_string "neon_fp_vadd_qqq_vabs_qq"))
+-                    (const_string "neon_int_1")))]
+-)
++{
++  emit_insn (gen_add<mode>3 (operands[0], operands[1], operands[2]));
++  DONE;
++})
++
+ 
+ ; operand 3 represents in bits:
+ ;  bit 0: signed (vs unsigned).
+@@ -1728,6 +1880,8 @@
+   [(set_attr "neon_type" "neon_int_4")]
+ )
+ 
++;; We cannot replace this unspec with mul<mode>3 because of the odd 
++;; polynomial multiplication case that can specified by operand 3.
+ (define_insn "neon_vmul<mode>"
+   [(set (match_operand:VDQW 0 "s_register_operand" "=w")
+         (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "w")
+@@ -1751,29 +1905,18 @@
+                                     (const_string "neon_mul_qqq_8_16_32_ddd_32")))))]
+ )
+ 
+-(define_insn "neon_vmla<mode>"
+-  [(set (match_operand:VDQW 0 "s_register_operand" "=w")
+-        (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")
+-		      (match_operand:VDQW 2 "s_register_operand" "w")
+-		      (match_operand:VDQW 3 "s_register_operand" "w")
+-                     (match_operand:SI 4 "immediate_operand" "i")]
+-                    UNSPEC_VMLA))]
++(define_expand "neon_vmla<mode>"
++  [(match_operand:VDQW 0 "s_register_operand" "=w")
++   (match_operand:VDQW 1 "s_register_operand" "0")
++   (match_operand:VDQW 2 "s_register_operand" "w")
++   (match_operand:VDQW 3 "s_register_operand" "w")
++   (match_operand:SI 4 "immediate_operand" "i")]
+   "TARGET_NEON"
+-  "vmla.<V_if_elem>\t%<V_reg>0, %<V_reg>2, %<V_reg>3"
+-  [(set (attr "neon_type")
+-      (if_then_else (ne (symbol_ref "<Is_float_mode>") (const_int 0))
+-                    (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
+-                                  (const_string "neon_fp_vmla_ddd")
+-                                  (const_string "neon_fp_vmla_qqq"))
+-                    (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
+-                                  (if_then_else
+-                                    (ne (symbol_ref "<Scalar_mul_8_16>") (const_int 0))
+-                                    (const_string "neon_mla_ddd_8_16_qdd_16_8_long_32_16_long")
+-                                    (const_string "neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long"))
+-                                  (if_then_else (ne (symbol_ref "<Scalar_mul_8_16>") (const_int 0))
+-                                    (const_string "neon_mla_qqq_8_16")
+-                                    (const_string "neon_mla_qqq_32_qqd_32_scalar")))))]
+-)
++{
++  emit_insn (gen_mul<mode>3add<mode>_neon (operands[0], operands[1],
++				           operands[2], operands[3]));
++  DONE;
++})
+ 
+ (define_insn "neon_vmlal<mode>"
+   [(set (match_operand:<V_widen> 0 "s_register_operand" "=w")
+@@ -1790,30 +1933,18 @@
+                    (const_string "neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long")))]
+ )
+ 
+-(define_insn "neon_vmls<mode>"
+-  [(set (match_operand:VDQW 0 "s_register_operand" "=w")
+-        (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")
+-		      (match_operand:VDQW 2 "s_register_operand" "w")
+-		      (match_operand:VDQW 3 "s_register_operand" "w")
+-                     (match_operand:SI 4 "immediate_operand" "i")]
+-                    UNSPEC_VMLS))]
++(define_expand "neon_vmls<mode>"
++  [(match_operand:VDQW 0 "s_register_operand" "=w")
++   (match_operand:VDQW 1 "s_register_operand" "0")
++   (match_operand:VDQW 2 "s_register_operand" "w")
++   (match_operand:VDQW 3 "s_register_operand" "w")
++   (match_operand:SI 4 "immediate_operand" "i")]
+   "TARGET_NEON"
+-  "vmls.<V_if_elem>\t%<V_reg>0, %<V_reg>2, %<V_reg>3"
+-  [(set (attr "neon_type")
+-      (if_then_else (ne (symbol_ref "<Is_float_mode>") (const_int 0))
+-                    (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
+-                                  (const_string "neon_fp_vmla_ddd")
+-                                  (const_string "neon_fp_vmla_qqq"))
+-                    (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
+-                                  (if_then_else
+-                                    (ne (symbol_ref "<Scalar_mul_8_16>") (const_int 0))
+-                                    (const_string "neon_mla_ddd_8_16_qdd_16_8_long_32_16_long")
+-                                    (const_string "neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long"))
+-                                  (if_then_else
+-                                    (ne (symbol_ref "<Scalar_mul_8_16>") (const_int 0))
+-                                    (const_string "neon_mla_qqq_8_16")
+-                                    (const_string "neon_mla_qqq_32_qqd_32_scalar")))))]
+-)
++{
++  emit_insn (gen_mul<mode>3neg<mode>add<mode>_neon (operands[0], operands[1],
++						    operands[2], operands[3]));
++  DONE;
++})
+ 
+ (define_insn "neon_vmlsl<mode>"
+   [(set (match_operand:<V_widen> 0 "s_register_operand" "=w")
+@@ -1906,21 +2037,16 @@
+                    (const_string "neon_mul_qdd_64_32_long_qqd_16_ddd_32_scalar_64_32_long_scalar")))]
+ )
+ 
+-(define_insn "neon_vsub<mode>"
+-  [(set (match_operand:VDQX 0 "s_register_operand" "=w")
+-        (unspec:VDQX [(match_operand:VDQX 1 "s_register_operand" "w")
+-		      (match_operand:VDQX 2 "s_register_operand" "w")
+-                      (match_operand:SI 3 "immediate_operand" "i")]
+-                     UNSPEC_VSUB))]
++(define_expand "neon_vsub<mode>"
++  [(match_operand:VDQX 0 "s_register_operand" "=w")
++   (match_operand:VDQX 1 "s_register_operand" "w")
++   (match_operand:VDQX 2 "s_register_operand" "w")
++   (match_operand:SI 3 "immediate_operand" "i")]
+   "TARGET_NEON"
+-  "vsub.<V_if_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
+-  [(set (attr "neon_type")
+-      (if_then_else (ne (symbol_ref "<Is_float_mode>") (const_int 0))
+-                    (if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
+-                                  (const_string "neon_fp_vadd_ddd_vabs_dd")
+-                                  (const_string "neon_fp_vadd_qqq_vabs_qq"))
+-                    (const_string "neon_int_2")))]
+-)
++{
++  emit_insn (gen_sub<mode>3 (operands[0], operands[1], operands[2]));
++  DONE;
++})
+ 
+ (define_insn "neon_vsubl<mode>"
+   [(set (match_operand:<V_widen> 0 "s_register_operand" "=w")
+@@ -2093,11 +2219,11 @@
+ 
+ (define_insn "neon_vaba<mode>"
+   [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
+-        (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "0")
+-		       (match_operand:VDQIW 2 "s_register_operand" "w")
+-		       (match_operand:VDQIW 3 "s_register_operand" "w")
+-                       (match_operand:SI 4 "immediate_operand" "i")]
+-		      UNSPEC_VABA))]
++        (plus:VDQIW (match_operand:VDQIW 1 "s_register_operand" "0")
++                    (unspec:VDQIW [(match_operand:VDQIW 2 "s_register_operand" "w")
++		                   (match_operand:VDQIW 3 "s_register_operand" "w")
++                                   (match_operand:SI 4 "immediate_operand" "i")]
++		                  UNSPEC_VABD)))]
+   "TARGET_NEON"
+   "vaba.%T4%#<V_sz_elem>\t%<V_reg>0, %<V_reg>2, %<V_reg>3"
+   [(set (attr "neon_type")
+@@ -2107,11 +2233,11 @@
+ 
+ (define_insn "neon_vabal<mode>"
+   [(set (match_operand:<V_widen> 0 "s_register_operand" "=w")
+-        (unspec:<V_widen> [(match_operand:<V_widen> 1 "s_register_operand" "0")
+-		           (match_operand:VW 2 "s_register_operand" "w")
+-		           (match_operand:VW 3 "s_register_operand" "w")
+-                           (match_operand:SI 4 "immediate_operand" "i")]
+-                          UNSPEC_VABAL))]
++        (plus:<V_widen> (match_operand:<V_widen> 1 "s_register_operand" "0")
++                        (unspec:<V_widen> [(match_operand:VW 2 "s_register_operand" "w")
++                                           (match_operand:VW 3 "s_register_operand" "w")
++                                           (match_operand:SI 4 "immediate_operand" "i")]
++                          UNSPEC_VABDL)))]
+   "TARGET_NEON"
+   "vabal.%T4%#<V_sz_elem>\t%q0, %P2, %P3"
+   [(set_attr "neon_type" "neon_vaba")]
+@@ -2242,23 +2368,6 @@
+                     (const_string "neon_fp_vrecps_vrsqrts_qqq")))]
+ )
+ 
+-(define_insn "neon_vabs<mode>"
+-  [(set (match_operand:VDQW 0 "s_register_operand" "=w")
+-	(unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "w")
+-		      (match_operand:SI 2 "immediate_operand" "i")]
+-                     UNSPEC_VABS))]
+-  "TARGET_NEON"
+-  "vabs.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
+-  [(set (attr "neon_type")
+-     (if_then_else (ior (ne (symbol_ref "<Is_float_mode>") (const_int 0))
+-                        (ne (symbol_ref "<Is_float_mode>") (const_int 0)))
+-                   (if_then_else
+-                      (ne (symbol_ref "<Is_d_reg>") (const_int 0))
+-                      (const_string "neon_fp_vadd_ddd_vabs_dd")
+-                      (const_string "neon_fp_vadd_qqq_vabs_qq"))
+-                   (const_string "neon_vqneg_vqabs")))]
+-)
+-
+ (define_insn "neon_vqabs<mode>"
+   [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
+ 	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
+@@ -2299,26 +2408,42 @@
+   [(set_attr "neon_type" "neon_int_1")]
+ )
+ 
+-(define_insn "neon_vclz<mode>"
++(define_insn "clz<mode>2"
+   [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
+-	(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
+-		       (match_operand:SI 2 "immediate_operand" "i")]
+-		      UNSPEC_VCLZ))]
++        (clz:VDQIW (match_operand:VDQIW 1 "s_register_operand" "w")))]
+   "TARGET_NEON"
+   "vclz.<V_if_elem>\t%<V_reg>0, %<V_reg>1"
+   [(set_attr "neon_type" "neon_int_1")]
+ )
+ 
+-(define_insn "neon_vcnt<mode>"
++(define_expand "neon_vclz<mode>"
++  [(match_operand:VDQIW 0 "s_register_operand" "")
++   (match_operand:VDQIW 1 "s_register_operand" "")
++   (match_operand:SI 2 "immediate_operand" "")]
++  "TARGET_NEON"
++{
++  emit_insn (gen_clz<mode>2 (operands[0], operands[1]));
++  DONE;
++})
++
++(define_insn "popcount<mode>2"
+   [(set (match_operand:VE 0 "s_register_operand" "=w")
+-	(unspec:VE [(match_operand:VE 1 "s_register_operand" "w")
+-                    (match_operand:SI 2 "immediate_operand" "i")]
+-                   UNSPEC_VCNT))]
++        (popcount:VE (match_operand:VE 1 "s_register_operand" "w")))]
+   "TARGET_NEON"
+   "vcnt.<V_sz_elem>\t%<V_reg>0, %<V_reg>1"
+   [(set_attr "neon_type" "neon_int_1")]
+ )
+ 
++(define_expand "neon_vcnt<mode>"
++  [(match_operand:VE 0 "s_register_operand" "=w")
++   (match_operand:VE 1 "s_register_operand" "w")
++   (match_operand:SI 2 "immediate_operand" "i")]
++  "TARGET_NEON"
++{
++  emit_insn (gen_popcount<mode>2 (operands[0], operands[1]));
++  DONE;
++})
++
+ (define_insn "neon_vrecpe<mode>"
+   [(set (match_operand:V32 0 "s_register_operand" "=w")
+ 	(unspec:V32 [(match_operand:V32 1 "s_register_operand" "w")
+@@ -2495,126 +2620,65 @@
+ ; Operand 3 (info word) is ignored because it does nothing useful with 64-bit
+ ; elements.
+ 
+-(define_insn "neon_vget_lanedi"
+-  [(set (match_operand:DI 0 "s_register_operand" "=r")
+-       (unspec:DI [(match_operand:DI 1 "s_register_operand" "w")
+-                   (match_operand:SI 2 "immediate_operand" "i")
+-                   (match_operand:SI 3 "immediate_operand" "i")]
+-                  UNSPEC_VGET_LANE))]
++(define_expand "neon_vget_lanedi"
++  [(match_operand:DI 0 "s_register_operand" "=r")
++   (match_operand:DI 1 "s_register_operand" "w")
++   (match_operand:SI 2 "immediate_operand" "i")
++   (match_operand:SI 3 "immediate_operand" "i")]
+   "TARGET_NEON"
+ {
+   neon_lane_bounds (operands[2], 0, 1);
+-  return "vmov%?\t%Q0, %R0, %P1  @ di";
+-}
+-  [(set_attr "predicable" "yes")
+-   (set_attr "neon_type" "neon_bp_simple")]
+-)
++  emit_move_insn (operands[0], operands[1]);
++  DONE;
++})
+ 
+-(define_insn "neon_vget_lanev2di"
+-  [(set (match_operand:DI 0 "s_register_operand" "=r")
+-       (unspec:DI [(match_operand:V2DI 1 "s_register_operand" "w")
+-                   (match_operand:SI 2 "immediate_operand" "i")
+-                   (match_operand:SI 3 "immediate_operand" "i")]
+-                  UNSPEC_VGET_LANE))]
++(define_expand "neon_vget_lanev2di"
++  [(match_operand:DI 0 "s_register_operand" "=r")
++   (match_operand:V2DI 1 "s_register_operand" "w")
++   (match_operand:SI 2 "immediate_operand" "i")
++   (match_operand:SI 3 "immediate_operand" "i")]
+   "TARGET_NEON"
+ {
+-  rtx ops[2];
+-  unsigned int regno = REGNO (operands[1]);
+-  unsigned int elt = INTVAL (operands[2]);
+-
+   neon_lane_bounds (operands[2], 0, 2);
++  emit_insn (gen_vec_extractv2di (operands[0], operands[1], operands[2]));
++  DONE;
++})
+ 
+-  ops[0] = operands[0];
+-  ops[1] = gen_rtx_REG (DImode, regno + 2 * elt);
+-  output_asm_insn ("vmov%?\t%Q0, %R0, %P1  @ v2di", ops);
+-
+-  return "";
+-}
+-  [(set_attr "predicable" "yes")
+-   (set_attr "neon_type" "neon_bp_simple")]
+-)
+-
+-(define_insn "neon_vset_lane<mode>"
+-  [(set (match_operand:VD 0 "s_register_operand" "=w")
+-	(unspec:VD [(match_operand:<V_elem> 1 "s_register_operand" "r")
+-		    (match_operand:VD 2 "s_register_operand" "0")
+-                    (match_operand:SI 3 "immediate_operand" "i")]
+-                   UNSPEC_VSET_LANE))]
+-  "TARGET_NEON"
+-{
+-  neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode));
+-  return "vmov%?.<V_sz_elem>\t%P0[%c3], %1";
+-}
+-  [(set_attr "predicable" "yes")
+-   (set_attr "neon_type" "neon_bp_simple")]
+-)
+-
+-; See neon_vget_lanedi comment for reasons operands 2 & 3 are ignored.
+-
+-(define_insn "neon_vset_lanedi"
+-  [(set (match_operand:DI 0 "s_register_operand" "=w")
+-	(unspec:DI [(match_operand:DI 1 "s_register_operand" "r")
+-		    (match_operand:DI 2 "s_register_operand" "0")
+-                    (match_operand:SI 3 "immediate_operand" "i")]
+-                   UNSPEC_VSET_LANE))]
+-  "TARGET_NEON"
+-{
+-  neon_lane_bounds (operands[3], 0, 1);
+-  return "vmov%?\t%P0, %Q1, %R1  @ di";
+-}
+-  [(set_attr "predicable" "yes")
+-   (set_attr "neon_type" "neon_bp_simple")]
+-)
+-
+-(define_insn "neon_vset_lane<mode>"
+-  [(set (match_operand:VQ 0 "s_register_operand" "=w")
+-	(unspec:VQ [(match_operand:<V_elem> 1 "s_register_operand" "r")
+-		    (match_operand:VQ 2 "s_register_operand" "0")
+-                    (match_operand:SI 3 "immediate_operand" "i")]
+-                   UNSPEC_VSET_LANE))]
++(define_expand "neon_vset_lane<mode>"
++  [(match_operand:VDQ 0 "s_register_operand" "=w")
++   (match_operand:<V_elem> 1 "s_register_operand" "r")
++   (match_operand:VDQ 2 "s_register_operand" "0")
++   (match_operand:SI 3 "immediate_operand" "i")]
+   "TARGET_NEON"
+ {
+-  rtx ops[4];
+-  unsigned int regno = REGNO (operands[0]);
+-  unsigned int halfelts = GET_MODE_NUNITS (<MODE>mode) / 2;
+   unsigned int elt = INTVAL (operands[3]);
++  neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode));
+ 
+-  neon_lane_bounds (operands[3], 0, halfelts * 2);
++  if (BYTES_BIG_ENDIAN)
++    {
++      unsigned int reg_nelts
++	= 64 / GET_MODE_BITSIZE (GET_MODE_INNER (<MODE>mode));
++      elt ^= reg_nelts - 1;
++    }
+ 
+-  ops[0] = gen_rtx_REG (<V_HALF>mode, regno + 2 * (elt / halfelts));
+-  ops[1] = operands[1];
+-  ops[2] = GEN_INT (elt % halfelts);
+-  output_asm_insn ("vmov%?.<V_sz_elem>\t%P0[%c2], %1", ops);
++  emit_insn (gen_vec_set<mode>_internal (operands[0], operands[1],
++                                         GEN_INT (1 << elt), operands[2]));
++  DONE;
++})
+ 
+-  return "";
+-}
+-  [(set_attr "predicable" "yes")
+-   (set_attr "neon_type" "neon_bp_simple")]
+-)
++; See neon_vget_lanedi comment for reasons operands 2 & 3 are ignored.
+ 
+-(define_insn "neon_vset_lanev2di"
+-  [(set (match_operand:V2DI 0 "s_register_operand" "=w")
+-	(unspec:V2DI [(match_operand:DI 1 "s_register_operand" "r")
+-		      (match_operand:V2DI 2 "s_register_operand" "0")
+-                      (match_operand:SI 3 "immediate_operand" "i")]
+-                   UNSPEC_VSET_LANE))]
++(define_expand "neon_vset_lanedi"
++  [(match_operand:DI 0 "s_register_operand" "=w")
++   (match_operand:DI 1 "s_register_operand" "r")
++   (match_operand:DI 2 "s_register_operand" "0")
++   (match_operand:SI 3 "immediate_operand" "i")]
+   "TARGET_NEON"
+ {
+-  rtx ops[2];
+-  unsigned int regno = REGNO (operands[0]);
+-  unsigned int elt = INTVAL (operands[3]);
+-
+-  neon_lane_bounds (operands[3], 0, 2);
+-
+-  ops[0] = gen_rtx_REG (DImode, regno + 2 * elt);
+-  ops[1] = operands[1];
+-  output_asm_insn ("vmov%?\t%P0, %Q1, %R1  @ v2di", ops);
+-
+-  return "";
+-}
+-  [(set_attr "predicable" "yes")
+-   (set_attr "neon_type" "neon_bp_simple")]
+-)
++  neon_lane_bounds (operands[3], 0, 1);
++  emit_move_insn (operands[0], operands[1]);
++  DONE;
++})
+ 
+ (define_expand "neon_vcreate<mode>"
+   [(match_operand:VDX 0 "s_register_operand" "")
+@@ -2627,9 +2691,8 @@
+ })
+ 
+ (define_insn "neon_vdup_n<mode>"
+-  [(set (match_operand:VDQW 0 "s_register_operand" "=w")
+-	(unspec:VDQW [(match_operand:<V_elem> 1 "s_register_operand" "r")]
+-                    UNSPEC_VDUP_N))]
++  [(set (match_operand:VX 0 "s_register_operand" "=w")
++        (vec_duplicate:VX (match_operand:<V_elem> 1 "s_register_operand" "r")))]
+   "TARGET_NEON"
+   "vdup%?.<V_sz_elem>\t%<V_reg>0, %1"
+   ;; Assume this schedules like vmov.
+@@ -2637,61 +2700,88 @@
+    (set_attr "neon_type" "neon_bp_simple")]
+ )
+ 
+-(define_insn "neon_vdup_ndi"
+-  [(set (match_operand:DI 0 "s_register_operand" "=w")
+-	(unspec:DI [(match_operand:DI 1 "s_register_operand" "r")]
+-                   UNSPEC_VDUP_N))]
++(define_insn "neon_vdup_n<mode>"
++  [(set (match_operand:V32 0 "s_register_operand" "=w,w")
++        (vec_duplicate:V32 (match_operand:<V_elem> 1 "s_register_operand" "r,t")))]
+   "TARGET_NEON"
+-  "vmov%?\t%P0, %Q1, %R1"
++  "@
++  vdup%?.<V_sz_elem>\t%<V_reg>0, %1
++  vdup%?.<V_sz_elem>\t%<V_reg>0, %y1"
++  ;; Assume this schedules like vmov.
+   [(set_attr "predicable" "yes")
+    (set_attr "neon_type" "neon_bp_simple")]
+ )
+ 
++(define_expand "neon_vdup_ndi"
++  [(match_operand:DI 0 "s_register_operand" "=w")
++   (match_operand:DI 1 "s_register_operand" "r")]
++  "TARGET_NEON"
++{
++  emit_move_insn (operands[0], operands[1]);
++  DONE;
++}
++)
++
+ (define_insn "neon_vdup_nv2di"
+-  [(set (match_operand:V2DI 0 "s_register_operand" "=w")
+-	(unspec:V2DI [(match_operand:DI 1 "s_register_operand" "r")]
+-                     UNSPEC_VDUP_N))]
++  [(set (match_operand:V2DI 0 "s_register_operand" "=w,w")
++        (vec_duplicate:V2DI (match_operand:DI 1 "s_register_operand" "r,w")))]
+   "TARGET_NEON"
+-  "vmov%?\t%e0, %Q1, %R1\;vmov%?\t%f0, %Q1, %R1"
++  "@
++  vmov%?\t%e0, %Q1, %R1\;vmov%?\t%f0, %Q1, %R1
++  vmov%?\t%e0, %P1\;vmov%?\t%f0, %P1"
+   [(set_attr "predicable" "yes")
+    (set_attr "length" "8")
+    (set_attr "neon_type" "neon_bp_simple")]
+ )
+ 
+-(define_insn "neon_vdup_lane<mode>"
+-  [(set (match_operand:VD 0 "s_register_operand" "=w")
+-	(unspec:VD [(match_operand:VD 1 "s_register_operand" "w")
+-		    (match_operand:SI 2 "immediate_operand" "i")]
+-                   UNSPEC_VDUP_LANE))]
++(define_insn "neon_vdup_lane<mode>_internal"
++  [(set (match_operand:VDQW 0 "s_register_operand" "=w")
++  	(vec_duplicate:VDQW 
++          (vec_select:<V_elem>
++            (match_operand:<V_double_vector_mode> 1 "s_register_operand" "w")
++            (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
+   "TARGET_NEON"
+ {
+-  neon_lane_bounds (operands[2], 0, GET_MODE_NUNITS (<MODE>mode));
+-  return "vdup.<V_sz_elem>\t%P0, %P1[%c2]";
++  if (BYTES_BIG_ENDIAN)
++    {
++      int elt = INTVAL (operands[2]);
++      elt = GET_MODE_NUNITS (<V_double_vector_mode>mode) - 1 - elt;
++      operands[2] = GEN_INT (elt);
++    }
++  if (<Is_d_reg>)
++    return "vdup.<V_sz_elem>\t%P0, %P1[%c2]";
++  else
++    return "vdup.<V_sz_elem>\t%q0, %P1[%c2]";
+ }
+   ;; Assume this schedules like vmov.
+   [(set_attr "neon_type" "neon_bp_simple")]
+ )
+ 
+-(define_insn "neon_vdup_lane<mode>"
+-  [(set (match_operand:VQ 0 "s_register_operand" "=w")
+-	(unspec:VQ [(match_operand:<V_HALF> 1 "s_register_operand" "w")
+-		    (match_operand:SI 2 "immediate_operand" "i")]
+-                   UNSPEC_VDUP_LANE))]
++(define_expand "neon_vdup_lane<mode>"
++  [(match_operand:VDQW 0 "s_register_operand" "=w")
++   (match_operand:<V_double_vector_mode> 1 "s_register_operand" "w")
++   (match_operand:SI 2 "immediate_operand" "i")]
+   "TARGET_NEON"
+ {
+-  neon_lane_bounds (operands[2], 0, GET_MODE_NUNITS (<V_HALF>mode));
+-  return "vdup.<V_sz_elem>\t%q0, %P1[%c2]";
+-}
+-  ;; Assume this schedules like vmov.
+-  [(set_attr "neon_type" "neon_bp_simple")]
+-)
++  neon_lane_bounds (operands[2], 0, GET_MODE_NUNITS (<V_double_vector_mode>mode));
++  if (BYTES_BIG_ENDIAN)
++    {
++      unsigned int elt = INTVAL (operands[2]);
++      unsigned int reg_nelts
++	= 64 / GET_MODE_BITSIZE (GET_MODE_INNER (<V_double_vector_mode>mode));
++      elt ^= reg_nelts - 1;
++      operands[2] = GEN_INT (elt);
++    }
++    emit_insn (gen_neon_vdup_lane<mode>_internal (operands[0], operands[1],
++                                                  operands[2]));
++    DONE;
++})
+ 
+ ; Scalar index is ignored, since only zero is valid here.
+ (define_expand "neon_vdup_lanedi"
+-  [(set (match_operand:DI 0 "s_register_operand" "=w")
+-	(unspec:DI [(match_operand:DI 1 "s_register_operand" "w")
+-		    (match_operand:SI 2 "immediate_operand" "i")]
+-                   UNSPEC_VDUP_LANE))]
++  [(match_operand:DI 0 "s_register_operand" "=w")
++   (match_operand:DI 1 "s_register_operand" "w")
++   (match_operand:SI 2 "immediate_operand" "i")]
+   "TARGET_NEON"
+ {
+   neon_lane_bounds (operands[2], 0, 1);
+@@ -2699,20 +2789,17 @@
+   DONE;
+ })
+ 
+-; Likewise.
+-(define_insn "neon_vdup_lanev2di"
+-  [(set (match_operand:V2DI 0 "s_register_operand" "=w")
+-	(unspec:V2DI [(match_operand:DI 1 "s_register_operand" "w")
+-		      (match_operand:SI 2 "immediate_operand" "i")]
+-                     UNSPEC_VDUP_LANE))]
++; Likewise for v2di, as the DImode second operand has only a single element.
++(define_expand "neon_vdup_lanev2di"
++  [(match_operand:V2DI 0 "s_register_operand" "=w")
++   (match_operand:DI 1 "s_register_operand" "w")
++   (match_operand:SI 2 "immediate_operand" "i")]
+   "TARGET_NEON"
+ {
+   neon_lane_bounds (operands[2], 0, 1);
+-  return "vmov\t%e0, %P1\;vmov\t%f0, %P1";
+-}
+-  [(set_attr "length" "8")
+-   (set_attr "neon_type" "neon_bp_simple")]
+-)
++  emit_insn (gen_neon_vdup_nv2di (operands[0], operands[1]));
++  DONE;
++})
+ 
+ ;; In this insn, operand 1 should be low, and operand 2 the high part of the
+ ;; dest vector.
+@@ -2723,9 +2810,8 @@
+ 
+ (define_insn "neon_vcombine<mode>"
+   [(set (match_operand:<V_DOUBLE> 0 "s_register_operand" "=w")
+-	(unspec:<V_DOUBLE> [(match_operand:VDX 1 "s_register_operand" "w")
+-			    (match_operand:VDX 2 "s_register_operand" "w")]
+-                           UNSPEC_VCOMBINE))]
++        (vec_concat:<V_DOUBLE> (match_operand:VDX 1 "s_register_operand" "w")
++			       (match_operand:VDX 2 "s_register_operand" "w")))]
+   "TARGET_NEON"
+ {
+   int dest = REGNO (operands[0]);
+@@ -2765,10 +2851,13 @@
+    (set_attr "neon_type" "neon_bp_simple")]
+ )
+ 
+-(define_insn "neon_vget_high<mode>"
+-  [(set (match_operand:<V_HALF> 0 "s_register_operand" "=w")
+-	(unspec:<V_HALF> [(match_operand:VQX 1 "s_register_operand" "w")]
+-			 UNSPEC_VGET_HIGH))]
++(define_insn "neon_vget_highv16qi"
++  [(set (match_operand:V8QI 0 "s_register_operand" "=w")
++	(vec_select:V8QI (match_operand:V16QI 1 "s_register_operand" "w")
++                         (parallel [(const_int 8) (const_int 9)
++			            (const_int 10) (const_int 11)
++				    (const_int 12) (const_int 13)
++				    (const_int 14) (const_int 15)])))]
+   "TARGET_NEON"
+ {
+   int dest = REGNO (operands[0]);
+@@ -2782,10 +2871,151 @@
+   [(set_attr "neon_type" "neon_bp_simple")]
+ )
+ 
+-(define_insn "neon_vget_low<mode>"
+-  [(set (match_operand:<V_HALF> 0 "s_register_operand" "=w")
+-	(unspec:<V_HALF> [(match_operand:VQX 1 "s_register_operand" "w")]
+-			 UNSPEC_VGET_LOW))]
++(define_insn "neon_vget_highv8hi"
++  [(set (match_operand:V4HI 0 "s_register_operand" "=w")
++	(vec_select:V4HI (match_operand:V8HI 1 "s_register_operand" "w")
++	                 (parallel [(const_int 4) (const_int 5)
++			            (const_int 6) (const_int 7)])))]
++  "TARGET_NEON"
++{
++  int dest = REGNO (operands[0]);
++  int src = REGNO (operands[1]);
++
++  if (dest != src + 2)
++    return "vmov\t%P0, %f1";
++  else
++    return "";
++}
++  [(set_attr "neon_type" "neon_bp_simple")]
++)
++
++(define_insn "neon_vget_highv4si"
++  [(set (match_operand:V2SI 0 "s_register_operand" "=w")
++	(vec_select:V2SI (match_operand:V4SI 1 "s_register_operand" "w")
++	                 (parallel [(const_int 2) (const_int 3)])))]
++  "TARGET_NEON"
++{
++  int dest = REGNO (operands[0]);
++  int src = REGNO (operands[1]);
++
++  if (dest != src + 2)
++    return "vmov\t%P0, %f1";
++  else
++    return "";
++}
++  [(set_attr "neon_type" "neon_bp_simple")]
++)
++
++(define_insn "neon_vget_highv4sf"
++  [(set (match_operand:V2SF 0 "s_register_operand" "=w")
++	(vec_select:V2SF (match_operand:V4SF 1 "s_register_operand" "w")
++	                 (parallel [(const_int 2) (const_int 3)])))]
++  "TARGET_NEON"
++{
++  int dest = REGNO (operands[0]);
++  int src = REGNO (operands[1]);
++
++  if (dest != src + 2)
++    return "vmov\t%P0, %f1";
++  else
++    return "";
++}
++  [(set_attr "neon_type" "neon_bp_simple")]
++)
++
++(define_insn "neon_vget_highv2di"
++  [(set (match_operand:DI 0 "s_register_operand" "=w")
++	(vec_select:DI (match_operand:V2DI 1 "s_register_operand" "w")
++	               (parallel [(const_int 1)])))]
++  "TARGET_NEON"
++{
++  int dest = REGNO (operands[0]);
++  int src = REGNO (operands[1]);
++
++  if (dest != src + 2)
++    return "vmov\t%P0, %f1";
++  else
++    return "";
++}
++  [(set_attr "neon_type" "neon_bp_simple")]
++)
++
++(define_insn "neon_vget_lowv16qi"
++  [(set (match_operand:V8QI 0 "s_register_operand" "=w")
++	(vec_select:V8QI (match_operand:V16QI 1 "s_register_operand" "w")
++                         (parallel [(const_int 0) (const_int 1)
++			            (const_int 2) (const_int 3)
++				    (const_int 4) (const_int 5)
++				    (const_int 6) (const_int 7)])))]
++  "TARGET_NEON"
++{
++  int dest = REGNO (operands[0]);
++  int src = REGNO (operands[1]);
++
++  if (dest != src)
++    return "vmov\t%P0, %e1";
++  else
++    return "";
++}
++  [(set_attr "neon_type" "neon_bp_simple")]
++)
++
++(define_insn "neon_vget_lowv8hi"
++  [(set (match_operand:V4HI 0 "s_register_operand" "=w")
++	(vec_select:V4HI (match_operand:V8HI 1 "s_register_operand" "w")
++	                 (parallel [(const_int 0) (const_int 1)
++			            (const_int 2) (const_int 3)])))]
++  "TARGET_NEON"
++{
++  int dest = REGNO (operands[0]);
++  int src = REGNO (operands[1]);
++
++  if (dest != src)
++    return "vmov\t%P0, %e1";
++  else
++    return "";
++}
++  [(set_attr "neon_type" "neon_bp_simple")]
++)
++
++(define_insn "neon_vget_lowv4si"
++  [(set (match_operand:V2SI 0 "s_register_operand" "=w")
++	(vec_select:V2SI (match_operand:V4SI 1 "s_register_operand" "w")
++	                 (parallel [(const_int 0) (const_int 1)])))]
++  "TARGET_NEON"
++{
++  int dest = REGNO (operands[0]);
++  int src = REGNO (operands[1]);
++
++  if (dest != src)
++    return "vmov\t%P0, %e1";
++  else
++    return "";
++}
++  [(set_attr "neon_type" "neon_bp_simple")]
++)
++
++(define_insn "neon_vget_lowv4sf"
++  [(set (match_operand:V2SF 0 "s_register_operand" "=w")
++	(vec_select:V2SF (match_operand:V4SF 1 "s_register_operand" "w")
++	                 (parallel [(const_int 0) (const_int 1)])))]
++  "TARGET_NEON"
++{
++  int dest = REGNO (operands[0]);
++  int src = REGNO (operands[1]);
++
++  if (dest != src)
++    return "vmov\t%P0, %e1";
++  else
++    return "";
++}
++  [(set_attr "neon_type" "neon_bp_simple")]
++)
++
++(define_insn "neon_vget_lowv2di"
++  [(set (match_operand:DI 0 "s_register_operand" "=w")
++	(vec_select:DI (match_operand:V2DI 1 "s_register_operand" "w")
++	               (parallel [(const_int 0)])))]
+   "TARGET_NEON"
+ {
+   int dest = REGNO (operands[0]);
+--- a/src/gcc/config/arm/neon.ml
++++ b/src/gcc/config/arm/neon.ml
+@@ -50,7 +50,7 @@
+              | T_ptrto of vectype | T_const of vectype
+              | T_void      | T_intQI
+              | T_intHI     | T_intSI
+-             | T_intDI
++             | T_intDI     | T_floatSF
+ 
+ (* The meanings of the following are:
+      TImode : "Tetra", two registers (four words).
+@@ -68,6 +68,7 @@
+ 	       | Element_of_dreg	(* Used for "lane" variants.  *)
+ 	       | Element_of_qreg	(* Likewise.  *)
+ 	       | All_elements_of_dreg	(* Used for "dup" variants.  *)
++	       | Alternatives of shape_elt list (* Used for multiple valid operands *)
+ 
+ type shape_form = All of int * shape_elt
+                 | Long
+@@ -708,7 +709,8 @@
+ let ops =
+   [
+     (* Addition.  *)
+-    Vadd, [], All (3, Dreg), "vadd", sign_invar_2, F32 :: su_8_64;
++    Vadd, [], All (3, Dreg), "vadd", sign_invar_2, F32 :: su_8_32;
++    Vadd, [No_op], All (3, Dreg), "vadd", sign_invar_2, [S64; U64];
+     Vadd, [], All (3, Qreg), "vaddQ", sign_invar_2, F32 :: su_8_64;
+     Vadd, [], Long, "vaddl", elts_same_2, su_8_32;
+     Vadd, [], Wide, "vaddw", elts_same_2, su_8_32;
+@@ -757,7 +759,8 @@
+     Vmls, [Saturating; Doubling], Long, "vqdmlsl", elts_same_io, [S16; S32];
+ 
+     (* Subtraction.  *)
+-    Vsub, [], All (3, Dreg), "vsub", sign_invar_2, F32 :: su_8_64;
++    Vsub, [], All (3, Dreg), "vsub", sign_invar_2, F32 :: su_8_32;
++    Vsub, [No_op], All (3, Dreg), "vsub", sign_invar_2,  [S64; U64];
+     Vsub, [], All (3, Qreg), "vsubQ", sign_invar_2, F32 :: su_8_64;
+     Vsub, [], Long, "vsubl", elts_same_2, su_8_32;
+     Vsub, [], Wide, "vsubw", elts_same_2, su_8_32;
+@@ -966,7 +969,8 @@
+       Use_operands [| Corereg; Dreg; Immed |],
+       "vget_lane", get_lane, pf_su_8_32;
+     Vget_lane,
+-      [InfoWord;
++      [No_op;
++       InfoWord;
+        Disassembles_as [Use_operands [| Corereg; Corereg; Dreg |]];
+        Instruction_name ["vmov"]; Const_valuator (fun _ -> 0)],
+       Use_operands [| Corereg; Dreg; Immed |],
+@@ -988,7 +992,8 @@
+                 Instruction_name ["vmov"]],
+       Use_operands [| Dreg; Corereg; Dreg; Immed |], "vset_lane",
+       set_lane, pf_su_8_32;
+-    Vset_lane, [Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]];
++    Vset_lane, [No_op;
++                Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]];
+                 Instruction_name ["vmov"]; Const_valuator (fun _ -> 0)],
+       Use_operands [| Dreg; Corereg; Dreg; Immed |], "vset_lane",
+       set_lane_notype, [S64; U64];
+@@ -1009,19 +1014,27 @@
+       pf_su_8_64;
+ 
+     (* Set all lanes to the same value.  *)
+-    Vdup_n, [],
++    Vdup_n,
++      [Disassembles_as [Use_operands [| Dreg;
++                                        Alternatives [ Corereg;
++                                                       Element_of_dreg ] |]]],
+       Use_operands [| Dreg; Corereg |], "vdup_n", bits_1,
+       pf_su_8_32;
+     Vdup_n,
+-      [Instruction_name ["vmov"];
++      [No_op;
++       Instruction_name ["vmov"];
+        Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]]],
+       Use_operands [| Dreg; Corereg |], "vdup_n", notype_1,
+       [S64; U64];
+-    Vdup_n, [],
++    Vdup_n,
++      [Disassembles_as [Use_operands [| Qreg;
++                                        Alternatives [ Corereg;
++                                                       Element_of_dreg ] |]]],
+       Use_operands [| Qreg; Corereg |], "vdupQ_n", bits_1,
+       pf_su_8_32;
+     Vdup_n,
+-      [Instruction_name ["vmov"];
++      [No_op;
++       Instruction_name ["vmov"];
+        Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |];
+                         Use_operands [| Dreg; Corereg; Corereg |]]],
+       Use_operands [| Qreg; Corereg |], "vdupQ_n", notype_1,
+@@ -1029,21 +1042,29 @@
+ 
+     (* These are just aliases for the above.  *)
+     Vmov_n,
+-      [Builtin_name "vdup_n"],
++      [Builtin_name "vdup_n";
++       Disassembles_as [Use_operands [| Dreg;
++                                        Alternatives [ Corereg;
++                                                       Element_of_dreg ] |]]],
+       Use_operands [| Dreg; Corereg |],
+       "vmov_n", bits_1, pf_su_8_32;
+     Vmov_n,
+-      [Builtin_name "vdup_n";
++      [No_op;
++       Builtin_name "vdup_n";
+        Instruction_name ["vmov"];
+        Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]]],
+       Use_operands [| Dreg; Corereg |],
+       "vmov_n", notype_1, [S64; U64];
+     Vmov_n,
+-      [Builtin_name "vdupQ_n"],
++      [Builtin_name "vdupQ_n";
++       Disassembles_as [Use_operands [| Qreg;
++                                        Alternatives [ Corereg;
++                                                       Element_of_dreg ] |]]],
+       Use_operands [| Qreg; Corereg |],
+       "vmovQ_n", bits_1, pf_su_8_32;
+     Vmov_n,
+-      [Builtin_name "vdupQ_n";
++      [No_op;
++       Builtin_name "vdupQ_n";
+        Instruction_name ["vmov"];
+        Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |];
+                         Use_operands [| Dreg; Corereg; Corereg |]]],
+@@ -1600,23 +1621,28 @@
+       store_3, [P16; F32; U16; U32; S16; S32];
+ 
+     (* Logical operations. And.  *)
+-    Vand, [], All (3, Dreg), "vand", notype_2, su_8_64;
++    Vand, [], All (3, Dreg), "vand", notype_2, su_8_32;
++    Vand, [No_op], All (3, Dreg), "vand", notype_2, [S64; U64];
+     Vand, [], All (3, Qreg), "vandQ", notype_2, su_8_64;
+ 
+     (* Or.  *)
+-    Vorr, [], All (3, Dreg), "vorr", notype_2, su_8_64;
++    Vorr, [], All (3, Dreg), "vorr", notype_2, su_8_32;
++    Vorr, [No_op], All (3, Dreg), "vorr", notype_2, [S64; U64];
+     Vorr, [], All (3, Qreg), "vorrQ", notype_2, su_8_64;
+ 
+     (* Eor.  *)
+-    Veor, [], All (3, Dreg), "veor", notype_2, su_8_64;
++    Veor, [], All (3, Dreg), "veor", notype_2, su_8_32;
++    Veor, [No_op], All (3, Dreg), "veor", notype_2, [S64; U64];
+     Veor, [], All (3, Qreg), "veorQ", notype_2, su_8_64;
+ 
+     (* Bic (And-not).  *)
+-    Vbic, [], All (3, Dreg), "vbic", notype_2, su_8_64;
++    Vbic, [], All (3, Dreg), "vbic", notype_2, su_8_32;
++    Vbic, [No_op], All (3, Dreg), "vbic", notype_2, [S64; U64];
+     Vbic, [], All (3, Qreg), "vbicQ", notype_2, su_8_64;
+ 
+     (* Or-not.  *)
+-    Vorn, [], All (3, Dreg), "vorn", notype_2, su_8_64;
++    Vorn, [], All (3, Dreg), "vorn", notype_2, su_8_32;
++    Vorn, [No_op], All (3, Dreg), "vorn", notype_2, [S64; U64];
+     Vorn, [], All (3, Qreg), "vornQ", notype_2, su_8_64;
+   ]
+ 
+@@ -1698,6 +1724,7 @@
+   | T_intHI -> "__builtin_neon_hi"
+   | T_intSI -> "__builtin_neon_si"
+   | T_intDI -> "__builtin_neon_di"
++  | T_floatSF -> "__builtin_neon_sf"
+   | T_arrayof (num, base) ->
+       let basename = name (fun x -> x) base in
+       affix (Printf.sprintf "%sx%d" basename num)
+--- a/src/gcc/config/arm/netbsd-elf.h
++++ b/src/gcc/config/arm/netbsd-elf.h
+@@ -153,5 +153,5 @@
+ while (0)
+ 
+ #undef FPUTYPE_DEFAULT
+-#define FPUTYPE_DEFAULT FPUTYPE_VFP
++#define FPUTYPE_DEFAULT "vfp"
+ 
+--- a/src/gcc/config/arm/nocrt0.h
++++ b/src/gcc/config/arm/nocrt0.h
+@@ -0,0 +1,25 @@
++/* Definitions for generic libgloss based cofigs where crt0 is supplied by
++   the linker script.
++   Copyright (C) 2006 Free Software Foundation, Inc.
++
++   This file is part of GCC.
++
++   GCC is free software; you can redistribute it and/or modify it
++   under the terms of the GNU General Public License as published
++   by the Free Software Foundation; either version 3, or (at your
++   option) any later version.
++
++   GCC is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
++   License for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with GCC; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++#undef  STARTFILE_SPEC
++#define STARTFILE_SPEC	" crti%O%s crtbegin%O%s"
++
++#undef LIB_SPEC
++#define LIB_SPEC "-lc"
+--- a/src/gcc/config/arm/nucleus.h
++++ b/src/gcc/config/arm/nucleus.h
+@@ -0,0 +1,60 @@
++/* Configuration file for ARM nucleus targets.
++   Copyright (C) 2010
++   Free Software Foundation, Inc.
++   Contributed by Nathan Sidwell (nathan@codesourcery.com)
++
++   This file is part of GCC.
++
++   GCC is free software; you can redistribute it and/or modify it
++   under the terms of the GNU General Public License as published
++   by the Free Software Foundation; either version 3, or (at your
++   option) any later version.
++
++   GCC is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
++   License for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with GCC; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++#if NUCLEUS_SHARED_EXEC
++/* Executables are really shared objects, so default to building a .so
++ */
++#undef LINK_SPEC
++#define LINK_SPEC "%{!static:%{!shared:-shared -z defs}} " BPABI_LINK_SPEC
++#undef STARTFILE_SPEC
++#define STARTFILE_SPEC "crti%O%s %{!static:crtbeginS%O%s;:crtbegin%O%s}"
++#undef ENDFILE_SPEC
++#define ENDFILE_SPEC "%{!static:crtendS%O%s;:crtend%O%s} crtn%O%s"
++#define NUCLEUS_SHARED_CPP_BUILTINS()		\
++  do						\
++    {						\
++      builtin_define_std ("shared");		\
++    }						\
++  while (0)
++#else
++#define NUCLEUS_SHARED_CPP_BUILTINS() do {} while (0)
++#endif
++/* On nucleaus EABI, we want both the BPABI builtins and a
++   nucleaus builtin.  */
++#undef  TARGET_OS_CPP_BUILTINS
++#define TARGET_OS_CPP_BUILTINS() 		\
++  do 						\
++    {						\
++      TARGET_BPABI_CPP_BUILTINS();		\
++      builtin_define_std ("nucleus");		\
++      NUCLEUS_SHARED_CPP_BUILTINS();		\
++    }						\
++  while (0)
++
++/* wide chars are 16 bit */
++#undef WCHAR_TYPE
++#define WCHAR_TYPE "short int"
++#define WCHAR_TYPE_SIZE 16
++
++/* Use --as-needed -lgcc_s for eh support.  */
++#ifdef HAVE_LD_AS_NEEDED
++#define USE_LD_AS_NEEDED 1
++#endif
+--- a/src/gcc/config/arm/pe-cxx.c
++++ b/src/gcc/config/arm/pe-cxx.c
+@@ -0,0 +1,167 @@
++/* Target support for C++ classes on Windows.
++   Contributed by Danny Smith (dannysmith@users.sourceforge.net)
++   Copyright (C) 2005
++   Free Software Foundation, Inc.
++
++   This file is part of GCC.
++
++   GCC is free software; you can redistribute it and/or modify it
++   under the terms of the GNU General Public License as published
++   by the Free Software Foundation; either version 3, or (at your
++   option) any later version.
++
++   GCC is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
++   License for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with GCC; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++#include "config.h"
++#include "system.h"
++#include "coretypes.h"
++#include "tm.h"
++#include "rtl.h"
++#include "regs.h"
++#include "hard-reg-set.h"
++#include "output.h"
++#include "tree.h"
++#include "cp/cp-tree.h" /* this is why we're a separate module */
++#include "flags.h"
++#include "tm_p.h"
++#include "toplev.h"
++#include "hashtab.h"
++
++bool
++arm_pe_type_dllimport_p (tree decl)
++{
++   gcc_assert (TREE_CODE (decl) == VAR_DECL
++               || TREE_CODE (decl) == FUNCTION_DECL);
++
++   if (TARGET_NOP_FUN_DLLIMPORT && TREE_CODE (decl) == FUNCTION_DECL)
++     return false;
++
++   /* We ignore the dllimport attribute for inline member functions.
++      This differs from MSVC behavior which treats it like GNUC
++      'extern inline' extension.  Also ignore for template
++      instantiations with linkonce semantics and artificial methods.  */
++    if (TREE_CODE (decl) ==  FUNCTION_DECL
++        && (DECL_DECLARED_INLINE_P (decl)
++	    || DECL_TEMPLATE_INSTANTIATION (decl)
++	    || DECL_ARTIFICIAL (decl)))
++      return false;
++
++   /* Since we can't treat a pointer to a dllimport'd symbol as a
++       constant address, we turn off the attribute on C++ virtual
++       methods to allow creation of vtables using thunks.  */
++    else if (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
++	     && DECL_VIRTUAL_P (decl))
++      {
++	/* Even though we ignore the attribute from the start, warn if we later see
++	   an out-of class definition, as we do for other member functions in
++	   tree.c:merge_dllimport_decl_attributes.  If this is the key method, the
++	   definition may affect the import-export status of vtables, depending
++           on how we handle MULTIPLE_SYMBOL_SPACES in cp/decl2.c.   */
++	if (DECL_INITIAL (decl))
++	  {
++	    warning (OPT_Wattributes, "%q+D redeclared without dllimport attribute: "
++		    "previous dllimport ignored", decl);
++#ifdef PE_DLL_DEBUG
++	    if (decl == CLASSTYPE_KEY_METHOD (DECL_CONTEXT (decl)))            
++	      warning (OPT_Wattributes, "key method %q+D of dllimport'd class defined"
++		       decl);
++#endif
++	  }
++	return false;
++      }
++
++      /* Don't mark defined functions as dllimport.  This code will only be
++         reached if we see a non-inline function defined out-of-class.  */
++    else if (TREE_CODE (decl) ==  FUNCTION_DECL
++	     && (DECL_INITIAL (decl)))
++      return false;
++
++    /*  Don't allow definitions of static data members in dllimport class,
++        If vtable data is marked as DECL_EXTERNAL, import it; otherwise just
++        ignore the class attribute.  */
++    else if (TREE_CODE (decl) == VAR_DECL
++	     && TREE_STATIC (decl) && TREE_PUBLIC (decl)
++	     && !DECL_EXTERNAL (decl))
++      {
++	if (!DECL_VIRTUAL_P (decl))
++	     error ("definition of static data member %q+D of "
++		    "dllimport'd class", decl);
++	return false;
++      }
++
++    return true;
++}
++
++
++bool
++arm_pe_type_dllexport_p (tree decl)
++{
++   gcc_assert (TREE_CODE (decl) == VAR_DECL 
++               || TREE_CODE (decl) == FUNCTION_DECL);
++   /* Avoid exporting compiler-generated default dtors and copy ctors.
++      The only artificial methods that need to be exported are virtual
++      and non-virtual thunks.  */
++   if (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
++       && DECL_ARTIFICIAL (decl) && !DECL_THUNK_P (decl))
++     return false;
++   return true;
++}
++
++static inline void maybe_add_dllimport (tree decl)
++/* void maybe_add_dllimport (tree decl) */
++{
++  if (arm_pe_type_dllimport_p (decl))
++    DECL_DLLIMPORT_P (decl) = 1;   
++}
++
++void
++arm_pe_adjust_class_at_definition (tree t)
++{
++  tree member;
++
++  gcc_assert (CLASS_TYPE_P (t));
++
++ /* We only look at dllimport.  The only thing that dllexport does is
++    add stuff to a '.drectiv' section at end-of-file, so no need to do
++    anything for dllexport'd classes until we generate RTL. */  
++  if (lookup_attribute ("dllimport", TYPE_ATTRIBUTES (t)) == NULL_TREE)
++    return;
++
++  /* We don't actually add the attribute to the decl, just set the flag
++     that signals that the address of this symbol is not a compile-time
++     constant.   Any subsequent out-of-class declaration of members wil
++     cause the DECL_DLLIMPORT_P flag to be unset.
++     (See  tree.c: merge_dllimport_decl_attributes).
++     That is just right since out-of class declarations can only be a
++     definition.  We recheck the class members  at RTL generation to
++     emit warnings if this has happened.  Definition of static data member
++     of dllimport'd class always causes an error (as per MS compiler).
++     */
++
++  /* Check static VAR_DECL's.  */
++  for (member = TYPE_FIELDS (t); member; member = TREE_CHAIN (member))
++    if (TREE_CODE (member) == VAR_DECL)     
++      maybe_add_dllimport (member);
++    
++  /* Check FUNCTION_DECL's.  */
++  for (member = TYPE_METHODS (t); member;  member = TREE_CHAIN (member))
++    if (TREE_CODE (member) == FUNCTION_DECL)      
++      maybe_add_dllimport (member);
++ 
++  /* Check vtables  */
++  for (member = CLASSTYPE_VTABLES (t); member;  member = TREE_CHAIN (member))
++    if (TREE_CODE (member) == VAR_DECL) 
++      maybe_add_dllimport (member);
++
++/* We leave typeinfo tables alone.  We can't mark TI objects as
++     dllimport, since the address of a secondary VTT may be needed
++     for static initialization of a primary VTT.  VTT's  of
++     dllimport'd classes should always be link-once COMDAT.  */ 
++}
+--- a/src/gcc/config/arm/pe-stubs.c
++++ b/src/gcc/config/arm/pe-stubs.c
+@@ -0,0 +1,52 @@
++/* Dummy subroutines for language-specific support on Windows.
++   Contributed by Danny Smith (dannysmith@users.sourceforge.net)
++   Copyright (C) 2005
++   Free Software Foundation, Inc.
++
++   This file is part of GCC.
++
++   GCC is free software; you can redistribute it and/or modify it
++   under the terms of the GNU General Public License as published
++   by the Free Software Foundation; either version 3, or (at your
++   option) any later version.
++
++   GCC is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
++   License for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with GCC; see the file COPYING3.  If not see
++   <http://www.gnu.org/licenses/>.  */
++
++#include "config.h"
++#include "system.h"
++#include "coretypes.h"
++#include "tm.h"
++#include "rtl.h"
++#include "regs.h"
++#include "hard-reg-set.h"
++#include "output.h"
++#include "tree.h"
++#include "flags.h"
++#include "tm_p.h"
++#include "toplev.h"
++#include "hashtab.h"
++
++bool
++arm_pe_type_dllimport_p (tree decl ATTRIBUTE_UNUSED)
++{
++  return false;
++}
++
++
++bool
++arm_pe_type_dllexport_p (tree decl ATTRIBUTE_UNUSED)
++{
++  return false;
++}
++
++
++void
++arm_pe_adjust_class_at_definition (tree t ATTRIBUTE_UNUSED)
++{ }
+--- a/src/gcc/config/arm/pe.opt
++++ b/src/gcc/config/arm/pe.opt
+@@ -21,3 +21,7 @@
+ mnop-fun-dllimport
+ Target Report Mask(NOP_FUN_DLLIMPORT)
+ Ignore dllimport attribute for functions
++
++mms-bitfields
++Target Report Mask(MS_BITFIELD_LAYOUT)
++Use native (MS) bitfield layout
+--- a/src/gcc/config/arm/predicates.md
++++ b/src/gcc/config/arm/predicates.md
+@@ -73,6 +73,10 @@
+ 	      || REGNO_REG_CLASS (REGNO (op)) == FPA_REGS));
+ })
+ 
++(define_special_predicate "subreg_lowpart_operator"
++  (and (match_code "subreg")
++       (match_test "subreg_lowpart_p (op)")))
++
+ ;; Reg, subreg(reg) or const_int.
+ (define_predicate "reg_or_int_operand"
+   (ior (match_code "const_int")
+@@ -82,6 +86,12 @@
+   (and (match_code "const_int")
+        (match_test "const_ok_for_arm (INTVAL (op))")))
+ 
++;; A constant value which fits into two instructions, each taking
++;; an arithmetic constant operand for one of the words.
++(define_predicate "arm_immediate_di_operand"
++  (and (match_code "const_int,const_double")
++       (match_test "arm_const_double_by_immediates (op)")))
++
+ (define_predicate "arm_neg_immediate_operand"
+   (and (match_code "const_int")
+        (match_test "const_ok_for_arm (-INTVAL (op))")))
+@@ -111,6 +121,10 @@
+   (ior (match_operand 0 "arm_rhs_operand")
+        (match_operand 0 "arm_not_immediate_operand")))
+ 
++(define_predicate "arm_di_operand"
++  (ior (match_operand 0 "s_register_operand")
++       (match_operand 0 "arm_immediate_di_operand")))
++
+ ;; True if the operand is a memory reference which contains an
+ ;; offsettable address.
+ (define_predicate "offsettable_memory_operand"
+@@ -168,6 +182,11 @@
+   (and (match_code "plus,minus,ior,xor,and")
+        (match_test "mode == GET_MODE (op)")))
+ 
++;; True for plus/minus operators
++(define_special_predicate "plusminus_operator"
++  (and (match_code "plus,minus")
++       (match_test "mode == GET_MODE (op)")))
++
+ ;; True for logical binary operators.
+ (define_special_predicate "logical_binary_operator"
+   (and (match_code "ior,xor,and")
+@@ -280,10 +299,9 @@
+        (and (match_code "reg,subreg,mem")
+ 	    (match_operand 0 "nonimmediate_soft_df_operand"))))
+ 
+-(define_predicate "const_shift_operand"
++(define_predicate "const_shift_count"
+   (and (match_code "const_int")
+-       (ior (match_operand 0 "power_of_two_operand")
+-	    (match_test "((unsigned HOST_WIDE_INT) INTVAL (op)) < 32"))))
++       (match_test "((unsigned HOST_WIDE_INT) INTVAL (op)) < 32")))
+ 
+ 
+ (define_special_predicate "load_multiple_operation"
+@@ -295,6 +313,9 @@
+   HOST_WIDE_INT i = 1, base = 0;
+   rtx elt;
+ 
++  if (low_irq_latency)
++    return false;
++
+   if (count <= 1
+       || GET_CODE (XVECEXP (op, 0, 0)) != SET)
+     return false;
+@@ -352,6 +373,9 @@
+   HOST_WIDE_INT i = 1, base = 0;
+   rtx elt;
+ 
++  if (low_irq_latency)
++    return false;
++
+   if (count <= 1
+       || GET_CODE (XVECEXP (op, 0, 0)) != SET)
+     return false;
+@@ -491,13 +515,15 @@
+ (define_predicate "imm_for_neon_logic_operand"
+   (match_code "const_vector")
+ {
+-  return neon_immediate_valid_for_logic (op, mode, 0, NULL, NULL);
++  return (TARGET_NEON
++          && neon_immediate_valid_for_logic (op, mode, 0, NULL, NULL));
+ })
+ 
+ (define_predicate "imm_for_neon_inv_logic_operand"
+   (match_code "const_vector")
+ {
+-  return neon_immediate_valid_for_logic (op, mode, 1, NULL, NULL);
++  return (TARGET_NEON
++          && neon_immediate_valid_for_logic (op, mode, 1, NULL, NULL));
+ })
+ 
+ (define_predicate "neon_logic_op2"
+@@ -513,3 +539,11 @@
+   (and (match_code "const_int")
+        (match_test "INTVAL (op) >= 0 && INTVAL (op) <= 7")))
+ 
++;; Predicates for named expanders that overlap multiple ISAs.
++
++(define_predicate "cmpdi_operand"
++  (if_then_else (match_test "TARGET_HARD_FLOAT && TARGET_MAVERICK")
++		(and (match_test "TARGET_ARM")
++		     (match_operand 0 "cirrus_fp_register"))
++		(and (match_test "TARGET_32BIT")
++		     (match_operand 0 "arm_di_operand"))))
+--- a/src/gcc/config/arm/sfp-machine.h
++++ b/src/gcc/config/arm/sfp-machine.h
+@@ -14,9 +14,11 @@
+ #define _FP_DIV_MEAT_D(R,X,Y)	_FP_DIV_MEAT_2_udiv(D,R,X,Y)
+ #define _FP_DIV_MEAT_Q(R,X,Y)	_FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+ 
++#define _FP_NANFRAC_H		((_FP_QNANBIT_H << 1) - 1)
+ #define _FP_NANFRAC_S		((_FP_QNANBIT_S << 1) - 1)
+ #define _FP_NANFRAC_D		((_FP_QNANBIT_D << 1) - 1), -1
+ #define _FP_NANFRAC_Q		((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
++#define _FP_NANSIGN_H		0
+ #define _FP_NANSIGN_S		0
+ #define _FP_NANSIGN_D		0
+ #define _FP_NANSIGN_Q		0
+@@ -92,5 +94,7 @@
+ #define __fixdfdi	__aeabi_d2lz
+ #define __fixunsdfdi	__aeabi_d2ulz
+ #define __floatdidf	__aeabi_l2d
++#define __extendhfsf2	__aeabi_h2f
++#define __truncsfhf2	__aeabi_f2h
+ 
+ #endif /* __ARM_EABI__ */
+--- a/src/gcc/config/arm/symbian.h
++++ b/src/gcc/config/arm/symbian.h
+@@ -71,11 +71,6 @@
+ #define SUBTARGET_ASM_FLOAT_SPEC \
+   "%{!mfpu=*:-mfpu=vfp} %{!mcpu=*:%{!march=*:-march=armv5t}}"
+   
+-/* SymbianOS provides the BPABI routines in a separate library.
+-   Therefore, we do not need to define any of them in libgcc.  */
+-#undef RENAME_LIBRARY
+-#define RENAME_LIBRARY(GCC_NAME, AEABI_NAME) /* empty */
+-
+ /* Define the __symbian__ macro.  */
+ #undef TARGET_OS_CPP_BUILTINS
+ #define TARGET_OS_CPP_BUILTINS()				\
+--- a/src/gcc/config/arm/t-arm
++++ b/src/gcc/config/arm/t-arm
+@@ -13,7 +13,9 @@
+ 		$(srcdir)/config/arm/iwmmxt.md \
+ 		$(srcdir)/config/arm/vfp.md \
+ 		$(srcdir)/config/arm/neon.md \
+-		$(srcdir)/config/arm/thumb2.md
++		$(srcdir)/config/arm/thumb2.md \
++		$(srcdir)/config/arm/marvell-f.md \
++		$(srcdir)/config/arm/hwdiv.md
+ 
+ s-config s-conditions s-flags s-codes s-constants s-emit s-recog s-preds \
+ 	s-opinit s-extract s-peep s-attr s-attrtab s-output: $(MD_INCLUDES)
+--- a/src/gcc/config/arm/t-arm-elf
++++ b/src/gcc/config/arm/t-arm-elf
+@@ -24,10 +24,18 @@
+ #MULTILIB_MATCHES      += march?armv7=march?armv7-a
+ #MULTILIB_MATCHES      += march?armv7=march?armv7-r
+ #MULTILIB_MATCHES      += march?armv7=march?armv7-m
++#MULTILIB_MATCHES      += march?armv7=march?armv7e-m
+ #MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a8
+ #MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4
+ #MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m3
+ 
++# Not quite true.  We can support hard-vfp calling in Thumb2, but how do we
++# express that here?  Also, we really need architecture v5e or later
++# (mcrr etc).
++MULTILIB_OPTIONS       += mfloat-abi=hard
++MULTILIB_DIRNAMES      += fpu
++MULTILIB_EXCEPTIONS    += *mthumb/*mfloat-abi=hard*
++
+ # MULTILIB_OPTIONS    += mcpu=ep9312
+ # MULTILIB_DIRNAMES   += ep9312
+ # MULTILIB_EXCEPTIONS += *mthumb/*mcpu=ep9312*
+--- a/src/gcc/config/arm/t-asa
++++ b/src/gcc/config/arm/t-asa
+@@ -0,0 +1,45 @@
++# Overrides for ASA
++
++# Here is the expected output from xgcc -print-multi-lib.
++#
++# .;@fno-omit-frame-pointer@mapcs-frame
++# armv4t;@march=armv4t@fno-omit-frame-pointer@mapcs-frame
++# armv6;@march=armv6@fno-omit-frame-pointer@mapcs-frame
++# armv7a;@march=armv7-a@fno-omit-frame-pointer@mapcs-frame
++# armv6f;@march=armv6@mfloat-abi=softfp@fno-omit-frame-pointer@mapcs-frame
++# armv7af;@march=armv7-a@mfpu=neon@mfloat-abi=softfp@fno-omit-frame-pointer@mapcs-frame
++# thumb2;@mthumb@march=armv7-a@fno-omit-frame-pointer@mapcs-frame
++# thumb2f;@mthumb@march=armv7-a@mfpu=neon@mfloat-abi=softfp@fno-omit-frame-pointer@mapcs-frame
++
++MULTILIB_OPTIONS = mthumb march=armv4t/march=armv6/march=armv7-a mfpu=neon mfloat-abi=softfp
++MULTILIB_DIRNAMES = thumb v4t v6 v7a neon softfp
++MULTILIB_MATCHES =
++
++MULTILIB_EXTRA_OPTS = fno-omit-frame-pointer mapcs-frame
++
++MULTILIB_EXCEPTIONS  = mthumb
++MULTILIB_EXCEPTIONS += mfpu=neon*
++MULTILIB_EXCEPTIONS += mfloat-abi=softfp
++MULTILIB_EXCEPTIONS += *march=armv4t*/*mfpu=neon*
++MULTILIB_EXCEPTIONS += *march=armv4t*/*mfloat-abi=softfp*
++MULTILIB_EXCEPTIONS += march=armv6/*mfpu=neon*
++MULTILIB_EXCEPTIONS += mthumb/mfpu=neon
++MULTILIB_EXCEPTIONS += mthumb/mfloat-abi=softfp
++MULTILIB_EXCEPTIONS += mthumb/mfpu=neon*
++MULTILIB_EXCEPTIONS += mthumb/march=armv6/mfpu=neon*
++
++MULTILIB_OSDIRNAMES  = march.armv4t=!armv4t
++MULTILIB_OSDIRNAMES += march.armv6=!armv6
++MULTILIB_OSDIRNAMES += march.armv6/mfloat-abi.softfp=!armv6f
++MULTILIB_OSDIRNAMES += march.armv7-a=!armv7a
++MULTILIB_OSDIRNAMES += march.armv7-a/mfpu.neon/mfloat-abi.softfp=!armv7af
++MULTILIB_OSDIRNAMES += mthumb/march.armv7-a=!thumb2
++MULTILIB_OSDIRNAMES += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.softfp=!thumb2f
++
++MULTILIB_ALIASES  = march?armv4t=mthumb/march?armv4t
++MULTILIB_ALIASES += march?armv6=mthumb/march?armv6
++MULTILIB_ALIASES += march?armv6/mfloat-abi?softfp=mthumb/march?armv6/mfloat-abi?softfp
++MULTILIB_ALIASES += march?armv7-a/mfpu?neon/mfloat-abi?softfp=march?armv7-a/mfpu?neon
++MULTILIB_ALIASES += march?armv7-a/mfpu?neon/mfloat-abi?softfp=march?armv7-a/mfloat-abi?softfp
++MULTILIB_ALIASES += mthumb/march?armv7-a/mfpu?neon/mfloat-abi?softfp=mthumb/march?armv7-a/mfpu?neon
++MULTILIB_ALIASES += mthumb/march?armv7-a/mfpu?neon/mfloat-abi?softfp=mthumb/march?armv7-a/mfloat-abi?softfp
+--- a/src/gcc/config/arm/t-bpabi
++++ b/src/gcc/config/arm/t-bpabi
+@@ -1,10 +1,13 @@
+ # Add the bpabi.S functions.
+-LIB1ASMFUNCS += _aeabi_lcmp _aeabi_ulcmp _aeabi_ldivmod _aeabi_uldivmod
++LIB1ASMFUNCS += _aeabi_lcmp _aeabi_ulcmp _aeabi_ldivmod _aeabi_uldivmod \
++		_aeabi_idiv0 _aeabi_ldiv0
+ 
+ # Add the BPABI C functions.
+ LIB2FUNCS_EXTRA = $(srcdir)/config/arm/bpabi.c \
+ 		  $(srcdir)/config/arm/unaligned-funcs.c
+ 
++LIB2FUNCS_STATIC_EXTRA = $(srcdir)/config/arm/fp16.c
++
+ UNWIND_H = $(srcdir)/config/arm/unwind-arm.h
+ LIB2ADDEH = $(srcdir)/config/arm/unwind-arm.c \
+   $(srcdir)/config/arm/libunwind.S \
+--- a/src/gcc/config/arm/t-cs-eabi
++++ b/src/gcc/config/arm/t-cs-eabi
+@@ -0,0 +1,199 @@
++# Multilibs for SourceryG++ arm-none-eabi
++
++MULTILIB_OPTIONS     = mthumb
++MULTILIB_DIRNAMES    = t
++MULTILIB_EXCEPTIONS  = 
++MULTILIB_MATCHES     =
++MULTILIB_ALIASES     =
++
++MULTILIB_OPTIONS      += march=armv7/march=armv7-a/march=armv5te/march=armv6-m
++MULTILIB_DIRNAMES     += v7 v7a v5te v6m
++MULTILIB_MATCHES      += march?armv7-a=march?armv7a
++MULTILIB_MATCHES      += march?armv7=march?armv7r
++MULTILIB_MATCHES      += march?armv7=march?armv7m
++MULTILIB_MATCHES      += march?armv7=march?armv7-r
++MULTILIB_MATCHES      += march?armv7=march?armv7-m
++MULTILIB_MATCHES      += march?armv7=march?armv7e-m
++MULTILIB_MATCHES      += march?armv7-a=mcpu?cortex-a9
++MULTILIB_MATCHES      += march?armv7-a=mcpu?cortex-a8
++MULTILIB_MATCHES      += march?armv7-a=mcpu?cortex-a5
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4f
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m4
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m3
++MULTILIB_MATCHES      += march?armv6-m=mcpu?cortex-m1
++MULTILIB_MATCHES      += march?armv6-m=mcpu?cortex-m0
++MULTILIB_MATCHES      += march?armv5te=march?armv6
++MULTILIB_MATCHES      += march?armv5te=march?armv6j
++MULTILIB_MATCHES      += march?armv5te=march?armv6k
++MULTILIB_MATCHES      += march?armv5te=march?armv6z
++MULTILIB_MATCHES      += march?armv5te=march?armv6zk
++MULTILIB_MATCHES      += march?armv5te=march?armv6t2
++MULTILIB_MATCHES      += march?armv5te=march?iwmmxt
++MULTILIB_MATCHES      += march?armv5te=march?iwmmxt2
++MULTILIB_MATCHES      += march?armv5te=mcpu?arm9e
++MULTILIB_MATCHES      += march?armv5te=mcpu?arm946e-s
++MULTILIB_MATCHES      += march?armv5te=mcpu?arm966e-s
++MULTILIB_MATCHES      += march?armv5te=mcpu?arm968e-s
++MULTILIB_MATCHES      += march?armv5te=mcpu?arm10e
++MULTILIB_MATCHES      += march?armv5te=mcpu?arm1020e
++MULTILIB_MATCHES      += march?armv5te=mcpu?arm1022e
++MULTILIB_MATCHES      += march?armv5te=mcpu?xscale
++MULTILIB_MATCHES      += march?armv5te=mcpu?iwmmxt
++MULTILIB_MATCHES      += march?armv5te=mcpu?iwmmxt2
++MULTILIB_MATCHES      += march?armv5te=mcpu?marvell-f
++MULTILIB_MATCHES      += march?armv5te=mcpu?arm926ej-s
++MULTILIB_MATCHES      += march?armv5te=mcpu?arm1026ej-s
++MULTILIB_MATCHES      += march?armv5te=mcpu?arm1136j-s
++MULTILIB_MATCHES      += march?armv5te=mcpu?arm1136jf-s
++MULTILIB_MATCHES      += march?armv5te=mcpu?arm1176jz-s
++MULTILIB_MATCHES      += march?armv5te=mcpu?arm1176jzf-s
++MULTILIB_MATCHES      += march?armv5te=mcpu?mpcorenovfp
++MULTILIB_MATCHES      += march?armv5te=mcpu?mpcore
++MULTILIB_MATCHES      += march?armv5te=mcpu?arm1156t2-s
++
++MULTILIB_OPTIONS      += mfloat-abi=softfp/mfloat-abi=hard
++MULTILIB_DIRNAMES     += softfp hard
++MULTILIB_MATCHES      += mfloat-abi?hard=mhard-float
++
++MULTILIB_OPTIONS      += mfpu=neon
++MULTILIB_DIRNAMES     += neon
++MULTILIB_EXCEPTIONS   += mfpu=neon
++MULTILIB_MATCHES      += mfpu?neon=mfpu?neon-fp16
++MULTILIB_MATCHES      += mfpu?neon=mfpu?neon-vfpv4
++
++MULTILIB_ALIASES      += mthumb=mthumb/mfpu?neon
++MULTILIB_ALIASES      += mthumb=mthumb/march?armv5te/mfpu?neon
++MULTILIB_ALIASES      += mbig-endian=mthumb/mfpu?neon/mbig-endian
++#MULTILIB_ALIASES      += mfloat-abi?softfp=mthumb/mfloat-abi?softfp/mfpu?neon
++#MULTILIB_ALIASES      += mfloat-abi?softfp=mfloat-abi?softfp/mfpu?neon
++#MULTILIB_ALIASES      += mfloat-abi?softfp/mbig-endian=mfloat-abi?softfp/mfpu?neon/mbig-endian
++#MULTILIB_ALIASES      += mfloat-abi?softfp/mbig-endian=mthumb/mfloat-abi?softfp/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mthumb/march?armv7/mfix-cortex-m3-ldrd=mthumb/march?armv7-a/mfpu?neon
++MULTILIB_ALIASES      += mthumb/march?armv7/mbig-endian=mthumb/march?armv7-a/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += march?armv7-a/mfloat-abi?softfp/mfpu?neon=mthumb/march?armv7-a/mfloat-abi?softfp/mfpu?neon
++MULTILIB_ALIASES      += march?armv7-a/mfloat-abi?hard/mfpu?neon=mthumb/march?armv7-a/mfloat-abi?hard/mfpu?neon
++
++MULTILIB_OPTIONS      += mbig-endian
++MULTILIB_DIRNAMES     += be
++MULTILIB_ALIASES      += mbig-endian=mfpu?neon/mbig-endian
++
++# ARMv6-M  does not have ARM mode.
++MULTILIB_EXCEPTIONS   += march=armv6-m
++
++# Some ARMv7 variants have ARM mode.  Use the ARM libraries.
++MULTILIB_EXCEPTIONS   += march=armv7 march=armv7/*
++MULTILIB_ALIASES      += mbig-endian=march?armv7/mbig-endian
++MULTILIB_ALIASES      += march?armv5te/mfloat-abi?softfp=march?armv7/mfloat-abi?softfp
++MULTILIB_ALIASES      += march?armv5te/mfloat-abi?softfp=march?armv7/mfloat-abi?softfp/mfpu?neon
++MULTILIB_ALIASES      += march?armv5te/mfloat-abi?softfp/mbig-endian=march?armv7/mfloat-abi?softfp/mbig-endian
++MULTILIB_ALIASES      += march?armv5te/mfloat-abi?softfp/mbig-endian=march?armv7/mfloat-abi?softfp/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mbig-endian=march?armv7/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mthumb/march?armv7/mfix-cortex-m3-ldrd=mthumb/march?armv7/mfloat-abi?softfp/mfpu?neon
++MULTILIB_ALIASES      += mthumb/march?armv7/mfix-cortex-m3-ldrd=mthumb/march?armv7/mfpu?neon
++MULTILIB_ALIASES      += mthumb/march?armv7/mbig-endian=mthumb/march?armv7/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mthumb/march?armv7/mbig-endian=mthumb/march?armv7/mfloat-abi?softfp/mfpu?neon/mbig-endian
++
++# ARMv7-A is specially useful used with VFPv3 (enabled by NEON). Rest of the cases behaves as ARMv7.
++MULTILIB_ALIASES      += mthumb/march?armv7/mfix-cortex-m3-ldrd=mthumb/march?armv7-a
++MULTILIB_ALIASES      += mbig-endian=march?armv7-a/mbig-endian
++MULTILIB_ALIASES      += march?armv5te/mfloat-abi?softfp/mbig-endian=march?armv7-a/mfloat-abi?softfp/mbig-endian
++MULTILIB_ALIASES      += march?armv5te/mfloat-abi?softfp/mbig-endian=march?armv7-a/mfloat-abi?softfp/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mthumb/march?armv7/mfix-cortex-m3-ldrd=mthumb/march?armv7-a/mfloat-abi?softfp
++MULTILIB_ALIASES      += mthumb/march?armv7/mbig-endian=mthumb/march?armv7-a/mbig-endian
++MULTILIB_ALIASES      += mthumb/march?armv7/mbig-endian=mthumb/march?armv7-a/mfloat-abi?softfp/mbig-endian
++MULTILIB_ALIASES      += mthumb/march?armv7/mfix-cortex-m3-ldrd=mthumb/march?armv7/mfloat-abi?softfp             
++MULTILIB_ALIASES      += march?armv5te=march?armv7-a
++MULTILIB_ALIASES      += march?armv5te/mfloat-abi?softfp=march?armv7-a/mfloat-abi?softfp
++MULTILIB_ALIASES      += march?armv5te=march?armv7-a/mfpu?neon
++MULTILIB_ALIASES      += mbig-endian=march?armv7-a/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mthumb/march?armv7/mbig-endian=mthumb/march?armv7-a/mfloat-abi?softfp/mfpu?neon/mbig-endian
++
++# ARMv5T thumb uses the ARMv5T ARM libraries (with or without VFP).
++MULTILIB_ALIASES      += mthumb=mthumb/march?armv5te
++MULTILIB_ALIASES      += march?armv5te/mfloat-abi?softfp=mthumb/march?armv5te/mfloat-abi?softfp
++MULTILIB_ALIASES      += march?armv5te/mfloat-abi?softfp=march?armv5te/mfloat-abi?softfp/mfpu?neon
++MULTILIB_ALIASES      += march?armv5te/mfloat-abi?softfp=mthumb/march?armv5te/mfloat-abi?softfp/mfpu?neon
++MULTILIB_ALIASES      += march?armv5te=march?armv5te/mfpu?neon
++MULTILIB_ALIASES      += mbig-endian=march?armv5te/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += march?armv5te/mfloat-abi?softfp/mbig-endian=march?armv5te/mfloat-abi?softfp/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mbig-endian=mthumb/march?armv5te/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += march?armv5te/mfloat-abi?softfp/mbig-endian=mthumb/march?armv5te/mfloat-abi?softfp/mfpu?neon/mbig-endian
++
++# ARMv6-M and VFP are incompatible.
++# FIXME:  The compiler should probably error.
++MULTILIB_EXCEPTIONS   += *march=armv6-m/mfloat-abi=softfp
++MULTILIB_ALIASES      += mthumb/march?armv6-m=mthumb/march?armv6-m/mfpu?neon
++MULTILIB_EXCEPTIONS   += march=armv6-m*mfpu=neon
++MULTILIB_EXCEPTIONS   += mthumb/march=armv6-m/mfloat-abi=softfp/mfpu=neon
++
++# ARMv4t VFP isn't really supported, so use the soft-float libraries.
++MULTILIB_EXCEPTIONS   += mfloat-abi?softfp
++MULTILIB_EXCEPTIONS   += mfloat-abi?softfp/mfpu?neon
++MULTILIB_ALIASES      += mthumb=mthumb/mfloat-abi?softfp
++MULTILIB_ALIASES      += mthumb=mthumb/mfloat-abi?softfp/mfpu?neon
++
++MULTILIB_ALIASES      += mbig-endian=mfloat-abi?softfp/mbig-endian
++MULTILIB_ALIASES      += mbig-endian=mfloat-abi?softfp/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mbig-endian=mthumb/mfloat-abi?softfp/mbig-endian
++MULTILIB_ALIASES      += mbig-endian=mthumb/mfloat-abi?softfp/mfpu?neon/mbig-endian
++
++# We don't have a big-endian ARMv6-M compatible multilibs.
++MULTILIB_EXCEPTIONS   += *march=armv6-m*mbig-endian
++
++# Use the generic libraries for big-endian ARMv5T
++MULTILIB_ALIASES      += mbig-endian=march?armv5te/mbig-endian
++MULTILIB_ALIASES      += mbig-endian=mfloat-abi?softfp/mbig-endian
++MULTILIB_ALIASES      += mbig-endian=mthumb/march?armv5te/mbig-endian
++MULTILIB_ALIASES      += march?armv5te/mfloat-abi?softfp/mbig-endian=mthumb/march?armv5te/mfloat-abi?softfp/mbig-endian
++
++# Use ARM libraries for big-endian Thumb.
++MULTILIB_ALIASES      += mbig-endian=mthumb/mbig-endian
++
++# Don't bother with big-endian Thumb-2 VFP.  Use the soft-float libraries
++# for now.
++MULTILIB_ALIASES      += mthumb/march?armv7/mbig-endian=mthumb/march?armv7/mfloat-abi?softfp/mbig-endian
++
++# The only -mfloat-abi=hard libraries provided are for little-endian
++# v7-A NEON.
++MULTILIB_EXCEPTIONS   += mfloat-abi=hard*
++MULTILIB_EXCEPTIONS   += *march=armv5te*mfloat-abi=hard*
++MULTILIB_EXCEPTIONS   += *march=armv7/*mfloat-abi=hard*
++MULTILIB_EXCEPTIONS   += *march=armv6-m*mfloat-abi=hard*
++MULTILIB_EXCEPTIONS   += mthumb/mfloat-abi=hard*
++MULTILIB_EXCEPTIONS   += *mfloat-abi=hard*mbig-endian
++MULTILIB_EXCEPTIONS   += *mfloat-abi=hard
++
++# FIXME: We need a sane way of doing this.
++# This isn't really a multilib, it's a hack to add an extra option
++# to the v7-m multilib.
++MULTILIB_OPTIONS      += mfix-cortex-m3-ldrd
++MULTILIB_DIRNAMES     += broken_ldrd
++
++MULTILIB_EXCEPTIONS   += mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += mthumb/mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += *march=armv6-m*mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += *march=armv7-a*mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += *mcpu=*mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += *mbig-endian*mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += *mfloat-abi=softfp*mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += *march=armv5te*mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += *mfpu=neon*mfix-cortex-m3-ldrd
++
++MULTILIB_ALIASES      += mthumb/march?armv7/mfix-cortex-m3-ldrd=mthumb/march?armv7
++MULTILIB_ALIASES      += mthumb/march?armv7/mfix-cortex-m3-ldrd=mthumb/march?armv7-a/mfix-cortex-m3-ldrd
++MULTILIB_ALIASES      += mthumb/march?armv7/mfix-cortex-m3-ldrd=mthumb/march?armv7/mfpu?neon/mfix-cortex-m3-ldrd
++MULTILIB_ALIASES      += mthumb/march?armv7/mfix-cortex-m3-ldrd=mthumb/march?armv7-a/mfpu?neon/mfix-cortex-m3-ldrd
++
++# As of at least 4.2, gcc passes the wrong -L options if some multilibs are
++# omitted from MULTILIB_OSDIRNAMES
++MULTILIB_OSDIRNAMES    = mthumb=!thumb
++MULTILIB_OSDIRNAMES   += mbig-endian=!be
++MULTILIB_OSDIRNAMES   += march.armv5te=!armv5te
++MULTILIB_OSDIRNAMES   += march.armv5te/mfloat-abi.softfp=!vfp
++MULTILIB_OSDIRNAMES   += march.armv5te/mfloat-abi.softfp/mbig-endian=!vfp-be
++MULTILIB_OSDIRNAMES   += mthumb/march.armv7/mfix-cortex-m3-ldrd=!thumb2
++MULTILIB_OSDIRNAMES   += march.armv7-a/mfloat-abi.softfp/mfpu.neon=!armv7-a-neon
++MULTILIB_OSDIRNAMES   += march.armv7-a/mfloat-abi.hard/mfpu.neon=!armv7-a-hard
++MULTILIB_OSDIRNAMES   += mthumb/march.armv7/mbig-endian=!thumb2-be
++MULTILIB_OSDIRNAMES   += mthumb/march.armv6-m=!armv6-m
+--- a/src/gcc/config/arm/t-cs-eabi-lite
++++ b/src/gcc/config/arm/t-cs-eabi-lite
+@@ -0,0 +1,48 @@
++# We build 4 multilibs:
++#  ./		  (default)
++#  thumb/	  -mthumb
++#  thumb2/	  -mthumb -march=armv7
++#  armv6-m/	  -mthumb -march=armv6-m
++
++MULTILIB_OPTIONS     = mthumb
++MULTILIB_DIRNAMES    = thumb
++MULTILIB_EXCEPTIONS  =
++MULTILIB_MATCHES     =
++MULTILIB_ALIASES     =
++
++MULTILIB_OPTIONS      += march=armv7/march=armv6-m
++MULTILIB_DIRNAMES     += v7 v6-m
++MULTILIB_EXCEPTIONS   += march=armv7*
++MULTILIB_MATCHES      += march?armv7=march?armv7-a
++MULTILIB_MATCHES      += march?armv7=march?armv7-r
++MULTILIB_MATCHES      += march?armv7=march?armv7-m
++MULTILIB_MATCHES      += march?armv7=march?armv7e-m
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a9
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a8
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a5
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4f
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m4
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m3
++
++MULTILIB_EXCEPTIONS   += march=armv6-m
++MULTILIB_MATCHES      += march?armv6-m=mcpu?cortex-m1
++MULTILIB_MATCHES      += march?armv6-m=mcpu?cortex-m0
++
++# FIXME: We need a sane way of doing this.
++# This isn't really a multilib, it's a hack to add an extra option
++# to the v7-m multilib.
++MULTILIB_OPTIONS      += mfix-cortex-m3-ldrd
++MULTILIB_DIRNAMES     += broken_ldrd
++
++MULTILIB_EXCEPTIONS   += mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += mthumb/mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += *march=armv6-m*mfix-cortex-m3-ldrd
++
++MULTILIB_ALIASES      += mthumb/march?armv7/mfix-cortex-m3-ldrd=mthumb/march?armv7
++
++# As of at least 4.2, gcc passes the wrong -L options if some multilibs are
++# omitted from MULTILIB_OSDIRNAMES
++MULTILIB_OSDIRNAMES    = mthumb=!thumb
++MULTILIB_OSDIRNAMES   += mthumb/march.armv7/mfix-cortex-m3-ldrd=!thumb2
++MULTILIB_OSDIRNAMES   += mthumb/march.armv6-m=!armv6-m
+--- a/src/gcc/config/arm/t-cs-linux
++++ b/src/gcc/config/arm/t-cs-linux
+@@ -0,0 +1,112 @@
++# Multilibs for SourceryG++ arm-none-linux-gnueabi
++
++MULTILIB_OPTIONS     = mthumb
++MULTILIB_DIRNAMES    = t
++MULTILIB_EXCEPTIONS  = 
++MULTILIB_MATCHES     =
++MULTILIB_ALIASES     =
++
++MULTILIB_OPTIONS      += march=armv4t/march=armv7-a
++MULTILIB_DIRNAMES     += v4t v7a
++
++MULTILIB_MATCHES      += march?armv7-a=march?armv7a
++MULTILIB_MATCHES      += march?armv7-a=mcpu?cortex-a9
++MULTILIB_MATCHES      += march?armv7-a=mcpu?cortex-a8
++MULTILIB_MATCHES      += march?armv7-a=mcpu?cortex-a5
++MULTILIB_MATCHES      += march?armv4t=march?ep9312
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm7tdmi
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm7tdmi-s
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm710t
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm720t
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm740t
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm9
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm9tdmi
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm920
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm920t
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm922t
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm940t
++MULTILIB_MATCHES      += march?armv4t=mcpu?ep9312
++MULTILIB_MATCHES      += march?armv4t=march?armv5
++MULTILIB_MATCHES      += march?armv4t=march?armv5t
++MULTILIB_MATCHES      += march?armv4t=march?arm10tdmi
++MULTILIB_MATCHES      += march?armv4t=march?arm1020t
++
++MULTILIB_OPTIONS      += mfloat-abi=softfp/mfloat-abi=hard
++MULTILIB_DIRNAMES     += softfp hard
++MULTILIB_MATCHES      += mfloat-abi?hard=mhard-float
++
++MULTILIB_OPTIONS      += mfpu=neon
++MULTILIB_DIRNAMES     += neon
++MULTILIB_EXCEPTIONS   += mfpu=neon
++MULTILIB_MATCHES      += mfpu?neon=mfpu?neon-fp16
++MULTILIB_MATCHES      += mfpu?neon=mfpu?neon-vfpv4
++MULTILIB_ALIASES      += mfloat-abi?softfp=mfloat-abi?softfp/mfpu?neon
++MULTILIB_ALIASES      += mfloat-abi?softfp=mthumb/mfloat-abi?softfp/mfpu?neon
++MULTILIB_ALIASES      += march?armv7-a/mfloat-abi?hard/mfpu?neon=mthumb/march?armv7-a/mfloat-abi?hard/mfpu?neon
++
++MULTILIB_OPTIONS      += mbig-endian
++MULTILIB_DIRNAMES     += be
++MULTILIB_ALIASES      += mbig-endian=mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mfloat-abi?softfp/mbig-endian=mfloat-abi?softfp/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mbig-endian=mthumb/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mfloat-abi?softfp/mbig-endian=mthumb/mfloat-abi?softfp/mfpu?neon/mbig-endian
++
++# Do not build Thumb libraries.
++MULTILIB_EXCEPTIONS   += mthumb
++MULTILIB_EXCEPTIONS   += mthumb/mfpu=neon
++
++# Use ARM libraries for ARMv4t Thumb and VFP.
++MULTILIB_ALIASES      += march?armv4t=mthumb/march?armv4t
++MULTILIB_ALIASES      += march?armv4t=march?armv4t/mfloat-abi?softfp
++MULTILIB_ALIASES      += march?armv4t=mthumb/march?armv4t/mfloat-abi?softfp
++MULTILIB_ALIASES      += march?armv4t=march?armv4t/mfpu?neon
++MULTILIB_ALIASES      += march?armv4t=march?armv4t/mfloat-abi?softfp/mfpu?neon
++MULTILIB_ALIASES      += march?armv4t=mthumb/march?armv4t/mfpu?neon
++MULTILIB_ALIASES      += march?armv4t=mthumb/march?armv4t/mfloat-abi?softfp/mfpu?neon
++
++# We do not support ARMv4t big-endian.
++MULTILIB_EXCEPTIONS   += *march=armv4t*mbig-endian
++
++# Behave ARMv7-A as ARMv7 for some cases.
++MULTILIB_EXCEPTIONS   += march=armv7-a
++MULTILIB_EXCEPTIONS   += march=armv7-a/mfpu=neon
++MULTILIB_ALIASES      += mfloat-abi?softfp=march?armv7-a/mfloat-abi?softfp
++MULTILIB_ALIASES      += mbig-endian=march?armv7-a/mbig-endian
++MULTILIB_ALIASES      += mbig-endian=march?armv7-a/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mfloat-abi?softfp/mbig-endian=march?armv7-a/mfloat-abi?softfp/mbig-endian
++MULTILIB_ALIASES      += mfloat-abi?softfp/mbig-endian=march?armv7-a/mfloat-abi?softfp/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mthumb/march?armv7-a=mthumb/march?armv7-a/mfpu?neon
++MULTILIB_ALIASES      += mthumb/march?armv7-a/mbig-endian=mthumb/march?armv7-a/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mthumb/march?armv7-a/mbig-endian=mthumb/march?armv7-a/mfloat-abi?softfp/mfpu?neon/mbig-endian
++MULTILIB_ALIASES      += mthumb/march?armv7-a=mthumb/march?armv7-a/mfloat-abi?softfp
++
++# Thumb-1 VFP isn't really a meaningful combination.  Use the ARM VFP.
++MULTILIB_ALIASES      += mfloat-abi?softfp=mthumb/mfloat-abi?softfp
++MULTILIB_ALIASES      += mfloat-abi?softfp/mbig-endian=mthumb/mfloat-abi?softfp/mbig-endian
++
++# Use ARM libraries for big-endian Thumb.
++MULTILIB_ALIASES      += mbig-endian=mthumb/mbig-endian
++
++# Don't bother with big-endian Thumb-2 VFP.  Use the soft-float libraries
++# for now.
++MULTILIB_ALIASES      += mthumb/march?armv7-a/mbig-endian=mthumb/march?armv7-a/mfloat-abi?softfp/mbig-endian
++
++# The only -mfloat-abi=hard libraries provided are for little-endian
++# v7-A NEON.
++MULTILIB_EXCEPTIONS   += mfloat-abi=hard*
++MULTILIB_EXCEPTIONS   += *march=armv4t*mfloat-abi=hard*
++MULTILIB_EXCEPTIONS   += mthumb/mfloat-abi=hard*
++MULTILIB_EXCEPTIONS   += *mfloat-abi=hard*mbig-endian
++MULTILIB_EXCEPTIONS   += *mfloat-abi=hard
++
++# As of at least 4.2, gcc passes the wrong -L options if some multilibs are
++# omitted from MULTILIB_OSDIRNAMES
++MULTILIB_OSDIRNAMES    = march.armv4t=!armv4t
++MULTILIB_OSDIRNAMES   += mbig-endian=!be
++MULTILIB_OSDIRNAMES   += mfloat-abi.softfp=!vfp
++MULTILIB_OSDIRNAMES   += mfloat-abi.softfp/mbig-endian=!vfp-be
++MULTILIB_OSDIRNAMES   += mthumb/march.armv7-a=!thumb2
++MULTILIB_OSDIRNAMES   += march.armv7-a/mfloat-abi.softfp/mfpu.neon=!armv7-a-neon
++MULTILIB_OSDIRNAMES   += mthumb/march.armv7-a/mfloat-abi.softfp/mfpu.neon=!thumb2-neon
++MULTILIB_OSDIRNAMES   += march.armv7-a/mfloat-abi.hard/mfpu.neon=!armv7-a-hard
++MULTILIB_OSDIRNAMES   += mthumb/march.armv7-a/mbig-endian=!thumb2-be
+--- a/src/gcc/config/arm/t-cs-linux-lite
++++ b/src/gcc/config/arm/t-cs-linux-lite
+@@ -0,0 +1,48 @@
++# We build 3 multilibs:
++#  ./		  (default)
++#  armv4t/	  -march=armv4t [-mthumb]
++#  thumb2/	  -mthumb -march=armv7
++MULTILIB_OPTIONS     = mthumb
++MULTILIB_DIRNAMES    = thumb
++MULTILIB_OPTIONS    += march=armv4t/march=armv7
++MULTILIB_DIRNAMES   += v4t v7
++MULTILIB_EXCEPTIONS += march=armv7
++MULTILIB_EXCEPTIONS += mthumb
++
++MULTILIB_ALIASES     = march?armv4t=mthumb/march?armv4t
++
++# As of at least 4.2, gcc passes the wrong -L options if some multilibs are
++# omitted from MULTILIB_OSDIRNAMES
++MULTILIB_OSDIRNAMES    = march.armv4t=!armv4t
++MULTILIB_OSDIRNAMES   += mthumb/march.armv7=!thumb2
++
++MULTILIB_MATCHES      += march?armv7=march?armv7a
++MULTILIB_MATCHES      += march?armv7=march?armv7r
++MULTILIB_MATCHES      += march?armv7=march?armv7m
++MULTILIB_MATCHES      += march?armv7=march?armv7-a
++MULTILIB_MATCHES      += march?armv7=march?armv7-r
++MULTILIB_MATCHES      += march?armv7=march?armv7-m
++MULTILIB_MATCHES      += march?armv7=march?armv7e-m
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a9
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a8
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a5
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4f
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m3
++MULTILIB_MATCHES      += march?armv4t=march?ep9312
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm7tdmi
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm7tdmi-s
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm710t
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm720t
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm740t
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm9
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm9tdmi
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm920
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm920t
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm922t
++MULTILIB_MATCHES      += march?armv4t=mcpu?arm940t
++MULTILIB_MATCHES      += march?armv4t=mcpu?ep9312
++MULTILIB_MATCHES      += march?armv4t=march?armv5
++MULTILIB_MATCHES      += march?armv4t=march?armv5t
++MULTILIB_MATCHES      += march?armv4t=march?arm10tdmi
++MULTILIB_MATCHES      += march?armv4t=march?arm1020t
+--- a/src/gcc/config/arm/t-cs-uclinux-eabi
++++ b/src/gcc/config/arm/t-cs-uclinux-eabi
+@@ -0,0 +1,56 @@
++# EABI uClinux multilib selection.  Other setting are inherited from t-arm-elf
++
++# We build 3 multilibs:
++#  .	    (default)
++#  thumb2/  -mthumb -march=armv7 -mfix-cortex-m3-ldrd
++#  armv6-m/ -mthumb -march=armv6-m
++
++MULTILIB_OPTIONS     = mthumb
++MULTILIB_DIRNAMES    = thumb
++MULTILIB_EXCEPTIONS  = 
++MULTILIB_MATCHES     =
++
++MULTILIB_OPTIONS      += march=armv7/march=armv6-m
++MULTILIB_DIRNAMES     += armv7 armv6-m
++
++MULTILIB_EXCEPTIONS   += mthumb
++
++MULTILIB_EXCEPTIONS   += march=armv7
++MULTILIB_MATCHES      += march?armv7=march?armv7a
++MULTILIB_MATCHES      += march?armv7=march?armv7r
++MULTILIB_MATCHES      += march?armv7=march?armv7m
++MULTILIB_MATCHES      += march?armv7=march?armv7-a
++MULTILIB_MATCHES      += march?armv7=march?armv7-r
++MULTILIB_MATCHES      += march?armv7=march?armv7-m
++MULTILIB_MATCHES      += march?armv7=march?armv7e-m
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a9
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a8
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a5
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4f
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m4
++MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m3
++
++MULTILIB_EXCEPTIONS   += march=armv6-m
++MULTILIB_MATCHES      += march?armv6-m=mcpu?cortex-m1
++MULTILIB_MATCHES      += march?armv6-m=mcpu?cortex-m0
++
++MULTILIB_ALIASES       =
++
++# FIXME: We need a sane way of doing this.
++# This isn't really a multilib, it's a hack to add an extra option
++# to the v7-m multilib.
++MULTILIB_OPTIONS      += mfix-cortex-m3-ldrd
++MULTILIB_DIRNAMES     += broken_ldrd
++
++MULTILIB_EXCEPTIONS   += mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += mthumb/mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += march=armv7/mfix-cortex-m3-ldrd
++MULTILIB_EXCEPTIONS   += *march=armv6-m*mfix-cortex-m3-ldrd
++
++MULTILIB_ALIASES      += mthumb/march?armv7/mfix-cortex-m3-ldrd=mthumb/march?armv7
++
++
++MULTILIB_OSDIRNAMES    = mthumb/march.armv7/mfix-cortex-m3-ldrd=!thumb2
++MULTILIB_OSDIRNAMES   += mthumb/march.armv6-m=!armv6-m
++
+--- a/src/gcc/config/arm/t-cygming
++++ b/src/gcc/config/arm/t-cygming
+@@ -0,0 +1,10 @@
++# cygwin and mingw always have a limits.h, but, depending upon how we are
++# doing the build, it may not be installed yet.
++LIMITS_H_TEST = true
++
++# If we are building next to winsup, this will let us find the real
++# limits.h when building libgcc2.  Otherwise, winsup must be installed
++# first.
++LIBGCC2_INCLUDES = -I$(srcdir)/../winsup/w32api/include
++
++STMP_FIXINC=stmp-fixinc
+--- a/src/gcc/config/arm/t-linux-eabi
++++ b/src/gcc/config/arm/t-linux-eabi
+@@ -6,8 +6,8 @@
+ MULTILIB_OPTIONS	=
+ MULTILIB_DIRNAMES	=
+ 
+-# Use a version of div0 which raises SIGFPE.
+-LIB1ASMFUNCS := $(filter-out _dvmd_tls,$(LIB1ASMFUNCS)) _dvmd_lnx
++# Use a version of div0 which raises SIGFPE, and a special __clear_cache.
++LIB1ASMFUNCS := $(filter-out _dvmd_tls,$(LIB1ASMFUNCS)) _dvmd_lnx _clear_cache
+ 
+ # Multilib the standard Linux files.  Don't include crti.o or crtn.o,
+ # which are provided by glibc.
+--- a/src/gcc/config/arm/t-mingw32
++++ b/src/gcc/config/arm/t-mingw32
+@@ -0,0 +1,2 @@
++# Match SYSTEM_INCLUDE_DIR
++NATIVE_SYSTEM_HEADER_DIR = /mingw/include
+--- a/src/gcc/config/arm/t-montavista-linux
++++ b/src/gcc/config/arm/t-montavista-linux
+@@ -0,0 +1,33 @@
++# MontaVista GNU/Linux Configuration.
++# Copyright (C) 2009
++# Free Software Foundation, Inc.
++#
++# This file is part of GCC.
++#
++# GCC is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3, or (at your option)
++# any later version.
++# 
++# GCC is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++MULTILIB_OPTIONS = tarmv6/tthumb2
++MULTILIB_DIRNAMES = armv6 thumb2
++
++MULTILIB_EXCEPTIONS =
++
++MULTILIB_OSDIRNAMES =
++
++MULTILIB_ALIASES =
++
++MULTILIB_MATCHES =
++
++# These files must be built for each multilib.
++EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
+--- a/src/gcc/config/arm/t-nucleus
++++ b/src/gcc/config/arm/t-nucleus
+@@ -0,0 +1,3 @@
++
++# Add shared object crtstuff
++EXTRA_MULTILIB_PARTS += crtbeginS.o crtendS.o
+--- a/src/gcc/config/arm/t-symbian
++++ b/src/gcc/config/arm/t-symbian
+@@ -1,22 +1,3 @@
+-LIB1ASMFUNCS = _bb_init_func _call_via_rX _interwork_call_via_rX _clzsi2 _clzdi2
+-
+-# These functions have __aeabi equivalents and will never be called by GCC.  
+-# By putting them in LIB1ASMFUNCS, we avoid the standard libgcc2.c code being
+-# used -- and we make sure that definitions are not available in lib1funcs.asm,
+-# either, so they end up undefined.
+-LIB1ASMFUNCS += \
+-	_ashldi3 _ashrdi3 _divdi3 _floatdidf _udivmoddi4 _umoddi3 \
+-	_udivdi3 _lshrdi3 _moddi3 _muldi3 _negdi2 _cmpdi2 \
+-	_fixdfdi _fixsfdi _fixunsdfdi _fixunssfdi _floatdisf \
+-	_negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
+-	_truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
+-	_fixsfsi _fixunssfsi
+-
+-# Include the gcc personality routine
+-UNWIND_H = $(srcdir)/config/arm/unwind-arm.h
+-LIB2ADDEH = $(srcdir)/unwind-c.c $(srcdir)/config/arm/pr-support.c
+-LIB2ADDEHDEP = $(UNWIND_H)
+-
+ # Create a multilib for processors with VFP floating-point, and a
+ # multilib for those without -- using the soft-float ABI in both
+ # cases.  Symbian OS object should be compiled with interworking
+@@ -24,6 +5,9 @@
+ MULTILIB_OPTIONS     = mfloat-abi=softfp
+ MULTILIB_DIRNAMES    = softfp
+ 
++LIB2FUNCS_EXTRA += $(srcdir)/config/arm/eabi-memcpy.c \
++  $(srcdir)/config/arm/eabi-memset.c
++
+ # There is no C library to link against on Symbian OS -- at least when 
+ # building GCC.
+ SHLIB_LC = 
+--- a/src/gcc/config/arm/t-wince-pe
++++ b/src/gcc/config/arm/t-wince-pe
+@@ -1,5 +1,50 @@
+ LIB1ASMSRC = arm/lib1funcs.asm
+-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX _interwork_call_via_rX _clzsi2 _clzdi2
++
++LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX _interwork_call_via_rX \
++	_bb_init_func _lshrdi3 _ashrdi3 _ashldi3 \
++	_negdf2 _arm_addsubdf3 _arm_muldivdf3 _arm_cmpdf2 _arm_unorddf2 \
++	_arm_fixdfsi _arm_fixunsdfsi \
++	_arm_truncdfsf2 _arm_negsf2 _arm_addsubsf3 _arm_muldivsf3 _arm_cmpsf2 _arm_unordsf2 \
++	_arm_fixsfsi _arm_fixunssfsi _arm_floatdidf _arm_floatdisf \
++	_clzsi2 _clzdi2
++
++#
++# Filter out functions from dp-bit.c that are already in lib1funcs.asm
++#
++DPBIT_FUNCS := $(filter-out _mul_df _div_df _addsub_df _compare_df \
++	_eq_df _ne_df _gt_df _ge_df _lt_df _le_df \
++	_negate_df _unord_df \
++	_df_to_sf _si_to_df _df_to_si _usi_to_df, $(DPBIT_FUNCS))
++FPBIT_FUNCS := $(filter-out _mul_sf _div_sf _addsub_sf _compare_sf \
++	_eq_sf _ne_sf _gt_sf _ge_sf _lt_sf _le_sf \
++	_negate_sf _unord_sf \
++	_sf_to_df _si_to_sf _sf_to_si _usi_to_sf, $(FPBIT_FUNCS))
++
++LIB2FUNCS_EXCLUDE = _floatundisf _floatundidf _floatdidf _floatdisf \
++	_fixunssfsi _fixunsdfsi
++
++#LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX _interwork_call_via_rX \
++#	_bb_init_func _lshrdi3 _ashrdi3 _ashldi3 \
++#	_arm_negdf2 _arm_addsubdf3 _arm_muldivdf3 _arm_cmpdf2 _arm_unorddf2 \
++#	_arm_fixdfsi _arm_fixunsdfsi \
++#	_arm_truncdfsf2 _arm_negsf2 _arm_addsubsf3 _arm_muldivsf3 _arm_cmpsf2 _arm_unordsf2 \
++#	_arm_fixsfsi _arm_fixunssfsi _arm_floatdidf _arm_floatdisf \
++#	_arm_fixunsdfsi \
++#	_clzsi2 _clzdi2
++
++# For most CPUs we have an assembly soft-float implementations.
++# However this is not true for ARMv6M.  Here we want to use the soft-fp C
++# implementation.  The soft-fp code is only build for ARMv6M.  This pulls
++# in the asm implementation for other CPUs.
++#LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func \
++#	_call_via_rX _interwork_call_via_rX \
++#	_lshrdi3 _ashrdi3 _ashldi3 \
++#	_arm_negdf2 _arm_addsubdf3 _arm_muldivdf3 _arm_cmpdf2 _arm_unorddf2 \
++#	_arm_fixdfsi _arm_fixunsdfsi \
++#	_arm_truncdfsf2 _arm_negsf2 _arm_addsubsf3 _arm_muldivsf3 \
++#	_arm_cmpsf2 _arm_unordsf2 _arm_fixsfsi _arm_fixunssfsi \
++#	_arm_floatdidf _arm_floatdisf _arm_floatundidf _arm_floatundisf \
++#	_clzsi2 _clzdi2
+ 
+ # We want fine grained libraries, so use the new code to build the
+ # floating point emulation libraries.
+@@ -20,12 +65,34 @@
+ 	echo '#endif' >> dp-bit.c
+ 	cat $(srcdir)/config/fp-bit.c >> dp-bit.c
+ 
+-pe.o: $(srcdir)/config/arm/pe.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+-  $(RTL_H) output.h flags.h $(TREE_H) expr.h toplev.h $(TM_P_H)
+-	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/arm/pe.c
++pe.o: $(srcdir)/config/arm/pe.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
++  $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
++  $(TM_P_H) toplev.h $(HASHTAB_H) $(GGC_H)
++	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++	$(srcdir)/config/arm/pe.c
++
++pe-cxx.o: $(srcdir)/config/arm/pe-cxx.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
++  $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
++  $(TM_P_H) toplev.h $(HASHTAB_H) $(GGC_H)
++	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++	$(srcdir)/config/arm/pe-cxx.c
++
++pe-stubs.o: $(srcdir)/config/arm/pe-stubs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
++  $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
++  $(TM_P_H) toplev.h $(HASHTAB_H) $(GGC_H)
++	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++	$(srcdir)/config/arm/pe-stubs.c
++
++#hack! using i386 file directly...
++msformat-c.o: $(srcdir)/config/i386/msformat-c.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
++  $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
++  $(TM_P_H) toplev.h $(HASHTAB_H) $(GGC_H)
++	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++	$(srcdir)/config/i386/msformat-c.c
++
++MULTILIB_OPTIONS =
++MULTILIB_DIRNAMES =
+ 
+-MULTILIB_OPTIONS = mhard-float
+-MULTILIB_DIRNAMES = fpu
+ # Note - Thumb multilib omitted because Thumb support for
+ # arm-wince-pe target does not appear to be working in binutils
+ # yet... 
+@@ -34,4 +101,65 @@
+ 
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+-TARGET_LIBGCC2_CFLAGS = 
++# Currently there is a bug somewhere in GCC's alias analysis
++# or scheduling code that is breaking _fpmul_parts in fp-bit.c.
++# Disabling function inlining is a workaround for this problem.
++TARGET_LIBGCC2_CFLAGS = -fno-inline
++
++STMP_FIXINC=stmp-fixinc
++
++# Build a shared libgcc library for PECOFF with a DEF file
++# with the GNU linker.
++#
++# mkmap-flat.awk is used with the pe_dll option to produce a DEF instead
++# of an ELF map file.
++#
++# Warning: If SHLIB_SOVERSION or SHLIB_SONAME are updated, LIBGCC_SONAME
++# in mingw32.h and SHLIB_MKMAP_OPTS below must be updated also.
++
++SHLIB_EXT = .dll
++SHLIB_IMPLIB = @shlib_base_name@.a
++SHLIB_SOVERSION = 1
++SHLIB_SONAME = @shlib_base_name@_$(EH_MODEL)-$(SHLIB_SOVERSION)$(SHLIB_EXT)
++SHLIB_MAP = @shlib_map_file@
++SHLIB_OBJS = @shlib_objs@
++SHLIB_DIR = @multilib_dir@/shlib
++SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
++
++# Version for mingw32ce
++SHLIB_LC = -lmingw32 -lmingwex -lceoldname -lcoredll
++# Version for cegcc
++#SHLIB_LC = -lc -lcoredll
++
++# This should go somewhere else.
++# We are using SjLj EH.
++EH_MODEL = sjlj
++
++SHLIB_LINK = $(LN_S) -f $(SHLIB_MAP) $(SHLIB_MAP).def && \
++	if [ ! -d $(SHLIB_DIR) ]; then \
++		mkdir $(SHLIB_DIR); \
++	else true; fi && \
++	$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
++	$(SHLIB_MAP).def \
++	-Wl,--out-implib,$(SHLIB_DIR)/$(SHLIB_IMPLIB).tmp \
++	-o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \
++	$(SHLIB_OBJS) $(SHLIB_LC) && \
++	if [ -f $(SHLIB_DIR)/$(SHLIB_SONAME) ]; then \
++	  mv -f $(SHLIB_DIR)/$(SHLIB_SONAME) \
++		$(SHLIB_DIR)/$(SHLIB_SONAME).backup; \
++	else true; fi && \
++	mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \
++	mv $(SHLIB_DIR)/$(SHLIB_IMPLIB).tmp $(SHLIB_DIR)/$(SHLIB_IMPLIB)
++# $(slibdir) double quoted to protect it from expansion while building
++# libgcc.mk.  We want this delayed until actual install time.
++SHLIB_INSTALL = \
++	$$(mkinstalldirs) $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL); \
++	$(INSTALL_PROGRAM) $(SHLIB_DIR)/$(SHLIB_SONAME) \
++	  $$(DESTDIR)$$(bindir)/$(SHLIB_SONAME); \
++	$(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIB_IMPLIB) \
++	  $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_IMPLIB)
++SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
++# We'd like to use SHLIB_SONAME here too, but shlib_base_name
++# does not get substituted before mkmap-flat.awk is run.
++SHLIB_MKMAP_OPTS = -v pe_dll=libgcc_s_$(EH_MODEL)-$(SHLIB_SOVERSION)$(SHLIB_EXT)
++SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver
+--- a/src/gcc/config/arm/t-wrs-linux
++++ b/src/gcc/config/arm/t-wrs-linux
+@@ -0,0 +1,36 @@
++# Wind River GNU/Linux Configuration.
++# Copyright (C) 2006, 2007, 2008
++# Free Software Foundation, Inc.
++#
++# This file is part of GCC.
++#
++# GCC is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3, or (at your option)
++# any later version.
++# 
++# GCC is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++MULTILIB_OPTIONS = muclibc
++MULTILIB_OPTIONS += tarm926ej-s/tthumb2-v7-a/tthumb2-v7-a-neon
++MULTILIB_OPTIONS += mfloat-abi=softfp
++MULTILIB_DIRNAMES = uclibc
++MULTILIB_DIRNAMES += tarm926ej-s thumb2-v7-a thumb2-v7-a-neon
++MULTILIB_DIRNAMES += softfp
++
++MULTILIB_EXCEPTIONS += *thumb2*/*mfloat-abi=softfp*
++
++MULTILIB_ALIASES = tthumb2-v7-a-neon=tthumb2-v7-a-neon/mfloat-abi?softfp
++MULTILIB_ALIASES += muclibc/tthumb2-v7-a-neon=muclibc/tthumb2-v7-a-neon/mfloat-abi?softfp
++MULTILIB_OSDIRNAMES =
++
++# These files must be built for each multilib.
++EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
++
+--- a/src/gcc/config/arm/thumb2.md
++++ b/src/gcc/config/arm/thumb2.md
+@@ -24,6 +24,8 @@
+ ;; changes made in armv5t as "thumb2".  These are considered part
+ ;; the 16-bit Thumb-1 instruction set.
+ 
++(include "hwdiv.md")
++
+ (define_insn "*thumb2_incscc"
+   [(set (match_operand:SI 0 "s_register_operand" "=r,r")
+         (plus:SI (match_operator:SI 2 "arm_comparison_operator"
+@@ -55,7 +57,7 @@
+   [(set (match_operand:SI 0 "s_register_operand" "=r")
+ 	(and:SI (not:SI (match_operator:SI 4 "shift_operator"
+ 			 [(match_operand:SI 2 "s_register_operand" "r")
+-			  (match_operand:SI 3 "const_int_operand" "M")]))
++			  (match_operand:SI 3 "const_shift_count" "M")]))
+ 		(match_operand:SI 1 "s_register_operand" "r")))]
+   "TARGET_THUMB2"
+   "bic%?\\t%0, %1, %2%S4"
+@@ -124,7 +126,7 @@
+   [(set (match_operand:SI 0 "s_register_operand" "=r")
+ 	(not:SI (match_operator:SI 3 "shift_operator"
+ 		 [(match_operand:SI 1 "s_register_operand" "r")
+-		  (match_operand:SI 2 "const_int_operand"  "M")])))]
++		  (match_operand:SI 2 "const_shift_count"  "M")])))]
+   "TARGET_THUMB2"
+   "mvn%?\\t%0, %1%S3"
+   [(set_attr "predicable" "yes")
+@@ -136,7 +138,7 @@
+   [(set (reg:CC_NOOV CC_REGNUM)
+ 	(compare:CC_NOOV (not:SI (match_operator:SI 3 "shift_operator"
+ 			  [(match_operand:SI 1 "s_register_operand" "r")
+-			   (match_operand:SI 2 "const_int_operand"  "M")]))
++			   (match_operand:SI 2 "const_shift_count"  "M")]))
+ 			 (const_int 0)))
+    (set (match_operand:SI 0 "s_register_operand" "=r")
+ 	(not:SI (match_op_dup 3 [(match_dup 1) (match_dup 2)])))]
+@@ -151,7 +153,7 @@
+   [(set (reg:CC_NOOV CC_REGNUM)
+ 	(compare:CC_NOOV (not:SI (match_operator:SI 3 "shift_operator"
+ 			  [(match_operand:SI 1 "s_register_operand" "r")
+-			   (match_operand:SI 2 "const_int_operand"  "M")]))
++			   (match_operand:SI 2 "const_shift_count"  "M")]))
+ 			 (const_int 0)))
+    (clobber (match_scratch:SI 0 "=r"))]
+   "TARGET_THUMB2"
+@@ -172,34 +174,6 @@
+    (set_attr "length" "8")]
+ )
+ 
+-(define_insn "*thumb2_abssi2"
+-  [(set (match_operand:SI         0 "s_register_operand" "=r,&r")
+-	(abs:SI (match_operand:SI 1 "s_register_operand" "0,r")))
+-   (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_THUMB2"
+-  "@
+-   cmp\\t%0, #0\;it\tlt\;rsblt\\t%0, %0, #0
+-   eor%?\\t%0, %1, %1, asr #31\;sub%?\\t%0, %0, %1, asr #31"
+-  [(set_attr "conds" "clob,*")
+-   (set_attr "shift" "1")
+-   ;; predicable can't be set based on the variant, so left as no
+-   (set_attr "length" "10,8")]
+-)
+-
+-(define_insn "*thumb2_neg_abssi2"
+-  [(set (match_operand:SI 0 "s_register_operand" "=r,&r")
+-	(neg:SI (abs:SI (match_operand:SI 1 "s_register_operand" "0,r"))))
+-   (clobber (reg:CC CC_REGNUM))]
+-  "TARGET_THUMB2"
+-  "@
+-   cmp\\t%0, #0\;it\\tgt\;rsbgt\\t%0, %0, #0
+-   eor%?\\t%0, %1, %1, asr #31\;rsb%?\\t%0, %0, %1, asr #31"
+-  [(set_attr "conds" "clob,*")
+-   (set_attr "shift" "1")
+-   ;; predicable can't be set based on the variant, so left as no
+-   (set_attr "length" "10,8")]
+-)
+-
+ (define_insn "*thumb2_movdi"
+   [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r, r, r, m")
+ 	(match_operand:DI 1 "di_operand"              "rDa,Db,Dc,mi,r"))]
+@@ -223,9 +197,14 @@
+    (set_attr "neg_pool_range" "*,*,*,0,*")]
+ )
+ 
++;; We have two alternatives here for memory loads (and similarly for stores)
++;; to reflect the fact that the permissible constant pool ranges differ
++;; between ldr instructions taking low regs and ldr instructions taking high
++;; regs.  The high register alternatives are not taken into account when
++;; choosing register preferences in order to reflect their expense.
+ (define_insn "*thumb2_movsi_insn"
+-  [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m")
+-	(match_operand:SI 1 "general_operand"	   "rk ,I,K,N,mi,rk"))]
++  [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,l,*hk,m,*m")
++        (match_operand:SI 1 "general_operand"      "rk ,I,K,j,mi,*mi,l,*hk"))]
+   "TARGET_THUMB2 && ! TARGET_IWMMXT
+    && !(TARGET_HARD_FLOAT && TARGET_VFP)
+    && (   register_operand (operands[0], SImode)
+@@ -236,11 +215,13 @@
+    mvn%?\\t%0, #%B1
+    movw%?\\t%0, %1
+    ldr%?\\t%0, %1
++   ldr%?\\t%0, %1
++   str%?\\t%1, %0
+    str%?\\t%1, %0"
+-  [(set_attr "type" "*,*,*,*,load1,store1")
++  [(set_attr "type" "*,*,*,*,load1,load1,store1,store1")
+    (set_attr "predicable" "yes")
+-   (set_attr "pool_range" "*,*,*,*,4096,*")
+-   (set_attr "neg_pool_range" "*,*,*,*,0,*")]
++   (set_attr "pool_range" "*,*,*,*,1020,4096,*,*")
++   (set_attr "neg_pool_range" "*,*,*,*,0,0,*,*")]
+ )
+ 
+ ;; ??? We can probably do better with thumb2
+@@ -329,8 +310,8 @@
+   "
+   [(set_attr "length" "8,12,16,8,8")
+    (set_attr "type" "*,*,*,load2,store2")
+-   (set_attr "pool_range" "1020")
+-   (set_attr "neg_pool_range" "0")]
++   (set_attr "pool_range" "*,*,*,4096,*")
++   (set_attr "neg_pool_range" "*,*,*,0,*")]
+ )
+ 
+ (define_insn "*thumb2_cmpsi_shiftsi"
+@@ -338,7 +319,7 @@
+ 	(compare:CC (match_operand:SI   0 "s_register_operand" "r")
+ 		    (match_operator:SI  3 "shift_operator"
+ 		     [(match_operand:SI 1 "s_register_operand" "r")
+-		      (match_operand:SI 2 "const_int_operand"  "M")])))]
++		      (match_operand:SI 2 "const_shift_count"  "M")])))]
+   "TARGET_THUMB2"
+   "cmp%?\\t%0, %1%S3"
+   [(set_attr "conds" "set")
+@@ -350,7 +331,7 @@
+   [(set (reg:CC_SWP CC_REGNUM)
+ 	(compare:CC_SWP (match_operator:SI 3 "shift_operator"
+ 			 [(match_operand:SI 1 "s_register_operand" "r")
+-			  (match_operand:SI 2 "const_int_operand" "M")])
++			  (match_operand:SI 2 "const_shift_count" "M")])
+ 			(match_operand:SI 0 "s_register_operand" "r")))]
+   "TARGET_THUMB2"
+   "cmp%?\\t%0, %1%S3"
+@@ -364,7 +345,7 @@
+ 	(compare:CC (match_operand:SI 0 "s_register_operand" "r")
+ 		    (neg:SI (match_operator:SI 3 "shift_operator"
+ 			     [(match_operand:SI 1 "s_register_operand" "r")
+-			      (match_operand:SI 2 "const_int_operand" "M")]))))]
++			      (match_operand:SI 2 "const_shift_count" "M")]))))]
+   "TARGET_THUMB2"
+   "cmn%?\\t%0, %1%S3"
+   [(set_attr "conds" "set")
+@@ -476,8 +457,8 @@
+         (match_operator:SI 1 "shiftable_operator"
+           [(match_operator:SI 3 "shift_operator"
+              [(match_operand:SI 4 "s_register_operand" "r")
+-              (match_operand:SI 5 "const_int_operand" "M")])
+-           (match_operand:SI 2 "s_register_operand" "r")]))]
++              (match_operand:SI 5 "const_shift_count" "M")])
++           (match_operand:SI 2 "s_register_operand" "rk")]))]
+   "TARGET_THUMB2"
+   "%i1%?\\t%0, %2, %4%S3"
+   [(set_attr "predicable" "yes")
+@@ -509,7 +490,7 @@
+         (compare:CC_NOOV (match_operator:SI 1 "shiftable_operator"
+ 		          [(match_operator:SI 3 "shift_operator"
+ 		            [(match_operand:SI 4 "s_register_operand" "r")
+-		             (match_operand:SI 5 "const_int_operand" "M")])
++		             (match_operand:SI 5 "const_shift_count" "M")])
+ 		           (match_operand:SI 2 "s_register_operand" "r")])
+ 			 (const_int 0)))
+    (set (match_operand:SI 0 "s_register_operand" "=r")
+@@ -527,7 +508,7 @@
+         (compare:CC_NOOV (match_operator:SI 1 "shiftable_operator"
+ 		          [(match_operator:SI 3 "shift_operator"
+ 		            [(match_operand:SI 4 "s_register_operand" "r")
+-		             (match_operand:SI 5 "const_int_operand" "M")])
++		             (match_operand:SI 5 "const_shift_count" "M")])
+ 		           (match_operand:SI 2 "s_register_operand" "r")])
+ 			 (const_int 0)))
+    (clobber (match_scratch:SI 0 "=r"))]
+@@ -543,7 +524,7 @@
+ 	(minus:SI (match_operand:SI 1 "s_register_operand" "r")
+ 		  (match_operator:SI 2 "shift_operator"
+ 		   [(match_operand:SI 3 "s_register_operand" "r")
+-		    (match_operand:SI 4 "const_int_operand" "M")])))]
++		    (match_operand:SI 4 "const_shift_count" "M")])))]
+   "TARGET_THUMB2"
+   "sub%?\\t%0, %1, %3%S2"
+   [(set_attr "predicable" "yes")
+@@ -557,7 +538,7 @@
+ 	 (minus:SI (match_operand:SI 1 "s_register_operand" "r")
+ 		   (match_operator:SI 2 "shift_operator"
+ 		    [(match_operand:SI 3 "s_register_operand" "r")
+-		     (match_operand:SI 4 "const_int_operand" "M")]))
++		     (match_operand:SI 4 "const_shift_count" "M")]))
+ 	 (const_int 0)))
+    (set (match_operand:SI 0 "s_register_operand" "=r")
+ 	(minus:SI (match_dup 1) (match_op_dup 2 [(match_dup 3)
+@@ -575,7 +556,7 @@
+ 	 (minus:SI (match_operand:SI 1 "s_register_operand" "r")
+ 		   (match_operator:SI 2 "shift_operator"
+ 		    [(match_operand:SI 3 "s_register_operand" "r")
+-		     (match_operand:SI 4 "const_int_operand" "M")]))
++		     (match_operand:SI 4 "const_shift_count" "M")]))
+ 	 (const_int 0)))
+    (clobber (match_scratch:SI 0 "=r"))]
+   "TARGET_THUMB2"
+@@ -1131,26 +1112,6 @@
+    (set_attr "length" "2")]
+ )
+ 
+-(define_insn "divsi3"
+-  [(set (match_operand:SI	  0 "s_register_operand" "=r")
+-	(div:SI (match_operand:SI 1 "s_register_operand"  "r")
+-		(match_operand:SI 2 "s_register_operand"  "r")))]
+-  "TARGET_THUMB2 && arm_arch_hwdiv"
+-  "sdiv%?\t%0, %1, %2"
+-  [(set_attr "predicable" "yes")
+-   (set_attr "insn" "sdiv")]
+-)
+-
+-(define_insn "udivsi3"
+-  [(set (match_operand:SI	   0 "s_register_operand" "=r")
+-	(udiv:SI (match_operand:SI 1 "s_register_operand"  "r")
+-		 (match_operand:SI 2 "s_register_operand"  "r")))]
+-  "TARGET_THUMB2 && arm_arch_hwdiv"
+-  "udiv%?\t%0, %1, %2"
+-  [(set_attr "predicable" "yes")
+-   (set_attr "insn" "udiv")]
+-)
+-
+ (define_insn "*thumb2_subsi_short"
+   [(set (match_operand:SI 0 "low_register_operand" "=l")
+ 	(minus:SI (match_operand:SI 1 "low_register_operand" "l")
+@@ -1162,6 +1123,121 @@
+    (set_attr "length" "2")]
+ )
+ 
++(define_insn "*thumb2_addsi3_compare0"
++  [(set (reg:CC_NOOV CC_REGNUM)
++	(compare:CC_NOOV
++	  (plus:SI (match_operand:SI 1 "s_register_operand" "l,  0, r")
++		   (match_operand:SI 2 "arm_add_operand"    "lPt,Ps,rIL"))
++	  (const_int 0)))
++   (set (match_operand:SI 0 "s_register_operand" "=l,l,r")
++	(plus:SI (match_dup 1) (match_dup 2)))]
++  "TARGET_THUMB2"
++  "*
++    HOST_WIDE_INT val;
++
++    if (GET_CODE (operands[2]) == CONST_INT)
++      val = INTVAL (operands[2]);
++    else
++      val = 0;
++
++    if (val < 0 && const_ok_for_arm (ARM_SIGN_EXTEND (-val)))
++      return \"subs\\t%0, %1, #%n2\";
++    else
++      return \"adds\\t%0, %1, %2\";
++  "
++  [(set_attr "conds" "set")
++   (set_attr "length" "2,2,4")]
++)
++
++(define_insn "*thumb2_addsi3_compare0_scratch"
++  [(set (reg:CC_NOOV CC_REGNUM)
++	(compare:CC_NOOV
++	  (plus:SI (match_operand:SI 0 "s_register_operand" "l,  r")
++		   (match_operand:SI 1 "arm_add_operand"    "lPu,rIL"))
++	  (const_int 0)))]
++  "TARGET_THUMB2"
++  "*
++    HOST_WIDE_INT val;
++
++    if (GET_CODE (operands[1]) == CONST_INT)
++      val = INTVAL (operands[1]);
++    else
++      val = 0;
++
++    if (val < 0 && const_ok_for_arm (ARM_SIGN_EXTEND (-val)))
++      return \"cmp\\t%0, #%n1\";
++    else
++      return \"cmn\\t%0, %1\";
++  "
++  [(set_attr "conds" "set")
++   (set_attr "length" "2,4")]
++)
++
++;; 16-bit encodings of "muls" and "mul<c>".  We only use these when
++;; optimizing for size since "muls" is slow on all known
++;; implementations and since "mul<c>" will be generated by
++;; "*arm_mulsi3_v6" anyhow.  The assembler will use a 16-bit encoding
++;; for "mul<c>" whenever possible anyhow.
++(define_peephole2
++  [(set (match_operand:SI 0 "low_register_operand" "")
++        (mult:SI (match_operand:SI 1 "low_register_operand" "")
++                 (match_dup 0)))]
++  "TARGET_THUMB2 && optimize_size && peep2_regno_dead_p (0, CC_REGNUM)"
++  [(parallel
++    [(set (match_dup 0)
++           (mult:SI (match_dup 0) (match_dup 1)))
++     (clobber (reg:CC CC_REGNUM))])]
++  ""
++)
++
++(define_peephole2
++  [(set (match_operand:SI 0 "low_register_operand" "")
++        (mult:SI (match_dup 0)
++	         (match_operand:SI 1 "low_register_operand" "")))]
++  "TARGET_THUMB2 && optimize_size && peep2_regno_dead_p (0, CC_REGNUM)"
++  [(parallel
++    [(set (match_dup 0)
++           (mult:SI (match_dup 0) (match_dup 1)))
++     (clobber (reg:CC CC_REGNUM))])]
++  ""
++)
++
++(define_insn "*thumb2_mulsi_short"
++  [(set (match_operand:SI 0 "low_register_operand" "=l")
++        (mult:SI (match_operand:SI 1 "low_register_operand" "%0")
++                 (match_operand:SI 2 "low_register_operand" "l")))
++   (clobber (reg:CC CC_REGNUM))]
++  "TARGET_THUMB2 && optimize_size && reload_completed"
++  "mul%!\\t%0, %2, %0"
++  [(set_attr "predicable" "yes")
++   (set_attr "length" "2")
++   (set_attr "insn" "muls")])
++
++(define_insn "*thumb2_mulsi_short_compare0"
++  [(set (reg:CC_NOOV CC_REGNUM)
++        (compare:CC_NOOV
++         (mult:SI (match_operand:SI 1 "register_operand" "%0")
++	          (match_operand:SI 2 "register_operand" "l"))
++         (const_int 0)))
++   (set (match_operand:SI 0 "register_operand" "=l")
++	(mult:SI (match_dup 1) (match_dup 2)))]
++  "TARGET_THUMB2 && optimize_size"
++  "muls\\t%0, %2, %0"
++  [(set_attr "length" "2")
++   (set_attr "insn" "muls")])
++
++(define_insn "*thumb2_mulsi_short_compare0_scratch"
++  [(set (reg:CC_NOOV CC_REGNUM)
++        (compare:CC_NOOV
++         (mult:SI (match_operand:SI 1 "register_operand" "%0")
++	          (match_operand:SI 2 "register_operand" "l"))
++         (const_int 0)))
++   (clobber (match_scratch:SI 0 "=l"))]
++  "TARGET_THUMB2 && optimize_size"
++  "muls\\t%0, %2, %0"
++  [(set_attr "length" "2")
++   (set_attr "insn" "muls")])
++
+ (define_insn "*thumb2_cbz"
+   [(set (pc) (if_then_else
+ 	      (eq (match_operand:SI 0 "s_register_operand" "l,?r")
+--- a/src/gcc/config/arm/uclinux-eabi.h
++++ b/src/gcc/config/arm/uclinux-eabi.h
+@@ -50,6 +50,10 @@
+ #undef ARM_DEFAULT_ABI
+ #define ARM_DEFAULT_ABI ARM_ABI_AAPCS_LINUX
+ 
++#undef LINK_GCC_C_SEQUENCE_SPEC
++#define LINK_GCC_C_SEQUENCE_SPEC \
++  "--start-group %G %L --end-group"
++
+ /* Clear the instruction cache from `beg' to `end'.  This makes an
+    inline system call to SYS_cacheflush.  */
+ #undef CLEAR_INSN_CACHE
+--- a/src/gcc/config/arm/unwind-arm.c
++++ b/src/gcc/config/arm/unwind-arm.c
+@@ -1000,7 +1000,6 @@
+   while (code != _URC_END_OF_STACK
+ 	 && code != _URC_FAILURE);
+ 
+- finish:
+   restore_non_core_regs (&saved_vrs);
+   return code;
+ }
+@@ -1168,6 +1167,9 @@
+ 			{
+ 			  matched = (void *)(ucbp + 1);
+ 			  rtti = _Unwind_decode_target2 ((_uw) &data[i + 1]);
++			  /* There is no way to encode an exception
++			     specification for 'class X * &', so
++			     always pass false for is_reference.  */
+ 			  if (__cxa_type_match (ucbp, (type_info *) rtti, 0,
+ 						&matched))
+ 			    break;
+@@ -1197,8 +1199,6 @@
+ 		  ucbp->barrier_cache.bitpattern[4] = (_uw) &data[1];
+ 
+ 		  if (data[0] & uint32_highbit)
+-		    phase2_call_unexpected_after_unwind = 1;
+-		  else
+ 		    {
+ 		      data += rtti_count + 1;
+ 		      /* Setup for entry to the handler.  */
+@@ -1208,6 +1208,8 @@
+ 		      _Unwind_SetGR (context, 0, (_uw) ucbp);
+ 		      return _URC_INSTALL_CONTEXT;
+ 		    }
++		  else
++		    phase2_call_unexpected_after_unwind = 1;
+ 		}
+ 	      if (data[0] & uint32_highbit)
+ 		data++;
+--- a/src/gcc/config/arm/unwind-arm.h
++++ b/src/gcc/config/arm/unwind-arm.h
+@@ -228,10 +228,12 @@
+       if (!tmp)
+ 	return 0;
+ 
+-#if (defined(linux) && !defined(__uClinux__)) || defined(__NetBSD__)
+-      /* Pc-relative indirect.  */
++#if (defined(linux) && !defined(__uClinux__)) || defined(__NetBSD__) \
++    || (defined (__nucleus__) && defined (__shared__))
++      /* Pc-relative indirect.  Propagate the bottom 2 bits, which can
++	 contain referenceness information in gnu unwinding tables.  */
+       tmp += ptr;
+-      tmp = *(_Unwind_Word *) tmp;
++      tmp = *(_Unwind_Word *) (tmp & ~(_Unwind_Word)3) | (tmp & 3);
+ #elif defined(__symbian__) || defined(__uClinux__)
+       /* Absolute pointer.  Nothing more to do.  */
+ #else
+--- a/src/gcc/config/arm/vec-common.md
++++ b/src/gcc/config/arm/vec-common.md
+@@ -38,6 +38,16 @@
+   "TARGET_NEON
+    || (TARGET_REALLY_IWMMXT && VALID_IWMMXT_REG_MODE (<MODE>mode))"
+ {
++  if (can_create_pseudo_p ())
++    {
++      if (GET_CODE (operands[0]) != REG)
++	operands[1] = force_reg (<MODE>mode, operands[1]);
++      else if (TARGET_NEON && CONSTANT_P (operands[1]))
++	{
++	  operands[1] = neon_make_constant (operands[1]);
++	  gcc_assert (operands[1] != NULL_RTX);
++	}
++    }
+ })
+ 
+ ;; Vector arithmetic. Expanders are blank, then unnamed insns implement
+--- a/src/gcc/config/arm/vfp.md
++++ b/src/gcc/config/arm/vfp.md
+@@ -51,7 +51,7 @@
+ ;; problems because small constants get converted into adds.
+ (define_insn "*arm_movsi_vfp"
+   [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m ,*t,r,*t,*t, *Uv")
+-      (match_operand:SI 1 "general_operand"	   "rk, I,K,N,mi,rk,r,*t,*t,*Uvi,*t"))]
++      (match_operand:SI 1 "general_operand"	   "rk, I,K,j,mi,rk,r,*t,*t,*Uvi,*t"))]
+   "TARGET_ARM && TARGET_VFP && TARGET_HARD_FLOAT
+    && (   s_register_operand (operands[0], SImode)
+        || s_register_operand (operands[1], SImode))"
+@@ -82,13 +82,17 @@
+   "
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "*,*,*,*,load1,store1,r_2_f,f_2_r,fcpys,f_loads,f_stores")
++   (set_attr "neon_type" "*,*,*,*,*,*,neon_mcr,neon_mrc,neon_vmov,*,*")
++   (set_attr "insn" "mov,mov,mvn,mov,*,*,*,*,*,*,*")
+    (set_attr "pool_range"     "*,*,*,*,4096,*,*,*,*,1020,*")
+    (set_attr "neg_pool_range" "*,*,*,*,4084,*,*,*,*,1008,*")]
+ )
+ 
++;; See thumb2.md:thumb2_movsi_insn for an explanation of the split
++;; high/low register alternatives for loads and stores here.
+ (define_insn "*thumb2_movsi_vfp"
+-  [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m,*t,r, *t,*t, *Uv")
+-      (match_operand:SI 1 "general_operand"	   "rk, I,K,N,mi,rk,r,*t,*t,*Uvi,*t"))]
++  [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,l,*hk,m,*m,*t,r, *t,*t, *Uv")
++      (match_operand:SI 1 "general_operand"	   "rk, I,K,j,mi,*mi,l,*hk,r,*t,*t,*Uvi,*t"))]
+   "TARGET_THUMB2 && TARGET_VFP && TARGET_HARD_FLOAT
+    && (   s_register_operand (operands[0], SImode)
+        || s_register_operand (operands[1], SImode))"
+@@ -102,34 +106,38 @@
+     case 3:
+       return \"movw%?\\t%0, %1\";
+     case 4:
+-      return \"ldr%?\\t%0, %1\";
+     case 5:
+-      return \"str%?\\t%1, %0\";
++      return \"ldr%?\\t%0, %1\";
+     case 6:
+-      return \"fmsr%?\\t%0, %1\\t%@ int\";
+     case 7:
+-      return \"fmrs%?\\t%0, %1\\t%@ int\";
++      return \"str%?\\t%1, %0\";
+     case 8:
++      return \"fmsr%?\\t%0, %1\\t%@ int\";
++    case 9:
++      return \"fmrs%?\\t%0, %1\\t%@ int\";
++    case 10:
+       return \"fcpys%?\\t%0, %1\\t%@ int\";
+-    case 9: case 10:
++    case 11: case 12:
+       return output_move_vfp (operands);
+     default:
+       gcc_unreachable ();
+     }
+   "
+   [(set_attr "predicable" "yes")
+-   (set_attr "type" "*,*,*,*,load1,store1,r_2_f,f_2_r,fcpys,f_load,f_store")
+-   (set_attr "pool_range"     "*,*,*,*,4096,*,*,*,*,1020,*")
+-   (set_attr "neg_pool_range" "*,*,*,*,   0,*,*,*,*,1008,*")]
++   (set_attr "type" "*,*,*,*,load1,load1,store1,store1,r_2_f,f_2_r,fcpys,f_load,f_store")
++   (set_attr "neon_type" "*,*,*,*,*,*,*,*,neon_mcr,neon_mrc,neon_vmov,*,*")
++   (set_attr "insn" "mov,mov,mvn,mov,*,*,*,*,*,*,*,*,*")
++   (set_attr "pool_range"     "*,*,*,*,1020,4096,*,*,*,*,*,1020,*")
++   (set_attr "neg_pool_range" "*,*,*,*,   0,   0,*,*,*,*,*,1008,*")]
+ )
+ 
+ 
+ ;; DImode moves
+ 
+ (define_insn "*arm_movdi_vfp"
+-  [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r,m,w,r,w,w, Uv")
++  [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r, m,w,r,w,w, Uv")
+ 	(match_operand:DI 1 "di_operand"              "rIK,mi,r,r,w,w,Uvi,w"))]
+-  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP
++  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP && arm_tune != cortexa8
+    && (   register_operand (operands[0], DImode)
+        || register_operand (operands[1], DImode))"
+   "*
+@@ -145,7 +153,10 @@
+     case 4:
+       return \"fmrrd%?\\t%Q0, %R0, %P1\\t%@ int\";
+     case 5:
+-      return \"fcpyd%?\\t%P0, %P1\\t%@ int\";
++      if (TARGET_VFP_SINGLE)
++	return \"fcpys%?\\t%0, %1\\t%@ int\;fcpys%?\\t%p0, %p1\\t%@ int\";
++      else
++	return \"fcpyd%?\\t%P0, %P1\\t%@ int\";
+     case 6: case 7:
+       return output_move_vfp (operands);
+     default:
+@@ -153,7 +164,56 @@
+     }
+   "
+   [(set_attr "type" "*,load2,store2,r_2_f,f_2_r,ffarithd,f_loadd,f_stored")
+-   (set_attr "length" "8,8,8,4,4,4,4,4")
++   (set_attr "neon_type" "*,*,*,neon_mcr_2_mcrr,neon_mrrc,neon_vmov,*,*")
++   (set (attr "length") (cond [(eq_attr "alternative" "0,1,2") (const_int 8)
++			       (eq_attr "alternative" "5")
++				(if_then_else
++				 (eq (symbol_ref "TARGET_VFP_SINGLE") (const_int 1))
++				 (const_int 8)
++				 (const_int 4))]
++			      (const_int 4)))
++   (set_attr "pool_range"     "*,1020,*,*,*,*,1020,*")
++   (set_attr "neg_pool_range" "*,1008,*,*,*,*,1008,*")]
++)
++
++(define_insn "*arm_movdi_vfp_cortexa8"
++  [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r,m,w,!r,w,w, Uv")
++	(match_operand:DI 1 "di_operand"              "rIK,mi,r,r,w,w,Uvi,w"))]
++  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP && arm_tune == cortexa8
++   && (   register_operand (operands[0], DImode)
++       || register_operand (operands[1], DImode))"
++  "*
++  switch (which_alternative)
++    {
++    case 0: 
++      return \"#\";
++    case 1:
++    case 2:
++      return output_move_double (operands);
++    case 3:
++      return \"fmdrr%?\\t%P0, %Q1, %R1\\t%@ int\";
++    case 4:
++      return \"fmrrd%?\\t%Q0, %R0, %P1\\t%@ int\";
++    case 5:
++      if (TARGET_VFP_SINGLE)
++	return \"fcpys%?\\t%0, %1\\t%@ int\;fcpys%?\\t%p0, %p1\\t%@ int\";
++      else
++	return \"fcpyd%?\\t%P0, %P1\\t%@ int\";
++    case 6: case 7:
++      return output_move_vfp (operands);
++    default:
++      gcc_unreachable ();
++    }
++  "
++  [(set_attr "type" "*,load2,store2,r_2_f,f_2_r,ffarithd,f_loadd,f_stored")
++   (set_attr "neon_type" "*,*,*,neon_mcr_2_mcrr,neon_mrrc,neon_vmov,*,*")
++   (set (attr "length") (cond [(eq_attr "alternative" "0,1,2") (const_int 8)
++			       (eq_attr "alternative" "5")
++				(if_then_else
++				 (eq (symbol_ref "TARGET_VFP_SINGLE") (const_int 1))
++				 (const_int 8)
++				 (const_int 4))]
++			      (const_int 4)))
+    (set_attr "pool_range"     "*,1020,*,*,*,*,1020,*")
+    (set_attr "neg_pool_range" "*,1008,*,*,*,*,1008,*")]
+ )
+@@ -172,7 +232,10 @@
+     case 4:
+       return \"fmrrd%?\\t%Q0, %R0, %P1\\t%@ int\";
+     case 5:
+-      return \"fcpyd%?\\t%P0, %P1\\t%@ int\";
++      if (TARGET_VFP_SINGLE)
++	return \"fcpys%?\\t%0, %1\\t%@ int\;fcpys%?\\t%p0, %p1\\t%@ int\";
++      else
++	return \"fcpyd%?\\t%P0, %P1\\t%@ int\";
+     case 6: case 7:
+       return output_move_vfp (operands);
+     default:
+@@ -180,11 +243,123 @@
+     }
+   "
+   [(set_attr "type" "*,load2,store2,r_2_f,f_2_r,ffarithd,f_load,f_store")
+-   (set_attr "length" "8,8,8,4,4,4,4,4")
++   (set_attr "neon_type" "*,*,*,neon_mcr_2_mcrr,neon_mrrc,neon_vmov,*,*")
++   (set (attr "length") (cond [(eq_attr "alternative" "0,1,2") (const_int 8)
++			       (eq_attr "alternative" "5")
++				(if_then_else
++				 (eq (symbol_ref "TARGET_VFP_SINGLE") (const_int 1))
++				 (const_int 8)
++				 (const_int 4))]
++			      (const_int 4)))
+    (set_attr "pool_range"     "*,4096,*,*,*,*,1020,*")
+    (set_attr "neg_pool_range" "*,   0,*,*,*,*,1008,*")]
+ )
+ 
++;; HFmode moves
++(define_insn "*movhf_vfp_neon"
++  [(set (match_operand:HF 0 "nonimmediate_operand" "= t,Um,r,m,t,r,t,r,r")
++	(match_operand:HF 1 "general_operand"	   " Um, t,m,r,t,r,r,t,F"))]
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_NEON_FP16
++   && (   s_register_operand (operands[0], HFmode)
++       || s_register_operand (operands[1], HFmode))"
++  "*
++  switch (which_alternative)
++    {
++    case 0:     /* S register from memory */
++      return \"vld1.16\\t{%z0}, %A1\";
++    case 1:     /* memory from S register */
++      return \"vst1.16\\t{%z1}, %A0\";
++    case 2:     /* ARM register from memory */
++      return \"ldrh\\t%0, %1\\t%@ __fp16\";
++    case 3:     /* memory from ARM register */
++      return \"strh\\t%1, %0\\t%@ __fp16\";
++    case 4:	/* S register from S register */
++      return \"fcpys\\t%0, %1\";
++    case 5:	/* ARM register from ARM register */
++      return \"mov\\t%0, %1\\t%@ __fp16\";
++    case 6:	/* S register from ARM register */
++      return \"fmsr\\t%0, %1\";
++    case 7:	/* ARM register from S register */
++      return \"fmrs\\t%0, %1\";
++    case 8:	/* ARM register from constant */
++      {
++        REAL_VALUE_TYPE r;
++	long bits;
++	rtx ops[4];
++
++        REAL_VALUE_FROM_CONST_DOUBLE (r, operands[1]);
++	bits = real_to_target (NULL, &r, HFmode);
++	ops[0] = operands[0];
++	ops[1] = GEN_INT (bits);
++	ops[2] = GEN_INT (bits & 0xff00);
++	ops[3] = GEN_INT (bits & 0x00ff);
++
++	if (arm_arch_thumb2)
++	  output_asm_insn (\"movw\\t%0, %1\", ops);
++	else
++	  output_asm_insn (\"mov\\t%0, %2\;orr\\t%0, %0, %3\", ops);
++	return \"\";
++       }
++    default:
++      gcc_unreachable ();
++    }
++  "
++  [(set_attr "conds" "unconditional")
++   (set_attr "type" "*,*,load1,store1,fcpys,*,r_2_f,f_2_r,*")
++   (set_attr "neon_type" "neon_vld1_1_2_regs,neon_vst1_1_2_regs_vst2_2_regs,*,*,*,*,*,*,*")
++   (set_attr "length" "4,4,4,4,4,4,4,4,8")]
++)
++
++;; FP16 without element load/store instructions.
++(define_insn "*movhf_vfp"
++  [(set (match_operand:HF 0 "nonimmediate_operand" "=r,m,t,r,t,r,r")
++	(match_operand:HF 1 "general_operand"	   " m,r,t,r,r,t,F"))]
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_FP16 && !TARGET_NEON_FP16
++   && (   s_register_operand (operands[0], HFmode)
++       || s_register_operand (operands[1], HFmode))"
++  "*
++  switch (which_alternative)
++    {
++    case 0:     /* ARM register from memory */
++      return \"ldrh\\t%0, %1\\t%@ __fp16\";
++    case 1:     /* memory from ARM register */
++      return \"strh\\t%1, %0\\t%@ __fp16\";
++    case 2:	/* S register from S register */
++      return \"fcpys\\t%0, %1\";
++    case 3:	/* ARM register from ARM register */
++      return \"mov\\t%0, %1\\t%@ __fp16\";
++    case 4:	/* S register from ARM register */
++      return \"fmsr\\t%0, %1\";
++    case 5:	/* ARM register from S register */
++      return \"fmrs\\t%0, %1\";
++    case 6:	/* ARM register from constant */
++      {
++        REAL_VALUE_TYPE r;
++	long bits;
++	rtx ops[4];
++
++        REAL_VALUE_FROM_CONST_DOUBLE (r, operands[1]);
++	bits = real_to_target (NULL, &r, HFmode);
++	ops[0] = operands[0];
++	ops[1] = GEN_INT (bits);
++	ops[2] = GEN_INT (bits & 0xff00);
++	ops[3] = GEN_INT (bits & 0x00ff);
++
++	if (arm_arch_thumb2)
++	  output_asm_insn (\"movw\\t%0, %1\", ops);
++	else
++	  output_asm_insn (\"mov\\t%0, %2\;orr\\t%0, %0, %3\", ops);
++	return \"\";
++       }
++    default:
++      gcc_unreachable ();
++    }
++  "
++  [(set_attr "conds" "unconditional")
++   (set_attr "type" "load1,store1,fcpys,*,r_2_f,f_2_r,*")
++   (set_attr "length" "4,4,4,4,4,4,8")]
++)
++
+ 
+ ;; SFmode moves
+ ;; Disparage the w<->r cases because reloading an invalid address is
+@@ -222,6 +397,8 @@
+   [(set_attr "predicable" "yes")
+    (set_attr "type"
+      "r_2_f,f_2_r,fconsts,f_loads,f_stores,load1,store1,fcpys,*")
++   (set_attr "neon_type" "neon_mcr,neon_mrc,*,*,*,*,*,neon_vmov,*")
++   (set_attr "insn" "*,*,*,*,*,*,*,*,mov")
+    (set_attr "pool_range" "*,*,*,1020,*,4096,*,*,*")
+    (set_attr "neg_pool_range" "*,*,*,1008,*,4080,*,*,*")]
+ )
+@@ -258,6 +435,8 @@
+   [(set_attr "predicable" "yes")
+    (set_attr "type"
+      "r_2_f,f_2_r,fconsts,f_load,f_store,load1,store1,fcpys,*")
++   (set_attr "neon_type" "neon_mcr,neon_mrc,*,*,*,*,*,neon_vmov,*")
++   (set_attr "insn" "*,*,*,*,*,*,*,*,mov")
+    (set_attr "pool_range" "*,*,*,1020,*,4092,*,*,*")
+    (set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
+ )
+@@ -266,8 +445,8 @@
+ ;; DFmode moves
+ 
+ (define_insn "*movdf_vfp"
+-  [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,r, m,w  ,Uv,w,r")
+-	(match_operand:DF 1 "soft_df_operand"		   " ?r,w,Dv,mF,r,UvF,w, w,r"))]
++  [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,w, r, m,w  ,Uv,w,r")
++	(match_operand:DF 1 "soft_df_operand"		   " ?r,w,Dy,D0,mF,r,UvF,w, w,r"))]
+   "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP
+    && (   register_operand (operands[0], DFmode)
+        || register_operand (operands[1], DFmode))"
+@@ -280,14 +459,20 @@
+       case 1:
+ 	return \"fmrrd%?\\t%Q0, %R0, %P1\";
+       case 2:
++	gcc_assert (TARGET_VFP_DOUBLE);
+         return \"fconstd%?\\t%P0, #%G1\";
+-      case 3: case 4:
++      case 3:
++	return \"vmov.i32\\t%P0, #0\";
++      case 4: case 5:
+ 	return output_move_double (operands);
+-      case 5: case 6:
++      case 6: case 7:
+ 	return output_move_vfp (operands);
+-      case 7:
+-	return \"fcpyd%?\\t%P0, %P1\";
+       case 8:
++	if (TARGET_VFP_SINGLE)
++	  return \"fcpys%?\\t%0, %1\;fcpys%?\\t%p0, %p1\";
++	else
++	  return \"fcpyd%?\\t%P0, %P1\";
++      case 9:
+         return \"#\";
+       default:
+ 	gcc_unreachable ();
+@@ -295,16 +480,25 @@
+     }
+   "
+   [(set_attr "type"
+-     "r_2_f,f_2_r,fconstd,f_loadd,f_stored,load2,store2,ffarithd,*")
+-   (set_attr "length" "4,4,4,8,8,4,4,4,8")
+-   (set_attr "pool_range" "*,*,*,1020,*,1020,*,*,*")
+-   (set_attr "neg_pool_range" "*,*,*,1008,*,1008,*,*,*")]
++     "r_2_f,f_2_r,fconstd,*,f_loadd,f_stored,load2,store2,ffarithd,*")
++   (set_attr "neon_type" "neon_mcr_2_mcrr,neon_mrrc,*,neon_vmov,*,*,*,*,neon_vmov,*")
++   (set (attr "length") (cond [(eq_attr "alternative" "4,5,9") (const_int 8)
++			       (eq_attr "alternative" "8")
++				(if_then_else
++				 (eq (symbol_ref "TARGET_VFP_SINGLE") (const_int 1))
++				 (const_int 8)
++				 (const_int 4))]
++			      (const_int 4)))
++   (set_attr "pool_range" "*,*,*,*,1020,*,1020,*,*,*")
++   (set_attr "neg_pool_range" "*,*,*,*,1008,*,1008,*,*,*")]
+ )
+ 
+ (define_insn "*thumb2_movdf_vfp"
+-  [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,r, m,w  ,Uv,w,r")
+-	(match_operand:DF 1 "soft_df_operand"		   " ?r,w,Dv,mF,r,UvF,w, w,r"))]
+-  "TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP"
++  [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,w, r, m,w  ,Uv,w,r")
++	(match_operand:DF 1 "soft_df_operand"		   " ?r,w,Dy,D0,mF,r,UvF,w, w,r"))]
++  "TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP
++   && (   register_operand (operands[0], DFmode)
++       || register_operand (operands[1], DFmode))"
+   "*
+   {
+     switch (which_alternative)
+@@ -314,23 +508,36 @@
+       case 1:
+ 	return \"fmrrd%?\\t%Q0, %R0, %P1\";
+       case 2:
++	gcc_assert (TARGET_VFP_DOUBLE);
+ 	return \"fconstd%?\\t%P0, #%G1\";
+-      case 3: case 4: case 8:
++      case 3:
++	return \"vmov.i32\\t%P0, #0\";
++      case 4: case 5: case 9:
+ 	return output_move_double (operands);
+-      case 5: case 6:
++      case 6: case 7:
+ 	return output_move_vfp (operands);
+-      case 7:
+-	return \"fcpyd%?\\t%P0, %P1\";
++      case 8:
++	if (TARGET_VFP_SINGLE)
++	  return \"fcpys%?\\t%0, %1\;fcpys%?\\t%p0, %p1\";
++	else
++	  return \"fcpyd%?\\t%P0, %P1\";
+       default:
+ 	abort ();
+       }
+     }
+   "
+   [(set_attr "type"
+-     "r_2_f,f_2_r,fconstd,load2,store2,f_load,f_store,ffarithd,*")
+-   (set_attr "length" "4,4,4,8,8,4,4,4,8")
+-   (set_attr "pool_range" "*,*,*,4096,*,1020,*,*,*")
+-   (set_attr "neg_pool_range" "*,*,*,0,*,1008,*,*,*")]
++     "r_2_f,f_2_r,fconstd,*,load2,store2,f_load,f_store,ffarithd,*")
++   (set_attr "neon_type" "neon_mcr_2_mcrr,neon_mrrc,*,neon_vmov,*,*,*,*,neon_vmov,*")
++   (set (attr "length") (cond [(eq_attr "alternative" "4,5,9") (const_int 8)
++			       (eq_attr "alternative" "8")
++				(if_then_else
++				 (eq (symbol_ref "TARGET_VFP_SINGLE") (const_int 1))
++				 (const_int 8)
++				 (const_int 4))]
++			      (const_int 4)))
++   (set_attr "pool_range" "*,*,*,*,4096,*,1020,*,*,*")
++   (set_attr "neg_pool_range" "*,*,*,*,0,*,1008,*,*,*")]
+ )
+ 
+ 
+@@ -356,7 +563,8 @@
+    fmrs%D3\\t%0, %2\;fmrs%d3\\t%0, %1"
+    [(set_attr "conds" "use")
+     (set_attr "length" "4,4,8,4,4,8,4,4,8")
+-    (set_attr "type" "fcpys,fcpys,fcpys,r_2_f,r_2_f,r_2_f,f_2_r,f_2_r,f_2_r")]
++    (set_attr "type" "fcpys,fcpys,fcpys,r_2_f,r_2_f,r_2_f,f_2_r,f_2_r,f_2_r")
++    (set_attr "neon_type" "neon_vmov,neon_vmov,neon_vmov,neon_mcr,neon_mcr,neon_mcr,neon_mrc,neon_mrc,neon_mrc")]
+ )
+ 
+ (define_insn "*thumb2_movsfcc_vfp"
+@@ -379,7 +587,8 @@
+    ite\\t%D3\;fmrs%D3\\t%0, %2\;fmrs%d3\\t%0, %1"
+    [(set_attr "conds" "use")
+     (set_attr "length" "6,6,10,6,6,10,6,6,10")
+-    (set_attr "type" "fcpys,fcpys,fcpys,r_2_f,r_2_f,r_2_f,f_2_r,f_2_r,f_2_r")]
++    (set_attr "type" "fcpys,fcpys,fcpys,r_2_f,r_2_f,r_2_f,f_2_r,f_2_r,f_2_r")
++    (set_attr "neon_type" "neon_vmov,neon_vmov,neon_vmov,neon_mcr,neon_mcr,neon_mcr,neon_mrc,neon_mrc,neon_mrc")]
+ )
+ 
+ (define_insn "*movdfcc_vfp"
+@@ -389,7 +598,7 @@
+ 	    [(match_operand 4 "cc_register" "") (const_int 0)])
+ 	  (match_operand:DF 1 "s_register_operand" "0,w,w,0,?r,?r,0,w,w")
+ 	  (match_operand:DF 2 "s_register_operand" "w,0,w,?r,0,?r,w,0,w")))]
+-  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "@
+    fcpyd%D3\\t%P0, %P2
+    fcpyd%d3\\t%P0, %P1
+@@ -402,7 +611,8 @@
+    fmrrd%D3\\t%Q0, %R0, %P2\;fmrrd%d3\\t%Q0, %R0, %P1"
+    [(set_attr "conds" "use")
+     (set_attr "length" "4,4,8,4,4,8,4,4,8")
+-    (set_attr "type" "ffarithd,ffarithd,ffarithd,r_2_f,r_2_f,r_2_f,f_2_r,f_2_r,f_2_r")]
++    (set_attr "type" "ffarithd,ffarithd,ffarithd,r_2_f,r_2_f,r_2_f,f_2_r,f_2_r,f_2_r")
++    (set_attr "neon_type" "neon_vmov,neon_vmov,neon_vmov,neon_mcr_2_mcrr,neon_mcr_2_mcrr,neon_mcr_2_mcrr,neon_mrrc,neon_mrrc,neon_mrrc")]
+ )
+ 
+ (define_insn "*thumb2_movdfcc_vfp"
+@@ -412,7 +622,7 @@
+ 	    [(match_operand 4 "cc_register" "") (const_int 0)])
+ 	  (match_operand:DF 1 "s_register_operand" "0,w,w,0,?r,?r,0,w,w")
+ 	  (match_operand:DF 2 "s_register_operand" "w,0,w,?r,0,?r,w,0,w")))]
+-  "TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "@
+    it\\t%D3\;fcpyd%D3\\t%P0, %P2
+    it\\t%d3\;fcpyd%d3\\t%P0, %P1
+@@ -425,7 +635,8 @@
+    ite\\t%D3\;fmrrd%D3\\t%Q0, %R0, %P2\;fmrrd%d3\\t%Q0, %R0, %P1"
+    [(set_attr "conds" "use")
+     (set_attr "length" "6,6,10,6,6,10,6,6,10")
+-    (set_attr "type" "ffarithd,ffarithd,ffarithd,r_2_f,r_2_f,r_2_f,f_2_r,f_2_r,f_2_r")]
++    (set_attr "type" "ffarithd,ffarithd,ffarithd,r_2_f,r_2_f,r_2_f,f_2_r,f_2_r,f_2_r")
++    (set_attr "neon_type" "neon_vmov,neon_vmov,neon_vmov,neon_mcr_2_mcrr,neon_mcr_2_mcrr,neon_mcr_2_mcrr,neon_mrrc,neon_mrrc,neon_mrrc")]
+ )
+ 
+ 
+@@ -443,7 +654,7 @@
+ (define_insn "*absdf2_vfp"
+   [(set (match_operand:DF	  0 "s_register_operand" "=w")
+ 	(abs:DF (match_operand:DF 1 "s_register_operand" "w")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "fabsd%?\\t%P0, %P1"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "ffarithd")]
+@@ -463,12 +674,12 @@
+ (define_insn_and_split "*negdf2_vfp"
+   [(set (match_operand:DF	  0 "s_register_operand" "=w,?r,?r")
+ 	(neg:DF (match_operand:DF 1 "s_register_operand" "w,0,r")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "@
+    fnegd%?\\t%P0, %P1
+    #
+    #"
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP && reload_completed
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE && reload_completed
+    && arm_general_register_operand (operands[0], DFmode)"
+   [(set (match_dup 0) (match_dup 1))]
+   "
+@@ -523,7 +734,7 @@
+   [(set (match_operand:DF	   0 "s_register_operand" "=w")
+ 	(plus:DF (match_operand:DF 1 "s_register_operand" "w")
+ 		 (match_operand:DF 2 "s_register_operand" "w")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "faddd%?\\t%P0, %P1, %P2"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "faddd")]
+@@ -544,7 +755,7 @@
+   [(set (match_operand:DF	    0 "s_register_operand" "=w")
+ 	(minus:DF (match_operand:DF 1 "s_register_operand" "w")
+ 		  (match_operand:DF 2 "s_register_operand" "w")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "fsubd%?\\t%P0, %P1, %P2"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "faddd")]
+@@ -567,7 +778,7 @@
+   [(set (match_operand:DF	  0 "s_register_operand" "+w")
+ 	(div:DF (match_operand:DF 1 "s_register_operand" "w")
+ 		(match_operand:DF 2 "s_register_operand" "w")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "fdivd%?\\t%P0, %P1, %P2"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "fdivd")]
+@@ -590,7 +801,7 @@
+   [(set (match_operand:DF	   0 "s_register_operand" "+w")
+ 	(mult:DF (match_operand:DF 1 "s_register_operand" "w")
+ 		 (match_operand:DF 2 "s_register_operand" "w")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "fmuld%?\\t%P0, %P1, %P2"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "fmuld")]
+@@ -611,7 +822,7 @@
+   [(set (match_operand:DF		   0 "s_register_operand" "+w")
+ 	(mult:DF (neg:DF (match_operand:DF 1 "s_register_operand" "w"))
+ 		 (match_operand:DF	   2 "s_register_operand" "w")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "fnmuld%?\\t%P0, %P1, %P2"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "fmuld")]
+@@ -626,7 +837,8 @@
+ 	(plus:SF (mult:SF (match_operand:SF 2 "s_register_operand" "t")
+ 			  (match_operand:SF 3 "s_register_operand" "t"))
+ 		 (match_operand:SF	    1 "s_register_operand" "0")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP
++   && (!arm_tune_marvell_f || optimize_size)"
+   "fmacs%?\\t%0, %2, %3"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "fmacs")]
+@@ -637,7 +849,8 @@
+ 	(plus:DF (mult:DF (match_operand:DF 2 "s_register_operand" "w")
+ 			  (match_operand:DF 3 "s_register_operand" "w"))
+ 		 (match_operand:DF	    1 "s_register_operand" "0")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE
++   && (!arm_tune_marvell_f || optimize_size)"
+   "fmacd%?\\t%P0, %P2, %P3"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "fmacd")]
+@@ -649,7 +862,8 @@
+ 	(minus:SF (mult:SF (match_operand:SF 2 "s_register_operand" "t")
+ 			   (match_operand:SF 3 "s_register_operand" "t"))
+ 		  (match_operand:SF	     1 "s_register_operand" "0")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP
++   && (!arm_tune_marvell_f || optimize_size)"
+   "fmscs%?\\t%0, %2, %3"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "fmacs")]
+@@ -660,7 +874,8 @@
+ 	(minus:DF (mult:DF (match_operand:DF 2 "s_register_operand" "w")
+ 			   (match_operand:DF 3 "s_register_operand" "w"))
+ 		  (match_operand:DF	     1 "s_register_operand" "0")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE
++   && (!arm_tune_marvell_f || optimize_size)"
+   "fmscd%?\\t%P0, %P2, %P3"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "fmacd")]
+@@ -672,7 +887,8 @@
+ 	(minus:SF (match_operand:SF	     1 "s_register_operand" "0")
+ 		  (mult:SF (match_operand:SF 2 "s_register_operand" "t")
+ 			   (match_operand:SF 3 "s_register_operand" "t"))))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP
++   && (!arm_tune_marvell_f || optimize_size)"
+   "fnmacs%?\\t%0, %2, %3"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "fmacs")]
+@@ -683,7 +899,8 @@
+ 	(minus:DF (match_operand:DF	     1 "s_register_operand" "0")
+ 		  (mult:DF (match_operand:DF 2 "s_register_operand" "w")
+ 			   (match_operand:DF 3 "s_register_operand" "w"))))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE
++   && (!arm_tune_marvell_f || optimize_size)"
+   "fnmacd%?\\t%P0, %P2, %P3"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "fmacd")]
+@@ -697,7 +914,8 @@
+ 		    (neg:SF (match_operand:SF 2 "s_register_operand" "t"))
+ 		    (match_operand:SF	      3 "s_register_operand" "t"))
+ 		  (match_operand:SF	      1 "s_register_operand" "0")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP
++   && (!arm_tune_marvell_f || optimize_size)"
+   "fnmscs%?\\t%0, %2, %3"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "fmacs")]
+@@ -709,7 +927,8 @@
+ 		    (neg:DF (match_operand:DF 2 "s_register_operand" "w"))
+ 		    (match_operand:DF	      3 "s_register_operand" "w"))
+ 		  (match_operand:DF	      1 "s_register_operand" "0")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE
++   && (!arm_tune_marvell_f || optimize_size)"
+   "fnmscd%?\\t%P0, %P2, %P3"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "fmacd")]
+@@ -721,7 +940,7 @@
+ (define_insn "*extendsfdf2_vfp"
+   [(set (match_operand:DF		   0 "s_register_operand" "=w")
+ 	(float_extend:DF (match_operand:SF 1 "s_register_operand" "t")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "fcvtds%?\\t%P0, %1"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "f_cvt")]
+@@ -730,12 +949,30 @@
+ (define_insn "*truncdfsf2_vfp"
+   [(set (match_operand:SF		   0 "s_register_operand" "=t")
+ 	(float_truncate:SF (match_operand:DF 1 "s_register_operand" "w")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "fcvtsd%?\\t%0, %P1"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "f_cvt")]
+ )
+ 
++(define_insn "extendhfsf2"
++  [(set (match_operand:SF		   0 "s_register_operand" "=t")
++	(float_extend:SF (match_operand:HF 1 "s_register_operand" "t")))]
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_FP16"
++  "vcvtb%?.f32.f16\\t%0, %1"
++  [(set_attr "predicable" "yes")
++   (set_attr "type" "f_cvt")]
++)
++
++(define_insn "truncsfhf2"
++  [(set (match_operand:HF		   0 "s_register_operand" "=t")
++	(float_truncate:HF (match_operand:SF 1 "s_register_operand" "t")))]
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_FP16"
++  "vcvtb%?.f16.f32\\t%0, %1"
++  [(set_attr "predicable" "yes")
++   (set_attr "type" "f_cvt")]
++)
++
+ (define_insn "*truncsisf2_vfp"
+   [(set (match_operand:SI		  0 "s_register_operand" "=t")
+ 	(fix:SI (fix:SF (match_operand:SF 1 "s_register_operand" "t"))))]
+@@ -748,7 +985,7 @@
+ (define_insn "*truncsidf2_vfp"
+   [(set (match_operand:SI		  0 "s_register_operand" "=t")
+ 	(fix:SI (fix:DF (match_operand:DF 1 "s_register_operand" "w"))))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "ftosizd%?\\t%0, %P1"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "f_cvt")]
+@@ -767,7 +1004,7 @@
+ (define_insn "fixuns_truncdfsi2"
+   [(set (match_operand:SI		  0 "s_register_operand" "=t")
+ 	(unsigned_fix:SI (fix:DF (match_operand:DF 1 "s_register_operand" "t"))))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "ftouizd%?\\t%0, %P1"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "f_cvt")]
+@@ -786,7 +1023,7 @@
+ (define_insn "*floatsidf2_vfp"
+   [(set (match_operand:DF	    0 "s_register_operand" "=w")
+ 	(float:DF (match_operand:SI 1 "s_register_operand" "t")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "fsitod%?\\t%P0, %1"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "f_cvt")]
+@@ -805,7 +1042,7 @@
+ (define_insn "floatunssidf2"
+   [(set (match_operand:DF	    0 "s_register_operand" "=w")
+ 	(unsigned_float:DF (match_operand:SI 1 "s_register_operand" "t")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "fuitod%?\\t%P0, %1"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "f_cvt")]
+@@ -826,7 +1063,7 @@
+ (define_insn "*sqrtdf2_vfp"
+   [(set (match_operand:DF	   0 "s_register_operand" "=w")
+ 	(sqrt:DF (match_operand:DF 1 "s_register_operand" "w")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "fsqrtd%?\\t%P0, %P1"
+   [(set_attr "predicable" "yes")
+    (set_attr "type" "fdivd")]
+@@ -878,9 +1115,9 @@
+   [(set (reg:CCFP CC_REGNUM)
+ 	(compare:CCFP (match_operand:DF 0 "s_register_operand"  "w")
+ 		      (match_operand:DF 1 "vfp_compare_operand" "wG")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "#"
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   [(set (reg:CCFP VFPCC_REGNUM)
+ 	(compare:CCFP (match_dup 0)
+ 		       (match_dup 1)))
+@@ -893,9 +1130,9 @@
+   [(set (reg:CCFPE CC_REGNUM)
+ 	(compare:CCFPE (match_operand:DF 0 "s_register_operand"  "w")
+ 		       (match_operand:DF 1 "vfp_compare_operand" "wG")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "#"
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   [(set (reg:CCFPE VFPCC_REGNUM)
+ 	(compare:CCFPE (match_dup 0)
+ 		       (match_dup 1)))
+@@ -935,7 +1172,7 @@
+   [(set (reg:CCFP VFPCC_REGNUM)
+ 	(compare:CCFP (match_operand:DF 0 "s_register_operand"  "w,w")
+ 		      (match_operand:DF 1 "vfp_compare_operand" "w,G")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "@
+    fcmpd%?\\t%P0, %P1
+    fcmpzd%?\\t%P0"
+@@ -947,7 +1184,7 @@
+   [(set (reg:CCFPE VFPCC_REGNUM)
+ 	(compare:CCFPE (match_operand:DF 0 "s_register_operand"  "w,w")
+ 		       (match_operand:DF 1 "vfp_compare_operand" "w,G")))]
+-  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
++  "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE"
+   "@
+    fcmped%?\\t%P0, %P1
+    fcmpezd%?\\t%P0"
+--- a/src/gcc/config/arm/vxworks.h
++++ b/src/gcc/config/arm/vxworks.h
+@@ -97,7 +97,7 @@
+ /* There is no default multilib.  */
+ #undef MULTILIB_DEFAULTS
+ 
+-#define FPUTYPE_DEFAULT FPUTYPE_VFP
++#define FPUTYPE_DEFAULT "vfp"
+ 
+ #undef FUNCTION_PROFILER
+ #define FUNCTION_PROFILER VXWORKS_FUNCTION_PROFILER
+@@ -117,3 +117,10 @@
+ 
+ #undef TARGET_DEFAULT_WORD_RELOCATIONS
+ #define TARGET_DEFAULT_WORD_RELOCATIONS 1
++
++/* VxWorks uses RELA relocations.  It doesn't actually use movw/movt
++   relocations because the loader can't cope with them.  See
++   TARGET_DEFAULT_WORD_RELOCATIONS above.  In principle if it did
++   then they would accept arbitrary offsets.  */
++#undef TARGET_USE_RELA
++#define TARGET_USE_RELA 1
+--- a/src/gcc/config/arm/wince-pe.h
++++ b/src/gcc/config/arm/wince-pe.h
+@@ -1,7 +1,11 @@
+-/* Definitions of target machine for GNU compiler, for ARM with WINCE-PE obj format.
++/* Definitions of target machine for GNU compiler, for ARM with
++   WINCE-PE obj format.
++
+    Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+    Contributed by Nick Clifton <nickc@redhat.com>
+-   
++
++   Further development by Pedro Alves <pedro_alves@portugalmail.pt>
++
+    This file is part of GCC.
+ 
+    GCC is free software; you can redistribute it and/or modify it
+@@ -18,9 +22,243 @@
+    along with GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+-#undef  TARGET_DEFAULT
+-#define TARGET_DEFAULT	(MASK_NOP_FUN_DLLIMPORT)
++/* Enable WinCE specific code.  */
++#define ARM_WINCE 1
++
++#undef MATH_LIBRARY
++#define MATH_LIBRARY ""
++
++#define TARGET_EXECUTABLE_SUFFIX ".exe"
++
++#undef  TARGET_VERSION
++#define TARGET_VERSION fprintf (stderr, " (arm Windows CE/Native SDK)");
++
++#undef SUBTARGET_CONDITIONAL_REGISTER_USAGE
++#define SUBTARGET_CONDITIONAL_REGISTER_USAGE
+ 
+ #undef  MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-  { "marm", "mlittle-endian", "msoft-float", "mno-thumb-interwork" }  
++  { "marm", "mlittle-endian", "msoft-float", "mno-thumb-interwork" }
++
++#undef SUBTARGET_CPU_DEFAULT
++#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm8
++
++/* We must store doubles in little endian order.  Specifying the
++   default of VFP assures that.  To guaranty VFP insns won't be
++   emitted by default, we default to float-abi=soft.  */
++#undef  FPUTYPE_DEFAULT
++#define FPUTYPE_DEFAULT "vfp"
++
++#undef CPP_SPEC
++#define CPP_SPEC "%(cpp_cpu) \
++-DWIN32 -D_WIN32 -D__WIN32 -D__WIN32__ \
++%{!nostdinc: -idirafter ../include/w32api%s -idirafter ../../include/w32api%s } \
++"
++
++#ifndef ASM_SPEC
++#define ASM_SPEC "\
++%{mbig-endian:-EB} \
++%{mlittle-endian:-EL} \
++%{mcpu=*:-mcpu=%*} \
++%{march=*:-march=%*} \
++%{mapcs-*:-mapcs-%*} \
++%(subtarget_asm_float_spec) \
++%{mthumb-interwork:-mthumb-interwork} \
++%{msoft-float:-mfloat-abi=soft} %{mhard-float:-mfloat-abi=hard} \
++%{mfloat-abi=*} %{mfpu=*} \
++%(subtarget_extra_asm_spec)"
++#endif
++
++#define EXTRA_OS_CPP_BUILTINS()
++
++#define TARGET_OS_CPP_BUILTINS()					\
++  do									\
++  {									\
++      /* We currently define UNDER_CE to a non-value, as it seems	\
++         MSVC2005 does the same.  */ 					\
++      builtin_define_std ("UNDER_CE");					\
++      builtin_define ("_UNICODE");					\
++      builtin_define_std ("UNICODE");					\
++	  /* Let's just ignore stdcall, and fastcall.  */ 		\
++      builtin_define ("__stdcall=__attribute__((__cdecl__))");		\
++      builtin_define ("__fastcall=__attribute__((__cdecl__))");		\
++      builtin_define ("__cdecl=__attribute__((__cdecl__))");		\
++      if (!flag_iso)							\
++        {								\
++          builtin_define ("_stdcall=__attribute__((__cdecl__))");	\
++          builtin_define ("_fastcall=__attribute__((__cdecl__))");	\
++          builtin_define ("_cdecl=__attribute__((__cdecl__))");		\
++        }								\
++      /* Even though linkonce works with static libs, this is needed 	\
++          to compare typeinfo symbols across dll boundaries.  */	\
++      builtin_define ("__GXX_MERGED_TYPEINFO_NAMES=0");			\
++      builtin_define ("__GXX_TYPEINFO_EQUALITY_INLINE=0");		\
++      EXTRA_OS_CPP_BUILTINS ();						\
++      {                                                       		\
++        /* Define these to be compatible MSFT's tools.  */    		\
++        char buf[64];                                         		\
++        int arch = arm_major_arch ();                         		\
++        sprintf (buf, "_M_ARM=%d", arch);                     		\
++        builtin_define (buf);                                 		\
++        if (arm_thumb_arch_p ())                              		\
++          {                                                   		\
++            sprintf (buf, "_M_ARMT=%d", arch);                		\
++            builtin_define (buf);                            		\
++          }                                                   		\
++        /* Always defined as empty.  */                       		\
++        builtin_define ("ARM=");                              		\
++      }                                                       		\
++  }                                                           		\
++  while (0)
++
++/* Now we define the strings used to build the spec file.  */
++#undef STARTFILE_SPEC
++#define STARTFILE_SPEC ""
++
++#undef LIBGCC_SPEC
++#define LIBGCC_SPEC "-lgcc"
++
++/* Link with coredll, the main libc in the native SDK, and with
++   corelibc, a static lib that contains the start files, among other
++   basic crt stuff.  */
++
++#undef LIB_SPEC
++#define LIB_SPEC "-lcoredll -lcorelibc"
++
++#undef LINK_SPEC
++#define LINK_SPEC "\
++  %{shared: %{mdll: %eshared and mdll are not compatible}} \
++  %{shared: --shared} %{mdll:--dll} \
++  %{static:-Bstatic} %{!static:-Bdynamic} \
++  %{shared|mdll: -e DllMainCRTStartup} \
++  "
++
++
++/* Don't assume anything about the header files.  */
++#define NO_IMPLICIT_EXTERN_C
++
++
++/* Define types for compatibility with MS runtime.  */
++
++#undef DEFAULT_SIGNED_CHAR
++#define DEFAULT_SIGNED_CHAR 1
++
++#undef SIZE_TYPE
++#define SIZE_TYPE "unsigned int"
++
++#undef PTRDIFF_TYPE
++#define PTRDIFF_TYPE "int"
++
++#undef WCHAR_TYPE_SIZE
++#define WCHAR_TYPE_SIZE 16
++
++#undef WCHAR_TYPE
++#define WCHAR_TYPE "short unsigned int"
++
++#undef WINT_TYPE
++#define WINT_TYPE "short unsigned int"
++
++
++#undef DWARF2_UNWIND_INFO
++#define DWARF2_UNWIND_INFO 0
++
++#define DWARF2_DEBUGGING_INFO 1
++
++#undef  PREFERRED_DEBUGGING_TYPE
++#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
++
++#undef HAVE_AS_DWARF2_DEBUG_LINE
++#define HAVE_AS_DWARF2_DEBUG_LINE 1
++
++/* Use section relative relocations for debugging offsets.  Unlike
++   other targets that fake this by putting the section VMA at 0, PE
++   won't allow it.  */
++#define ASM_OUTPUT_DWARF_OFFSET(FILE, SIZE, LABEL, SECTION)    \
++  do {                                                \
++    if (SIZE != 4)                                    \
++      abort ();                                       \
++                                                      \
++    fputs ("\t.secrel32\t", FILE);                    \
++    assemble_name (FILE, LABEL);                      \
++  } while (0)
++
++/* Align output to a power of two.  Note ".align 0" is redundant,
++   and also GAS will treat it as ".align 2" which we do not want.  */
++#undef ASM_OUTPUT_ALIGN
++#define ASM_OUTPUT_ALIGN(STREAM, POWER)			\
++  do							\
++    {							\
++      if ((POWER) > 0)					\
++	fprintf (STREAM, "\t.align\t%d\n", POWER);	\
++    }							\
++  while (0)
++
++/* Prefix for internally generated assembler labels.  If we aren't using
++   underscores, we are using prefix `.'s to identify labels that should
++   be ignored.  */
++/* If user-symbols don't have underscores,
++   then it must take more than `L' to identify
++   a label that should be ignored.  */
++
++#undef  LPREFIX
++#define LPREFIX ".L"
++
++#undef LOCAL_LABEL_PREFIX
++#define LOCAL_LABEL_PREFIX "."
++
++/* The prefix to add to user-visible assembler symbols.
++   Arm Windows CE is not underscored.  */
++
++#undef  USER_LABEL_PREFIX
++#define USER_LABEL_PREFIX ""
++
++/* This is how to store into the string BUF
++   the symbol_ref name of an internal numbered label where
++   PREFIX is the class of label and NUM is the number within the class.
++   This is suitable for output with `assemble_name'.  */
++#undef  ASM_GENERATE_INTERNAL_LABEL
++#define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER)	\
++  sprintf ((BUF), ".%s%ld", (PREFIX), (long)(NUMBER))
++
++/* We have to re-define this to prevent any conflicts.  */
++#undef ARM_MCOUNT_NAME
++#define ARM_MCOUNT_NAME "_mcount"
++
++
++/* Emit code to check the stack when allocating more than 4000
++   bytes in one go.  */
++/*#define CHECK_STACK_LIMIT 4000 */
++
++
++
++/* We do bitfields MSVC-compatibly by default.
++   We choose to be compatible with Microsoft's ARM and Thumb compilers,
++   which always return aggregates in memory.  */
++
++/* TODO: Maybe add MASK_STACK_PROBE ? and enable CHECK_STACK_LIMIT?  */
++#undef TARGET_DEFAULT
++#define TARGET_DEFAULT (MASK_NOP_FUN_DLLIMPORT | \
++                        MASK_MS_BITFIELD_LAYOUT)
++
++/* A bit-field declared as `int' forces `int' alignment for the struct.  */
++#undef PCC_BITFIELD_TYPE_MATTERS
++#define PCC_BITFIELD_TYPE_MATTERS 1
++#define GROUP_BITFIELDS_BY_ALIGN TYPE_NATIVE(rec)
++
++#undef DEFAULT_STRUCTURE_SIZE_BOUNDARY
++#define DEFAULT_STRUCTURE_SIZE_BOUNDARY 8
++
++#undef ARM_DOUBLEWORD_ALIGN
++#define ARM_DOUBLEWORD_ALIGN 0
++
++#undef BIGGEST_ALIGNMENT
++#define BIGGEST_ALIGNMENT 64
++
++/* defined in pe.h */
++#undef SYSV_PRAGMA
++
++#undef TREE
++
++#ifndef BUFSIZ
++# undef FILE
++#endif
+--- a/src/gcc/config/arm/wrs-linux.h
++++ b/src/gcc/config/arm/wrs-linux.h
+@@ -0,0 +1,52 @@
++/* Wind River GNU/Linux Configuration.
++   Copyright (C) 2006, 2007, 2008
++   Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 3, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++/* Use the ARM926EJ-S by default.  */
++#undef SUBTARGET_CPU_DEFAULT
++#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm926ejs
++
++/* Add a -tiwmmxt option for convenience in generating multilibs.
++   This option generates big-endian IWMMXT code.  */
++#undef CC1_SPEC
++#define CC1_SPEC "							\
++ %{tarm926ej-s:	-mcpu=arm926ej-s ;					\
++   tthumb2-v7-a: %{!mcpu=*:%{!march=*:-mcpu=cortex-a8}} -mthumb ;	\
++   tthumb2-v7-a-neon: %{!mcpu=*:%{!march=*:-mcpu=cortex-a8}}		\
++                      -mthumb -mfloat-abi=softfp -mfpu=neon }		\
++ %{profile:-p}"
++
++/* Since the ARM926EJ-S is the default processor, we do not need to
++   provide an explicit multilib for that processor.  */
++#undef MULTILIB_DEFAULTS
++#define MULTILIB_DEFAULTS \
++  { "tarm926ej-s" }
++
++/* The GLIBC headers are in /usr/include, relative to the sysroot; the
++   uClibc headers are in /uclibc/usr/include.  */
++#undef SYSROOT_HEADERS_SUFFIX_SPEC
++#define SYSROOT_HEADERS_SUFFIX_SPEC		\
++  "%{muclibc:/uclibc}" 
++
++/* The various C libraries each have their own subdirectory.  */
++#undef SYSROOT_SUFFIX_SPEC
++#define SYSROOT_SUFFIX_SPEC					\
++  "%{muclibc:/uclibc}%{tthumb2-v7-a:/thumb2-v7-a ;		\
++     tthumb2-v7-a-neon:/thumb2-v7-a-neon}%{!tthumb2*:%{mfloat-abi=softfp:/softfp}}"
++
+--- a/src/gcc/config/i386/atom.md
++++ b/src/gcc/config/i386/atom.md
+@@ -0,0 +1,795 @@
++;; Atom Scheduling
++;; Copyright (C) 2009 Free Software Foundation, Inc.
++;;
++;; This file is part of GCC.
++;;
++;; GCC is free software; you can redistribute it and/or modify
++;; it under the terms of the GNU General Public License as published by
++;; the Free Software Foundation; either version 3, or (at your option)
++;; any later version.
++;;
++;; GCC is distributed in the hope that it will be useful,
++;; but WITHOUT ANY WARRANTY; without even the implied warranty of
++;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++;; GNU General Public License for more details.
++;;
++;; You should have received a copy of the GNU General Public License
++;; along with GCC; see the file COPYING3.  If not see
++;; <http://www.gnu.org/licenses/>.
++;;
++;; Atom is an in-order core with two integer pipelines.
++
++
++(define_attr "atom_unit" "sishuf,simul,jeu,complex,other" 
++  (const_string "other"))
++
++(define_attr "atom_sse_attr" "rcp,movdup,lfence,fence,prefetch,sqrt,mxcsr,other"
++  (const_string "other"))
++
++(define_automaton "atom")
++
++;;  Atom has two ports: port 0 and port 1 connecting to all execution units
++(define_cpu_unit "atom-port-0,atom-port-1" "atom")
++
++;;  EU: Execution Unit
++;;  Atom EUs are connected by port 0 or port 1. 
++
++(define_cpu_unit "atom-eu-0, atom-eu-1,
++                  atom-imul-1, atom-imul-2, atom-imul-3, atom-imul-4"
++                  "atom")
++
++;; Some EUs have duplicated copied and can be accessed via either
++;; port 0 or port 1
++;; (define_reservation "atom-port-either" "(atom-port-0 | atom-port-1)")
++
++;;; Some instructions is dual-pipe execution, need both ports
++;;; Complex multi-op macro-instructoins need both ports and all EUs
++(define_reservation "atom-port-dual" "(atom-port-0 + atom-port-1)")
++(define_reservation "atom-all-eu" "(atom-eu-0 + atom-eu-1 + 
++                                    atom-imul-1 + atom-imul-2 + atom-imul-3 +
++                                    atom-imul-4)")
++
++;;; Most of simple instructions have 1 cycle latency. Some of them
++;;; issue in port 0, some in port 0 and some in either port.
++(define_reservation "atom-simple-0" "(atom-port-0 + atom-eu-0)")
++(define_reservation "atom-simple-1" "(atom-port-1 + atom-eu-1)")
++(define_reservation "atom-simple-either" "(atom-simple-0 | atom-simple-1)")
++
++;;; Some insn issues in port 0 with 3 cycle latency and 1 cycle tput
++(define_reservation "atom-eu-0-3-1" "(atom-port-0 + atom-eu-0, nothing*2)")
++
++;;; fmul insn can have 4 or 5 cycles latency
++(define_reservation "atom-fmul-5c" "(atom-port-0 + atom-eu-0), nothing*4")
++(define_reservation "atom-fmul-4c" "(atom-port-0 + atom-eu-0), nothing*3")
++
++;;; fadd can has 5 cycles latency depends on instruction forms
++(define_reservation "atom-fadd-5c" "(atom-port-1 + atom-eu-1), nothing*5")
++
++;;; imul insn has 5 cycles latency
++(define_reservation "atom-imul-32" 
++                    "atom-imul-1, atom-imul-2, atom-imul-3, atom-imul-4, 
++                     atom-port-0")
++;;; imul instruction excludes other non-FP instructions.
++(exclusion_set "atom-eu-0, atom-eu-1" 
++               "atom-imul-1, atom-imul-2, atom-imul-3, atom-imul-4")
++
++;;; dual-execution instructions can have 1,2,4,5 cycles latency depends on 
++;;; instruction forms
++(define_reservation "atom-dual-1c" "(atom-port-dual + atom-eu-0 + atom-eu-1)")
++(define_reservation "atom-dual-2c"
++                    "(atom-port-dual + atom-eu-0 + atom-eu-1, nothing)")
++(define_reservation "atom-dual-5c"
++                    "(atom-port-dual + atom-eu-0 + atom-eu-1, nothing*4)")
++
++;;; Complex macro-instruction has variants of latency, and uses both ports.
++(define_reservation "atom-complex" "(atom-port-dual + atom-all-eu)")
++
++(define_insn_reservation  "atom_other" 9
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "other")
++            (eq_attr "atom_unit" "!jeu")))
++  "atom-complex, atom-all-eu*8")
++
++;; return has type "other" with atom_unit "jeu"
++(define_insn_reservation  "atom_other_2" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "other")
++            (eq_attr "atom_unit" "jeu")))
++  "atom-dual-1c")
++
++(define_insn_reservation  "atom_multi" 9
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "multi"))
++  "atom-complex, atom-all-eu*8")
++
++;; Normal alu insns without carry
++(define_insn_reservation  "atom_alu" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "alu")
++            (and (eq_attr "memory" "none")
++                 (eq_attr "use_carry" "0"))))
++  "atom-simple-either")
++
++;; Normal alu insns without carry
++(define_insn_reservation  "atom_alu_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "alu")
++            (and (eq_attr "memory" "!none")
++                 (eq_attr "use_carry" "0"))))
++  "atom-simple-either")
++
++;; Alu insn consuming CF, such as add/sbb
++(define_insn_reservation  "atom_alu_carry" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "alu")
++            (and (eq_attr "memory" "none")
++                 (eq_attr "use_carry" "1"))))
++  "atom-simple-either")
++
++;; Alu insn consuming CF, such as add/sbb
++(define_insn_reservation  "atom_alu_carry_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "alu")
++            (and (eq_attr "memory" "!none")
++                (eq_attr "use_carry" "1"))))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_alu1" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "alu1")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_alu1_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "alu1")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_negnot" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "negnot")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_negnot_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "negnot")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_imov" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imov")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_imov_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imov")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++;; 16<-16, 32<-32
++(define_insn_reservation  "atom_imovx" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imovx")
++            (and (eq_attr "memory" "none")
++                 (ior (and (match_operand:HI 0 "register_operand")
++                           (match_operand:HI 1 "general_operand"))
++                      (and (match_operand:SI 0 "register_operand")
++                           (match_operand:SI 1 "general_operand"))))))
++  "atom-simple-either")
++
++;; 16<-16, 32<-32, mem
++(define_insn_reservation  "atom_imovx_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imovx")
++            (and (eq_attr "memory" "!none")
++                 (ior (and (match_operand:HI 0 "register_operand")
++                           (match_operand:HI 1 "general_operand"))
++                      (and (match_operand:SI 0 "register_operand")
++                           (match_operand:SI 1 "general_operand"))))))
++  "atom-simple-either")
++
++;; 32<-16, 32<-8, 64<-16, 64<-8, 64<-32, 8<-8
++(define_insn_reservation  "atom_imovx_2" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imovx")
++            (and (eq_attr "memory" "none")
++                 (ior (match_operand:QI 0 "register_operand")
++                      (ior (and (match_operand:SI 0 "register_operand")
++                                (not (match_operand:SI 1 "general_operand")))
++                           (match_operand:DI 0 "register_operand"))))))
++  "atom-simple-0")
++
++;; 32<-16, 32<-8, 64<-16, 64<-8, 64<-32, 8<-8, mem
++(define_insn_reservation  "atom_imovx_2_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imovx")
++            (and (eq_attr "memory" "!none")
++                 (ior (match_operand:QI 0 "register_operand")
++                      (ior (and (match_operand:SI 0 "register_operand")
++                                (not (match_operand:SI 1 "general_operand")))
++                           (match_operand:DI 0 "register_operand"))))))
++  "atom-simple-0")
++
++;; 16<-8
++(define_insn_reservation  "atom_imovx_3" 3
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imovx")
++            (and (match_operand:HI 0 "register_operand")
++                 (match_operand:QI 1 "general_operand"))))
++  "atom-complex, atom-all-eu*2")
++
++(define_insn_reservation  "atom_lea" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "lea")
++            (eq_attr "mode" "!HI")))
++  "atom-simple-either")
++
++;; lea 16bit address is complex insn
++(define_insn_reservation  "atom_lea_2" 2
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "lea")
++            (eq_attr "mode" "HI")))
++  "atom-complex, atom-all-eu")
++
++(define_insn_reservation  "atom_incdec" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "incdec")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_incdec_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "incdec")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++;; simple shift instruction use SHIFT eu, none memory
++(define_insn_reservation  "atom_ishift" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ishift")
++            (and (eq_attr "memory" "none") (eq_attr "prefix_0f" "0"))))
++  "atom-simple-0")
++
++;; simple shift instruction use SHIFT eu, memory
++(define_insn_reservation  "atom_ishift_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ishift")
++            (and (eq_attr "memory" "!none") (eq_attr "prefix_0f" "0"))))
++  "atom-simple-0")
++
++;; DF shift (prefixed with 0f) is complex insn with latency of 7 cycles
++(define_insn_reservation  "atom_ishift_3" 7
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ishift")
++            (eq_attr "prefix_0f" "1")))
++  "atom-complex, atom-all-eu*6")
++
++(define_insn_reservation  "atom_ishift1" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ishift1")
++            (eq_attr "memory" "none")))
++  "atom-simple-0")
++
++(define_insn_reservation  "atom_ishift1_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ishift1")
++            (eq_attr "memory" "!none")))
++  "atom-simple-0")
++
++(define_insn_reservation  "atom_rotate" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "rotate")
++            (eq_attr "memory" "none")))
++  "atom-simple-0")
++
++(define_insn_reservation  "atom_rotate_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "rotate")
++            (eq_attr "memory" "!none")))
++  "atom-simple-0")
++
++(define_insn_reservation  "atom_rotate1" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "rotate1")
++            (eq_attr "memory" "none")))
++  "atom-simple-0")
++
++(define_insn_reservation  "atom_rotate1_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "rotate1")
++            (eq_attr "memory" "!none")))
++  "atom-simple-0")
++
++(define_insn_reservation  "atom_imul" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imul")
++            (and (eq_attr "memory" "none") (eq_attr "mode" "SI"))))
++  "atom-imul-32")
++
++(define_insn_reservation  "atom_imul_mem" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imul")
++            (and (eq_attr "memory" "!none") (eq_attr "mode" "SI"))))
++  "atom-imul-32")
++
++;; latency set to 10 as common 64x64 imul
++(define_insn_reservation  "atom_imul_3" 10
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "imul")
++            (eq_attr "mode" "!SI")))
++  "atom-complex, atom-all-eu*9")
++
++(define_insn_reservation  "atom_idiv" 65
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "idiv"))
++  "atom-complex, atom-all-eu*32, nothing*32")
++
++(define_insn_reservation  "atom_icmp" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "icmp")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_icmp_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "icmp")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_test" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "test")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_test_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "test")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_ibr" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ibr")
++            (eq_attr "memory" "!load")))
++  "atom-simple-1")
++
++;; complex if jump target is from address
++(define_insn_reservation  "atom_ibr_2" 2
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ibr")
++            (eq_attr "memory" "load")))
++  "atom-complex, atom-all-eu")
++
++(define_insn_reservation  "atom_setcc" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "setcc")
++            (eq_attr "memory" "!store")))
++  "atom-simple-either")
++
++;; 2 cycles complex if target is in memory
++(define_insn_reservation  "atom_setcc_2" 2
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "setcc")
++            (eq_attr "memory" "store")))
++  "atom-complex, atom-all-eu")
++
++(define_insn_reservation  "atom_icmov" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "icmov")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_icmov_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "icmov")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++;; UCODE if segreg, ignored
++(define_insn_reservation  "atom_push" 2
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "push"))
++  "atom-dual-2c")
++
++;; pop r64 is 1 cycle. UCODE if segreg, ignored
++(define_insn_reservation  "atom_pop" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "pop")
++            (eq_attr "mode" "DI")))
++  "atom-dual-1c")
++
++;; pop non-r64 is 2 cycles. UCODE if segreg, ignored
++(define_insn_reservation  "atom_pop_2" 2
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "pop")
++            (eq_attr "mode" "!DI")))
++  "atom-dual-2c")
++
++;; UCODE if segreg, ignored
++(define_insn_reservation  "atom_call" 1
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "call"))
++  "atom-dual-1c")
++
++(define_insn_reservation  "atom_callv" 1
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "callv"))
++  "atom-dual-1c")
++
++(define_insn_reservation  "atom_leave" 3
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "leave"))
++  "atom-complex, atom-all-eu*2")
++
++(define_insn_reservation  "atom_str" 3
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "str"))
++  "atom-complex, atom-all-eu*2")
++
++(define_insn_reservation  "atom_sselog" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sselog")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_sselog_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sselog")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_sselog1" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sselog1")
++            (eq_attr "memory" "none")))
++  "atom-simple-0")
++
++(define_insn_reservation  "atom_sselog1_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sselog1")
++            (eq_attr "memory" "!none")))
++  "atom-simple-0")
++
++;; not pmad, not psad
++(define_insn_reservation  "atom_sseiadd" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseiadd")
++            (and (not (match_operand:V2DI 0 "register_operand"))
++                 (and (eq_attr "atom_unit" "!simul")
++                      (eq_attr "atom_unit" "!complex")))))
++  "atom-simple-either")
++
++;; pmad, psad and 64
++(define_insn_reservation  "atom_sseiadd_2" 4
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseiadd")
++            (and (not (match_operand:V2DI 0 "register_operand"))
++                 (and (eq_attr "atom_unit" "simul" )
++                      (eq_attr "mode" "DI")))))
++  "atom-fmul-4c")
++
++;; pmad, psad and 128
++(define_insn_reservation  "atom_sseiadd_3" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseiadd")
++            (and (not (match_operand:V2DI 0 "register_operand"))
++                 (and (eq_attr "atom_unit" "simul" )
++                      (eq_attr "mode" "TI")))))
++  "atom-fmul-5c")
++
++;; if paddq(64 bit op), phadd/phsub
++(define_insn_reservation  "atom_sseiadd_4" 6
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseiadd")
++            (ior (match_operand:V2DI 0 "register_operand")
++                 (eq_attr "atom_unit" "complex"))))
++  "atom-complex, atom-all-eu*5")
++
++;; if immediate op. 
++(define_insn_reservation  "atom_sseishft" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseishft")
++            (and (eq_attr "atom_unit" "!sishuf")
++                 (match_operand 2 "immediate_operand"))))
++  "atom-simple-either")
++
++;; if palignr or psrldq
++(define_insn_reservation  "atom_sseishft_2" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseishft")
++            (and (eq_attr "atom_unit" "sishuf")
++                 (match_operand 2 "immediate_operand"))))
++  "atom-simple-0")
++
++;; if reg/mem op
++(define_insn_reservation  "atom_sseishft_3" 2
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseishft")
++            (not (match_operand 2 "immediate_operand"))))
++  "atom-complex, atom-all-eu")
++
++(define_insn_reservation  "atom_sseimul" 1
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "sseimul"))
++  "atom-simple-0")
++
++;; rcpss or rsqrtss
++(define_insn_reservation  "atom_sse" 4
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sse")
++            (and (eq_attr "atom_sse_attr" "rcp") (eq_attr "mode" "SF"))))
++  "atom-fmul-4c")
++
++;; movshdup, movsldup. Suggest to type sseishft
++(define_insn_reservation  "atom_sse_2" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sse")
++            (eq_attr "atom_sse_attr" "movdup")))
++  "atom-simple-0")
++
++;; lfence
++(define_insn_reservation  "atom_sse_3" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sse")
++            (eq_attr "atom_sse_attr" "lfence")))
++  "atom-simple-either")
++
++;; sfence,clflush,mfence, prefetch
++(define_insn_reservation  "atom_sse_4" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sse")
++            (ior (eq_attr "atom_sse_attr" "fence")
++                 (eq_attr "atom_sse_attr" "prefetch"))))
++  "atom-simple-0")
++
++;; rcpps, rsqrtss, sqrt, ldmxcsr
++(define_insn_reservation  "atom_sse_5" 7
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sse")
++            (ior (ior (eq_attr "atom_sse_attr" "sqrt")
++                      (eq_attr "atom_sse_attr" "mxcsr"))
++                 (and (eq_attr "atom_sse_attr" "rcp")
++                      (eq_attr "mode" "V4SF")))))
++  "atom-complex, atom-all-eu*6")
++
++;; xmm->xmm
++(define_insn_reservation  "atom_ssemov" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssemov")
++            (and (match_operand 0 "register_operand" "xy") (match_operand 1 "register_operand" "xy"))))
++  "atom-simple-either")
++
++;; reg->xmm
++(define_insn_reservation  "atom_ssemov_2" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssemov")
++            (and (match_operand 0 "register_operand" "xy") (match_operand 1 "register_operand" "r"))))
++  "atom-simple-0")
++
++;; xmm->reg
++(define_insn_reservation  "atom_ssemov_3" 3
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssemov")
++            (and (match_operand 0 "register_operand" "r") (match_operand 1 "register_operand" "xy"))))
++  "atom-eu-0-3-1")
++
++;; mov mem
++(define_insn_reservation  "atom_ssemov_4" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssemov")
++            (and (eq_attr "movu" "0") (eq_attr "memory" "!none"))))
++  "atom-simple-0")
++
++;; movu mem
++(define_insn_reservation  "atom_ssemov_5" 2
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssemov")
++            (ior (eq_attr "movu" "1") (eq_attr "memory" "!none"))))
++  "atom-complex, atom-all-eu")
++
++;; no memory simple
++(define_insn_reservation  "atom_sseadd" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseadd")
++            (and (eq_attr "memory" "none")
++                 (and (eq_attr "mode" "!V2DF")
++                      (eq_attr "atom_unit" "!complex")))))
++  "atom-fadd-5c")
++
++;; memory simple
++(define_insn_reservation  "atom_sseadd_mem" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseadd")
++            (and (eq_attr "memory" "!none")
++                 (and (eq_attr "mode" "!V2DF")
++                      (eq_attr "atom_unit" "!complex")))))
++  "atom-dual-5c")
++
++;; maxps, minps, *pd, hadd, hsub
++(define_insn_reservation  "atom_sseadd_3" 8
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseadd")
++            (ior (eq_attr "mode" "V2DF") (eq_attr "atom_unit" "complex"))))
++  "atom-complex, atom-all-eu*7")
++
++;; Except dppd/dpps
++(define_insn_reservation  "atom_ssemul" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssemul")
++            (eq_attr "mode" "!SF")))
++  "atom-fmul-5c")
++
++;; Except dppd/dpps, 4 cycle if mulss
++(define_insn_reservation  "atom_ssemul_2" 4
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssemul")
++            (eq_attr "mode" "SF")))
++  "atom-fmul-4c")
++
++(define_insn_reservation  "atom_ssecmp" 1
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "ssecmp"))
++  "atom-simple-either")
++
++(define_insn_reservation  "atom_ssecomi" 10
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "ssecomi"))
++  "atom-complex, atom-all-eu*9")
++
++;; no memory and cvtpi2ps, cvtps2pi, cvttps2pi
++(define_insn_reservation  "atom_ssecvt" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssecvt")
++            (ior (and (match_operand:V2SI 0 "register_operand")
++                      (match_operand:V4SF 1 "register_operand"))
++                 (and (match_operand:V4SF 0 "register_operand")
++                      (match_operand:V2SI 1 "register_operand")))))
++  "atom-fadd-5c")
++
++;; memory and cvtpi2ps, cvtps2pi, cvttps2pi
++(define_insn_reservation  "atom_ssecvt_2" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssecvt")
++            (ior (and (match_operand:V2SI 0 "register_operand")
++                      (match_operand:V4SF 1 "memory_operand"))
++                 (and (match_operand:V4SF 0 "register_operand")
++                      (match_operand:V2SI 1 "memory_operand")))))
++  "atom-dual-5c")
++
++;; otherwise. 7 cycles average for cvtss2sd
++(define_insn_reservation  "atom_ssecvt_3" 7
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "ssecvt")
++            (not (ior (and (match_operand:V2SI 0 "register_operand")
++                           (match_operand:V4SF 1 "nonimmediate_operand"))
++                      (and (match_operand:V4SF 0 "register_operand")
++                           (match_operand:V2SI 1 "nonimmediate_operand"))))))
++  "atom-complex, atom-all-eu*6")
++
++;; memory and cvtsi2sd
++(define_insn_reservation  "atom_sseicvt" 5
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseicvt")
++            (and (match_operand:V2DF 0 "register_operand")
++                 (match_operand:SI 1 "memory_operand"))))
++  "atom-dual-5c")
++
++;; otherwise. 8 cycles average for cvtsd2si
++(define_insn_reservation  "atom_sseicvt_2" 8
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "sseicvt")
++            (not (and (match_operand:V2DF 0 "register_operand")
++                      (match_operand:SI 1 "memory_operand")))))
++  "atom-complex, atom-all-eu*7")
++
++(define_insn_reservation  "atom_ssediv" 62
++  (and (eq_attr "cpu" "atom")
++       (eq_attr "type" "ssediv"))
++  "atom-complex, atom-all-eu*12, nothing*49")
++
++;; simple for fmov
++(define_insn_reservation  "atom_fmov" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "fmov")
++            (eq_attr "memory" "none")))
++  "atom-simple-either")
++
++;; simple for fmov
++(define_insn_reservation  "atom_fmov_mem" 1
++  (and (eq_attr "cpu" "atom")
++       (and (eq_attr "type" "fmov")
++            (eq_attr "memory" "!none")))
++  "atom-simple-either")
++
++;; Define bypass here
++
++;; There will be no stall from lea to non-mem EX insns
++(define_bypass 0 "atom_lea"
++                 "atom_alu_carry,
++                  atom_alu,atom_alu1,atom_negnot,atom_imov,atom_imovx,
++                  atom_incdec, atom_setcc, atom_icmov, atom_pop")
++
++(define_bypass 0 "atom_lea"
++                 "atom_alu_mem, atom_alu_carry_mem, atom_alu1_mem,
++                  atom_imovx_mem, atom_imovx_2_mem,
++                  atom_imov_mem, atom_icmov_mem, atom_fmov_mem"
++                 "!ix86_agi_dependent")
++
++;; There will be 3 cycles stall from EX insns to AGAN insns LEA
++(define_bypass 4 "atom_alu_carry,
++                  atom_alu,atom_alu1,atom_negnot,atom_imov,atom_imovx,
++                  atom_incdec,atom_ishift,atom_ishift1,atom_rotate,
++                  atom_rotate1, atom_setcc, atom_icmov, atom_pop,
++                  atom_alu_mem, atom_alu_carry_mem, atom_alu1_mem,
++                  atom_imovx_mem, atom_imovx_2_mem,
++                  atom_imov_mem, atom_icmov_mem, atom_fmov_mem"
++                 "atom_lea")
++
++;; There will be 3 cycles stall from EX insns to insns need addr calculation
++(define_bypass 4 "atom_alu_carry,
++                  atom_alu,atom_alu1,atom_negnot,atom_imov,atom_imovx,
++                  atom_incdec,atom_ishift,atom_ishift1,atom_rotate,
++                  atom_rotate1, atom_setcc, atom_icmov, atom_pop,
++                  atom_imovx_mem, atom_imovx_2_mem,
++                  atom_alu_mem, atom_alu_carry_mem, atom_alu1_mem,
++                  atom_imov_mem, atom_icmov_mem, atom_fmov_mem"
++                 "atom_alu_mem, atom_alu_carry_mem, atom_alu1_mem,
++                  atom_negnot_mem, atom_imov_mem, atom_incdec_mem,
++                  atom_imovx_mem, atom_imovx_2_mem,
++                  atom_imul_mem, atom_icmp_mem,
++                  atom_test_mem, atom_icmov_mem, atom_sselog_mem,
++                  atom_sselog1_mem, atom_fmov_mem, atom_sseadd_mem,
++                  atom_ishift_mem, atom_ishift1_mem, 
++                  atom_rotate_mem, atom_rotate1_mem"
++                  "ix86_agi_dependent")
++
++;; Stall from imul to lea is 8 cycles.
++(define_bypass 9 "atom_imul, atom_imul_mem" "atom_lea")
++
++;; Stall from imul to memory address is 8 cycles.
++(define_bypass 9 "atom_imul, atom_imul_mem" 
++                 "atom_alu_mem, atom_alu_carry_mem, atom_alu1_mem,
++                  atom_negnot_mem, atom_imov_mem, atom_incdec_mem,
++                  atom_ishift_mem, atom_ishift1_mem, atom_rotate_mem,
++                  atom_rotate1_mem, atom_imul_mem, atom_icmp_mem,
++                  atom_test_mem, atom_icmov_mem, atom_sselog_mem,
++                  atom_sselog1_mem, atom_fmov_mem, atom_sseadd_mem"
++                  "ix86_agi_dependent")
++
++;; There will be 0 cycle stall from cmp/test to jcc
++
++;; There will be 1 cycle stall from flag producer to cmov and adc/sbb
++(define_bypass 2 "atom_icmp, atom_test, atom_alu, atom_alu_carry,
++                  atom_alu1, atom_negnot, atom_incdec, atom_ishift,
++                  atom_ishift1, atom_rotate, atom_rotate1"
++                 "atom_icmov, atom_alu_carry")
++
++;; lea to shift count stall is 2 cycles
++(define_bypass 3 "atom_lea"
++                 "atom_ishift, atom_ishift1, atom_rotate, atom_rotate1,
++                  atom_ishift_mem, atom_ishift1_mem, 
++                  atom_rotate_mem, atom_rotate1_mem"
++                 "ix86_dep_by_shift_count")
++
++;; lea to shift source stall is 1 cycle
++(define_bypass 2 "atom_lea"
++                 "atom_ishift, atom_ishift1, atom_rotate, atom_rotate1"
++                 "!ix86_dep_by_shift_count")
++
++;; non-lea to shift count stall is 1 cycle
++(define_bypass 2 "atom_alu_carry,
++                  atom_alu,atom_alu1,atom_negnot,atom_imov,atom_imovx,
++                  atom_incdec,atom_ishift,atom_ishift1,atom_rotate,
++                  atom_rotate1, atom_setcc, atom_icmov, atom_pop,
++                  atom_alu_mem, atom_alu_carry_mem, atom_alu1_mem,
++                  atom_imovx_mem, atom_imovx_2_mem,
++                  atom_imov_mem, atom_icmov_mem, atom_fmov_mem"
++                 "atom_ishift, atom_ishift1, atom_rotate, atom_rotate1,
++                  atom_ishift_mem, atom_ishift1_mem, 
++                  atom_rotate_mem, atom_rotate1_mem"
++                 "ix86_dep_by_shift_count")
+--- a/src/gcc/config/i386/cpuid.h
++++ b/src/gcc/config/i386/cpuid.h
+@@ -29,6 +29,7 @@
+ #define bit_CMPXCHG16B	(1 << 13)
+ #define bit_SSE4_1	(1 << 19)
+ #define bit_SSE4_2	(1 << 20)
++#define bit_MOVBE	(1 << 22)
+ #define bit_POPCNT	(1 << 23)
+ #define bit_AES		(1 << 25)
+ #define bit_XSAVE	(1 << 26)
+--- a/src/gcc/config/i386/cs-linux-lite.h
++++ b/src/gcc/config/i386/cs-linux-lite.h
+@@ -0,0 +1,31 @@
++/* Sourcery G++ Lite IA32 GNU/Linux Configuration.
++   Copyright (C) 2009
++   Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 3, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++#undef SYSROOT_SUFFIX_SPEC
++#define SYSROOT_SUFFIX_SPEC			\
++  "%{march=atom:%{!m64:/atom} ;			\
++     march=core2:%{m64:/core2}}"
++
++/* See mips/wrs-linux.h for details on this use of
++   STARTFILE_PREFIX_SPEC.  */
++#undef STARTFILE_PREFIX_SPEC
++#define STARTFILE_PREFIX_SPEC				\
++  "%{m64: /usr/local/lib64/ /lib64/ /usr/lib64/}	\
++   %{!m64: /usr/local/lib/ /lib/ /usr/lib/}"
+--- a/src/gcc/config/i386/cs-linux.h
++++ b/src/gcc/config/i386/cs-linux.h
+@@ -0,0 +1,41 @@
++/* Sourcery G++ IA32 GNU/Linux Configuration.
++   Copyright (C) 2007
++   Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 3, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++/* This configuration may be used either with the system glibc (in
++   system32 and system64 subdirectories) or with the included glibc
++   (in the sgxx-glibc subdirectory).  */
++
++#undef SYSROOT_SUFFIX_SPEC
++#define SYSROOT_SUFFIX_SPEC			\
++  "%{msgxx-glibc:/sgxx-glibc ;			\
++     m64:/system64 ;				\
++     mrhel3:/system64 ;				\
++     mrh73:/system32-old ;			\
++     :/system32}"
++
++#undef SYSROOT_HEADERS_SUFFIX_SPEC
++#define SYSROOT_HEADERS_SUFFIX_SPEC SYSROOT_SUFFIX_SPEC
++
++/* See mips/wrs-linux.h for details on this use of
++   STARTFILE_PREFIX_SPEC.  */
++#undef STARTFILE_PREFIX_SPEC
++#define STARTFILE_PREFIX_SPEC				\
++  "%{m64: /usr/local/lib64/ /lib64/ /usr/lib64/}	\
++   %{!m64: /usr/local/lib/ /lib/ /usr/lib/}"
+--- a/src/gcc/config/i386/cs-linux.opt
++++ b/src/gcc/config/i386/cs-linux.opt
+@@ -0,0 +1,11 @@
++; Additional options for Sourcery G++.
++
++mrh73
++Target Undocumented
++
++mrhel3
++Target Undocumented
++
++msgxx-glibc
++Target
++Use included version of GLIBC
+--- a/src/gcc/config/i386/cygming.h
++++ b/src/gcc/config/i386/cygming.h
+@@ -34,7 +34,7 @@
+ #endif
+ 
+ #undef TARGET_64BIT_MS_ABI
+-#define TARGET_64BIT_MS_ABI (!cfun ? DEFAULT_ABI == MS_ABI : TARGET_64BIT && cfun->machine->call_abi == MS_ABI)
++#define TARGET_64BIT_MS_ABI (!cfun ? ix86_abi == MS_ABI : TARGET_64BIT && cfun->machine->call_abi == MS_ABI)
+ 
+ #undef DEFAULT_ABI
+ #define DEFAULT_ABI (TARGET_64BIT ? MS_ABI : SYSV_ABI)
+@@ -202,7 +202,7 @@
+ #define CHECK_STACK_LIMIT 4000
+ 
+ #undef STACK_BOUNDARY
+-#define STACK_BOUNDARY	(DEFAULT_ABI == MS_ABI ? 128 : BITS_PER_WORD)
++#define STACK_BOUNDARY	(ix86_abi == MS_ABI ? 128 : BITS_PER_WORD)
+ 
+ /* By default, target has a 80387, uses IEEE compatible arithmetic,
+    returns float values in the 387 and needs stack probes.
+--- a/src/gcc/config/i386/cygming.opt
++++ b/src/gcc/config/i386/cygming.opt
+@@ -45,3 +45,7 @@
+ mwindows
+ Target
+ Create GUI application
++
++mpe-aligned-commons
++Target Var(use_pe_aligned_common) Init(HAVE_GAS_ALIGNED_COMM)
++Use the GNU extension to the PE format for aligned common data
+--- a/src/gcc/config/i386/driver-i386.c
++++ b/src/gcc/config/i386/driver-i386.c
+@@ -378,7 +378,7 @@
+   /* Extended features */
+   unsigned int has_lahf_lm = 0, has_sse4a = 0;
+   unsigned int has_longmode = 0, has_3dnowp = 0, has_3dnow = 0;
+-  unsigned int has_sse4_1 = 0, has_sse4_2 = 0;
++  unsigned int has_movbe = 0, has_sse4_1 = 0, has_sse4_2 = 0;
+   unsigned int has_popcnt = 0, has_aes = 0, has_avx = 0;
+   unsigned int has_pclmul = 0;
+ 
+@@ -398,9 +398,22 @@
+ 
+   __cpuid (1, eax, ebx, ecx, edx);
+ 
+-  /* We don't care for extended family.  */
+   model = (eax >> 4) & 0x0f;
+   family = (eax >> 8) & 0x0f;
++  if (vendor == SIG_INTEL)
++    {
++      unsigned int extended_model, extended_family;
++
++      extended_model = (eax >> 12) & 0xf0;
++      extended_family = (eax >> 20) & 0xff;
++      if (family == 0x0f)
++	{
++	  family += extended_family;
++	  model += extended_model;
++	}
++      else if (family == 0x06)
++	model += extended_model;
++    }
+ 
+   has_sse3 = ecx & bit_SSE3;
+   has_ssse3 = ecx & bit_SSSE3;
+@@ -408,6 +421,7 @@
+   has_sse4_2 = ecx & bit_SSE4_2;
+   has_avx = ecx & bit_AVX;
+   has_cmpxchg16b = ecx & bit_CMPXCHG16B;
++  has_movbe = ecx & bit_MOVBE;
+   has_popcnt = ecx & bit_POPCNT;
+   has_aes = ecx & bit_AES;
+   has_pclmul = ecx & bit_PCLMUL;
+@@ -505,8 +519,8 @@
+       break;
+     case PROCESSOR_PENTIUMPRO:
+       if (has_longmode)
+-	/* It is Core 2 Duo.  */
+-	cpu = "core2";
++	/* It is Core 2 or Atom.  */
++	cpu = (model == 28) ? "atom" : "core2";
+       else if (arch)
+ 	{
+ 	  if (has_sse3)
+@@ -597,6 +611,8 @@
+ 	options = concat (options, "-mcx16 ", NULL);
+       if (has_lahf_lm)
+ 	options = concat (options, "-msahf ", NULL);
++      if (has_movbe)
++	options = concat (options, "-mmovbe ", NULL);
+       if (has_aes)
+ 	options = concat (options, "-maes ", NULL);
+       if (has_pclmul)
+--- a/src/gcc/config/i386/gthr-win32.c
++++ b/src/gcc/config/i386/gthr-win32.c
+@@ -32,7 +32,9 @@
+ # define __GTHREAD_HIDE_WIN32API 1
+ #endif
+ #undef  __GTHREAD_I486_INLINE_LOCK_PRIMITIVES
++#ifdef __i386__
+ #define __GTHREAD_I486_INLINE_LOCK_PRIMITIVES
++#endif
+ #include <gthr-win32.h>
+ 
+ /* Windows32 threads specific definitions. The windows32 threading model
+@@ -70,7 +72,11 @@
+ __gthr_win32_once (__gthread_once_t *once, void (*func) (void))
+ {
+   if (once == NULL || func == NULL)
++#ifdef __MINGW32CE__
++    return -1;
++#else
+     return EINVAL;
++#endif
+ 
+   if (! once->done)
+     {
+--- a/src/gcc/config/i386/i386-c.c
++++ b/src/gcc/config/i386/i386-c.c
+@@ -119,6 +119,10 @@
+       def_or_undef (parse_in, "__core2");
+       def_or_undef (parse_in, "__core2__");
+       break;
++    case PROCESSOR_ATOM:
++      def_or_undef (parse_in, "__atom");
++      def_or_undef (parse_in, "__atom__");
++      break;
+     /* use PROCESSOR_max to not set/unset the arch macro.  */
+     case PROCESSOR_max:
+       break;
+@@ -187,6 +191,9 @@
+     case PROCESSOR_CORE2:
+       def_or_undef (parse_in, "__tune_core2__");
+       break;
++    case PROCESSOR_ATOM:
++      def_or_undef (parse_in, "__tune_atom__");
++      break;
+     case PROCESSOR_GENERIC32:
+     case PROCESSOR_GENERIC64:
+       break;
+--- a/src/gcc/config/i386/i386-protos.h
++++ b/src/gcc/config/i386/i386-protos.h
+@@ -86,6 +86,9 @@
+ extern void ix86_expand_binary_operator (enum rtx_code,
+ 					 enum machine_mode, rtx[]);
+ extern int ix86_binary_operator_ok (enum rtx_code, enum machine_mode, rtx[]);
++extern bool ix86_lea_for_add_ok (enum rtx_code, rtx, rtx[]);
++extern bool ix86_dep_by_shift_count (const_rtx set_insn, const_rtx use_insn);
++extern bool ix86_agi_dependent (rtx set_insn, rtx use_insn);
+ extern void ix86_expand_unary_operator (enum rtx_code, enum machine_mode,
+ 					rtx[]);
+ extern rtx ix86_build_const_vector (enum machine_mode, bool, rtx);
+@@ -140,9 +143,8 @@
+ extern bool ix86_solaris_return_in_memory (const_tree, const_tree);
+ extern rtx ix86_force_to_memory (enum machine_mode, rtx);
+ extern void ix86_free_from_memory (enum machine_mode);
+-extern int ix86_cfun_abi (void);
+-extern int ix86_function_abi (const_tree);
+-extern int ix86_function_type_abi (const_tree);
++extern enum calling_abi ix86_cfun_abi (void);
++extern enum calling_abi ix86_function_type_abi (const_tree);
+ extern void ix86_call_abi_override (const_tree);
+ extern tree ix86_fn_abi_va_list (tree);
+ extern tree ix86_canonical_va_list_type (tree);
+--- a/src/gcc/config/i386/i386.c
++++ b/src/gcc/config/i386/i386.c
+@@ -1036,6 +1036,79 @@
+   1,                                    /* cond_not_taken_branch_cost.  */
+ };
+ 
++static const
++struct processor_costs atom_cost = {
++  COSTS_N_INSNS (1),			/* cost of an add instruction */
++  COSTS_N_INSNS (1) + 1,		/* cost of a lea instruction */
++  COSTS_N_INSNS (1),			/* variable shift costs */
++  COSTS_N_INSNS (1),			/* constant shift costs */
++  {COSTS_N_INSNS (3),			/* cost of starting multiply for QI */
++   COSTS_N_INSNS (4),			/*                               HI */
++   COSTS_N_INSNS (3),			/*                               SI */
++   COSTS_N_INSNS (4),			/*                               DI */
++   COSTS_N_INSNS (2)},			/*                               other */
++  0,					/* cost of multiply per each bit set */
++  {COSTS_N_INSNS (18),			/* cost of a divide/mod for QI */
++   COSTS_N_INSNS (26),			/*                          HI */
++   COSTS_N_INSNS (42),			/*                          SI */
++   COSTS_N_INSNS (74),			/*                          DI */
++   COSTS_N_INSNS (74)},			/*                          other */
++  COSTS_N_INSNS (1),			/* cost of movsx */
++  COSTS_N_INSNS (1),			/* cost of movzx */
++  8,					/* "large" insn */
++  17,					/* MOVE_RATIO */
++  2,					/* cost for loading QImode using movzbl */
++  {4, 4, 4},				/* cost of loading integer registers
++					   in QImode, HImode and SImode.
++					   Relative to reg-reg move (2).  */
++  {4, 4, 4},				/* cost of storing integer registers */
++  4,					/* cost of reg,reg fld/fst */
++  {12, 12, 12},				/* cost of loading fp registers
++					   in SFmode, DFmode and XFmode */
++  {6, 6, 8},				/* cost of storing fp registers
++					   in SFmode, DFmode and XFmode */
++  2,					/* cost of moving MMX register */
++  {8, 8},				/* cost of loading MMX registers
++					   in SImode and DImode */
++  {8, 8},				/* cost of storing MMX registers
++					   in SImode and DImode */
++  2,					/* cost of moving SSE register */
++  {8, 8, 8},				/* cost of loading SSE registers
++					   in SImode, DImode and TImode */
++  {8, 8, 8},				/* cost of storing SSE registers
++					   in SImode, DImode and TImode */
++  5,					/* MMX or SSE register to integer */
++  32,					/* size of l1 cache.  */
++  256,					/* size of l2 cache.  */
++  64,					/* size of prefetch block */
++  6,					/* number of parallel prefetches */
++  3,					/* Branch cost */
++  COSTS_N_INSNS (8),			/* cost of FADD and FSUB insns.  */
++  COSTS_N_INSNS (8),			/* cost of FMUL instruction.  */
++  COSTS_N_INSNS (20),			/* cost of FDIV instruction.  */
++  COSTS_N_INSNS (8),			/* cost of FABS instruction.  */
++  COSTS_N_INSNS (8),			/* cost of FCHS instruction.  */
++  COSTS_N_INSNS (40),			/* cost of FSQRT instruction.  */
++  {{libcall, {{11, loop}, {-1, rep_prefix_4_byte}}},
++   {libcall, {{32, loop}, {64, rep_prefix_4_byte},
++          {8192, rep_prefix_8_byte}, {-1, libcall}}}},
++  {{libcall, {{8, loop}, {15, unrolled_loop},
++          {2048, rep_prefix_4_byte}, {-1, libcall}}},
++   {libcall, {{24, loop}, {32, unrolled_loop},
++          {8192, rep_prefix_8_byte}, {-1, libcall}}}},
++  1,                                    /* scalar_stmt_cost.  */
++  1,                                    /* scalar load_cost.  */
++  1,                                    /* scalar_store_cost.  */
++  1,                                    /* vec_stmt_cost.  */
++  1,                                    /* vec_to_scalar_cost.  */
++  1,                                    /* scalar_to_vec_cost.  */
++  1,                                    /* vec_align_load_cost.  */
++  2,                                    /* vec_unalign_load_cost.  */
++  1,                                    /* vec_store_cost.  */
++  3,                                    /* cond_taken_branch_cost.  */
++  1,                                    /* cond_not_taken_branch_cost.  */
++};
++
+ /* Generic64 should produce code tuned for Nocona and K8.  */
+ static const
+ struct processor_costs generic64_cost = {
+@@ -1194,6 +1267,7 @@
+ #define m_PENT4  (1<<PROCESSOR_PENTIUM4)
+ #define m_NOCONA  (1<<PROCESSOR_NOCONA)
+ #define m_CORE2  (1<<PROCESSOR_CORE2)
++#define m_ATOM  (1<<PROCESSOR_ATOM)
+ 
+ #define m_GEODE  (1<<PROCESSOR_GEODE)
+ #define m_K6  (1<<PROCESSOR_K6)
+@@ -1231,10 +1305,11 @@
+   m_486 | m_PENT,
+ 
+   /* X86_TUNE_UNROLL_STRLEN */
+-  m_486 | m_PENT | m_PPRO | m_AMD_MULTIPLE | m_K6 | m_CORE2 | m_GENERIC,
++  m_486 | m_PENT | m_ATOM | m_PPRO | m_AMD_MULTIPLE | m_K6
++  | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_DEEP_BRANCH_PREDICTION */
+-  m_PPRO | m_K6_GEODE | m_AMD_MULTIPLE | m_PENT4 | m_GENERIC,
++  m_ATOM | m_PPRO | m_K6_GEODE | m_AMD_MULTIPLE | m_PENT4 | m_GENERIC,
+ 
+   /* X86_TUNE_BRANCH_PREDICTION_HINTS: Branch hints were put in P4 based
+      on simulation result. But after P4 was made, no performance benefit
+@@ -1246,12 +1321,12 @@
+   ~m_386,
+ 
+   /* X86_TUNE_USE_SAHF */
+-  m_PPRO | m_K6_GEODE | m_K8 | m_AMDFAM10 | m_PENT4
++  m_ATOM | m_PPRO | m_K6_GEODE | m_K8 | m_AMDFAM10 | m_PENT4
+   | m_NOCONA | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_MOVX: Enable to zero extend integer registers to avoid
+      partial dependencies.  */
+-  m_AMD_MULTIPLE | m_PPRO | m_PENT4 | m_NOCONA
++  m_AMD_MULTIPLE | m_ATOM | m_PPRO | m_PENT4 | m_NOCONA
+   | m_CORE2 | m_GENERIC | m_GEODE /* m_386 | m_K6 */,
+ 
+   /* X86_TUNE_PARTIAL_REG_STALL: We probably ought to watch for partial
+@@ -1271,13 +1346,13 @@
+   m_386 | m_486 | m_K6_GEODE,
+ 
+   /* X86_TUNE_USE_SIMODE_FIOP */
+-  ~(m_PPRO | m_AMD_MULTIPLE | m_PENT | m_CORE2 | m_GENERIC),
++  ~(m_PPRO | m_AMD_MULTIPLE | m_PENT | m_ATOM | m_CORE2 | m_GENERIC),
+ 
+   /* X86_TUNE_USE_MOV0 */
+   m_K6,
+ 
+   /* X86_TUNE_USE_CLTD */
+-  ~(m_PENT | m_K6 | m_CORE2 | m_GENERIC),
++  ~(m_PENT | m_ATOM | m_K6 | m_CORE2 | m_GENERIC),
+ 
+   /* X86_TUNE_USE_XCHGB: Use xchgb %rh,%rl instead of rolw/rorw $8,rx.  */
+   m_PENT4,
+@@ -1292,8 +1367,8 @@
+   ~(m_PENT | m_PPRO),
+ 
+   /* X86_TUNE_PROMOTE_QIMODE */
+-  m_K6_GEODE | m_PENT | m_386 | m_486 | m_AMD_MULTIPLE | m_CORE2
+-  | m_GENERIC /* | m_PENT4 ? */,
++  m_K6_GEODE | m_PENT | m_ATOM | m_386 | m_486 | m_AMD_MULTIPLE
++  | m_CORE2 | m_GENERIC /* | m_PENT4 ? */,
+ 
+   /* X86_TUNE_FAST_PREFIX */
+   ~(m_PENT | m_486 | m_386),
+@@ -1317,26 +1392,28 @@
+   m_PPRO,
+ 
+   /* X86_TUNE_ADD_ESP_4: Enable if add/sub is preferred over 1/2 push/pop.  */
+-  m_AMD_MULTIPLE | m_K6_GEODE | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
++  m_ATOM | m_AMD_MULTIPLE | m_K6_GEODE | m_PENT4 | m_NOCONA
++  | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_ADD_ESP_8 */
+-  m_AMD_MULTIPLE | m_PPRO | m_K6_GEODE | m_386
++  m_AMD_MULTIPLE | m_ATOM | m_PPRO | m_K6_GEODE | m_386
+   | m_486 | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_SUB_ESP_4 */
+-  m_AMD_MULTIPLE | m_PPRO | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
++  m_AMD_MULTIPLE | m_ATOM | m_PPRO | m_PENT4 | m_NOCONA | m_CORE2
++  | m_GENERIC,
+ 
+   /* X86_TUNE_SUB_ESP_8 */
+-  m_AMD_MULTIPLE | m_PPRO | m_386 | m_486
++  m_AMD_MULTIPLE | m_ATOM | m_PPRO | m_386 | m_486
+   | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_INTEGER_DFMODE_MOVES: Enable if integer moves are preferred
+      for DFmode copies */
+-  ~(m_AMD_MULTIPLE | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2
++  ~(m_AMD_MULTIPLE | m_ATOM | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2
+     | m_GENERIC | m_GEODE),
+ 
+   /* X86_TUNE_PARTIAL_REG_DEPENDENCY */
+-  m_AMD_MULTIPLE | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
++  m_AMD_MULTIPLE | m_ATOM | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY: In the Generic model we have a
+      conflict here in between PPro/Pentium4 based chips that thread 128bit
+@@ -1347,7 +1424,8 @@
+      shows that disabling this option on P4 brings over 20% SPECfp regression,
+      while enabling it on K8 brings roughly 2.4% regression that can be partly
+      masked by careful scheduling of moves.  */
+-  m_PENT4 | m_NOCONA | m_PPRO | m_CORE2 | m_GENERIC | m_AMDFAM10,
++  m_ATOM | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2 | m_GENERIC
++  | m_AMDFAM10,
+ 
+   /* X86_TUNE_SSE_UNALIGNED_MOVE_OPTIMAL */
+   m_AMDFAM10,
+@@ -1365,13 +1443,13 @@
+   m_PPRO | m_PENT4 | m_NOCONA,
+ 
+   /* X86_TUNE_MEMORY_MISMATCH_STALL */
+-  m_AMD_MULTIPLE | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
++  m_AMD_MULTIPLE | m_ATOM | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_PROLOGUE_USING_MOVE */
+-  m_ATHLON_K8 | m_PPRO | m_CORE2 | m_GENERIC,
++  m_ATHLON_K8 | m_ATOM | m_PPRO | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_EPILOGUE_USING_MOVE */
+-  m_ATHLON_K8 | m_PPRO | m_CORE2 | m_GENERIC,
++  m_ATHLON_K8 | m_ATOM | m_PPRO | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_SHIFT1 */
+   ~m_486,
+@@ -1380,29 +1458,32 @@
+   m_AMD_MULTIPLE,
+ 
+   /* X86_TUNE_INTER_UNIT_MOVES */
+-  ~(m_AMD_MULTIPLE | m_GENERIC),
++  ~(m_AMD_MULTIPLE | m_ATOM | m_GENERIC),
+ 
+   /* X86_TUNE_INTER_UNIT_CONVERSIONS */
+   ~(m_AMDFAM10),
+ 
+   /* X86_TUNE_FOUR_JUMP_LIMIT: Some CPU cores are not able to predict more
+      than 4 branch instructions in the 16 byte window.  */
+-  m_PPRO | m_AMD_MULTIPLE | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
++  m_ATOM | m_PPRO | m_AMD_MULTIPLE | m_PENT4 | m_NOCONA | m_CORE2
++  | m_GENERIC,
+ 
+   /* X86_TUNE_SCHEDULE */
+-  m_PPRO | m_AMD_MULTIPLE | m_K6_GEODE | m_PENT | m_CORE2 | m_GENERIC,
++  m_PPRO | m_AMD_MULTIPLE | m_K6_GEODE | m_PENT | m_ATOM | m_CORE2
++  | m_GENERIC,
+ 
+   /* X86_TUNE_USE_BT */
+-  m_AMD_MULTIPLE | m_CORE2 | m_GENERIC,
++  m_AMD_MULTIPLE | m_ATOM | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_USE_INCDEC */
+-  ~(m_PENT4 | m_NOCONA | m_GENERIC),
++  ~(m_PENT4 | m_NOCONA | m_GENERIC | m_ATOM),
+ 
+   /* X86_TUNE_PAD_RETURNS */
+   m_AMD_MULTIPLE | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_EXT_80387_CONSTANTS */
+-  m_K6_GEODE | m_ATHLON_K8 | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2 | m_GENERIC,
++  m_K6_GEODE | m_ATHLON_K8 | m_ATOM | m_PENT4 | m_NOCONA | m_PPRO
++  | m_CORE2 | m_GENERIC,
+ 
+   /* X86_TUNE_SHORTEN_X87_SSE */
+   ~m_K8,
+@@ -1447,6 +1528,10 @@
+      with a subsequent conditional jump instruction into a single
+      compare-and-branch uop.  */
+   m_CORE2,
++
++  /* X86_TUNE_OPT_AGU: Optimize for Address Generation Unit. This flag
++     will impact LEA instruction selection. */
++  m_ATOM,
+ };
+ 
+ /* Feature tests against the various architecture variations.  */
+@@ -1472,10 +1557,11 @@
+ };
+ 
+ static const unsigned int x86_accumulate_outgoing_args
+-  = m_AMD_MULTIPLE | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2 | m_GENERIC;
++  = m_AMD_MULTIPLE | m_ATOM | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2
++    | m_GENERIC;
+ 
+ static const unsigned int x86_arch_always_fancy_math_387
+-  = m_PENT | m_PPRO | m_AMD_MULTIPLE | m_PENT4
++  = m_PENT | m_ATOM | m_PPRO | m_AMD_MULTIPLE | m_PENT4
+     | m_NOCONA | m_CORE2 | m_GENERIC;
+ 
+ static enum stringop_alg stringop_alg = no_stringop;
+@@ -1743,6 +1829,9 @@
+ /* Alignment for incoming stack boundary in bits.  */
+ unsigned int ix86_incoming_stack_boundary;
+ 
++/* The abi used by target.  */
++enum calling_abi ix86_abi;
++
+ /* Values 1-5: see jump.c */
+ int ix86_branch_cost;
+ 
+@@ -1819,6 +1908,8 @@
+ static bool ix86_can_inline_p (tree, tree);
+ static void ix86_set_current_function (tree);
+ 
++static enum calling_abi ix86_function_abi (const_tree);
++
+ 
+ /* The svr4 ABI for the i386 says that records and unions are returned
+    in memory.  */
+@@ -1877,9 +1968,11 @@
+ 
+ #define OPTION_MASK_ISA_ABM_SET \
+   (OPTION_MASK_ISA_ABM | OPTION_MASK_ISA_POPCNT)
++
+ #define OPTION_MASK_ISA_POPCNT_SET OPTION_MASK_ISA_POPCNT
+ #define OPTION_MASK_ISA_CX16_SET OPTION_MASK_ISA_CX16
+ #define OPTION_MASK_ISA_SAHF_SET OPTION_MASK_ISA_SAHF
++#define OPTION_MASK_ISA_MOVBE_SET OPTION_MASK_ISA_MOVBE
+ 
+ /* Define a set of ISAs which aren't available when a given ISA is
+    disabled.  MMX and SSE ISAs are handled separately.  */
+@@ -1921,6 +2014,7 @@
+ #define OPTION_MASK_ISA_POPCNT_UNSET OPTION_MASK_ISA_POPCNT
+ #define OPTION_MASK_ISA_CX16_UNSET OPTION_MASK_ISA_CX16
+ #define OPTION_MASK_ISA_SAHF_UNSET OPTION_MASK_ISA_SAHF
++#define OPTION_MASK_ISA_MOVBE_UNSET OPTION_MASK_ISA_MOVBE
+ 
+ /* Vectorization library interface and handlers.  */
+ tree (*ix86_veclib_handler)(enum built_in_function, tree, tree) = NULL;
+@@ -1953,7 +2047,8 @@
+   {&core2_cost, 16, 10, 16, 10, 16},
+   {&generic32_cost, 16, 7, 16, 7, 16},
+   {&generic64_cost, 16, 10, 16, 10, 16},
+-  {&amdfam10_cost, 32, 24, 32, 7, 32}
++  {&amdfam10_cost, 32, 24, 32, 7, 32},
++  {&atom_cost, 16, 7, 16, 7, 16}
+ };
+ 
+ static const char *const cpu_names[TARGET_CPU_DEFAULT_max] =
+@@ -1971,6 +2066,7 @@
+   "prescott",
+   "nocona",
+   "core2",
++  "atom",
+   "geode",
+   "k6",
+   "k6-2",
+@@ -2209,6 +2305,19 @@
+ 	}
+       return true;
+ 
++    case OPT_mmovbe:
++      if (value)
++	{
++	  ix86_isa_flags |= OPTION_MASK_ISA_MOVBE_SET;
++	  ix86_isa_flags_explicit |= OPTION_MASK_ISA_MOVBE_SET;
++	}
++      else
++	{
++	  ix86_isa_flags &= ~OPTION_MASK_ISA_MOVBE_UNSET;
++	  ix86_isa_flags_explicit |= OPTION_MASK_ISA_MOVBE_UNSET;
++	}
++      return true;
++
+     case OPT_maes:
+       if (value)
+ 	{
+@@ -2271,6 +2380,7 @@
+     { "-mmmx",		OPTION_MASK_ISA_MMX },
+     { "-mabm",		OPTION_MASK_ISA_ABM },
+     { "-mpopcnt",	OPTION_MASK_ISA_POPCNT },
++    { "-mmovbe",	OPTION_MASK_ISA_MOVBE },
+     { "-maes",		OPTION_MASK_ISA_AES },
+     { "-mpclmul",	OPTION_MASK_ISA_PCLMUL },
+   };
+@@ -2487,7 +2597,8 @@
+       PTA_AES = 1 << 17,
+       PTA_PCLMUL = 1 << 18,
+       PTA_AVX = 1 << 19,
+-      PTA_FMA = 1 << 20 
++      PTA_FMA = 1 << 20,
++      PTA_MOVBE = 1 << 21
+     };
+ 
+   static struct pta
+@@ -2529,6 +2640,9 @@
+       {"core2", PROCESSOR_CORE2, CPU_CORE2,
+ 	PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
+ 	| PTA_SSSE3 | PTA_CX16},
++      {"atom", PROCESSOR_ATOM, CPU_ATOM,
++	PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
++	| PTA_SSSE3 | PTA_CX16 | PTA_MOVBE},
+       {"geode", PROCESSOR_GEODE, CPU_GEODE,
+ 	PTA_MMX | PTA_3DNOW | PTA_3DNOW_A |PTA_PREFETCH_SSE},
+       {"k6", PROCESSOR_K6, CPU_K6, PTA_MMX},
+@@ -2716,6 +2830,20 @@
+     error ("bad value (%s) for %sarch=%s %s",
+ 	   ix86_arch_string, prefix, suffix, sw);
+ 
++  /* Validate -mabi= value.  */
++  if (ix86_abi_string)
++    {
++      if (strcmp (ix86_abi_string, "sysv") == 0)
++	ix86_abi = SYSV_ABI;
++      else if (strcmp (ix86_abi_string, "ms") == 0)
++	ix86_abi = MS_ABI;
++      else
++	error ("unknown ABI (%s) for %sabi=%s %s",
++	       ix86_abi_string, prefix, suffix, sw);
++    }
++  else
++    ix86_abi = DEFAULT_ABI;
++
+   if (ix86_cmodel_string != 0)
+     {
+       if (!strcmp (ix86_cmodel_string, "small"))
+@@ -2828,6 +2956,9 @@
+ 	if (!(TARGET_64BIT && (processor_alias_table[i].flags & PTA_NO_SAHF))
+ 	    && !(ix86_isa_flags_explicit & OPTION_MASK_ISA_SAHF))
+ 	  ix86_isa_flags |= OPTION_MASK_ISA_SAHF;
++	if (processor_alias_table[i].flags & PTA_MOVBE
++	    && !(ix86_isa_flags_explicit & OPTION_MASK_ISA_MOVBE))
++	  ix86_isa_flags |= OPTION_MASK_ISA_MOVBE;
+ 	if (processor_alias_table[i].flags & PTA_AES
+ 	    && !(ix86_isa_flags_explicit & OPTION_MASK_ISA_AES))
+ 	  ix86_isa_flags |= OPTION_MASK_ISA_AES;
+@@ -4592,14 +4723,14 @@
+      default ABI.  */
+ 
+   /* RAX is used as hidden argument to va_arg functions.  */
+-  if (DEFAULT_ABI == SYSV_ABI && regno == AX_REG)
++  if (ix86_abi == SYSV_ABI && regno == AX_REG)
+     return true;
+ 
+-  if (DEFAULT_ABI == MS_ABI)
++  if (ix86_abi == MS_ABI)
+     parm_regs = x86_64_ms_abi_int_parameter_registers;
+   else
+     parm_regs = x86_64_int_parameter_registers;
+-  for (i = 0; i < (DEFAULT_ABI == MS_ABI ? X64_REGPARM_MAX
++  for (i = 0; i < (ix86_abi == MS_ABI ? X64_REGPARM_MAX
+   					 : X86_64_REGPARM_MAX); i++)
+     if (regno == parm_regs[i])
+       return true;
+@@ -4627,7 +4758,7 @@
+ int
+ ix86_reg_parm_stack_space (const_tree fndecl)
+ {
+-  int call_abi = SYSV_ABI;
++  enum calling_abi call_abi = SYSV_ABI;
+   if (fndecl != NULL_TREE && TREE_CODE (fndecl) == FUNCTION_DECL)
+     call_abi = ix86_function_abi (fndecl);
+   else
+@@ -4639,37 +4770,39 @@
+ 
+ /* Returns value SYSV_ABI, MS_ABI dependent on fntype, specifying the
+    call abi used.  */
+-int
++enum calling_abi
+ ix86_function_type_abi (const_tree fntype)
+ {
+   if (TARGET_64BIT && fntype != NULL)
+     {
+-      int abi;
+-      if (DEFAULT_ABI == SYSV_ABI)
+-        abi = lookup_attribute ("ms_abi", TYPE_ATTRIBUTES (fntype)) ? MS_ABI : SYSV_ABI;
+-      else
+-        abi = lookup_attribute ("sysv_abi", TYPE_ATTRIBUTES (fntype)) ? SYSV_ABI : MS_ABI;
+-
++      enum calling_abi abi = ix86_abi;
++      if (abi == SYSV_ABI)
++	{
++	  if (lookup_attribute ("ms_abi", TYPE_ATTRIBUTES (fntype)))
++	    abi = MS_ABI;
++	}
++      else if (lookup_attribute ("sysv_abi", TYPE_ATTRIBUTES (fntype)))
++	abi = SYSV_ABI;
+       return abi;
+     }
+-  return DEFAULT_ABI;
++  return ix86_abi;
+ }
+ 
+-int
++static enum calling_abi
+ ix86_function_abi (const_tree fndecl)
+ {
+   if (! fndecl)
+-    return DEFAULT_ABI;
++    return ix86_abi;
+   return ix86_function_type_abi (TREE_TYPE (fndecl));
+ }
+ 
+ /* Returns value SYSV_ABI, MS_ABI dependent on cfun, specifying the
+    call abi used.  */
+-int
++enum calling_abi
+ ix86_cfun_abi (void)
+ {
+   if (! cfun || ! TARGET_64BIT)
+-    return DEFAULT_ABI;
++    return ix86_abi;
+   return cfun->machine->call_abi;
+ }
+ 
+@@ -4683,7 +4816,7 @@
+ ix86_call_abi_override (const_tree fndecl)
+ {
+   if (fndecl == NULL_TREE)
+-    cfun->machine->call_abi = DEFAULT_ABI;
++    cfun->machine->call_abi = ix86_abi;
+   else
+     cfun->machine->call_abi = ix86_function_type_abi (TREE_TYPE (fndecl));
+ }
+@@ -4724,8 +4857,8 @@
+   cum->nregs = ix86_regparm;
+   if (TARGET_64BIT)
+     {
+-      if (cum->call_abi != DEFAULT_ABI)
+-        cum->nregs = DEFAULT_ABI != SYSV_ABI ? X86_64_REGPARM_MAX
++      if (cum->call_abi != ix86_abi)
++        cum->nregs = ix86_abi != SYSV_ABI ? X86_64_REGPARM_MAX
+         				     : X64_REGPARM_MAX;
+     }
+   if (TARGET_SSE)
+@@ -4733,8 +4866,8 @@
+       cum->sse_nregs = SSE_REGPARM_MAX;
+       if (TARGET_64BIT)
+         {
+-          if (cum->call_abi != DEFAULT_ABI)
+-            cum->sse_nregs = DEFAULT_ABI != SYSV_ABI ? X86_64_SSE_REGPARM_MAX
++          if (cum->call_abi != ix86_abi)
++            cum->sse_nregs = ix86_abi != SYSV_ABI ? X86_64_SSE_REGPARM_MAX
+             					     : X64_SSE_REGPARM_MAX;
+         }
+     }
+@@ -5703,7 +5836,7 @@
+   if (type)
+     mode = type_natural_mode (type, NULL);
+ 
+-  if (TARGET_64BIT && (cum ? cum->call_abi : DEFAULT_ABI) == MS_ABI)
++  if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
+     function_arg_advance_ms_64 (cum, bytes, words);
+   else if (TARGET_64BIT)
+     function_arg_advance_64 (cum, mode, type, words, named);
+@@ -5849,9 +5982,9 @@
+   if (mode == VOIDmode)
+     return GEN_INT (cum->maybe_vaarg
+ 		    ? (cum->sse_nregs < 0
+-		       ? (cum->call_abi == DEFAULT_ABI
++		       ? (cum->call_abi == ix86_abi
+ 		          ? SSE_REGPARM_MAX
+-		          : (DEFAULT_ABI != SYSV_ABI ? X86_64_SSE_REGPARM_MAX
++		          : (ix86_abi != SYSV_ABI ? X86_64_SSE_REGPARM_MAX
+ 		          			     : X64_SSE_REGPARM_MAX))
+  	       : cum->sse_regno)
+ 		    : -1);
+@@ -5945,7 +6078,7 @@
+   if (type && TREE_CODE (type) == VECTOR_TYPE)
+     mode = type_natural_mode (type, cum);
+ 
+-  if (TARGET_64BIT && (cum ? cum->call_abi : DEFAULT_ABI) == MS_ABI)
++  if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
+     return function_arg_ms_64 (cum, mode, omode, named, bytes);
+   else if (TARGET_64BIT)
+     return function_arg_64 (cum, mode, omode, type, named);
+@@ -5965,7 +6098,7 @@
+ 			const_tree type, bool named ATTRIBUTE_UNUSED)
+ {
+   /* See Windows x64 Software Convention.  */
+-  if (TARGET_64BIT && (cum ? cum->call_abi : DEFAULT_ABI) == MS_ABI)
++  if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
+     {
+       int msize = (int) GET_MODE_SIZE (mode);
+       if (type)
+@@ -6105,7 +6238,7 @@
+       /* TODO: The function should depend on current function ABI but
+        builtins.c would need updating then. Therefore we use the
+        default ABI.  */
+-      if (TARGET_64BIT && DEFAULT_ABI == MS_ABI)
++      if (TARGET_64BIT && ix86_abi == MS_ABI)
+ 	return false;
+       return TARGET_FLOAT_RETURNS_IN_80387;
+ 
+@@ -6501,13 +6634,13 @@
+ static tree
+ ix86_build_builtin_va_list (void)
+ {
+-  tree ret = ix86_build_builtin_va_list_abi (DEFAULT_ABI);
++  tree ret = ix86_build_builtin_va_list_abi (ix86_abi);
+ 
+   /* Initialize abi specific va_list builtin types.  */
+   if (TARGET_64BIT)
+     {
+       tree t;
+-      if (DEFAULT_ABI == MS_ABI)
++      if (ix86_abi == MS_ABI)
+         {
+           t = ix86_build_builtin_va_list_abi (SYSV_ABI);
+           if (TREE_CODE (t) != RECORD_TYPE)
+@@ -6521,7 +6654,7 @@
+             t = build_variant_type_copy (t);
+           sysv_va_list_type_node = t;
+         }
+-      if (DEFAULT_ABI != MS_ABI)
++      if (ix86_abi != MS_ABI)
+         {
+           t = ix86_build_builtin_va_list_abi (MS_ABI);
+           if (TREE_CODE (t) != RECORD_TYPE)
+@@ -6554,8 +6687,8 @@
+   int i;
+   int regparm = ix86_regparm;
+ 
+-  if (cum->call_abi != DEFAULT_ABI)
+-    regparm = DEFAULT_ABI != SYSV_ABI ? X86_64_REGPARM_MAX : X64_REGPARM_MAX;
++  if (cum->call_abi != ix86_abi)
++    regparm = ix86_abi != SYSV_ABI ? X86_64_REGPARM_MAX : X64_REGPARM_MAX;
+ 
+   /* GPR size of varargs save area.  */
+   if (cfun->va_list_gpr_size)
+@@ -6712,7 +6845,7 @@
+     return true;
+   canonic = ix86_canonical_va_list_type (type);
+   return (canonic == ms_va_list_type_node
+-          || (DEFAULT_ABI == MS_ABI && canonic == va_list_type_node));
++          || (ix86_abi == MS_ABI && canonic == va_list_type_node));
+ }
+ 
+ /* Implement va_start.  */
+@@ -12988,6 +13121,316 @@
+     emit_move_insn (operands[0], dst);
+ }
+ 
++#define LEA_SEARCH_THRESHOLD 12
++
++/* Search backward for non-agu definition of register number REGNO1
++   or register number REGNO2 in INSN's basic block until 
++   1. Pass LEA_SEARCH_THRESHOLD instructions, or
++   2. Reach BB boundary, or
++   3. Reach agu definition.
++   Returns the distance between the non-agu definition point and INSN.
++   If no definition point, returns -1.  */
++
++static int
++distance_non_agu_define (unsigned int regno1, unsigned int regno2,
++			 rtx insn)
++{
++  basic_block bb = BLOCK_FOR_INSN (insn);
++  int distance = 0;
++  df_ref *def_rec;
++  enum attr_type insn_type;
++
++  if (insn != BB_HEAD (bb))
++    {
++      rtx prev = PREV_INSN (insn);
++      while (prev && distance < LEA_SEARCH_THRESHOLD)
++	{
++	  if (INSN_P (prev))
++	    {
++	      distance++;
++              for (def_rec = DF_INSN_DEFS (prev); *def_rec; def_rec++)
++                if (DF_REF_TYPE (*def_rec) == DF_REF_REG_DEF
++                    && !DF_REF_IS_ARTIFICIAL (*def_rec)
++                    && (regno1 == DF_REF_REGNO (*def_rec)
++			|| regno2 == DF_REF_REGNO (*def_rec)))
++		  {
++		    insn_type = get_attr_type (prev);
++		    if (insn_type != TYPE_LEA)
++		      goto done;
++		  }
++	    }
++	  if (prev == BB_HEAD (bb))
++	    break;
++	  prev = PREV_INSN (prev);
++	}
++    }
++  
++  if (distance < LEA_SEARCH_THRESHOLD)
++    {
++      edge e;
++      edge_iterator ei;
++      bool simple_loop = false;
++  
++      FOR_EACH_EDGE (e, ei, bb->preds)
++	if (e->src == bb)
++	  {
++	    simple_loop = true;
++	    break;
++	  }
++  
++      if (simple_loop)
++	{
++	  rtx prev = BB_END (bb);
++	  while (prev
++		 && prev != insn
++		 && distance < LEA_SEARCH_THRESHOLD)
++	    {
++	      if (INSN_P (prev))
++		{
++		  distance++;
++		  for (def_rec = DF_INSN_DEFS (prev); *def_rec; def_rec++)
++		    if (DF_REF_TYPE (*def_rec) == DF_REF_REG_DEF
++			&& !DF_REF_IS_ARTIFICIAL (*def_rec)
++			&& (regno1 == DF_REF_REGNO (*def_rec)
++			    || regno2 == DF_REF_REGNO (*def_rec)))
++		      {
++			insn_type = get_attr_type (prev);
++			if (insn_type != TYPE_LEA)
++			  goto done;
++		      }
++		}
++	      prev = PREV_INSN (prev);
++	    }
++	}
++    }
++
++  distance = -1;
++
++done:
++  /* get_attr_type may modify recog data.  We want to make sure
++     that recog data is valid for instruction INSN, on which
++     distance_non_agu_define is called.  INSN is unchanged here.  */
++  extract_insn_cached (insn);
++  return distance;
++}
++
++/* Return the distance between INSN and the next insn that uses 
++   register number REGNO0 in memory address.  Return -1 if no such
++   a use is found within LEA_SEARCH_THRESHOLD or REGNO0 is set.  */
++
++static int
++distance_agu_use (unsigned int regno0, rtx insn)
++{
++  basic_block bb = BLOCK_FOR_INSN (insn);
++  int distance = 0;
++  df_ref *def_rec;
++  df_ref *use_rec;
++
++  if (insn != BB_END (bb))
++    {
++      rtx next = NEXT_INSN (insn);
++      while (next && distance < LEA_SEARCH_THRESHOLD)
++	{
++	  if (INSN_P (next))
++	    {
++	      distance++;
++
++	      for (use_rec = DF_INSN_USES (next); *use_rec; use_rec++)
++		if ((DF_REF_TYPE (*use_rec) == DF_REF_REG_MEM_LOAD
++		     || DF_REF_TYPE (*use_rec) == DF_REF_REG_MEM_STORE)
++		    && regno0 == DF_REF_REGNO (*use_rec))
++		  {
++		    /* Return DISTANCE if OP0 is used in memory
++		       address in NEXT.  */
++		    return distance;
++		  }
++
++	      for (def_rec = DF_INSN_DEFS (next); *def_rec; def_rec++)
++		if (DF_REF_TYPE (*def_rec) == DF_REF_REG_DEF
++		    && !DF_REF_IS_ARTIFICIAL (*def_rec)
++		    && regno0 == DF_REF_REGNO (*def_rec))
++		  {
++		    /* Return -1 if OP0 is set in NEXT.  */
++		    return -1;
++		  }
++	    }
++	  if (next == BB_END (bb))
++	    break;
++	  next = NEXT_INSN (next);
++	}
++    }
++
++  if (distance < LEA_SEARCH_THRESHOLD)
++    {
++      edge e;
++      edge_iterator ei;
++      bool simple_loop = false;
++  
++      FOR_EACH_EDGE (e, ei, bb->succs)
++        if (e->dest == bb)
++	  {
++	    simple_loop = true;
++	    break;
++	  }
++  
++      if (simple_loop)
++	{
++	  rtx next = BB_HEAD (bb);
++	  while (next
++		 && next != insn
++		 && distance < LEA_SEARCH_THRESHOLD)
++	    {
++	      if (INSN_P (next))
++		{
++		  distance++;
++
++		  for (use_rec = DF_INSN_USES (next); *use_rec; use_rec++)
++		    if ((DF_REF_TYPE (*use_rec) == DF_REF_REG_MEM_LOAD
++			 || DF_REF_TYPE (*use_rec) == DF_REF_REG_MEM_STORE)
++			&& regno0 == DF_REF_REGNO (*use_rec))
++		      {
++			/* Return DISTANCE if OP0 is used in memory
++			   address in NEXT.  */
++			return distance;
++		      }
++
++		  for (def_rec = DF_INSN_DEFS (next); *def_rec; def_rec++)
++		    if (DF_REF_TYPE (*def_rec) == DF_REF_REG_DEF
++			&& !DF_REF_IS_ARTIFICIAL (*def_rec)
++			&& regno0 == DF_REF_REGNO (*def_rec))
++		      {
++			/* Return -1 if OP0 is set in NEXT.  */
++			return -1;
++		      }
++
++		}
++	      next = NEXT_INSN (next);
++	    }
++	}
++    }  
++
++  return -1;
++}
++
++/* Define this macro to tune LEA priority vs ADD, it take effect when
++   there is a dilemma of choicing LEA or ADD
++   Negative value: ADD is more preferred than LEA
++   Zero: Netrual
++   Positive value: LEA is more preferred than ADD*/
++#define IX86_LEA_PRIORITY 2
++
++/* Return true if it is ok to optimize an ADD operation to LEA
++   operation to avoid flag register consumation.  For the processors
++   like ATOM, if the destination register of LEA holds an actual
++   address which will be used soon, LEA is better and otherwise ADD
++   is better.  */
++
++bool
++ix86_lea_for_add_ok (enum rtx_code code ATTRIBUTE_UNUSED,
++                     rtx insn, rtx operands[])
++{
++  unsigned int regno0 = true_regnum (operands[0]);
++  unsigned int regno1 = true_regnum (operands[1]);
++  unsigned int regno2;
++
++  if (!TARGET_OPT_AGU || optimize_function_for_size_p (cfun))
++    return regno0 != regno1;
++
++  regno2 = true_regnum (operands[2]);
++
++  /* If a = b + c, (a!=b && a!=c), must use lea form. */
++  if (regno0 != regno1 && regno0 != regno2)
++    return true;
++  else    
++    {
++      int dist_define, dist_use;
++      dist_define = distance_non_agu_define (regno1, regno2, insn);
++      if (dist_define <= 0)
++        return true;
++
++      /* If this insn has both backward non-agu dependence and forward
++         agu dependence, the one with short distance take effect. */
++      dist_use = distance_agu_use (regno0, insn);
++      if (dist_use <= 0
++	  || (dist_define + IX86_LEA_PRIORITY) < dist_use)
++        return false;
++
++      return true;
++    }
++}
++
++/* Return true if destination reg of SET_BODY is shift count of
++   USE_BODY.  */
++
++static bool
++ix86_dep_by_shift_count_body (const_rtx set_body, const_rtx use_body)
++{
++  rtx set_dest;
++  rtx shift_rtx;
++  int i;
++
++  /* Retrieve destination of SET_BODY.  */
++  switch (GET_CODE (set_body))
++    {
++    case SET:
++      set_dest = SET_DEST (set_body);
++      if (!set_dest || !REG_P (set_dest))
++	return false;
++      break;
++    case PARALLEL:
++      for (i = XVECLEN (set_body, 0) - 1; i >= 0; i--)
++	if (ix86_dep_by_shift_count_body (XVECEXP (set_body, 0, i),
++					  use_body))
++	  return true;
++    default:
++      return false;
++      break;
++    }
++
++  /* Retrieve shift count of USE_BODY.  */
++  switch (GET_CODE (use_body))
++    {
++    case SET:
++      shift_rtx = XEXP (use_body, 1);
++      break;
++    case PARALLEL:
++      for (i = XVECLEN (use_body, 0) - 1; i >= 0; i--)
++	if (ix86_dep_by_shift_count_body (set_body,
++					  XVECEXP (use_body, 0, i)))
++	  return true;
++    default:
++      return false;
++      break;
++    }
++
++  if (shift_rtx 
++      && (GET_CODE (shift_rtx) == ASHIFT
++	  || GET_CODE (shift_rtx) == LSHIFTRT
++	  || GET_CODE (shift_rtx) == ASHIFTRT
++	  || GET_CODE (shift_rtx) == ROTATE
++	  || GET_CODE (shift_rtx) == ROTATERT))
++    {
++      rtx shift_count = XEXP (shift_rtx, 1);
++
++      /* Return true if shift count is dest of SET_BODY.  */
++      if (REG_P (shift_count)
++	  && true_regnum (set_dest) == true_regnum (shift_count))
++	return true;
++    }
++
++  return false;
++}
++
++/* Return true if destination reg of SET_INSN is shift count of
++   USE_INSN.  */
++
++bool
++ix86_dep_by_shift_count (const_rtx set_insn, const_rtx use_insn)
++{
++  return ix86_dep_by_shift_count_body (PATTERN (set_insn),
++				       PATTERN (use_insn));
++}
++
+ /* Return TRUE or FALSE depending on whether the unary operator meets the
+    appropriate constraints.  */
+ 
+@@ -18844,7 +19287,7 @@
+   f = GGC_CNEW (struct machine_function);
+   f->use_fast_prologue_epilogue_nregs = -1;
+   f->tls_descriptor_call_expanded_p = 0;
+-  f->call_abi = DEFAULT_ABI;
++  f->call_abi = ix86_abi;
+ 
+   return f;
+ }
+@@ -19105,6 +19548,7 @@
+   switch (ix86_tune)
+     {
+     case PROCESSOR_PENTIUM:
++    case PROCESSOR_ATOM:
+     case PROCESSOR_K6:
+       return 2;
+ 
+@@ -19171,41 +19615,21 @@
+   return 1;
+ }
+ 
+-/* A subroutine of ix86_adjust_cost -- return true iff INSN has a memory
+-   address with operands set by DEP_INSN.  */
++/* Return true iff USE_INSN has a memory address with operands set by
++   SET_INSN.  */
+ 
+-static int
+-ix86_agi_dependent (rtx insn, rtx dep_insn, enum attr_type insn_type)
++bool
++ix86_agi_dependent (rtx set_insn, rtx use_insn)
+ {
+-  rtx addr;
+-
+-  if (insn_type == TYPE_LEA
+-      && TARGET_PENTIUM)
+-    {
+-      addr = PATTERN (insn);
+-
+-      if (GET_CODE (addr) == PARALLEL)
+-	addr = XVECEXP (addr, 0, 0);
+-
+-      gcc_assert (GET_CODE (addr) == SET);
+-
+-      addr = SET_SRC (addr);
+-    }
+-  else
+-    {
+-      int i;
+-      extract_insn_cached (insn);
+-      for (i = recog_data.n_operands - 1; i >= 0; --i)
+-	if (MEM_P (recog_data.operand[i]))
+-	  {
+-	    addr = XEXP (recog_data.operand[i], 0);
+-	    goto found;
+-	  }
+-      return 0;
+-    found:;
+-    }
+-
+-  return modified_in_p (addr, dep_insn);
++  int i;
++  extract_insn_cached (use_insn);
++  for (i = recog_data.n_operands - 1; i >= 0; --i)
++    if (MEM_P (recog_data.operand[i]))
++      {
++	rtx addr = XEXP (recog_data.operand[i], 0);
++	return modified_in_p (addr, set_insn) != 0;
++      }
++  return false;
+ }
+ 
+ static int
+@@ -19233,7 +19657,20 @@
+     {
+     case PROCESSOR_PENTIUM:
+       /* Address Generation Interlock adds a cycle of latency.  */
+-      if (ix86_agi_dependent (insn, dep_insn, insn_type))
++      if (insn_type == TYPE_LEA)
++	{
++	  rtx addr = PATTERN (insn);
++
++	  if (GET_CODE (addr) == PARALLEL)
++	    addr = XVECEXP (addr, 0, 0);
++
++	  gcc_assert (GET_CODE (addr) == SET);
++
++	  addr = SET_SRC (addr);
++	  if (modified_in_p (addr, dep_insn))
++	    cost += 1;
++	}
++      else if (ix86_agi_dependent (dep_insn, insn))
+ 	cost += 1;
+ 
+       /* ??? Compares pair with jump/setcc.  */
+@@ -19243,7 +19680,7 @@
+       /* Floating point stores require value to be ready one cycle earlier.  */
+       if (insn_type == TYPE_FMOV
+ 	  && get_attr_memory (insn) == MEMORY_STORE
+-	  && !ix86_agi_dependent (insn, dep_insn, insn_type))
++	  && !ix86_agi_dependent (dep_insn, insn))
+ 	cost += 1;
+       break;
+ 
+@@ -19266,7 +19703,7 @@
+ 	 in parallel with previous instruction in case
+ 	 previous instruction is not needed to compute the address.  */
+       if ((memory == MEMORY_LOAD || memory == MEMORY_BOTH)
+-	  && !ix86_agi_dependent (insn, dep_insn, insn_type))
++	  && !ix86_agi_dependent (dep_insn, insn))
+ 	{
+ 	  /* Claim moves to take one cycle, as core can issue one load
+ 	     at time and the next load can start cycle later.  */
+@@ -19295,7 +19732,7 @@
+ 	 in parallel with previous instruction in case
+ 	 previous instruction is not needed to compute the address.  */
+       if ((memory == MEMORY_LOAD || memory == MEMORY_BOTH)
+-	  && !ix86_agi_dependent (insn, dep_insn, insn_type))
++	  && !ix86_agi_dependent (dep_insn, insn))
+ 	{
+ 	  /* Claim moves to take one cycle, as core can issue one load
+ 	     at time and the next load can start cycle later.  */
+@@ -19312,6 +19749,7 @@
+     case PROCESSOR_ATHLON:
+     case PROCESSOR_K8:
+     case PROCESSOR_AMDFAM10:
++    case PROCESSOR_ATOM:
+     case PROCESSOR_GENERIC32:
+     case PROCESSOR_GENERIC64:
+       memory = get_attr_memory (insn);
+@@ -19320,7 +19758,7 @@
+ 	 in parallel with previous instruction in case
+ 	 previous instruction is not needed to compute the address.  */
+       if ((memory == MEMORY_LOAD || memory == MEMORY_BOTH)
+-	  && !ix86_agi_dependent (insn, dep_insn, insn_type))
++	  && !ix86_agi_dependent (dep_insn, insn))
+ 	{
+ 	  enum attr_unit unit = get_attr_unit (insn);
+ 	  int loadcost = 3;
+@@ -29601,14 +30039,11 @@
+ tree
+ ix86_fn_abi_va_list (tree fndecl)
+ {
+-  int abi;
+-
+   if (!TARGET_64BIT)
+     return va_list_type_node;
+   gcc_assert (fndecl != NULL_TREE);
+-  abi = ix86_function_abi ((const_tree) fndecl);
+ 
+-  if (abi == MS_ABI)
++  if (ix86_function_abi ((const_tree) fndecl) == MS_ABI)
+     return ms_va_list_type_node;
+   else
+     return sysv_va_list_type_node;
+--- a/src/gcc/config/i386/i386.h
++++ b/src/gcc/config/i386/i386.h
+@@ -59,6 +59,7 @@
+ #define TARGET_ABM	OPTION_ISA_ABM
+ #define TARGET_POPCNT	OPTION_ISA_POPCNT
+ #define TARGET_SAHF	OPTION_ISA_SAHF
++#define TARGET_MOVBE	OPTION_ISA_MOVBE
+ #define TARGET_AES	OPTION_ISA_AES
+ #define TARGET_PCLMUL	OPTION_ISA_PCLMUL
+ #define TARGET_CMPXCHG16B OPTION_ISA_CX16
+@@ -236,6 +237,7 @@
+ #define TARGET_GENERIC64 (ix86_tune == PROCESSOR_GENERIC64)
+ #define TARGET_GENERIC (TARGET_GENERIC32 || TARGET_GENERIC64)
+ #define TARGET_AMDFAM10 (ix86_tune == PROCESSOR_AMDFAM10)
++#define TARGET_ATOM (ix86_tune == PROCESSOR_ATOM)
+ 
+ /* Feature tests against the various tunings.  */
+ enum ix86_tune_indices {
+@@ -300,6 +302,7 @@
+   X86_TUNE_USE_VECTOR_FP_CONVERTS,
+   X86_TUNE_USE_VECTOR_CONVERTS,
+   X86_TUNE_FUSE_CMP_AND_BRANCH,
++  X86_TUNE_OPT_AGU,
+ 
+   X86_TUNE_LAST
+ };
+@@ -387,6 +390,7 @@
+ 	ix86_tune_features[X86_TUNE_USE_VECTOR_CONVERTS]
+ #define TARGET_FUSE_CMP_AND_BRANCH \
+ 	ix86_tune_features[X86_TUNE_FUSE_CMP_AND_BRANCH]
++#define TARGET_OPT_AGU ix86_tune_features[X86_TUNE_OPT_AGU]
+ 
+ /* Feature tests against the various architecture variations.  */
+ enum ix86_arch_indices {
+@@ -470,7 +474,10 @@
+   MS_ABI = 1
+ };
+ 
+-/* The default abi form used by target.  */
++/* The abi used by target.  */
++extern enum calling_abi ix86_abi;
++
++/* The default abi used by target.  */
+ #define DEFAULT_ABI SYSV_ABI
+ 
+ /* Subtargets may reset this to 1 in order to enable 96-bit long double
+@@ -569,6 +576,7 @@
+   TARGET_CPU_DEFAULT_prescott,
+   TARGET_CPU_DEFAULT_nocona,
+   TARGET_CPU_DEFAULT_core2,
++  TARGET_CPU_DEFAULT_atom,
+ 
+   TARGET_CPU_DEFAULT_geode,
+   TARGET_CPU_DEFAULT_k6,
+@@ -658,7 +666,7 @@
+ 
+ /* Boundary (in *bits*) on which stack pointer should be aligned.  */
+ #define STACK_BOUNDARY \
+- (TARGET_64BIT && DEFAULT_ABI == MS_ABI ? 128 : BITS_PER_WORD)
++ (TARGET_64BIT && ix86_abi == MS_ABI ? 128 : BITS_PER_WORD)
+ 
+ /* Stack boundary of the main function guaranteed by OS.  */
+ #define MAIN_STACK_BOUNDARY (TARGET_64BIT ? 128 : 32)
+@@ -1584,7 +1592,7 @@
+   int maybe_vaarg;		/* true for calls to possibly vardic fncts.  */
+   int float_in_sse;		/* 1 if in 32-bit mode SFmode (2 for DFmode) should
+ 				   be passed in SSE registers.  Otherwise 0.  */
+-  int call_abi;			/* Set to SYSV_ABI for sysv abi. Otherwise
++  enum calling_abi call_abi;	/* Set to SYSV_ABI for sysv abi. Otherwise
+  				   MS_ABI for ms abi.  */
+ } CUMULATIVE_ARGS;
+ 
+@@ -2230,6 +2238,7 @@
+   PROCESSOR_GENERIC32,
+   PROCESSOR_GENERIC64,
+   PROCESSOR_AMDFAM10,
++  PROCESSOR_ATOM,
+   PROCESSOR_max
+ };
+ 
+@@ -2403,7 +2412,7 @@
+   int tls_descriptor_call_expanded_p;
+   /* This value is used for amd64 targets and specifies the current abi
+      to be used. MS_ABI means ms abi. Otherwise SYSV_ABI means sysv abi.  */
+-  int call_abi;
++   enum calling_abi call_abi;
+ };
+ 
+ #define ix86_stack_locals (cfun->machine->stack_locals)
+--- a/src/gcc/config/i386/i386.md
++++ b/src/gcc/config/i386/i386.md
+@@ -317,7 +317,7 @@
+ 
+ 
+ ;; Processor type.
+-(define_attr "cpu" "none,pentium,pentiumpro,geode,k6,athlon,k8,core2,
++(define_attr "cpu" "none,pentium,pentiumpro,geode,k6,athlon,k8,core2,atom,
+ 		    generic64,amdfam10"
+   (const (symbol_ref "ix86_schedule")))
+ 
+@@ -613,6 +613,12 @@
+ (define_attr "i387_cw" "trunc,floor,ceil,mask_pm,uninitialized,any"
+   (const_string "any"))
+ 
++;; Define attribute to classify add/sub insns that consumes carry flag (CF)
++(define_attr "use_carry" "0,1" (const_string "0"))
++
++;; Define attribute to indicate unaligned ssemov insns
++(define_attr "movu" "0,1" (const_string "0"))
++
+ ;; Describe a user's asm statement.
+ (define_asm_attributes
+   [(set_attr "length" "128")
+@@ -728,6 +734,7 @@
+ (include "k6.md")
+ (include "athlon.md")
+ (include "geode.md")
++(include "atom.md")
+ 
+ 
+ ;; Operand and operator predicates and constraints
+@@ -5792,6 +5799,7 @@
+   "TARGET_64BIT && ix86_binary_operator_ok (PLUS, DImode, operands)"
+   "adc{q}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "DI")])
+ 
+@@ -5866,6 +5874,7 @@
+   "ix86_binary_operator_ok (PLUS, QImode, operands)"
+   "adc{b}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "QI")])
+ 
+@@ -5878,6 +5887,7 @@
+   "ix86_binary_operator_ok (PLUS, HImode, operands)"
+   "adc{w}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "HI")])
+ 
+@@ -5890,6 +5900,7 @@
+   "ix86_binary_operator_ok (PLUS, SImode, operands)"
+   "adc{l}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "SI")])
+ 
+@@ -5903,6 +5914,7 @@
+   "TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands)"
+   "adc{l}\t{%2, %k0|%k0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "SI")])
+ 
+@@ -6132,9 +6144,9 @@
+    (set_attr "mode" "SI")])
+ 
+ (define_insn "*adddi_1_rex64"
+-  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,rm,r")
+-	(plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0,r")
+-		 (match_operand:DI 2 "x86_64_general_operand" "rme,re,le")))
++  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,rm,r,r")
++	(plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0,r,r")
++		 (match_operand:DI 2 "x86_64_general_operand" "rme,re,0,le")))
+    (clobber (reg:CC FLAGS_REG))]
+   "TARGET_64BIT && ix86_binary_operator_ok (PLUS, DImode, operands)"
+ {
+@@ -6155,6 +6167,10 @@
+ 	}
+ 
+     default:
++      /* Use add as much as possible to replace lea for AGU optimization. */
++      if (which_alternative == 2 && TARGET_OPT_AGU)
++        return "add{q}\t{%1, %0|%0, %1}";
++        
+       gcc_assert (rtx_equal_p (operands[0], operands[1]));
+ 
+       /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'.
+@@ -6173,8 +6189,11 @@
+     }
+ }
+   [(set (attr "type")
+-     (cond [(eq_attr "alternative" "2")
++     (cond [(and (eq_attr "alternative" "2") 
++                 (eq (symbol_ref "TARGET_OPT_AGU") (const_int 0)))
+ 	      (const_string "lea")
++            (eq_attr "alternative" "3")
++              (const_string "lea")
+ 	    ; Current assemblers are broken and do not allow @GOTOFF in
+ 	    ; ought but a memory context.
+ 	    (match_operand:DI 2 "pic_symbolic_operand" "")
+@@ -6191,8 +6210,8 @@
+ 	(plus:DI (match_operand:DI 1 "register_operand" "")
+ 		 (match_operand:DI 2 "x86_64_nonmemory_operand" "")))
+    (clobber (reg:CC FLAGS_REG))]
+-  "TARGET_64BIT && reload_completed
+-   && true_regnum (operands[0]) != true_regnum (operands[1])"
++  "TARGET_64BIT && reload_completed 
++   && ix86_lea_for_add_ok (PLUS, insn, operands)"
+   [(set (match_dup 0)
+ 	(plus:DI (match_dup 1)
+ 		 (match_dup 2)))]
+@@ -6396,9 +6415,9 @@
+ 
+ 
+ (define_insn "*addsi_1"
+-  [(set (match_operand:SI 0 "nonimmediate_operand" "=r,rm,r")
+-	(plus:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0,r")
+-		 (match_operand:SI 2 "general_operand" "g,ri,li")))
++  [(set (match_operand:SI 0 "nonimmediate_operand" "=r,rm,r,r")
++	(plus:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0,r,r")
++		 (match_operand:SI 2 "general_operand" "g,ri,0,li")))
+    (clobber (reg:CC FLAGS_REG))]
+   "ix86_binary_operator_ok (PLUS, SImode, operands)"
+ {
+@@ -6419,6 +6438,10 @@
+ 	}
+ 
+     default:
++      /* Use add as much as possible to replace lea for AGU optimization. */
++      if (which_alternative == 2 && TARGET_OPT_AGU)
++        return "add{l}\t{%1, %0|%0, %1}";
++
+       gcc_assert (rtx_equal_p (operands[0], operands[1]));
+ 
+       /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'.
+@@ -6435,7 +6458,10 @@
+     }
+ }
+   [(set (attr "type")
+-     (cond [(eq_attr "alternative" "2")
++     (cond [(and (eq_attr "alternative" "2") 
++                 (eq (symbol_ref "TARGET_OPT_AGU") (const_int 0)))
++               (const_string "lea")
++            (eq_attr "alternative" "3")
+ 	      (const_string "lea")
+ 	    ; Current assemblers are broken and do not allow @GOTOFF in
+ 	    ; ought but a memory context.
+@@ -6453,8 +6479,7 @@
+ 	(plus (match_operand 1 "register_operand" "")
+               (match_operand 2 "nonmemory_operand" "")))
+    (clobber (reg:CC FLAGS_REG))]
+-  "reload_completed
+-   && true_regnum (operands[0]) != true_regnum (operands[1])"
++  "reload_completed && ix86_lea_for_add_ok (PLUS, insn, operands)" 
+   [(const_int 0)]
+ {
+   rtx pat;
+@@ -7555,6 +7580,7 @@
+   "TARGET_64BIT && ix86_binary_operator_ok (MINUS, DImode, operands)"
+   "sbb{q}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "DI")])
+ 
+@@ -7603,6 +7629,7 @@
+   "ix86_binary_operator_ok (MINUS, QImode, operands)"
+   "sbb{b}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "QI")])
+ 
+@@ -7615,6 +7642,7 @@
+   "ix86_binary_operator_ok (MINUS, HImode, operands)"
+   "sbb{w}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "HI")])
+ 
+@@ -7627,6 +7655,7 @@
+   "ix86_binary_operator_ok (MINUS, SImode, operands)"
+   "sbb{l}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "SI")])
+ 
+@@ -15165,7 +15194,7 @@
+ 		     ? gen_rtx_REG (XCmode, FIRST_FLOAT_REG) : NULL),
+ 		    operands[0], const0_rtx,
+ 		    GEN_INT ((TARGET_64BIT
+-			      ? (DEFAULT_ABI == SYSV_ABI
++			      ? (ix86_abi == SYSV_ABI
+ 				 ? X86_64_SSE_REGPARM_MAX
+ 				 : X64_SSE_REGPARM_MAX)
+ 			      : X86_32_SSE_REGPARM_MAX)
+@@ -15245,6 +15274,7 @@
+   "reload_completed"
+   "ret"
+   [(set_attr "length" "1")
++   (set_attr "atom_unit" "jeu")
+    (set_attr "length_immediate" "0")
+    (set_attr "modrm" "0")])
+ 
+@@ -15257,6 +15287,7 @@
+   "reload_completed"
+   "rep\;ret"
+   [(set_attr "length" "1")
++   (set_attr "atom_unit" "jeu")
+    (set_attr "length_immediate" "0")
+    (set_attr "prefix_rep" "1")
+    (set_attr "modrm" "0")])
+@@ -15267,6 +15298,7 @@
+   "reload_completed"
+   "ret\t%0"
+   [(set_attr "length" "3")
++   (set_attr "atom_unit" "jeu")
+    (set_attr "length_immediate" "2")
+    (set_attr "modrm" "0")])
+ 
+@@ -15620,7 +15652,7 @@
+ 	(bswap:SI (match_operand:SI 1 "register_operand" "")))]
+   ""
+ {
+-  if (!TARGET_BSWAP)
++  if (!(TARGET_BSWAP || TARGET_MOVBE))
+     {
+       rtx x = operands[0];
+ 
+@@ -15632,6 +15664,21 @@
+     }
+ })
+ 
++(define_insn "*bswapsi_movbe"
++  [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,m")
++	(bswap:SI (match_operand:SI 1 "nonimmediate_operand" "0,m,r")))]
++  "TARGET_MOVBE && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
++  "@
++    bswap\t%0
++    movbe\t{%1, %0|%0, %1}
++    movbe\t{%1, %0|%0, %1}"
++  [(set_attr "type" "*,imov,imov")
++   (set_attr "modrm" "*,1,1")
++   (set_attr "prefix_0f" "1")
++   (set_attr "prefix_extra" "*,1,1")
++   (set_attr "length" "2,*,*")
++   (set_attr "mode" "SI")])
++
+ (define_insn "*bswapsi_1"
+   [(set (match_operand:SI 0 "register_operand" "=r")
+ 	(bswap:SI (match_operand:SI 1 "register_operand" "0")))]
+@@ -15660,7 +15707,29 @@
+   [(set_attr "length" "4")
+    (set_attr "mode" "HI")])
+ 
+-(define_insn "bswapdi2"
++(define_expand "bswapdi2"
++  [(set (match_operand:DI 0 "register_operand" "")
++	(bswap:DI (match_operand:DI 1 "register_operand" "")))]
++  "TARGET_64BIT"
++  "")
++
++(define_insn "*bswapdi_movbe"
++  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m")
++	(bswap:DI (match_operand:DI 1 "nonimmediate_operand" "0,m,r")))]
++  "TARGET_64BIT && TARGET_MOVBE
++   && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
++  "@
++    bswap\t%0
++    movbe\t{%1, %0|%0, %1}
++    movbe\t{%1, %0|%0, %1}"
++  [(set_attr "type" "*,imov,imov")
++   (set_attr "modrm" "*,1,1")
++   (set_attr "prefix_0f" "1")
++   (set_attr "prefix_extra" "*,1,1")
++   (set_attr "length" "3,*,*")
++   (set_attr "mode" "DI")])
++
++(define_insn "*bswapdi_1"
+   [(set (match_operand:DI 0 "register_operand" "=r")
+ 	(bswap:DI (match_operand:DI 1 "register_operand" "0")))]
+   "TARGET_64BIT"
+@@ -16383,6 +16452,7 @@
+   "TARGET_SSE_MATH"
+   "%vrcpss\t{%1, %d0|%d0, %1}"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "rcp")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "SF")])
+ 
+@@ -16734,6 +16804,7 @@
+   "TARGET_SSE_MATH"
+   "%vrsqrtss\t{%1, %d0|%d0, %1}"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "rcp")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "SF")])
+ 
+@@ -16754,6 +16825,7 @@
+   "SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH"
+   "%vsqrts<ssemodefsuffix>\t{%1, %d0|%d0, %1}"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "sqrt")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "<MODE>")
+    (set_attr "athlon_decode" "*")
+@@ -19807,6 +19879,7 @@
+   ; Since we don't have the proper number of operands for an alu insn,
+   ; fill in all the blanks.
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "memory" "none")
+    (set_attr "imm_disp" "false")
+@@ -19822,6 +19895,7 @@
+   ""
+   "sbb{q}\t%0, %0"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "memory" "none")
+    (set_attr "imm_disp" "false")
+@@ -19865,6 +19939,7 @@
+   ; Since we don't have the proper number of operands for an alu insn,
+   ; fill in all the blanks.
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "memory" "none")
+    (set_attr "imm_disp" "false")
+@@ -19880,6 +19955,7 @@
+   ""
+   "sbb{l}\t%0, %0"
+   [(set_attr "type" "alu")
++   (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "memory" "none")
+    (set_attr "imm_disp" "false")
+@@ -20212,7 +20288,8 @@
+     }
+ }
+   [(set (attr "type")
+-	(cond [(eq_attr "alternative" "0")
++	(cond [(and (eq_attr "alternative" "0") 
++	            (eq (symbol_ref "TARGET_OPT_AGU") (const_int 0)))
+ 		 (const_string "alu")
+ 	       (match_operand:SI 2 "const0_operand" "")
+ 		 (const_string "imov")
+@@ -20255,7 +20332,8 @@
+     }
+ }
+   [(set (attr "type")
+-	(cond [(eq_attr "alternative" "0")
++	(cond [(and (eq_attr "alternative" "0")
++	            (eq (symbol_ref "TARGET_OPT_AGU") (const_int 0)))
+ 		 (const_string "alu")
+ 	       (match_operand:DI 2 "const0_operand" "")
+ 		 (const_string "imov")
+@@ -21743,6 +21821,7 @@
+   return patterns[locality];
+ }
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "prefetch")
+    (set_attr "memory" "none")])
+ 
+ (define_insn "*prefetch_sse_rex"
+@@ -21761,6 +21840,7 @@
+   return patterns[locality];
+ }
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "prefetch")
+    (set_attr "memory" "none")])
+ 
+ (define_insn "*prefetch_3dnow"
+--- a/src/gcc/config/i386/i386.opt
++++ b/src/gcc/config/i386/i386.opt
+@@ -228,6 +228,10 @@
+ Target RejectNegative Joined Var(ix86_tune_string)
+ Schedule code for given CPU
+ 
++mabi=
++Target RejectNegative Joined Var(ix86_abi_string)
++Generate code that conforms to the given ABI
++
+ mveclibabi=
+ Target RejectNegative Joined Var(ix86_veclibabi_string)
+ Vector library ABI to use
+@@ -335,6 +339,10 @@
+ Target Report Mask(ISA_SAHF) Var(ix86_isa_flags) VarExists Save
+ Support code generation of sahf instruction in 64bit x86-64 code.
+ 
++mmovbe
++Target Report Mask(ISA_MOVBE) Var(ix86_isa_flags) VarExists Save
++Support code generation of movbe instruction.
++
+ maes
+ Target Report Mask(ISA_AES) Var(ix86_isa_flags) VarExists Save
+ Support AES built-in functions and code generation
+--- a/src/gcc/config/i386/mingw32.h
++++ b/src/gcc/config/i386/mingw32.h
+@@ -38,7 +38,7 @@
+       builtin_define_std ("WINNT");				\
+       builtin_define_with_int_value ("_INTEGRAL_MAX_BITS",	\
+ 				     TYPE_PRECISION (intmax_type_node));\
+-      if (TARGET_64BIT && DEFAULT_ABI == MS_ABI)			\
++      if (TARGET_64BIT && ix86_abi == MS_ABI)			\
+ 	{							\
+ 	  builtin_define ("__MINGW64__");			\
+ 	  builtin_define_std ("WIN64");				\
+--- a/src/gcc/config/i386/sse.md
++++ b/src/gcc/config/i386/sse.md
+@@ -342,6 +342,7 @@
+    && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "vmovup<avxmodesuffixf2c>\t{%1, %0|%0, %1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "movu" "1")
+    (set_attr "prefix" "vex")
+    (set_attr "mode" "<MODE>")])
+ 
+@@ -367,6 +368,7 @@
+    && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "movup<ssemodesuffixf2c>\t{%1, %0|%0, %1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "movu" "1")
+    (set_attr "mode" "<MODE>")])
+ 
+ (define_insn "avx_movdqu<avxmodesuffix>"
+@@ -377,6 +379,7 @@
+   "TARGET_AVX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "vmovdqu\t{%1, %0|%0, %1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "movu" "1")
+    (set_attr "prefix" "vex")
+    (set_attr "mode" "<avxvecmode>")])
+ 
+@@ -387,6 +390,7 @@
+   "TARGET_SSE2 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "movdqu\t{%1, %0|%0, %1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "movu" "1")
+    (set_attr "prefix_data16" "1")
+    (set_attr "mode" "TI")])
+ 
+@@ -428,7 +432,7 @@
+ 		     UNSPEC_MOVNT))]
+   "TARGET_SSE2"
+   "movntdq\t{%1, %0|%0, %1}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
+    (set_attr "prefix_data16" "1")
+    (set_attr "mode" "TI")])
+ 
+@@ -438,7 +442,7 @@
+ 		   UNSPEC_MOVNT))]
+   "TARGET_SSE2"
+   "movnti\t{%1, %0|%0, %1}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
+    (set_attr "mode" "V2DF")])
+ 
+ (define_insn "avx_lddqu<avxmodesuffix>"
+@@ -449,6 +453,7 @@
+   "TARGET_AVX"
+   "vlddqu\t{%1, %0|%0, %1}"
+   [(set_attr "type" "ssecvt")
++   (set_attr "movu" "1")
+    (set_attr "prefix" "vex")
+    (set_attr "mode" "<avxvecmode>")])
+ 
+@@ -458,7 +463,8 @@
+ 		      UNSPEC_LDDQU))]
+   "TARGET_SSE3"
+   "lddqu\t{%1, %0|%0, %1}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
++   (set_attr "movu" "1")
+    (set_attr "prefix_rep" "1")
+    (set_attr "mode" "TI")])
+ 
+@@ -765,6 +771,7 @@
+   "TARGET_SSE"
+   "%vrcpps\t{%1, %0|%0, %1}"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "rcp")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "V4SF")])
+ 
+@@ -791,6 +798,7 @@
+   "TARGET_SSE"
+   "rcpss\t{%1, %0|%0, %1}"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "rcp")
+    (set_attr "mode" "SF")])
+ 
+ (define_expand "sqrtv8sf2"
+@@ -836,6 +844,7 @@
+   "TARGET_SSE"
+   "%vsqrtps\t{%1, %0|%0, %1}"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "sqrt")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "V4SF")])
+ 
+@@ -880,6 +889,7 @@
+   "SSE_VEC_FLOAT_MODE_P (<MODE>mode)"
+   "sqrts<ssemodesuffixf2c>\t{%1, %0|%0, %1}"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "sqrt")
+    (set_attr "mode" "<ssescalarmode>")])
+ 
+ (define_expand "rsqrtv8sf2"
+@@ -1043,7 +1053,7 @@
+ 	 (const_int 1)))]
+   "SSE_VEC_FLOAT_MODE_P (<MODE>mode)"
+   "<maxminfprefix>s<ssemodesuffixf2c>\t{%2, %0|%0, %2}"
+-  [(set_attr "type" "sse")
++  [(set_attr "type" "sseadd")
+    (set_attr "mode" "<ssescalarmode>")])
+ 
+ ;; These versions of the min/max patterns implement exactly the operations
+@@ -1179,6 +1189,7 @@
+   "TARGET_SSE3"
+   "addsubpd\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "mode" "V2DF")])
+ 
+ (define_insn "avx_h<plusminus_insn>v4df3"
+@@ -1302,6 +1313,7 @@
+   "TARGET_SSE3"
+   "h<plusminus_mnemonic>ps\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_rep" "1")
+    (set_attr "mode" "V4SF")])
+ 
+@@ -5069,6 +5081,7 @@
+   "TARGET_SSE2 && ix86_binary_operator_ok (MULT, V8HImode, operands)"
+   "pmaddwd\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "simul")
+    (set_attr "prefix_data16" "1")
+    (set_attr "mode" "TI")])
+ 
+@@ -7035,6 +7048,7 @@
+    movq\t{%H1, %0|%0, %H1}
+    mov{q}\t{%H1, %0|%0, %H1}"
+   [(set_attr "type" "ssemov,sseishft,ssemov,imov")
++   (set_attr "atom_unit" "*,sishuf,*,*")
+    (set_attr "memory" "*,none,*,*")
+    (set_attr "mode" "V2SF,TI,TI,DI")])
+ 
+@@ -7067,6 +7081,7 @@
+    psrldq\t{$8, %0|%0, 8}
+    movq\t{%H1, %0|%0, %H1}"
+   [(set_attr "type" "ssemov,sseishft,ssemov")
++   (set_attr "atom_unit" "*,sishuf,*")
+    (set_attr "memory" "*,none,*")
+    (set_attr "mode" "V2SF,TI,TI")])
+ 
+@@ -7624,6 +7639,7 @@
+   "TARGET_SSE2"
+   "psadbw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "simul")
+    (set_attr "prefix_data16" "1")
+    (set_attr "mode" "TI")])
+ 
+@@ -7645,7 +7661,7 @@
+ 	  UNSPEC_MOVMSK))]
+   "SSE_VEC_FLOAT_MODE_P (<MODE>mode)"
+   "%vmovmskp<ssemodesuffixf2c>\t{%1, %0|%0, %1}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "<MODE>")])
+ 
+@@ -7655,7 +7671,7 @@
+ 		   UNSPEC_MOVMSK))]
+   "TARGET_SSE2"
+   "%vpmovmskb\t{%1, %0|%0, %1}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "SI")])
+@@ -7678,7 +7694,7 @@
+   "TARGET_SSE2 && !TARGET_64BIT"
+   ;; @@@ check ordering of operands in intel/nonintel syntax
+   "%vmaskmovdqu\t{%2, %1|%1, %2}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "TI")])
+@@ -7692,7 +7708,7 @@
+   "TARGET_SSE2 && TARGET_64BIT"
+   ;; @@@ check ordering of operands in intel/nonintel syntax
+   "%vmaskmovdqu\t{%2, %1|%1, %2}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "TI")])
+@@ -7703,6 +7719,7 @@
+   "TARGET_SSE"
+   "%vldmxcsr\t%0"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "mxcsr")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "memory" "load")])
+ 
+@@ -7712,6 +7729,7 @@
+   "TARGET_SSE"
+   "%vstmxcsr\t%0"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "mxcsr")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "memory" "store")])
+ 
+@@ -7730,6 +7748,7 @@
+   "TARGET_SSE || TARGET_3DNOW_A"
+   "sfence"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "fence")
+    (set_attr "memory" "unknown")])
+ 
+ (define_insn "sse2_clflush"
+@@ -7738,6 +7757,7 @@
+   "TARGET_SSE2"
+   "clflush\t%a0"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "fence")
+    (set_attr "memory" "unknown")])
+ 
+ (define_expand "sse2_mfence"
+@@ -7755,6 +7775,7 @@
+   "TARGET_64BIT || TARGET_SSE2"
+   "mfence"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "fence")
+    (set_attr "memory" "unknown")])
+ 
+ (define_expand "sse2_lfence"
+@@ -7772,6 +7793,7 @@
+   "TARGET_SSE2"
+   "lfence"
+   [(set_attr "type" "sse")
++   (set_attr "atom_sse_attr" "lfence")
+    (set_attr "memory" "unknown")])
+ 
+ (define_insn "sse3_mwait"
+@@ -7895,6 +7917,7 @@
+   "TARGET_SSSE3"
+   "phaddw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -7923,6 +7946,7 @@
+   "TARGET_SSSE3"
+   "phaddw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -7977,6 +8001,7 @@
+   "TARGET_SSSE3"
+   "phaddd\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -7997,6 +8022,7 @@
+   "TARGET_SSSE3"
+   "phaddd\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -8083,6 +8109,7 @@
+   "TARGET_SSSE3"
+   "phaddsw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -8111,6 +8138,7 @@
+   "TARGET_SSSE3"
+   "phaddsw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -8197,6 +8225,7 @@
+   "TARGET_SSSE3"
+   "phsubw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -8225,6 +8254,7 @@
+   "TARGET_SSSE3"
+   "phsubw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -8279,6 +8309,7 @@
+   "TARGET_SSSE3"
+   "phsubd\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -8299,6 +8330,7 @@
+   "TARGET_SSSE3"
+   "phsubd\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -8385,6 +8417,7 @@
+   "TARGET_SSSE3"
+   "phsubsw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -8413,6 +8446,7 @@
+   "TARGET_SSSE3"
+   "phsubsw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "complex")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -8519,6 +8553,7 @@
+   "TARGET_SSSE3"
+   "pmaddubsw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "simul")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -8557,6 +8592,7 @@
+   "TARGET_SSSE3"
+   "pmaddubsw\t{%2, %0|%0, %2}"
+   [(set_attr "type" "sseiadd")
++   (set_attr "atom_unit" "simul")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -8764,6 +8800,7 @@
+   return "palignr\t{%3, %2, %0|%0, %2, %3}";
+ }
+   [(set_attr "type" "sseishft")
++   (set_attr "atom_unit" "sishuf")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "TI")])
+@@ -8780,6 +8817,7 @@
+   return "palignr\t{%3, %2, %0|%0, %2, %3}";
+ }
+   [(set_attr "type" "sseishft")
++   (set_attr "atom_unit" "sishuf")
+    (set_attr "prefix_extra" "1")
+    (set_attr "mode" "DI")])
+ 
+@@ -8966,7 +9004,7 @@
+ 		     UNSPEC_MOVNTDQA))]
+   "TARGET_SSE4_1"
+   "%vmovntdqa\t{%1, %0|%0, %1}"
+-  [(set_attr "type" "ssecvt")
++  [(set_attr "type" "ssemov")
+    (set_attr "prefix_extra" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "TI")])
+--- a/src/gcc/config/i386/t-cs-linux
++++ b/src/gcc/config/i386/t-cs-linux
+@@ -0,0 +1,25 @@
++# Sourcery G++ IA32 GNU/Linux Configuration.
++# Copyright (C) 2007
++# Free Software Foundation, Inc.
++#
++# This file is part of GCC.
++#
++# GCC is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3, or (at your option)
++# any later version.
++# 
++# GCC is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++MULTILIB_OPTIONS = m64/m32 msgxx-glibc/mrh73/mrhel3
++MULTILIB_DIRNAMES = 64 32 sgxx-glibc rh73 rhel3
++MULTILIB_OSDIRNAMES = ../lib64 ../lib sgxx-glibc rh73 rhel3
++MULTILIB_EXCEPTIONS = m64/mrh73 m64/mrhel3
++
+--- a/src/gcc/config/i386/t-cs-linux-lite
++++ b/src/gcc/config/i386/t-cs-linux-lite
+@@ -0,0 +1,26 @@
++# Sourcery G++ Lite IA32 GNU/Linux Configuration.
++# Copyright (C) 2009
++# Free Software Foundation, Inc.
++#
++# This file is part of GCC.
++#
++# GCC is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3, or (at your option)
++# any later version.
++# 
++# GCC is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++MULTILIB_OPTIONS = m64 march=atom/march=core2
++MULTILIB_DIRNAMES = 64 atom core2
++MULTILIB_EXCEPTIONS = m64/march=atom march=core2
++MULTILIB_ALIASES = m64=m64/march?atom
++MULTILIB_OSDIRNAMES = m64=../lib64 march.atom=atom m64/march.core2=../lib64/core2
++
+--- a/src/gcc/config/i386/t-wrs-linux
++++ b/src/gcc/config/i386/t-wrs-linux
+@@ -0,0 +1,24 @@
++# Wind River GNU/Linux Configuration.
++# Copyright (C) 2009
++# Free Software Foundation, Inc.
++#
++# This file is part of GCC.
++#
++# GCC is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3, or (at your option)
++# any later version.
++# 
++# GCC is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++MULTILIB_OPTIONS = m64/m32 msystem-glibc
++MULTILIB_DIRNAMES = 64 32 system-glibc
++MULTILIB_OSDIRNAMES = ../lib64 ../lib system-glibc
++MULTILIB_EXCEPTIONS = m64/msystem-glibc
+--- a/src/gcc/config/i386/winnt.c
++++ b/src/gcc/config/i386/winnt.c
+@@ -499,8 +499,11 @@
+ {
+   HOST_WIDE_INT rounded;
+ 
+-  /* Compute as in assemble_noswitch_variable, since we don't actually
+-     support aligned common.  */
++  /* Compute as in assemble_noswitch_variable, since we don't have
++     support for aligned common on older binutils.  We must also
++     avoid emitting a common symbol of size zero, as this is the
++     overloaded representation that indicates an undefined external
++     symbol in the PE object file format.  */
+   rounded = size ? size : 1;
+   rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1;
+   rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
+@@ -510,9 +513,13 @@
+ 
+   fprintf (stream, "\t.comm\t");
+   assemble_name (stream, name);
+-  fprintf (stream, ", " HOST_WIDE_INT_PRINT_DEC "\t" ASM_COMMENT_START
+-	   " " HOST_WIDE_INT_PRINT_DEC "\n",
+-	   rounded, size);
++  if (use_pe_aligned_common)
++    fprintf (stream, ", " HOST_WIDE_INT_PRINT_DEC ", %d\n",
++	   size ? size : (HOST_WIDE_INT) 1,
++	   exact_log2 (align) - exact_log2 (CHAR_BIT));
++  else
++    fprintf (stream, ", " HOST_WIDE_INT_PRINT_DEC "\t" ASM_COMMENT_START
++	   " " HOST_WIDE_INT_PRINT_DEC "\n", rounded, size);
+ }
+ 
+ /* The Microsoft linker requires that every function be marked as
+--- a/src/gcc/config/i386/wrs-linux.h
++++ b/src/gcc/config/i386/wrs-linux.h
+@@ -0,0 +1,33 @@
++/* Wind River IA32 GNU/Linux Configuration.
++   Copyright (C) 2009
++   Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 3, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++#undef SYSROOT_SUFFIX_SPEC
++#define SYSROOT_SUFFIX_SPEC			\
++  "%{msystem-glibc:/system-glibc}"
++
++#undef SYSROOT_HEADERS_SUFFIX_SPEC
++#define SYSROOT_HEADERS_SUFFIX_SPEC SYSROOT_SUFFIX_SPEC
++
++/* See mips/wrs-linux.h for details on this use of
++   STARTFILE_PREFIX_SPEC.  */
++#undef STARTFILE_PREFIX_SPEC
++#define STARTFILE_PREFIX_SPEC				\
++  "%{m64: /usr/local/lib64/ /lib64/ /usr/lib64/}	\
++   %{!m64: /usr/local/lib/ /lib/ /usr/lib/}"
+--- a/src/gcc/config/i386/wrs-linux.opt
++++ b/src/gcc/config/i386/wrs-linux.opt
+@@ -0,0 +1,5 @@
++; Additional options for Wind River Linux Sourcery G++.
++
++msystem-glibc
++Target
++Use system version of GLIBC
+--- a/src/gcc/config/ia64/ia64.h
++++ b/src/gcc/config/ia64/ia64.h
+@@ -1436,7 +1436,7 @@
+ /* Define this macro if the register defined by `PIC_OFFSET_TABLE_REGNUM' is
+    clobbered by calls.  */
+ 
+-#define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
++#define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 1
+ 
+ 
+ /* The Overall Framework of an Assembler File.  */
+--- a/src/gcc/config/m68k/constraints.md
++++ b/src/gcc/config/m68k/constraints.md
+@@ -124,6 +124,11 @@
+   (and (match_code "const_int")
+        (match_test "ival < -0x8000 || ival > 0x7FFF")))
+ 
++(define_constraint "Cu"
++  "16-bit offset for wrapped symbols"
++  (and (match_code "const")
++       (match_test "m68k_unwrap_symbol (op, false) != op")))
++
+ (define_constraint "CQ"
+   "Integers valid for mvq."
+   (and (match_code "const_int")
+--- a/src/gcc/config/m68k/lb1sf68.asm
++++ b/src/gcc/config/m68k/lb1sf68.asm
+@@ -163,6 +163,8 @@
+ #if defined (__mcoldfire__) && !defined (__mcfisab__) && !defined (__mcfisac__)
+ 	lea	\addr-.-8,a0
+ 	jsr	pc@(a0)
++#elif defined (__mcfisab__) || defined (__mcfisac__)
++	bsr.l	\addr
+ #else
+ 	bsr	\addr
+ #endif
+@@ -202,6 +204,8 @@
+ #if defined (__mcoldfire__) && !defined (__mcfisab__) && !defined (__mcfisac__)
+ 	lea	\addr-.-8,a0
+ 	jsr	pc@(a0)
++#elif defined (__mcfisab__) || defined (__mcfisac__)
++	bsr.l	\addr
+ #else
+ 	bsr	\addr
+ #endif
+--- a/src/gcc/config/m68k/linux-unwind.h
++++ b/src/gcc/config/m68k/linux-unwind.h
+@@ -77,9 +77,15 @@
+       fs->regs.reg[9].how = REG_SAVED_OFFSET;
+       fs->regs.reg[9].loc.offset = (long) &sc->sc_a1 - cfa;
+ 
++#ifdef __uClinux__
++      fs->regs.reg[13].how = REG_SAVED_OFFSET;
++      fs->regs.reg[13].loc.offset = (long) &sc->sc_a5 - cfa;
++#endif
++
+       fs->regs.reg[24].how = REG_SAVED_OFFSET;
+       fs->regs.reg[24].loc.offset = (long) &sc->sc_pc - cfa;
+ 
++#if defined __mcffpu__ && !defined __uClinux__
+       if (*(int *) sc->sc_fpstate)
+ 	{
+ 	  int *fpregs = (int *) sc->sc_fpregs;
+@@ -89,11 +95,19 @@
+ 	  fs->regs.reg[17].how = REG_SAVED_OFFSET;
+ 	  fs->regs.reg[17].loc.offset = (long) &fpregs[M68K_FP_SIZE/4] - cfa;
+ 	}
++#elif defined __mcffpu__
++# error Implement this when uClinux kernel is ported to an FPU architecture
++#endif
+     }
+ #ifdef __mcoldfire__
+   /* move.l #__NR_rt_sigreturn,%d0; trap #0 */
+-  else if (pc[0] == 0x203c && pc[1] == 0x0000 &&
+-	   pc[2] == 0x00ad && pc[3] == 0x4e40)
++  else if ((pc[0] == 0x203c && pc[1] == 0x0000 &&
++	    pc[2] == 0x00ad && pc[3] == 0x4e40) ||
++	   /* Don't ask me why, this is just what some kernels do:
++	      moveq #-__NR_rt_sigreturn,%d0; andil 0xff,%d0; trap #0;
++	      Sigh...  */
++	   (pc[0] == 0x70ad && pc[1] == 0x0280 && pc[2] == 0x0000 &&
++	    pc[3] == 0x00ff && pc[4] == 0x4e40 && pc[5] == 0x0000))
+ #else
+   /* moveq #~__NR_rt_sigreturn,%d0; not.b %d0; trap #0 */
+   else if (pc[0] == 0x7052 && pc[1] == 0x4600 && pc[2] == 0x4e40)
+--- a/src/gcc/config/m68k/linux.h
++++ b/src/gcc/config/m68k/linux.h
+@@ -149,11 +149,10 @@
+ 
+ /* Output assembler code to FILE to increment profiler label # LABELNO
+    for profiling a function entry.  */
+-
++#define NO_PROFILE_COUNTERS 1
+ #undef FUNCTION_PROFILER
+ #define FUNCTION_PROFILER(FILE, LABELNO) \
+ {									\
+-  asm_fprintf (FILE, "\tlea (%LLP%d,%Rpc),%Ra1\n", (LABELNO));		\
+   if (flag_pic)								\
+     fprintf (FILE, "\tbsr.l _mcount@PLTPC\n");				\
+   else									\
+--- a/src/gcc/config/m68k/m68k-devices.def
++++ b/src/gcc/config/m68k/m68k-devices.def
+@@ -72,8 +72,8 @@
+ /* 680x0 series processors.  */
+ M68K_DEVICE ("68000", m68000,   "68000", "68000", 68000,    isa_00,    0)
+ M68K_DEVICE ("68010", m68010,   "68010", "68000", 68010,    isa_10,    0)
+-M68K_DEVICE ("68020", m68020,   "68020", "68020", 68020,    isa_20,    FL_MMU)
+-M68K_DEVICE ("68030", m68030,   "68030", "68020", 68030,    isa_20,    FL_MMU)
++M68K_DEVICE ("68020", m68020,   "68020", "68020", 68020,    isa_20,    FL_MMU | FL_UCLINUX)
++M68K_DEVICE ("68030", m68030,   "68030", "68020", 68030,    isa_20,    FL_MMU | FL_UCLINUX)
+ M68K_DEVICE ("68040", m68040,   "68040", "68040", 68040,    isa_40,    FL_MMU)
+ M68K_DEVICE ("68060", m68060,   "68060", "68060", 68060,    isa_40,    FL_MMU)
+ M68K_DEVICE ("68302", m68302,   "68302", "68000", 68000,    isa_00,    FL_MMU)
+@@ -81,7 +81,13 @@
+ M68K_DEVICE ("cpu32", cpu32,    "cpu32", "cpu32", cpu32,    isa_cpu32, FL_MMU)
+ 
+ /* ColdFire CFV1 processor.  */
+-M68K_DEVICE ("51qe",  mcf51qe,  "51qe",  "51qe",  cfv1,     isa_c,     FL_CF_USP)
++/* For historical reasons, the 51 multilib is named 51qe.  */
++M68K_DEVICE ("51",    mcf51,    "51",    "51qe",  cfv1,     isa_c,     FL_CF_USP)
++M68K_DEVICE ("51ac",  mcf51ac,  "51",    "51qe",  cfv1,     isa_c,     FL_CF_USP)
++M68K_DEVICE ("51cn",  mcf51cn,  "51",    "51qe",  cfv1,     isa_c,     FL_CF_USP)
++M68K_DEVICE ("51em",  mcf51em,  "51",    "51qe",  cfv1,     isa_c,     FL_CF_USP | FL_CF_MAC)
++M68K_DEVICE ("51jm",  mcf51jm,  "51",    "51qe",  cfv1,     isa_c,     FL_CF_USP)
++M68K_DEVICE ("51qe",  mcf51qe,  "51",    "51qe",  cfv1,     isa_c,     FL_CF_USP)
+ 
+ /* ColdFire CFV2 processors.  */
+ M68K_DEVICE ("5202",  mcf5202,  "5206",  "5206",  cfv2,     isa_a,     0)
+@@ -97,6 +103,7 @@
+ M68K_DEVICE ("5213",  mcf5213,  "5213",  "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_MAC)
+ M68K_DEVICE ("5214",  mcf5214,  "5216",  "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
+ M68K_DEVICE ("5216",  mcf5216,  "5216",  "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
++M68K_DEVICE ("5221x", mcf5221x, "5221x", "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_MAC)
+ M68K_DEVICE ("52221", mcf52221, "52223", "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_MAC)
+ M68K_DEVICE ("52223", mcf52223, "52223", "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_MAC)
+ M68K_DEVICE ("52230", mcf52230, "52235", "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
+@@ -107,6 +114,14 @@
+ M68K_DEVICE ("52235", mcf52235, "52235", "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
+ M68K_DEVICE ("5224",  mcf5224,  "5225",  "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_MAC)
+ M68K_DEVICE ("5225",  mcf5225,  "5225",  "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_MAC)
++M68K_DEVICE ("52252", mcf52252, "52259", "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
++M68K_DEVICE ("52254", mcf52254, "52259", "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
++M68K_DEVICE ("52255", mcf52255, "52259", "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
++M68K_DEVICE ("52256", mcf52256, "52259", "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
++M68K_DEVICE ("52258", mcf52258, "52259", "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
++M68K_DEVICE ("52259", mcf52259, "52259", "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
++M68K_DEVICE ("52274", mcf52274, "52277", "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
++M68K_DEVICE ("52277", mcf52277, "52277", "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
+ M68K_DEVICE ("5232",  mcf5232,  "5235",  "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
+ M68K_DEVICE ("5233",  mcf5233,  "5235",  "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
+ M68K_DEVICE ("5234",  mcf5234,  "5235",  "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
+@@ -126,6 +141,13 @@
+ M68K_DEVICE ("528x",  mcf528x,  "5282",  "5208",  cfv2,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
+ 
+ /* CFV3 processors.  */
++M68K_DEVICE ("53011", mcf53011, "53017", "5329",  cfv3,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
++M68K_DEVICE ("53012", mcf53012, "53017", "5329",  cfv3,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
++M68K_DEVICE ("53013", mcf53013, "53017", "5329",  cfv3,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
++M68K_DEVICE ("53014", mcf53014, "53017", "5329",  cfv3,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
++M68K_DEVICE ("53015", mcf53015, "53017", "5329",  cfv3,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
++M68K_DEVICE ("53016", mcf53016, "53017", "5329",  cfv3,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
++M68K_DEVICE ("53017", mcf53017, "53017", "5329",  cfv3,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
+ M68K_DEVICE ("5307",  mcf5307,  "5307",  "5307",  cfv3,     isa_a,     FL_CF_HWDIV | FL_CF_MAC)
+ M68K_DEVICE ("5327",  mcf5327,  "5329",  "5329",  cfv3,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
+ M68K_DEVICE ("5328",  mcf5328,  "5329",  "5329",  cfv3,     isa_aplus, FL_CF_HWDIV | FL_CF_EMAC)
+@@ -137,12 +159,17 @@
+ 
+ /* CFV4/CFV4e processors.  */
+ M68K_DEVICE ("5407",  mcf5407,  "5407",  "5407",  cfv4,     isa_b,     FL_CF_MAC)
+-M68K_DEVICE ("54450", mcf54450, "54455", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU)
+-M68K_DEVICE ("54451", mcf54451, "54455", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU)
+-M68K_DEVICE ("54452", mcf54452, "54455", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU)
+-M68K_DEVICE ("54453", mcf54453, "54455", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU)
+-M68K_DEVICE ("54454", mcf54454, "54455", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU)
+-M68K_DEVICE ("54455", mcf54455, "54455", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU)
++M68K_DEVICE ("54410", mcf54410, "54418", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU | FL_UCLINUX)
++M68K_DEVICE ("54415", mcf54415, "54418", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU | FL_UCLINUX)
++M68K_DEVICE ("54416", mcf54416, "54418", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU | FL_UCLINUX)
++M68K_DEVICE ("54417", mcf54417, "54418", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU | FL_UCLINUX)
++M68K_DEVICE ("54418", mcf54418, "54418", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU | FL_UCLINUX)
++M68K_DEVICE ("54450", mcf54450, "54455", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU | FL_UCLINUX)
++M68K_DEVICE ("54451", mcf54451, "54455", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU | FL_UCLINUX)
++M68K_DEVICE ("54452", mcf54452, "54455", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU | FL_UCLINUX)
++M68K_DEVICE ("54453", mcf54453, "54455", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU | FL_UCLINUX)
++M68K_DEVICE ("54454", mcf54454, "54455", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU | FL_UCLINUX)
++M68K_DEVICE ("54455", mcf54455, "54455", "54455", cfv4,     isa_c,     FL_CF_HWDIV | FL_CF_USP | FL_CF_EMAC | FL_MMU | FL_UCLINUX)
+ M68K_DEVICE ("5470",  mcf5470,  "5475",  "5475",  cfv4e,    isa_b,     FL_CF_USP | FL_CF_EMAC | FL_CF_FPU | FL_MMU)
+ M68K_DEVICE ("5471",  mcf5471,  "5475",  "5475",  cfv4e,    isa_b,     FL_CF_USP | FL_CF_EMAC | FL_CF_FPU | FL_MMU)
+ M68K_DEVICE ("5472",  mcf5472,  "5475",  "5475",  cfv4e,    isa_b,     FL_CF_USP | FL_CF_EMAC | FL_CF_FPU | FL_MMU)
+--- a/src/gcc/config/m68k/m68k-protos.h
++++ b/src/gcc/config/m68k/m68k-protos.h
+@@ -54,19 +54,27 @@
+ extern bool m68k_output_addr_const_extra (FILE *, rtx);
+ extern void notice_update_cc (rtx, rtx);
+ extern bool m68k_legitimate_base_reg_p (rtx, bool);
+-extern bool m68k_legitimate_index_reg_p (rtx, bool);
++extern bool m68k_legitimate_index_reg_p (enum machine_mode, rtx, bool);
+ extern bool m68k_illegitimate_symbolic_constant_p (rtx);
+ extern bool m68k_legitimate_address_p (enum machine_mode, rtx, bool);
+ extern bool m68k_matches_q_p (rtx);
+ extern bool m68k_matches_u_p (rtx);
+ extern rtx legitimize_pic_address (rtx, enum machine_mode, rtx);
++extern rtx m68k_legitimize_tls_address (rtx);
++extern bool m68k_tls_reference_p (rtx, bool);
++extern rtx m68k_legitimize_address (rtx, rtx, enum machine_mode);
+ extern int valid_dbcc_comparison_p_2 (rtx, enum machine_mode);
+ extern rtx m68k_libcall_value (enum machine_mode);
+ extern rtx m68k_function_value (const_tree, const_tree);
+ extern int emit_move_sequence (rtx *, enum machine_mode, rtx);
+ extern bool m68k_movem_pattern_p (rtx, rtx, HOST_WIDE_INT, bool);
+ extern const char *m68k_output_movem (rtx *, rtx, HOST_WIDE_INT, bool);
++extern void m68k_final_prescan_insn (rtx, rtx *, int);
+ 
++/* Functions from m68k.c used in constraints.md.  */
++extern rtx m68k_unwrap_symbol (rtx, bool);
++
++/* Functions from m68k.c used in genattrtab.  */
+ #ifdef HAVE_ATTR_cpu
+ extern enum attr_cpu m68k_sched_cpu;
+ extern enum attr_mac m68k_sched_mac;
+--- a/src/gcc/config/m68k/m68k.c
++++ b/src/gcc/config/m68k/m68k.c
+@@ -46,6 +46,7 @@
+ /* ??? Need to add a dependency between m68k.o and sched-int.h.  */
+ #include "sched-int.h"
+ #include "insn-codes.h"
++#include "ggc.h"
+ 
+ enum reg_class regno_reg_class[] =
+ {
+@@ -146,10 +147,12 @@
+ static void m68k_compute_frame_layout (void);
+ static bool m68k_save_reg (unsigned int regno, bool interrupt_handler);
+ static bool m68k_ok_for_sibcall_p (tree, tree);
++static bool m68k_tls_symbol_p (rtx);
+ static bool m68k_rtx_costs (rtx, int, int, int *, bool);
+ #if M68K_HONOR_TARGET_STRICT_ALIGNMENT
+ static bool m68k_return_in_memory (const_tree, const_tree);
+ #endif
++static void m68k_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
+ 
+ 
+ /* Specify the identification number of the library being built */
+@@ -252,6 +255,14 @@
+ #define TARGET_RETURN_IN_MEMORY m68k_return_in_memory
+ #endif
+ 
++#ifdef HAVE_AS_TLS
++#undef TARGET_HAVE_TLS
++#define TARGET_HAVE_TLS (true)
++
++#undef TARGET_ASM_OUTPUT_DWARF_DTPREL
++#define TARGET_ASM_OUTPUT_DWARF_DTPREL m68k_output_dwarf_dtprel
++#endif
++
+ static const struct attribute_spec m68k_attribute_table[] =
+ {
+   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
+@@ -1150,8 +1161,7 @@
+ 			    current_frame.reg_mask, true, true));
+     }
+ 
+-  if (flag_pic
+-      && !TARGET_SEP_DATA
++  if (!TARGET_SEP_DATA
+       && crtl->uses_pic_offset_table)
+     insn = emit_insn (gen_load_got (pic_offset_table_rtx));
+ }
+@@ -1374,6 +1384,30 @@
+   return cc_status.flags & CC_IN_68881;
+ }
+ 
++/* Return true if PARALLEL contains register REGNO.  */
++static bool
++m68k_reg_present_p (const_rtx parallel, unsigned int regno)
++{
++  int i;
++
++  if (REG_P (parallel) && REGNO (parallel) == regno)
++    return true;
++
++  if (GET_CODE (parallel) != PARALLEL)
++    return false;
++
++  for (i = 0; i < XVECLEN (parallel, 0); ++i)
++    {
++      const_rtx x;
++
++      x = XEXP (XVECEXP (parallel, 0, i), 0);
++      if (REG_P (x) && REGNO (x) == regno)
++	return true;
++    }
++
++  return false;
++}
++
+ /* Implement TARGET_FUNCTION_OK_FOR_SIBCALL_P.  */
+ 
+ static bool
+@@ -1386,6 +1420,26 @@
+   if (CALL_EXPR_STATIC_CHAIN (exp))
+     return false;
+ 
++  if (!VOID_TYPE_P (TREE_TYPE (DECL_RESULT (cfun->decl))))
++    {
++      /* Check that the return value locations are the same.  For
++	 example that we aren't returning a value from the sibling in
++	 a D0 register but then need to transfer it to a A0 register.  */
++      rtx cfun_value;
++      rtx call_value;
++
++      cfun_value = FUNCTION_VALUE (TREE_TYPE (DECL_RESULT (cfun->decl)),
++				   cfun->decl);
++      call_value = FUNCTION_VALUE (TREE_TYPE (exp), decl);
++
++      /* Check that the values are equal or that the result the callee
++	 function returns is superset of what the current function returns.  */
++      if (!(rtx_equal_p (cfun_value, call_value)
++	    || (REG_P (cfun_value)
++		&& m68k_reg_present_p (call_value, REGNO (cfun_value)))))
++	return false;
++    }
++
+   kind = m68k_get_function_kind (current_function_decl);
+   if (kind == m68k_fk_normal_function)
+     /* We can always sibcall from a normal function, because it's
+@@ -1425,6 +1479,86 @@
+   return replace_equiv_address (x, gen_rtx_REG (Pmode, STATIC_CHAIN_REGNUM));
+ }
+ 
++/* Convert X to a legitimate address and return it if successful.  Otherwise
++   return X.
++
++   For the 68000, we handle X+REG by loading X into a register R and
++   using R+REG.  R will go in an address reg and indexing will be used.
++   However, if REG is a broken-out memory address or multiplication,
++   nothing needs to be done because REG can certainly go in an address reg.  */
++
++rtx
++m68k_legitimize_address (rtx x, rtx oldx, enum machine_mode mode)
++{
++  if (m68k_tls_symbol_p (x))
++    return m68k_legitimize_tls_address (x);
++
++  if (GET_CODE (x) == PLUS)
++    {
++      int ch = (x) != (oldx);
++      int copied = 0;
++
++#define COPY_ONCE(Y) if (!copied) { Y = copy_rtx (Y); copied = ch = 1; }
++
++      if (GET_CODE (XEXP (x, 0)) == MULT)
++	{
++	  COPY_ONCE (x);
++	  XEXP (x, 0) = force_operand (XEXP (x, 0), 0);
++	}
++      if (GET_CODE (XEXP (x, 1)) == MULT)
++	{
++	  COPY_ONCE (x);
++	  XEXP (x, 1) = force_operand (XEXP (x, 1), 0);
++	}
++      if (ch)
++	{
++          if (GET_CODE (XEXP (x, 1)) == REG
++	      && GET_CODE (XEXP (x, 0)) == REG)
++	    {
++	      if (TARGET_COLDFIRE_FPU && GET_MODE_CLASS (mode) == MODE_FLOAT)
++	        {
++	          COPY_ONCE (x);
++	          x = force_operand (x, 0);
++	        }
++	      return x;
++	    }
++	  if (memory_address_p (mode, x))
++	    return x;
++	}
++      if (GET_CODE (XEXP (x, 0)) == REG
++	  || (GET_CODE (XEXP (x, 0)) == SIGN_EXTEND
++	      && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG
++	      && GET_MODE (XEXP (XEXP (x, 0), 0)) == HImode))
++	{
++	  rtx temp = gen_reg_rtx (Pmode);
++	  rtx val = force_operand (XEXP (x, 1), 0);
++	  emit_move_insn (temp, val);
++	  COPY_ONCE (x);
++	  XEXP (x, 1) = temp;
++	  if (TARGET_COLDFIRE_FPU && GET_MODE_CLASS (mode) == MODE_FLOAT
++	      && GET_CODE (XEXP (x, 0)) == REG)
++	    x = force_operand (x, 0);
++	}
++      else if (GET_CODE (XEXP (x, 1)) == REG
++	       || (GET_CODE (XEXP (x, 1)) == SIGN_EXTEND
++		   && GET_CODE (XEXP (XEXP (x, 1), 0)) == REG
++		   && GET_MODE (XEXP (XEXP (x, 1), 0)) == HImode))
++	{
++	  rtx temp = gen_reg_rtx (Pmode);
++	  rtx val = force_operand (XEXP (x, 0), 0);
++	  emit_move_insn (temp, val);
++	  COPY_ONCE (x);
++	  XEXP (x, 0) = temp;
++	  if (TARGET_COLDFIRE_FPU && GET_MODE_CLASS (mode) == MODE_FLOAT
++	      && GET_CODE (XEXP (x, 1)) == REG)
++	    x = force_operand (x, 0);
++	}
++    }
++
++  return x;
++}
++
++
+ /* Output a dbCC; jCC sequence.  Note we do not handle the 
+    floating point version of this sequence (Fdbcc).  We also
+    do not handle alternative conditions when CC_NO_OVERFLOW is
+@@ -1713,15 +1847,16 @@
+    whether we need strict checking.  */
+ 
+ bool
+-m68k_legitimate_index_reg_p (rtx x, bool strict_p)
++m68k_legitimate_index_reg_p (enum machine_mode mode, rtx x, bool strict_p)
+ {
+   if (!strict_p && GET_CODE (x) == SUBREG)
+     x = SUBREG_REG (x);
+ 
+   return (REG_P (x)
+ 	  && (strict_p
+-	      ? REGNO_OK_FOR_INDEX_P (REGNO (x))
+-	      : REGNO_OK_FOR_INDEX_NONSTRICT_P (REGNO (x))));
++	      ? REGNO_MODE_OK_FOR_INDEX_P (REGNO (x), mode)
++	      : (MODE_OK_FOR_INDEX_P (mode)
++		 && REGNO_OK_FOR_INDEX_NONSTRICT_P (REGNO (x)))));
+ }
+ 
+ /* Return true if X is a legitimate index expression for a (d8,An,Xn) or
+@@ -1729,7 +1864,8 @@
+    ADDRESS if so.  STRICT_P says whether we need strict checking.  */
+ 
+ static bool
+-m68k_decompose_index (rtx x, bool strict_p, struct m68k_address *address)
++m68k_decompose_index (enum machine_mode mode, rtx x, bool strict_p,
++		      struct m68k_address *address)
+ {
+   int scale;
+ 
+@@ -1753,7 +1889,7 @@
+       && GET_MODE (XEXP (x, 0)) == HImode)
+     x = XEXP (x, 0);
+ 
+-  if (m68k_legitimate_index_reg_p (x, strict_p))
++  if (m68k_legitimate_index_reg_p (mode, x, strict_p))
+     {
+       address->scale = scale;
+       address->index = x;
+@@ -1777,7 +1913,7 @@
+ 	  && !offset_within_block_p (base, INTVAL (offset)))
+ 	return true;
+     }
+-  return false;
++  return m68k_tls_reference_p (x, false);
+ }
+ 
+ /* Return true if X is a legitimate constant address that can reach
+@@ -1805,7 +1941,7 @@
+ 	return false;
+     }
+ 
+-  return true;
++  return !m68k_tls_reference_p (x, false);
+ }
+ 
+ /* Return true if X is a LABEL_REF for a jump table.  Assume that unplaced
+@@ -1872,15 +2008,17 @@
+   /* Check for GOT loads.  These are (bd,An,Xn) addresses if
+      TARGET_68020 && flag_pic == 2, otherwise they are (d16,An)
+      addresses.  */
+-  if (flag_pic
+-      && GET_CODE (x) == PLUS
+-      && XEXP (x, 0) == pic_offset_table_rtx
+-      && (GET_CODE (XEXP (x, 1)) == SYMBOL_REF
+-	  || GET_CODE (XEXP (x, 1)) == LABEL_REF))
++  if (GET_CODE (x) == PLUS
++      && XEXP (x, 0) == pic_offset_table_rtx)
+     {
+-      address->base = XEXP (x, 0);
+-      address->offset = XEXP (x, 1);
+-      return true;
++      /* As we are processing a PLUS, do not unwrap RELOC32 symbols --
++	 they are invalid in this context.  */
++      if (m68k_unwrap_symbol (XEXP (x, 1), false) != XEXP (x, 1))
++	{
++	  address->base = XEXP (x, 0);
++	  address->offset = XEXP (x, 1);
++	  return true;
++	}
+     }
+ 
+   /* The ColdFire FPU only accepts addressing modes 2-5.  */
+@@ -1905,7 +2043,7 @@
+      accesses to unplaced labels in other cases.  */
+   if (GET_CODE (x) == PLUS
+       && m68k_jump_table_ref_p (XEXP (x, 1))
+-      && m68k_decompose_index (XEXP (x, 0), strict_p, address))
++      && m68k_decompose_index (mode, XEXP (x, 0), strict_p, address))
+     {
+       address->offset = XEXP (x, 1);
+       return true;
+@@ -1937,7 +2075,7 @@
+ 	 worse code.  */
+       if (address->offset
+ 	  && symbolic_operand (address->offset, VOIDmode)
+-	  && m68k_decompose_index (x, strict_p, address))
++	  && m68k_decompose_index (mode, x, strict_p, address))
+ 	return true;
+     }
+   else
+@@ -1956,14 +2094,14 @@
+   if (GET_CODE (x) == PLUS)
+     {
+       if (m68k_legitimate_base_reg_p (XEXP (x, 0), strict_p)
+-	  && m68k_decompose_index (XEXP (x, 1), strict_p, address))
++	  && m68k_decompose_index (mode, XEXP (x, 1), strict_p, address))
+ 	{
+ 	  address->base = XEXP (x, 0);
+ 	  return true;
+ 	}
+ 
+       if (m68k_legitimate_base_reg_p (XEXP (x, 1), strict_p)
+-	  && m68k_decompose_index (XEXP (x, 0), strict_p, address))
++	  && m68k_decompose_index (mode, XEXP (x, 0), strict_p, address))
+ 	{
+ 	  address->base = XEXP (x, 1);
+ 	  return true;
+@@ -2025,6 +2163,243 @@
+ 	  && !address.index);
+ }
+ 
++/* Return GOT pointer.  */
++
++static rtx
++m68k_get_gp (void)
++{
++  if (pic_offset_table_rtx == NULL_RTX)
++    pic_offset_table_rtx = gen_rtx_REG (Pmode, PIC_REG);
++
++  crtl->uses_pic_offset_table = 1;
++
++  return pic_offset_table_rtx;
++}
++
++/* M68K relocations, used to distinguish GOT and TLS relocations in UNSPEC
++   wrappers.  */
++enum m68k_reloc { RELOC_GOT, RELOC_TLSGD, RELOC_TLSLDM, RELOC_TLSLDO,
++		  RELOC_TLSIE, RELOC_TLSLE };
++
++#define TLS_RELOC_P(RELOC) ((RELOC) != RELOC_GOT)
++
++/* Wrap symbol X into unspec representing relocation RELOC.
++   BASE_REG - register that should be added to the result.
++   TEMP_REG - if non-null, temporary register.  */
++
++static rtx
++m68k_wrap_symbol (rtx x, enum m68k_reloc reloc, rtx base_reg, rtx temp_reg)
++{
++  bool use_x_p;
++
++  use_x_p = (base_reg == pic_offset_table_rtx) ? TARGET_XGOT : TARGET_XTLS;
++
++  if (TARGET_COLDFIRE && use_x_p)
++    /* When compiling with -mx{got, tls} switch the code will look like this:
++
++       move.l <X>@<RELOC>,<TEMP_REG>
++       add.l <BASE_REG>,<TEMP_REG>  */
++    {
++      /* Wrap X in UNSPEC_??? to tip m68k_output_addr_const_extra
++	 to put @RELOC after reference.  */
++      x = gen_rtx_UNSPEC (Pmode, gen_rtvec (2, x, GEN_INT (reloc)),
++			  UNSPEC_RELOC32);
++      x = gen_rtx_CONST (Pmode, x);
++
++      if (temp_reg == NULL)
++	{
++	  gcc_assert (can_create_pseudo_p ());
++	  temp_reg = gen_reg_rtx (Pmode);
++	}
++
++      emit_move_insn (temp_reg, x);
++      emit_insn (gen_addsi3 (temp_reg, temp_reg, base_reg));
++      x = temp_reg;
++    }
++  else
++    {
++      x = gen_rtx_UNSPEC (Pmode, gen_rtvec (2, x, GEN_INT (reloc)),
++			  UNSPEC_RELOC16);
++      x = gen_rtx_CONST (Pmode, x);
++
++      x = gen_rtx_PLUS (Pmode, base_reg, x);
++    }
++
++  return x;
++}
++
++/* Helper for m68k_unwrap_symbol.
++   Also, if unwrapping was successful (that is if (ORIG != <return value>)),
++   sets *RELOC_PTR to relocation type for the symbol.  */
++
++static rtx
++m68k_unwrap_symbol_1 (rtx orig, bool unwrap_reloc32_p,
++		      enum m68k_reloc *reloc_ptr)
++{
++  if (GET_CODE (orig) == CONST)
++    {
++      rtx x;
++      enum m68k_reloc dummy;
++
++      x = XEXP (orig, 0);
++
++      if (reloc_ptr == NULL)
++	reloc_ptr = &dummy;
++
++      /* Handle an addend.  */
++      if ((GET_CODE (x) == PLUS || GET_CODE (x) == MINUS)
++	  && CONST_INT_P (XEXP (x, 1)))
++	x = XEXP (x, 0);
++
++      if (GET_CODE (x) == UNSPEC)
++	{
++	  switch (XINT (x, 1))
++	    {
++	    case UNSPEC_RELOC16:
++	      orig = XVECEXP (x, 0, 0);
++	      *reloc_ptr = (enum m68k_reloc) INTVAL (XVECEXP (x, 0, 1));
++	      break;
++
++	    case UNSPEC_RELOC32:
++	      if (unwrap_reloc32_p)
++		{
++		  orig = XVECEXP (x, 0, 0);
++		  *reloc_ptr = (enum m68k_reloc) INTVAL (XVECEXP (x, 0, 1));
++		}
++	      break;
++
++	    default:
++	      break;
++	    }
++	}
++    }
++
++  return orig;
++}
++
++/* Unwrap symbol from UNSPEC_RELOC16 and, if unwrap_reloc32_p,
++   UNSPEC_RELOC32 wrappers.  */
++
++rtx
++m68k_unwrap_symbol (rtx orig, bool unwrap_reloc32_p)
++{
++  return m68k_unwrap_symbol_1 (orig, unwrap_reloc32_p, NULL);
++}
++
++/* Helper for m68k_final_prescan_insn.  */
++
++static int
++m68k_final_prescan_insn_1 (rtx *x_ptr, void *data ATTRIBUTE_UNUSED)
++{
++  rtx x = *x_ptr;
++
++  if (m68k_unwrap_symbol (x, true) != x)
++    /* For rationale of the below, see comment in m68k_final_prescan_insn.  */
++    {
++      rtx plus;
++
++      gcc_assert (GET_CODE (x) == CONST);
++      plus = XEXP (x, 0);
++
++      if (GET_CODE (plus) == PLUS || GET_CODE (plus) == MINUS)
++	{
++	  rtx unspec;
++	  rtx addend;
++
++	  unspec = XEXP (plus, 0);
++	  gcc_assert (GET_CODE (unspec) == UNSPEC);
++	  addend = XEXP (plus, 1);
++	  gcc_assert (CONST_INT_P (addend));
++
++	  /* We now have all the pieces, rearrange them.  */
++
++	  /* Move symbol to plus.  */
++	  XEXP (plus, 0) = XVECEXP (unspec, 0, 0);
++
++	  /* Move plus inside unspec.  */
++	  XVECEXP (unspec, 0, 0) = plus;
++
++	  /* Move unspec to top level of const.  */
++	  XEXP (x, 0) = unspec;
++	}
++
++      return -1;
++    }
++
++  return 0;
++}
++
++/* Prescan insn before outputing assembler for it.  */
++
++void
++m68k_final_prescan_insn (rtx insn ATTRIBUTE_UNUSED,
++			 rtx *operands, int n_operands)
++{
++  int i;
++
++  /* Combine and, possibly, other optimizations may do good job
++     converting
++       (const (unspec [(symbol)]))
++     into
++       (const (plus (unspec [(symbol)])
++                    (const_int N))).
++     The problem with this is emitting @TLS or @GOT decorations.
++     The decoration is emitted when processing (unspec), so the
++     result would be "#symbol@TLSLE+N" instead of "#symbol+N@TLSLE".
++
++     It seems that the easiest solution to this is to convert such
++     operands to
++       (const (unspec [(plus (symbol)
++                             (const_int N))])).
++     Note, that the top level of operand remains intact, so we don't have
++     to patch up anything outside of the operand.  */
++
++  for (i = 0; i < n_operands; ++i)
++    {
++      rtx op;
++
++      op = operands[i];
++
++      for_each_rtx (&op, m68k_final_prescan_insn_1, NULL);
++    }
++}
++
++/* Move X to a register and add REG_EQUAL note pointing to ORIG.
++   If REG is non-null, use it; generate new pseudo otherwise.  */
++
++static rtx
++m68k_move_to_reg (rtx x, rtx orig, rtx reg)
++{
++  rtx insn;
++
++  if (reg == NULL_RTX)
++    {
++      gcc_assert (can_create_pseudo_p ());
++      reg = gen_reg_rtx (Pmode);
++    }
++
++  insn = emit_move_insn (reg, x);
++  /* Put a REG_EQUAL note on this insn, so that it can be optimized
++     by loop.  */
++  set_unique_reg_note (insn, REG_EQUAL, orig);
++
++  return reg;
++}
++
++/* Does the same as m68k_wrap_symbol, but returns a memory reference to
++   GOT slot.  */
++
++static rtx
++m68k_wrap_symbol_into_got_ref (rtx x, enum m68k_reloc reloc, rtx temp_reg)
++{
++  x = m68k_wrap_symbol (x, reloc, m68k_get_gp (), temp_reg);
++
++  x = gen_rtx_MEM (Pmode, x);
++  MEM_READONLY_P (x) = 1;
++
++  return x;
++}
++
+ /* Legitimize PIC addresses.  If the address is already
+    position-independent, we return ORIG.  Newly generated
+    position-independent addresses go to REG.  If we need more
+@@ -2076,42 +2451,15 @@
+     {
+       gcc_assert (reg);
+ 
+-      if (TARGET_COLDFIRE && TARGET_XGOT)
+-	/* When compiling with -mxgot switch the code for the above
+-	   example will look like this:
+-
+-	   movel a5, a0
+-	   addl _foo@GOT, a0
+-	   movel a0@, a0
+-	   movel #12345, a0@  */
+-	{
+-	  rtx pic_offset;
+-
+-	  /* Wrap ORIG in UNSPEC_GOTOFF to tip m68k_output_addr_const_extra
+-	     to put @GOT after reference.  */
+-	  pic_offset = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, orig),
+-				       UNSPEC_GOTOFF);
+-	  pic_offset = gen_rtx_CONST (Pmode, pic_offset);
+-	  emit_move_insn (reg, pic_offset);
+-	  emit_insn (gen_addsi3 (reg, reg, pic_offset_table_rtx));
+-	  pic_ref = gen_rtx_MEM (Pmode, reg);
+-	}
+-      else
+-	pic_ref = gen_rtx_MEM (Pmode,
+-			       gen_rtx_PLUS (Pmode,
+-					     pic_offset_table_rtx, orig));
+-      crtl->uses_pic_offset_table = 1;
+-      MEM_READONLY_P (pic_ref) = 1;
+-      emit_move_insn (reg, pic_ref);
+-      return reg;
++      pic_ref = m68k_wrap_symbol_into_got_ref (orig, RELOC_GOT, reg);
++      pic_ref = m68k_move_to_reg (pic_ref, orig, reg);
+     }
+   else if (GET_CODE (orig) == CONST)
+     {
+       rtx base;
+ 
+       /* Make sure this has not already been legitimized.  */
+-      if (GET_CODE (XEXP (orig, 0)) == PLUS
+-	  && XEXP (XEXP (orig, 0), 0) == pic_offset_table_rtx)
++      if (m68k_unwrap_symbol (orig, true) != orig)
+ 	return orig;
+ 
+       gcc_assert (reg);
+@@ -2124,13 +2472,257 @@
+ 				     base == reg ? 0 : reg);
+ 
+       if (GET_CODE (orig) == CONST_INT)
+-	return plus_constant (base, INTVAL (orig));
+-      pic_ref = gen_rtx_PLUS (Pmode, base, orig);
+-      /* Likewise, should we set special REG_NOTEs here?  */
++	pic_ref = plus_constant (base, INTVAL (orig));
++      else
++	pic_ref = gen_rtx_PLUS (Pmode, base, orig);
+     }
++
+   return pic_ref;
+ }
+ 
++/* The __tls_get_addr symbol.  */
++static GTY(()) rtx m68k_tls_get_addr;
++
++/* Return SYMBOL_REF for __tls_get_addr.  */
++
++static rtx
++m68k_get_tls_get_addr (void)
++{
++  if (m68k_tls_get_addr == NULL_RTX)
++    m68k_tls_get_addr = init_one_libfunc ("__tls_get_addr");
++
++  return m68k_tls_get_addr;
++}
++
++/* Return libcall result in A0 instead of usual D0.  */
++static bool m68k_libcall_value_in_a0_p = false;
++
++/* Emit instruction sequence that calls __tls_get_addr.  X is
++   the TLS symbol we are referencing and RELOC is the symbol type to use
++   (either TLSGD or TLSLDM).  EQV is the REG_EQUAL note for the sequence
++   emitted.  A pseudo register with result of __tls_get_addr call is
++   returned.  */
++
++static rtx
++m68k_call_tls_get_addr (rtx x, rtx eqv, enum m68k_reloc reloc)
++{
++  rtx a0;
++  rtx insns;
++  rtx dest;
++
++  /* Emit the call sequence.  */
++  start_sequence ();
++
++  /* FIXME: Unfortunately, emit_library_call_value does not
++     consider (plus (%a5) (const (unspec))) to be a good enough
++     operand for push, so it forces it into a register.  The bad
++     thing about this is that combiner, due to copy propagation and other
++     optimizations, sometimes can not later fix this.  As a consequence,
++     additional register may be allocated resulting in a spill.
++     For reference, see args processing loops in
++     calls.c:emit_library_call_value_1.
++     For testcase, see gcc.target/m68k/tls-{gd, ld}.c  */
++  x = m68k_wrap_symbol (x, reloc, m68k_get_gp (), NULL_RTX);
++
++  /* __tls_get_addr() is not a libcall, but emitting a libcall_value
++     is the simpliest way of generating a call.  The difference between
++     __tls_get_addr() and libcall is that the result is returned in D0
++     instead of A0.  To workaround this, we use m68k_libcall_value_in_a0_p
++     which temporarily switches returning the result to A0.  */ 
++
++  m68k_libcall_value_in_a0_p = true;
++  a0 = emit_library_call_value (m68k_get_tls_get_addr (), NULL_RTX, LCT_PURE,
++				Pmode, 1, x, Pmode);
++  m68k_libcall_value_in_a0_p = false;
++  
++  insns = get_insns ();
++  end_sequence ();
++
++  gcc_assert (can_create_pseudo_p ());
++  dest = gen_reg_rtx (Pmode);
++  emit_libcall_block (insns, dest, a0, eqv);
++
++  return dest;
++}
++
++/* The __tls_get_addr symbol.  */
++static GTY(()) rtx m68k_read_tp;
++
++/* Return SYMBOL_REF for __m68k_read_tp.  */
++
++static rtx
++m68k_get_m68k_read_tp (void)
++{
++  if (m68k_read_tp == NULL_RTX)
++    m68k_read_tp = init_one_libfunc ("__m68k_read_tp");
++
++  return m68k_read_tp;
++}
++
++/* Emit instruction sequence that calls __m68k_read_tp.
++   A pseudo register with result of __m68k_read_tp call is returned.  */
++
++static rtx 
++m68k_call_m68k_read_tp (void)
++{
++  rtx a0;
++  rtx eqv;
++  rtx insns;
++  rtx dest;
++
++  start_sequence ();
++
++  /* __m68k_read_tp() is not a libcall, but emitting a libcall_value
++     is the simpliest way of generating a call.  The difference between
++     __m68k_read_tp() and libcall is that the result is returned in D0
++     instead of A0.  To workaround this, we use m68k_libcall_value_in_a0_p
++     which temporarily switches returning the result to A0.  */ 
++
++  /* Emit the call sequence.  */
++  m68k_libcall_value_in_a0_p = true;
++  a0 = emit_library_call_value (m68k_get_m68k_read_tp (), NULL_RTX, LCT_PURE,
++				Pmode, 0);
++  m68k_libcall_value_in_a0_p = false;
++  insns = get_insns ();
++  end_sequence ();
++
++  /* Attach a unique REG_EQUIV, to allow the RTL optimizers to
++     share the m68k_read_tp result with other IE/LE model accesses.  */
++  eqv = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, const1_rtx), UNSPEC_RELOC32);
++
++  gcc_assert (can_create_pseudo_p ());
++  dest = gen_reg_rtx (Pmode);
++  emit_libcall_block (insns, dest, a0, eqv);
++
++  return dest;
++}
++
++/* Return a legitimized address for accessing TLS SYMBOL_REF X.
++   For explanations on instructions sequences see TLS/NPTL ABI for m68k and
++   ColdFire.  */
++
++rtx
++m68k_legitimize_tls_address (rtx orig)
++{
++  switch (SYMBOL_REF_TLS_MODEL (orig))
++    {
++    case TLS_MODEL_GLOBAL_DYNAMIC:
++      orig = m68k_call_tls_get_addr (orig, orig, RELOC_TLSGD);
++      break;
++
++    case TLS_MODEL_LOCAL_DYNAMIC:
++      {
++	rtx eqv;
++	rtx a0;
++	rtx x;
++ 
++	/* Attach a unique REG_EQUIV, to allow the RTL optimizers to
++	   share the LDM result with other LD model accesses.  */
++	eqv = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, const0_rtx),
++			      UNSPEC_RELOC32);
++
++	a0 = m68k_call_tls_get_addr (orig, eqv, RELOC_TLSLDM);
++
++	x = m68k_wrap_symbol (orig, RELOC_TLSLDO, a0, NULL_RTX);
++
++	if (can_create_pseudo_p ())
++	  x = m68k_move_to_reg (x, orig, NULL_RTX);
++
++	orig = x;
++	break;
++      }
++
++    case TLS_MODEL_INITIAL_EXEC:
++      {
++	rtx a0;
++	rtx x;
++
++	a0 = m68k_call_m68k_read_tp ();
++
++	x = m68k_wrap_symbol_into_got_ref (orig, RELOC_TLSIE, NULL_RTX);
++	x = gen_rtx_PLUS (Pmode, x, a0);
++
++	if (can_create_pseudo_p ())
++	  x = m68k_move_to_reg (x, orig, NULL_RTX);
++
++	orig = x;
++	break;
++      }
++
++    case TLS_MODEL_LOCAL_EXEC:
++      {
++	rtx a0;
++	rtx x;
++
++	a0 = m68k_call_m68k_read_tp ();
++
++	x = m68k_wrap_symbol (orig, RELOC_TLSLE, a0, NULL_RTX);
++
++	if (can_create_pseudo_p ())
++	  x = m68k_move_to_reg (x, orig, NULL_RTX);
++
++	orig = x;
++	break;
++      }
++
++    default:
++      gcc_unreachable ();
++    }
++
++  return orig;
++}
++
++/* Return true if X is a TLS symbol.  */
++
++static bool
++m68k_tls_symbol_p (rtx x)
++{
++  if (!TARGET_HAVE_TLS)
++    return false;
++
++  if (GET_CODE (x) != SYMBOL_REF)
++    return false;
++
++  return SYMBOL_REF_TLS_MODEL (x) != 0;
++}
++
++/* Helper for m68k_tls_referenced_p.  */
++
++static int
++m68k_tls_reference_p_1 (rtx *x_ptr, void *data ATTRIBUTE_UNUSED)
++{
++  /* Note: this is not the same as m68k_tls_symbol_p.  */
++  if (GET_CODE (*x_ptr) == SYMBOL_REF)
++    return SYMBOL_REF_TLS_MODEL (*x_ptr) != 0 ? 1 : 0;
++
++  /* Don't recurse into legitimate TLS references.  */
++  if (m68k_tls_reference_p (*x_ptr, true))
++    return -1;
++
++  return 0;
++}
++
++/* If !LEGITIMATE_P, return true if X is a TLS symbol reference,
++   though illegitimate one.
++   If LEGITIMATE_P, return true if X is a legitimate TLS symbol reference.  */
++
++bool
++m68k_tls_reference_p (rtx x, bool legitimate_p)
++{
++  if (!TARGET_HAVE_TLS)
++    return false;
++
++  if (!legitimate_p)
++    return for_each_rtx (&x, m68k_tls_reference_p_1, NULL) == 1 ? true : false;
++  else
++    {
++      enum m68k_reloc reloc = RELOC_GOT;
++
++      return (m68k_unwrap_symbol_1 (x, true, &reloc) != x
++	      && TLS_RELOC_P (reloc));
++    }
++}
++
+ 
+ 
+ #define USE_MOVQ(i)	((unsigned) ((i) + 128) <= 255)
+@@ -3918,18 +4510,92 @@
+     }
+ }
+ 
++/* Return string for TLS relocation RELOC.  */
++
++static const char *
++m68k_get_reloc_decoration (enum m68k_reloc reloc)
++{
++  /* To my knowledge, !MOTOROLA assemblers don't support TLS.  */
++  gcc_assert (MOTOROLA || reloc == RELOC_GOT);
++
++  switch (reloc)
++    {
++    case RELOC_GOT:
++      if (MOTOROLA)
++	{
++	  if (flag_pic == 1 && TARGET_68020)
++	    return "@GOT.w";
++	  else
++	    return "@GOT";
++	}
++      else
++	{
++	  if (TARGET_68020)
++	    {
++	      switch (flag_pic)
++		{
++		case 1:
++		  return ":w";
++		case 2:
++		  return ":l";
++		default:
++		  return "";
++		}
++	    }
++	}
++
++    case RELOC_TLSGD:
++      return "@TLSGD";
++
++    case RELOC_TLSLDM:
++      return "@TLSLDM";
++
++    case RELOC_TLSLDO:
++      return "@TLSLDO";
++
++    case RELOC_TLSIE:
++      return "@TLSIE";
++
++    case RELOC_TLSLE:
++      return "@TLSLE";
++
++    default:
++      gcc_unreachable ();
++    }
++}
++
+ /* m68k implementation of OUTPUT_ADDR_CONST_EXTRA.  */
+ 
+ bool
+ m68k_output_addr_const_extra (FILE *file, rtx x)
+ {
+-  if (GET_CODE (x) != UNSPEC || XINT (x, 1) != UNSPEC_GOTOFF)
+-    return false;
++  if (GET_CODE (x) == UNSPEC)
++    {
++      switch (XINT (x, 1))
++	{
++	case UNSPEC_RELOC16:
++	case UNSPEC_RELOC32:
++	  output_addr_const (file, XVECEXP (x, 0, 0));
++	  fputs (m68k_get_reloc_decoration (INTVAL (XVECEXP (x, 0, 1))), file);
++	  return true;
+ 
+-  output_addr_const (file, XVECEXP (x, 0, 0));
+-  /* ??? What is the non-MOTOROLA syntax?  */
+-  fputs ("@GOT", file);
+-  return true;
++	default:
++	  break;
++	}
++    }
++
++  return false;
++}
++
++/* M68K implementation of TARGET_ASM_OUTPUT_DWARF_DTPREL.  */
++
++static void
++m68k_output_dwarf_dtprel (FILE *file, int size, rtx x)
++{
++  gcc_assert (size == 4);
++  fputs ("\t.long\t", file);
++  output_addr_const (file, x);
++  fputs ("@TLSLDO+0x8000", file);
+ }
+ 
+ 
+@@ -4019,15 +4685,8 @@
+ 	  else
+ 	    {
+ 	      if (address.offset)
+-		{
+-		  output_addr_const (file, address.offset);
+-		  if (flag_pic && address.base == pic_offset_table_rtx)
+-		    {
+-		      fprintf (file, "@GOT");
+-		      if (flag_pic == 1 && TARGET_68020)
+-			fprintf (file, ".w");
+-		    }
+-		}
++		output_addr_const (file, address.offset);
++
+ 	      putc ('(', file);
+ 	      if (address.base)
+ 		fputs (M68K_REGNAME (REGNO (address.base)), file);
+@@ -4060,19 +4719,7 @@
+ 		    fputs (M68K_REGNAME (REGNO (address.base)), file);
+ 		  fprintf (file, "@(");
+ 		  if (address.offset)
+-		    {
+-		      output_addr_const (file, address.offset);
+-		      if (address.base == pic_offset_table_rtx && TARGET_68020)
+-			switch (flag_pic)
+-			  {
+-			  case 1:
+-			    fprintf (file, ":w"); break;
+-			  case 2:
+-			    fprintf (file, ":l"); break;
+-			  default:
+-			    break;
+-			  }
+-		    }
++		    output_addr_const (file, address.offset);
+ 		}
+ 	      /* Print the ",index" component, if any.  */
+ 	      if (address.index)
+@@ -4580,9 +5227,13 @@
+   default:
+     break;
+   }
+-  return gen_rtx_REG (mode, D0_REG);
++
++  return gen_rtx_REG (mode, m68k_libcall_value_in_a0_p ? A0_REG : D0_REG);
+ }
+ 
++/* Return location in which function value is returned.
++   NOTE: Due to differences in ABIs, don't call this function directly,
++   use FUNCTION_VALUE instead.  */
+ rtx
+ m68k_function_value (const_tree valtype, const_tree func ATTRIBUTE_UNUSED)
+ {
+@@ -4846,9 +5497,8 @@
+ 	  return OP_TYPE_IMM_L;
+ 
+ 	default:
+-	  if (GET_CODE (op) == SYMBOL_REF)
+-	    /* ??? Just a guess.  Probably we can guess better using length
+-	       attribute of the instructions.  */
++	  if (symbolic_operand (m68k_unwrap_symbol (op, false), VOIDmode))
++	    /* Just a guess.  */
+ 	    return OP_TYPE_IMM_W;
+ 
+ 	  return OP_TYPE_IMM_L;
+@@ -5793,3 +6443,5 @@
+       return 0;
+     }
+ }
++
++#include "gt-m68k.h"
+--- a/src/gcc/config/m68k/m68k.h
++++ b/src/gcc/config/m68k/m68k.h
+@@ -232,6 +232,7 @@
+ #define FL_ISA_C     (1 << 16)
+ #define FL_FIDOA     (1 << 17)
+ #define FL_MMU 	     0   /* Used by multilib machinery.  */
++#define FL_UCLINUX   0   /* Used by multilib machinery.  */
+ 
+ #define TARGET_68010		((m68k_cpu_flags & FL_ISA_68010) != 0)
+ #define TARGET_68020		((m68k_cpu_flags & FL_ISA_68020) != 0)
+@@ -501,7 +502,8 @@
+ 
+ extern enum reg_class regno_reg_class[];
+ #define REGNO_REG_CLASS(REGNO) (regno_reg_class[(REGNO)])
+-#define INDEX_REG_CLASS GENERAL_REGS
++#define MODE_INDEX_REG_CLASS(MODE) \
++  (MODE_OK_FOR_INDEX_P (MODE) ? GENERAL_REGS : NO_REGS)
+ #define BASE_REG_CLASS ADDR_REGS
+ 
+ #define PREFERRED_RELOAD_CLASS(X,CLASS) \
+@@ -675,6 +677,10 @@
+ #define HAVE_POST_INCREMENT 1
+ #define HAVE_PRE_DECREMENT 1
+ 
++/* Return true if addresses of mode MODE can have an index register.  */
++#define MODE_OK_FOR_INDEX_P(MODE) \
++  (!TARGET_COLDFIRE_FPU || GET_MODE_CLASS (MODE) != MODE_FLOAT)
++
+ /* Macros to check register numbers against specific register classes.  */
+ 
+ /* True for data registers, D0 through D7.  */
+@@ -689,9 +695,10 @@
+ /* True for floating point registers, FP0 through FP7.  */
+ #define FP_REGNO_P(REGNO)	IN_RANGE (REGNO, 16, 23)
+ 
+-#define REGNO_OK_FOR_INDEX_P(REGNO)			\
+-  (INT_REGNO_P (REGNO)					\
+-   || INT_REGNO_P (reg_renumber[REGNO]))
++#define REGNO_MODE_OK_FOR_INDEX_P(REGNO, MODE)		\
++  (MODE_OK_FOR_INDEX_P (MODE)				\
++   && (INT_REGNO_P (REGNO)				\
++       || INT_REGNO_P (reg_renumber[REGNO])))
+ 
+ #define REGNO_OK_FOR_BASE_P(REGNO)			\
+   (ADDRESS_REGNO_P (REGNO)				\
+@@ -751,13 +758,14 @@
+ 
+ #define LEGITIMATE_PIC_OPERAND_P(X)				\
+   (!symbolic_operand (X, VOIDmode)				\
+-   || (TARGET_PCREL && REG_STRICT_P))
++   || (TARGET_PCREL && REG_STRICT_P)				\
++   || m68k_tls_reference_p (X, true))
+ 
+ #define REG_OK_FOR_BASE_P(X) \
+   m68k_legitimate_base_reg_p (X, REG_STRICT_P)
+ 
+-#define REG_OK_FOR_INDEX_P(X) \
+-  m68k_legitimate_index_reg_p (X, REG_STRICT_P)
++#define REG_MODE_OK_FOR_INDEX_P(X, MODE)	\
++  m68k_legitimate_index_reg_p (MODE, X, REG_STRICT_P)
+ 
+ #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR)				\
+   do									\
+@@ -770,52 +778,19 @@
+ /* This address is OK as it stands.  */
+ #define PIC_CASE_VECTOR_ADDRESS(index) index
+ 
+-/* For the 68000, we handle X+REG by loading X into a register R and
+-   using R+REG.  R will go in an address reg and indexing will be used.
+-   However, if REG is a broken-out memory address or multiplication,
+-   nothing needs to be done because REG can certainly go in an address reg.  */
+-#define COPY_ONCE(Y) if (!copied) { Y = copy_rtx (Y); copied = ch = 1; }
+-#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN)   \
+-{ register int ch = (X) != (OLDX);					\
+-  if (GET_CODE (X) == PLUS)						\
+-    { int copied = 0;							\
+-      if (GET_CODE (XEXP (X, 0)) == MULT)				\
+-	{ COPY_ONCE (X); XEXP (X, 0) = force_operand (XEXP (X, 0), 0);}	\
+-      if (GET_CODE (XEXP (X, 1)) == MULT)				\
+-	{ COPY_ONCE (X); XEXP (X, 1) = force_operand (XEXP (X, 1), 0);}	\
+-      if (ch && GET_CODE (XEXP (X, 1)) == REG				\
+-	  && GET_CODE (XEXP (X, 0)) == REG)				\
+-	{ if (TARGET_COLDFIRE_FPU					\
+-	      && GET_MODE_CLASS (MODE) == MODE_FLOAT)			\
+-	    { COPY_ONCE (X); X = force_operand (X, 0);}			\
+-	  goto WIN; }							\
+-      if (ch) { GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN); }		\
+-      if (GET_CODE (XEXP (X, 0)) == REG					\
+-	       || (GET_CODE (XEXP (X, 0)) == SIGN_EXTEND		\
+-		   && GET_CODE (XEXP (XEXP (X, 0), 0)) == REG		\
+-		   && GET_MODE (XEXP (XEXP (X, 0), 0)) == HImode))	\
+-	{ register rtx temp = gen_reg_rtx (Pmode);			\
+-	  register rtx val = force_operand (XEXP (X, 1), 0);		\
+-	  emit_move_insn (temp, val);					\
+-	  COPY_ONCE (X);						\
+-	  XEXP (X, 1) = temp;						\
+-	  if (TARGET_COLDFIRE_FPU && GET_MODE_CLASS (MODE) == MODE_FLOAT \
+-	      && GET_CODE (XEXP (X, 0)) == REG)				\
+-	    X = force_operand (X, 0);					\
+-	  goto WIN; }							\
+-      else if (GET_CODE (XEXP (X, 1)) == REG				\
+-	       || (GET_CODE (XEXP (X, 1)) == SIGN_EXTEND		\
+-		   && GET_CODE (XEXP (XEXP (X, 1), 0)) == REG		\
+-		   && GET_MODE (XEXP (XEXP (X, 1), 0)) == HImode))	\
+-	{ register rtx temp = gen_reg_rtx (Pmode);			\
+-	  register rtx val = force_operand (XEXP (X, 0), 0);		\
+-	  emit_move_insn (temp, val);					\
+-	  COPY_ONCE (X);						\
+-	  XEXP (X, 0) = temp;						\
+-	  if (TARGET_COLDFIRE_FPU && GET_MODE_CLASS (MODE) == MODE_FLOAT \
+-	      && GET_CODE (XEXP (X, 1)) == REG)				\
+-	    X = force_operand (X, 0);					\
+-	  goto WIN; }}}
++#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN)		\
++do {							\
++  rtx __x;						\
++  							\
++  __x = m68k_legitimize_address (X, OLDX, MODE);	\
++  if (__x != NULL_RTX)					\
++    {							\
++      X = __x;						\
++							\
++      if (memory_address_p (MODE, X))			\
++	goto WIN;					\
++    }							\
++} while (0)
+ 
+ /* On the 68000, only predecrement and postincrement address depend thus
+    (the amount of decrement or increment being the length of the operand).
+@@ -1028,6 +1003,9 @@
+   assemble_name ((FILE), (NAME)),		\
+   fprintf ((FILE), ",%u\n", (int)(ROUNDED)))
+ 
++#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \
++  m68k_final_prescan_insn (INSN, OPVEC, NOPERANDS)
++
+ /* On the 68000, we use several CODE characters:
+    '.' for dot needed in Motorola-style opcode names.
+    '-' for an operand pushing on the stack:
+--- a/src/gcc/config/m68k/m68k.md
++++ b/src/gcc/config/m68k/m68k.md
+@@ -116,7 +116,8 @@
+    (UNSPEC_GOT 3)
+    (UNSPEC_IB 4)
+    (UNSPEC_TIE 5)
+-   (UNSPEC_GOTOFF 6)
++   (UNSPEC_RELOC16 6)
++   (UNSPEC_RELOC32 7)
+   ])
+ 
+ ;; UNSPEC_VOLATILE usage:
+@@ -414,7 +415,7 @@
+ 
+ (define_insn "tst<mode>_cf"
+   [(set (cc0)
+-	(match_operand:FP 0 "general_operand" "f<FP:dreg><Q>U"))]
++	(match_operand:FP 0 "general_operand" "f<FP:dreg>m"))]
+   "TARGET_COLDFIRE_FPU"
+ {
+   cc_status.flags = CC_IN_68881;
+@@ -570,8 +571,8 @@
+ 
+ (define_insn "*cmp<mode>_cf"
+   [(set (cc0)
+-	(compare (match_operand:FP 0 "fp_src_operand" "f,f,<FP:dreg><Q>U")
+-		 (match_operand:FP 1 "fp_src_operand" "f,<FP:dreg><Q>U,f")))]
++	(compare (match_operand:FP 0 "fp_src_operand" "f,f,<FP:dreg>m")
++		 (match_operand:FP 1 "fp_src_operand" "f,<FP:dreg>m,f")))]
+   "TARGET_COLDFIRE_FPU
+    && (register_operand (operands[0], <MODE>mode)
+        || register_operand (operands[1], <MODE>mode))"
+@@ -779,7 +780,41 @@
+ {
+   rtx tmp, base, offset;
+ 
+-  if (flag_pic && !TARGET_PCREL && symbolic_operand (operands[1], SImode))
++  /* Recognize the case where operand[1] is a reference to thread-local
++     data and load its address to a register.  */
++  if (!TARGET_PCREL && m68k_tls_reference_p (operands[1], false))
++    {
++      rtx tmp = operands[1];
++      rtx addend = NULL;
++
++      if (GET_CODE (tmp) == CONST && GET_CODE (XEXP (tmp, 0)) == PLUS)
++        {
++          addend = XEXP (XEXP (tmp, 0), 1);
++          tmp = XEXP (XEXP (tmp, 0), 0);
++        }
++
++      gcc_assert (GET_CODE (tmp) == SYMBOL_REF);
++      gcc_assert (SYMBOL_REF_TLS_MODEL (tmp) != 0);
++
++      tmp = m68k_legitimize_tls_address (tmp);
++
++      if (addend)
++        {
++	  if (!REG_P (tmp))
++	    {
++	      rtx reg;
++
++	      reg = gen_reg_rtx (Pmode);
++	      emit_move_insn (reg, tmp);
++	      tmp = reg;
++	    }
++
++          tmp = gen_rtx_PLUS (SImode, tmp, addend);
++	}
++
++      operands[1] = tmp;
++    }
++  else if (flag_pic && !TARGET_PCREL && symbolic_operand (operands[1], SImode))
+     {
+       /* The source is an address which requires PIC relocation.
+          Call legitimize_pic_address with the source, mode, and a relocation
+@@ -1070,10 +1105,8 @@
+ ;; SFmode MEMs are restricted to modes 2-4 if TARGET_COLDFIRE_FPU.
+ ;; The move instructions can handle all combinations.
+ (define_insn "movsf_cf_hard"
+-  [(set (match_operand:SF 0 "nonimmediate_operand" "=r<Q>U, f,    f,mr,f,r<Q>,f
+-,m")
+-        (match_operand:SF 1 "general_operand"      " f,     r<Q>U,f,rm,F,F,   m
+-,f"))]
++  [(set (match_operand:SF 0 "nonimmediate_operand" "=rm,f, f,rm,f,r<Q>,f,m")
++        (match_operand:SF 1 "general_operand"      " f, rm,f,rm,F,F,   m,f"))]
+   "TARGET_COLDFIRE_FPU"
+ {
+   if (which_alternative == 4 || which_alternative == 5) {
+@@ -1215,8 +1248,8 @@
+ })
+ 
+ (define_insn "movdf_cf_hard"
+-  [(set (match_operand:DF 0 "nonimmediate_operand" "=f,    <Q>U,r,f,r,r,m,f")
+-        (match_operand:DF 1 "general_operand"      " f<Q>U,f,   f,r,r,m,r,E"))]
++  [(set (match_operand:DF 0 "nonimmediate_operand" "=f, m,r,f,r,r,m,f")
++        (match_operand:DF 1 "general_operand"      " fm,f,f,r,r,m,r,E"))]
+   "TARGET_COLDFIRE_FPU"
+ {
+   rtx xoperands[3];
+@@ -1857,7 +1890,7 @@
+ (define_insn "extendsfdf2_cf"
+   [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f")
+ 	(float_extend:DF
+-	 (match_operand:SF 1 "general_operand" "f,<Q>U")))]
++	 (match_operand:SF 1 "general_operand" "f,m")))]
+   "TARGET_COLDFIRE_FPU"
+ {
+   if (FP_REG_P (operands[0]) && FP_REG_P (operands[1]))
+@@ -1897,9 +1930,9 @@
+ })
+ 
+ (define_insn "truncdfsf2_cf"
+-  [(set (match_operand:SF 0 "nonimmediate_operand" "=f,d<Q>U")
++  [(set (match_operand:SF 0 "nonimmediate_operand" "=f,dm")
+ 	(float_truncate:SF
+-	  (match_operand:DF 1 "general_operand" "<Q>U,f")))]
++	  (match_operand:DF 1 "general_operand" "m,f")))]
+   "TARGET_COLDFIRE_FPU"
+   "@
+   fsmove%.d %1,%0
+@@ -2045,7 +2078,7 @@
+ 
+ (define_insn "ftrunc<mode>2_cf"
+   [(set (match_operand:FP 0 "nonimmediate_operand" "=f")
+-        (fix:FP (match_operand:FP 1 "general_operand" "f<FP:dreg><Q>U")))]
++        (fix:FP (match_operand:FP 1 "general_operand" "f<FP:dreg>m")))]
+   "TARGET_COLDFIRE_FPU"
+ {
+   if (FP_REG_P (operands[1]))
+@@ -2338,9 +2371,9 @@
+   "* return output_addsi3 (operands);")
+ 
+ (define_insn_and_split "*addsi3_5200"
+-  [(set (match_operand:SI 0 "nonimmediate_operand"         "=mr,mr,a,m,r,  ?a, ?a,?a,?a")
+-	(plus:SI (match_operand:SI 1 "general_operand"     "%0, 0, 0,0,0,   a,  a, r, a")
+-		 (match_operand:SI 2 "general_src_operand" " I, L, J,d,mrKi,Cj, r, a, J")))]
++  [(set (match_operand:SI 0 "nonimmediate_operand"         "=mr,mr,a,  m,r,  ?a, ?a,?a,?a")
++	(plus:SI (match_operand:SI 1 "general_operand"     "%0, 0, 0,  0,0,   a,  a, r, a")
++		 (match_operand:SI 2 "general_src_operand" " I, L, JCu,d,mrKi,Cj, r, a, JCu")))]
+   "TARGET_COLDFIRE"
+ {
+   switch (which_alternative)
+@@ -2382,9 +2415,9 @@
+ 	(plus:SI (match_dup 0)
+ 		 (match_dup 1)))]
+   ""
+-  [(set_attr "type" "aluq_l,aluq_l,lea,alu_l,alu_l,*,lea,lea,lea")
+-   (set_attr "opy" "2,2,*,2,2,*,*,*,*")
+-   (set_attr "opy_type" "*,*,mem5,*,*,*,mem6,mem6,mem5")])
++  [(set_attr "type"     "aluq_l,aluq_l,lea, alu_l,alu_l,*,lea, lea, lea")
++   (set_attr "opy"      "2,     2,     *,   2,    2,    *,*,   *,   *")
++   (set_attr "opy_type" "*,     *,     mem5,*,    *,    *,mem6,mem6,mem5")])
+ 
+ (define_insn ""
+   [(set (match_operand:SI 0 "nonimmediate_operand" "=a")
+@@ -2666,7 +2699,7 @@
+ (define_insn "add<mode>3_cf"
+   [(set (match_operand:FP 0 "nonimmediate_operand" "=f")
+ 	(plus:FP (match_operand:FP 1 "general_operand" "%0")
+-		 (match_operand:FP 2 "general_operand" "f<FP:dreg><Q>U")))]
++		 (match_operand:FP 2 "general_operand" "f<FP:dreg>m")))]
+   "TARGET_COLDFIRE_FPU"
+ {
+   if (FP_REG_P (operands[2]))
+@@ -2889,7 +2922,7 @@
+ (define_insn "sub<mode>3_cf"
+   [(set (match_operand:FP 0 "nonimmediate_operand" "=f")
+         (minus:FP (match_operand:FP 1 "general_operand" "0")
+-                  (match_operand:FP 2 "general_operand" "f<FP:dreg><Q>U")))]
++                  (match_operand:FP 2 "general_operand" "f<FP:dreg>m")))]
+   "TARGET_COLDFIRE_FPU"
+ {
+   if (FP_REG_P (operands[2]))
+@@ -3245,7 +3278,7 @@
+ (define_insn "fmul<mode>3_cf"
+   [(set (match_operand:FP 0 "nonimmediate_operand" "=f")
+ 	(mult:FP (match_operand:FP 1 "general_operand" "%0")
+-		 (match_operand:FP 2 "general_operand" "f<Q>U<FP:dreg>")))]
++		 (match_operand:FP 2 "general_operand" "fm<FP:dreg>")))]
+   "TARGET_COLDFIRE_FPU"
+ {
+   if (FP_REG_P (operands[2]))
+@@ -3315,7 +3348,7 @@
+ (define_insn "div<mode>3_cf"
+   [(set (match_operand:FP 0 "nonimmediate_operand" "=f")
+ 	(div:FP (match_operand:FP 1 "general_operand" "0")
+-		(match_operand:FP 2 "general_operand" "f<Q>U<FP:dreg>")))]
++		(match_operand:FP 2 "general_operand" "fm<FP:dreg>")))]
+   "TARGET_COLDFIRE_FPU"
+ {
+   if (FP_REG_P (operands[2]))
+@@ -4163,7 +4196,7 @@
+ 
+ (define_insn "neg<mode>2_cf"
+   [(set (match_operand:FP 0 "nonimmediate_operand" "=f,d")
+-	(neg:FP (match_operand:FP 1 "general_operand" "f<FP:dreg><Q>U,0")))]
++	(neg:FP (match_operand:FP 1 "general_operand" "f<FP:dreg>m,0")))]
+   "TARGET_COLDFIRE_FPU"
+ {
+   if (DATA_REG_P (operands[0]))
+@@ -4197,7 +4230,7 @@
+ 
+ (define_insn "sqrt<mode>2_cf"
+   [(set (match_operand:FP 0 "nonimmediate_operand" "=f")
+-	(sqrt:FP (match_operand:FP 1 "general_operand" "f<FP:dreg><Q>U")))]
++	(sqrt:FP (match_operand:FP 1 "general_operand" "f<FP:dreg>m")))]
+   "TARGET_COLDFIRE_FPU"
+ {
+   if (FP_REG_P (operands[1]))
+@@ -4316,7 +4349,7 @@
+ 
+ (define_insn "abs<mode>2_cf"
+   [(set (match_operand:FP 0 "nonimmediate_operand" "=f,d")
+-	(abs:FP (match_operand:FP 1 "general_operand" "f<FP:dreg><Q>U,0")))]
++	(abs:FP (match_operand:FP 1 "general_operand" "f<FP:dreg>m,0")))]
+   "TARGET_COLDFIRE_FPU"
+ {
+   if (DATA_REG_P (operands[0]))
+--- a/src/gcc/config/m68k/m68k.opt
++++ b/src/gcc/config/m68k/m68k.opt
+@@ -182,3 +182,7 @@
+ mxgot
+ Target Report Mask(XGOT)
+ Support more than 8192 GOT entries on ColdFire
++
++mxtls
++Target Report Mask(XTLS)
++Support TLS segment larger than 64K
+--- a/src/gcc/config/m68k/predicates.md
++++ b/src/gcc/config/m68k/predicates.md
+@@ -130,7 +130,9 @@
+   (match_code "sign_extend,zero_extend"))
+ 
+ ;; Returns true if OP is either a symbol reference or a sum of a
+-;; symbol reference and a constant.
++;; symbol reference and a constant.  This predicate is for "raw"
++;; symbol references not yet processed by legitimize*_address,
++;; hence we do not handle UNSPEC_{XGOT, TLS, XTLS} here.
+ 
+ (define_predicate "symbolic_operand"
+   (match_code "symbol_ref,label_ref,const")
+--- a/src/gcc/config/m68k/t-uclinux
++++ b/src/gcc/config/m68k/t-uclinux
+@@ -1,8 +1,8 @@
+ # crti and crtn are provided by uClibc.
+ EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o
+ 
+-# Only include multilibs for the 68020 and for CPUs without an MMU.
+-M68K_MLIB_CPU += && (MLIB == "68020" || !match(FLAGS, "FL_MMU"))
++# Include multilibs for CPUs without an MMU or with FL_UCLINUX
++M68K_MLIB_CPU += && (!match(FLAGS, "FL_MMU") || match(FLAGS, "FL_UCLINUX"))
+ 
+ # Add multilibs for execute-in-place and shared-library code.
+ M68K_MLIB_OPTIONS += msep-data/mid-shared-library
+--- a/src/gcc/config/m68k/uclinux.h
++++ b/src/gcc/config/m68k/uclinux.h
+@@ -35,7 +35,7 @@
+    profiling, or libg.a.  */
+ #undef LIB_SPEC
+ #define LIB_SPEC \
+-"%{mid-shared-library:%{!static-libc:-R libc.gdb%s}} -lc"
++"%{mid-shared-library:%{!static-libc:-R libc.gdb%s}} %{pthread:-lpthread} -lc"
+ 
+ /* Default to using -elf2flt with no options.  */
+ #undef LINK_SPEC
+--- a/src/gcc/config/mips/74k.md
++++ b/src/gcc/config/mips/74k.md
+@@ -118,8 +118,7 @@
+ ;; stores
+ (define_insn_reservation "r74k_int_store" 1
+   (and (eq_attr "cpu" "74kc,74kf2_1,74kf1_1,74kf3_2")
+-       (and (eq_attr "type" "store")
+-            (eq_attr "mode" "!unknown")))
++       (eq_attr "type" "store"))
+   "r74k_agen")
+ 
+ 
+@@ -145,33 +144,123 @@
+ ;; load->load base:  4 cycles
+ ;; load->store base: 4 cycles
+ (define_bypass 4 "r74k_int_load" "r74k_int_load")
+-(define_bypass 4 "r74k_int_load" "r74k_int_store" "!store_data_bypass_p")
++(define_bypass 4 "r74k_int_load" "r74k_int_store" "!mips_store_data_bypass_p")
+ 
+ ;; logical/move/slt/signext->next use :  1 cycles (Default)
+ ;; logical/move/slt/signext->load base:  2 cycles
+ ;; logical/move/slt/signext->store base: 2 cycles
+ (define_bypass 2 "r74k_int_logical" "r74k_int_load")
+-(define_bypass 2 "r74k_int_logical" "r74k_int_store" "!store_data_bypass_p")
++(define_bypass 2 "r74k_int_logical" "r74k_int_store"
++  "!mips_store_data_bypass_p")
+ 
+ ;; arith->next use :  2 cycles (Default)
+ ;; arith->load base:  3 cycles
+ ;; arith->store base: 3 cycles
+ (define_bypass 3 "r74k_int_arith" "r74k_int_load")
+-(define_bypass 3 "r74k_int_arith" "r74k_int_store" "!store_data_bypass_p")
++(define_bypass 3 "r74k_int_arith" "r74k_int_store" "!mips_store_data_bypass_p")
+ 
+ ;; cmove->next use :  4 cycles (Default)
+ ;; cmove->load base:  5 cycles
+ ;; cmove->store base: 5 cycles
+ (define_bypass 5 "r74k_int_cmove"  "r74k_int_load")
+-(define_bypass 5 "r74k_int_cmove"  "r74k_int_store" "!store_data_bypass_p")
++(define_bypass 5 "r74k_int_cmove"  "r74k_int_store"
++  "!mips_store_data_bypass_p")
+ 
+ ;; mult/madd/msub->int_mfhilo  : 4 cycles (default)
+ ;; mult->madd/msub             : 1 cycles
+ ;; madd/msub->madd/msub        : 1 cycles
+-(define_bypass 1 "r74k_int_mult,r74k_int_mul3" "r74k_int_madd"
+-  "mips_linked_madd_p")
+-(define_bypass 1 "r74k_int_madd" "r74k_int_madd"
+-  "mips_linked_madd_p")
++(define_bypass 1 "r74k_int_mult" "r74k_int_madd")
++(define_bypass 1 "r74k_int_madd" "r74k_int_madd")
++
++(define_bypass 1 "r74k_int_mul3" "r74k_int_madd"
++  "mips_mult_madd_chain_bypass_p")
++
++
++;; --------------------------------------------------------------
++;; DSP instructins
++;; --------------------------------------------------------------
++
++;; Non-saturating insn have the same latency as normal ALU operations,
++(define_insn_reservation "r74k_dsp_alu" 2
++  (and (eq_attr "cpu" "74kc,74kf2_1,74kf1_1,74kf3_2")
++       (eq_attr "type" "dspalu"))
++  "r74k_alu")
++
++;; Saturating insn takes an extra cycle.
++(define_insn_reservation "r74k_dsp_alu_sat" 3
++  (and (eq_attr "cpu" "74kc,74kf2_1,74kf1_1,74kf3_2")
++       (eq_attr "type" "dspalusat"))
++  "r74k_alu")
++
++;; dpaq_s, dpau, dpsq_s, dpsu, maq_s, mulsaq
++;; - delivers result to hi/lo in 6 cycle (bypass at M4)
++(define_insn_reservation "r74k_dsp_mac" 6
++  (and (eq_attr "cpu" "74kc,74kf2_1,74kf1_1,74kf3_2")
++       (eq_attr "type" "dspmac"))
++  "r74k_alu+r74k_mul")
++
++;; dpaq_sa, dpsq_sa, maq_sa
++;; - delivers result to hi/lo in 7 cycle (bypass at WB)
++(define_insn_reservation "r74k_dsp_mac_sat" 7
++  (and (eq_attr "cpu" "74kc,74kf2_1,74kf1_1,74kf3_2")
++       (eq_attr "type" "dspmacsat"))
++  "r74k_alu+r74k_mul")
++
++;; extp, extpdp, extpdpv, extpv, extr, extrv
++;; - same latency as "mul"
++(define_insn_reservation "r74k_dsp_acc_ext" 7
++  (and (eq_attr "cpu" "74kc,74kf2_1,74kf1_1,74kf3_2")
++       (eq_attr "type" "accext"))
++  "r74k_alu+r74k_mul")
++
++;; mthlip, shilo, shilov
++;; - same latency as "mul"
++(define_insn_reservation "r74k_dsp_acc_mod" 7
++  (and (eq_attr "cpu" "74kc,74kf2_1,74kf1_1,74kf3_2")
++       (eq_attr "type" "accmod"))
++  "r74k_alu+r74k_mul")
++
++;; dspalu   ->load/store base
++;; dspalusat->load/store base
++;; - we should never see these in real life.
++
++;; dsp_mac->dsp_mac     : 1 cycles (repeat rate of 1)
++;; dsp_mac->dsp_mac_sat : 1 cycles (repeat rate of 1)
++(define_bypass 1 "r74k_dsp_mac" "r74k_dsp_mac")
++(define_bypass 1 "r74k_dsp_mac" "r74k_dsp_mac_sat")
++
++;; dsp_mac_sat->dsp_mac_sat : 2 cycles (repeat rate of 2)
++;; dsp_mac_sat->dsp_mac     : 2 cycles (repeat rate of 2)
++(define_bypass 2 "r74k_dsp_mac_sat" "r74k_dsp_mac_sat")
++(define_bypass 2 "r74k_dsp_mac_sat" "r74k_dsp_mac")
++
++(define_bypass 1 "r74k_int_mult" "r74k_dsp_mac")
++(define_bypass 1 "r74k_int_mult" "r74k_dsp_mac_sat")
++
++;; Before reload, all multiplier is registered as imul3 (which has a long
++;;  latency).  We temporary jig the latency such that the macc groups
++;;  are scheduled closely together during the first scheduler pass.
++(define_bypass 1 "r74k_int_mul3" "r74k_dsp_mac"
++  "mips_mult_madd_chain_bypass_p")
++(define_bypass 1 "r74k_int_mul3" "r74k_dsp_mac_sat"
++  "mips_mult_madd_chain_bypass_p")
++
++;; Assuming the following is true (bypass at M4)
++;;  AP AF AM MB M1 M2 M3 M4 WB GR GC
++;;              AP AF AM MB M1 M2 M3 M4 WB GR GC
++;; dsp_mac->dsp_acc_ext : 4 cycles
++;; dsp_mac->dsp_acc_mod : 4 cycles
++(define_bypass 4 "r74k_dsp_mac" "r74k_dsp_acc_ext")
++(define_bypass 4 "r74k_dsp_mac" "r74k_dsp_acc_mod")
++
++;; Assuming the following is true (bypass at WB)
++;;  AP AF AM MB M1 M2 M3 M4 WB GR GC
++;;                 AP AF AM MB M1 M2 M3 M4 WB GR GC
++;; dsp_mac_sat->dsp_acc_ext : 5 cycles
++;; dsp_mac_sat->dsp_acc_mod : 5 cycles
++(define_bypass 5 "r74k_dsp_mac_sat" "r74k_dsp_acc_ext")
++(define_bypass 5 "r74k_dsp_mac_sat" "r74k_dsp_acc_mod")
++
+ 
+ ;; --------------------------------------------------------------
+ ;; Floating Point Instructions
+--- a/src/gcc/config/mips/constraints.md
++++ b/src/gcc/config/mips/constraints.md
+@@ -162,7 +162,7 @@
+ (define_memory_constraint "R"
+   "An address that can be used in a non-macro load or store."
+   (and (match_code "mem")
+-       (match_test "mips_address_insns (XEXP (op, 0), mode, false) == 1")))
++       (match_test "mips_address_insns (XEXP (op, 0), mode, false, false) == 1")))
+ 
+ (define_constraint "S"
+   "@internal
+@@ -215,3 +215,13 @@
+    A signed 10-bit constant."
+   (and (match_code "const_int")
+        (match_test "IMM10_OPERAND (ival)")))
++
++(define_memory_constraint "YC"
++  "For MIPS, it is the same as the constraint R.  For microMIPS, it matches an address within a 12-bit offset that can be used in ll, sc, etc."
++  (and (match_code "mem")
++       (match_test "mips_address_insns (XEXP (op, 0), mode, false, true) == 1")))
++
++(define_address_constraint "YD"
++  "@internal
++   For MIPS, it is the same as the constraint p.  For microMIPS, it matches a 12-bit offset address."
++  (match_test "mips_address_insns (op, mode, false, true) == 1"))
+--- a/src/gcc/config/mips/crtfastmath.c
++++ b/src/gcc/config/mips/crtfastmath.c
+@@ -0,0 +1,53 @@
++/* Copyright (C) 2008, 2009 Free Software Foundation, Inc. 
++
++   This file is part of GCC.
++
++   GCC is free software; you can redistribute it and/or modify it
++   under the terms of the GNU General Public License as published by
++   the Free Software Foundation; either version 3, or (at your option)
++   any later version.
++
++   GCC is distributed in the hope that it will be useful, but WITHOUT
++   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
++   License for more details.
++
++   Under Section 7 of GPL version 3, you are granted additional
++   permissions described in the GCC Runtime Library Exception, version
++   3.1, as published by the Free Software Foundation.
++
++   You should have received a copy of the GNU General Public License
++   and a copy of the GCC Runtime Library Exception along with this
++   program; see the files COPYING3 and COPYING.RUNTIME respectively.
++   If not, see <http://www.gnu.org/licenses/>.  */
++
++#ifdef __mips_hard_float
++
++/* flush denormalized numbers to zero */
++#define _FPU_FLUSH_TZ   0x1000000
++
++/* rounding control */
++#define _FPU_RC_NEAREST 0x0     /* RECOMMENDED */
++#define _FPU_RC_ZERO    0x1
++#define _FPU_RC_UP      0x2
++#define _FPU_RC_DOWN    0x3
++
++/* enable interrupts for IEEE exceptions */
++#define _FPU_IEEE     0x00000F80
++
++/* Macros for accessing the hardware control word.  */
++#define _FPU_GETCW(cw) __asm__ ("cfc1 %0,$31" : "=r" (cw))
++#define _FPU_SETCW(cw) __asm__ ("ctc1 %0,$31" : : "r" (cw))
++
++static void __attribute__((constructor))
++set_fast_math (void)
++{
++  unsigned int fcr;
++
++  /* fastmath: flush to zero, round to nearest, ieee exceptions disabled */
++  fcr = _FPU_FLUSH_TZ | _FPU_RC_NEAREST;
++
++  _FPU_SETCW(fcr);
++}
++
++#endif /* __mips_hard_float */
+--- a/src/gcc/config/mips/crtn.asm
++++ b/src/gcc/config/mips/crtn.asm
+@@ -8,6 +8,7 @@
+ #endif
+ 
+ 	.section .init,"ax",@progbits
++init:	
+ #ifdef __mips64
+ 	ld      RA,40($sp)
+ 	daddu	$sp,$sp,48
+@@ -18,6 +19,7 @@
+ 	j	RA
+ 
+ 	.section .fini,"ax",@progbits
++fini:	
+ #ifdef	__mips64
+ 	ld	RA,40($sp)
+ 	daddu	$sp,$sp,48
+--- a/src/gcc/config/mips/cs-sgxx-linux.h
++++ b/src/gcc/config/mips/cs-sgxx-linux.h
+@@ -0,0 +1,45 @@
++/* MIPS SourceryG++ GNU/Linux Configuration.
++   Copyright (C) 2008
++   Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 3, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++/* We do not need to provide an explicit big-endian multilib.  */
++#undef MULTILIB_DEFAULTS
++#define MULTILIB_DEFAULTS \
++  { "EB" }
++
++/* The various C libraries each have their own subdirectory.  */
++#undef SYSROOT_SUFFIX_SPEC
++#define SYSROOT_SUFFIX_SPEC			\
++"%{muclibc:/uclibc}\
++%{mmicromips:/micromips;\
++mips2|mips3|mips4|march=mips2|march=mips3|march=mips4|march=r6000|\
++march=r4000|march=vr4100|march=vr4111|march=vr4120|march=vr4130|\
++march=vr4300|march=r4400|march=r4600|march=orion|march=r4650|\
++march=loongson2e|march=loongson2f|march=r8000|march=r10000|\
++march=r12000|march=r14000|march=r16000|\
++march=vr5000|march=vr5400|march=vr5500|march=rm7000|\
++march=rm9000:/mips2;\
++mips32|march=mips32|march=4kc|march=4km|march=4kp|march=4ksc|\
++mips64|march=mips64|march=5kc|march=5kf|march=20kc|march=sb1|march=sb1a|\
++march=sr71000|march=xlr:/mips32}\
++%{msoft-float:/soft-float}%{mel|EL:/el}"
++
++#undef SYSROOT_HEADERS_SUFFIX_SPEC
++#define SYSROOT_HEADERS_SUFFIX_SPEC \
++  "%{muclibc:/uclibc}"
+--- a/src/gcc/config/mips/cs-sgxxlite-linux.h
++++ b/src/gcc/config/mips/cs-sgxxlite-linux.h
+@@ -0,0 +1,33 @@
++/* MIPS SourceryG++ GNU/Linux Configuration.
++   Copyright (C) 2008
++   Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 3, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++/* We do not need to provide an explicit big-endian multilib.  */
++#undef MULTILIB_DEFAULTS
++#define MULTILIB_DEFAULTS \
++  { "EB" }
++
++/* The various C libraries each have their own subdirectory.  */
++#undef SYSROOT_SUFFIX_SPEC
++#define SYSROOT_SUFFIX_SPEC \
++"%{muclibc:/uclibc}%{mmicromips:/micromips}%{msoft-float:/soft-float}%{mel|EL:/el}"
++
++#undef SYSROOT_HEADERS_SUFFIX_SPEC
++#define SYSROOT_HEADERS_SUFFIX_SPEC \
++  "%{muclibc:/uclibc}"
+--- a/src/gcc/config/mips/linux-unwind.h
++++ b/src/gcc/config/mips/linux-unwind.h
+@@ -51,6 +51,11 @@
+   _Unwind_Ptr new_cfa, reg_offset;
+   int i;
+ 
++  /* microMIPS frame; the kernel does not have microMIPS signal
++     frames.  */
++  if ((_Unwind_Ptr) pc & 3)
++    return _URC_END_OF_STACK;
++
+   /* 24021061 li v0, 0x1061 (rt_sigreturn)*/
+   /* 0000000c syscall    */
+   /*    or */
+--- a/src/gcc/config/mips/linux.h
++++ b/src/gcc/config/mips/linux.h
+@@ -56,7 +56,7 @@
+    CC1_SPEC itself by config/linux.h, but mips.h overrides CC1_SPEC
+    and provides this hook instead.  */
+ #undef SUBTARGET_CC1_SPEC
+-#define SUBTARGET_CC1_SPEC "%{profile:-p}"
++#define SUBTARGET_CC1_SPEC "%{profile:-p} %{!mjals:-mno-jals}"
+ 
+ /* From iris5.h */
+ /* -G is incompatible with -KPIC which is the default, so only allow objects
+@@ -147,3 +147,19 @@
+ #define DRIVER_SELF_SPECS \
+   BASE_DRIVER_SELF_SPECS, \
+   LINUX_DRIVER_SELF_SPECS
++
++/* Similar to standard Linux, but adding -ffast-math support.  */
++#undef  ENDFILE_SPEC
++#define ENDFILE_SPEC \
++  "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \
++   %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
++
++#undef SUBTARGET_OVERRIDE_OPTIONS
++#define SUBTARGET_OVERRIDE_OPTIONS                                      \
++do {                                                                    \
++  /* microMIPS PLT entries are non-microMIPS.  */			\
++  TARGET_INTERLINK_MIPS16 = 1;						\
++  /* __thread_support is not supported by uClibc.  */                   \
++  if (linux_uclibc)                                             \
++    targetm.have_tls = 0;                                               \
++} while (0)
+--- a/src/gcc/config/mips/linux64.h
++++ b/src/gcc/config/mips/linux64.h
+@@ -69,3 +69,9 @@
+    ieee_quad_format is the default, but let's put this here to make
+    sure nobody thinks we just forgot to set it to something else.  */
+ #define MIPS_TFMODE_FORMAT mips_quad_format
++
++/* Similar to standard Linux, but adding -ffast-math support.  */
++#undef  ENDFILE_SPEC
++#define ENDFILE_SPEC \
++  "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \
++   %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
+--- a/src/gcc/config/mips/micromips.md
++++ b/src/gcc/config/mips/micromips.md
+@@ -0,0 +1,275 @@
++(define_insn "*store_word_multiple"
++  [(match_parallel 0 ""
++       [(set (match_operand:SI 1 "memory_operand")
++	     (match_operand:SI 2 "register_operand"))])]
++  "TARGET_MICROMIPS
++   && micromips_save_restore_pattern_p (true, operands[0])"
++  { return micromips_output_save_restore (true, operands[0]); }
++  [(set_attr "type"	"multimem")
++   (set_attr "can_delay" "no")
++   (set_attr "mode"	"SI")])
++
++(define_insn "*load_word_multiple"
++  [(match_parallel 0 ""
++       [(set (match_operand:SI 1 "register_operand")
++	     (match_operand:SI 2 "memory_operand"))])]
++  "TARGET_MICROMIPS
++   && micromips_save_restore_pattern_p (false, operands[0])"
++  { return micromips_output_save_restore (false, operands[0]); }
++  [(set_attr "type"	"multimem")
++   (set_attr "can_delay" "no")
++   (set_attr "mode"	"SI")])
++
++; For lwp
++(define_peephole2
++  [(set (match_operand:SI 0 "register_operand" "")
++        (match_operand:SI 1 "memory_operand" ""))
++   (set (match_operand:SI 2 "register_operand" "")
++        (match_operand:SI 3 "memory_operand" ""))]
++  "TARGET_MICROMIPS
++   && REGNO (operands[0]) <= GP_REG_LAST
++   && REGNO (operands[2]) <= GP_REG_LAST
++   && ((REGNO (operands[0]) + 1 == REGNO (operands[2])
++	&& micromips_load_store_pair_p (true, false, operands[0], operands[1], operands[3]))
++       || (REGNO (operands[2]) + 1 == REGNO (operands[0])
++	   && micromips_load_store_pair_p (true, true, operands[2], operands[3], operands[1])))"
++  [(parallel [(set (match_dup 0) (match_dup 1))
++              (set (match_dup 2) (match_dup 3))])]
++)
++
++(define_insn "*lwp"
++  [(parallel [(set (match_operand:SI 0 "register_operand")
++		   (match_operand:SI 1 "memory_operand"))
++	      (set (match_operand:SI 2 "register_operand")
++		   (match_operand:SI 3 "memory_operand"))])]
++
++  "TARGET_MICROMIPS
++   && REGNO (operands[0]) <= GP_REG_LAST
++   && REGNO (operands[2]) <= GP_REG_LAST
++   && ((REGNO (operands[0]) + 1 == REGNO (operands[2])
++	&& micromips_load_store_pair_p (true, false, operands[0], operands[1], operands[3]))
++       || (REGNO (operands[2]) + 1 == REGNO (operands[0])
++	   && micromips_load_store_pair_p (true, true, operands[2], operands[3], operands[1])))"
++  {
++    if (REGNO (operands[0]) + 1 == REGNO (operands[2]))
++      micromips_output_load_store_pair (true, operands[0], operands[1]);
++    else
++      micromips_output_load_store_pair (true, operands[2], operands[3]);
++  }
++  [(set_attr "type"	"load")
++   (set_attr "can_delay" "no")
++   (set_attr "mode"	"SI")])
++
++; For swp
++(define_peephole2
++  [(set (match_operand:SI 0 "memory_operand" "")
++        (match_operand:SI 1 "register_operand" ""))
++   (set (match_operand:SI 2 "memory_operand" "")
++        (match_operand:SI 3 "register_operand" ""))]
++  "TARGET_MICROMIPS
++   && REGNO (operands[1]) <= GP_REG_LAST
++   && REGNO (operands[3]) <= GP_REG_LAST
++   && ((REGNO (operands[1]) + 1 == REGNO (operands[3])
++	&& micromips_load_store_pair_p (false, false, operands[1], operands[0], operands[2]))
++       || (REGNO (operands[3]) + 1 == REGNO (operands[1])
++	   && micromips_load_store_pair_p (false, true, operands[3], operands[2], operands[0])))"
++  [(parallel [(set (match_dup 0) (match_dup 1))
++              (set (match_dup 2) (match_dup 3))])]
++)
++
++(define_insn "*swp"
++  [(parallel [(set (match_operand:SI 0 "memory_operand")
++		   (match_operand:SI 1 "register_operand"))
++	      (set (match_operand:SI 2 "memory_operand")
++		   (match_operand:SI 3 "register_operand"))])]
++
++  "TARGET_MICROMIPS
++   && REGNO (operands[1]) <= GP_REG_LAST
++   && REGNO (operands[3]) <= GP_REG_LAST
++   && ((REGNO (operands[1]) + 1 == REGNO (operands[3])
++	&& micromips_load_store_pair_p (false, false, operands[1], operands[0], operands[2]))
++       || (REGNO (operands[3]) + 1 == REGNO (operands[1])
++	   && micromips_load_store_pair_p (false, true, operands[3], operands[2], operands[0])))"
++  {
++    if (REGNO (operands[1]) + 1 == REGNO (operands[3]))
++      micromips_output_load_store_pair (false, operands[1], operands[0]);
++    else
++      micromips_output_load_store_pair (false, operands[3], operands[2]);
++  }
++  [(set_attr "type"	"store")
++   (set_attr "can_delay" "no")
++   (set_attr "mode"	"SI")])
++
++; For jraddiusp
++(define_insn "mips_jraddiusp"
++  [(parallel [(return)
++              (use (reg:SI 31))
++	      (set (reg:SI 29)
++		   (plus:SI (reg:SI 29)
++			    (match_operand 0 "const_int_operand")))])]
++  "TARGET_MICROMIPS"
++  "jraddiusp\t%0"
++  [(set_attr "type"	"trap")
++   (set_attr "can_delay" "no")
++   (set_attr "mode"	"SI")])
++
++; For movep
++(define_peephole2
++  [(set (match_operand:SI 0 "register_operand" "")
++        (match_operand:SI 1 "reg_or_0_operand" ""))
++   (set (match_operand:SI 2 "register_operand" "")
++        (match_operand:SI 3 "reg_or_0_operand" ""))]
++  "TARGET_MICROMIPS
++   && micromips_movep_target_p (operands[0], operands[2])
++   && (operands[1] == CONST0_RTX (SImode)
++       || REGNO (operands[1]) == 0
++       || REGNO (operands[1]) == 2
++       || REGNO (operands[1]) == 3
++       || (REGNO (operands[1]) >= 16 && REGNO (operands[1]) <= 20))
++   && (operands[3] == CONST0_RTX (SImode)
++       || REGNO (operands[3]) == 0
++       || REGNO (operands[3]) == 2
++       || REGNO (operands[3]) == 3
++       || (REGNO (operands[3]) >= 16 && REGNO (operands[3]) <= 20))"
++  [(parallel [(set (match_dup 0) (match_dup 1))
++              (set (match_dup 2) (match_dup 3))])]
++)
++
++(define_peephole2
++  [(set (match_operand:SI 0 "register_operand" "")
++        (match_operand:SI 1 "reg_or_0_operand" ""))
++   (set (match_operand:SF 2 "register_operand" "")
++        (match_operand:SF 3 "const_0_operand" ""))]
++  "TARGET_MICROMIPS
++   && micromips_movep_target_p (operands[0], operands[2])
++   && (operands[1] == CONST0_RTX (SImode)
++       || REGNO (operands[1]) == 0
++       || REGNO (operands[1]) == 2
++       || REGNO (operands[1]) == 3
++       || (REGNO (operands[1]) >= 16 && REGNO (operands[1]) <= 20))
++   && operands[3] == CONST0_RTX (SFmode)"
++  [(parallel [(set (match_dup 0) (match_dup 1))
++              (set (match_dup 2) (match_dup 3))])]
++)
++
++(define_peephole2
++  [(set (match_operand:SF 0 "register_operand" "")
++        (match_operand:SF 1 "const_0_operand" ""))
++   (set (match_operand:SI 2 "register_operand" "")
++        (match_operand:SI 3 "reg_or_0_operand" ""))]
++  "TARGET_MICROMIPS
++   && micromips_movep_target_p (operands[0], operands[2])
++   && operands[1] == CONST0_RTX (SFmode)
++   && (operands[3] == CONST0_RTX (SImode)
++       || REGNO (operands[3]) == 0
++       || REGNO (operands[3]) == 2
++       || REGNO (operands[3]) == 3
++       || (REGNO (operands[3]) >= 16 && REGNO (operands[3]) <= 20))"
++  [(parallel [(set (match_dup 0) (match_dup 1))
++              (set (match_dup 2) (match_dup 3))])]
++)
++
++(define_peephole2
++  [(set (match_operand:SF 0 "register_operand" "")
++        (match_operand:SF 1 "const_0_operand" ""))
++   (set (match_operand:SF 2 "register_operand" "")
++        (match_operand:SF 3 "const_0_operand" ""))]
++  "TARGET_MICROMIPS
++   && micromips_movep_target_p (operands[0], operands[2])
++   && operands[1] == CONST0_RTX (SFmode)
++   && operands[3] == CONST0_RTX (SFmode)"
++  [(parallel [(set (match_dup 0) (match_dup 1))
++              (set (match_dup 2) (match_dup 3))])]
++)
++
++(define_insn "*movepsisi"
++  [(parallel [(set (match_operand:SI 0 "register_operand")
++		   (match_operand:SI 1 "reg_or_0_operand"))
++	      (set (match_operand:SI 2 "register_operand")
++		   (match_operand:SI 3 "reg_or_0_operand"))])]
++  "TARGET_MICROMIPS
++   && micromips_movep_target_p (operands[0], operands[2])
++   && (operands[1] == CONST0_RTX (SImode)
++       || REGNO (operands[1]) == 0
++       || REGNO (operands[1]) == 2
++       || REGNO (operands[1]) == 3
++       || (REGNO (operands[1]) >= 16 && REGNO (operands[1]) <= 20))
++   && (operands[3] == CONST0_RTX (SImode)
++       || REGNO (operands[3]) == 0
++       || REGNO (operands[3]) == 2
++       || REGNO (operands[3]) == 3
++       || (REGNO (operands[3]) >= 16 && REGNO (operands[3]) <= 20))"
++{
++  if (REGNO (operands[0]) < REGNO (operands[2]))
++    return "movep\t%0,%2,%z1,%z3";
++  else
++    return "movep\t%2,%0,%z3,%z1";
++}
++  [(set_attr "type"	"move")
++   (set_attr "can_delay" "no")
++   (set_attr "mode"	"SI")])
++
++(define_insn "*movepsisf"
++  [(parallel [(set (match_operand:SI 0 "register_operand")
++		   (match_operand:SI 1 "reg_or_0_operand"))
++	      (set (match_operand:SF 2 "register_operand")
++		   (match_operand:SF 3 "const_0_operand"))])]
++  "TARGET_MICROMIPS
++   && micromips_movep_target_p (operands[0], operands[2])
++   && (operands[1] == CONST0_RTX (SImode)
++       || REGNO (operands[1]) == 0
++       || REGNO (operands[1]) == 2
++       || REGNO (operands[1]) == 3
++       || (REGNO (operands[1]) >= 16 && REGNO (operands[1]) <= 20))
++   && operands[3] == CONST0_RTX (SFmode)"
++{
++  if (REGNO (operands[0]) < REGNO (operands[2]))
++    return "movep\t%0,%2,%z1,%z3";
++  else
++    return "movep\t%2,%0,%z3,%z1";
++}
++  [(set_attr "type"	"move")
++   (set_attr "can_delay" "no")
++   (set_attr "mode"	"SF")])
++
++(define_insn "*movepsfsi"
++  [(parallel [(set (match_operand:SF 0 "register_operand")
++		   (match_operand:SF 1 "const_0_operand"))
++	      (set (match_operand:SI 2 "register_operand")
++		   (match_operand:SI 3 "reg_or_0_operand"))])]
++  "TARGET_MICROMIPS
++   && micromips_movep_target_p (operands[0], operands[2])
++   && operands[1] == CONST0_RTX (SFmode)
++   && (operands[3] == CONST0_RTX (SImode)
++       || REGNO (operands[3]) == 0
++       || REGNO (operands[3]) == 2
++       || REGNO (operands[3]) == 3
++       || (REGNO (operands[3]) >= 16 && REGNO (operands[3]) <= 20))"
++{
++  if (REGNO (operands[0]) < REGNO (operands[2]))
++    return "movep\t%0,%2,%z1,%z3";
++  else
++    return "movep\t%2,%0,%z3,%z1";
++}
++  [(set_attr "type"	"move")
++   (set_attr "can_delay" "no")
++   (set_attr "mode"	"SF")])
++
++(define_insn "*movepsfsf"
++  [(parallel [(set (match_operand:SF 0 "register_operand")
++		   (match_operand:SF 1 "const_0_operand"))
++	      (set (match_operand:SF 2 "register_operand")
++		   (match_operand:SF 3 "const_0_operand"))])]
++  "TARGET_MICROMIPS
++   && micromips_movep_target_p (operands[0], operands[2])
++   && operands[1] == CONST0_RTX (SFmode)
++   && operands[3] == CONST0_RTX (SFmode)"
++{
++  if (REGNO (operands[0]) < REGNO (operands[2]))
++    return "movep\t%0,%2,%z1,%z3";
++  else
++    return "movep\t%2,%0,%z3,%z1";
++}
++  [(set_attr "type"	"move")
++   (set_attr "can_delay" "no")
++   (set_attr "mode"	"SF")])
+--- a/src/gcc/config/mips/mips-dsp.md
++++ b/src/gcc/config/mips/mips-dsp.md
+@@ -42,9 +42,9 @@
+ 		     (match_operand:DSPV 2 "register_operand" "d")))
+      (set (reg:CCDSP CCDSP_OU_REGNUM)
+ 	  (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_ADDQ))])]
+-  ""
++  "ISA_HAS_DSP"
+   "add<DSPV:dspfmt1>.<DSPV:dspfmt2>\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_add<DSP:dspfmt1>_s_<DSP:dspfmt2>"
+@@ -55,9 +55,9 @@
+ 		      UNSPEC_ADDQ_S))
+      (set (reg:CCDSP CCDSP_OU_REGNUM)
+ 	  (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_ADDQ_S))])]
+-  ""
++  "ISA_HAS_DSP"
+   "add<DSP:dspfmt1>_s.<DSP:dspfmt2>\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalusat")
+    (set_attr "mode"	"SI")])
+ 
+ ;; SUBQ*
+@@ -70,7 +70,7 @@
+ 	  (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_SUBQ))])]
+   "ISA_HAS_DSP"
+   "sub<DSPV:dspfmt1>.<DSPV:dspfmt2>\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_sub<DSP:dspfmt1>_s_<DSP:dspfmt2>"
+@@ -83,7 +83,7 @@
+ 	  (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_SUBQ_S))])]
+   "ISA_HAS_DSP"
+   "sub<DSP:dspfmt1>_s.<DSP:dspfmt2>\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalusat")
+    (set_attr "mode"	"SI")])
+ 
+ ;; ADDSC
+@@ -97,7 +97,7 @@
+ 	  (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_ADDSC))])]
+   "ISA_HAS_DSP"
+   "addsc\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; ADDWC
+@@ -112,7 +112,7 @@
+ 	  (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_ADDWC))])]
+   "ISA_HAS_DSP"
+   "addwc\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; MODSUB
+@@ -123,7 +123,7 @@
+ 		   UNSPEC_MODSUB))]
+   "ISA_HAS_DSP"
+   "modsub\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; RADDU*
+@@ -133,7 +133,7 @@
+ 		   UNSPEC_RADDU_W_QB))]
+   "ISA_HAS_DSP"
+   "raddu.w.qb\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; ABSQ*
+@@ -146,7 +146,7 @@
+ 	  (unspec:CCDSP [(match_dup 1)] UNSPEC_ABSQ_S))])]
+   "ISA_HAS_DSP"
+   "absq_s.<DSPQ:dspfmt2>\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalusat")
+    (set_attr "mode"	"SI")])
+ 
+ ;; PRECRQ*
+@@ -157,7 +157,7 @@
+ 		     UNSPEC_PRECRQ_QB_PH))]
+   "ISA_HAS_DSP"
+   "precrq.qb.ph\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_precrq_ph_w"
+@@ -167,7 +167,7 @@
+ 		     UNSPEC_PRECRQ_PH_W))]
+   "ISA_HAS_DSP"
+   "precrq.ph.w\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_precrq_rs_ph_w"
+@@ -181,7 +181,7 @@
+ 			UNSPEC_PRECRQ_RS_PH_W))])]
+   "ISA_HAS_DSP"
+   "precrq_rs.ph.w\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; PRECRQU*
+@@ -196,7 +196,7 @@
+ 			UNSPEC_PRECRQU_S_QB_PH))])]
+   "ISA_HAS_DSP"
+   "precrqu_s.qb.ph\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalusat")
+    (set_attr "mode"	"SI")])
+ 
+ ;; PRECEQ*
+@@ -206,7 +206,7 @@
+ 		   UNSPEC_PRECEQ_W_PHL))]
+   "ISA_HAS_DSP"
+   "preceq.w.phl\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_preceq_w_phr"
+@@ -215,7 +215,7 @@
+ 		   UNSPEC_PRECEQ_W_PHR))]
+   "ISA_HAS_DSP"
+   "preceq.w.phr\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; PRECEQU*
+@@ -225,7 +225,7 @@
+ 		     UNSPEC_PRECEQU_PH_QBL))]
+   "ISA_HAS_DSP"
+   "precequ.ph.qbl\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_precequ_ph_qbr"
+@@ -234,7 +234,7 @@
+ 		     UNSPEC_PRECEQU_PH_QBR))]
+   "ISA_HAS_DSP"
+   "precequ.ph.qbr\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_precequ_ph_qbla"
+@@ -243,7 +243,7 @@
+ 		     UNSPEC_PRECEQU_PH_QBLA))]
+   "ISA_HAS_DSP"
+   "precequ.ph.qbla\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_precequ_ph_qbra"
+@@ -252,7 +252,7 @@
+ 		     UNSPEC_PRECEQU_PH_QBRA))]
+   "ISA_HAS_DSP"
+   "precequ.ph.qbra\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; PRECEU*
+@@ -262,7 +262,7 @@
+ 		     UNSPEC_PRECEU_PH_QBL))]
+   "ISA_HAS_DSP"
+   "preceu.ph.qbl\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_preceu_ph_qbr"
+@@ -271,7 +271,7 @@
+ 		     UNSPEC_PRECEU_PH_QBR))]
+   "ISA_HAS_DSP"
+   "preceu.ph.qbr\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_preceu_ph_qbla"
+@@ -280,7 +280,7 @@
+ 		     UNSPEC_PRECEU_PH_QBLA))]
+   "ISA_HAS_DSP"
+   "preceu.ph.qbla\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_preceu_ph_qbra"
+@@ -289,7 +289,7 @@
+ 		     UNSPEC_PRECEU_PH_QBRA))]
+   "ISA_HAS_DSP"
+   "preceu.ph.qbra\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; Table 2-2. MIPS DSP ASE Instructions: Shift
+@@ -313,7 +313,7 @@
+     }
+   return "shllv.<DSPV:dspfmt2>\t%0,%1,%2";
+ }
+-  [(set_attr "type"	"shift")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_shll_s_<DSPQ:dspfmt2>"
+@@ -335,7 +335,7 @@
+     }
+   return "shllv_s.<DSPQ:dspfmt2>\t%0,%1,%2";
+ }
+-  [(set_attr "type"	"shift")
++  [(set_attr "type"	"dspalusat")
+    (set_attr "mode"	"SI")])
+ 
+ ;; SHRL*
+@@ -354,7 +354,7 @@
+     }
+   return "shrlv.qb\t%0,%1,%2";
+ }
+-  [(set_attr "type"	"shift")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; SHRA*
+@@ -373,7 +373,7 @@
+     }
+   return "shrav.ph\t%0,%1,%2";
+ }
+-  [(set_attr "type"	"shift")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_shra_r_<DSPQ:dspfmt2>"
+@@ -392,7 +392,7 @@
+     }
+   return "shrav_r.<DSPQ:dspfmt2>\t%0,%1,%2";
+ }
+-  [(set_attr "type"	"shift")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; Table 2-3. MIPS DSP ASE Instructions: Multiply
+@@ -478,7 +478,7 @@
+ 		   UNSPEC_DPAU_H_QBL))]
+   "ISA_HAS_DSP && !TARGET_64BIT"
+   "dpau.h.qbl\t%q0,%2,%3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_dpau_h_qbr"
+@@ -489,7 +489,7 @@
+ 		   UNSPEC_DPAU_H_QBR))]
+   "ISA_HAS_DSP && !TARGET_64BIT"
+   "dpau.h.qbr\t%q0,%2,%3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ ;; DPSU*
+@@ -501,7 +501,7 @@
+ 		   UNSPEC_DPSU_H_QBL))]
+   "ISA_HAS_DSP && !TARGET_64BIT"
+   "dpsu.h.qbl\t%q0,%2,%3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_dpsu_h_qbr"
+@@ -512,7 +512,7 @@
+ 		   UNSPEC_DPSU_H_QBR))]
+   "ISA_HAS_DSP && !TARGET_64BIT"
+   "dpsu.h.qbr\t%q0,%2,%3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ ;; DPAQ*
+@@ -528,7 +528,7 @@
+ 			UNSPEC_DPAQ_S_W_PH))])]
+   "ISA_HAS_DSP && !TARGET_64BIT"
+   "dpaq_s.w.ph\t%q0,%2,%3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ ;; DPSQ*
+@@ -544,7 +544,7 @@
+ 			UNSPEC_DPSQ_S_W_PH))])]
+   "ISA_HAS_DSP && !TARGET_64BIT"
+   "dpsq_s.w.ph\t%q0,%2,%3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ ;; MULSAQ*
+@@ -560,7 +560,7 @@
+ 			UNSPEC_MULSAQ_S_W_PH))])]
+   "ISA_HAS_DSP && !TARGET_64BIT"
+   "mulsaq_s.w.ph\t%q0,%2,%3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ ;; DPAQ*
+@@ -576,7 +576,7 @@
+ 			UNSPEC_DPAQ_SA_L_W))])]
+   "ISA_HAS_DSP && !TARGET_64BIT"
+   "dpaq_sa.l.w\t%q0,%2,%3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmacsat")
+    (set_attr "mode"	"SI")])
+ 
+ ;; DPSQ*
+@@ -592,7 +592,7 @@
+ 			UNSPEC_DPSQ_SA_L_W))])]
+   "ISA_HAS_DSP && !TARGET_64BIT"
+   "dpsq_sa.l.w\t%q0,%2,%3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmacsat")
+    (set_attr "mode"	"SI")])
+ 
+ ;; MAQ*
+@@ -608,7 +608,7 @@
+ 			UNSPEC_MAQ_S_W_PHL))])]
+   "ISA_HAS_DSP && !TARGET_64BIT"
+   "maq_s.w.phl\t%q0,%2,%3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_maq_s_w_phr"
+@@ -623,7 +623,7 @@
+ 			UNSPEC_MAQ_S_W_PHR))])]
+   "ISA_HAS_DSP && !TARGET_64BIT"
+   "maq_s.w.phr\t%q0,%2,%3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ ;; MAQ_SA*
+@@ -639,7 +639,7 @@
+ 			UNSPEC_MAQ_SA_W_PHL))])]
+   "ISA_HAS_DSP && !TARGET_64BIT"
+   "maq_sa.w.phl\t%q0,%2,%3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmacsat")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_maq_sa_w_phr"
+@@ -654,7 +654,7 @@
+ 			UNSPEC_MAQ_SA_W_PHR))])]
+   "ISA_HAS_DSP && !TARGET_64BIT"
+   "maq_sa.w.phr\t%q0,%2,%3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmacsat")
+    (set_attr "mode"	"SI")])
+ 
+ ;; Table 2-4. MIPS DSP ASE Instructions: General Bit/Manipulation
+@@ -665,7 +665,7 @@
+ 		   UNSPEC_BITREV))]
+   "ISA_HAS_DSP"
+   "bitrev\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; INSV
+@@ -678,7 +678,7 @@
+ 		   UNSPEC_INSV))]
+   "ISA_HAS_DSP"
+   "insv\t%0,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; REPL*
+@@ -696,7 +696,7 @@
+     }
+   return "replv.qb\t%0,%1";
+ }
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_repl_ph"
+@@ -707,7 +707,7 @@
+   "@
+    repl.ph\t%0,%1
+    replv.ph\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; Table 2-5. MIPS DSP ASE Instructions: Compare-Pick
+@@ -720,7 +720,7 @@
+ 		      UNSPEC_CMP_EQ))]
+   "ISA_HAS_DSP"
+   "cmp<DSPV:dspfmt1_1>.eq.<DSPV:dspfmt2>\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_cmp<DSPV:dspfmt1_1>_lt_<DSPV:dspfmt2>"
+@@ -731,7 +731,7 @@
+ 		      UNSPEC_CMP_LT))]
+   "ISA_HAS_DSP"
+   "cmp<DSPV:dspfmt1_1>.lt.<DSPV:dspfmt2>\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_cmp<DSPV:dspfmt1_1>_le_<DSPV:dspfmt2>"
+@@ -742,7 +742,7 @@
+ 		      UNSPEC_CMP_LE))]
+   "ISA_HAS_DSP"
+   "cmp<DSPV:dspfmt1_1>.le.<DSPV:dspfmt2>\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_cmpgu_eq_qb"
+@@ -752,7 +752,7 @@
+ 		   UNSPEC_CMPGU_EQ_QB))]
+   "ISA_HAS_DSP"
+   "cmpgu.eq.qb\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_cmpgu_lt_qb"
+@@ -762,7 +762,7 @@
+ 		   UNSPEC_CMPGU_LT_QB))]
+   "ISA_HAS_DSP"
+   "cmpgu.lt.qb\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_cmpgu_le_qb"
+@@ -772,7 +772,7 @@
+ 		   UNSPEC_CMPGU_LE_QB))]
+   "ISA_HAS_DSP"
+   "cmpgu.le.qb\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; PICK*
+@@ -784,7 +784,7 @@
+ 		     UNSPEC_PICK))]
+   "ISA_HAS_DSP"
+   "pick.<DSPV:dspfmt2>\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; PACKRL*
+@@ -795,7 +795,7 @@
+ 		     UNSPEC_PACKRL_PH))]
+   "ISA_HAS_DSP"
+   "packrl.ph\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; Table 2-6. MIPS DSP ASE Instructions: Accumulator and DSPControl Access
+@@ -818,7 +818,7 @@
+     }
+   return "extrv.w\t%0,%q1,%2";
+ }
+-  [(set_attr "type"	"mfhilo")
++  [(set_attr "type"	"accext")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_extr_r_w"
+@@ -839,7 +839,7 @@
+     }
+   return "extrv_r.w\t%0,%q1,%2";
+ }
+-  [(set_attr "type"	"mfhilo")
++  [(set_attr "type"	"accext")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_extr_rs_w"
+@@ -860,7 +860,7 @@
+     }
+   return "extrv_rs.w\t%0,%q1,%2";
+ }
+-  [(set_attr "type"	"mfhilo")
++  [(set_attr "type"	"accext")
+    (set_attr "mode"	"SI")])
+ 
+ ;; EXTR*_S.H
+@@ -882,7 +882,7 @@
+     }
+   return "extrv_s.h\t%0,%q1,%2";
+ }
+-  [(set_attr "type"	"mfhilo")
++  [(set_attr "type"	"accext")
+    (set_attr "mode"	"SI")])
+ 
+ ;; EXTP*
+@@ -905,7 +905,7 @@
+     }
+   return "extpv\t%0,%q1,%2";
+ }
+-  [(set_attr "type"	"mfhilo")
++  [(set_attr "type"	"accext")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_extpdp"
+@@ -930,7 +930,7 @@
+     }
+   return "extpdpv\t%0,%q1,%2";
+ }
+-  [(set_attr "type"	"mfhilo")
++  [(set_attr "type"	"accext")
+    (set_attr "mode"	"SI")])
+ 
+ ;; SHILO*
+@@ -949,7 +949,7 @@
+     }
+   return "shilov\t%q0,%2";
+ }
+-  [(set_attr "type"	"mfhilo")
++  [(set_attr "type"	"accmod")
+    (set_attr "mode"	"SI")])
+ 
+ ;; MTHLIP*
+@@ -965,7 +965,7 @@
+ 			 (reg:CCDSP CCDSP_PO_REGNUM)] UNSPEC_MTHLIP))])]
+   "ISA_HAS_DSP && !TARGET_64BIT"
+   "mthlip\t%2,%q0"
+-  [(set_attr "type"	"mfhilo")
++  [(set_attr "type"	"accmod")
+    (set_attr "mode"	"SI")])
+ 
+ ;; WRDSP
+@@ -987,7 +987,7 @@
+ 	  (unspec:CCDSP [(match_dup 0) (match_dup 1)] UNSPEC_WRDSP))])]
+   "ISA_HAS_DSP"
+   "wrdsp\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; RDDSP
+@@ -1003,7 +1003,7 @@
+ 		   UNSPEC_RDDSP))]
+   "ISA_HAS_DSP"
+   "rddsp\t%0,%1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ ;; Table 2-7. MIPS DSP ASE Instructions: Indexed-Load
+--- a/src/gcc/config/mips/mips-dspr2.md
++++ b/src/gcc/config/mips/mips-dspr2.md
+@@ -9,7 +9,7 @@
+ 	  (unspec:CCDSP [(match_dup 1)] UNSPEC_ABSQ_S_QB))])]
+   "ISA_HAS_DSPR2"
+   "absq_s.qb\t%0,%z1"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalusat")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_addu_ph"
+@@ -21,7 +21,7 @@
+ 	  (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_ADDU_PH))])]
+   "ISA_HAS_DSPR2"
+   "addu.ph\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_addu_s_ph"
+@@ -34,7 +34,7 @@
+ 	  (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_ADDU_S_PH))])]
+   "ISA_HAS_DSPR2"
+   "addu_s.ph\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalusat")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_adduh_qb"
+@@ -44,7 +44,7 @@
+ 		     UNSPEC_ADDUH_QB))]
+   "ISA_HAS_DSPR2"
+   "adduh.qb\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_adduh_r_qb"
+@@ -54,7 +54,7 @@
+ 		     UNSPEC_ADDUH_R_QB))]
+   "ISA_HAS_DSPR2"
+   "adduh_r.qb\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalusat")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_append"
+@@ -69,7 +69,7 @@
+     operands[2] = GEN_INT (INTVAL (operands[2]) & 31);
+   return "append\t%0,%z2,%3";
+ }
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_balign"
+@@ -84,7 +84,7 @@
+     operands[2] = GEN_INT (INTVAL (operands[2]) & 3);
+   return "balign\t%0,%z2,%3";
+ }
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_cmpgdu_eq_qb"
+@@ -99,7 +99,7 @@
+ 			UNSPEC_CMPGDU_EQ_QB))])]
+   "ISA_HAS_DSPR2"
+   "cmpgdu.eq.qb\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_cmpgdu_lt_qb"
+@@ -114,7 +114,7 @@
+ 			UNSPEC_CMPGDU_LT_QB))])]
+   "ISA_HAS_DSPR2"
+   "cmpgdu.lt.qb\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_cmpgdu_le_qb"
+@@ -129,7 +129,7 @@
+ 			UNSPEC_CMPGDU_LE_QB))])]
+   "ISA_HAS_DSPR2"
+   "cmpgdu.le.qb\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_dpa_w_ph"
+@@ -140,7 +140,7 @@
+ 		   UNSPEC_DPA_W_PH))]
+   "ISA_HAS_DSPR2 && !TARGET_64BIT"
+   "dpa.w.ph\t%q0,%z2,%z3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_dps_w_ph"
+@@ -151,7 +151,7 @@
+ 		   UNSPEC_DPS_W_PH))]
+   "ISA_HAS_DSPR2 && !TARGET_64BIT"
+   "dps.w.ph\t%q0,%z2,%z3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ (define_expand "mips_madd<u>"
+@@ -247,7 +247,7 @@
+ 		   UNSPEC_MULSA_W_PH))]
+   "ISA_HAS_DSPR2 && !TARGET_64BIT"
+   "mulsa.w.ph\t%q0,%z2,%z3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_mult"
+@@ -277,7 +277,7 @@
+ 		     UNSPEC_PRECR_QB_PH))]
+   "ISA_HAS_DSPR2"
+   "precr.qb.ph\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_precr_sra_ph_w"
+@@ -292,7 +292,7 @@
+     operands[2] = GEN_INT (INTVAL (operands[2]) & 31);
+   return "precr_sra.ph.w\t%0,%z2,%3";
+ }
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_precr_sra_r_ph_w"
+@@ -307,7 +307,7 @@
+     operands[2] = GEN_INT (INTVAL (operands[2]) & 31);
+   return "precr_sra_r.ph.w\t%0,%z2,%3";
+ }
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_prepend"
+@@ -322,7 +322,7 @@
+     operands[2] = GEN_INT (INTVAL (operands[2]) & 31);
+   return "prepend\t%0,%z2,%3";
+ }
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_shra_qb"
+@@ -340,7 +340,7 @@
+     }
+   return "shrav.qb\t%0,%z1,%2";
+ }
+-  [(set_attr "type"	"shift")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ 
+@@ -359,7 +359,7 @@
+     }
+   return "shrav_r.qb\t%0,%z1,%2";
+ }
+-  [(set_attr "type"	"shift")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_shrl_ph"
+@@ -377,7 +377,7 @@
+     }
+   return "shrlv.ph\t%0,%z1,%2";
+ }
+-  [(set_attr "type"	"shift")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_subu_ph"
+@@ -390,7 +390,7 @@
+ 	  (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_SUBU_PH))])]
+   "ISA_HAS_DSPR2"
+   "subu.ph\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_subu_s_ph"
+@@ -403,7 +403,7 @@
+ 	  (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_SUBU_S_PH))])]
+   "ISA_HAS_DSPR2"
+   "subu_s.ph\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalusat")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_subuh_qb"
+@@ -413,7 +413,7 @@
+ 		     UNSPEC_SUBUH_QB))]
+   "ISA_HAS_DSPR2"
+   "subuh.qb\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_subuh_r_qb"
+@@ -423,7 +423,7 @@
+ 		     UNSPEC_SUBUH_R_QB))]
+   "ISA_HAS_DSPR2"
+   "subuh_r.qb\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_addqh_ph"
+@@ -433,7 +433,7 @@
+ 		     UNSPEC_ADDQH_PH))]
+   "ISA_HAS_DSPR2"
+   "addqh.ph\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_addqh_r_ph"
+@@ -443,7 +443,7 @@
+ 		     UNSPEC_ADDQH_R_PH))]
+   "ISA_HAS_DSPR2"
+   "addqh_r.ph\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_addqh_w"
+@@ -453,7 +453,7 @@
+ 		   UNSPEC_ADDQH_W))]
+   "ISA_HAS_DSPR2"
+   "addqh.w\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_addqh_r_w"
+@@ -463,7 +463,7 @@
+ 		   UNSPEC_ADDQH_R_W))]
+   "ISA_HAS_DSPR2"
+   "addqh_r.w\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_subqh_ph"
+@@ -473,7 +473,7 @@
+ 		     UNSPEC_SUBQH_PH))]
+   "ISA_HAS_DSPR2"
+   "subqh.ph\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_subqh_r_ph"
+@@ -483,7 +483,7 @@
+ 		     UNSPEC_SUBQH_R_PH))]
+   "ISA_HAS_DSPR2"
+   "subqh_r.ph\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_subqh_w"
+@@ -493,7 +493,7 @@
+ 		   UNSPEC_SUBQH_W))]
+   "ISA_HAS_DSPR2"
+   "subqh.w\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_subqh_r_w"
+@@ -503,7 +503,7 @@
+ 		   UNSPEC_SUBQH_R_W))]
+   "ISA_HAS_DSPR2"
+   "subqh_r.w\t%0,%z1,%z2"
+-  [(set_attr "type"	"arith")
++  [(set_attr "type"	"dspalu")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_dpax_w_ph"
+@@ -514,7 +514,7 @@
+ 		   UNSPEC_DPAX_W_PH))]
+   "ISA_HAS_DSPR2 && !TARGET_64BIT"
+   "dpax.w.ph\t%q0,%z2,%z3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_dpsx_w_ph"
+@@ -525,7 +525,7 @@
+ 		   UNSPEC_DPSX_W_PH))]
+   "ISA_HAS_DSPR2 && !TARGET_64BIT"
+   "dpsx.w.ph\t%q0,%z2,%z3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_dpaqx_s_w_ph"
+@@ -540,7 +540,7 @@
+ 			UNSPEC_DPAQX_S_W_PH))])]
+   "ISA_HAS_DSPR2 && !TARGET_64BIT"
+   "dpaqx_s.w.ph\t%q0,%z2,%z3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_dpaqx_sa_w_ph"
+@@ -555,7 +555,7 @@
+ 			UNSPEC_DPAQX_SA_W_PH))])]
+   "ISA_HAS_DSPR2 && !TARGET_64BIT"
+   "dpaqx_sa.w.ph\t%q0,%z2,%z3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmacsat")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_dpsqx_s_w_ph"
+@@ -570,7 +570,7 @@
+ 			UNSPEC_DPSQX_S_W_PH))])]
+   "ISA_HAS_DSPR2 && !TARGET_64BIT"
+   "dpsqx_s.w.ph\t%q0,%z2,%z3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmac")
+    (set_attr "mode"	"SI")])
+ 
+ (define_insn "mips_dpsqx_sa_w_ph"
+@@ -585,5 +585,43 @@
+ 			UNSPEC_DPSQX_SA_W_PH))])]
+   "ISA_HAS_DSPR2 && !TARGET_64BIT"
+   "dpsqx_sa.w.ph\t%q0,%z2,%z3"
+-  [(set_attr "type"	"imadd")
++  [(set_attr "type"	"dspmacsat")
++   (set_attr "mode"	"SI")])
++
++;; Convert  mtlo $ac[1-3],$0  =>  mult $ac[1-3],$0,$0
++;;          mthi $ac[1-3],$0
++(define_peephole2
++  [(set (match_operand:SI 0 "register_operand" "")
++	(const_int 0))
++   (set (match_operand:SI 1 "register_operand" "")
++	(const_int 0))]
++  "ISA_HAS_DSPR2
++   && !TARGET_MIPS16
++   && !TARGET_64BIT
++   && (((true_regnum (operands[0]) == AC1LO_REGNUM
++		     && true_regnum (operands[1]) == AC1HI_REGNUM)
++	|| (true_regnum (operands[0]) == AC1HI_REGNUM
++			&& true_regnum (operands[1]) == AC1LO_REGNUM))
++       || ((true_regnum (operands[0]) == AC2LO_REGNUM
++			&& true_regnum (operands[1]) == AC2HI_REGNUM)
++	   || (true_regnum (operands[0]) == AC2HI_REGNUM
++			&& true_regnum (operands[1]) == AC2LO_REGNUM))
++       || ((true_regnum (operands[0]) == AC3LO_REGNUM
++		     && true_regnum (operands[1]) == AC3HI_REGNUM)
++	   || (true_regnum (operands[0]) == AC3HI_REGNUM
++			   && true_regnum (operands[1]) == AC3LO_REGNUM)))"
++  [(parallel [(set (match_dup 0) (const_int 0))
++	      (set (match_dup 1) (const_int 0))])]
++)
++
++(define_insn "*mips_acc_init"
++  [(parallel [(set (match_operand:SI 0 "register_operand" "=a")
++	      (const_int 0))
++	      (set (match_operand:SI 1 "register_operand" "=a")
++	      (const_int 0))])]
++  "ISA_HAS_DSPR2
++   && !TARGET_MIPS16
++   && !TARGET_64BIT"
++  "mult\t%q0,$0,$0\t\t# Clear ACC HI/LO"
++  [(set_attr "type"	"imul")
+    (set_attr "mode"	"SI")])
+--- a/src/gcc/config/mips/mips-protos.h
++++ b/src/gcc/config/mips/mips-protos.h
+@@ -186,7 +186,7 @@
+ extern int mips_regno_mode_ok_for_base_p (int, enum machine_mode, bool);
+ extern bool mips_legitimate_address_p (enum machine_mode, rtx, bool);
+ extern bool mips_stack_address_p (rtx, enum machine_mode);
+-extern int mips_address_insns (rtx, enum machine_mode, bool);
++extern int mips_address_insns (rtx, enum machine_mode, bool, bool);
+ extern int mips_const_insns (rtx);
+ extern int mips_split_const_insns (rtx);
+ extern int mips_load_store_insns (rtx, rtx);
+@@ -261,6 +261,8 @@
+ extern void mips_output_external (FILE *, tree, const char *);
+ extern void mips_output_filename (FILE *, const char *);
+ extern void mips_output_ascii (FILE *, const char *, size_t);
++extern void octeon_output_shared_variable (FILE *, tree, const char *,
++					   unsigned HOST_WIDE_INT, int);
+ extern void mips_output_aligned_decl_common (FILE *, tree, const char *,
+ 					     unsigned HOST_WIDE_INT,
+ 					     unsigned int);
+@@ -307,6 +309,8 @@
+ extern bool mips_linked_madd_p (rtx, rtx);
+ extern bool mips_store_data_bypass_p (rtx, rtx);
+ extern rtx mips_prefetch_cookie (rtx, rtx);
++extern int mips_mult_madd_chain_bypass_p (rtx, rtx);
++extern int mips_dspalu_bypass_p (rtx, rtx);
+ 
+ extern void irix_asm_output_align (FILE *, unsigned);
+ extern const char *current_section_name (void);
+@@ -331,5 +335,13 @@
+ 				     rtx, rtx, rtx, rtx);
+ 
+ extern void mips_expand_vector_init (rtx, rtx);
++extern const char *micromips_output_save_restore (bool, rtx);
++extern bool micromips_save_restore_pattern_p (bool, rtx);
++extern bool micromips_load_store_pair_p (bool, bool, rtx, rtx, rtx);
++extern const char *micromips_output_load_store_pair (bool, rtx, rtx);
++extern bool micromips_movep_target_p (rtx, rtx);
++
++extern bool mips_epilogue_uses (unsigned int);
++extern void mips_final_prescan_insn (rtx, rtx *, int);
+ 
+ #endif /* ! GCC_MIPS_PROTOS_H */
+--- a/src/gcc/config/mips/mips.c
++++ b/src/gcc/config/mips/mips.c
+@@ -81,6 +81,10 @@
+    preserve the maximum stack alignment.  We therefore use a value
+    of 0x7ff0 in this case.
+ 
++   microMIPS LWM and SWM support 12-bit offsets (from -2048 to 2047) and
++   to preserve the maximum stack alignment, so 0x7f0 is used when
++   TARGET_MICROMIPS.
++
+    MIPS16e SAVE and RESTORE instructions can adjust the stack pointer by
+    up to 0x7f8 bytes and can usually save or restore all the registers
+    that we need to save or restore.  (Note that we can only use these
+@@ -91,7 +95,8 @@
+    to save and restore registers, and to allocate and deallocate the top
+    part of the frame.  */
+ #define MIPS_MAX_FIRST_STACK_STEP					\
+-  (!TARGET_MIPS16 ? 0x7ff0						\
++  ((!TARGET_MIPS16 && !TARGET_MICROMIPS) ? 0x7ff0			\
++   : TARGET_MICROMIPS ? 0x7f0						\
+    : GENERATE_MIPS16E_SAVE_RESTORE ? 0x7f8				\
+    : TARGET_64BIT ? 0x100 : 0x400)
+ 
+@@ -261,18 +266,29 @@
+   /* Likewise FPR X.  */
+   unsigned int fmask;
+ 
+-  /* The number of GPRs and FPRs saved.  */
++  /* Likewise doubleword accumulator X ($acX).  */
++  unsigned int acc_mask;
++
++  /* The number of GPRs, FPRs, doubleword accumulators and COP0
++     registers saved.  */
+   unsigned int num_gp;
+   unsigned int num_fp;
++  unsigned int num_acc;
++  unsigned int num_cop0_regs;
+ 
+-  /* The offset of the topmost GPR and FPR save slots from the top of
+-     the frame, or zero if no such slots are needed.  */
++  /* The offset of the topmost GPR, FPR, accumulator and COP0-register
++     save slots from the top of the frame, or zero if no such slots are
++     needed.  */
+   HOST_WIDE_INT gp_save_offset;
+   HOST_WIDE_INT fp_save_offset;
++  HOST_WIDE_INT acc_save_offset;
++  HOST_WIDE_INT cop0_save_offset;
+ 
+   /* Likewise, but giving offsets from the bottom of the frame.  */
+   HOST_WIDE_INT gp_sp_offset;
+   HOST_WIDE_INT fp_sp_offset;
++  HOST_WIDE_INT acc_sp_offset;
++  HOST_WIDE_INT cop0_sp_offset;
+ 
+   /* The offset of arg_pointer_rtx from frame_pointer_rtx.  */
+   HOST_WIDE_INT arg_pointer_offset;
+@@ -310,6 +326,20 @@
+   /* True if we have emitted an instruction to initialize
+      mips16_gp_pseudo_rtx.  */
+   bool initialized_mips16_gp_pseudo_p;
++
++  /* True if this is an interrupt handler.  */
++  bool interrupt_handler_p;
++
++  /* True if this is an interrupt handler that uses shadow registers.  */
++  bool use_shadow_register_set_p;
++
++  /* True if this is an interrupt handler that should keep interrupts
++     masked.  */
++  bool keep_interrupts_masked_p;
++
++  /* True if this is an interrupt handler that should use DERET
++     instead of ERET.  */
++  bool use_debug_exception_return_p;
+ };
+ 
+ /* Information about a single argument.  */
+@@ -452,6 +482,9 @@
+ /* True if MIPS16 is the default mode.  */
+ bool mips_base_mips16;
+ 
++/* True if microMIPS is the default mode.  */
++bool mips_base_micromips;
++
+ /* The ambient values of other global variables.  */
+ static int mips_base_schedule_insns; /* flag_schedule_insns */
+ static int mips_base_reorder_blocks_and_partition; /* flag_reorder... */
+@@ -542,9 +575,16 @@
+   ALL_REGS,	ALL_REGS,	ALL_REGS,	ALL_REGS
+ };
+ 
++#ifdef CVMX_SHARED_BSS_FLAGS
++static tree octeon_handle_cvmx_shared_attribute (tree *, tree, tree, int, bool *);
++#endif
++
+ /* The value of TARGET_ATTRIBUTE_TABLE.  */
+ const struct attribute_spec mips_attribute_table[] = {
+   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
++#ifdef CVMX_SHARED_BSS_FLAGS
++  { "cvmx_shared", 0, 0, true, false, false, octeon_handle_cvmx_shared_attribute },
++#endif
+   { "long_call",   0, 0, false, true,  true,  NULL },
+   { "far",     	   0, 0, false, true,  true,  NULL },
+   { "near",        0, 0, false, true,  true,  NULL },
+@@ -554,6 +594,13 @@
+      code generation but don't carry other semantics.  */
+   { "mips16", 	   0, 0, true,  false, false, NULL },
+   { "nomips16",    0, 0, true,  false, false, NULL },
++  { "micromips",   0, 0, true,  false, false, NULL },
++  { "nomicromips", 0, 0, true,  false, false, NULL },
++  /* Allow functions to be specified as interrupt handlers */
++  { "interrupt",   0, 0, false, true,  true, NULL },
++  { "use_shadow_register_set",	0, 0, false, true,  true, NULL },
++  { "keep_interrupts_masked",	0, 0, false, true,  true, NULL },
++  { "use_debug_exception_return", 0, 0, false, true,  true, NULL },
+   { NULL,	   0, 0, false, false, false, NULL }
+ };
+ 
+@@ -625,6 +672,8 @@
+ 
+   /* MIPS32 Release 2 processors.  */
+   { "m4k", PROCESSOR_M4K, 33, 0 },
++  { "m14kc", PROCESSOR_M4K, 33, 0 },
++  { "m14k", PROCESSOR_M4K, 33, 0 },
+   { "4kec", PROCESSOR_4KC, 33, 0 },
+   { "4kem", PROCESSOR_4KC, 33, 0 },
+   { "4kep", PROCESSOR_4KP, 33, 0 },
+@@ -659,6 +708,11 @@
+   { "74kx", PROCESSOR_74KF1_1, 33, 0 },
+   { "74kf3_2", PROCESSOR_74KF3_2, 33, 0 },
+ 
++  { "1004kc", PROCESSOR_24KC, 33, 0 }, /* 1004K with MT/DSP.  */
++  { "1004kf2_1", PROCESSOR_24KF2_1, 33, 0 },
++  { "1004kf", PROCESSOR_24KF2_1, 33, 0 },
++  { "1004kf1_1", PROCESSOR_24KF1_1, 33, 0 },
++
+   /* MIPS64 processors.  */
+   { "5kc", PROCESSOR_5KC, 64, 0 },
+   { "5kf", PROCESSOR_5KF, 64, 0 },
+@@ -1064,13 +1118,7 @@
+     DEFAULT_COSTS
+   },
+   { /* XLR */
+-    /* Need to replace first five with the costs of calling the appropriate 
+-       libgcc routine.  */
+-    COSTS_N_INSNS (256),          /* fp_add */
+-    COSTS_N_INSNS (256),          /* fp_mult_sf */
+-    COSTS_N_INSNS (256),          /* fp_mult_df */
+-    COSTS_N_INSNS (256),          /* fp_div_sf */
+-    COSTS_N_INSNS (256),          /* fp_div_df */
++    SOFT_FP_COSTS,
+     COSTS_N_INSNS (8),            /* int_mult_si */
+     COSTS_N_INSNS (8),            /* int_mult_di */
+     COSTS_N_INSNS (72),           /* int_div_si */
+@@ -1172,6 +1220,42 @@
+   return lookup_attribute ("nomips16", DECL_ATTRIBUTES (decl)) != NULL;
+ }
+ 
++/* Check if the interrupt attribute is set for a function.  */
++
++static bool
++mips_interrupt_type_p (tree type)
++{
++  return lookup_attribute ("interrupt", TYPE_ATTRIBUTES (type)) != NULL;
++}
++
++/* Check if the attribute to use shadow register set is set for a function.  */
++
++static bool
++mips_use_shadow_register_set_p (tree type)
++{
++  return lookup_attribute ("use_shadow_register_set",
++			   TYPE_ATTRIBUTES (type)) != NULL;
++}
++
++/* Check if the attribute to keep interrupts masked is set for a function.  */
++
++static bool
++mips_keep_interrupts_masked_p (tree type)
++{
++  return lookup_attribute ("keep_interrupts_masked",
++			   TYPE_ATTRIBUTES (type)) != NULL;
++}
++
++/* Check if the attribute to use debug exception return is set for
++   a function.  */
++
++static bool
++mips_use_debug_exception_return_p (tree type)
++{
++  return lookup_attribute ("use_debug_exception_return",
++			   TYPE_ATTRIBUTES (type)) != NULL;
++}
++
+ /* Return true if function DECL is a MIPS16 function.  Return the ambient
+    setting if DECL is null.  */
+ 
+@@ -1193,6 +1277,41 @@
+   return mips_base_mips16;
+ }
+ 
++/* Similar predicates for "micromips"/"nomicromips" function attributes.  */
++
++static bool
++mips_micromips_decl_p (const_tree decl)
++{
++  return lookup_attribute ("micromips", DECL_ATTRIBUTES (decl)) != NULL;
++}
++
++static bool
++mips_nomicromips_decl_p (const_tree decl)
++{
++  return lookup_attribute ("nomicromips", DECL_ATTRIBUTES (decl)) != NULL;
++}
++
++/* Return true if function DECL is a microMIPS function.  Return the ambient
++   setting if DECL is null.  */
++
++static bool
++mips_use_micromips_mode_p (tree decl)
++{
++  if (decl)
++    {
++      /* Nested functions must use the same frame pointer as their
++	 parent and must therefore use the same ISA mode.  */
++      tree parent = decl_function_context (decl);
++      if (parent)
++	decl = parent;
++      if (mips_micromips_decl_p (decl))
++	return true;
++      if (mips_nomicromips_decl_p (decl))
++	return false;
++    }
++  return mips_base_micromips;
++}
++
+ /* Implement TARGET_COMP_TYPE_ATTRIBUTES.  */
+ 
+ static int
+@@ -1213,16 +1332,23 @@
+ {
+   const char *name;
+   bool mips16_p, nomips16_p;
++  bool micromips_p, nomicromips_p;
+ 
+   /* Check for "mips16" and "nomips16" attributes.  */
+   mips16_p = lookup_attribute ("mips16", *attributes) != NULL;
+   nomips16_p = lookup_attribute ("nomips16", *attributes) != NULL;
++  micromips_p = lookup_attribute ("micromips", *attributes) != NULL;
++  nomicromips_p = lookup_attribute ("nomicromips", *attributes) != NULL;
+   if (TREE_CODE (decl) != FUNCTION_DECL)
+     {
+       if (mips16_p)
+ 	error ("%qs attribute only applies to functions", "mips16");
+       if (nomips16_p)
+ 	error ("%qs attribute only applies to functions", "nomips16");
++      if (micromips_p)
++	error ("%qs attribute only applies to functions", "micromips");
++      if (nomicromips_p)
++	error ("%qs attribute only applies to functions", "nomicromips");
+     }
+   else
+     {
+@@ -1244,6 +1370,21 @@
+ 	  name = mflip_mips16_use_mips16_p (decl) ? "mips16" : "nomips16";
+ 	  *attributes = tree_cons (get_identifier (name), NULL, *attributes);
+ 	}
++
++      micromips_p |= mips_micromips_decl_p (decl);
++      nomicromips_p |= mips_nomicromips_decl_p (decl);
++      if (micromips_p || nomicromips_p)
++	{
++	  /* DECL cannot be simultaneously "micromips" and "nomicromips".  */
++	  if (micromips_p && nomicromips_p)
++	    error ("%qs cannot have both %<micromips%> and "
++		   "%<nomicromips%> attributes",
++		   IDENTIFIER_POINTER (DECL_NAME (decl)));
++	}
++
++      if (mips16_p && micromips_p)
++	error ("%qs cannot have both %<mips16%> and %<micromips%> attributes",
++	       IDENTIFIER_POINTER (DECL_NAME (decl)));
+     }
+ }
+ 
+@@ -2132,10 +2273,14 @@
+    if MIGHT_SPLIT_P, otherwise assume that a single load or store is
+    enough.
+ 
++   If CHECK_MICROMIPS_12BIT_P, we check if the address is within a 12-bit
++   offset for microMIPS.
++
+    For MIPS16 code, count extended instructions as two instructions.  */
+ 
+ int
+-mips_address_insns (rtx x, enum machine_mode mode, bool might_split_p)
++mips_address_insns (rtx x, enum machine_mode mode, bool might_split_p,
++		    bool check_micromips_12bit_p)
+ {
+   struct mips_address_info addr;
+   int factor;
+@@ -2153,6 +2298,12 @@
+     switch (addr.type)
+       {
+       case ADDRESS_REG:
++	if (TARGET_MICROMIPS && check_micromips_12bit_p
++	    && (!CONST_INT_P (addr.offset)
++		|| INTVAL (addr.offset) < -2048
++		|| INTVAL (addr.offset) > 2047))
++	      return 0;
++
+ 	if (TARGET_MIPS16
+ 	    && !mips16_unextended_reference_p (mode, addr.reg,
+ 					       UINTVAL (addr.offset)))
+@@ -2160,12 +2311,21 @@
+ 	return factor;
+ 
+       case ADDRESS_LO_SUM:
++	if (TARGET_MICROMIPS && check_micromips_12bit_p)
++	  return 0;
++
+ 	return TARGET_MIPS16 ? factor * 2 : factor;
+ 
+       case ADDRESS_CONST_INT:
++	if (TARGET_MICROMIPS && check_micromips_12bit_p)
++	  return 0;
++
+ 	return factor;
+ 
+       case ADDRESS_SYMBOLIC:
++	if (TARGET_MICROMIPS && check_micromips_12bit_p)
++	  return 0;
++
+ 	return factor * mips_symbol_insns (addr.symbol_type, mode);
+       }
+   return 0;
+@@ -2290,7 +2450,7 @@
+ 	might_split_p = false;
+     }
+ 
+-  return mips_address_insns (XEXP (mem, 0), mode, might_split_p);
++  return mips_address_insns (XEXP (mem, 0), mode, might_split_p, false);
+ }
+ 
+ /* Return the number of instructions needed for an integer division.  */
+@@ -2817,7 +2977,7 @@
+ mips_legitimize_address (rtx *xloc, enum machine_mode mode)
+ {
+   rtx base, addr;
+-  HOST_WIDE_INT offset;
++  HOST_WIDE_INT intval, high, offset;
+ 
+   if (mips_tls_symbol_p (*xloc))
+     {
+@@ -2842,6 +3002,32 @@
+       *xloc = mips_force_address (addr, mode);
+       return true;
+     }
++
++ /* Handle references to constant addresses by loading the high part
++    into a register and using an offset for the low part.  */
++ if (GET_CODE (base) == CONST_INT)
++   {
++     intval = INTVAL (base);
++     high = trunc_int_for_mode (CONST_HIGH_PART (intval), Pmode);
++     offset = CONST_LOW_PART (intval);
++     /* Ignore cases in which a positive address would be accessed by a
++	negative offset from a negative address.  The required wraparound
++	does not occur for 32-bit addresses on 64-bit targets, and it is
++	very unlikely that such an access would occur in real code anyway.
++
++	If the low offset is not legitimate for MODE, prefer to load
++	the constant normally, instead of using mips_force_address on
++	the legitimized address.  The latter option would cause us to
++	use (D)ADDIU unconditionally, but LUI/ORI is more efficient
++	than LUI/ADDIU on some targets.  */
++     if ((intval < 0 || high > 0)
++	  && mips_valid_offset_p (GEN_INT (offset), mode))
++	{
++	  base = mips_force_temporary (NULL, GEN_INT (high));
++	  *xloc = plus_constant (base, offset);
++	  return true;
++	}
++   }
+   return false;
+ }
+ 
+@@ -3461,7 +3647,7 @@
+       /* If the address is legitimate, return the number of
+ 	 instructions it needs.  */
+       addr = XEXP (x, 0);
+-      cost = mips_address_insns (addr, mode, true);
++      cost = mips_address_insns (addr, mode, true, false);
+       if (cost > 0)
+ 	{
+ 	  *total = COSTS_N_INSNS (cost + 1);
+@@ -3723,7 +3909,7 @@
+ static int
+ mips_address_cost (rtx addr, bool speed ATTRIBUTE_UNUSED)
+ {
+-  return mips_address_insns (addr, SImode, false);
++  return mips_address_insns (addr, SImode, false, false);
+ }
+ 
+ /* Return one word of double-word value OP, taking into account the fixed
+@@ -5434,6 +5620,11 @@
+   else
+     fprintf (asm_out_file, "\t.set\tnomips16\n");
+ 
++  if (TARGET_MICROMIPS)
++    fprintf (asm_out_file, "\t.set\tmicromips\n");
++  else
++    fprintf (asm_out_file, "\t.set\tnomicromips\n");
++
+   if (!flag_inhibit_size_directive)
+     {
+       fputs ("\t.ent\t", asm_out_file);
+@@ -6210,12 +6401,40 @@
+   if (!TARGET_SIBCALLS)
+     return false;
+ 
++  /* Interrupt handlers need special epilogue code and therefore can't
++     use sibcalls.  */
++  if (mips_interrupt_type_p (TREE_TYPE (current_function_decl)))
++    return false;
++
++  if (TARGET_MICROMIPS)
++    {
++      /* We can't do a sibcall if the called function is a MIPS32 function.  */
++      if (decl
++	  && !mips_use_micromips_mode_p (decl)
++	  && const_call_insn_operand (XEXP (DECL_RTL (decl), 0), VOIDmode))
++	return false;
++
++      /* When -minterlink-mips16 is in effect, assume that non-locally-binding
++	 functions could be MIPS32 ones unless an attribute explicitly tells
++	 us otherwise.  */
++      if (TARGET_INTERLINK_MIPS16
++	  && decl
++	  && (DECL_EXTERNAL (decl) || !targetm.binds_local_p (decl))
++	  && !mips_micromips_decl_p (decl)
++	  && const_call_insn_operand (XEXP (DECL_RTL (decl), 0), VOIDmode))
++	return false;
++
++      /* Otherwise OK.  */
++      return true;
++    }
++
+   /* We can't do a sibcall if the called function is a MIPS16 function
+      because there is no direct "jx" instruction equivalent to "jalx" to
+      switch the ISA mode.  We only care about cases where the sibling
+      and normal calls would both be direct.  */
+   if (decl
+-      && mips_use_mips16_mode_p (decl)
++      && (mips_use_mips16_mode_p (decl)
++          || mips_use_micromips_mode_p (decl))
+       && const_call_insn_operand (XEXP (DECL_RTL (decl), 0), VOIDmode))
+     return false;
+ 
+@@ -6226,6 +6445,7 @@
+       && decl
+       && (DECL_EXTERNAL (decl) || !targetm.binds_local_p (decl))
+       && !mips_nomips16_decl_p (decl)
++      && !mips_nomicromips_decl_p (decl)
+       && const_call_insn_operand (XEXP (DECL_RTL (decl), 0), VOIDmode))
+     return false;
+ 
+@@ -6655,6 +6875,15 @@
+   if (!mips_get_unaligned_mem (&src, width, bitpos, &left, &right))
+     return false;
+ 
++  if (ISA_HAS_UL_US)
++    {
++      if (GET_MODE (dest) == DImode)
++	emit_insn (gen_mov_uld (dest, src, left));
++      else
++	emit_insn (gen_mov_ulw (dest, src, left));
++      return true;
++    }
++
+   temp = gen_reg_rtx (GET_MODE (dest));
+   if (GET_MODE (dest) == DImode)
+     {
+@@ -6689,6 +6918,16 @@
+ 
+   mode = mode_for_size (width, MODE_INT, 0);
+   src = gen_lowpart (mode, src);
++
++  if (ISA_HAS_UL_US)
++    {
++      if (GET_MODE (src) == DImode)
++        emit_insn (gen_mov_usd (dest, src, left));
++      else
++        emit_insn (gen_mov_usw (dest, src, left));
++      return true;
++    }
++
+   if (mode == DImode)
+     {
+       emit_insn (gen_mov_sdl (dest, src, left));
+@@ -6968,6 +7207,9 @@
+    '$'	Print the name of the stack pointer register (sp or $29).
+    '|'	Print ".set push; .set mips2" if !ISA_HAS_LL_SC.
+    '-'	Print ".set pop" under the same conditions for '|'.
++   ':'	Print "c" to use the compact version if the delay slot is a nop.
++   '!'	Print "s" to use the short version if the delay slot contains a
++	16-bit instruction.
+ 
+    See also mips_init_print_operand_pucnt.  */
+ 
+@@ -7070,6 +7312,378 @@
+ 	fputs ("\n\t.set\tpop", file);
+       break;
+ 
++    case ':':
++      /* When reorder or noreorder with final_squence 0, the delay slot will
++	 be a nop, so we just use the compact version for microMIPS.  */
++      if (set_noreorder == 0 || final_sequence == 0)
++	putc ('c', file);
++      break;
++
++    case '!':
++      /* When reorder or noreorder with final_squence 0, the delay slot will
++	 be a nop, so we just use the compact version for microMIPS.  */
++      if (set_noreorder == 0 || final_sequence == 0)
++	putc ('s', file);
++      else
++	{
++	  /* Try to find out if the delay slot instruction is 16-bit.  */
++
++	  struct recog_data old_recog_data = recog_data;
++	  rtx insn = XVECEXP (final_sequence, 0, 1);
++	  enum attr_mode mode = get_attr_mode (insn);
++	  enum attr_micromips_type micromips_type
++	    = get_attr_micromips_type (insn);
++
++	  recog_memoized (insn);
++	  cleanup_subreg_operands (insn);
++	  
++	  if (0
++
++	      /* move16 rd, rs.  */
++	      || (GET_CODE (PATTERN (insn)) == SET
++		  && (REG_P (XEXP (PATTERN (insn), 1))
++		      || GET_CODE (XEXP (PATTERN (insn), 1)) == CONST_DOUBLE)
++		  && REG_P (recog_data.operand[0])
++		  && GP_REG_P (REGNO (recog_data.operand[0]))
++		  && ((REG_P (recog_data.operand[1])
++		       && GP_REG_P (REGNO (recog_data.operand[1])))
++		      || (recog_data.operand[1] == CONST0_RTX(SFmode))))
++
++	      /* move16 rd, $0.  */
++	      || (GET_CODE (PATTERN (insn)) == SET
++		  && GET_CODE (XEXP (PATTERN (insn), 1)) == CONST_INT
++		  && REG_P (recog_data.operand[0])
++		  && GP_REG_P (REGNO (recog_data.operand[0]))
++		  && CONST_INT_P (recog_data.operand[1])
++		  && INTVAL (recog_data.operand[1]) == 0)
++
++	      /* li16 rd, imm.  */
++	      || (GET_CODE (PATTERN (insn)) == SET
++		  && GET_CODE (XEXP (PATTERN (insn), 1)) == CONST_INT
++		  && mode == MODE_SI
++		  && REG_P (recog_data.operand[0])
++		  && M16_REG_P (REGNO (recog_data.operand[0]))
++		  && CONST_INT_P (recog_data.operand[1])
++		  && INTVAL (recog_data.operand[1]) >= -1
++		  && INTVAL (recog_data.operand[1]) <= 126)
++
++	      /* lw16 rt, offset(base).  */
++	      || (GET_CODE (PATTERN (insn)) == SET
++		  && MEM_P (XEXP (PATTERN (insn), 1))
++		  && ((mode == MODE_SI
++		       && GET_MODE (recog_data.operand[1]) == SImode)
++		      || (mode == MODE_SF
++			  && GET_MODE (recog_data.operand[1]) == SFmode))
++		  && REG_P (recog_data.operand[0])
++		  && M16_REG_P (REGNO (recog_data.operand[0]))
++		  && MEM_P (recog_data.operand[1])
++		  && ((REG_P (XEXP (recog_data.operand[1], 0))
++		       && M16_REG_P (REGNO (XEXP (recog_data.operand[1], 0))))
++		      || (GET_CODE (XEXP (recog_data.operand[1], 0)) == PLUS
++			  && REG_P (XEXP (XEXP (recog_data.operand[1], 0), 0))
++			  && M16_REG_P (REGNO (XEXP (XEXP (recog_data.operand[1], 0), 0)))
++			  && CONST_INT_P (XEXP (XEXP (recog_data.operand[1], 0), 1))
++			  && (INTVAL (XEXP (XEXP (recog_data.operand[1], 0), 1)) & 3) == 0
++			  && INTVAL (XEXP (XEXP (recog_data.operand[1], 0), 1)) >= 0
++			  && INTVAL (XEXP (XEXP (recog_data.operand[1], 0), 1)) <= 60)))
++
++	      /* lwsp rt, offset($29).  */
++	      || (GET_CODE (PATTERN (insn)) == SET
++		  && MEM_P (XEXP (PATTERN (insn), 1))
++		  && ((mode == MODE_SI
++		       && GET_MODE (recog_data.operand[1]) == SImode)
++		      || (mode == MODE_SF
++			  && GET_MODE (recog_data.operand[1]) == SFmode))
++		  && REG_P (recog_data.operand[0])
++		  && GP_REG_P (REGNO (recog_data.operand[0]))
++		  && MEM_P (recog_data.operand[1])
++		  && ((REG_P (XEXP (recog_data.operand[1], 0))
++		       && (REGNO (XEXP (recog_data.operand[1], 0))) == 29)
++		      || (GET_CODE (XEXP (recog_data.operand[1], 0)) == PLUS
++			  && REG_P (XEXP (XEXP (recog_data.operand[1], 0), 0))
++			  && REGNO (XEXP (XEXP (recog_data.operand[1], 0), 0)) == 29
++			  && CONST_INT_P (XEXP (XEXP (recog_data.operand[1], 0), 1))
++			  && (INTVAL (XEXP (XEXP (recog_data.operand[1], 0), 1)) & 3) == 0
++			  && INTVAL (XEXP (XEXP (recog_data.operand[1], 0), 1)) >= 0
++			  && INTVAL (XEXP (XEXP (recog_data.operand[1], 0), 1)) <= 124)))
++
++	      /* lhu16 rt, offset(base).  */
++	      || (micromips_type == MICROMIPS_TYPE_ZERO_EXTEND
++		  && mode == MODE_SI
++		  && REG_P (recog_data.operand[0])
++		  && M16_REG_P (REGNO (recog_data.operand[0]))
++		  && MEM_P (recog_data.operand[1])
++		  && GET_MODE (recog_data.operand[1]) == HImode
++		  && ((REG_P (XEXP (recog_data.operand[1], 0))
++		       && M16_REG_P (REGNO (XEXP (recog_data.operand[1], 0))))
++		      || (GET_CODE (XEXP (recog_data.operand[1], 0)) == PLUS
++			  && REG_P (XEXP (XEXP (recog_data.operand[1], 0), 0))
++			  && M16_REG_P (REGNO (XEXP (XEXP (recog_data.operand[1], 0), 0)))
++			  && CONST_INT_P (XEXP (XEXP (recog_data.operand[1], 0), 1))
++			  && (INTVAL (XEXP (XEXP (recog_data.operand[1], 0), 1)) & 1) == 0
++			  && INTVAL (XEXP (XEXP (recog_data.operand[1], 0), 1)) >= 0
++			  && INTVAL (XEXP (XEXP (recog_data.operand[1], 0), 1)) <= 30)))
++
++	      /* lbu16 rt, offset(base).  */
++	      || (micromips_type == MICROMIPS_TYPE_ZERO_EXTEND
++		  && mode == MODE_SI
++		  && REG_P (recog_data.operand[0])
++		  && M16_REG_P (REGNO (recog_data.operand[0]))
++		  && MEM_P (recog_data.operand[1])
++		  && GET_MODE (recog_data.operand[1]) == QImode
++		  && ((REG_P (XEXP (recog_data.operand[1], 0))
++		       && M16_REG_P (REGNO (XEXP (recog_data.operand[1], 0))))
++		      || (GET_CODE (XEXP (recog_data.operand[1], 0)) == PLUS
++			  && REG_P (XEXP (XEXP (recog_data.operand[1], 0), 0))
++			  && M16_REG_P (REGNO (XEXP (XEXP (recog_data.operand[1], 0), 0)))
++			  && CONST_INT_P (XEXP (XEXP (recog_data.operand[1], 0), 1))
++			  && INTVAL (XEXP (XEXP (recog_data.operand[1], 0), 1)) >= -1
++			  && INTVAL (XEXP (XEXP (recog_data.operand[1], 0), 1)) <= 14)))
++
++	      /* sw16 rt, offset(base).  */
++	      || (GET_CODE (PATTERN (insn)) == SET
++		  && MEM_P (XEXP (PATTERN (insn), 0))
++		  && ((mode == MODE_SI
++		       && GET_MODE (recog_data.operand[0]) == SImode)
++		      || (mode == MODE_SF
++			  && GET_MODE (recog_data.operand[0]) == SFmode))
++		  && ((CONST_INT_P (recog_data.operand[1])
++		       && INTVAL (recog_data.operand[1]) == 0)
++		      || (REG_P (recog_data.operand[1])
++			  && M16STORE_REG_P (REGNO (recog_data.operand[1]))))
++		  && MEM_P (recog_data.operand[0])
++		  && ((REG_P (XEXP (recog_data.operand[0], 0))
++		       && M16_REG_P (REGNO (XEXP (recog_data.operand[0], 0))))
++		      || (GET_CODE (XEXP (recog_data.operand[0], 0)) == PLUS
++			  && REG_P (XEXP (XEXP (recog_data.operand[0], 0), 0))
++			  && M16_REG_P (REGNO (XEXP (XEXP (recog_data.operand[0], 0), 0)))
++			  && CONST_INT_P (XEXP (XEXP (recog_data.operand[0], 0), 1))
++			  && (INTVAL (XEXP (XEXP (recog_data.operand[0], 0), 1)) & 3) == 0
++			  && INTVAL (XEXP (XEXP (recog_data.operand[0], 0), 1)) >= 0
++			  && INTVAL (XEXP (XEXP (recog_data.operand[0], 0), 1)) <= 60)))
++
++	      /* swsp rt, offset($29).  */
++	      || (GET_CODE (PATTERN (insn)) == SET
++		  && MEM_P (XEXP (PATTERN (insn), 0))
++		  && ((mode == MODE_SI
++		       && GET_MODE (recog_data.operand[0]) == SImode)
++		      || (mode == MODE_SF
++			  && GET_MODE (recog_data.operand[0]) == SFmode))
++		  && ((CONST_INT_P (recog_data.operand[1])
++		       && INTVAL (recog_data.operand[1]) == 0)
++		      || (REG_P (recog_data.operand[1])
++			  && GP_REG_P (REGNO (recog_data.operand[1]))))
++		  && MEM_P (recog_data.operand[0])
++		  && ((REG_P (XEXP (recog_data.operand[0], 0))
++		       && (REGNO (XEXP (recog_data.operand[0], 0))) == 29)
++		      || (GET_CODE (XEXP (recog_data.operand[0], 0)) == PLUS
++			  && REG_P (XEXP (XEXP (recog_data.operand[0], 0), 0))
++			  && (REGNO (XEXP (XEXP (recog_data.operand[0], 0), 0)) == 29)
++			  && CONST_INT_P (XEXP (XEXP (recog_data.operand[0], 0), 1))
++			  && (INTVAL (XEXP (XEXP (recog_data.operand[0], 0), 1)) & 3) == 0
++			  && INTVAL (XEXP (XEXP (recog_data.operand[0], 0), 1)) >= 0
++			  && INTVAL (XEXP (XEXP (recog_data.operand[0], 0), 1)) <= 124)))
++
++	      /* sh16 rt, offset(base).  */
++	      || (GET_CODE (PATTERN (insn)) == SET
++		  && MEM_P (XEXP (PATTERN (insn), 0))
++		  && mode == MODE_HI
++		  && ((CONST_INT_P (recog_data.operand[1])
++		       && INTVAL (recog_data.operand[1]) == 0)
++		      || (REG_P (recog_data.operand[1])
++			  && M16STORE_REG_P (REGNO (recog_data.operand[1]))))
++		  && MEM_P (recog_data.operand[0])
++		  && GET_MODE (recog_data.operand[0]) == HImode
++		  && ((REG_P (XEXP (recog_data.operand[0], 0))
++		       && M16_REG_P (REGNO (XEXP (recog_data.operand[0], 0))))
++		      || (GET_CODE (XEXP (recog_data.operand[0], 0)) == PLUS
++			  && REG_P (XEXP (XEXP (recog_data.operand[0], 0), 0))
++			  && M16_REG_P (REGNO (XEXP (XEXP (recog_data.operand[0], 0), 0)))
++			  && CONST_INT_P (XEXP (XEXP (recog_data.operand[0], 0), 1))
++			  && (INTVAL (XEXP (XEXP (recog_data.operand[0], 0), 1)) & 1) == 0
++			  && INTVAL (XEXP (XEXP (recog_data.operand[0], 0), 1)) >= 0
++			  && INTVAL (XEXP (XEXP (recog_data.operand[0], 0), 1)) <= 30)))
++
++	      /* sb16 rt, offset(base).  */
++	      || (GET_CODE (PATTERN (insn)) == SET
++		  && MEM_P (XEXP (PATTERN (insn), 0))
++		  && mode == MODE_QI
++		  && ((CONST_INT_P (recog_data.operand[1])
++		       && INTVAL (recog_data.operand[1]) == 0)
++		      || (REG_P (recog_data.operand[1])
++			  && M16STORE_REG_P (REGNO (recog_data.operand[1]))))
++		  && MEM_P (recog_data.operand[0])
++		  && GET_MODE (recog_data.operand[0]) == QImode
++		  && ((REG_P (XEXP (recog_data.operand[0], 0))
++		       && M16_REG_P (REGNO (XEXP (recog_data.operand[0], 0))))
++		      || (GET_CODE (XEXP (recog_data.operand[0], 0)) == PLUS
++			  && REG_P (XEXP (XEXP (recog_data.operand[0], 0), 0))
++			  && M16_REG_P (REGNO (XEXP (XEXP (recog_data.operand[0], 0), 0)))
++			  && CONST_INT_P (XEXP (XEXP (recog_data.operand[0], 0), 1))
++			  && INTVAL (XEXP (XEXP (recog_data.operand[0], 0), 1)) >= 0
++			  && INTVAL (XEXP (XEXP (recog_data.operand[0], 0), 1)) <= 15)))
++
++	      /* addu16 rd, rs, rt.  */
++	      || (micromips_type == MICROMIPS_TYPE_ADD
++		  && mode != MODE_DI
++		  && REG_P (recog_data.operand[0])
++		  && M16_REG_P (REGNO (recog_data.operand[0]))
++		  && REG_P (recog_data.operand[1])
++		  && M16_REG_P (REGNO (recog_data.operand[1]))
++		  && REG_P (recog_data.operand[2])
++		  && M16_REG_P (REGNO (recog_data.operand[2])))
++
++	      /* addius5 rd, imm.  */
++	      || (micromips_type == MICROMIPS_TYPE_ADD
++		  && mode != MODE_DI
++		  && REG_P (recog_data.operand[0])
++		  && REG_P (recog_data.operand[1])
++		  && GP_REG_P (REGNO (recog_data.operand[0]))
++		  && (REGNO (recog_data.operand[0])
++		      == REGNO (recog_data.operand[1]))
++		  && CONST_INT_P (recog_data.operand[2])
++		  && INTVAL (recog_data.operand[2]) >= -8
++		  && INTVAL (recog_data.operand[2]) <= 7)
++
++	      /* addiusp $29, $29, imm.  */
++	      || (micromips_type == MICROMIPS_TYPE_ADD
++		  && mode != MODE_DI
++		  && REG_P (recog_data.operand[0])
++		  && REGNO (recog_data.operand[0]) == 29
++		  && REG_P (recog_data.operand[1])
++		  && REGNO (recog_data.operand[1]) == 29
++		  && CONST_INT_P (recog_data.operand[2])
++		  && ((INTVAL (recog_data.operand[2]) >= 2
++		       && INTVAL (recog_data.operand[2]) <= 257)
++		      || (INTVAL (recog_data.operand[2]) >= -258
++			  && INTVAL (recog_data.operand[2]) <= -3)))
++
++	      /* addiur1sp rd, $29, imm.  */
++	      || (micromips_type == MICROMIPS_TYPE_ADD
++		  && mode != MODE_DI
++		  && REG_P (recog_data.operand[0])
++		  && M16_REG_P (REGNO (recog_data.operand[0]))
++		  && REG_P (recog_data.operand[1])
++		  && REGNO (recog_data.operand[1]) == 29
++		  && CONST_INT_P (recog_data.operand[2])
++		  && (INTVAL (recog_data.operand[2])  & 3) == 0
++		  && INTVAL (recog_data.operand[2]) >= 0
++		  && INTVAL (recog_data.operand[2]) <= 252)
++
++	      /* addiur2 rd, rs, imm.  */
++	      || (micromips_type == MICROMIPS_TYPE_ADD
++		  && mode != MODE_DI
++		  && REG_P (recog_data.operand[0])
++		  && M16_REG_P (REGNO (recog_data.operand[0]))
++		  && REG_P (recog_data.operand[1])
++		  && M16_REG_P (REGNO (recog_data.operand[1]))
++		  && CONST_INT_P (recog_data.operand[2])
++		  && (INTVAL (recog_data.operand[2]) == 1
++		      || INTVAL (recog_data.operand[2]) == 4
++		      || INTVAL (recog_data.operand[2]) == 8
++		      || INTVAL (recog_data.operand[2]) == 12
++		      || INTVAL (recog_data.operand[2]) == 16
++		      || INTVAL (recog_data.operand[2]) == 20
++		      || INTVAL (recog_data.operand[2]) == 24
++		      || INTVAL (recog_data.operand[2]) == -1))
++
++	      /* subu16 rd, rs, rt.  */
++	      || (micromips_type == MICROMIPS_TYPE_SUB
++		  && mode != MODE_DI
++		  && REG_P (recog_data.operand[0])
++		  && M16_REG_P (REGNO (recog_data.operand[0]))
++		  && REG_P (recog_data.operand[1])
++		  && M16_REG_P (REGNO (recog_data.operand[1]))
++		  && REG_P (recog_data.operand[2])
++		  && M16_REG_P (REGNO (recog_data.operand[2])))
++
++	      /* sll16/srl16 rd, rt, sa.  */
++	      || (micromips_type == MICROMIPS_TYPE_SHIFT
++		  && mode != MODE_DI
++		  && REG_P (recog_data.operand[0])
++		  && M16_REG_P (REGNO (recog_data.operand[0]))
++		  && REG_P (recog_data.operand[1])
++		  && M16_REG_P (REGNO (recog_data.operand[1]))
++		  && CONST_INT_P (recog_data.operand[2])
++		  && INTVAL (recog_data.operand[2]) >= 1
++		  && INTVAL (recog_data.operand[2]) <= 8)
++
++	      /* andi16 rd, rs, imm.  */
++	      || (micromips_type == MICROMIPS_TYPE_LOGICAL_AND
++		  && REG_P (recog_data.operand[0])
++		  && M16_REG_P (REGNO (recog_data.operand[0]))
++		  && REG_P (recog_data.operand[1])
++		  && M16_REG_P (REGNO (recog_data.operand[1]))
++		  && CONST_INT_P (recog_data.operand[2])
++		  && (INTVAL (recog_data.operand[2]) == 128
++		      || INTVAL (recog_data.operand[2]) == 1
++		      || INTVAL (recog_data.operand[2]) == 2
++		      || INTVAL (recog_data.operand[2]) == 3
++		      || INTVAL (recog_data.operand[2]) == 4
++		      || INTVAL (recog_data.operand[2]) == 7
++		      || INTVAL (recog_data.operand[2]) == 8
++		      || INTVAL (recog_data.operand[2]) == 15
++		      || INTVAL (recog_data.operand[2]) == 16
++		      || INTVAL (recog_data.operand[2]) == 31
++		      || INTVAL (recog_data.operand[2]) == 32
++		      || INTVAL (recog_data.operand[2]) == 63
++		      || INTVAL (recog_data.operand[2]) == 64
++		      || INTVAL (recog_data.operand[2]) == 255
++		      || INTVAL (recog_data.operand[2]) == 32768
++		      || INTVAL (recog_data.operand[2]) == 65535))
++
++	      /* andi16 rd, rs, imm.  */
++	      || (micromips_type == MICROMIPS_TYPE_ZERO_EXTEND
++		  && mode == MODE_SI
++		  && REG_P (recog_data.operand[0])
++		  && M16_REG_P (REGNO (recog_data.operand[0]))
++		  && REG_P (recog_data.operand[1])
++		  && M16_REG_P (REGNO (recog_data.operand[1])))
++
++	      /* and16/xor16/or16 rd, rs, rt.  */
++	      || ((micromips_type == MICROMIPS_TYPE_LOGICAL_AND
++		   || micromips_type == MICROMIPS_TYPE_LOGICAL_XOR
++		   || micromips_type == MICROMIPS_TYPE_LOGICAL_OR)
++		  && REG_P (recog_data.operand[0])
++		  && M16_REG_P (REGNO (recog_data.operand[0]))
++		  && REG_P (recog_data.operand[1])
++		  && M16_REG_P (REGNO (recog_data.operand[1]))
++		  && REG_P (recog_data.operand[2])
++		  && M16_REG_P (REGNO (recog_data.operand[2]))
++		  && (REGNO (recog_data.operand[0])
++			== REGNO (recog_data.operand[1])
++		      || REGNO (recog_data.operand[0])
++			   == REGNO (recog_data.operand[2])))
++
++	      /* mfhi rd.  */
++	      || (micromips_type == MICROMIPS_TYPE_MFHI
++		  && REG_P (recog_data.operand[0])
++		  && GP_REG_P (REGNO (recog_data.operand[0])))
++
++	      /* mflo rd.  */
++	      || (GET_CODE (PATTERN (insn)) == SET
++		  && REG_P (XEXP (PATTERN (insn), 0))
++		  && REG_P (XEXP (PATTERN (insn), 1))
++		  && REG_P (recog_data.operand[0])
++		  && GP_REG_P (REGNO (recog_data.operand[0]))
++		  && REG_P (recog_data.operand[1])
++		  && REGNO (recog_data.operand[1]) == LO_REGNUM)
++
++	      /* not rt, rs.  */
++	      || (micromips_type == MICROMIPS_TYPE_LOGICAL_NOT
++		  && REG_P (recog_data.operand[0])
++		  && M16_REG_P (REGNO (recog_data.operand[0]))
++		  && REG_P (recog_data.operand[1])
++		  && M16_REG_P (REGNO (recog_data.operand[1])))
++
++	      || 0)
++
++	    putc ('s', file);
++
++	  recog_data = old_recog_data;
++	}
++      break;
++
+     default:
+       gcc_unreachable ();
+       break;
+@@ -7083,7 +7697,7 @@
+ {
+   const char *p;
+ 
+-  for (p = "()[]<>*#/?~.@^+$|-"; *p; p++)
++  for (p = "()[]<>*#/?~.@^+$|-:!"; *p; p++)
+     mips_print_operand_punct[(unsigned char) *p] = true;
+ }
+ 
+@@ -7276,7 +7890,11 @@
+ 		|| (letter == 'L' && TARGET_BIG_ENDIAN)
+ 		|| letter == 'D')
+ 	      regno++;
+-	    fprintf (file, "%s", reg_names[regno]);
++	    /* We need to print $0 .. $31 for COP0 registers.  */
++	    if (COP0_REG_P (regno))
++	      fprintf (file, "$%s", &reg_names[regno][4]);
++	    else
++	      fprintf (file, "%s", reg_names[regno]);
+ 	  }
+ 	  break;
+ 
+@@ -7416,6 +8034,12 @@
+   if (TARGET_ABICALLS || TARGET_VXWORKS_RTP)
+     return false;
+ 
++#ifdef CVMX_SHARED_BSS_FLAGS
++  if (TARGET_OCTEON && TREE_CODE (decl) == VAR_DECL
++      && lookup_attribute ("cvmx_shared", DECL_ATTRIBUTES (decl)))
++    return false;
++#endif
++
+   if (TREE_CODE (decl) == VAR_DECL && DECL_SECTION_NAME (decl) != 0)
+     {
+       const char *name;
+@@ -7642,6 +8266,37 @@
+   return NULL_RTX;
+ }
+ 
++/* DSP ALU can bypass data with no delays for the following pairs. */
++enum insn_code dspalu_bypass_table[][2] =
++{
++  {CODE_FOR_mips_addsc, CODE_FOR_mips_addwc},
++  {CODE_FOR_mips_cmpu_eq_qb, CODE_FOR_mips_pick_qb},
++  {CODE_FOR_mips_cmpu_lt_qb, CODE_FOR_mips_pick_qb},
++  {CODE_FOR_mips_cmpu_le_qb, CODE_FOR_mips_pick_qb},
++  {CODE_FOR_mips_cmp_eq_ph, CODE_FOR_mips_pick_ph},
++  {CODE_FOR_mips_cmp_lt_ph, CODE_FOR_mips_pick_ph},
++  {CODE_FOR_mips_cmp_le_ph, CODE_FOR_mips_pick_ph},
++  {CODE_FOR_mips_wrdsp, CODE_FOR_mips_insv}
++};
++
++int
++mips_dspalu_bypass_p (rtx out_insn, rtx in_insn)
++{
++  int i;
++  int num_bypass = (sizeof (dspalu_bypass_table)
++		    / (2 * sizeof (enum insn_code)));
++  enum insn_code out_icode = INSN_CODE (out_insn);
++  enum insn_code in_icode = INSN_CODE (in_insn);
++
++  for (i = 0; i < num_bypass; i++)
++    {
++      if (out_icode == dspalu_bypass_table[i][0]
++	  && in_icode == dspalu_bypass_table[i][1])
++       return true;
++    }
++
++  return false;
++}
+ /* Implement ASM_OUTPUT_ASCII.  */
+ 
+ void
+@@ -7866,11 +8521,19 @@
+ 		 "\t.previous\n", TARGET_LONG64 ? 64 : 32);
+ 
+ #ifdef HAVE_AS_GNU_ATTRIBUTE
++#ifdef TARGET_MIPS_SDEMTK
++     fprintf (asm_out_file, "\t.gnu_attribute 4, %d\n",
++             (!TARGET_NO_FLOAT
++              ? (TARGET_HARD_FLOAT
++                 ? (TARGET_DOUBLE_FLOAT
++                    ? ((!TARGET_64BIT && TARGET_FLOAT64) ? 4 : 1) : 2) : 3) : 0));
++#else
+       fprintf (asm_out_file, "\t.gnu_attribute 4, %d\n",
+ 	       (TARGET_HARD_FLOAT_ABI
+ 		? (TARGET_DOUBLE_FLOAT
+ 		   ? ((!TARGET_64BIT && TARGET_FLOAT64) ? 4 : 1) : 2) : 3));
+ #endif
++#endif
+     }
+ 
+   /* If TARGET_ABICALLS, tell GAS to generate -KPIC code.  */
+@@ -8483,12 +9146,53 @@
+   return GLOBAL_POINTER_REGNUM;
+ }
+ 
++/* Return true if REGNO is a register that is ordinarily call-clobbered
++   but must nevertheless be preserved by an interrupt handler.  */
++
++static bool
++mips_interrupt_extra_call_saved_reg_p (unsigned int regno)
++{
++  if (MD_REG_P (regno))
++    return true;
++
++  if (TARGET_DSP && DSP_ACC_REG_P (regno))
++    return true;
++
++  if (GP_REG_P (regno) && !cfun->machine->use_shadow_register_set_p)
++    {
++      /* $0 is hard-wired.  */
++      if (regno == GP_REG_FIRST)
++	return false;
++
++      /* The interrupt handler can treat kernel registers as
++	 scratch registers.  */
++      if (KERNEL_REG_P (regno))
++	return false;
++
++      /* The function will return the stack pointer to its original value
++	 anyway.  */
++      if (regno == STACK_POINTER_REGNUM)
++	return false;
++
++      /* Otherwise, return true for registers that aren't ordinarily
++	 call-clobbered.  */
++      return call_really_used_regs[regno];
++    }
++
++  return false;
++}
++
+ /* Return true if the current function should treat register REGNO
+    as call-saved.  */
+ 
+ static bool
+ mips_cfun_call_saved_reg_p (unsigned int regno)
+ {
++  /* Interrupt handlers need to save extra registers.  */
++  if (cfun->machine->interrupt_handler_p
++      && mips_interrupt_extra_call_saved_reg_p (regno))
++    return true;
++
+   /* call_insns preserve $28 unless they explicitly say otherwise,
+      so call_really_used_regs[] treats $28 as call-saved.  However,
+      we want the ABI property rather than the default call_insn
+@@ -8537,6 +9241,13 @@
+   if (regno == GP_REG_FIRST + 31 && mips16_cfun_returns_in_fpr_p ())
+     return true;
+ 
++  /* If REGNO is ordinarily call-clobbered, we must assume that any
++     called function could modify it.  */
++  if (cfun->machine->interrupt_handler_p
++      && !current_function_is_leaf
++      && mips_interrupt_extra_call_saved_reg_p (regno))
++    return true;
++
+   return false;
+ }
+ 
+@@ -8592,6 +9303,14 @@
+       C |  callee-allocated save area   |
+ 	|  for register varargs         |
+ 	|                               |
++	+-------------------------------+ <-- frame_pointer_rtx
++	|                               |       + cop0_sp_offset
++	|  COP0 reg save area           |	+ UNITS_PER_WORD
++	|                               |
++	+-------------------------------+ <-- frame_pointer_rtx + acc_sp_offset
++	|                               |       + UNITS_PER_WORD
++	|  accumulator save area        |
++	|                               |
+ 	+-------------------------------+ <-- frame_pointer_rtx + fp_sp_offset
+ 	|                               |       + UNITS_PER_HWFPVALUE
+ 	|  FPR save area                |
+@@ -8635,6 +9354,28 @@
+   HOST_WIDE_INT offset, size;
+   unsigned int regno, i;
+ 
++  /* Set this function's interrupt properties.  */
++  if (mips_interrupt_type_p (TREE_TYPE (current_function_decl)))
++    {
++      if (!ISA_MIPS32R2)
++	error ("the %<interrupt%> attribute requires a MIPS32r2 processor");
++      else if (TARGET_HARD_FLOAT)
++	error ("the %<interrupt%> attribute requires %<-msoft-float%>");
++      else if (TARGET_MIPS16)
++	error ("interrupt handlers cannot be MIPS16 functions");
++      else
++	{
++	  cfun->machine->interrupt_handler_p = true;
++	  cfun->machine->use_shadow_register_set_p =
++	    mips_use_shadow_register_set_p (TREE_TYPE (current_function_decl));
++	  cfun->machine->keep_interrupts_masked_p =
++	    mips_keep_interrupts_masked_p (TREE_TYPE (current_function_decl));
++	  cfun->machine->use_debug_exception_return_p =
++	    mips_use_debug_exception_return_p (TREE_TYPE
++					       (current_function_decl));
++	}
++    }
++
+   frame = &cfun->machine->frame;
+   memset (frame, 0, sizeof (*frame));
+   size = get_frame_size ();
+@@ -8704,7 +9445,7 @@
+     }
+ 
+   /* Find out which FPRs we need to save.  This loop must iterate over
+-     the same space as its companion in mips_for_each_saved_reg.  */
++     the same space as its companion in mips_for_each_saved_gpr_and_fpr.  */
+   if (TARGET_HARD_FLOAT)
+     for (regno = FP_REG_FIRST; regno <= FP_REG_LAST; regno += MAX_FPRS_PER_FMT)
+       if (mips_save_reg_p (regno))
+@@ -8720,6 +9461,47 @@
+       frame->fp_sp_offset = offset - UNITS_PER_HWFPVALUE;
+     }
+ 
++  /* Add in space for the interrupt context information.  */
++  if (cfun->machine->interrupt_handler_p)
++    {
++      /* Check HI/LO.  */
++      if (mips_save_reg_p (LO_REGNUM) || mips_save_reg_p (HI_REGNUM))
++	{
++	  frame->num_acc++;
++	  frame->acc_mask |= (1 << 0);
++	}
++
++      /* Check accumulators 1, 2, 3.  */
++      for (i = DSP_ACC_REG_FIRST; i <= DSP_ACC_REG_LAST; i += 2)
++	if (mips_save_reg_p (i) || mips_save_reg_p (i + 1))
++	  {
++	    frame->num_acc++;
++	    frame->acc_mask |= 1 << (((i - DSP_ACC_REG_FIRST) / 2) + 1);
++	  }
++
++      /* All interrupt context functions need space to preserve STATUS.  */
++      frame->num_cop0_regs++;
++
++      /* If we don't keep interrupts masked, we need to save EPC.  */
++      if (!cfun->machine->keep_interrupts_masked_p)
++	frame->num_cop0_regs++;
++    }
++
++  /* Move above the accumulator save area.  */
++  if (frame->num_acc > 0)
++    {
++      /* Each accumulator needs 2 words.  */
++      offset += frame->num_acc * 2 * UNITS_PER_WORD;
++      frame->acc_sp_offset = offset - UNITS_PER_WORD;
++    }
++
++  /* Move above the COP0 register save area.  */
++  if (frame->num_cop0_regs > 0)
++    {
++      offset += frame->num_cop0_regs * UNITS_PER_WORD;
++      frame->cop0_sp_offset = offset - UNITS_PER_WORD;
++    }
++
+   /* Move above the callee-allocated varargs save area.  */
+   offset += MIPS_STACK_ALIGN (cfun->machine->varargs_size);
+   frame->arg_pointer_offset = offset;
+@@ -8733,6 +9515,10 @@
+     frame->gp_save_offset = frame->gp_sp_offset - offset;
+   if (frame->fp_sp_offset > 0)
+     frame->fp_save_offset = frame->fp_sp_offset - offset;
++  if (frame->acc_sp_offset > 0)
++    frame->acc_save_offset = frame->acc_sp_offset - offset;
++  if (frame->num_cop0_regs > 0)
++    frame->cop0_save_offset = frame->cop0_sp_offset - offset;
+ 
+   /* MIPS16 code offsets the frame pointer by the size of the outgoing
+      arguments.  This tends to increase the chances of using unextended
+@@ -8929,12 +9715,160 @@
+   fn (gen_rtx_REG (mode, regno), mem);
+ }
+ 
++/* Call FN for each accumlator that is saved by the current function.
++   SP_OFFSET is the offset of the current stack pointer from the start
++   of the frame.  */
++
++static void
++mips_for_each_saved_acc (HOST_WIDE_INT sp_offset, mips_save_restore_fn fn)
++{
++  HOST_WIDE_INT offset;
++  int regno;
++
++  offset = cfun->machine->frame.acc_sp_offset - sp_offset;
++  if (BITSET_P (cfun->machine->frame.acc_mask, 0))
++    {
++      mips_save_restore_reg (word_mode, LO_REGNUM, offset, fn);
++      offset -= UNITS_PER_WORD;
++      mips_save_restore_reg (word_mode, HI_REGNUM, offset, fn);
++      offset -= UNITS_PER_WORD;
++    }
++
++  for (regno = DSP_ACC_REG_FIRST; regno <= DSP_ACC_REG_LAST; regno++)
++    if (BITSET_P (cfun->machine->frame.acc_mask,
++		  ((regno - DSP_ACC_REG_FIRST) / 2) + 1))
++      {
++	mips_save_restore_reg (word_mode, regno, offset, fn);
++	offset -= UNITS_PER_WORD;
++      }
++}
++
++static void mips_save_reg (rtx reg, rtx mem);
++
++/* Build microMIPS save or restore.  FN is save or restore function.
++   OFFSET is the current stack offset.
++   Return true if we succeed creating save or restore.  */
++
++static bool
++micromips_build_save_restore (mips_save_restore_fn fn,
++			      HOST_WIDE_INT offset)
++{
++  int i, num_of_reg;
++  unsigned int j;
++  rtx pattern, set, reg, mem;
++  HOST_WIDE_INT this_offset;
++  rtx this_base;
++  unsigned int type[19] = {0x00010000, 0x00030000, 0x00070000, 0x000f0000,
++			   0x001f0000, 0x003f0000, 0x007f0000, 0x00ff0000,
++			   0x40ff0000, 0x80000000, 0x80010000, 0x80030000,
++			   0x80070000, 0x800f0000, 0x801f0000, 0x803f0000,
++			   0x807f0000, 0x80ff0000, 0xc0ff0000};
++  unsigned int encode[19] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 16, 17, 18, 19,
++			     20, 21, 22, 23, 24, 25};
++
++  /* LWM/SWM can only support offsets from -2048 to 2047.  */
++  if (offset < -2048 || offset > 2047)
++    return false;
++
++  /* Try matching $16 to $31 (s0 to ra).  */
++  for (i = 0; i < 19; i++)
++    if ((cfun->machine->frame.mask & 0xffff0000) == type[i])
++      break;
++
++  if (i == 19)
++    {
++      /* Try matching $16 to $23 (s0 to s7) only.  */
++      for (i = 0; i < 8; i ++)
++	if ((cfun->machine->frame.mask & 0x00ff0000) == type[i])
++	  break;
++
++      if (i == 8)
++	return false;
++    }
++
++  /* For only one register, we use normal sw/lw for speed.  */
++  if (i == 0 || i == 9)
++    return false;
++
++  /* For $31 to $24.  */
++  if (i < 8 && (cfun->machine->frame.mask & 0xff000000))
++    {
++      int regno;
++      for (regno = GP_REG_LAST; regno > GP_REG_LAST - 8; regno--)
++	if (BITSET_P (cfun->machine->frame.mask, regno - GP_REG_FIRST))
++	  {
++	    mips_save_restore_reg (word_mode, regno, offset, fn);
++	    offset -= UNITS_PER_WORD;
++	  }
++    }
++
++  /* Adjust offset for output.  */
++  num_of_reg = (encode[i] & 0xf) + (encode[i] >> 4);
++  offset -= (UNITS_PER_WORD * (num_of_reg - 1));
++
++  /* Create the final PARALLEL.  */
++  pattern = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (num_of_reg));
++
++  this_base = stack_pointer_rtx;
++  this_offset = offset;
++
++  /* For $16-$23, $30.  */
++  for (j = 0; j < (encode[i] & 0xf); j++)
++    {
++      unsigned int regno;
++      mem = gen_frame_mem (SImode, plus_constant (this_base,
++			   this_offset + j * UNITS_PER_WORD));
++      regno = (j != 8) ? 16 + j : 30;
++      reg = gen_rtx_REG (SImode, regno);
++      if (fn == mips_save_reg)
++	set = mips_frame_set (mem, reg);
++      else
++	set = gen_rtx_SET (VOIDmode, reg, mem);
++      XVECEXP (pattern, 0, j) = set;
++    }
++
++  /* For $31.  */
++  if (encode[i] >> 4)
++    {
++      mem = gen_frame_mem (SImode, plus_constant (this_base,
++			   this_offset + j * UNITS_PER_WORD));
++      reg = gen_rtx_REG (SImode, 31);
++      if (fn == mips_save_reg)
++	set = mips_frame_set (mem, reg);
++      else
++	set = gen_rtx_SET (VOIDmode, reg, mem);
++      XVECEXP (pattern, 0, j) = set;
++    }
++
++  pattern = emit_insn (pattern);
++  if (fn == mips_save_reg)
++    RTX_FRAME_RELATED_P(pattern) = 1;  
++
++  /* Adjust the last offset.  */
++  offset -= UNITS_PER_WORD;
++
++  /* For $15 to $0.  */
++  if (cfun->machine->frame.mask & 0xffff)
++    {
++      int regno;
++      for (regno = GP_REG_FIRST + 15; regno >= GP_REG_FIRST; regno--)
++	if (BITSET_P (cfun->machine->frame.mask, regno - GP_REG_FIRST))
++	  {
++	    mips_save_restore_reg (word_mode, regno, offset, fn);
++	    offset -= UNITS_PER_WORD;
++	  }
++    }
++
++  return true;
++}
++
+ /* Call FN for each register that is saved by the current function.
+    SP_OFFSET is the offset of the current stack pointer from the start
+    of the frame.  */
+ 
+ static void
+-mips_for_each_saved_reg (HOST_WIDE_INT sp_offset, mips_save_restore_fn fn)
++mips_for_each_saved_gpr_and_fpr (HOST_WIDE_INT sp_offset,
++				 mips_save_restore_fn fn)
+ {
+   enum machine_mode fpr_mode;
+   HOST_WIDE_INT offset;
+@@ -8945,6 +9879,13 @@
+      need a nop in the epilogue if at least one register is reloaded in
+      addition to return address.  */
+   offset = cfun->machine->frame.gp_sp_offset - sp_offset;
++
++  if (TARGET_MICROMIPS)
++    {
++      if (micromips_build_save_restore (fn, offset))
++	goto save_restore_fp_reg;
++    }
++
+   for (regno = GP_REG_LAST; regno >= GP_REG_FIRST; regno--)
+     if (BITSET_P (cfun->machine->frame.mask, regno - GP_REG_FIRST))
+       {
+@@ -8952,6 +9893,8 @@
+ 	offset -= UNITS_PER_WORD;
+       }
+ 
++  save_restore_fp_reg:
++
+   /* This loop must iterate over the same space as its companion in
+      mips_compute_frame_info.  */
+   offset = cfun->machine->frame.fp_sp_offset - sp_offset;
+@@ -9122,13 +10065,24 @@
+     }
+   else
+     {
+-      if (TARGET_MIPS16
+-	  && REGNO (reg) != GP_REG_FIRST + 31
+-	  && !M16_REG_P (REGNO (reg)))
+-	{
+-	  /* Save a non-MIPS16 register by moving it through a temporary.
+-	     We don't need to do this for $31 since there's a special
+-	     instruction for it.  */
++      if (REGNO (reg) == HI_REGNUM)
++	{
++	  if (TARGET_64BIT)
++	    emit_insn (gen_mfhidi_ti (MIPS_PROLOGUE_TEMP (DImode),
++				      gen_rtx_REG (TImode, MD_REG_FIRST)));
++	  else
++	    emit_insn (gen_mfhisi_di (MIPS_PROLOGUE_TEMP (SImode),
++				      gen_rtx_REG (DImode, MD_REG_FIRST)));
++	  mips_emit_move (mem, MIPS_PROLOGUE_TEMP (GET_MODE (reg)));
++	}
++      else if ((TARGET_MIPS16
++		&& REGNO (reg) != GP_REG_FIRST + 31
++		&& !M16_REG_P (REGNO (reg)))
++	       || ACC_REG_P (REGNO (reg)))
++	{
++	  /* If the register has no direct store instruction, move it
++	     through a temporary.  Note that there's a special MIPS16
++	     instruction to save $31.  */
+ 	  mips_emit_move (MIPS_PROLOGUE_TEMP (GET_MODE (reg)), reg);
+ 	  mips_emit_move (mem, MIPS_PROLOGUE_TEMP (GET_MODE (reg)));
+ 	}
+@@ -9200,6 +10154,14 @@
+     emit_insn (gen_loadgp_blockage ());
+ }
+ 
++/* A for_each_rtx callback.  Stop the search if *X is a kernel register.  */
++
++static int
++mips_kernel_reg_p (rtx *x, void *data ATTRIBUTE_UNUSED)
++{
++  return GET_CODE (*x) == REG && KERNEL_REG_P (REGNO (*x));
++}
++
+ /* Expand the "prologue" pattern.  */
+ 
+ void
+@@ -9219,7 +10181,8 @@
+   /* Save the registers.  Allocate up to MIPS_MAX_FIRST_STACK_STEP
+      bytes beforehand; this is enough to cover the register save area
+      without going out of range.  */
+-  if ((frame->mask | frame->fmask) != 0)
++  if (((frame->mask | frame->fmask | frame->acc_mask) != 0)
++      || frame->num_cop0_regs > 0)
+     {
+       HOST_WIDE_INT step1;
+ 
+@@ -9250,12 +10213,97 @@
+  	}
+       else
+  	{
+-	  insn = gen_add3_insn (stack_pointer_rtx,
+-				stack_pointer_rtx,
+-				GEN_INT (-step1));
+-	  RTX_FRAME_RELATED_P (emit_insn (insn)) = 1;
+-	  size -= step1;
+-	  mips_for_each_saved_reg (size, mips_save_reg);
++	  if (cfun->machine->interrupt_handler_p)
++	    {
++	      HOST_WIDE_INT offset;
++	      rtx mem;
++
++	      /* If this interrupt is using a shadow register set, we need to
++		 get the stack pointer from the previous register set.  */
++	      if (cfun->machine->use_shadow_register_set_p)
++		emit_insn (gen_mips_rdpgpr (stack_pointer_rtx,
++					    stack_pointer_rtx));
++
++	      if (!cfun->machine->keep_interrupts_masked_p)
++		{
++		  /* Move from COP0 Cause to K0.  */
++		  emit_insn (gen_cop0_move (gen_rtx_REG (SImode, K0_REG_NUM),
++					    gen_rtx_REG (SImode,
++							 COP0_CAUSE_REG_NUM)));
++		  /* Move from COP0 EPC to K1.  */
++		  emit_insn (gen_cop0_move (gen_rtx_REG (SImode, K1_REG_NUM),
++					    gen_rtx_REG (SImode,
++							 COP0_EPC_REG_NUM)));
++		}
++
++	      /* Allocate the first part of the frame.  */
++	      insn = gen_add3_insn (stack_pointer_rtx, stack_pointer_rtx,
++				    GEN_INT (-step1));
++	      RTX_FRAME_RELATED_P (emit_insn (insn)) = 1;
++	      size -= step1;
++
++	      /* Start at the uppermost location for saving.  */
++	      offset = frame->cop0_sp_offset - size;
++	      if (!cfun->machine->keep_interrupts_masked_p)
++		{
++		  /* Push EPC into its stack slot.  */
++		  mem = gen_frame_mem (word_mode,
++				       plus_constant (stack_pointer_rtx,
++						      offset));
++		  mips_emit_move (mem, gen_rtx_REG (word_mode, K1_REG_NUM));
++		  offset -= UNITS_PER_WORD;
++		}
++
++	      /* Move from COP0 Status to K1.  */
++	      emit_insn (gen_cop0_move (gen_rtx_REG (SImode, K1_REG_NUM),
++					gen_rtx_REG (SImode,
++						     COP0_STATUS_REG_NUM)));
++
++	      /* Right justify the RIPL in k0.  */
++	      if (!cfun->machine->keep_interrupts_masked_p)
++		emit_insn (gen_lshrsi3 (gen_rtx_REG (SImode, K0_REG_NUM),
++					gen_rtx_REG (SImode, K0_REG_NUM),
++					GEN_INT (CAUSE_IPL)));
++
++	      /* Push Status into its stack slot.  */
++	      mem = gen_frame_mem (word_mode,
++				   plus_constant (stack_pointer_rtx, offset));
++	      mips_emit_move (mem, gen_rtx_REG (word_mode, K1_REG_NUM));
++	      offset -= UNITS_PER_WORD;
++
++	      /* Insert the RIPL into our copy of SR (k1) as the new IPL.  */
++	      if (!cfun->machine->keep_interrupts_masked_p)
++		emit_insn (gen_insvsi (gen_rtx_REG (SImode, K1_REG_NUM),
++				       GEN_INT (6),
++				       GEN_INT (SR_IPL),
++				       gen_rtx_REG (SImode, K0_REG_NUM)));
++
++	      if (!cfun->machine->keep_interrupts_masked_p)
++		/* Enable interrupts by clearing the KSU ERL and EXL bits.
++		   IE is already the correct value, so we don't have to do
++		   anything explicit.  */
++		emit_insn (gen_insvsi (gen_rtx_REG (SImode, K1_REG_NUM),
++				       GEN_INT (4),
++				       GEN_INT (SR_EXL),
++				       gen_rtx_REG (SImode, GP_REG_FIRST)));
++	      else
++		/* Disable interrupts by clearing the KSU, ERL, EXL,
++		   and IE bits.  */
++		emit_insn (gen_insvsi (gen_rtx_REG (SImode, K1_REG_NUM),
++				       GEN_INT (5),
++				       GEN_INT (SR_IE),
++				       gen_rtx_REG (SImode, GP_REG_FIRST)));
++	    }
++	  else
++	    {
++	      insn = gen_add3_insn (stack_pointer_rtx,
++				    stack_pointer_rtx,
++				    GEN_INT (-step1));
++	      RTX_FRAME_RELATED_P (emit_insn (insn)) = 1;
++	      size -= step1;
++	    }
++	  mips_for_each_saved_acc (size, mips_save_reg);
++	  mips_for_each_saved_gpr_and_fpr (size, mips_save_reg);
+ 	}
+     }
+ 
+@@ -9340,9 +10388,23 @@
+ 			pic_offset_table_rtx);
+     }
+ 
+-  /* If we are profiling, make sure no instructions are scheduled before
+-     the call to mcount.  */
+-  if (crtl->profile)
++  /* We need to search back to the last use of K0 or K1.  */
++  if (cfun->machine->interrupt_handler_p)
++    {
++      for (insn = get_last_insn (); insn != NULL_RTX; insn = PREV_INSN (insn))
++	if (INSN_P (insn)
++	    && for_each_rtx (&PATTERN (insn), mips_kernel_reg_p, NULL))
++	  break;
++      /* Emit a move from K1 to COP0 Status after insn.  */
++      gcc_assert (insn != NULL_RTX);
++      emit_insn_after (gen_cop0_move (gen_rtx_REG (SImode, COP0_STATUS_REG_NUM),
++				      gen_rtx_REG (SImode, K1_REG_NUM)),
++		       insn);
++    }
++
++  /* If we are profiling, make sure no instructions are scheduled before
++     the call to mcount.  */
++  if (crtl->profile)
+     emit_insn (gen_blockage ());
+ }
+ 
+@@ -9356,7 +10418,20 @@
+   if (TARGET_MIPS16 && REGNO (reg) == GP_REG_FIRST + 31)
+     reg = gen_rtx_REG (GET_MODE (reg), GP_REG_FIRST + 7);
+ 
+-  if (TARGET_MIPS16 && !M16_REG_P (REGNO (reg)))
++  if (REGNO (reg) == HI_REGNUM)
++    {
++      mips_emit_move (MIPS_EPILOGUE_TEMP (GET_MODE (reg)), mem);
++      if (TARGET_64BIT)
++	emit_insn (gen_mthisi_di (gen_rtx_REG (TImode, MD_REG_FIRST),
++				  MIPS_EPILOGUE_TEMP (DImode),
++				  gen_rtx_REG (DImode, LO_REGNUM)));
++      else
++	emit_insn (gen_mthisi_di (gen_rtx_REG (DImode, MD_REG_FIRST),
++				  MIPS_EPILOGUE_TEMP (SImode),
++				  gen_rtx_REG (SImode, LO_REGNUM)));
++    }
++  else if ((TARGET_MIPS16 && !M16_REG_P (REGNO (reg)))
++	   || ACC_REG_P (REGNO (reg)))
+     {
+       /* Can't restore directly; move through a temporary.  */
+       mips_emit_move (MIPS_EPILOGUE_TEMP (GET_MODE (reg)), mem);
+@@ -9392,7 +10467,8 @@
+ {
+   const struct mips_frame_info *frame;
+   HOST_WIDE_INT step1, step2;
+-  rtx base, target;
++  rtx base, target, insn;
++  bool use_jraddiusp_p = false;
+ 
+   if (!sibcall_p && mips_can_use_return_insn ())
+     {
+@@ -9425,7 +10501,8 @@
+ 
+   /* If we need to restore registers, deallocate as much stack as
+      possible in the second step without going out of range.  */
+-  if ((frame->mask | frame->fmask) != 0)
++  if ((frame->mask | frame->fmask | frame->acc_mask) != 0
++      || frame->num_cop0_regs > 0)
+     {
+       step2 = MIN (step1, MIPS_MAX_FIRST_STACK_STEP);
+       step1 -= step2;
+@@ -9487,13 +10564,61 @@
+   else
+     {
+       /* Restore the registers.  */
+-      mips_for_each_saved_reg (frame->total_size - step2, mips_restore_reg);
++      mips_for_each_saved_acc (frame->total_size - step2, mips_restore_reg);
++      mips_for_each_saved_gpr_and_fpr (frame->total_size - step2,
++				       mips_restore_reg);
++
++      /* Check if we can use jraddiusp.  */
++      use_jraddiusp_p = (TARGET_MICROMIPS
++			 && !crtl->calls_eh_return
++			 && !sibcall_p
++			 && step2 > 0
++			 && (step2 & 3) == 0
++			 && step2 <= (31 << 2));
+ 
+-      /* Deallocate the final bit of the frame.  */
+-      if (step2 > 0)
+-	emit_insn (gen_add3_insn (stack_pointer_rtx,
+-				  stack_pointer_rtx,
+-				  GEN_INT (step2)));
++      if (cfun->machine->interrupt_handler_p)
++	{
++	  HOST_WIDE_INT offset;
++	  rtx mem;
++
++	  offset = frame->cop0_sp_offset - (frame->total_size - step2);
++	  if (!cfun->machine->keep_interrupts_masked_p)
++	    {
++	      /* Restore the original EPC.  */
++	      mem = gen_frame_mem (word_mode,
++				   plus_constant (stack_pointer_rtx, offset));
++	      mips_emit_move (gen_rtx_REG (word_mode, K0_REG_NUM), mem);
++	      offset -= UNITS_PER_WORD;
++
++	      /* Move to COP0 EPC.  */
++	      emit_insn (gen_cop0_move (gen_rtx_REG (SImode, COP0_EPC_REG_NUM),
++					gen_rtx_REG (SImode, K0_REG_NUM)));
++	    }
++
++	  /* Restore the original Status.  */
++	  mem = gen_frame_mem (word_mode,
++			       plus_constant (stack_pointer_rtx, offset));
++	  mips_emit_move (gen_rtx_REG (word_mode, K0_REG_NUM), mem);
++	  offset -= UNITS_PER_WORD;
++
++	  /* If we don't use shoadow register set, we need to update SP.  */
++	  if (!cfun->machine->use_shadow_register_set_p && step2 > 0)
++	    emit_insn (gen_add3_insn (stack_pointer_rtx,
++				      stack_pointer_rtx,
++				      GEN_INT (step2)));
++
++	  /* Move to COP0 Status.  */
++	  emit_insn (gen_cop0_move (gen_rtx_REG (SImode, COP0_STATUS_REG_NUM),
++				    gen_rtx_REG (SImode, K0_REG_NUM)));
++	}
++      else
++	{
++	  /* Deallocate the final bit of the frame.  */
++	  if (step2 > 0 && !use_jraddiusp_p)
++	    emit_insn (gen_add3_insn (stack_pointer_rtx,
++				      stack_pointer_rtx,
++				      GEN_INT (step2)));
++	}
+     }
+ 
+   /* Add in the __builtin_eh_return stack adjustment.  We need to
+@@ -9516,18 +10641,48 @@
+ 
+   if (!sibcall_p)
+     {
+-      unsigned int regno;
+-
+-      /* When generating MIPS16 code, the normal mips_for_each_saved_reg
+-	 path will restore the return address into $7 rather than $31.  */
+-      if (TARGET_MIPS16
+-	  && !GENERATE_MIPS16E_SAVE_RESTORE
+-	  && BITSET_P (frame->mask, 31))
+-	regno = GP_REG_FIRST + 7;
+-      else
+-	regno = GP_REG_FIRST + 31;
+       mips_expand_before_return ();
+-      emit_jump_insn (gen_return_internal (gen_rtx_REG (Pmode, regno)));
++      if (cfun->machine->interrupt_handler_p)
++	{
++	  /* Interrupt handlers generate eret or deret.  */
++	  if (cfun->machine->use_debug_exception_return_p)
++	    emit_jump_insn (gen_mips_deret ());
++	  else
++	    emit_jump_insn (gen_mips_eret ());
++	}
++      else
++	{
++	  unsigned int regno;
++
++	  /* When generating MIPS16 code, the normal
++	     mips_for_each_saved_gpr_and_fpr path will restore the return
++	     address into $7 rather than $31.  */
++	  if (TARGET_MIPS16
++	      && !GENERATE_MIPS16E_SAVE_RESTORE
++	      && BITSET_P (frame->mask, 31))
++	    regno = GP_REG_FIRST + 7;
++	  else
++	    regno = GP_REG_FIRST + 31;
++
++	  if (use_jraddiusp_p)
++	    emit_jump_insn (gen_mips_jraddiusp (GEN_INT (step2)));
++	  else
++	    emit_jump_insn (gen_return_internal (gen_rtx_REG (Pmode, regno)));
++	}
++    }
++
++  /* Search from the beginning to the first use of K0 or K1.  */
++  if (cfun->machine->interrupt_handler_p
++      && !cfun->machine->keep_interrupts_masked_p)
++    {
++      for (insn = get_insns (); insn != NULL_RTX; insn = NEXT_INSN (insn))
++	if (INSN_P (insn)
++	    && for_each_rtx (&PATTERN(insn), mips_kernel_reg_p, NULL))
++	  break;
++      gcc_assert (insn != NULL_RTX);
++      /* Insert disable interrupts before the first use of K0 or K1.  */
++      emit_insn_before (gen_mips_di (), insn);
++      emit_insn_before (gen_mips_ehb (), insn);
+     }
+ }
+ 
+@@ -9538,6 +10693,10 @@
+ bool
+ mips_can_use_return_insn (void)
+ {
++  /* Interrupt handlers need to go through the epilogue.  */
++  if (cfun->machine->interrupt_handler_p)
++    return false;
++
+   if (!reload_completed)
+     return false;
+ 
+@@ -10469,10 +11628,15 @@
+ 	  s = "bnez\t%2,1f\n\tbreak\t7\n1:";
+ 	}
+       else if (GENERATE_DIVIDE_TRAPS)
+-        {
+-	  output_asm_insn (s, operands);
+-	  s = "teq\t%2,%.,7";
+-        }
++	{
++	  if (TUNE_74K)
++	    output_asm_insn ("teq\t%2,%.,7", operands);
++	  else
++	    {
++	      output_asm_insn (s, operands);
++	      s = "teq\t%2,%.,7";
++	    }
++	}
+       else
+ 	{
+ 	  output_asm_insn ("%(bne\t%2,%.,1f", operands);
+@@ -10784,7 +11948,17 @@
+       ready[pos2] = temp;
+     }
+ }
+-
++
++int
++mips_mult_madd_chain_bypass_p (rtx out_insn ATTRIBUTE_UNUSED,
++			       rtx in_insn ATTRIBUTE_UNUSED)
++{
++  if (reload_completed)
++    return false;
++  else
++    return true;
++}
++
+ /* Used by TUNE_MACC_CHAINS to record the last scheduled instruction
+    that may clobber hi or lo.  */
+ static rtx mips_macc_chains_last_hilo;
+@@ -13483,7 +14657,7 @@
+   reload_completed = 0;
+ }
+ 
+-/* The last argument passed to mips_set_mips16_mode, or negative if the
++/* The last argument passed to mips_set_mips16_micromips_mode, or negative if the
+    function hasn't been called yet.
+ 
+    There are two copies of this information.  One is saved and restored
+@@ -13491,16 +14665,20 @@
+    invocation.  The information calculated by mips_set_mips16_mode
+    is invalid unless the two variables are the same.  */
+ static int was_mips16_p = -1;
++static int was_micromips_p = -1;
+ static GTY(()) int was_mips16_pch_p = -1;
++static GTY(()) int was_micromips_pch_p = -1;
+ 
+ /* Set up the target-dependent global state so that it matches the
+    current function's ISA mode.  */
+ 
+ static void
+-mips_set_mips16_mode (int mips16_p)
++mips_set_mips16_micromips_mode (int mips16_p, int micromips_p)
+ {
+   if (mips16_p == was_mips16_p
+-      && mips16_p == was_mips16_pch_p)
++      && micromips_p == was_micromips_p
++      && mips16_p == was_mips16_pch_p
++      && micromips_p == was_micromips_pch_p)
+     return;
+ 
+   /* Restore base settings of various flags.  */
+@@ -13556,6 +14734,18 @@
+       /* Switch to normal (non-MIPS16) mode.  */
+       target_flags &= ~MASK_MIPS16;
+ 
++      if (micromips_p)
++	{
++	  /* Switch to microMIPS mode.  */
++	  target_flags |= MASK_MICROMIPS;
++
++	  /* Avoid branch likely.  */
++	  target_flags &= ~MASK_BRANCHLIKELY;
++	}
++      else
++	/* Switch to normal (non-microMIPS) mode.  */
++	target_flags &= ~MASK_MICROMIPS;
++
+       /* Provide default values for align_* for 64-bit targets.  */
+       if (TARGET_64BIT)
+ 	{
+@@ -13578,8 +14768,10 @@
+     /* Reinitialize target-dependent state.  */
+     target_reinit ();
+ 
++  was_micromips_p = micromips_p;
+   was_mips16_p = mips16_p;
+   was_mips16_pch_p = mips16_p;
++  was_micromips_pch_p = micromips_p;
+ }
+ 
+ /* Implement TARGET_SET_CURRENT_FUNCTION.  Decide whether the current
+@@ -13588,7 +14780,48 @@
+ static void
+ mips_set_current_function (tree fndecl)
+ {
+-  mips_set_mips16_mode (mips_use_mips16_mode_p (fndecl));
++  mips_set_mips16_micromips_mode (mips_use_mips16_mode_p (fndecl),
++				  mips_use_micromips_mode_p (fndecl));
++}
++
++/* A for_each_rtx callback.  Stop the search if *X is an AT register.  */
++
++static int
++mips_at_reg_p (rtx *x, void *data ATTRIBUTE_UNUSED)
++{
++  return GET_CODE (*x) == REG && REGNO (*x) == AT_REGNUM;
++}
++
++
++/* Implement FINAL_PRESCAN_INSN.  */
++
++void
++mips_final_prescan_insn (rtx insn, rtx *opvec, int noperands)
++{
++  int i;
++
++  /* We need to emit ".set noat" before an instruction that accesses
++     $1 (AT).  */
++  if (recog_memoized (insn) >= 0)
++    for (i = 0; i < noperands; i++)
++      if (for_each_rtx (&opvec[i], mips_at_reg_p, NULL))
++	if (set_noat++ == 0)
++	  fprintf (asm_out_file, "\t.set\tnoat\n");
++}
++
++/* Implement TARGET_ASM_FINAL_POSTSCAN_INSN.  */
++
++static void
++mips_final_postscan_insn (FILE *file, rtx insn, rtx *opvec, int noperands)
++{
++  int i;
++
++  /* Close any ".set noat" block opened by mips_final_prescan_insn.  */
++  if (recog_memoized (insn) >= 0)
++    for (i = 0; i < noperands; i++)
++      if (for_each_rtx (&opvec[i], mips_at_reg_p, NULL))
++	if (--set_noat == 0)
++	  fprintf (file, "\t.set\tat\n");
+ }
+ 
+ /* Allocate a chunk of memory for per-function machine-dependent data.  */
+@@ -13800,6 +15033,13 @@
+   mips_base_mips16 = TARGET_MIPS16;
+   target_flags &= ~MASK_MIPS16;
+ 
++  mips_base_micromips = TARGET_MICROMIPS;
++  target_flags &= ~MASK_MICROMIPS;
++
++  /* MIPS16 and microMIPS cannot coexist  */
++  if (TARGET_MICROMIPS && TARGET_MIPS16)
++    error ("unsupported combination: %s", "-mips16 -mmicromips");
++
+ #ifdef SUBTARGET_OVERRIDE_OPTIONS
+   SUBTARGET_OVERRIDE_OPTIONS;
+ #endif
+@@ -13957,6 +15197,14 @@
+        long as any indirect jumps use $25.  */
+     flag_pic = 1;
+ 
++  /* For SDE, switch on ABICALLS mode if -fpic or -fpie were used, and the
++     user hasn't explicitly disabled these modes.  */
++  if (TARGET_MIPS_SDE
++      && (flag_pic || flag_pie) && !TARGET_ABICALLS
++      && !((target_flags_explicit & MASK_ABICALLS))
++      && mips_abi != ABI_EABI)
++    target_flags |= MASK_ABICALLS;
++
+   /* -mvr4130-align is a "speed over size" optimization: it usually produces
+      faster code, but at the expense of more nops.  Enable it at -O3 and
+      above.  */
+@@ -14157,7 +15405,7 @@
+ 
+      Do all CPP-sensitive stuff in non-MIPS16 mode; we'll switch to
+      MIPS16 mode afterwards if need be.  */
+-  mips_set_mips16_mode (false);
++  mips_set_mips16_micromips_mode (mips_base_mips16, mips_base_micromips);
+ }
+ 
+ /* Swap the register information for registers I and I + 1, which
+@@ -14309,6 +15557,431 @@
+       reg_alloc_order[24] = 0;
+     }
+ }
++
++/* Implement EPILOGUE_USES.  */
++
++bool
++mips_epilogue_uses (unsigned int regno)
++{
++  /* Say that the epilogue uses the return address register.  Note that
++     in the case of sibcalls, the values "used by the epilogue" are
++     considered live at the start of the called function.  */
++  if (regno == 31)
++    return true;
++
++  /* If using a GOT, say that the epilogue also uses GOT_VERSION_REGNUM.
++     See the comment above load_call<mode> for details.  */
++  if (TARGET_USE_GOT && (regno) == GOT_VERSION_REGNUM)
++    return true;
++
++  /* An interrupt handler must preserve some registers that are
++     ordinarily call-clobbered.  */
++  if (cfun->machine->interrupt_handler_p
++      && mips_interrupt_extra_call_saved_reg_p (regno))
++    return true;
++
++  return false;
++}
++
++/* Return true if PATTERN matches the kind of instruction generated by
++   micromips_build_save_restore.  SAVE_P is true for store.  */
++
++bool
++micromips_save_restore_pattern_p (bool save_p, rtx pattern)
++{
++  int n;
++  HOST_WIDE_INT first_offset = 0;
++  rtx first_base = 0;
++  unsigned int first_regno = 0;
++
++  for (n = 0; n < XVECLEN (pattern, 0); n++)
++    {
++      rtx set, reg, mem, this_base;
++      HOST_WIDE_INT this_offset;
++      unsigned int this_regno;
++
++      /* Check that we have a SET.  */
++      set = XVECEXP (pattern, 0, n);
++      if (GET_CODE (set) != SET)
++	return false;
++
++      /* Check that the SET is a load (if restoring) or a store
++	 (if saving).  */
++      mem = save_p ? SET_DEST (set) : SET_SRC (set);
++      if (!MEM_P (mem))
++	return false;
++
++      /* Check that the address is the sum of base and a
++	 possibly-zero constant offset.  */
++      mips_split_plus (XEXP (mem, 0), &this_base, &this_offset);
++      if (!REG_P (this_base))
++	return false;
++
++      if (n == 0)
++	{
++	  first_base = this_base;
++	  first_offset = this_offset;
++	}
++      else
++	{
++	  /* Check if this_base is the same as first_base.  */
++	  if (REGNO (this_base) != REGNO (first_base))
++	    return false;
++
++	  /* Check if this_offset is first_offset + UNITS_PER_WORD * n.  */
++	  if (this_offset != first_offset + UNITS_PER_WORD * n)
++	    return false;
++	}
++
++      /* Check that SET's other operand is a register.  */
++      reg = save_p ? SET_SRC (set) : SET_DEST (set);
++      if (!REG_P (reg))
++	return false;
++
++      /* Make sure the order of regno is "$16-$23, $30, $31", "$16-$23, $30",
++	 or "$31".  */
++      this_regno = REGNO (reg);
++      if (n == 0)
++	{
++	  if (this_regno != 16 && this_regno != 31)
++	    return false;
++	  first_regno = this_regno;
++	}
++      else if (n == 8) /* For s8.  */
++	{
++	  if (n == XVECLEN (pattern, 0) - 1)
++	    {
++	      if (this_regno != 30 && this_regno != 31)
++		return false;
++	    }
++	  else
++	    {
++	      if (this_regno != 30)
++		return false;
++	    }
++	}
++      else if (n != XVECLEN (pattern, 0) - 1)
++	{
++	  if (this_regno != first_regno + n)
++	    return false;
++	}
++      else /* The last item.  */
++	{
++	  if ((this_regno != first_regno + n) && this_regno != 31)
++	    return false;
++	}
++    }
++
++  return true;
++}
++
++/* Return the assembly instruction for microMIPS lwm or swm.
++   SAVE_P and PATTERN are as for micromips_save_restore_pattern_p.  */
++
++const char *
++micromips_output_save_restore (bool save_p, rtx pattern)
++{
++  static char buffer[300];
++  char *s;
++  int n;
++  HOST_WIDE_INT offset;
++  rtx base, mem, set, reg, last_set, last_reg;
++
++  /* Parse the pattern.  */
++  if (!micromips_save_restore_pattern_p (save_p, pattern))
++    gcc_unreachable ();
++
++  s = strcpy (buffer, save_p ? "swm\t" : "lwm\t");
++  s += strlen (s);
++  n = XVECLEN (pattern, 0);
++
++  set = XVECEXP (pattern, 0, 0);
++  reg = save_p ? SET_SRC (set) : SET_DEST (set);
++  mem = save_p ? SET_DEST (set) : SET_SRC (set);
++  mips_split_plus (XEXP (mem, 0), &base, &offset);
++
++  last_set = XVECEXP (pattern, 0, n - 1);
++  last_reg = save_p ? SET_SRC (last_set) : SET_DEST (last_set);
++
++  if (REGNO (last_reg) == 31)
++    n--;
++
++  if (n == 0)
++    ;
++  else if (n == 1)
++    s += sprintf (s, "%s,", reg_names[16]);
++  else if (n < 9)
++    s += sprintf (s, "%s-%s,", reg_names[16], reg_names[15 + n]);
++  else if (n == 9)
++    s += sprintf (s, "%s-%s,%s,", reg_names[16], reg_names[23],
++		  reg_names[30]);
++  else
++    gcc_unreachable ();
++
++  if (REGNO (last_reg) == 31)
++    s += sprintf (s, "%s,", reg_names[31]);
++
++  s += sprintf (s, "%d(%s)", (int)offset, reg_names[REGNO (base)]);
++  return buffer;
++}
++
++/* Return true if MEM1 and MEM2 use the same base register, and the
++   offset of MEM2 equals the offset of MEM1 plus 4.  FIRST_REG is the
++   register into (from) which the contents of MEM1 will be loaded
++   (stored), depending on the value of LOAD_P.
++   SWAP_P is true when the 1st and 2nd instructions are swapped.  */
++
++bool
++micromips_load_store_pair_p (bool load_p, bool swap_p, rtx first_reg, rtx mem1, rtx mem2)
++{
++  rtx base1, base2, mem1_temp, mem2_temp;
++  HOST_WIDE_INT offset1, offset2;
++
++  if (!MEM_P (mem1) || !MEM_P (mem2))
++    return false;
++
++  mem1_temp = XEXP (mem1, 0);
++  mem2_temp = XEXP (mem2, 0);
++
++  /* Make sure memory is base plus offset.  */
++  if (GET_CODE (mem1_temp) != PLUS
++      || GET_CODE (mem2_temp) != PLUS
++      || GET_CODE (XEXP (mem1_temp, 1)) != CONST_INT
++      || GET_CODE (XEXP (mem2_temp, 1)) != CONST_INT)
++    return false;
++
++  mips_split_plus (mem1_temp, &base1, &offset1);
++  mips_split_plus (mem2_temp, &base2, &offset2);
++
++  if (!REG_P (base1) || !REG_P (base2))
++    return false;
++
++  if (REGNO (base1) != REGNO (base2))
++    return false;
++
++  /* Avoid invalid load pair instructions.  */
++  if (load_p && REGNO (first_reg) == REGNO (base1))
++    return false;
++
++  /* We must avoid this case for anti-dependence.
++     Ex:  lw $3, 4($3)
++          lw $2, 0($3)
++     first_reg is $2, but the base is $3.  */
++  if (load_p && swap_p && (REGNO (first_reg) + 1) == REGNO (base1))
++    return false;
++
++  if (offset1 + 4 != offset2)
++    return false;
++
++  if (offset1 < -2048 || offset1 > 2047)
++    return false;
++
++  return true;
++}
++
++/* Return the assembly instruction for microMIPS lwp or swp.
++   LOAD_P is true for load.  */
++
++const char *
++micromips_output_load_store_pair (bool load_p, rtx reg, rtx mem)
++{
++  static char buffer[300];
++  HOST_WIDE_INT offset;
++  rtx base;
++
++  if (!REG_P (reg) || !MEM_P (mem))
++    gcc_unreachable ();
++
++  mips_split_plus (XEXP (mem, 0), &base, &offset);
++  if (!REG_P (base))
++    gcc_unreachable ();
++
++  sprintf (buffer, "%s\t%s,%d(%s)", load_p ? "lwp" : "swp",
++	   reg_names [REGNO (reg)], (int) offset, reg_names [REGNO (base)]);
++  return buffer;
++}
++
++/* Return true if reg1 and reg2 can be target of movep.  */
++
++bool
++micromips_movep_target_p (rtx reg1, rtx reg2)
++{
++  int regno1, regno2, pair, i;
++  int match[8] = {0x00000060,	/* 5, 6 */
++		  0x000000a0,	/* 5, 7 */
++		  0x000000c0,	/* 6, 7 */
++		  0x00200010,	/* 4, 21 */
++		  0x00400010,	/* 4, 22 */
++		  0x00000030,	/* 4, 5 */
++		  0x00000050,	/* 4, 6 */
++		  0x00000090};	/* 4, 7 */
++
++  if (!REG_P (reg1) || !REG_P (reg2))
++    return false;
++
++  regno1 = REGNO (reg1);
++  regno2 = REGNO (reg2);
++
++  if (!GP_REG_P (regno1)  || !GP_REG_P (regno2))
++    return false;
++
++  pair = (1 << regno1) | (1 << regno2);
++
++  for (i = 0; i < 8; i++)
++    {
++      if (pair == match[i])
++	return true;
++    }
++
++  return false;
++}
++
++#ifdef CVMX_SHARED_BSS_FLAGS
++/* Handle a "cvmx_shared" attribute; arguments as in 
++   struct attribute_spec.handler.  */
++
++static tree
++octeon_handle_cvmx_shared_attribute (tree *node, tree name, 
++				     tree args ATTRIBUTE_UNUSED, 
++				     int flags ATTRIBUTE_UNUSED, 
++				     bool *no_add_attrs)
++{
++  if (TREE_CODE (*node) != VAR_DECL)
++    {
++      warning (OPT_Wattributes, "%qs attribute only applies to variables",
++              IDENTIFIER_POINTER (name));
++      *no_add_attrs = true;
++    }
++
++  return NULL_TREE;
++}
++
++/* Switch to the appropriate section for output of DECL.
++   DECL is either a `VAR_DECL' node or a constant of some sort.
++   RELOC indicates whether forming the initial value of DECL requires
++   link-time relocations.  */
++
++static section *
++octeon_select_section (tree decl, int reloc, unsigned HOST_WIDE_INT align)
++{
++  if (decl && TREE_CODE (decl) == VAR_DECL 
++      && lookup_attribute ("cvmx_shared", DECL_ATTRIBUTES (decl)))
++    {
++      const char *sname = NULL;
++      unsigned int flags = SECTION_WRITE;
++
++      switch (categorize_decl_for_section (decl, reloc))
++        {
++	  case SECCAT_DATA:
++	  case SECCAT_SDATA:
++	  case SECCAT_RODATA:
++	  case SECCAT_SRODATA:
++	  case SECCAT_RODATA_MERGE_STR:
++	  case SECCAT_RODATA_MERGE_STR_INIT:
++	  case SECCAT_RODATA_MERGE_CONST:
++	  case SECCAT_DATA_REL:
++	  case SECCAT_DATA_REL_LOCAL:
++	  case SECCAT_DATA_REL_RO:
++	  case SECCAT_DATA_REL_RO_LOCAL:
++	    sname = ".cvmx_shared";
++	    break;
++	  case SECCAT_BSS:
++	  case SECCAT_SBSS:
++	    sname = ".cvmx_shared_bss";
++	    flags |= SECTION_BSS;
++	    break;
++	  case SECCAT_TEXT:
++	  case SECCAT_TDATA:
++	  case SECCAT_TBSS:
++            break;
++        }
++      if (sname)
++	{
++	  return get_section (sname, flags, decl);
++	}
++    }
++  return default_elf_select_section (decl, reloc, align);
++}
++
++/* Build up a unique section name, expressed as a
++   STRING_CST node, and assign it to DECL_SECTION_NAME (decl).
++   RELOC indicates whether the initial value of EXP requires
++   link-time relocations.  */
++
++static void 
++octeon_unique_section (tree decl, int reloc)
++{
++  if (decl && TREE_CODE (decl) == VAR_DECL 
++      && lookup_attribute ("cvmx_shared", DECL_ATTRIBUTES (decl)))
++    {
++      const char *sname = NULL;
++
++      if (! DECL_ONE_ONLY (decl))
++	{
++	  section *sect;
++	  sect = octeon_select_section (decl, reloc, DECL_ALIGN (decl));
++	  DECL_SECTION_NAME (decl) = build_string (strlen (sect->named.name),
++						   sect->named.name);
++	  return;
++	}
++
++      switch (categorize_decl_for_section (decl, reloc))
++        {
++	  case SECCAT_BSS:
++	  case SECCAT_SBSS:
++	    sname = ".cvmx_shared_bss.linkonce."; 
++	    break;
++	  case SECCAT_SDATA:
++	  case SECCAT_DATA:
++	  case SECCAT_DATA_REL:
++	  case SECCAT_DATA_REL_LOCAL:
++	  case SECCAT_DATA_REL_RO:
++	  case SECCAT_DATA_REL_RO_LOCAL:
++	  case SECCAT_RODATA:
++	  case SECCAT_SRODATA:
++	  case SECCAT_RODATA_MERGE_STR:
++	  case SECCAT_RODATA_MERGE_STR_INIT:
++	  case SECCAT_RODATA_MERGE_CONST:
++	    sname = ".cvmx_shared.linkonce.";
++	    break;
++	  case SECCAT_TEXT:
++	  case SECCAT_TDATA:
++	  case SECCAT_TBSS:
++	    break; 
++	}
++      if (sname)
++        {
++	  const char *name;
++	  size_t plen, nlen;
++	  char *string;
++	  plen = strlen (sname);
++
++	  name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
++	  name = targetm.strip_name_encoding (name);
++	  nlen = strlen (name);
++
++	  string = alloca (plen + nlen + 1);
++	  memcpy (string, sname, plen);
++	  memcpy (string + plen, name, nlen + 1);
++	  DECL_SECTION_NAME (decl) = build_string (nlen + plen, string);
++	  return;
++        }
++    }
++  default_unique_section (decl, reloc);
++}
++
++/* Emit an uninitialized cvmx_shared variable.  */
++void
++octeon_output_shared_variable (FILE *stream, tree decl, const char *name,
++                               unsigned HOST_WIDE_INT size, int align)
++{
++  switch_to_section (get_section (".cvmx_shared_bss", CVMX_SHARED_BSS_FLAGS,
++				  NULL_TREE));
++  ASM_OUTPUT_ALIGN (stream, floor_log2 (align / BITS_PER_UNIT));
++  ASM_DECLARE_OBJECT_NAME (stream, name, decl);
++  ASM_OUTPUT_SKIP (stream, size != 0 ? size : 1);
++}
++#endif
+ 
+ /* Initialize the GCC target structure.  */
+ #undef TARGET_ASM_ALIGNED_HI_OP
+@@ -14477,6 +16150,9 @@
+ #undef TARGET_IRA_COVER_CLASSES
+ #define TARGET_IRA_COVER_CLASSES mips_ira_cover_classes
+ 
++#undef TARGET_ASM_FINAL_POSTSCAN_INSN
++#define TARGET_ASM_FINAL_POSTSCAN_INSN mips_final_postscan_insn
++
+ struct gcc_target targetm = TARGET_INITIALIZER;
+ 
+ #include "gt-mips.h"
+--- a/src/gcc/config/mips/mips.h
++++ b/src/gcc/config/mips/mips.h
+@@ -342,6 +342,9 @@
+ #define TARGET_IRIX	   0
+ #define TARGET_IRIX6	   0
+ 
++/* SDE specific stuff.  */
++#define TARGET_MIPS_SDE    0
++
+ /* Define preprocessor macros for the -march and -mtune options.
+    PREFIX is either _MIPS_ARCH or _MIPS_TUNE, INFO is the selected
+    processor.  If INFO's canonical name is "foo", define PREFIX to
+@@ -416,6 +419,12 @@
+       if (TARGET_SMARTMIPS)						\
+ 	builtin_define ("__mips_smartmips");				\
+ 									\
++      if (TARGET_MICROMIPS)						\
++	builtin_define ("__mips_micromips");				\
++									\
++      if (TARGET_MCU)							\
++	builtin_define ("__mips_mcu");					\
++									\
+       if (TARGET_DSP)							\
+ 	{								\
+ 	  builtin_define ("__mips_dsp");				\
+@@ -708,8 +717,9 @@
+        |march=r10000|march=r12000|march=r14000|march=r16000:-mips4} \
+      %{march=mips32|march=4kc|march=4km|march=4kp|march=4ksc:-mips32} \
+      %{march=mips32r2|march=m4k|march=4ke*|march=4ksd|march=24k* \
+-       |march=34k*|march=74k*: -mips32r2} \
+-     %{march=mips64|march=5k*|march=20k*|march=sb1*|march=sr71000: -mips64} \
++       |march=34k*|march=74k*|march=m14k*|march=1004k*: -mips32r2} \
++     %{march=mips64|march=5k*|march=20k*|march=sb1*|march=sr71000 \
++       |march=xlr: -mips64} \
+      %{march=mips64r2|march=octeon: -mips64r2} \
+      %{!march=*: -" MULTILIB_ISA_DEFAULT "}}"
+ 
+@@ -720,7 +730,8 @@
+ #define MIPS_ARCH_FLOAT_SPEC \
+   "%{mhard-float|msoft-float|march=mips*:; \
+      march=vr41*|march=m4k|march=4k*|march=24kc|march=24kec \
+-     |march=34kc|march=74kc|march=5kc|march=octeon: -msoft-float; \
++     |march=34kc|march=74kc|march=1004kc|march=5kc|march=m14k* \
++     |march=octeon|march=xlr: -msoft-float;		  \
+      march=*: -mhard-float}"
+ 
+ /* A spec condition that matches 32-bit options.  It only works if
+@@ -731,8 +742,9 @@
+ 
+ /* Support for a compile-time default CPU, et cetera.  The rules are:
+    --with-arch is ignored if -march is specified or a -mips is specified
+-     (other than -mips16).
+-   --with-tune is ignored if -mtune is specified.
++     (other than -mips16); likewise --with-arch-32 and --with-arch-64.
++   --with-tune is ignored if -mtune is specified; likewise
++     --with-tune-32 and --with-tune-64.
+    --with-abi is ignored if -mabi is specified.
+    --with-float is ignored if -mhard-float or -msoft-float are
+      specified.
+@@ -740,7 +752,11 @@
+      specified. */
+ #define OPTION_DEFAULT_SPECS \
+   {"arch", "%{" MIPS_ARCH_OPTION_SPEC ":;: -march=%(VALUE)}" }, \
++  {"arch_32", "%{!mabi=*|mabi=32:%{" MIPS_ARCH_OPTION_SPEC ":;: -march=%(VALUE)}}" }, \
++  {"arch_64", "%{mabi=n32|mabi=64:%{" MIPS_ARCH_OPTION_SPEC ":;: -march=%(VALUE)}}" }, \
+   {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }, \
++  {"tune_32", "%{!mabi=*|mabi=32:%{!mtune=*:-mtune=%(VALUE)}}" }, \
++  {"tune_64", "%{mabi=n32|mabi=64:%{!mtune=*:-mtune=%(VALUE)}}" }, \
+   {"abi", "%{!mabi=*:-mabi=%(VALUE)}" }, \
+   {"float", "%{!msoft-float:%{!mhard-float:-m%(VALUE)-float}}" }, \
+   {"divide", "%{!mdivide-traps:%{!mdivide-breaks:-mdivide-%(VALUE)}}" }, \
+@@ -750,7 +766,7 @@
+ 
+ /* A spec that infers the -mdsp setting from an -march argument.  */
+ #define BASE_DRIVER_SELF_SPECS \
+-  "%{!mno-dsp:%{march=24ke*|march=34k*|march=74k*: -mdsp}}"
++  "%{!mno-dsp:%{march=24ke*|march=34k*|march=74k*|march=1004k*: -mdsp}}"
+ 
+ #define DRIVER_SELF_SPECS BASE_DRIVER_SELF_SPECS
+ 
+@@ -969,7 +985,8 @@
+ 				     || ISA_MIPS64R2))
+ 
+ /* ISA has lwxs instruction (load w/scaled index address.  */
+-#define ISA_HAS_LWXS		(TARGET_SMARTMIPS && !TARGET_MIPS16)
++#define ISA_HAS_LWXS		((TARGET_SMARTMIPS || TARGET_MICROMIPS) \
++				 && !TARGET_MIPS16)
+ 
+ /* The DSP ASE is available.  */
+ #define ISA_HAS_DSP		(TARGET_DSP && !TARGET_MIPS16)
+@@ -1038,6 +1055,11 @@
+ /* ISA includes the bbit* instructions.  */
+ #define ISA_HAS_BBIT		(TARGET_OCTEON && !TARGET_MIPS16)
+ 
++/* ISA has single-instruction unaligned load/store support.  */
++#define ISA_HAS_UL_US          (TARGET_OCTEON \
++                                && TARGET_OCTEON_UNALIGNED \
++                                && !TARGET_MIPS16)
++ 
+ /* ISA includes the cins instruction.  */
+ #define ISA_HAS_CINS		(TARGET_OCTEON && !TARGET_MIPS16)
+ 
+@@ -1055,6 +1077,7 @@
+ 
+ /* The CACHE instruction is available.  */
+ #define ISA_HAS_CACHE (TARGET_CACHE_BUILTIN && !TARGET_MIPS16)
++ 
+ 
+ /* Add -G xx support.  */
+ 
+@@ -1137,6 +1160,8 @@
+ %{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} \
+ %{mips32*} %{mips64*} \
+ %{mips16} %{mno-mips16:-no-mips16} \
++%{mmicromips} %{mno-micromips} \
++%{mmcu} %{mno-mcu} \
+ %{mips3d} %{mno-mips3d:-no-mips3d} \
+ %{mdmx} %{mno-mdmx:-no-mdmx} \
+ %{mdsp} %{mno-dsp} \
+@@ -1152,6 +1177,7 @@
+ %{mshared} %{mno-shared} \
+ %{msym32} %{mno-sym32} \
+ %{mtune=*} %{v} \
++%{mocteon-useun} %{mno-octeon-useun} \
+ %(subtarget_asm_spec)"
+ 
+ /* Extra switches sometimes passed to the linker.  */
+@@ -1622,6 +1648,9 @@
+ #define GP_REG_LAST  31
+ #define GP_REG_NUM   (GP_REG_LAST - GP_REG_FIRST + 1)
+ #define GP_DBX_FIRST 0
++#define K0_REG_NUM   (GP_REG_FIRST + 26)
++#define K1_REG_NUM   (GP_REG_FIRST + 27)
++#define KERNEL_REG_P(REGNO)	(IN_RANGE (REGNO, K0_REG_NUM, K1_REG_NUM))
+ 
+ #define FP_REG_FIRST 32
+ #define FP_REG_LAST  63
+@@ -1649,6 +1678,10 @@
+ #define COP0_REG_LAST 111
+ #define COP0_REG_NUM (COP0_REG_LAST - COP0_REG_FIRST + 1)
+ 
++#define COP0_STATUS_REG_NUM	(COP0_REG_FIRST + 12)
++#define COP0_CAUSE_REG_NUM	(COP0_REG_FIRST + 13)
++#define COP0_EPC_REG_NUM	(COP0_REG_FIRST + 14)
++
+ #define COP2_REG_FIRST 112
+ #define COP2_REG_LAST 143
+ #define COP2_REG_NUM (COP2_REG_LAST - COP2_REG_FIRST + 1)
+@@ -1666,6 +1699,29 @@
+ #define AT_REGNUM	(GP_REG_FIRST + 1)
+ #define HI_REGNUM	(TARGET_BIG_ENDIAN ? MD_REG_FIRST : MD_REG_FIRST + 1)
+ #define LO_REGNUM	(TARGET_BIG_ENDIAN ? MD_REG_FIRST + 1 : MD_REG_FIRST)
++#define AC1HI_REGNUM	(TARGET_BIG_ENDIAN \
++			 ? DSP_ACC_REG_FIRST : DSP_ACC_REG_FIRST + 1)
++#define AC1LO_REGNUM	(TARGET_BIG_ENDIAN \
++			 ? DSP_ACC_REG_FIRST + 1 : DSP_ACC_REG_FIRST)
++#define AC2HI_REGNUM	(TARGET_BIG_ENDIAN \
++			 ? DSP_ACC_REG_FIRST + 2 : DSP_ACC_REG_FIRST + 3)
++#define AC2LO_REGNUM	(TARGET_BIG_ENDIAN \
++			 ? DSP_ACC_REG_FIRST + 3 : DSP_ACC_REG_FIRST + 2)
++#define AC3HI_REGNUM	(TARGET_BIG_ENDIAN \
++			 ? DSP_ACC_REG_FIRST + 4 : DSP_ACC_REG_FIRST + 5)
++#define AC3LO_REGNUM	(TARGET_BIG_ENDIAN \
++			 ? DSP_ACC_REG_FIRST + 5 : DSP_ACC_REG_FIRST + 4)
++
++/* A few bitfield locations for the coprocessor registers.  */
++/* Request Interrupt Priority Level is from bit 10 to bit 15 of
++   the cause register for the EIC interrupt mode.  */
++#define CAUSE_IPL	10
++/* Interrupt Priority Level is from bit 10 to bit 15 of the status register.  */
++#define SR_IPL		10
++/* Exception Level is at bit 1 of the status register.  */
++#define SR_EXL		1
++/* Interrupt Enable is at bit 0 of the status register.  */
++#define SR_IE		0
+ 
+ /* FPSW_REGNUM is the single condition code used if !ISA_HAS_8CC.
+    If ISA_HAS_8CC, it should not be used, and an arbitrary ST_REG
+@@ -1676,6 +1732,8 @@
+   ((unsigned int) ((int) (REGNO) - GP_REG_FIRST) < GP_REG_NUM)
+ #define M16_REG_P(REGNO) \
+   (((REGNO) >= 2 && (REGNO) <= 7) || (REGNO) == 16 || (REGNO) == 17)
++#define M16STORE_REG_P(REGNO) \
++  (((REGNO) >= 2 && (REGNO) <= 7) || (REGNO) == 0 || (REGNO) == 17)
+ #define FP_REG_P(REGNO)  \
+   ((unsigned int) ((int) (REGNO) - FP_REG_FIRST) < FP_REG_NUM)
+ #define MD_REG_P(REGNO) \
+@@ -1754,11 +1812,18 @@
+    incoming arguments, the static chain pointer, or the frame pointer.
+    The epilogue temporary mustn't conflict with the return registers,
+    the PIC call register ($25), the frame pointer, the EH stack adjustment,
+-   or the EH data registers.  */
++   or the EH data registers.
++
++   If we're generating interrupt handlers, we use K0 as a temporary register
++   in prologue/epilogue code.  */
+ 
+ #define MIPS16_PIC_TEMP_REGNUM (GP_REG_FIRST + 2)
+-#define MIPS_PROLOGUE_TEMP_REGNUM (GP_REG_FIRST + 3)
+-#define MIPS_EPILOGUE_TEMP_REGNUM (GP_REG_FIRST + (TARGET_MIPS16 ? 6 : 8))
++#define MIPS_PROLOGUE_TEMP_REGNUM \
++  (cfun->machine->interrupt_handler_p ? K0_REG_NUM : GP_REG_FIRST + 3)
++#define MIPS_EPILOGUE_TEMP_REGNUM		\
++  (cfun->machine->interrupt_handler_p		\
++   ? K0_REG_NUM					\
++   : GP_REG_FIRST + (TARGET_MIPS16 ? 6 : 8))
+ 
+ #define MIPS16_PIC_TEMP gen_rtx_REG (Pmode, MIPS16_PIC_TEMP_REGNUM)
+ #define MIPS_PROLOGUE_TEMP(MODE) gen_rtx_REG (MODE, MIPS_PROLOGUE_TEMP_REGNUM)
+@@ -2284,14 +2349,7 @@
+ 	(mips_abi == ABI_EABI && UNITS_PER_FPVALUE >= UNITS_PER_DOUBLE)
+ 
+ 
+-/* Say that the epilogue uses the return address register.  Note that
+-   in the case of sibcalls, the values "used by the epilogue" are
+-   considered live at the start of the called function.
+-
+-   If using a GOT, say that the epilogue also uses GOT_VERSION_REGNUM.
+-   See the comment above load_call<mode> for details.  */
+-#define EPILOGUE_USES(REGNO) \
+-  ((REGNO) == 31 || (TARGET_USE_GOT && (REGNO) == GOT_VERSION_REGNUM))
++#define EPILOGUE_USES(REGNO)	mips_epilogue_uses (REGNO)
+ 
+ /* Treat LOC as a byte offset from the stack pointer and round it up
+    to the next fully-aligned offset.  */
+@@ -2660,18 +2718,48 @@
+    all calls should use assembly macros.  Otherwise, all indirect
+    calls should use "jr" or "jalr"; we will arrange to restore $gp
+    afterwards if necessary.  Finally, we can only generate direct
+-   calls for -mabicalls by temporarily switching to non-PIC mode.  */
++   calls for -mabicalls by temporarily switching to non-PIC mode.
++
++   For microMIPS jal(r), we try to generate jal(r)s when a 16-bit
++   instruction is in the delay slot of jal(r).  */
+ #define MIPS_CALL(INSN, OPERANDS, OPNO)				\
++  (TARGET_MICROMIPS						\
++   ? (TARGET_USE_GOT && !TARGET_EXPLICIT_RELOCS			\
++      ? (TARGET_JALS ? "%*" INSN "%!\t%" #OPNO "%/"		\
++		     : "%*" INSN "\t%" #OPNO "%/")		\
++      : REG_P (OPERANDS[OPNO])					\
++      ? "%*" INSN "r%!\t%" #OPNO "%/"				\
++      : TARGET_ABICALLS && flag_pic				\
++      ? (TARGET_JALS ? (".option\tpic0\n\t"			\
++			"%*" INSN "%!\t%" #OPNO "%/\n\t"	\
++         		".option\tpic2")			\
++		     : (".option\tpic0\n\t"			\
++			"%*" INSN "\t%" #OPNO "%/\n\t"		\
++			".option\tpic2"))			\
++      : (TARGET_JALS ? "%*" INSN "%!\t%" #OPNO "%/"		\
++		     : "%*" INSN "\t%" #OPNO "%/"))		\
++  : (TARGET_USE_GOT && !TARGET_EXPLICIT_RELOCS			\
++     ? "%*" INSN "\t%" #OPNO "%/"				\
++     : REG_P (OPERANDS[OPNO])					\
++     ? "%*" INSN "r\t%" #OPNO "%/"				\
++     : TARGET_ABICALLS && flag_pic				\
++     ? (".option\tpic0\n\t"					\
++        "%*" INSN "\t%" #OPNO "%/\n\t"				\
++        ".option\tpic2")					\
++     : "%*" INSN "\t%" #OPNO "%/"))
++
++/* Similar to MIPS_CALL, but this is for MICROMIPS "j" to generate
++   "jrc" when nop is in the delay slot of "jr".  */
++#define MICROMIPS_J(OPERANDS, OPNO)				\
+   (TARGET_USE_GOT && !TARGET_EXPLICIT_RELOCS			\
+-   ? "%*" INSN "\t%" #OPNO "%/"					\
++   ? "%*j\t%" #OPNO "%/"					\
+    : REG_P (OPERANDS[OPNO])					\
+-   ? "%*" INSN "r\t%" #OPNO "%/"				\
+-   : TARGET_ABICALLS_PIC2					\
++   ? "%*jr%:\t%" #OPNO						\
++   : TARGET_ABICALLS && flag_pic				\
+    ? (".option\tpic0\n\t"					\
+-      "%*" INSN "\t%" #OPNO "%/\n\t"				\
++      "%*j\t%" #OPNO "%/\n\t"					\
+       ".option\tpic2")						\
+-   : "%*" INSN "\t%" #OPNO "%/")
+-
++   : "%*j\t%" #OPNO "%/")
+ /* Control the assembler format that we output.  */
+ 
+ /* Output to assembler file text saying following lines
+@@ -3441,3 +3529,6 @@
+ 
+ /* Enable querying of DFA units.  */
+ #define CPU_UNITS_QUERY 1
++
++#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS)	\
++  mips_final_prescan_insn (INSN, OPVEC, NOPERANDS)
+--- a/src/gcc/config/mips/mips.md
++++ b/src/gcc/config/mips/mips.md
+@@ -67,7 +67,16 @@
+    (UNSPEC_SET_GOT_VERSION	46)
+    (UNSPEC_UPDATE_GOT_VERSION	47)
+    (UNSPEC_COPYGP		48)
++   (UNSPEC_ERET			49)
++   (UNSPEC_DERET		50)
++   (UNSPEC_DI			51)
++   (UNSPEC_EHB			52)
++   (UNSPEC_RDPGPR		53)
++   (UNSPEC_COP0			54)
+    
++   (UNSPEC_UNALIGNED_LOAD	60)
++   (UNSPEC_UNALIGNED_STORE	61)
++
+    (UNSPEC_ADDRESS_FIRST	100)
+ 
+    (TLS_GET_TP_REGNUM		3)
+@@ -372,6 +381,12 @@
+ ;; frsqrt       floating point reciprocal square root
+ ;; frsqrt1      floating point reciprocal square root step1
+ ;; frsqrt2      floating point reciprocal square root step2
++;; dspmac       DSP MAC instructions not saturating the accumulator
++;; dspmacsat    DSP MAC instructions that saturate the accumulator
++;; accext       DSP accumulator extract instructions
++;; accmod       DSP accumulator modify instructions
++;; dspalu       DSP ALU instructions not saturating the result
++;; dspalusat    DSP ALU instructions that saturate the result
+ ;; multi	multiword sequence (or user asm statements)
+ ;; nop		no operation
+ ;; ghost	an instruction that produces no real code
+@@ -380,7 +395,7 @@
+    prefetch,prefetchx,condmove,mtc,mfc,mthilo,mfhilo,const,arith,logical,
+    shift,slt,signext,clz,pop,trap,imul,imul3,imul3nc,imadd,idiv,idiv3,move,
+    fmove,fadd,fmul,fmadd,fdiv,frdiv,frdiv1,frdiv2,fabs,fneg,fcmp,fcvt,fsqrt,
+-   frsqrt,frsqrt1,frsqrt2,multi,nop,ghost"
++   frsqrt,frsqrt1,frsqrt2,dspmac,dspmacsat,accext,accmod,dspalu,dspalusat,multi,nop,ghost,multimem"
+   (cond [(eq_attr "jal" "!unset") (const_string "call")
+ 	 (eq_attr "got" "load") (const_string "load")
+ 
+@@ -436,6 +451,12 @@
+ 		(const_string "yes")
+ 		(const_string "no")))
+ 
++;; Types for 16-bit microMIPS instructions.
++(define_attr "micromips_type"
++  "none,mfhi,logical_not,logical_and,logical_or,logical_xor,zero_extend,
++   add,sub,shift"
++  (const_string "none"))
++
+ ;; Length of instruction in bytes.
+ (define_attr "length" ""
+    (cond [(and (eq_attr "extended_mips16" "yes")
+@@ -493,6 +514,9 @@
+ 	  (eq_attr "got" "xgot_high")
+ 	  (const_int 8)
+ 
++	  (eq_attr "type" "multimem")
++	  (const_int 4)
++
+ 	  ;; In general, constant-pool loads are extended instructions.
+ 	  (eq_attr "move_type" "loadpool")
+ 	  (const_int 8)
+@@ -1041,6 +1065,7 @@
+     <d>addu\t%0,%1,%2
+     <d>addiu\t%0,%1,%2"
+   [(set_attr "type" "arith")
++   (set_attr "micromips_type" "add")
+    (set_attr "mode" "<MODE>")])
+ 
+ (define_insn "*add<mode>3_mips16"
+@@ -1267,6 +1292,7 @@
+   ""
+   "<d>subu\t%0,%1,%2"
+   [(set_attr "type" "arith")
++   (set_attr "micromips_type" "sub")
+    (set_attr "mode" "<MODE>")])
+ 
+ (define_insn "*subsi3_extended"
+@@ -2543,6 +2569,7 @@
+     return "nor\t%0,%.,%1";
+ }
+   [(set_attr "type" "logical")
++   (set_attr "micromips_type" "logical_not")
+    (set_attr "mode" "<MODE>")])
+ 
+ ;;
+@@ -2575,6 +2602,7 @@
+    and\t%0,%1,%2
+    andi\t%0,%1,%x2"
+   [(set_attr "type" "logical")
++   (set_attr "micromips_type" "logical_and")
+    (set_attr "mode" "<MODE>")])
+ 
+ (define_insn "*and<mode>3_mips16"
+@@ -2605,6 +2633,7 @@
+    or\t%0,%1,%2
+    ori\t%0,%1,%x2"
+   [(set_attr "type" "logical")
++   (set_attr "micromips_type" "logical_or")
+    (set_attr "mode" "<MODE>")])
+ 
+ (define_insn "*ior<mode>3_mips16"
+@@ -2632,6 +2661,7 @@
+    xor\t%0,%1,%2
+    xori\t%0,%1,%x2"
+   [(set_attr "type" "logical")
++   (set_attr "micromips_type" "logical_xor")
+    (set_attr "mode" "<MODE>")])
+ 
+ (define_insn ""
+@@ -2898,6 +2928,7 @@
+    andi\t%0,%1,<SHORT:mask>
+    l<SHORT:size>u\t%0,%1"
+   [(set_attr "move_type" "andi,load")
++   (set_attr "micromips_type" "zero_extend")
+    (set_attr "mode" "<GPR:MODE>")])
+ 
+ (define_insn "*zero_extend<SHORT:mode><GPR:mode>2_mips16e"
+@@ -3563,9 +3594,11 @@
+ (define_insn "mov_<load>l"
+   [(set (match_operand:GPR 0 "register_operand" "=d")
+ 	(unspec:GPR [(match_operand:BLK 1 "memory_operand" "m")
+-		     (match_operand:QI 2 "memory_operand" "m")]
++		     (match_operand:QI 2 "memory_operand" "YC")]
+ 		    UNSPEC_LOAD_LEFT))]
+-  "!TARGET_MIPS16 && mips_mem_fits_mode_p (<MODE>mode, operands[1])"
++  "!TARGET_MIPS16
++   && !ISA_HAS_UL_US
++   && mips_mem_fits_mode_p (<MODE>mode, operands[1])"
+   "<load>l\t%0,%2"
+   [(set_attr "move_type" "load")
+    (set_attr "mode" "<MODE>")])
+@@ -3573,10 +3606,12 @@
+ (define_insn "mov_<load>r"
+   [(set (match_operand:GPR 0 "register_operand" "=d")
+ 	(unspec:GPR [(match_operand:BLK 1 "memory_operand" "m")
+-		     (match_operand:QI 2 "memory_operand" "m")
++		     (match_operand:QI 2 "memory_operand" "YC")
+ 		     (match_operand:GPR 3 "register_operand" "0")]
+ 		    UNSPEC_LOAD_RIGHT))]
+-  "!TARGET_MIPS16 && mips_mem_fits_mode_p (<MODE>mode, operands[1])"
++  "!TARGET_MIPS16
++   && !ISA_HAS_UL_US
++   && mips_mem_fits_mode_p (<MODE>mode, operands[1])"
+   "<load>r\t%0,%2"
+   [(set_attr "move_type" "load")
+    (set_attr "mode" "<MODE>")])
+@@ -3584,9 +3619,11 @@
+ (define_insn "mov_<store>l"
+   [(set (match_operand:BLK 0 "memory_operand" "=m")
+ 	(unspec:BLK [(match_operand:GPR 1 "reg_or_0_operand" "dJ")
+-		     (match_operand:QI 2 "memory_operand" "m")]
++		     (match_operand:QI 2 "memory_operand" "YC")]
+ 		    UNSPEC_STORE_LEFT))]
+-  "!TARGET_MIPS16 && mips_mem_fits_mode_p (<MODE>mode, operands[0])"
++  "!TARGET_MIPS16
++   && !ISA_HAS_UL_US
++   && mips_mem_fits_mode_p (<MODE>mode, operands[0])"
+   "<store>l\t%z1,%2"
+   [(set_attr "move_type" "store")
+    (set_attr "mode" "<MODE>")])
+@@ -3594,7 +3631,7 @@
+ (define_insn "mov_<store>r"
+   [(set (match_operand:BLK 0 "memory_operand" "+m")
+ 	(unspec:BLK [(match_operand:GPR 1 "reg_or_0_operand" "dJ")
+-		     (match_operand:QI 2 "memory_operand" "m")
++		     (match_operand:QI 2 "memory_operand" "YC")
+ 		     (match_dup 0)]
+ 		    UNSPEC_STORE_RIGHT))]
+   "!TARGET_MIPS16 && mips_mem_fits_mode_p (<MODE>mode, operands[0])"
+@@ -3602,6 +3639,28 @@
+   [(set_attr "move_type" "store")
+    (set_attr "mode" "<MODE>")])
+ 
++;; Unaligned load and store patterns.
++
++(define_insn "mov_u<load>"
++  [(set (match_operand:GPR 0 "register_operand" "=d")
++	(unspec:GPR [(match_operand:BLK 1 "memory_operand" "m")
++		     (match_operand:QI 2 "memory_operand" "m")]
++		    UNSPEC_UNALIGNED_LOAD))]
++  "ISA_HAS_UL_US && mips_mem_fits_mode_p (<MODE>mode, operands[1])"
++  "u<load>\t%0,%2"
++  [(set_attr "type" "load")
++   (set_attr "mode" "<MODE>")])
++
++(define_insn "mov_u<store>"
++  [(set (match_operand:BLK 0 "memory_operand" "=m")
++	(unspec:BLK [(match_operand:GPR 1 "reg_or_0_operand" "dJ")
++		     (match_operand:QI 2 "memory_operand" "m")]
++		    UNSPEC_UNALIGNED_STORE))]
++  "ISA_HAS_UL_US && mips_mem_fits_mode_p (<MODE>mode, operands[0])"
++  "u<store>\t%z1,%2"
++  [(set_attr "type" "store")
++   (set_attr "mode" "<MODE>")])
++
+ ;; An instruction to calculate the high part of a 64-bit SYMBOL_ABSOLUTE.
+ ;; The required value is:
+ ;;
+@@ -4491,6 +4550,7 @@
+   ""
+   { return ISA_HAS_MACCHI ? "<GPR:d>macchi\t%0,%.,%." : "mfhi\t%0"; }
+   [(set_attr "move_type" "mfhilo")
++   (set_attr "micromips_type" "mfhi")
+    (set_attr "mode" "<GPR:MODE>")])
+ 
+ ;; Set the high part of a HI/LO value, given that the low part has
+@@ -4842,7 +4902,7 @@
+   [(set (match_operand:GPR 0 "register_operand" "=d")
+ 	(any_shift:GPR (match_operand:GPR 1 "register_operand" "d")
+ 		       (match_operand:SI 2 "arith_operand" "dI")))]
+-  "!TARGET_MIPS16"
++  "!TARGET_MIPS16 && !TARGET_MICROMIPS"
+ {
+   if (GET_CODE (operands[2]) == CONST_INT)
+     operands[2] = GEN_INT (INTVAL (operands[2])
+@@ -4853,6 +4913,53 @@
+   [(set_attr "type" "shift")
+    (set_attr "mode" "<MODE>")])
+ 
++(define_insn "*micromips_ashl<mode>3"
++  [(set (match_operand:GPR 0 "register_operand" "=d")
++	(ashift:GPR (match_operand:GPR 1 "register_operand" "d")
++		       (match_operand:SI 2 "arith_operand" "dI")))]
++  "TARGET_MICROMIPS"
++{
++  if (GET_CODE (operands[2]) == CONST_INT)
++    operands[2] = GEN_INT (INTVAL (operands[2])
++			   & (GET_MODE_BITSIZE (<MODE>mode) - 1));
++
++  return "<d>sll\t%0,%1,%2";
++}
++  [(set_attr "type" "shift")
++   (set_attr "micromips_type" "shift")
++   (set_attr "mode" "<MODE>")])
++
++(define_insn "*micromips_ashr<mode>3"
++  [(set (match_operand:GPR 0 "register_operand" "=d")
++	(ashiftrt:GPR (match_operand:GPR 1 "register_operand" "d")
++		       (match_operand:SI 2 "arith_operand" "dI")))]
++  "TARGET_MICROMIPS"
++{
++  if (GET_CODE (operands[2]) == CONST_INT)
++    operands[2] = GEN_INT (INTVAL (operands[2])
++			   & (GET_MODE_BITSIZE (<MODE>mode) - 1));
++
++  return "<d>sra\t%0,%1,%2";
++}
++  [(set_attr "type" "shift")
++   (set_attr "mode" "<MODE>")])
++
++(define_insn "*micromips_lshr<mode>3"
++  [(set (match_operand:GPR 0 "register_operand" "=d")
++	(lshiftrt:GPR (match_operand:GPR 1 "register_operand" "d")
++		       (match_operand:SI 2 "arith_operand" "dI")))]
++  "TARGET_MICROMIPS"
++{
++  if (GET_CODE (operands[2]) == CONST_INT)
++    operands[2] = GEN_INT (INTVAL (operands[2])
++			   & (GET_MODE_BITSIZE (<MODE>mode) - 1));
++
++  return "<d>srl\t%0,%1,%2";
++}
++  [(set_attr "type" "shift")
++   (set_attr "micromips_type" "shift")
++   (set_attr "mode" "<MODE>")])
++
+ (define_insn "*<optab>si3_extend"
+   [(set (match_operand:DI 0 "register_operand" "=d")
+ 	(sign_extend:DI
+@@ -5124,8 +5231,34 @@
+ 			  (match_operand:GPR 3 "reg_or_0_operand" "dJ")])
+ 	 (label_ref (match_operand 1 "" ""))
+ 	 (pc)))]
+-  "!TARGET_MIPS16"
++  "!TARGET_MIPS16 && !TARGET_MICROMIPS"
++{
++  return mips_output_conditional_branch (insn, operands,
++					 MIPS_BRANCH ("b%C0", "%2,%z3,%1"),
++					 MIPS_BRANCH ("b%N0", "%2,%z3,%1"));
++}
++  [(set_attr "type" "branch")
++   (set_attr "mode" "none")])
++
++(define_insn "*branch_equality<mode>_micromips"
++  [(set (pc)
++	(if_then_else
++	 (match_operator 0 "equality_operator"
++			 [(match_operand:GPR 2 "register_operand" "d")
++			  (match_operand:GPR 3 "reg_or_0_operand" "dJ")])
++	 (label_ref (match_operand 1 "" ""))
++	 (pc)))]
++  "TARGET_MICROMIPS"
+ {
++  /* For a simple bnez or beqz microMIPS branch.  */
++  if (!TARGET_BRANCHLIKELY
++      && get_attr_length (insn) <= 8
++      && GET_CODE (operands[3]) == CONST_INT
++      && INTVAL (operands[3]) == 0)
++    return mips_output_conditional_branch (insn, operands,
++					   "%*b%C0z%:\t%2,%1",
++					   "%*b%N0z%:\t%2,%1");
++
+   return mips_output_conditional_branch (insn, operands,
+ 					 MIPS_BRANCH ("b%C0", "%2,%z3,%1"),
+ 					 MIPS_BRANCH ("b%N0", "%2,%z3,%1"));
+@@ -5141,7 +5274,7 @@
+ 			  (match_operand:GPR 3 "reg_or_0_operand" "dJ")])
+ 	 (pc)
+ 	 (label_ref (match_operand 1 "" ""))))]
+-  "!TARGET_MIPS16"
++  "!TARGET_MIPS16 && !TARGET_MICROMIPS"
+ {
+   return mips_output_conditional_branch (insn, operands,
+ 					 MIPS_BRANCH ("b%N0", "%2,%z3,%1"),
+@@ -5199,6 +5332,32 @@
+ 		      (label_ref (match_operand 1))
+ 		      (pc)))])
+ 
++(define_insn "*branch_equality<mode>_inverted_micromips"
++  [(set (pc)
++	(if_then_else
++	 (match_operator 0 "equality_operator"
++			 [(match_operand:GPR 2 "register_operand" "d")
++			  (match_operand:GPR 3 "reg_or_0_operand" "dJ")])
++	 (pc)
++	 (label_ref (match_operand 1 "" ""))))]
++  "TARGET_MICROMIPS"
++{
++  /* For a simple bnez or beqz microMIPS branch.  */
++  if (!TARGET_BRANCHLIKELY
++      && get_attr_length (insn) <= 8
++      && GET_CODE (operands[3]) == CONST_INT
++      && INTVAL (operands[3]) == 0)
++    return mips_output_conditional_branch (insn, operands,
++					   "%*b%N0z%:\t%2,%1",
++					   "%*b%C0z%:\t%2,%1");
++
++  return mips_output_conditional_branch (insn, operands,
++					 MIPS_BRANCH ("b%N0", "%2,%z3,%1"),
++					 MIPS_BRANCH ("b%C0", "%2,%z3,%1"));
++}
++  [(set_attr "type" "branch")
++   (set_attr "mode" "none")])
++
+ ;; Branch if bit is set/clear.
+ 
+ (define_insn "*branch_bit<bbv><mode>"
+@@ -5472,12 +5631,39 @@
+ 	return "%*b\t%l0%/";
+       else
+ 	{
++	  if (final_sequence && (mips_abi == ABI_32 || mips_abi == ABI_O64))
++	    {
++              /* If the delay slot contains a $gp restore, we need to
++                 do that first, because we need it for the load
++		 label.  Other ABIs do not have caller-save $gp.  */
++	      rtx next = NEXT_INSN (insn);
++	      if (INSN_P (next) && !INSN_DELETED_P (next))
++		{
++		  rtx pat = PATTERN (next);
++		  if (GET_CODE (pat) == SET
++		      && REG_P (SET_DEST (pat))
++		      && REGNO (SET_DEST (pat)) == PIC_OFFSET_TABLE_REGNUM)
++		    {
++		      rtx ops[2];
++		      ops[0] = SET_DEST (pat);
++		      ops[1] = SET_SRC (pat);
++		      output_asm_insn (mips_output_move (ops[0], ops[1]), ops);
++		    }
++		}
++	    }
+ 	  output_asm_insn (mips_output_load_label (), operands);
+ 	  return "%*jr\t%@%/%]";
+ 	}
+     }
+   else
+-    return "%*j\t%l0%/";
++    {
++      /* We prefer using branches for microMIPS, because the assembler can
++	 use 16-bit branches, 32-bit branches, or 32-bit jumps.  */
++      if (TARGET_MICROMIPS)
++	return "%*b\t%l0%/";
++      else
++	return "%*j\t%l0%/";
++    }
+ }
+   [(set_attr "type"	"jump")
+    (set_attr "mode"	"none")
+@@ -5490,7 +5676,13 @@
+ 	      (lt (abs (minus (match_dup 0)
+ 			      (plus (pc) (const_int 4))))
+ 		  (const_int 131072)))
+-	 (const_int 4) (const_int 16)))])
++	 (const_int 4)
++         (if_then_else
++	    ;; for these two ABIs we may need to move a restore of $gp
++	    (ior (eq (symbol_ref "mips_abi") (symbol_ref "ABI_32"))
++		 (eq (symbol_ref "mips_abi") (symbol_ref "ABI_O64")))
++	    (const_int 20)
++	    (const_int 16))))])
+ 
+ ;; We need a different insn for the mips16, because a mips16 branch
+ ;; does not have a delay slot.
+@@ -5518,7 +5710,12 @@
+ (define_insn "indirect_jump<mode>"
+   [(set (pc) (match_operand:P 0 "register_operand" "d"))]
+   ""
+-  "%*j\t%0%/"
++{
++  if (TARGET_MICROMIPS)
++    return "%*jr%:\t%0";
++  else
++    return "%*j\t%0%/";
++}
+   [(set_attr "type" "jump")
+    (set_attr "mode" "none")])
+ 
+@@ -5558,7 +5755,12 @@
+ 	(match_operand:P 0 "register_operand" "d"))
+    (use (label_ref (match_operand 1 "" "")))]
+   ""
+-  "%*j\t%0%/"
++{
++  if (TARGET_MICROMIPS)
++    return "%*jr%:\t%0";
++  else
++    return "%*j\t%0%/";
++}
+   [(set_attr "type" "jump")
+    (set_attr "mode" "none")])
+ 
+@@ -5665,7 +5867,12 @@
+ (define_insn "*return"
+   [(return)]
+   "mips_can_use_return_insn ()"
+-  "%*j\t$31%/"
++{
++  if (TARGET_MICROMIPS)
++    return "%*jr%:\t$31";
++  else
++    return "%*j\t$31%/";
++}
+   [(set_attr "type"	"jump")
+    (set_attr "mode"	"none")])
+ 
+@@ -5675,10 +5882,69 @@
+   [(return)
+    (use (match_operand 0 "pmode_register_operand" ""))]
+   ""
+-  "%*j\t%0%/"
++{
++  if (TARGET_MICROMIPS)
++    return "%*jr%:\t%0";
++  else
++    return "%*j\t%0%/";
++}
+   [(set_attr "type"	"jump")
+    (set_attr "mode"	"none")])
+ 
++;; Exception return.
++(define_insn "mips_eret"
++  [(return)
++   (unspec_volatile [(const_int 0)] UNSPEC_ERET)]
++  ""
++  "eret"
++  [(set_attr "type"	"trap")
++   (set_attr "mode"	"none")])
++
++;; Debug exception return.
++(define_insn "mips_deret"
++  [(return)
++   (unspec_volatile [(const_int 0)] UNSPEC_DERET)]
++  ""
++  "deret"
++  [(set_attr "type"	"trap")
++   (set_attr "mode"	"none")])
++
++;; Disable interrupts.
++(define_insn "mips_di"
++  [(unspec_volatile [(const_int 0)] UNSPEC_DI)]
++  ""
++  "di"
++  [(set_attr "type"	"trap")
++   (set_attr "mode"	"none")])
++
++;; Execution hazard barrier.
++(define_insn "mips_ehb"
++  [(unspec_volatile [(const_int 0)] UNSPEC_EHB)]
++  ""
++  "ehb"
++  [(set_attr "type"	"trap")
++   (set_attr "mode"	"none")])
++
++;; Read GPR from previous shadow register set.
++(define_insn "mips_rdpgpr"
++  [(set (match_operand:SI 0 "register_operand" "=d")
++	(unspec_volatile:SI [(match_operand:SI 1 "register_operand" "d")]
++			    UNSPEC_RDPGPR))]
++  ""
++  "rdpgpr\t%0,%1"
++  [(set_attr "type"	"move")
++   (set_attr "mode"	"SI")])
++
++;; Move involving COP0 registers.
++(define_insn "cop0_move"
++  [(set (match_operand:SI 0 "register_operand" "=B,d")
++	(unspec_volatile:SI [(match_operand:SI 1 "register_operand" "d,B")]
++			    UNSPEC_COP0))]
++  ""
++{ return mips_output_move (operands[0], operands[1]); }
++  [(set_attr "type"	"mtc,mfc")
++   (set_attr "mode"	"SI")])
++
+ ;; This is used in compiling the unwind routines.
+ (define_expand "eh_return"
+   [(use (match_operand 0 "general_operand"))]
+@@ -5867,7 +6133,12 @@
+   [(call (mem:SI (match_operand 0 "call_insn_operand" "j,S"))
+ 	 (match_operand 1 "" ""))]
+   "TARGET_SIBCALLS && SIBLING_CALL_P (insn)"
+-  { return MIPS_CALL ("j", operands, 0); }
++  {
++    if (TARGET_MICROMIPS)
++      return MICROMIPS_J (operands, 0);
++    else
++      return MIPS_CALL ("j", operands, 0);
++  }
+   [(set_attr "type" "call")])
+ 
+ (define_expand "sibcall_value"
+@@ -5887,7 +6158,12 @@
+         (call (mem:SI (match_operand 1 "call_insn_operand" "j,S"))
+               (match_operand 2 "" "")))]
+   "TARGET_SIBCALLS && SIBLING_CALL_P (insn)"
+-  { return MIPS_CALL ("j", operands, 1); }
++  {
++    if (TARGET_MICROMIPS)
++      return MICROMIPS_J (operands, 1);
++    else
++      return MIPS_CALL ("j", operands, 1);
++  }
+   [(set_attr "type" "call")])
+ 
+ (define_insn "sibcall_value_multiple_internal"
+@@ -5898,7 +6174,12 @@
+ 	(call (mem:SI (match_dup 1))
+ 	      (match_dup 2)))]
+   "TARGET_SIBCALLS && SIBLING_CALL_P (insn)"
+-  { return MIPS_CALL ("j", operands, 1); }
++  {
++    if (TARGET_MICROMIPS)
++      return MICROMIPS_J (operands, 1);
++    else
++     return MIPS_CALL ("j", operands, 1);
++  }
+   [(set_attr "type" "call")])
+ 
+ (define_expand "call"
+@@ -6140,7 +6421,7 @@
+ 
+ 
+ (define_insn "prefetch"
+-  [(prefetch (match_operand:QI 0 "address_operand" "p")
++  [(prefetch (match_operand:QI 0 "address_operand" "YD")
+ 	     (match_operand 1 "const_int_operand" "n")
+ 	     (match_operand 2 "const_int_operand" "n"))]
+   "ISA_HAS_PREFETCH && TARGET_EXPLICIT_RELOCS"
+@@ -6371,5 +6652,8 @@
+ ; MIPS fixed-point instructions.
+ (include "mips-fixed.md")
+ 
++; microMIPS patterns.
++(include "micromips.md")
++
+ ; ST-Microelectronics Loongson-2E/2F-specific patterns.
+ (include "loongson.md")
+--- a/src/gcc/config/mips/mips.opt
++++ b/src/gcc/config/mips/mips.opt
+@@ -176,6 +176,10 @@
+ Target Report Var(TARGET_INTERLINK_MIPS16) Init(0)
+ Generate code that can be safely linked with MIPS16 code.
+ 
++mjals
++Target Report Var(TARGET_JALS) Init(1)
++Generate jals for microMIPS by recognizing that the branch delay slot instruction can be 16 bits.  This implies that the function call cannot switch the current mode during the linking stage, because we don't have jalxs that supports 16-bit branch delay slot instructions.
++
+ mips
+ Target RejectNegative Joined
+ -mipsN	Generate code for ISA level N
+@@ -184,6 +188,10 @@
+ Target Report RejectNegative Mask(MIPS16)
+ Generate MIPS16 code
+ 
++mips16e
++Target Report RejectNegative Mask(MIPS16) MaskExists
++Deprecated; alias for -mips16
++
+ mips3d
+ Target Report RejectNegative Mask(MIPS3D)
+ Use MIPS-3D instructions
+@@ -212,6 +220,10 @@
+ Target Report Mask(MEMCPY)
+ Don't optimize block moves
+ 
++mmicromips
++Target Report Mask(MICROMIPS)
++Use microMIPS instructions
++
+ mmips-tfile
+ Target
+ Use the mips-tfile postpass
+@@ -220,6 +232,10 @@
+ Target Report Var(TARGET_MT)
+ Allow the use of MT instructions
+ 
++mmcu
++Target Report Mask(MCU)
++Use MCU instructions
++
+ mno-flush-func
+ Target RejectNegative
+ Do not use a cache-flushing function before calling stack trampolines
+@@ -236,6 +252,10 @@
+ Target Report RejectNegative InverseMask(MIPS3D)
+ Do not use MIPS-3D instructions
+ 
++mocteon-useun
++Target Report Mask(OCTEON_UNALIGNED)
++Use Octeon-specific unaligned loads/stores for 32/64-bit data
++
+ mpaired-single
+ Target Report Mask(PAIRED_SINGLE_FLOAT)
+ Use paired-single floating-point instructions
+--- a/src/gcc/config/mips/mips16.S
++++ b/src/gcc/config/mips/mips16.S
+@@ -21,6 +21,10 @@
+ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ <http://www.gnu.org/licenses/>.  */
+ 
++#ifdef __mips_micromips
++  /* DO NOTHING */
++#else
++
+ /* This file contains mips16 floating point support functions.  These
+    functions are called by mips16 code to handle floating point when
+    -msoft-float is not used.  They accept the arguments and return
+@@ -29,6 +33,7 @@
+ 
+ #if defined _MIPS_SIM && (_MIPS_SIM == _ABIO32 || _MIPS_SIM == _ABIO64)
+ 
++
+ /* This file contains 32-bit assembly code.  */
+ 	.set nomips16
+ 
+@@ -707,3 +712,4 @@
+ #endif
+ #endif /* !__mips_single_float */
+ #endif
++#endif /* __mips_micromips */
+--- a/src/gcc/config/mips/montavista-linux.h
++++ b/src/gcc/config/mips/montavista-linux.h
+@@ -0,0 +1,54 @@
++/* MontaVista GNU/Linux Configuration.
++   Copyright (C) 2009
++   Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 3, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++/* Override linux64.h to default to O32.  */
++#undef SUBTARGET_SELF_SPECS
++#define SUBTARGET_SELF_SPECS \
++NO_SHARED_SPECS, \
++"%{!EB:%{!EL:%(endian_spec)}}", \
++"%{!mabi=*: -mabi=32}"
++
++/* We do not need to provide an explicit big-endian multilib.  */
++#undef MULTILIB_DEFAULTS
++#define MULTILIB_DEFAULTS \
++  { "meb", "mabi=32" }
++
++/* The various C libraries each have their own subdirectory.  */
++#undef SYSROOT_SUFFIX_SPEC
++#define SYSROOT_SUFFIX_SPEC			\
++  "%{mel:%{msoft-float:/mel/soft-float ;	\
++           :/mel} ;				\
++     msoft-float:/soft-float}"
++
++/* MULTILIB_OSDIRNAMES provides directory names used in two ways:
++   relative to $target/lib/ in the GCC installation, and relative to
++   lib/ and usr/lib/ in a sysroot.  For the latter, we want names such
++   as plain ../lib64, but these cannot be used outside the sysroot
++   because different multilibs would be mapped to the same directory.
++   Directories are searched both with and without the multilib suffix,
++   so it suffices if the directory without the suffix is correct
++   within the sysroot while the directory with the suffix doesn't
++   exist.  We use STARTFILE_PREFIX_SPEC to achieve the desired
++   effect.  */
++#undef STARTFILE_PREFIX_SPEC
++#define STARTFILE_PREFIX_SPEC				\
++  "%{mabi=32: /usr/local/lib/ /lib/ /usr/lib/} 		\
++   %{mabi=n32: /usr/local/lib32/ /lib32/ /usr/lib32/}	\
++   %{mabi=64: /usr/local/lib64/ /lib64/ /usr/lib64/}"
+--- a/src/gcc/config/mips/octeon-elf-unwind.h
++++ b/src/gcc/config/mips/octeon-elf-unwind.h
+@@ -0,0 +1,57 @@
++/* Stack unwinding support through the first exception frame.
++   Copyright (C) 2007 Cavium Networks.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING.  If not, write to
++the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++Boston, MA 02110-1301, USA.  */
++
++#define MD_FALLBACK_FRAME_STATE_FOR octeon_elf_fallback_frame_state
++
++/* Check whether this is the cvmx_interrupt_stage2 frame.  If the
++   function call was dispatched via k0 assume we are in
++   cvmx_interrupt_stage2.  In this case the sp in point to the saved
++   register array.  */
++
++static _Unwind_Reason_Code
++octeon_elf_fallback_frame_state (struct _Unwind_Context *context,
++				 _Unwind_FrameState *fs)
++{
++  unsigned i;
++  unsigned *pc = context->ra;
++
++  /* Look for "jalr k0".  */
++  if (pc[-2] != 0x0340f809)
++    return _URC_END_OF_STACK;
++  
++  for (i = 0; i < 32; i++)
++    {
++      fs->regs.reg[i].how = REG_SAVED_OFFSET;
++      fs->regs.reg[i].loc.offset = 8 * i;
++    }
++
++  /* Keep the next frame's sp.  This way we have a CFA that points
++     exactly to the register array.  */
++  fs->regs.cfa_how = CFA_REG_OFFSET;
++  fs->regs.cfa_reg = STACK_POINTER_REGNUM;
++  fs->regs.cfa_offset = 0;
++
++  /* DEPC is saved as the 35. register.  */
++  fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].how = REG_SAVED_OFFSET;
++  fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].loc.offset = 8 * 35;
++  fs->retaddr_column = DWARF_ALT_FRAME_RETURN_COLUMN;
++
++  return _URC_NO_REASON;
++}
+--- a/src/gcc/config/mips/octeon-elf.h
++++ b/src/gcc/config/mips/octeon-elf.h
+@@ -0,0 +1,98 @@
++/* Macros for mips*-octeon-elf target.
++   Copyright (C) 2004, 2005, 2006 Cavium Networks.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING.  If not, write to
++the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++Boston, MA 02110-1301, USA.  */
++
++/* Add MASK_SOFT_FLOAT and MASK_OCTEON_UNALIGNED.  */
++
++#undef TARGET_DEFAULT
++#define TARGET_DEFAULT (MASK_SOFT_FLOAT_ABI | MASK_OCTEON_UNALIGNED)
++
++/* Forward -m*octeon-useun.  */
++
++#undef SUBTARGET_ASM_SPEC
++#define SUBTARGET_ASM_SPEC "%{mno-octeon-useun} %{!mno-octeon-useun:-mocteon-useun}"
++
++/* Enable backtrace including on machine exceptions by default.  */
++
++#undef SUBTARGET_CC1_SPEC
++#define SUBTARGET_CC1_SPEC "%{!fno-asynchronous-unwind-tables:-fasynchronous-unwind-tables}"
++
++/* Without ASM_PREFERRED_EH_DATA_FORMAT, output_call_frame_info emits
++   pointer-sized addresses for FDE addresses.  For 64-bit targets, it does
++   it without properly "switching over" to 64-bit as described in the DWARF3
++   spec. GDB can fall back on .eh_frames and misinterpret FDE addresses.
++   Instead let's be explicit and use augmentation to describe the encoding if
++   pointer size is 64.  */
++
++#undef ASM_PREFERRED_EH_DATA_FORMAT
++#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
++  ((CODE) == 1 && POINTER_SIZE == 64                                    \
++   ? (ABI_HAS_64BIT_SYMBOLS ? DW_EH_PE_udata8 : DW_EH_PE_udata4)        \
++   : DW_EH_PE_absptr)
++
++/* Link to libc library.  */
++
++#undef LIB_SPEC
++#define LIB_SPEC "-lc"
++
++/* Link to startup file.  */
++
++#undef STARTFILE_SPEC
++#define STARTFILE_SPEC "crti%O%s crtbegin%O%s crt0%O%s"
++
++/* Default our test-only n64 configuration to -G0 since that is what
++   the kernel uses.  */
++
++#undef SUBTARGET_SELF_SPECS
++#define SUBTARGET_SELF_SPECS \
++"%{mabi=64:%{!G*: -G0}}"
++
++/* Pass linker emulation mode for N32.  */
++
++#undef LINK_SPEC
++#define LINK_SPEC "\
++%(endian_spec) \
++%{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips32r2} %{mips64} \
++%{mips64r2} %{bestGnum} %{shared} %{non_shared} \
++%{mabi=n32:-melf32e%{!EL:b}%{EL:l}octeonn32} \
++%{mabi=64:-melf64e%{!EL:b}%{EL:l}octeon}"
++
++/* Override because of N32.  */
++
++#undef LOCAL_LABEL_PREFIX
++#define LOCAL_LABEL_PREFIX ((mips_abi == ABI_N32) ? "." : "$")
++
++/* Append the core number to the GCOV filename FN.  */
++
++#define GCOV_TARGET_SUFFIX_LENGTH 2
++#define ADD_GCOV_TARGET_SUFFIX(FN)		\
++do						\
++  {						\
++    char *fn = FN;				\
++    int core;					\
++    char s[3];					\
++						\
++    asm ("rdhwr %0, $0" : "=r"(core));		\
++    sprintf (s, "%d", core);			\
++    strcat (fn, s);				\
++  }						\
++while (0)
++
++/* Code to unwind through the exception frame.  */
++#define MD_UNWIND_SUPPORT "config/mips/octeon-elf-unwind.h"
+--- a/src/gcc/config/mips/octeon.h
++++ b/src/gcc/config/mips/octeon.h
+@@ -0,0 +1,68 @@
++/* Macros for mips*-octeon-* target.
++   Copyright (C) 2004, 2005, 2006 Cavium Networks.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING.  If not, write to
++the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++Boston, MA 02110-1301, USA.  */
++
++#define CVMX_SHARED_BSS_FLAGS (SECTION_WRITE | SECTION_BSS)
++
++#undef TARGET_ASM_SELECT_SECTION
++#define TARGET_ASM_SELECT_SECTION octeon_select_section
++
++#undef TARGET_ASM_UNIQUE_SECTION
++#define TARGET_ASM_UNIQUE_SECTION octeon_unique_section
++
++/* Implement ASM_OUTPUT_ALIGNED_DECL_LOCAL. This differs from the 
++   generic version only in the use of cvmx_shared attribute.  */
++ 
++#undef ASM_OUTPUT_ALIGNED_DECL_LOCAL
++#define ASM_OUTPUT_ALIGNED_DECL_LOCAL(STREAM, DECL, NAME, SIZE, ALIGN) \
++  do									\
++    {									\
++      if ((DECL) && TREE_CODE ((DECL)) == VAR_DECL 			\
++	  && lookup_attribute ("cvmx_shared", DECL_ATTRIBUTES (DECL)))	\
++	{  								\
++           fprintf ((STREAM), "%s", LOCAL_ASM_OP);			\
++           assemble_name ((STREAM), (NAME));				\
++           fprintf ((STREAM), "\n");					\
++	   octeon_output_shared_variable ((STREAM), (DECL), (NAME),     \
++					  (SIZE), (ALIGN));             \
++	 } 								\
++      else 								\
++	ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGN);		\
++    }									\
++  while (0) 
++
++
++/* Implement ASM_OUTPUT_ALIGNED_DECL_COMMON.  This differs from the mips 
++   version only in the use of cvmx_shared attribute.  */
++
++#undef ASM_OUTPUT_ALIGNED_DECL_COMMON
++#define ASM_OUTPUT_ALIGNED_DECL_COMMON(STREAM, DECL, NAME, SIZE, ALIGN)	   \
++  {									   \
++    if (TREE_CODE ((DECL)) == VAR_DECL			   		   \
++        && lookup_attribute ("cvmx_shared", DECL_ATTRIBUTES ((DECL))))	   \
++      {									   \
++	if (TREE_PUBLIC ((DECL)) && DECL_NAME ((DECL)))			   \
++	  targetm.asm_out.globalize_label (asm_out_file, (NAME));	   \
++	octeon_output_shared_variable ((STREAM), (DECL), (NAME),	   \
++				       (SIZE), (ALIGN));		   \
++      }									   \
++    else								   \
++      mips_output_aligned_decl_common ((STREAM), (DECL), (NAME), (SIZE),   \
++				       (ALIGN));			   \
++   }
+--- a/src/gcc/config/mips/predicates.md
++++ b/src/gcc/config/mips/predicates.md
+@@ -211,6 +211,20 @@
+     }
+ })
+ 
++(define_predicate "mask_low_and_shift_operator"
++  (and (match_code "and")
++       (match_test "GET_CODE (XEXP (op, 0)) == ASHIFT
++		    && GET_CODE (XEXP (op, 1)) == CONST_INT
++		    && GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT"))
++{
++  int len;
++
++  len = mask_low_and_shift_len (GET_MODE (op),
++			        INTVAL (XEXP (XEXP (op, 0), 1)),
++				INTVAL (XEXP (op, 1)));
++  return 0 < len && len <= 32;
++})
++
+ (define_predicate "consttable_operand"
+   (match_test "CONSTANT_P (op)"))
+ 
+--- a/src/gcc/config/mips/sde.h
++++ b/src/gcc/config/mips/sde.h
+@@ -19,6 +19,9 @@
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
++#undef TARGET_MIPS_SDE
++#define TARGET_MIPS_SDE 1
++
+ #undef DRIVER_SELF_SPECS
+ #define DRIVER_SELF_SPECS						\
+   /* Make sure a -mips option is present.  This helps us to pick	\
+@@ -90,7 +93,8 @@
+ 
+ /* Use $5 as a temporary for both MIPS16 and non-MIPS16.  */
+ #undef MIPS_EPILOGUE_TEMP_REGNUM
+-#define MIPS_EPILOGUE_TEMP_REGNUM (GP_REG_FIRST + 5)
++#define MIPS_EPILOGUE_TEMP_REGNUM \
++  (cfun->machine->interrupt_handler_p ? K0_REG_NUM : GP_REG_FIRST + 5)
+ 
+ /* Using long will always be right for size_t and ptrdiff_t, since
+    sizeof(long) must equal sizeof(void *), following from the setting
+--- a/src/gcc/config/mips/sdemtk.h
++++ b/src/gcc/config/mips/sdemtk.h
+@@ -19,6 +19,8 @@
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
++#define TARGET_MIPS_SDEMTK	1
++
+ #define TARGET_OS_CPP_BUILTINS()			\
+   do							\
+     {							\
+@@ -113,3 +115,12 @@
+ /* ...nor does the call sequence preserve $31.  */
+ #undef MIPS_SAVE_REG_FOR_PROFILING_P
+ #define MIPS_SAVE_REG_FOR_PROFILING_P(REGNO) ((REGNO) == GP_REG_FIRST + 31)
++
++/* From mips.h, with mno-float option added.  */
++
++#undef MIPS_ARCH_FLOAT_SPEC
++#define MIPS_ARCH_FLOAT_SPEC \
++  "%{mhard-float|msoft-float|mno-float|march=mips*:; \
++     march=vr41*|march=m4k|march=4k*|march=24kc|march=24kec|march=m14k* \
++     |march=34kc|march=74kc|march=1004kc|march=5kc|march=octeon|march=xlr: -msoft-float; \
++     march=*: -mhard-float}"
+--- a/src/gcc/config/mips/sfp-machine.h
++++ b/src/gcc/config/mips/sfp-machine.h
+@@ -0,0 +1,70 @@
++#define _FP_W_TYPE_SIZE		32
++#define _FP_W_TYPE		unsigned long
++#define _FP_WS_TYPE		signed long
++#define _FP_I_TYPE		long
++
++#define _FP_MUL_MEAT_S(R,X,Y)				\
++  _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
++#define _FP_MUL_MEAT_D(R,X,Y)				\
++  _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
++#define _FP_MUL_MEAT_Q(R,X,Y)				\
++  _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
++
++#define _FP_DIV_MEAT_S(R,X,Y)	_FP_DIV_MEAT_1_udiv_norm(S,R,X,Y)
++#define _FP_DIV_MEAT_D(R,X,Y)	_FP_DIV_MEAT_2_udiv(D,R,X,Y)
++#define _FP_DIV_MEAT_Q(R,X,Y)	_FP_DIV_MEAT_4_udiv(Q,R,X,Y)
++
++#define _FP_NANFRAC_S		((_FP_QNANBIT_S << 1) - 1)
++#define _FP_NANFRAC_D		((_FP_QNANBIT_D << 1) - 1), -1
++#define _FP_NANFRAC_Q		((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
++#define _FP_NANSIGN_S		0
++#define _FP_NANSIGN_D		0
++#define _FP_NANSIGN_Q		0
++
++#define _FP_KEEPNANFRACP 1
++/* From my experiments it seems X is chosen unless one of the
++   NaNs is sNaN,  in which case the result is NANSIGN/NANFRAC.  */
++#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP)			\
++  do {								\
++    if ((_FP_FRAC_HIGH_RAW_##fs(X) |				\
++	 _FP_FRAC_HIGH_RAW_##fs(Y)) & _FP_QNANBIT_##fs)		\
++      {								\
++	R##_s = _FP_NANSIGN_##fs;				\
++        _FP_FRAC_SET_##wc(R,_FP_NANFRAC_##fs);			\
++      }								\
++    else							\
++      {								\
++	R##_s = X##_s;						\
++        _FP_FRAC_COPY_##wc(R,X);				\
++      }								\
++    R##_c = FP_CLS_NAN;						\
++  } while (0)
++
++#define FP_EX_INVALID           (1 << 4)
++#define FP_EX_DIVZERO           (1 << 3)
++#define FP_EX_OVERFLOW          (1 << 2)
++#define FP_EX_UNDERFLOW         (1 << 1)
++#define FP_EX_INEXACT           (1 << 0)
++
++#define       __LITTLE_ENDIAN 1234
++#define       __BIG_ENDIAN    4321
++
++#if defined  MIPS_EB || defined __MIPSEB__ || defined MIPSEB || defined _MIPSEB
++# if defined  MIPS_EL || defined __MIPSEL__ || defined MIPSEL || defined _MIPSEL
++#  error "Both BIG_ENDIAN and LITTLE_ENDIAN defined!"
++# endif
++# define __BYTE_ORDER __BIG_ENDIAN
++#else
++# if defined  MIPS_EL || defined __MIPSEL__ || defined MIPSEL || defined _MIPSEL
++#  define __BYTE_ORDER __LITTLE_ENDIAN
++# else
++#  error "Cannot determine current byte order"
++# endif
++#endif
++
++
++/* Define ALIASNAME as a strong alias for NAME.  */
++# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
++# define _strong_alias(name, aliasname) \
++  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
++
+--- a/src/gcc/config/mips/sync.md
++++ b/src/gcc/config/mips/sync.md
+@@ -44,7 +44,7 @@
+ 
+ (define_insn "sync_compare_and_swap<mode>"
+   [(set (match_operand:GPR 0 "register_operand" "=&d,&d")
+-	(match_operand:GPR 1 "memory_operand" "+R,R"))
++	(match_operand:GPR 1 "memory_operand" "+YC,YC"))
+    (set (match_dup 1)
+ 	(unspec_volatile:GPR [(match_operand:GPR 2 "reg_or_0_operand" "dJ,dJ")
+ 			      (match_operand:GPR 3 "arith_operand" "I,d")]
+@@ -75,7 +75,7 @@
+ ;; Helper insn for mips_expand_atomic_qihi.
+ (define_insn "compare_and_swap_12"
+   [(set (match_operand:SI 0 "register_operand" "=&d,&d")
+-	(match_operand:SI 1 "memory_operand" "+R,R"))
++	(match_operand:SI 1 "memory_operand" "+YC,YC"))
+    (set (match_dup 1)
+ 	(unspec_volatile:SI [(match_operand:SI 2 "register_operand" "d,d")
+ 			     (match_operand:SI 3 "register_operand" "d,d")
+@@ -94,7 +94,7 @@
+   [(set_attr "length" "40,36")])
+ 
+ (define_insn "sync_add<mode>"
+-  [(set (match_operand:GPR 0 "memory_operand" "+R,R")
++  [(set (match_operand:GPR 0 "memory_operand" "+YC,YC")
+ 	(unspec_volatile:GPR
+           [(plus:GPR (match_dup 0)
+ 		     (match_operand:GPR 1 "arith_operand" "I,d"))]
+@@ -125,7 +125,7 @@
+ 
+ ;; Helper insn for sync_<optab><mode>
+ (define_insn "sync_<optab>_12"
+-  [(set (match_operand:SI 0 "memory_operand" "+R")
++  [(set (match_operand:SI 0 "memory_operand" "+YC")
+ 	(unspec_volatile:SI
+           [(match_operand:SI 1 "register_operand" "d")
+ 	   (match_operand:SI 2 "register_operand" "d")
+@@ -161,7 +161,7 @@
+ ;; Helper insn for sync_old_<optab><mode>
+ (define_insn "sync_old_<optab>_12"
+   [(set (match_operand:SI 0 "register_operand" "=&d")
+-	(match_operand:SI 1 "memory_operand" "+R"))
++	(match_operand:SI 1 "memory_operand" "+YC"))
+    (set (match_dup 1)
+ 	(unspec_volatile:SI
+           [(match_operand:SI 2 "register_operand" "d")
+@@ -200,7 +200,7 @@
+ (define_insn "sync_new_<optab>_12"
+   [(set (match_operand:SI 0 "register_operand" "=&d")
+ 	(unspec_volatile:SI
+-          [(match_operand:SI 1 "memory_operand" "+R")
++          [(match_operand:SI 1 "memory_operand" "+YC")
+ 	   (match_operand:SI 2 "register_operand" "d")
+ 	   (match_operand:SI 3 "register_operand" "d")
+ 	   (atomic_hiqi_op:SI (match_dup 0)
+@@ -236,7 +236,7 @@
+ 
+ ;; Helper insn for sync_nand<mode>
+ (define_insn "sync_nand_12"
+-  [(set (match_operand:SI 0 "memory_operand" "+R")
++  [(set (match_operand:SI 0 "memory_operand" "+YC")
+ 	(unspec_volatile:SI
+           [(match_operand:SI 1 "register_operand" "d")
+ 	   (match_operand:SI 2 "register_operand" "d")
+@@ -271,7 +271,7 @@
+ ;; Helper insn for sync_old_nand<mode>
+ (define_insn "sync_old_nand_12"
+   [(set (match_operand:SI 0 "register_operand" "=&d")
+-	(match_operand:SI 1 "memory_operand" "+R"))
++	(match_operand:SI 1 "memory_operand" "+YC"))
+    (set (match_dup 1)
+ 	(unspec_volatile:SI
+           [(match_operand:SI 2 "register_operand" "d")
+@@ -308,7 +308,7 @@
+ (define_insn "sync_new_nand_12"
+   [(set (match_operand:SI 0 "register_operand" "=&d")
+ 	(unspec_volatile:SI
+-          [(match_operand:SI 1 "memory_operand" "+R")
++          [(match_operand:SI 1 "memory_operand" "+YC")
+ 	   (match_operand:SI 2 "register_operand" "d")
+ 	   (match_operand:SI 3 "register_operand" "d")
+ 	   (match_operand:SI 4 "register_operand" "dJ")]
+@@ -327,7 +327,7 @@
+   [(set_attr "length" "40")])
+ 
+ (define_insn "sync_sub<mode>"
+-  [(set (match_operand:GPR 0 "memory_operand" "+R")
++  [(set (match_operand:GPR 0 "memory_operand" "+YC")
+ 	(unspec_volatile:GPR
+           [(minus:GPR (match_dup 0)
+ 			      (match_operand:GPR 1 "register_operand" "d"))]
+@@ -340,7 +340,7 @@
+ 
+ (define_insn "sync_old_add<mode>"
+   [(set (match_operand:GPR 0 "register_operand" "=&d,&d")
+-	(match_operand:GPR 1 "memory_operand" "+R,R"))
++	(match_operand:GPR 1 "memory_operand" "+YC,YC"))
+    (set (match_dup 1)
+ 	(unspec_volatile:GPR
+           [(plus:GPR (match_dup 1)
+@@ -357,7 +357,7 @@
+ 
+ (define_insn "sync_old_sub<mode>"
+   [(set (match_operand:GPR 0 "register_operand" "=&d")
+-	(match_operand:GPR 1 "memory_operand" "+R"))
++	(match_operand:GPR 1 "memory_operand" "+YC"))
+    (set (match_dup 1)
+ 	(unspec_volatile:GPR
+           [(minus:GPR (match_dup 1)
+@@ -371,7 +371,7 @@
+ 
+ (define_insn "sync_new_add<mode>"
+   [(set (match_operand:GPR 0 "register_operand" "=&d,&d")
+-        (plus:GPR (match_operand:GPR 1 "memory_operand" "+R,R")
++        (plus:GPR (match_operand:GPR 1 "memory_operand" "+YC,YC")
+ 		  (match_operand:GPR 2 "arith_operand" "I,d")))
+    (set (match_dup 1)
+ 	(unspec_volatile:GPR
+@@ -388,7 +388,7 @@
+ 
+ (define_insn "sync_new_sub<mode>"
+   [(set (match_operand:GPR 0 "register_operand" "=&d")
+-        (minus:GPR (match_operand:GPR 1 "memory_operand" "+R")
++        (minus:GPR (match_operand:GPR 1 "memory_operand" "+YC")
+ 		   (match_operand:GPR 2 "register_operand" "d")))
+    (set (match_dup 1)
+ 	(unspec_volatile:GPR
+@@ -401,7 +401,7 @@
+   [(set_attr "length" "28")])
+ 
+ (define_insn "sync_<optab><mode>"
+-  [(set (match_operand:GPR 0 "memory_operand" "+R,R")
++  [(set (match_operand:GPR 0 "memory_operand" "+YC,YC")
+ 	(unspec_volatile:GPR
+           [(fetchop_bit:GPR (match_operand:GPR 1 "uns_arith_operand" "K,d")
+ 			      (match_dup 0))]
+@@ -417,7 +417,7 @@
+ 
+ (define_insn "sync_old_<optab><mode>"
+   [(set (match_operand:GPR 0 "register_operand" "=&d,&d")
+-	(match_operand:GPR 1 "memory_operand" "+R,R"))
++	(match_operand:GPR 1 "memory_operand" "+YC,YC"))
+    (set (match_dup 1)
+ 	(unspec_volatile:GPR
+           [(fetchop_bit:GPR (match_operand:GPR 2 "uns_arith_operand" "K,d")
+@@ -435,7 +435,7 @@
+ 
+ (define_insn "sync_new_<optab><mode>"
+   [(set (match_operand:GPR 0 "register_operand" "=&d,&d")
+-	(match_operand:GPR 1 "memory_operand" "+R,R"))
++	(match_operand:GPR 1 "memory_operand" "+YC,YC"))
+    (set (match_dup 1)
+ 	(unspec_volatile:GPR
+           [(fetchop_bit:GPR (match_operand:GPR 2 "uns_arith_operand" "K,d")
+@@ -452,7 +452,7 @@
+   [(set_attr "length" "28")])
+ 
+ (define_insn "sync_nand<mode>"
+-  [(set (match_operand:GPR 0 "memory_operand" "+R,R")
++  [(set (match_operand:GPR 0 "memory_operand" "+YC,YC")
+ 	(unspec_volatile:GPR [(match_operand:GPR 1 "uns_arith_operand" "K,d")]
+ 	 UNSPEC_SYNC_OLD_OP))]
+   "GENERATE_LL_SC"
+@@ -466,7 +466,7 @@
+ 
+ (define_insn "sync_old_nand<mode>"
+   [(set (match_operand:GPR 0 "register_operand" "=&d,&d")
+-	(match_operand:GPR 1 "memory_operand" "+R,R"))
++	(match_operand:GPR 1 "memory_operand" "+YC,YC"))
+    (set (match_dup 1)
+         (unspec_volatile:GPR [(match_operand:GPR 2 "uns_arith_operand" "K,d")]
+ 	 UNSPEC_SYNC_OLD_OP))]
+@@ -481,7 +481,7 @@
+ 
+ (define_insn "sync_new_nand<mode>"
+   [(set (match_operand:GPR 0 "register_operand" "=&d,&d")
+-	(match_operand:GPR 1 "memory_operand" "+R,R"))
++	(match_operand:GPR 1 "memory_operand" "+YC,YC"))
+    (set (match_dup 1)
+ 	(unspec_volatile:GPR [(match_operand:GPR 2 "uns_arith_operand" "K,d")]
+ 	 UNSPEC_SYNC_NEW_OP))]
+@@ -496,7 +496,7 @@
+ 
+ (define_insn "sync_lock_test_and_set<mode>"
+   [(set (match_operand:GPR 0 "register_operand" "=&d,&d")
+-	(match_operand:GPR 1 "memory_operand" "+R,R"))
++	(match_operand:GPR 1 "memory_operand" "+YC,YC"))
+    (set (match_dup 1)
+ 	(unspec_volatile:GPR [(match_operand:GPR 2 "arith_operand" "I,d")]
+ 	 UNSPEC_SYNC_EXCHANGE))]
+@@ -524,7 +524,7 @@
+ 
+ (define_insn "test_and_set_12"
+   [(set (match_operand:SI 0 "register_operand" "=&d,&d")
+-	(match_operand:SI 1 "memory_operand" "+R,R"))
++	(match_operand:SI 1 "memory_operand" "+YC,YC"))
+    (set (match_dup 1)
+ 	(unspec_volatile:SI [(match_operand:SI 2 "register_operand" "d,d")
+ 			     (match_operand:SI 3 "register_operand" "d,d")
+--- a/src/gcc/config/mips/t-crtfm
++++ b/src/gcc/config/mips/t-crtfm
+@@ -0,0 +1,9 @@
++
++EXTRA_MULTILIB_PARTS += crtfastmath.o
++
++EXTRA_PARTS += crtfastmath.o
++
++$(T)crtfastmath.o: $(srcdir)/config/mips/crtfastmath.c $(GCC_PASSES)
++	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
++	-c -o $(T)crtfastmath.o $(srcdir)/config/mips/crtfastmath.c
++
+--- a/src/gcc/config/mips/t-fprules-softfp
++++ b/src/gcc/config/mips/t-fprules-softfp
+@@ -0,0 +1,6 @@
++softfp_float_modes := sf df
++softfp_int_modes := si di
++softfp_extensions := sfdf
++softfp_truncations := dfsf
++softfp_machine_header := mips/sfp-machine.h
++softfp_exclude_libgcc2 := y
+--- a/src/gcc/config/mips/t-montavista-elf
++++ b/src/gcc/config/mips/t-montavista-elf
+@@ -0,0 +1,22 @@
++# MontaVista ELF Configuration.
++# Copyright (C) 2009
++# Free Software Foundation, Inc.
++#
++# This file is part of GCC.
++#
++# GCC is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3, or (at your option)
++# any later version.
++# 
++# GCC is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++MULTILIB_OPTIONS =
++MULTILIB_DIRNAMES =
+--- a/src/gcc/config/mips/t-montavista-linux
++++ b/src/gcc/config/mips/t-montavista-linux
+@@ -0,0 +1,43 @@
++# MontaVista GNU/Linux Configuration.
++# Copyright (C) 2009
++# Free Software Foundation, Inc.
++#
++# This file is part of GCC.
++#
++# GCC is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3, or (at your option)
++# any later version.
++# 
++# GCC is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++# Build big-endian and little-endian support libraries.
++MULTILIB_OPTIONS = mel msoft-float march=octeon mabi=n32/mabi=64
++MULTILIB_DIRNAMES = mel soft-float octeon n32 64
++MULTILIB_EXCEPTIONS = *mel*/*mabi=n32* *mel*/*mabi=64*
++MULTILIB_EXCEPTIONS += *mel*/*march=octeon* march=octeon march=octeon/mabi=n32
++MULTILIB_EXCEPTIONS += march=octeon/mabi=64 msoft-float/march=octeon
++
++# These files must be built for each multilib.
++EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
++
++# See comment in montavista-linux.h on STARTFILE_PREFIX_SPEC for how the real
++# directories used in the sysroots are determined.  These directories
++# are specified so that (a) they are distinct and (b) removing the
++# components that form part of the sysroot suffix leaves the real
++# directory within the sysroot.
++MULTILIB_OSDIRNAMES = msoft-float/mabi.n32=../lib32/soft-float
++MULTILIB_OSDIRNAMES += msoft-float/mabi.64=../lib64/soft-float
++MULTILIB_OSDIRNAMES += msoft-float/march.octeon/mabi.n32=../lib32/soft-float/octeon
++MULTILIB_OSDIRNAMES += msoft-float/march.octeon/mabi.64=../lib64/soft-float/octeon
++MULTILIB_OSDIRNAMES += mel/msoft-float=!mel/soft-float
++MULTILIB_OSDIRNAMES += msoft-float=!soft-float
++MULTILIB_OSDIRNAMES += mabi.64=../lib64
++MULTILIB_OSDIRNAMES += mabi.n32=../lib32
+--- a/src/gcc/config/mips/t-octeon-elf
++++ b/src/gcc/config/mips/t-octeon-elf
+@@ -0,0 +1,42 @@
++# Don't let CTOR_LIST end up in sdata section.
++
++CRTSTUFF_T_CFLAGS = -G 0 -fno-asynchronous-unwind-tables
++
++# Assemble startup files.
++
++$(T)crti.o: $(srcdir)/config/mips/crti.asm $(GCC_PASSES)
++	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
++	-c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/mips/crti.asm
++
++$(T)crtn.o: $(srcdir)/config/mips/crtn.asm $(GCC_PASSES)
++	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
++	-c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/mips/crtn.asm
++
++# N32 uses TFmode for long double.
++
++TPBIT = tp-bit.c
++
++tp-bit.c: $(srcdir)/config/fp-bit.c
++	echo '#ifdef __MIPSEL__' > tp-bit.c
++	echo '# define FLOAT_BIT_ORDER_MISMATCH' >> tp-bit.c
++	echo '#endif' >> tp-bit.c
++	echo '#if __LDBL_MANT_DIG__ == 113' >> tp-bit.c
++	echo '#define QUIET_NAN_NEGATED' >> tp-bit.c
++	echo '# define TFLOAT' >> tp-bit.c
++	cat $(srcdir)/config/fp-bit.c >> tp-bit.c
++	echo '#endif' >> tp-bit.c
++
++# We must build libgcc2.a with -G 0, in case the user wants to link
++# without the $gp register.
++
++TARGET_LIBGCC2_CFLAGS = -G 0
++ 
++# Build both ABIs.
++
++MULTILIB_OPTIONS = mabi=n32/mabi=eabi/mabi=64 march=octeon2
++MULTILIB_DIRNAMES = n32 eabi n64 octeon2
++MULTILIB_EXCEPTIONS = mabi=64/march=octeon2
++EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o
++
++LIBGCC = stmp-multilib
++INSTALL_LIBGCC = install-multilib
+--- a/src/gcc/config/mips/t-sde
++++ b/src/gcc/config/mips/t-sde
+@@ -10,8 +10,8 @@
+ 	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
+ 	-c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/mips/crtn.asm
+ 
+-MULTILIB_OPTIONS = EL/EB mips32/mips32r2/mips64/mips64r2 mips16 msoft-float/mfp64 mcode-readable=no
+-MULTILIB_DIRNAMES = el eb mips32 mips32r2 mips64 mips64r2 mips16 sof f64 spram
++MULTILIB_OPTIONS = EL/EB mips32/mips32r2/mips64/mips64r2 mips16/micromips msoft-float/mfp64 mcode-readable=no
++MULTILIB_DIRNAMES = el eb mips32 mips32r2 mips64 mips64r2 mips16 micromips sof f64 spram
+ MULTILIB_MATCHES = EL=mel EB=meb
+ 
+ # The -mfp64 option is only valid in conjunction with -mips32r2.
+@@ -28,6 +28,9 @@
+ MULTILIB_EXCLUSIONS += mips64/mips16 mips64r2/mips16
+ endif
+ 
++# The -mcode-readable=no is only in conjunction with -mips16.
++MULTILIB_EXCLUSIONS += mcode-readable=no/!mips16
++
+ EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o
+ 
+ # Build the multilibs.
+--- a/src/gcc/config/mips/t-sgxx-linux
++++ b/src/gcc/config/mips/t-sgxx-linux
+@@ -0,0 +1,13 @@
++MULTILIB_OPTIONS = muclibc mmicromips/march=mips2/march=mips32 msoft-float EL/EB
++MULTILIB_DIRNAMES = uclibc micromips mips2 mips32 soft-float el eb
++MULTILIB_MATCHES := EL=mel EB=meb \
++  march?mips2=mips2 march?mips2=mips3 march?mips2=mips4 \
++  $(foreach cpu,mips3 mips4 r6000 r4000 vr4100 vr4111 vr4120 vr4130 vr4300 \
++                r4400 r4600 orion r4650 loongson2e loongson2f r8000 r10000 \
++                r12000 r14000 r16000 vr5000 vr5400 vr5500 rm7000 \
++                rm9000,march?mips2=march?$(cpu)) \
++  march?mips32=mips32 march?mips32=mips64 \
++  $(foreach cpu,4kc 4km 4kp 4ksc mips64 5kc 5kf 20kc sb1 sb1a sr71000 \
++                xlr,march?mips32=march?$(cpu))
++MULTILIB_EXCEPTIONS = *muclibc*/*mmicromips* *muclibc*/*march?mips2* *muclibc*/*march?mips32*
++EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o 
+--- a/src/gcc/config/mips/t-sgxx-sde
++++ b/src/gcc/config/mips/t-sgxx-sde
+@@ -0,0 +1,17 @@
++# SourceryG++ overrides for SDE builds
++
++# We must build libgcc2.a with -G 0, in case the user wants to link
++# without the $gp register. Use -fno-optimize-sibling-calls in case
++# we have a mixed mips16/non-mips16 environment where a plain "jump"
++# instuction won't work across the divide (no jx instruction).
++# Compile libraries with -mcode-xonly, so that they are link-compatible
++# with both -mcode-readable=pcrel and -mcode-readable=yes.
++TARGET_LIBGCC2_CFLAGS = -G 0 -fno-optimize-sibling-calls -mcode-xonly
++
++MULTILIB_OPTIONS = EL/EB mips16/mmicromips mfp64/msoft-float/mno-float mcode-readable=no
++MULTILIB_DIRNAMES = el eb mips16 micromips fp64 sof nof spram
++MULTILIB_MATCHES = EL=mel EB=meb mips16=mips16e
++MULTILIB_EXTRA_OPTS = mno-jals
++MULTILIB_EXCLUSIONS = mcode-readable=no/!mips16
++# Only hard and soft float micromips
++MULTILIB_EXCEPTIONS = *mmicromips/mfp64* *mmicromips/mno-float*
+--- a/src/gcc/config/mips/t-sgxxlite-linux
++++ b/src/gcc/config/mips/t-sgxxlite-linux
+@@ -0,0 +1,6 @@
++MULTILIB_OPTIONS = muclibc mmicromips msoft-float EL/EB
++MULTILIB_DIRNAMES = uclibc micromips soft-float el eb
++MULTILIB_MATCHES := EL=mel EB=meb
++MULTILIB_EXCEPTIONS = *muclibc*/*mmicromips*
++EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
++
+--- a/src/gcc/config/mips/t-wrs-linux
++++ b/src/gcc/config/mips/t-wrs-linux
+@@ -0,0 +1,58 @@
++# Wind River GNU/Linux Configuration.
++# Copyright (C) 2006, 2007
++# Free Software Foundation, Inc.
++#
++# This file is part of GCC.
++#
++# GCC is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3, or (at your option)
++# any later version.
++# 
++# GCC is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++# Build big-endian and little-endian support libraries.
++MULTILIB_OPTIONS = muclibc mel mhard-float march=octeon/march=octeon2/march=vr5500 mabi=n32/mabi=64
++MULTILIB_DIRNAMES = uclibc mel hard-float octeon octeon2 vr5500 n32 64
++MULTILIB_EXCEPTIONS = *muclibc*/*mhard-float*
++MULTILIB_EXCEPTIONS += *muclibc*/*mabi=n32*
++MULTILIB_EXCEPTIONS += *muclibc*/*mabi=64*
++MULTILIB_EXCEPTIONS += *muclibc*/*march=vr5500*
++MULTILIB_EXCEPTIONS += *mel*/*march=vr5500*
++MULTILIB_EXCEPTIONS += march=vr5500*
++MULTILIB_EXCEPTIONS += mhard-float/march=vr5500/*
++MULTILIB_EXCEPTIONS += */march=octeon* */march=octeon2*
++MULTILIB_EXCEPTIONS += march=octeon march=octeon/mabi=32
++MULTILIB_EXCEPTIONS += march=octeon2 march=octeon2/mabi=32
++MULTILIB_EXCEPTIONS += mel/mabi=n32 mel/mabi=64
++MULTILIB_EXCEPTIONS += mabi=n32
++# These files must be built for each multilib.
++EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
++
++# See comment in wrs-linux.h on STARTFILE_PREFIX_SPEC for how the real
++# directories used in the sysroots are determined.  These directories
++# are specified so that (a) they are distinct and (b) removing the
++# components that form part of the sysroot suffix leaves the real
++# directory within the sysroot.
++MULTILIB_OSDIRNAMES = mel/mhard-float/mabi.n32=../lib32/mel/hard-float
++MULTILIB_OSDIRNAMES += mel/mhard-float/mabi.64=../lib64/mel/hard-float
++MULTILIB_OSDIRNAMES += mhard-float/mabi.n32=../lib32/hard-float
++MULTILIB_OSDIRNAMES += mhard-float/mabi.64=../lib64/hard-float
++MULTILIB_OSDIRNAMES += mel/mhard-float=!mel/hard-float
++MULTILIB_OSDIRNAMES += mhard-float/march.vr5500=!hard-float/vr5500
++MULTILIB_OSDIRNAMES += mhard-float=!hard-float
++MULTILIB_OSDIRNAMES += mabi.64=../lib64
++MULTILIB_OSDIRNAMES += march.octeon/mabi.n32=../lib32/octeon
++MULTILIB_OSDIRNAMES += march.octeon/mabi.64=../lib64/octeon
++MULTILIB_OSDIRNAMES += march.octeon2/mabi.n32=../lib32/octeon2
++MULTILIB_OSDIRNAMES += march.octeon2/mabi.64=../lib64/octeon2
++MULTILIB_OSDIRNAMES += muclibc/mel=!uclibc/mel
++MULTILIB_OSDIRNAMES += muclibc=!uclibc
++
+--- a/src/gcc/config/mips/wrs-linux.h
++++ b/src/gcc/config/mips/wrs-linux.h
+@@ -0,0 +1,66 @@
++/* Wind River GNU/Linux Configuration.
++   Copyright (C) 2006, 2007
++   Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 3, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++/* Override linux64.h to default to O32.  */
++#undef DRIVER_SELF_SPECS
++#define DRIVER_SELF_SPECS \
++  BASE_DRIVER_SELF_SPECS, \
++  LINUX_DRIVER_SELF_SPECS \
++  " %{!EB:%{!EL:%(endian_spec)}}" \
++  " %{!mabi=*: -mabi=32}"
++
++/* We do not need to provide an explicit big-endian multilib.  */
++#undef MULTILIB_DEFAULTS
++#define MULTILIB_DEFAULTS \
++  { "meb", "mabi=32" }
++
++/* The GLIBC headers are in /usr/include, relative to the sysroot; the
++   uClibc headers are in /uclibc/usr/include.  */
++#undef SYSROOT_HEADERS_SUFFIX_SPEC
++#define SYSROOT_HEADERS_SUFFIX_SPEC		\
++  "%{muclibc:/uclibc}" 
++
++/* The various C libraries each have their own subdirectory.  */
++#undef SYSROOT_SUFFIX_SPEC
++#define SYSROOT_SUFFIX_SPEC				\
++  "%{muclibc:%{mel:/uclibc/mel ;			\
++               :/uclibc} ;				\
++     mel:%{mhard-float:/mel/hard-float ;		\
++           :/mel} ;					\
++     march=octeon:/octeon ;				\
++     march=octeon2:/octeon2 ;				\
++     march=vr5500:%{mhard-float:/hard-float/vr5500} ;	\
++     mhard-float:/hard-float}"
++
++/* MULTILIB_OSDIRNAMES provides directory names used in two ways:
++   relative to $target/lib/ in the GCC installation, and relative to
++   lib/ and usr/lib/ in a sysroot.  For the latter, we want names such
++   as plain ../lib64, but these cannot be used outside the sysroot
++   because different multilibs would be mapped to the same directory.
++   Directories are searched both with and without the multilib suffix,
++   so it suffices if the directory without the suffix is correct
++   within the sysroot while the directory with the suffix doesn't
++   exist.  We use STARTFILE_PREFIX_SPEC to achieve the desired
++   effect.  */
++#undef STARTFILE_PREFIX_SPEC
++#define STARTFILE_PREFIX_SPEC				\
++  "%{mabi=32: /usr/local/lib/ /lib/ /usr/lib/} 		\
++   %{mabi=n32: /usr/local/lib32/ /lib32/ /usr/lib32/}	\
++   %{mabi=64: /usr/local/lib64/ /lib64/ /usr/lib64/}"
+--- a/src/gcc/config/mips/xlr.md
++++ b/src/gcc/config/mips/xlr.md
+@@ -1,5 +1,5 @@
+ ;; DFA-based pipeline description for the XLR.
+-;;   Copyright (C) 2008 Free Software Foundation, Inc.
++;;   Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+ ;;
+ ;; xlr.md   Machine Description for the RMI XLR Microprocessor
+ ;; This file is part of GCC.
+@@ -31,7 +31,7 @@
+ ;; Integer arithmetic instructions.
+ (define_insn_reservation "ir_xlr_alu" 1
+   (and (eq_attr "cpu" "xlr") 
+-       (eq_attr "type" "arith,shift,clz,const,unknown,multi,nop,trap"))
++       (eq_attr "type" "move,arith,shift,clz,logical,signext,const,unknown,multi,nop,trap"))
+   "xlr_main_pipe")
+ 
+ ;; Integer arithmetic instructions.
+--- a/src/gcc/config/pa/pa-linux.h
++++ b/src/gcc/config/pa/pa-linux.h
+@@ -31,12 +31,6 @@
+ #undef CPP_SPEC
+ #define CPP_SPEC "%{posix:-D_POSIX_SOURCE}"
+ 
+-#undef	LIB_SPEC
+-#define LIB_SPEC \
+-  "%{pthread:-lpthread} \
+-   %{shared:-lgcc -lc} \
+-   %{!shared:%{mieee-fp:-lieee} %{shared-libgcc:-lgcc} %{profile:-lc_p}%{!profile:-lc}}"
+-
+ #undef ASM_SPEC
+ #define ASM_SPEC \
+   "%{v:-V} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}"
+--- a/src/gcc/config/print-sysroot-suffix.sh
++++ b/src/gcc/config/print-sysroot-suffix.sh
+@@ -0,0 +1,154 @@
++#! /bin/sh
++# Script to generate SYSROOT_SUFFIX_SPEC equivalent to MULTILIB_OSDIRNAMES
++# Arguments are MULTILIB_OSDIRNAMES, MULTILIB_OPTIONS, MULTILIB_MATCHES
++# and MULTILIB_ALIASES.
++
++# Copyright (C) 2009 Free Software Foundation, Inc.
++
++# This file is part of GCC.
++
++# GCC is free software; you can redistribute it and/or modify it under
++# the terms of the GNU General Public License as published by the Free
++# Software Foundation; either version 3, or (at your option) any later
++# version.
++
++# GCC is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++# for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.  
++
++# This shell script produces a header file fragment that defines
++# SYSROOT_SUFFIX_SPEC.  It assumes that the sysroots will have the same
++# structure and names used by the multilibs.
++
++# Invocation:
++#   print-sysroot-suffix.sh \
++#          MULTILIB_OSDIRNAMES \
++#          MULTILIB_OPTIONS \
++#          MULTILIB_MATCHES \
++#      > t-sysroot-suffix.h
++
++# The three options exactly correspond to the variables of the same
++# names defined in the tmake_file fragments.
++
++# Example:
++#   sh ./gcc/config/print-sysroot-suffix.sh "a=A" "a b/c/d" ""
++# =>
++#   #undef SYSROOT_SUFFIX_SPEC
++#   #define SYSROOT_SUFFIX_SPEC "" \
++#   "%{a:" \
++#     "%{b:A/b/;" \
++#     "c:A/c/;" \
++#     "d:A/d/;" \
++#     ":A/};" \
++#   ":}"
++
++# The script uses temporary subscripts in order to permit a recursive
++# algorithm without the use of functions.
++
++set -e
++
++dirnames="$1"
++options="$2"
++matches="$3"
++aliases="$4"
++
++cat > print-sysroot-suffix3.sh <<\EOF
++#! /bin/sh
++# Print all the multilib matches for this option
++result="$1"
++EOF
++for x in $matches; do
++  l=`echo $x | sed -e 's/=.*$//' -e 's/?/=/g'`
++  r=`echo $x | sed -e 's/^.*=//' -e 's/?/=/g'`
++  echo "[ \"\$1\" = \"$l\" ] && result=\"\$result|$r\"" >> print-sysroot-suffix3.sh
++done
++echo 'echo $result' >> print-sysroot-suffix3.sh
++chmod +x print-sysroot-suffix3.sh
++
++cat > print-sysroot-suffix2.sh <<\EOF
++#! /bin/sh
++# Recursive script to enumerate all multilib combinations, match against
++# multilib directories and output a spec string of the result.
++# Will fold identical trees.
++
++padding="$1"
++optstring="$2"
++shift 2
++n="\" \\
++$padding\""
++if [ $# = 0 ]; then
++  case $optstring in
++EOF
++for x in $aliases; do
++  l=`echo $x | sed -e 's/=.*$//' -e 's/?/=/g'`
++  r=`echo $x | sed -e 's/^.*=//' -e 's/?/=/g'`
++  echo "/$r/) optstring=\"/$l/\" ;;" >> print-sysroot-suffix2.sh
++done
++echo "  esac" >> print-sysroot-suffix2.sh
++
++pat=
++for x in $dirnames; do
++  p=`echo $x | sed -e 's,=!,/$=/,'`
++  pat="$pat -e 's=^//$p='"
++done
++echo '  optstring=`echo "/$optstring" | sed '"$pat\`" >> print-sysroot-suffix2.sh
++cat >> print-sysroot-suffix2.sh <<\EOF
++  case $optstring in
++  //*)
++    ;;
++  *)
++    echo "$optstring"
++    ;;
++  esac
++else
++  thisopt="$1"
++  shift
++  bit=
++  lastcond=
++  result=
++  for x in `echo "$thisopt" | sed -e 's,/, ,g'`; do
++    case $x in
++EOF
++for x in `echo "$options" | sed -e 's,/, ,g'`; do
++  match=`./print-sysroot-suffix3.sh "$x"`
++  echo "$x) optmatch=\"$match\" ;;" >> print-sysroot-suffix2.sh
++done
++cat >> print-sysroot-suffix2.sh <<\EOF
++    esac
++    bit=`"$0" "$padding  " "$optstring$x/" "$@"`
++    if [ -z "$lastopt" ]; then
++      lastopt="$optmatch"
++    else
++      if [ "$lastbit" = "$bit" ]; then
++	lastopt="$lastopt|$optmatch"
++      else
++	result="$result$lastopt:$lastbit;$n"
++	lastopt="$optmatch"
++      fi
++    fi
++    lastbit="$bit"
++  done
++  bit=`"$0" "$padding  " "$optstring" "$@"`
++  if [ "$bit" = "$lastbit" ]; then
++    if [ -z "$result" ]; then
++      echo "$bit"
++    else
++      echo "$n%{$result:$bit}"
++    fi
++  else
++    echo "$n%{$result$lastopt:$lastbit;$n:$bit}"
++  fi
++fi
++EOF
++
++chmod +x ./print-sysroot-suffix2.sh
++result=`./print-sysroot-suffix2.sh "" "/" $options`
++echo "#undef SYSROOT_SUFFIX_SPEC"
++echo "#define SYSROOT_SUFFIX_SPEC \"$result\""
++rm print-sysroot-suffix2.sh
++rm print-sysroot-suffix3.sh
+--- a/src/gcc/config/rs6000/rs6000.c
++++ b/src/gcc/config/rs6000/rs6000.c
+@@ -920,6 +920,7 @@
+ static bool rs6000_is_opaque_type (const_tree);
+ static rtx rs6000_dwarf_register_span (rtx);
+ static void rs6000_init_dwarf_reg_sizes_extra (tree);
++static int rs6000_commutative_operand_precedence (const_rtx, int);
+ static rtx rs6000_legitimize_tls_address (rtx, enum tls_model);
+ static void rs6000_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
+ static rtx rs6000_tls_get_addr (void);
+@@ -1195,6 +1196,10 @@
+ #undef TARGET_VECTOR_OPAQUE_P
+ #define TARGET_VECTOR_OPAQUE_P rs6000_is_opaque_type
+ 
++#undef TARGET_COMMUTATIVE_OPERAND_PRECEDENCE
++#define TARGET_COMMUTATIVE_OPERAND_PRECEDENCE \
++  rs6000_commutative_operand_precedence
++
+ #undef TARGET_DWARF_REGISTER_SPAN
+ #define TARGET_DWARF_REGISTER_SPAN rs6000_dwarf_register_span
+ 
+@@ -22222,6 +22227,30 @@
+     return 4 + rs6000_register_move_cost (mode, rclass, GENERAL_REGS);
+ }
+ 
++/* Return a value indicating whether OP, an operand of a commutative
++   operation, is preferred as the first or second operand.  The higher
++   the value, the stronger the preference for being the first operand.
++   We use negative values to indicate a preference for the first operand
++   and positive values for the second operand.
++   VALUE is the default precedence for OP; see rtlanal.c:
++   commutative_operand_precendece.  */
++
++static int
++rs6000_commutative_operand_precedence (const_rtx op, int value)
++{
++  /* Prefer pointer objects over non pointer objects.
++     For rationale see PR28690.  */
++  if (GET_RTX_CLASS (GET_CODE (op)) == RTX_OBJ
++      && ((REG_P (op) && REG_POINTER (op))
++	  || (MEM_P (op) && MEM_POINTER (op))))
++    /* value = -1 */;
++  else
++    /* value = -2 */
++    --value;
++
++  return value;
++}
++
+ /* Returns a code for a target-specific builtin that implements
+    reciprocal of the function, or NULL_TREE if not available.  */
+ 
+--- a/src/gcc/config/sh/constraints.md
++++ b/src/gcc/config/sh/constraints.md
+@@ -22,6 +22,7 @@
+ ;;  Bsc: SCRATCH - for the scratch register in movsi_ie in the
+ ;;       fldi0 / fldi0 cases
+ ;; Cxx: Constants other than only CONST_INT
++;;  Ccl: call site label
+ ;;  Css: signed 16-bit constant, literal or symbolic
+ ;;  Csu: unsigned 16-bit constant, literal or symbolic
+ ;;  Csy: label or symbol
+@@ -183,6 +184,11 @@
+    hence mova is being used, hence do not select this pattern."
+   (match_code "scratch"))
+ 
++(define_constraint "Ccl"
++  "A call site label, for bsrf."
++  (and (match_code "unspec")
++       (match_test "XINT (op, 1) == UNSPEC_CALLER")))
++
+ (define_constraint "Css"
+   "A signed 16-bit constant, literal or symbolic."
+   (and (match_code "const")
+--- a/src/gcc/config/sh/cs-sgxxlite-linux.h
++++ b/src/gcc/config/sh/cs-sgxxlite-linux.h
+@@ -0,0 +1,31 @@
++/* SH SourceryG++ GNU/Linux Configuration.
++   Copyright (C) 2008
++   Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 3, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++#undef SYSROOT_HEADERS_SUFFIX_SPEC
++#define SYSROOT_HEADERS_SUFFIX_SPEC \
++  "%{muclibc:/uclibc}"
++
++#undef SUBTARGET_OVERRIDE_OPTIONS
++#define SUBTARGET_OVERRIDE_OPTIONS					\
++do {									\
++  /* __thread_support is not supported by uClibc.  */			\
++  if (linux_uclibc)						\
++    targetm.have_tls = 0;						\
++} while (0)
+--- a/src/gcc/config/sh/cs-sgxxlite-linux.opt
++++ b/src/gcc/config/sh/cs-sgxxlite-linux.opt
+@@ -0,0 +1,23 @@
++; Options for SH SourceryG++ GNU/Linux
++
++; Copyright (C) 2009 Free Software Foundation, Inc.
++;
++; This file is part of GCC.
++;
++; GCC is free software; you can redistribute it and/or modify it under
++; the terms of the GNU General Public License as published by the Free
++; Software Foundation; either version 3, or (at your option) any later
++; version.
++;
++; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
++; WARRANTY; without even the implied warranty of MERCHANTABILITY or
++; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++; for more details.
++;
++; You should have received a copy of the GNU General Public License
++; along with GCC; see the file COPYING3.  If not see
++; <http://www.gnu.org/licenses/>.
++
++muclibc
++Target RejectNegative Var(building_for_uclibc)
++Building with -muclibc
+--- a/src/gcc/config/sh/lib1funcs.asm
++++ b/src/gcc/config/sh/lib1funcs.asm
+@@ -1968,7 +1968,10 @@
+ 	HIDDEN_FUNC(GLOBAL(set_fpscr))
+ GLOBAL(set_fpscr):
+ 	lds r4,fpscr
+-#ifdef __PIC__
++#if defined(__SH_FDPIC__)
++	mov.l	LOCAL(set_fpscr_L1),r0
++	mov.l	@(r0,r12),r1
++#elif defined(__PIC__)
+ 	mov.l	r12,@-r15
+ #ifdef __vxworks
+ 	mov.l	LOCAL(set_fpscr_L0_base),r12
+@@ -2014,6 +2017,7 @@
+ #endif
+ 	.align 2
+ #ifdef __PIC__
++#ifndef __SH_FDPIC__
+ #ifdef __vxworks
+ LOCAL(set_fpscr_L0_base):
+ 	.long ___GOTT_BASE__
+@@ -2023,6 +2027,7 @@
+ LOCAL(set_fpscr_L0):
+ 	.long _GLOBAL_OFFSET_TABLE_
+ #endif
++#endif /* __SH_FDPIC__ */
+ LOCAL(set_fpscr_L1):
+ 	.long GLOBAL(fpscr_values@GOT)
+ #else
+@@ -2080,8 +2085,9 @@
+ GLOBAL(ic_invalidate):
+ 	ocbwb	@r4
+ 	synco
+-	rts
+ 	icbi	@r4
++	rts
++	  nop
+ 	ENDFUNC(GLOBAL(ic_invalidate))
+ #elif defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) || (defined(__SH4_NOFPU__) && !defined(__SH5__))
+ 	/* For system code, we use ic_invalidate_line_i, but user code
+@@ -2147,8 +2153,10 @@
+ GLOBAL(ic_invalidate_array):
+ 	add	r1,r4
+ 	synco
+-	rts
+ 	icbi	@r4
++	rts
++	  nop
++	.align 2
+ 	.long	0
+ 	ENDFUNC(GLOBAL(ic_invalidate_array))
+ #elif defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) || (defined(__SH4_NOFPU__) && !defined(__SH5__))
+--- a/src/gcc/config/sh/lib1funcs.h
++++ b/src/gcc/config/sh/lib1funcs.h
+@@ -42,8 +42,8 @@
+ 
+ #define ALIAS(X,Y)	.global GLOBAL(X); .set GLOBAL(X),GLOBAL(Y)
+ 
+-#ifdef __SH2A__
+-#undef FMOVD_WORKS
++#if defined __SH2A__ && defined __FMOVD_ENABLED__
++#undef  FMOVD_WORKS
+ #define FMOVD_WORKS
+ #endif
+ 
+--- a/src/gcc/config/sh/linux-unwind.h
++++ b/src/gcc/config/sh/linux-unwind.h
+@@ -24,7 +24,10 @@
+ 
+ 
+ /* Do code reading to identify a signal frame, and set the frame
+-   state data appropriately.  See unwind-dw2.c for the structs.  */
++   state data appropriately.  See unwind-dw2.c for the structs.
++   Don't use this at all if inhibit_libc is used.  */
++
++#ifndef inhibit_libc
+ 
+ #include <signal.h>
+ #include <sys/ucontext.h>
+@@ -248,3 +251,5 @@
+   return _URC_NO_REASON;
+ }
+ #endif /* defined (__SH5__) */
++
++#endif /* inhibit_libc */
+--- a/src/gcc/config/sh/sh-protos.h
++++ b/src/gcc/config/sh/sh-protos.h
+@@ -152,7 +152,7 @@
+ extern void sh_pr_interrupt (struct cpp_reader *);
+ extern void sh_pr_trapa (struct cpp_reader *);
+ extern void sh_pr_nosave_low_regs (struct cpp_reader *);
+-extern rtx function_symbol (rtx, const char *, enum sh_function_kind);
++extern rtx function_symbol (rtx, const char *, enum sh_function_kind, rtx *);
+ extern rtx sh_get_pr_initial_val (void);
+ 
+ extern rtx sh_function_arg (CUMULATIVE_ARGS *, enum machine_mode, tree, int);
+@@ -175,6 +175,9 @@
+ extern int sh2a_is_function_vector_call (rtx);
+ extern void sh_fix_range (const char *);
+ extern bool sh_hard_regno_mode_ok (unsigned int, enum machine_mode);
++extern bool sh_illegitimate_symbolic_constant_p (rtx);
++extern rtx sh_load_function_descriptor (rtx);
++extern rtx sh_our_fdpic_reg (void);
+ #endif /* ! GCC_SH_PROTOS_H */
+ 
+ #ifdef SYMBIAN
+--- a/src/gcc/config/sh/sh.c
++++ b/src/gcc/config/sh/sh.c
+@@ -233,6 +233,7 @@
+ static rtx sh_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
+ static void sh_output_mi_thunk (FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT, tree);
+ static void sh_file_start (void);
++static bool sh_assemble_integer (rtx, unsigned, int);
+ static int flow_dependent_p (rtx, rtx);
+ static void flow_dependent_p_1 (rtx, const_rtx, void *);
+ static int shiftcosts (rtx);
+@@ -272,6 +273,7 @@
+ static int sh_dwarf_calling_convention (const_tree);
+ static void sh_encode_section_info (tree, rtx, int);
+ static int sh2a_function_vector_p (tree);
++static int sh_reloc_rw_mask (void);
+ 
+ 
+ /* Initialize the GCC target structure.  */
+@@ -304,6 +306,9 @@
+ #undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
+ #define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
+ 
++#undef TARGET_ASM_INTEGER
++#define TARGET_ASM_INTEGER sh_assemble_integer
++
+ #undef TARGET_DEFAULT_TARGET_FLAGS
+ #define TARGET_DEFAULT_TARGET_FLAGS TARGET_DEFAULT
+ #undef TARGET_HANDLE_OPTION
+@@ -483,6 +488,12 @@
+ /* Machine-specific symbol_ref flags.  */
+ #define SYMBOL_FLAG_FUNCVEC_FUNCTION    (SYMBOL_FLAG_MACH_DEP << 0)
+ 
++#undef TARGET_CANNOT_FORCE_CONST_MEM
++#define TARGET_CANNOT_FORCE_CONST_MEM sh_illegitimate_symbolic_constant_p
++
++#undef TARGET_ASM_RELOC_RW_MASK
++#define TARGET_ASM_RELOC_RW_MASK sh_reloc_rw_mask
++
+ struct gcc_target targetm = TARGET_INITIALIZER;
+ 
+ /* Implement TARGET_HANDLE_OPTION.  */
+@@ -1132,11 +1143,13 @@
+ 	  rtx func_addr_rtx = gen_reg_rtx (Pmode);
+ 	  rtx r4 = gen_rtx_REG (SImode, 4);
+ 	  rtx r5 = gen_rtx_REG (SImode, 5);
++	  rtx lab;
+ 
+-	  function_symbol (func_addr_rtx, "__movmemSI12_i4", SFUNC_STATIC);
++	  function_symbol (func_addr_rtx, "__movmemSI12_i4", SFUNC_STATIC,
++			   &lab);
+ 	  force_into (XEXP (operands[0], 0), r4);
+ 	  force_into (XEXP (operands[1], 0), r5);
+-	  emit_insn (gen_block_move_real_i4 (func_addr_rtx));
++	  emit_insn (gen_block_move_real_i4 (func_addr_rtx, lab));
+ 	  return 1;
+ 	}
+       else if (! TARGET_SMALLCODE)
+@@ -1147,15 +1160,16 @@
+ 	  rtx r4 = gen_rtx_REG (SImode, 4);
+ 	  rtx r5 = gen_rtx_REG (SImode, 5);
+ 	  rtx r6 = gen_rtx_REG (SImode, 6);
++	  rtx lab;
+ 
+ 	  entry_name = (bytes & 4 ? "__movmem_i4_odd" : "__movmem_i4_even");
+-	  function_symbol (func_addr_rtx, entry_name, SFUNC_STATIC);
++	  function_symbol (func_addr_rtx, entry_name, SFUNC_STATIC, &lab);
+ 	  force_into (XEXP (operands[0], 0), r4);
+ 	  force_into (XEXP (operands[1], 0), r5);
+ 
+ 	  dwords = bytes >> 3;
+ 	  emit_insn (gen_move_insn (r6, GEN_INT (dwords - 1)));
+-	  emit_insn (gen_block_lump_real_i4 (func_addr_rtx));
++	  emit_insn (gen_block_lump_real_i4 (func_addr_rtx, lab));
+ 	  return 1;
+ 	}
+       else
+@@ -1167,12 +1181,13 @@
+       rtx func_addr_rtx = gen_reg_rtx (Pmode);
+       rtx r4 = gen_rtx_REG (SImode, 4);
+       rtx r5 = gen_rtx_REG (SImode, 5);
++      rtx lab;
+ 
+       sprintf (entry, "__movmemSI%d", bytes);
+-      function_symbol (func_addr_rtx, entry, SFUNC_STATIC);
++      function_symbol (func_addr_rtx, entry, SFUNC_STATIC, &lab);
+       force_into (XEXP (operands[0], 0), r4);
+       force_into (XEXP (operands[1], 0), r5);
+-      emit_insn (gen_block_move_real (func_addr_rtx));
++      emit_insn (gen_block_move_real (func_addr_rtx, lab));
+       return 1;
+     }
+ 
+@@ -1185,8 +1200,9 @@
+       rtx r4 = gen_rtx_REG (SImode, 4);
+       rtx r5 = gen_rtx_REG (SImode, 5);
+       rtx r6 = gen_rtx_REG (SImode, 6);
++      rtx lab;
+ 
+-      function_symbol (func_addr_rtx, "__movmem", SFUNC_STATIC);
++      function_symbol (func_addr_rtx, "__movmem", SFUNC_STATIC, &lab);
+       force_into (XEXP (operands[0], 0), r4);
+       force_into (XEXP (operands[1], 0), r5);
+ 
+@@ -1199,7 +1215,7 @@
+       final_switch = 16 - ((bytes / 4) % 16);
+       while_loop = ((bytes / 4) / 16 - 1) * 16;
+       emit_insn (gen_move_insn (r6, GEN_INT (while_loop + final_switch)));
+-      emit_insn (gen_block_lump_real (func_addr_rtx));
++      emit_insn (gen_block_lump_real (func_addr_rtx, lab));
+       return 1;
+     }
+ 
+@@ -1212,8 +1228,10 @@
+ int
+ prepare_move_operands (rtx operands[], enum machine_mode mode)
+ {
++  rtx tmp, base, offset;
++
+   if ((mode == SImode || mode == DImode)
+-      && flag_pic
++      && (flag_pic || TARGET_FDPIC)
+       && ! ((mode == Pmode || mode == ptr_mode)
+ 	    && tls_symbolic_operand (operands[1], Pmode) != 0))
+     {
+@@ -1303,12 +1321,22 @@
+ 	    {
+ 	    case TLS_MODEL_GLOBAL_DYNAMIC:
+ 	      tga_ret = gen_rtx_REG (Pmode, R0_REG);
++	      if (TARGET_FDPIC)
++		{
++		  rtx pic_reg = gen_rtx_REG (Pmode, PIC_REG);
++		  emit_move_insn (pic_reg, OUR_FDPIC_REG);
++		}
+ 	      emit_call_insn (gen_tls_global_dynamic (tga_ret, op1));
+ 	      op1 = tga_ret;
+ 	      break;
+ 
+ 	    case TLS_MODEL_LOCAL_DYNAMIC:
+ 	      tga_ret = gen_rtx_REG (Pmode, R0_REG);
++	      if (TARGET_FDPIC)
++		{
++		  rtx pic_reg = gen_rtx_REG (Pmode, PIC_REG);
++		  emit_move_insn (pic_reg, OUR_FDPIC_REG);
++		}
+ 	      emit_call_insn (gen_tls_local_dynamic (tga_ret, op1));
+ 
+ 	      tmp = gen_reg_rtx (Pmode);
+@@ -1338,6 +1366,11 @@
+ 		}
+ 	      tga_op1 = !can_create_pseudo_p () ? op0 : gen_reg_rtx (Pmode);
+ 	      tmp = gen_sym2GOTTPOFF (op1);
++	      if (TARGET_FDPIC)
++		{
++		  rtx pic_reg = gen_rtx_REG (Pmode, PIC_REG);
++		  emit_move_insn (pic_reg, OUR_FDPIC_REG);
++		}
+ 	      emit_insn (gen_tls_initial_exec (tga_op1, tmp));
+ 	      op1 = tga_op1;
+ 	      break;
+@@ -1365,6 +1398,21 @@
+ 	}
+     }
+ 
++  if (SH_OFFSETS_MUST_BE_WITHIN_SECTIONS_P)
++    {
++      split_const (operands[1], &base, &offset);
++      if (GET_CODE (base) == SYMBOL_REF
++	  && !offset_within_block_p (base, INTVAL (offset)))
++	{
++	  tmp = can_create_pseudo_p () ? gen_reg_rtx (mode) : operands[0];
++	  emit_move_insn (tmp, base);
++	  if (!arith_operand (offset, mode))
++	    offset = force_reg (mode, offset);
++	  emit_insn (gen_add3_insn (operands[0], tmp, offset));
++	  return 1;
++	}
++    }
++
+   return 0;
+ }
+ 
+@@ -2147,6 +2195,26 @@
+     }
+ }
+ 
++/* Implementation of TARGET_ASM_INTEGER for SH.  Pointers to functions
++   need to be output as pointers to function descriptors for
++   FDPIC.  */
++
++static bool
++sh_assemble_integer (rtx value, unsigned int size, int aligned_p)
++{
++  if (TARGET_FDPIC
++      && size == UNITS_PER_WORD
++      && GET_CODE (value) == SYMBOL_REF
++      && SYMBOL_REF_FUNCTION_P (value))
++    {
++      fputs ("\t.long\t", asm_out_file);
++      output_addr_const (asm_out_file, value);
++      fputs ("@FUNCDESC\n", asm_out_file);
++      return true;
++    }
++  return default_assemble_integer (value, size, aligned_p);
++}
++
+ /* Check if PAT includes UNSPEC_CALLER unspec pattern.  */
+ 
+ static bool
+@@ -2175,7 +2243,7 @@
+ {
+   rtx pat;
+ 
+-  if (!reload_completed || !flag_pic)
++  if (!reload_completed || (!flag_pic && !TARGET_FDPIC))
+     return false;
+ 
+   if (GET_CODE (insn) != INSN)
+@@ -2714,6 +2782,7 @@
+   rtx wrk;
+   char func[18];
+   int value;
++  rtx lab;
+ 
+   if (TARGET_SH3)
+     {
+@@ -2779,8 +2848,8 @@
+   /* Load the value into an arg reg and call a helper.  */
+   emit_move_insn (gen_rtx_REG (SImode, 4), operands[1]);
+   sprintf (func, "__ashiftrt_r4_%d", value);
+-  function_symbol (wrk, func, SFUNC_STATIC);
+-  emit_insn (gen_ashrsi3_n (GEN_INT (value), wrk));
++  function_symbol (wrk, func, SFUNC_STATIC, &lab);
++  emit_insn (gen_ashrsi3_n (GEN_INT (value), wrk, lab));
+   emit_move_insn (operands[0], gen_rtx_REG (SImode, 4));
+   return 1;
+ }
+@@ -3739,14 +3808,13 @@
+ 		&& GET_CODE (SET_SRC (pat)) == CONST_DOUBLE
+ 		&& (fp_zero_operand (SET_SRC (pat))
+ 		    || fp_one_operand (SET_SRC (pat)))
+-		/* ??? If this is a -m4 or -m4-single compilation, in general
+-		   we don't know the current setting of fpscr, so disable fldi.
++		/* In general we don't know the current setting of fpscr, so disable fldi.
+ 		   There is an exception if this was a register-register move
+ 		   before reload - and hence it was ascertained that we have
+ 		   single precision setting - and in a post-reload optimization
+ 		   we changed this to do a constant load.  In that case
+ 		   we don't have an r0 clobber, hence we must use fldi.  */
+-		&& (! TARGET_SH4 || TARGET_FMOVD
++		&& (TARGET_FMOVD
+ 		    || (GET_CODE (XEXP (XVECEXP (PATTERN (insn), 0, 2), 0))
+ 			== SCRATCH))
+ 		&& GET_CODE (SET_DEST (pat)) == REG
+@@ -6532,7 +6600,9 @@
+   else
+     push_regs (&live_regs_mask, current_function_interrupt);
+ 
+-  if (flag_pic && df_regs_ever_live_p (PIC_OFFSET_TABLE_REGNUM))
++  if (flag_pic
++      && !TARGET_FDPIC
++      && df_regs_ever_live_p (PIC_OFFSET_TABLE_REGNUM))
+     emit_insn (gen_GOTaddr2picreg ());
+ 
+   if (SHMEDIA_REGS_STACK_ADJUST ())
+@@ -6542,7 +6612,7 @@
+       function_symbol (gen_rtx_REG (Pmode, R0_REG),
+ 		       (TARGET_FPU_ANY
+ 			? "__GCC_push_shmedia_regs"
+-			: "__GCC_push_shmedia_regs_nofpu"), SFUNC_GOT);
++			: "__GCC_push_shmedia_regs_nofpu"), SFUNC_GOT, NULL);
+       emit_insn (gen_shmedia_save_restore_regs_compact
+ 		 (GEN_INT (-SHMEDIA_REGS_STACK_ADJUST ())));
+     }
+@@ -6564,7 +6634,7 @@
+       /* This must NOT go through the PLT, otherwise mach and macl
+ 	 may be clobbered.  */
+       function_symbol (gen_rtx_REG (Pmode, R0_REG),
+-		      "__GCC_shcompact_incoming_args", SFUNC_GOT);
++		      "__GCC_shcompact_incoming_args", SFUNC_GOT, NULL);
+       emit_insn (gen_shcompact_incoming_args ());
+     }
+ }
+@@ -6643,7 +6713,7 @@
+       function_symbol (gen_rtx_REG (Pmode, R0_REG),
+ 		       (TARGET_FPU_ANY
+ 			? "__GCC_pop_shmedia_regs"
+-			: "__GCC_pop_shmedia_regs_nofpu"), SFUNC_GOT);
++			: "__GCC_pop_shmedia_regs_nofpu"), SFUNC_GOT, NULL);
+       /* This must NOT go through the PLT, otherwise mach and macl
+ 	 may be clobbered.  */
+       emit_insn (gen_shmedia_save_restore_regs_compact
+@@ -8458,7 +8528,7 @@
+   return REAL_VALUES_EQUAL (r, dconst1);
+ }
+ 
+-/* For -m4 and -m4-single-only, mode switching is used.  If we are
++/* In general mode switching is used.  If we are
+    compiling without -mfmovd, movsf_ie isn't taken into account for
+    mode switching.  We could check in machine_dependent_reorg for
+    cases where we know we are in single precision mode, but there is
+@@ -8468,7 +8538,7 @@
+ int
+ fldi_ok (void)
+ {
+-  return ! TARGET_SH4 || TARGET_FMOVD || reload_completed;
++  return 1;
+ }
+ 
+ int
+@@ -8838,9 +8908,12 @@
+ 	  || XINT (x, 1) == UNSPEC_GOTPLT
+ 	  || XINT (x, 1) == UNSPEC_GOTTPOFF
+ 	  || XINT (x, 1) == UNSPEC_DTPOFF
++	  || XINT (x, 1) == UNSPEC_TPOFF
+ 	  || XINT (x, 1) == UNSPEC_PLT
+ 	  || XINT (x, 1) == UNSPEC_SYMOFF
+-	  || XINT (x, 1) == UNSPEC_PCREL_SYMOFF))
++	  || XINT (x, 1) == UNSPEC_PCREL_SYMOFF
++	  || XINT (x, 1) == UNSPEC_GOTFUNCDESC
++	  || XINT (x, 1) == UNSPEC_GOTOFFFUNCDESC))
+     return 0;
+ 
+   fmt = GET_RTX_FORMAT (GET_CODE (x));
+@@ -8876,7 +8949,26 @@
+       if (reg == 0)
+ 	reg = gen_reg_rtx (Pmode);
+ 
+-      emit_insn (gen_symGOTOFF2reg (reg, orig));
++      if (TARGET_FDPIC
++	  && GET_CODE (orig) == SYMBOL_REF
++	  && SYMBOL_REF_FUNCTION_P (orig))
++	{
++	  /* Weak functions may be NULL which doesn't work with
++	     GOTOFFFUNCDESC because the runtime offset is not known.  */
++	  if (SYMBOL_REF_WEAK (orig))
++	    emit_insn (gen_symGOTFUNCDESC2reg (reg, orig));
++	  else
++	    emit_insn (gen_symGOTOFFFUNCDESC2reg (reg, orig));
++	}
++      else if (TARGET_FDPIC
++	       && (GET_CODE (orig) == LABEL_REF
++		   || (GET_CODE (orig) == SYMBOL_REF
++		       && SYMBOL_REF_DECL (orig)
++		       && TREE_READONLY (SYMBOL_REF_DECL (orig)))))
++	/* In FDPIC, GOTOFF can only be used for writable data.  */
++	emit_insn (gen_symGOT2reg (reg, orig));
++      else
++	emit_insn (gen_symGOTOFF2reg (reg, orig));
+       return reg;
+     }
+   else if (GET_CODE (orig) == SYMBOL_REF)
+@@ -8884,7 +8976,10 @@
+       if (reg == 0)
+ 	reg = gen_reg_rtx (Pmode);
+ 
+-      emit_insn (gen_symGOT2reg (reg, orig));
++      if (TARGET_FDPIC && SYMBOL_REF_FUNCTION_P (orig))
++	emit_insn (gen_symGOTFUNCDESC2reg (reg, orig));
++      else
++	emit_insn (gen_symGOT2reg (reg, orig));
+       return reg;
+     }
+   return orig;
+@@ -9834,7 +9929,7 @@
+       if (!TARGET_INLINE_IC_INVALIDATE
+ 	  || (!(TARGET_SH4A_ARCH || TARGET_SH4_300) && TARGET_USERMODE))
+ 	emit_library_call (function_symbol (NULL, "__ic_invalidate",
+-					    FUNCTION_ORDINARY),
++					    FUNCTION_ORDINARY, NULL),
+ 			   0, VOIDmode, 1, tramp, SImode);
+       else
+ 	emit_insn (gen_ic_invalidate_line (tramp));
+@@ -10605,10 +10700,18 @@
+     sibcall = gen_sibcalli_thunk (funexp, const0_rtx);
+   else
+ #endif
+-  if (TARGET_SH2 && flag_pic)
++  if (TARGET_SH2 && (flag_pic || TARGET_FDPIC))
+     {
+-      sibcall = gen_sibcall_pcrel (funexp, const0_rtx);
+-      XEXP (XVECEXP (sibcall, 0, 2), 0) = scratch2;
++      if (TARGET_FDPIC)
++        {
++	  sibcall = gen_sibcall_pcrel_fdpic (funexp, const0_rtx);
++          XEXP (XVECEXP (sibcall, 0, 3), 0) = scratch2;
++        }
++      else
++        {
++	  sibcall = gen_sibcall_pcrel (funexp, const0_rtx);
++          XEXP (XVECEXP (sibcall, 0, 2), 0) = scratch2;
++        }
+     }
+   else
+     {
+@@ -10684,11 +10787,24 @@
+   epilogue_completed = 0;
+ }
+ 
++/* Return an RTX for the address of a function NAME of kind KIND,
++   placing the result in TARGET if not NULL.  LAB should be non-NULL
++   for SFUNC_STATIC, if FDPIC; it will be set to (const_int 0) if jsr
++   should be used, or a label_ref if bsrf should be used.  For FDPIC,
++   both SFUNC_GOT and SFUNC_STATIC will return the address of the
++   function itself, not a function descriptor, so they can only be
++   used with functions not using the FDPIC register that are known to
++   be called directory without a PLT entry.  */
++
+ rtx
+-function_symbol (rtx target, const char *name, enum sh_function_kind kind)
++function_symbol (rtx target, const char *name, enum sh_function_kind kind,
++		 rtx *lab)
+ {
+   rtx sym;
+ 
++  if (lab)
++    *lab = const0_rtx;
++
+   /* If this is not an ordinary function, the name usually comes from a
+      string literal or an sprintf buffer.  Make sure we use the same
+      string consistently, so that cse will be able to unify address loads.  */
+@@ -10696,7 +10812,7 @@
+     name = IDENTIFIER_POINTER (get_identifier (name));
+   sym = gen_rtx_SYMBOL_REF (Pmode, name);
+   SYMBOL_REF_FLAGS (sym) = SYMBOL_FLAG_FUNCTION;
+-  if (flag_pic)
++  if (flag_pic || TARGET_FDPIC)
+     switch (kind)
+       {
+       case FUNCTION_ORDINARY:
+@@ -10711,14 +10827,27 @@
+ 	}
+       case SFUNC_STATIC:
+ 	{
+-	  /* ??? To allow cse to work, we use GOTOFF relocations.
+-	     we could add combiner patterns to transform this into
+-	     straight pc-relative calls with sym2PIC / bsrf when
+-	     label load and function call are still 1:1 and in the
+-	     same basic block during combine.  */
+ 	  rtx reg = target ? target : gen_reg_rtx (Pmode);
+ 
+-	  emit_insn (gen_symGOTOFF2reg (reg, sym));
++	  if (TARGET_FDPIC)
++	    {
++	      /* We use PC-relative calls, since GOTOFF can only refer
++		 to writable data.  This works along with
++		 sh_sfunc_call.  */
++	      gcc_assert (lab != NULL);
++	      *lab = PATTERN (gen_call_site ());
++	      emit_insn (gen_sym_label2reg (reg, sym, *lab));
++	    }
++	  else
++	    {
++	      /* ??? To allow cse to work, we use GOTOFF relocations.
++		 we could add combiner patterns to transform this into
++		 straight pc-relative calls with sym2PIC / bsrf when
++		 label load and function call are still 1:1 and in the
++		 same basic block during combine.  */
++	      emit_insn (gen_symGOTOFF2reg (reg, sym));
++	    }
++
+ 	  sym = reg;
+ 	  break;
+ 	}
+@@ -11358,4 +11487,61 @@
+ 
+ enum sh_divide_strategy_e sh_div_strategy = SH_DIV_STRATEGY_DEFAULT;
+ 
++bool
++sh_illegitimate_symbolic_constant_p (rtx x)
++{
++  rtx base, offset;
++
++  if (TARGET_FDPIC && !LEGITIMATE_PIC_OPERAND_P (x))
++    return true;
++
++  if (SH_OFFSETS_MUST_BE_WITHIN_SECTIONS_P)
++    {
++      split_const (x, &base, &offset);
++      if (GET_CODE (base) == SYMBOL_REF
++	  && !offset_within_block_p (base, INTVAL (offset)))
++	return true;
++    }
++  return false;
++}
++
++/* Emit insns to load the function address from FUNCDESC (an FDPIC
++   function descriptor) into r1 and the GOT address into r12,
++   returning an rtx for r1.  */
++
++rtx
++sh_load_function_descriptor (rtx funcdesc)
++{
++  rtx r1 = gen_rtx_REG (Pmode, R1_REG);
++  rtx pic_reg = gen_rtx_REG (Pmode, PIC_REG);
++  rtx fnaddr = gen_rtx_MEM (Pmode, funcdesc);
++  rtx gotaddr = gen_rtx_MEM (Pmode, plus_constant (funcdesc, 4));
++
++  emit_move_insn (r1, fnaddr);
++  /* The ABI requires the entry point address to be loaded first, so
++     prevent the load from being moved after that of the GOT
++     address.  */
++  emit_insn (gen_blockage ());
++  emit_move_insn (pic_reg, gotaddr);
++  return r1;
++}
++
++/* Return an rtx holding the initial value of the FDPIC register (the
++   FDPIC pointer passed in from the caller).  */
++
++rtx
++sh_our_fdpic_reg (void)
++{
++  return get_hard_reg_initial_val (Pmode, PIC_REG);
++}
++
++/* Relocatable data for FDPIC binaries is not permitted in read-only
++   segments.  */
++
++static int
++sh_reloc_rw_mask (void)
++{
++  return (flag_pic || TARGET_FDPIC) ? 3 : 0;
++}
++
+ #include "gt-sh.h"
+--- a/src/gcc/config/sh/sh.h
++++ b/src/gcc/config/sh/sh.h
+@@ -91,6 +91,13 @@
+     builtin_define ("__SH_FPU_DOUBLE__"); \
+   if (TARGET_HITACHI) \
+     builtin_define ("__HITACHI__"); \
++  if (TARGET_FMOVD) \
++    builtin_define ("__FMOVD_ENABLED__"); \
++  if (TARGET_FDPIC) \
++    { \
++      builtin_define ("__SH_FDPIC__"); \
++      builtin_define ("__FDPIC__"); \
++    } \
+   builtin_define (TARGET_LITTLE_ENDIAN \
+ 		  ? "__LITTLE_ENDIAN__" : "__BIG_ENDIAN__"); \
+ } while (0)
+@@ -123,6 +130,12 @@
+       fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;				\
+       call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1;			\
+     }									\
++  if (TARGET_FDPIC)							\
++    {									\
++      fixed_regs[PIC_REG] = 1;						\
++      call_used_regs[PIC_REG] = 1;					\
++      call_really_used_regs[PIC_REG] = 1;				\
++    }									\
+   /* Renesas saves and restores mac registers on call.  */		\
+   if (TARGET_HITACHI && ! TARGET_NOMACSAVE)				\
+     {									\
+@@ -458,7 +471,10 @@
+ #define SH_DIV_STR_FOR_SIZE "call"
+ #endif
+ 
+-#define DRIVER_SELF_SPECS "%{m2a:%{ml:%eSH2a does not support little-endian}}"
++#define DRIVER_SELF_SPECS SUBTARGET_DRIVER_SELF_SPECS \
++  "%{m2a:%{ml:%eSH2a does not support little-endian}}"
++#define SUBTARGET_DRIVER_SELF_SPECS
++
+ #define OPTIMIZATION_OPTIONS(LEVEL,SIZE)				\
+ do {									\
+   if (LEVEL)								\
+@@ -552,11 +568,7 @@
+   if (TARGET_SH2E)							\
+     sh_cpu = CPU_SH2E;							\
+   if (TARGET_SH2A)							\
+-    {									\
+-      sh_cpu = CPU_SH2A;						\
+-      if (TARGET_SH2A_DOUBLE)						\
+-        target_flags |= MASK_FMOVD;					\
+-    }									\
++    sh_cpu = CPU_SH2A;						\
+   if (TARGET_SH3)							\
+     sh_cpu = CPU_SH3;							\
+   if (TARGET_SH3E)							\
+@@ -684,6 +696,10 @@
+     sh_branch_cost							\
+       = TARGET_SH5 ? 1 : ! TARGET_SH2 || TARGET_HARD_SH4 ? 2 : 1;	\
+ 									\
++  if (TARGET_FDPIC							\
++      && (TARGET_SHMEDIA || TARGET_SHCOMPACT || !TARGET_SH2))		\
++    sorry ("non-SH2 FDPIC");						\
++									\
+   for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)		\
+     if (! VALID_REGISTER_P (regno))					\
+       sh_register_names[regno][0] = '\0';				\
+@@ -703,7 +719,7 @@
+       flag_omit_frame_pointer = 0;					\
+    }									\
+ 									\
+-  if ((flag_pic && ! TARGET_PREFERGOT)					\
++  if (((flag_pic || TARGET_FDPIC) && ! TARGET_PREFERGOT)		\
+       || (TARGET_SHMEDIA && !TARGET_PT_FIXED))				\
+     flag_no_function_cse = 1;						\
+ 									\
+@@ -712,8 +728,9 @@
+       /* Never run scheduling before reload, since that can		\
+ 	 break global alloc, and generates slower code anyway due	\
+ 	 to the pressure on R0.  */					\
+-      /* Enable sched1 for SH4; ready queue will be reordered by	\
+-	 the target hooks when pressure is high. We can not do this for \
++      /* Enable sched1 for SH4 if the user explicitly requests.		\
++	 When sched1 is enabled, the ready queue will be reordered by	\
++	 the target hooks if pressure is high.  We can not do this for	\
+ 	 PIC, SH3 and lower as they give spill failures for R0.  */	\
+       if (!TARGET_HARD_SH4 || flag_pic)					\
+         flag_schedule_insns = 0;		 			\
+@@ -728,6 +745,8 @@
+ 	    warning (0, "ignoring -fschedule-insns because of exception handling bug");	\
+ 	  flag_schedule_insns = 0;		 			\
+ 	}								\
++      else if (flag_schedule_insns == 2)				\
++	flag_schedule_insns = 0;		 			\
+     }									\
+ 									\
+   if (align_loops == 0)							\
+@@ -1260,6 +1279,14 @@
+    code access to data items.  */
+ #define PIC_OFFSET_TABLE_REGNUM	(flag_pic ? PIC_REG : INVALID_REGNUM)
+ 
++/* For FDPIC, the FDPIC register is call-clobbered (otherwise PLT
++   entries would need to handle saving and restoring it).  */
++#define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED TARGET_FDPIC
++
++/* An rtx holding the initial value of the FDPIC register (the FDPIC
++   pointer passed in from the caller).  */
++#define OUR_FDPIC_REG		sh_our_fdpic_reg ()
++
+ #define GOT_SYMBOL_NAME "*_GLOBAL_OFFSET_TABLE_"
+ 
+ /* Value should be nonzero if functions must have frame pointers.
+@@ -2172,6 +2199,10 @@
+       || GENERAL_REGISTER_P ((unsigned) reg_renumber[(REGNO)])) \
+    : (REGNO) == R0_REG || (unsigned) reg_renumber[(REGNO)] == R0_REG)
+ 
++/* True if SYMBOL + OFFSET constants must refer to something within
++   SYMBOL's section.  */
++#define SH_OFFSETS_MUST_BE_WITHIN_SECTIONS_P 0
++
+ /* Maximum number of registers that can appear in a valid memory
+    address.  */
+ 
+@@ -2185,7 +2216,7 @@
+ /* can_store_by_pieces constructs VOIDmode CONST_DOUBLEs.  */
+ 
+ #define LEGITIMATE_CONSTANT_P(X) \
+-  (TARGET_SHMEDIA							\
++  ((TARGET_SHMEDIA							\
+    ? ((GET_MODE (X) != DFmode						\
+        && GET_MODE_CLASS (GET_MODE (X)) != MODE_VECTOR_FLOAT)		\
+       || (X) == CONST0_RTX (GET_MODE (X))				\
+@@ -2193,7 +2224,8 @@
+       || TARGET_SHMEDIA64)						\
+    : (GET_CODE (X) != CONST_DOUBLE					\
+       || GET_MODE (X) == DFmode || GET_MODE (X) == SFmode		\
+-      || GET_MODE (X) == DImode || GET_MODE (X) == VOIDmode))
++      || GET_MODE (X) == DImode || GET_MODE (X) == VOIDmode))		\
++   && !sh_illegitimate_symbolic_constant_p (X))
+ 
+ /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
+    and check its validity for a certain class.
+@@ -3132,6 +3164,14 @@
+ 	    output_addr_const (STREAM, XVECEXP (X, 0, 1));		\
+ 	    fputs ("-.)", STREAM);					\
+ 	    break;							\
++	  case UNSPEC_GOTFUNCDESC:					\
++	    output_addr_const ((STREAM), XVECEXP ((X), 0, 0));		\
++	    fputs ("@GOTFUNCDESC", (STREAM));				\
++	    break;							\
++	  case UNSPEC_GOTOFFFUNCDESC:					\
++	    output_addr_const ((STREAM), XVECEXP ((X), 0, 0));		\
++	    fputs ("@GOTOFFFUNCDESC", (STREAM));			\
++	    break;							\
+ 	  default:							\
+ 	    goto FAIL;							\
+ 	  }								\
+@@ -3279,12 +3319,20 @@
+ #define EH_RETURN_STACKADJ_REGNO STATIC_CHAIN_REGNUM
+ #define EH_RETURN_STACKADJ_RTX	gen_rtx_REG (Pmode, EH_RETURN_STACKADJ_REGNO)
+ 
++#ifdef __SH_FDPIC__
++#define CRT_GET_RFIB_DATA(dbase) \
++  ({ register int r12 __asm__("r12"); (dbase) = r12; })
++#endif
++
+ /* We have to distinguish between code and data, so that we apply
+    datalabel where and only where appropriate.  Use sdataN for data.  */
+ #define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
+- ((flag_pic && (GLOBAL) ? DW_EH_PE_indirect : 0) \
+-  | (flag_pic ? DW_EH_PE_pcrel : DW_EH_PE_absptr) \
+-  | ((CODE) ? 0 : (TARGET_SHMEDIA64 ? DW_EH_PE_sdata8 : DW_EH_PE_sdata4)))
++  ((TARGET_FDPIC \
++    ? ((GLOBAL) ? DW_EH_PE_indirect | DW_EH_PE_datarel \
++       : DW_EH_PE_pcrel) \
++    : ((flag_pic && (GLOBAL) ? DW_EH_PE_indirect : 0) \
++       | (flag_pic ? DW_EH_PE_pcrel : DW_EH_PE_absptr))) \
++   | ((CODE) ? 0 : (TARGET_SHMEDIA64 ? DW_EH_PE_sdata8 : DW_EH_PE_sdata4)))
+ 
+ /* Handle special EH pointer encodings.  Absolute, pc-relative, and
+    indirect are handled automatically.  */
+@@ -3297,6 +3345,17 @@
+ 	SYMBOL_REF_FLAGS (ADDR) |= SYMBOL_FLAG_FUNCTION; \
+ 	if (0) goto DONE; \
+       } \
++    if (TARGET_FDPIC \
++        && ((ENCODING) & 0xf0) == (DW_EH_PE_indirect | DW_EH_PE_datarel)) \
++      { \
++        fputs ("\t.ualong ", FILE); \
++        output_addr_const (FILE, ADDR); \
++        if (GET_CODE (ADDR) == SYMBOL_REF && SYMBOL_REF_FUNCTION_P (ADDR)) \
++          fputs ("@GOTFUNCDESC", FILE); \
++        else \
++          fputs ("@GOT", FILE); \
++        goto DONE; \
++      } \
+   } while (0)
+ 
+ #if (defined CRT_BEGIN || defined CRT_END) && ! __SHMEDIA__
+--- a/src/gcc/config/sh/sh.md
++++ b/src/gcc/config/sh/sh.md
+@@ -164,6 +164,9 @@
+   ;; (unspec [OFFSET ANCHOR] UNSPEC_PCREL_SYMOFF) == OFFSET - (ANCHOR - .).
+   (UNSPEC_PCREL_SYMOFF	46)
+ 
++  (UNSPEC_GOTFUNCDESC	50)
++  (UNSPEC_GOTOFFFUNCDESC	51)
++
+   ;; These are used with unspec_volatile.
+   (UNSPECV_BLOCKAGE	0)
+   (UNSPECV_ALIGN	1)
+@@ -1751,14 +1754,17 @@
+ ;; If we let reload allocate r0, then this problem can never happen.
+ 
+ (define_insn "udivsi3_i1"
+-  [(set (match_operand:SI 0 "register_operand" "=z")
++  [(set (match_operand:SI 0 "register_operand" "=z,z")
+ 	(udiv:SI (reg:SI R4_REG) (reg:SI R5_REG)))
+    (clobber (reg:SI T_REG))
+    (clobber (reg:SI PR_REG))
+    (clobber (reg:SI R4_REG))
+-   (use (match_operand:SI 1 "arith_reg_operand" "r"))]
++   (use (match_operand:SI 1 "arith_reg_operand" "r,r"))
++   (use (match_operand 2 "" "Z,Ccl"))]
+   "TARGET_SH1 && ! TARGET_SH4"
+-  "jsr	@%1%#"
++  "@
++   jsr	@%1%#
++   bsrf	%1\\n%O2:%#"
+   [(set_attr "type" "sfunc")
+    (set_attr "needs_delay_slot" "yes")])
+ 
+@@ -1808,7 +1814,7 @@
+ }")
+ 
+ (define_insn "udivsi3_i4"
+-  [(set (match_operand:SI 0 "register_operand" "=y")
++  [(set (match_operand:SI 0 "register_operand" "=y,y")
+ 	(udiv:SI (reg:SI R4_REG) (reg:SI R5_REG)))
+    (clobber (reg:SI T_REG))
+    (clobber (reg:SI PR_REG))
+@@ -1820,15 +1826,18 @@
+    (clobber (reg:SI R4_REG))
+    (clobber (reg:SI R5_REG))
+    (use (reg:PSI FPSCR_REG))
+-   (use (match_operand:SI 1 "arith_reg_operand" "r"))]
++   (use (match_operand:SI 1 "arith_reg_operand" "r,r"))
++   (use (match_operand 2 "" "Z,Ccl"))]
+   "TARGET_SH4 && ! TARGET_FPU_SINGLE"
+-  "jsr	@%1%#"
++  "@
++   jsr	@%1%#
++   bsrf	%1\\n%O2:%#"
+   [(set_attr "type" "sfunc")
+    (set_attr "fp_mode" "double")
+    (set_attr "needs_delay_slot" "yes")])
+ 
+ (define_insn "udivsi3_i4_single"
+-  [(set (match_operand:SI 0 "register_operand" "=y")
++  [(set (match_operand:SI 0 "register_operand" "=y,y")
+ 	(udiv:SI (reg:SI R4_REG) (reg:SI R5_REG)))
+    (clobber (reg:SI T_REG))
+    (clobber (reg:SI PR_REG))
+@@ -1839,9 +1848,12 @@
+    (clobber (reg:SI R1_REG))
+    (clobber (reg:SI R4_REG))
+    (clobber (reg:SI R5_REG))
+-   (use (match_operand:SI 1 "arith_reg_operand" "r"))]
++   (use (match_operand:SI 1 "arith_reg_operand" "r,r"))
++   (use (match_operand 2 "" "Z,Ccl"))]
+   "(TARGET_HARD_SH4 || TARGET_SHCOMPACT) && TARGET_FPU_SINGLE"
+-  "jsr	@%1%#"
++  "@
++   jsr	@%1%#
++   bsrf	%1\\n%O2:%#"
+   [(set_attr "type" "sfunc")
+    (set_attr "needs_delay_slot" "yes")])
+ 
+@@ -1895,16 +1907,17 @@
+ 	  emit_move_insn (operands[0], operands[2]);
+ 	  DONE;
+ 	}
+-      function_symbol (operands[3], \"__udivsi3_i4i\", SFUNC_GOT);
++      function_symbol (operands[3], \"__udivsi3_i4i\", SFUNC_GOT, NULL);
+       last = gen_udivsi3_i4_int (operands[0], operands[3]);
+     }
+   else if (TARGET_DIVIDE_CALL_FP)
+     {
+-      function_symbol (operands[3], \"__udivsi3_i4\", SFUNC_STATIC);
++      rtx lab;
++      function_symbol (operands[3], \"__udivsi3_i4\", SFUNC_STATIC, &lab);
+       if (TARGET_FPU_SINGLE)
+-	last = gen_udivsi3_i4_single (operands[0], operands[3]);
++	last = gen_udivsi3_i4_single (operands[0], operands[3], lab);
+       else
+-	last = gen_udivsi3_i4 (operands[0], operands[3]);
++	last = gen_udivsi3_i4 (operands[0], operands[3], lab);
+     }
+   else if (TARGET_SHMEDIA_FPU)
+     {
+@@ -1924,19 +1937,20 @@
+     {
+       function_symbol (operands[3],
+ 		       TARGET_FPU_ANY ? \"__udivsi3_i4\" : \"__udivsi3\",
+-		       SFUNC_STATIC);
++		       SFUNC_STATIC, NULL);
+ 
+       if (TARGET_SHMEDIA)
+ 	last = gen_udivsi3_i1_media (operands[0], operands[3]);
+       else if (TARGET_FPU_ANY)
+-	last = gen_udivsi3_i4_single (operands[0], operands[3]);
++	last = gen_udivsi3_i4_single (operands[0], operands[3], const0_rtx);
+       else
+-	last = gen_udivsi3_i1 (operands[0], operands[3]);
++	last = gen_udivsi3_i1 (operands[0], operands[3], const0_rtx);
+     }
+   else
+     {
+-      function_symbol (operands[3], \"__udivsi3\", SFUNC_STATIC);
+-      last = gen_udivsi3_i1 (operands[0], operands[3]);
++      rtx lab;
++      function_symbol (operands[3], \"__udivsi3\", SFUNC_STATIC, &lab);
++      last = gen_udivsi3_i1 (operands[0], operands[3], lab);
+     }
+   emit_move_insn (gen_rtx_REG (SImode, 4), operands[1]);
+   emit_move_insn (gen_rtx_REG (SImode, 5), operands[2]);
+@@ -2065,7 +2079,7 @@
+       emit_move_insn (gen_rtx_REG (DImode, R20_REG), x);
+       break;
+     }
+-  sym = function_symbol (NULL, name, kind);
++  sym = function_symbol (NULL, name, kind, NULL);
+   emit_insn (gen_divsi3_media_2 (operands[0], sym));
+   DONE;
+ }"
+@@ -2086,29 +2100,35 @@
+ }")
+ 
+ (define_insn "divsi3_i4"
+-  [(set (match_operand:SI 0 "register_operand" "=y")
++  [(set (match_operand:SI 0 "register_operand" "=y,y")
+ 	(div:SI (reg:SI R4_REG) (reg:SI R5_REG)))
+    (clobber (reg:SI PR_REG))
+    (clobber (reg:DF DR0_REG))
+    (clobber (reg:DF DR2_REG))
+    (use (reg:PSI FPSCR_REG))
+-   (use (match_operand:SI 1 "arith_reg_operand" "r"))]
++   (use (match_operand:SI 1 "arith_reg_operand" "r,r"))
++   (use (match_operand 2 "" "Z,Ccl"))]
+   "TARGET_SH4 && ! TARGET_FPU_SINGLE"
+-  "jsr	@%1%#"
++  "@
++   jsr	@%1%#
++   bsrf	%1\\n%O2:%#"
+   [(set_attr "type" "sfunc")
+    (set_attr "fp_mode" "double")
+    (set_attr "needs_delay_slot" "yes")])
+ 
+ (define_insn "divsi3_i4_single"
+-  [(set (match_operand:SI 0 "register_operand" "=y")
++  [(set (match_operand:SI 0 "register_operand" "=y,y")
+ 	(div:SI (reg:SI R4_REG) (reg:SI R5_REG)))
+    (clobber (reg:SI PR_REG))
+    (clobber (reg:DF DR0_REG))
+    (clobber (reg:DF DR2_REG))
+    (clobber (reg:SI R2_REG))
+-   (use (match_operand:SI 1 "arith_reg_operand" "r"))]
++   (use (match_operand:SI 1 "arith_reg_operand" "r,r"))
++   (use (match_operand 2 "" "Z,Ccl"))]
+   "(TARGET_HARD_SH4 || TARGET_SHCOMPACT) && TARGET_FPU_SINGLE"
+-  "jsr	@%1%#"
++  "@
++   jsr	@%1%#
++   bsrf	%1\\n%O2:%#"
+   [(set_attr "type" "sfunc")
+    (set_attr "needs_delay_slot" "yes")])
+ 
+@@ -2148,16 +2168,17 @@
+   /* Emit the move of the address to a pseudo outside of the libcall.  */
+   if (TARGET_DIVIDE_CALL_TABLE)
+     {
+-      function_symbol (operands[3], sh_divsi3_libfunc, SFUNC_GOT);
++      function_symbol (operands[3], sh_divsi3_libfunc, SFUNC_GOT, NULL);
+       last = gen_divsi3_i4_int (operands[0], operands[3]);
+     }
+   else if (TARGET_DIVIDE_CALL_FP)
+     {
+-      function_symbol (operands[3], sh_divsi3_libfunc, SFUNC_STATIC);
++      rtx lab;
++      function_symbol (operands[3], sh_divsi3_libfunc, SFUNC_STATIC, &lab);
+       if (TARGET_FPU_SINGLE)
+-	last = gen_divsi3_i4_single (operands[0], operands[3]);
++	last = gen_divsi3_i4_single (operands[0], operands[3], lab);
+       else
+-	last = gen_divsi3_i4 (operands[0], operands[3]);
++	last = gen_divsi3_i4 (operands[0], operands[3], lab);
+     }
+   else if (TARGET_SH2A)
+     {
+@@ -2262,23 +2283,23 @@
+ 	  emit_move_insn (gen_rtx_REG (Pmode, R20_REG), tab_base);
+ 	}
+       if (TARGET_FPU_ANY && TARGET_SH1)
+-	function_symbol (operands[3], sh_divsi3_libfunc, SFUNC_STATIC);
++	function_symbol (operands[3], sh_divsi3_libfunc, SFUNC_STATIC, NULL);
+       else if (TARGET_DIVIDE_CALL2)
+-	function_symbol (operands[3], \"__sdivsi3_2\", SFUNC_STATIC);
++	function_symbol (operands[3], \"__sdivsi3_2\", SFUNC_STATIC, NULL);
+       else
+-	function_symbol (operands[3], sh_divsi3_libfunc, SFUNC_GOT);
++	function_symbol (operands[3], sh_divsi3_libfunc, SFUNC_GOT, NULL);
+ 
+       if (TARGET_SHMEDIA)
+ 	last = ((TARGET_DIVIDE_CALL2 ? gen_divsi3_media_2 : gen_divsi3_i1_media)
+ 		(operands[0], operands[3]));
+       else if (TARGET_FPU_ANY)
+-	last = gen_divsi3_i4_single (operands[0], operands[3]);
++	last = gen_divsi3_i4_single (operands[0], operands[3], const0_rtx);
+       else
+ 	last = gen_divsi3_i1 (operands[0], operands[3]);
+     }
+   else
+     {
+-      function_symbol (operands[3], sh_divsi3_libfunc, SFUNC_GOT);
++      function_symbol (operands[3], sh_divsi3_libfunc, SFUNC_GOT, NULL);
+       last = gen_divsi3_i1 (operands[0], operands[3]);
+     }
+   emit_move_insn (gen_rtx_REG (SImode, 4), operands[1]);
+@@ -2870,7 +2891,7 @@
+     {
+       /* The address must be set outside the libcall,
+ 	 since it goes into a pseudo.  */
+-      rtx sym = function_symbol (NULL, \"__mulsi3\", SFUNC_STATIC);
++      rtx sym = function_symbol (NULL, \"__mulsi3\", SFUNC_STATIC, NULL);
+       rtx addr = force_reg (SImode, sym);
+       rtx insns = gen_mulsi3_call (operands[0], operands[1],
+ 				   operands[2], addr);
+@@ -3841,12 +3862,15 @@
+ (define_insn "ashrsi3_n"
+   [(set (reg:SI R4_REG)
+ 	(ashiftrt:SI (reg:SI R4_REG)
+-		     (match_operand:SI 0 "const_int_operand" "i")))
++		     (match_operand:SI 0 "const_int_operand" "i,i")))
+    (clobber (reg:SI T_REG))
+    (clobber (reg:SI PR_REG))
+-   (use (match_operand:SI 1 "arith_reg_operand" "r"))]
++   (use (match_operand:SI 1 "arith_reg_operand" "r,r"))
++   (use (match_operand 2 "" "Z,Ccl"))]
+   "TARGET_SH1"
+-  "jsr	@%1%#"
++  "@
++   jsr	@%1%#
++   bsrf	%1\\n%O2:%#"
+   [(set_attr "type" "sfunc")
+    (set_attr "needs_delay_slot" "yes")])
+ 
+@@ -5265,7 +5289,8 @@
+     }
+   else if (TARGET_SHCOMPACT)
+     {
+-      operands[1] = function_symbol (NULL, \"__ic_invalidate\", SFUNC_STATIC);
++      operands[1] = function_symbol (NULL, \"__ic_invalidate\", SFUNC_STATIC,
++				     NULL);
+       operands[1] = force_reg (Pmode, operands[1]);
+       emit_insn (gen_ic_invalidate_line_compact (operands[0], operands[1]));
+       DONE;
+@@ -5334,7 +5359,7 @@
+ 
+   tramp = force_reg (Pmode, operands[0]);
+   sfun = force_reg (Pmode, function_symbol (NULL, \"__init_trampoline\",
+-					    SFUNC_STATIC));
++					    SFUNC_STATIC, NULL));
+   emit_move_insn (gen_rtx_REG (SImode, R2_REG), operands[1]);
+   emit_move_insn (gen_rtx_REG (SImode, R3_REG), operands[2]);
+ 
+@@ -5929,25 +5954,31 @@
+ ;; up pcloads, so we need usable length information for that.
+ (define_insn "movdf_i4"
+   [(set (match_operand:DF 0 "general_movdst_operand" "=d,r,d,d,m,r,r,m,!??r,!???d")
+-	(match_operand:DF 1 "general_movsrc_operand" "d,r,F,m,d,FQ,m,r,d,r"))
+-   (use (match_operand:PSI 2 "fpscr_operand" "c,c,c,c,c,c,c,c,c,c"))
+-   (clobber (match_scratch:SI 3 "=X,X,&z,X,X,X,X,X,X,X"))]
++	(match_operand:DF 1 "general_movsrc_operand"  "d,r,F,m,d,FQ,m,r,d,r"))
++   (use (match_operand:PSI 2 "fpscr_operand"          "c,c,c,c,c,c,c,c,c,c"))
++   (clobber (match_scratch:SI 3                      "=X,X,&z,X,X,X,X,X,X,X"))]
+   "(TARGET_SH4 || TARGET_SH2A_DOUBLE)
+    && (arith_reg_operand (operands[0], DFmode)
+        || arith_reg_operand (operands[1], DFmode))"
+-  "@
+-	fmov	%1,%0
+-	#
+-	#
+-	fmov.d	%1,%0
+-	fmov.d	%1,%0
+-	#
+-	#
+-	#
+-	#
+-	#"
++  {
++    switch (which_alternative)
++    {
++    case 0:
++      if (TARGET_FMOVD)
++	return "fmov	%1,%0";
++      else if (REGNO (operands[0]) != REGNO (operands[1]) + 1)
++	return "fmov	%R1,%R0\n\tfmov	%S1,%S0";
++      else
++	return "fmov	%S1,%S0\n\tfmov	%R1,%R0";
++    case 3:
++    case 4:
++      return "fmov.d	%1,%0";
++    default:
++      return "#";
++    }
++  }
+   [(set_attr_alternative "length"
+-     [(if_then_else (eq_attr "fmovd" "yes") (const_int 2) (const_int 4))
++     [(if_then_else (eq_attr "fmovd" "yes") (const_int 4) (const_int 8))
+       (const_int 4)
+       (if_then_else (eq_attr "fmovd" "yes") (const_int 4) (const_int 6))
+       (if_then_else (eq_attr "fmovd" "yes") (const_int 4) (const_int 6))
+@@ -6181,37 +6212,63 @@
+   "(TARGET_SH4 || TARGET_SH2A_DOUBLE) && ! TARGET_FMOVD && reload_completed
+    && FP_OR_XD_REGISTER_P (true_regnum (operands[0]))"
+   [(const_int 0)]
+-  "
+ {
+   int regno = true_regnum (operands[0]);
+-  rtx addr, insn, adjust = NULL_RTX;
++  rtx addr, insn;
+   rtx mem2 = change_address (operands[1], SFmode, NULL_RTX);
+-  rtx reg0 = gen_rtx_REG (SFmode, regno + !! TARGET_LITTLE_ENDIAN);
+-  rtx reg1 = gen_rtx_REG (SFmode, regno + ! TARGET_LITTLE_ENDIAN);
++  rtx reg0 = gen_rtx_REG (SFmode, regno + (TARGET_LITTLE_ENDIAN ? 1 : 0));
++  rtx reg1 = gen_rtx_REG (SFmode, regno + (TARGET_LITTLE_ENDIAN ? 0 : 1));
+ 
+   operands[1] = copy_rtx (mem2);
+   addr = XEXP (mem2, 0);
+-  if (GET_CODE (addr) != POST_INC)
++
++  switch (GET_CODE (addr))
+     {
+-      /* If we have to modify the stack pointer, the value that we have
+-	 read with post-increment might be modified by an interrupt,
+-	 so write it back.  */
+-      if (REGNO (addr) == STACK_POINTER_REGNUM)
+-	adjust = gen_push_e (reg0);
+-      else
+-	adjust = gen_addsi3 (addr, addr, GEN_INT (-4));
+-      XEXP (mem2, 0) = addr = gen_rtx_POST_INC (SImode, addr);
++    case REG:
++      /* This is complicated.  If the register is an arithmetic register
++         we can just fall through to the REG+DISP case below.  Otherwise
++	 we have to use a combination of POST_INC and REG addressing...  */
++      if (! arith_reg_operand (operands[1], SFmode))
++        {
++          XEXP (mem2, 0) = addr = gen_rtx_POST_INC (SImode, addr);
++          insn = emit_insn (gen_movsf_ie (reg0, mem2, operands[2]));
++          add_reg_note (insn, REG_INC, XEXP (addr, 0));
++	  
++	  emit_insn (gen_movsf_ie (reg1, operands[1], operands[2]));
++
++          /* If we have modified the stack pointer, the value that we have
++  	     read with post-increment might be modified by an interrupt,
++	     so write it back.  */
++          if (REGNO (addr) == STACK_POINTER_REGNUM)
++	    emit_insn (gen_push_e (reg0));
++          else
++	    emit_insn (gen_addsi3 (XEXP (operands[1], 0), XEXP (operands[1], 0), GEN_INT (-4)));
++	  break;
++        }
++      /* Fall through.  */
++	 
++    case PLUS:
++      emit_insn (gen_movsf_ie (reg0, operands[1], operands[2]));
++      operands[1] = copy_rtx (operands[1]);
++      XEXP (operands[1], 0) = plus_constant (addr, 4);
++      emit_insn (gen_movsf_ie (reg1, operands[1], operands[2]));
++      break;
++      
++    case POST_INC:
++      insn = emit_insn (gen_movsf_ie (reg0, operands[1], operands[2]));
++      add_reg_note (insn, REG_INC, XEXP (addr, 0));
++    
++      insn = emit_insn (gen_movsf_ie (reg1, operands[1], operands[2]));
++      add_reg_note (insn, REG_INC, XEXP (addr, 0));
++      break;
++
++    default:
++      debug_rtx (addr);
++      gcc_unreachable ();
+     }
+-  addr = XEXP (addr, 0);
+-  insn = emit_insn (gen_movsf_ie (reg0, mem2, operands[2]));
+-  REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_INC, addr, NULL_RTX);
+-  insn = emit_insn (gen_movsf_ie (reg1, operands[1], operands[2]));
+-  if (adjust)
+-    emit_insn (adjust);
+-  else
+-    REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_INC, addr, NULL_RTX);
++
+   DONE;
+-}")
++})
+ 
+ (define_split
+   [(set (match_operand:DF 0 "memory_operand" "")
+@@ -6221,35 +6278,70 @@
+   "(TARGET_SH4 || TARGET_SH2A_DOUBLE) && ! TARGET_FMOVD && reload_completed
+    && FP_OR_XD_REGISTER_P (true_regnum (operands[1]))"
+   [(const_int 0)]
+-  "
+ {
+   int regno = true_regnum (operands[1]);
+-  rtx insn, addr, adjust = NULL_RTX;
++  rtx insn, addr;
++  rtx reg0 = gen_rtx_REG (SFmode, regno + (TARGET_LITTLE_ENDIAN ? 1 : 0));
++  rtx reg1 = gen_rtx_REG (SFmode, regno + (TARGET_LITTLE_ENDIAN ? 0 : 1));
+ 
+   operands[0] = copy_rtx (operands[0]);
+   PUT_MODE (operands[0], SFmode);
+-  insn = emit_insn (gen_movsf_ie (operands[0],
+-				  gen_rtx_REG (SFmode,
+-					   regno + ! TARGET_LITTLE_ENDIAN),
+-				  operands[2]));
+-  operands[0] = copy_rtx (operands[0]);
+   addr = XEXP (operands[0], 0);
+-  if (GET_CODE (addr) != PRE_DEC)
++
++  switch (GET_CODE (addr))
+     {
+-      adjust = gen_addsi3 (addr, addr, GEN_INT (4));
+-      emit_insn_before (adjust, insn);
+-      XEXP (operands[0], 0) = addr = gen_rtx_PRE_DEC (SImode, addr);
+-    }
+-  addr = XEXP (addr, 0);
+-  if (! adjust)
+-    REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_INC, addr, NULL_RTX);
+-  insn = emit_insn (gen_movsf_ie (operands[0],
+-				  gen_rtx_REG (SFmode,
+-					   regno + !! TARGET_LITTLE_ENDIAN),
+-				  operands[2]));
+-  REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_INC, addr, NULL_RTX);
++    case REG:
++      /* This is complicated.  If the register is an arithmetic register
++         we can just fall through to the REG+DISP case below.  Otherwise
++	 we have to use a combination of REG and PRE_DEC addressing...  */
++      if (! arith_reg_operand (operands[0], SFmode))
++        {
++	  emit_insn (gen_addsi3 (addr, addr, GEN_INT (4)));
++          emit_insn (gen_movsf_ie (operands[0], reg1, operands[2]));
++
++	  operands[0] = copy_rtx (operands[0]);
++          XEXP (operands[0], 0) = addr = gen_rtx_PRE_DEC (SImode, addr);
++	  
++          insn = emit_insn (gen_movsf_ie (operands[0], reg0, operands[2]));
++          add_reg_note (insn, REG_INC, XEXP (addr, 0));
++	  break;
++        }
++      /* Fall through.  */
++      
++    case PLUS:
++      /* Since REG+DISP addressing has already been decided upon by gcc
++         we can rely upon it having chosen an arithmetic register as the
++	 register component of the address.  Just emit the lower numbered
++	 register first, to the lower address, then the higher numbered
++	 register to the higher address.  */
++      emit_insn (gen_movsf_ie (operands[0], reg0, operands[2]));
++
++      operands[0] = copy_rtx (operands[0]);
++      XEXP (operands[0], 0) = plus_constant (addr, 4);
++
++      emit_insn (gen_movsf_ie (operands[0], reg1, operands[2]));	 
++      break;
++      
++    case PRE_DEC:
++      /* This is easy.  Output the word to go to the higher address
++         first (ie the word in the higher numbered register) then the
++	 word to go to the lower address.  */
++
++      insn = emit_insn (gen_movsf_ie (operands[0], reg1, operands[2]));
++      add_reg_note (insn, REG_INC, XEXP (addr, 0));
++
++      insn = emit_insn (gen_movsf_ie (operands[0], reg0, operands[2]));
++      add_reg_note (insn, REG_INC, XEXP (addr, 0));
++      break;
++      
++    default:
++      /* FAIL; */
++      debug_rtx (addr);
++      gcc_unreachable ();
++    }
++
+   DONE;
+-}")
++})
+ 
+ ;; If the output is a register and the input is memory or a register, we have
+ ;; to be careful and see which word needs to be loaded first.
+@@ -6711,7 +6803,7 @@
+       (const_int 0)])
+    (set (attr "fp_mode") (if_then_else (eq_attr "fmovd" "yes")
+ 					   (const_string "single")
+-					   (const_string "none")))])
++					   (const_string "single")))])
+ 
+ (define_split
+   [(set (match_operand:SF 0 "register_operand" "")
+@@ -7524,7 +7616,29 @@
+ 	 (match_operand 1 "" ""))
+    (use (reg:PSI FPSCR_REG))
+    (clobber (reg:SI PR_REG))]
+-  "TARGET_SH1"
++  "TARGET_SH1 && !TARGET_FDPIC"
++  "*
++   {
++     if (TARGET_SH2A && (dbr_sequence_length () == 0))
++	return \"jsr/n\\t@%0\";
++     else
++	return \"jsr\\t@%0%#\";
++   }"
++
++  [(set_attr "type" "call")
++   (set (attr "fp_mode")
++	(if_then_else (eq_attr "fpu_single" "yes")
++		      (const_string "single") (const_string "double")))
++   (set_attr "needs_delay_slot" "yes")
++   (set_attr "fp_set" "unknown")])
++
++(define_insn "calli_fdpic"
++  [(call (mem:SI (match_operand:SI 0 "arith_reg_operand" "r"))
++	 (match_operand 1 "" ""))
++   (use (reg:PSI FPSCR_REG))
++   (use (reg:SI PIC_REG))
++   (clobber (reg:SI PR_REG))]
++  "TARGET_SH1 && TARGET_FDPIC"
+   "*
+    {
+      if (TARGET_SH2A && (dbr_sequence_length () == 0))
+@@ -7659,7 +7773,29 @@
+ 	      (match_operand 2 "" "")))
+    (use (reg:PSI FPSCR_REG))
+    (clobber (reg:SI PR_REG))]
+-  "TARGET_SH1"
++  "TARGET_SH1 && !TARGET_FDPIC"
++  "*
++   {
++     if (TARGET_SH2A && (dbr_sequence_length () == 0))
++	return \"jsr/n\\t@%1\";
++     else
++	return \"jsr\\t@%1%#\";
++   }"
++  [(set_attr "type" "call")
++   (set (attr "fp_mode")
++	(if_then_else (eq_attr "fpu_single" "yes")
++		      (const_string "single") (const_string "double")))
++   (set_attr "needs_delay_slot" "yes")
++   (set_attr "fp_set" "unknown")])
++
++(define_insn "call_valuei_fdpic"
++  [(set (match_operand 0 "" "=rf")
++	(call (mem:SI (match_operand:SI 1 "arith_reg_operand" "r"))
++	      (match_operand 2 "" "")))
++   (use (reg:PSI FPSCR_REG))
++   (use (reg:SI PIC_REG))
++   (clobber (reg:SI PR_REG))]
++  "TARGET_SH1 && TARGET_FDPIC"
+   "*
+    {
+      if (TARGET_SH2A && (dbr_sequence_length () == 0))
+@@ -7801,6 +7937,12 @@
+   ""
+   "
+ {
++  if (TARGET_FDPIC)
++    {
++      rtx pic_reg = gen_rtx_REG (Pmode, PIC_REG);
++      emit_move_insn (pic_reg, OUR_FDPIC_REG);
++    }
++
+   if (TARGET_SHMEDIA)
+     {
+       operands[0] = shmedia_prepare_call_address (operands[0], 0);
+@@ -7837,7 +7979,7 @@
+ 
+       operands[0]
+ 	= function_symbol (NULL, \"__GCC_shcompact_call_trampoline\",
+-			   SFUNC_GOT);
++			   SFUNC_GOT, NULL);
+       operands[0] = force_reg (SImode, operands[0]);
+ 
+       emit_move_insn (r0, func);
+@@ -7861,7 +8003,7 @@
+       emit_insn (gen_symGOTPLT2reg (reg, XEXP (operands[0], 0)));
+       XEXP (operands[0], 0) = reg;
+     }
+-  if (!flag_pic && TARGET_SH2A
++  if (!flag_pic && !TARGET_FDPIC && TARGET_SH2A
+       && GET_CODE (operands[0]) == MEM
+       && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
+     {
+@@ -7872,7 +8014,7 @@
+ 	  DONE;
+ 	}
+     }
+-  if (flag_pic && TARGET_SH2
++  if ((flag_pic || TARGET_FDPIC) && TARGET_SH2
+       && GET_CODE (operands[0]) == MEM
+       && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
+     {
+@@ -7885,7 +8027,13 @@
+     operands[1] = operands[2];
+   }
+ 
+-  emit_call_insn (gen_calli (operands[0], operands[1]));
++  if (TARGET_FDPIC)
++    {
++      operands[0] = sh_load_function_descriptor (operands[0]);
++      emit_call_insn (gen_calli_fdpic (operands[0], operands[1]));
++    }
++  else
++    emit_call_insn (gen_calli (operands[0], operands[1]));
+   DONE;
+ }")
+ 
+@@ -7966,7 +8114,7 @@
+   emit_insn (gen_force_mode_for_call ());
+ 
+   operands[0] = function_symbol (NULL, \"__GCC_shcompact_call_trampoline\",
+-				 SFUNC_GOT);
++				 SFUNC_GOT, NULL);
+   operands[0] = force_reg (SImode, operands[0]);
+ 
+   emit_move_insn (r0, func);
+@@ -7992,6 +8140,12 @@
+   ""
+   "
+ {
++  if (TARGET_FDPIC)
++    {
++      rtx pic_reg = gen_rtx_REG (Pmode, PIC_REG);
++      emit_move_insn (pic_reg, OUR_FDPIC_REG);
++    }
++
+   if (TARGET_SHMEDIA)
+     {
+       operands[1] = shmedia_prepare_call_address (operands[1], 0);
+@@ -8029,7 +8183,7 @@
+ 
+       operands[1]
+ 	= function_symbol (NULL, \"__GCC_shcompact_call_trampoline\",
+-			   SFUNC_GOT);
++			   SFUNC_GOT, NULL);
+       operands[1] = force_reg (SImode, operands[1]);
+ 
+       emit_move_insn (r0, func);
+@@ -8055,7 +8209,7 @@
+       emit_insn (gen_symGOTPLT2reg (reg, XEXP (operands[1], 0)));
+       XEXP (operands[1], 0) = reg;
+     }
+-  if (!flag_pic && TARGET_SH2A
++  if (!flag_pic && !TARGET_FDPIC && TARGET_SH2A
+       && GET_CODE (operands[1]) == MEM
+       && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
+     {
+@@ -8066,7 +8220,7 @@
+ 	  DONE;
+ 	}
+     }
+-  if (flag_pic && TARGET_SH2
++  if ((flag_pic || TARGET_FDPIC) && TARGET_SH2
+       && GET_CODE (operands[1]) == MEM
+       && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
+     {
+@@ -8077,7 +8231,14 @@
+   else
+     operands[1] = force_reg (SImode, XEXP (operands[1], 0));
+ 
+-  emit_call_insn (gen_call_valuei (operands[0], operands[1], operands[2]));
++  if (TARGET_FDPIC)
++    {
++      operands[1] = sh_load_function_descriptor (operands[1]);
++      emit_call_insn (gen_call_valuei_fdpic (operands[0], operands[1],
++					     operands[2]));
++    }
++  else
++    emit_call_insn (gen_call_valuei (operands[0], operands[1], operands[2]));
+   DONE;
+ }")
+ 
+@@ -8086,7 +8247,21 @@
+ 	 (match_operand 1 "" ""))
+    (use (reg:PSI FPSCR_REG))
+    (return)]
+-  "TARGET_SH1"
++  "TARGET_SH1 && !TARGET_FDPIC"
++  "jmp	@%0%#"
++  [(set_attr "needs_delay_slot" "yes")
++   (set (attr "fp_mode")
++	(if_then_else (eq_attr "fpu_single" "yes")
++		      (const_string "single") (const_string "double")))
++   (set_attr "type" "jump_ind")])
++
++(define_insn "sibcalli_fdpic"
++  [(call (mem:SI (match_operand:SI 0 "register_operand" "k"))
++	 (match_operand 1 "" ""))
++   (use (reg:PSI FPSCR_REG))
++   (use (reg:SI PIC_REG))
++   (return)]
++  "TARGET_SH1 && TARGET_FDPIC"
+   "jmp	@%0%#"
+   [(set_attr "needs_delay_slot" "yes")
+    (set (attr "fp_mode")
+@@ -8100,7 +8275,22 @@
+    (use (match_operand 2 "" ""))
+    (use (reg:PSI FPSCR_REG))
+    (return)]
+-  "TARGET_SH2"
++  "TARGET_SH2 && !TARGET_FDPIC"
++  "braf	%0\\n%O2:%#"
++  [(set_attr "needs_delay_slot" "yes")
++   (set (attr "fp_mode")
++	(if_then_else (eq_attr "fpu_single" "yes")
++		      (const_string "single") (const_string "double")))
++   (set_attr "type" "jump_ind")])
++
++(define_insn "sibcalli_pcrel_fdpic"
++  [(call (mem:SI (match_operand:SI 0 "arith_reg_operand" "k"))
++	 (match_operand 1 "" ""))
++   (use (match_operand 2 "" ""))
++   (use (reg:PSI FPSCR_REG))
++   (use (reg:SI PIC_REG))
++   (return)]
++  "TARGET_SH2 && TARGET_FDPIC"
+   "braf	%0\\n%O2:%#"
+   [(set_attr "needs_delay_slot" "yes")
+    (set (attr "fp_mode")
+@@ -8130,7 +8320,7 @@
+    (use (reg:PSI FPSCR_REG))
+    (clobber (match_scratch:SI 2 "=k"))
+    (return)]
+-  "TARGET_SH2"
++  "TARGET_SH2 && !TARGET_FDPIC"
+   "#"
+   "reload_completed"
+   [(const_int 0)]
+@@ -8151,6 +8341,34 @@
+ 		      (const_string "single") (const_string "double")))
+    (set_attr "type" "jump_ind")])
+ 
++(define_insn_and_split "sibcall_pcrel_fdpic"
++  [(call (mem:SI (match_operand:SI 0 "symbol_ref_operand" ""))
++	 (match_operand 1 "" ""))
++   (use (reg:PSI FPSCR_REG))
++   (use (reg:SI PIC_REG))
++   (clobber (match_scratch:SI 2 "=k"))
++   (return)]
++  "TARGET_SH2 && TARGET_FDPIC"
++  "#"
++  "reload_completed"
++  [(const_int 0)]
++  "
++{
++  rtx lab = PATTERN (gen_call_site ());
++  rtx call_insn;
++
++  emit_insn (gen_sym_label2reg (operands[2], operands[0], lab));
++  call_insn = emit_call_insn (gen_sibcalli_pcrel_fdpic (operands[2], operands[1],
++						  copy_rtx (lab)));
++  SIBLING_CALL_P (call_insn) = 1;
++  DONE;
++}"
++  [(set_attr "needs_delay_slot" "yes")
++   (set (attr "fp_mode")
++	(if_then_else (eq_attr "fpu_single" "yes")
++		      (const_string "single") (const_string "double")))
++   (set_attr "type" "jump_ind")])
++
+ (define_insn "sibcall_compact"
+   [(call (mem:SI (match_operand:SI 0 "register_operand" "k,k"))
+ 	 (match_operand 1 "" ""))
+@@ -8189,6 +8407,12 @@
+   ""
+   "
+ {
++  if (TARGET_FDPIC)
++    {
++      rtx pic_reg = gen_rtx_REG (Pmode, PIC_REG);
++      emit_move_insn (pic_reg, OUR_FDPIC_REG);
++    }
++
+   if (TARGET_SHMEDIA)
+     {
+       operands[0] = shmedia_prepare_call_address (operands[0], 1);
+@@ -8235,7 +8459,7 @@
+ 
+       operands[0]
+ 	= function_symbol (NULL, \"__GCC_shcompact_call_trampoline\",
+-			   SFUNC_GOT);
++			   SFUNC_GOT, NULL);
+       operands[0] = force_reg (SImode, operands[0]);
+ 
+       /* We don't need a return trampoline, since the callee will
+@@ -8261,7 +8485,7 @@
+       emit_insn (gen_symGOT2reg (reg, XEXP (operands[0], 0)));
+       XEXP (operands[0], 0) = reg;
+     }
+-  if (flag_pic && TARGET_SH2
++  if ((flag_pic || TARGET_FDPIC) && TARGET_SH2
+       && GET_CODE (operands[0]) == MEM
+       && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF
+       /* The PLT needs the PIC register, but the epilogue would have
+@@ -8269,13 +8493,24 @@
+ 	 static functions.  */
+       && SYMBOL_REF_LOCAL_P (XEXP (operands[0], 0)))
+     {
+-      emit_call_insn (gen_sibcall_pcrel (XEXP (operands[0], 0), operands[1]));
++      if (TARGET_FDPIC)
++        emit_call_insn (gen_sibcall_pcrel_fdpic (XEXP (operands[0], 0),
++       	                                         operands[1]));
++      else
++        emit_call_insn (gen_sibcall_pcrel (XEXP (operands[0], 0),
++                                           operands[1]));
+       DONE;
+     }
+   else
+     operands[0] = force_reg (SImode, XEXP (operands[0], 0));
+ 
+-  emit_call_insn (gen_sibcalli (operands[0], operands[1]));
++  if (TARGET_FDPIC)
++    {
++      operands[0] = sh_load_function_descriptor (operands[0]);
++      emit_call_insn (gen_sibcalli_fdpic (operands[0], operands[1]));
++    }
++  else
++    emit_call_insn (gen_sibcalli (operands[0], operands[1]));
+   DONE;
+ }")
+ 
+@@ -8285,7 +8520,22 @@
+ 	      (match_operand 2 "" "")))
+    (use (reg:PSI FPSCR_REG))
+    (return)]
+-  "TARGET_SH1"
++  "TARGET_SH1 && !TARGET_FDPIC"
++  "jmp	@%1%#"
++  [(set_attr "needs_delay_slot" "yes")
++   (set (attr "fp_mode")
++	(if_then_else (eq_attr "fpu_single" "yes")
++		      (const_string "single") (const_string "double")))
++   (set_attr "type" "jump_ind")])
++
++(define_insn "sibcall_valuei_fdpic"
++  [(set (match_operand 0 "" "=rf")
++	(call (mem:SI (match_operand:SI 1 "register_operand" "k"))
++	      (match_operand 2 "" "")))
++   (use (reg:PSI FPSCR_REG))
++   (use (reg:SI PIC_REG))
++   (return)]
++  "TARGET_SH1 && TARGET_FDPIC"
+   "jmp	@%1%#"
+   [(set_attr "needs_delay_slot" "yes")
+    (set (attr "fp_mode")
+@@ -8300,7 +8550,23 @@
+    (use (match_operand 3 "" ""))
+    (use (reg:PSI FPSCR_REG))
+    (return)]
+-  "TARGET_SH2"
++  "TARGET_SH2 && !TARGET_FDPIC"
++  "braf	%1\\n%O3:%#"
++  [(set_attr "needs_delay_slot" "yes")
++   (set (attr "fp_mode")
++	(if_then_else (eq_attr "fpu_single" "yes")
++		      (const_string "single") (const_string "double")))
++   (set_attr "type" "jump_ind")])
++
++(define_insn "sibcall_valuei_pcrel_fdpic"
++  [(set (match_operand 0 "" "=rf")
++	(call (mem:SI (match_operand:SI 1 "arith_reg_operand" "k"))
++	      (match_operand 2 "" "")))
++   (use (match_operand 3 "" ""))
++   (use (reg:PSI FPSCR_REG))
++   (use (reg:PSI PIC_REG))
++   (return)]
++  "TARGET_SH2 && TARGET_FDPIC"
+   "braf	%1\\n%O3:%#"
+   [(set_attr "needs_delay_slot" "yes")
+    (set (attr "fp_mode")
+@@ -8315,7 +8581,7 @@
+    (use (reg:PSI FPSCR_REG))
+    (clobber (match_scratch:SI 3 "=k"))
+    (return)]
+-  "TARGET_SH2"
++  "TARGET_SH2 && !TARGET_FDPIC"
+   "#"
+   "reload_completed"
+   [(const_int 0)]
+@@ -8329,6 +8595,39 @@
+ 							operands[3],
+ 							operands[2],
+ 							copy_rtx (lab)));
++							  
++  SIBLING_CALL_P (call_insn) = 1;
++  DONE;
++}"
++  [(set_attr "needs_delay_slot" "yes")
++   (set (attr "fp_mode")
++	(if_then_else (eq_attr "fpu_single" "yes")
++		      (const_string "single") (const_string "double")))
++   (set_attr "type" "jump_ind")])
++
++(define_insn_and_split "sibcall_value_pcrel_fdpic"
++  [(set (match_operand 0 "" "=rf")
++	(call (mem:SI (match_operand:SI 1 "symbol_ref_operand" ""))
++	      (match_operand 2 "" "")))
++   (use (reg:PSI FPSCR_REG))
++   (use (reg:PSI PIC_REG))
++   (clobber (match_scratch:SI 3 "=k"))
++   (return)]
++  "TARGET_SH2 && TARGET_FDPIC"
++  "#"
++  "reload_completed"
++  [(const_int 0)]
++  "
++{
++  rtx lab = PATTERN (gen_call_site ());
++  rtx call_insn;
++
++  emit_insn (gen_sym_label2reg (operands[3], operands[1], lab));
++  call_insn = emit_call_insn (gen_sibcall_valuei_pcrel_fdpic (operands[0],
++							      operands[3],
++							      operands[2],
++							      copy_rtx (lab)));
++							  
+   SIBLING_CALL_P (call_insn) = 1;
+   DONE;
+ }"
+@@ -8379,6 +8678,12 @@
+   ""
+   "
+ {
++  if (TARGET_FDPIC)
++    {
++      rtx pic_reg = gen_rtx_REG (Pmode, PIC_REG);
++      emit_move_insn (pic_reg, OUR_FDPIC_REG);
++    }
++
+   if (TARGET_SHMEDIA)
+     {
+       operands[1] = shmedia_prepare_call_address (operands[1], 1);
+@@ -8426,7 +8731,7 @@
+ 
+       operands[1]
+ 	= function_symbol (NULL, \"__GCC_shcompact_call_trampoline\",
+-			   SFUNC_GOT);
++			   SFUNC_GOT, NULL);
+       operands[1] = force_reg (SImode, operands[1]);
+ 
+       /* We don't need a return trampoline, since the callee will
+@@ -8453,7 +8758,7 @@
+       emit_insn (gen_symGOT2reg (reg, XEXP (operands[1], 0)));
+       XEXP (operands[1], 0) = reg;
+     }
+-  if (flag_pic && TARGET_SH2
++  if ((flag_pic || TARGET_FDPIC) && TARGET_SH2
+       && GET_CODE (operands[1]) == MEM
+       && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF
+       /* The PLT needs the PIC register, but the epilogue would have
+@@ -8461,15 +8766,28 @@
+ 	 static functions.  */
+       && SYMBOL_REF_LOCAL_P (XEXP (operands[1], 0)))
+     {
+-      emit_call_insn (gen_sibcall_value_pcrel (operands[0],
+-					       XEXP (operands[1], 0),
+-					       operands[2]));
++      if (TARGET_FDPIC)
++	emit_call_insn (gen_sibcall_value_pcrel_fdpic (operands[0],
++						       XEXP (operands[1], 0),
++						       operands[2]));
++      else
++	emit_call_insn (gen_sibcall_value_pcrel (operands[0],
++						 XEXP (operands[1], 0),
++						 operands[2]));
+       DONE;
+     }
+   else
+     operands[1] = force_reg (SImode, XEXP (operands[1], 0));
+ 
+-  emit_call_insn (gen_sibcall_valuei (operands[0], operands[1], operands[2]));
++  if (TARGET_FDPIC)
++    {
++      operands[1] = sh_load_function_descriptor (operands[1]);
++      emit_call_insn (gen_sibcall_valuei_fdpic (operands[0], operands[1],
++						operands[2]));
++    }
++  else
++    emit_call_insn (gen_sibcall_valuei (operands[0], operands[1],
++					operands[2]));
+   DONE;
+ }")
+ 
+@@ -8554,7 +8872,7 @@
+   emit_insn (gen_force_mode_for_call ());
+ 
+   operands[1] = function_symbol (NULL, \"__GCC_shcompact_call_trampoline\",
+-				 SFUNC_GOT);
++				 SFUNC_GOT, NULL);
+   operands[1] = force_reg (SImode, operands[1]);
+ 
+   emit_move_insn (r0, func);
+@@ -8739,6 +9057,13 @@
+       DONE;
+     }
+ 
++  if (TARGET_FDPIC)
++    {
++      rtx pic_reg = gen_rtx_REG (Pmode, PIC_REG);
++      emit_move_insn (pic_reg, OUR_FDPIC_REG);
++      DONE;
++    }
++
+   operands[0] = gen_rtx_REG (Pmode, PIC_REG);
+   operands[1] = gen_rtx_SYMBOL_REF (VOIDmode, GOT_SYMBOL_NAME);
+ 
+@@ -8853,6 +9178,12 @@
+ {
+   rtx insn, mem;
+ 
++  if (TARGET_FDPIC)
++    {
++      rtx pic_reg = gen_rtx_REG (Pmode, PIC_REG);
++      emit_move_insn (pic_reg, OUR_FDPIC_REG);
++    }
++
+   operands[2] = !can_create_pseudo_p () ? operands[0] : gen_reg_rtx (Pmode);
+   operands[3] = !can_create_pseudo_p () ? operands[0] : gen_reg_rtx (Pmode);
+ 
+@@ -8926,6 +9257,27 @@
+   DONE;
+ }")
+ 
++(define_expand "sym2GOTFUNCDESC"
++  [(const (unspec [(match_operand 0 "" "")] UNSPEC_GOTFUNCDESC))]
++  "TARGET_FDPIC"
++  "")
++
++(define_expand "symGOTFUNCDESC2reg"
++  [(match_operand 0 "" "") (match_operand 1 "" "")]
++  "TARGET_FDPIC"
++  "
++{
++  rtx gotsym, insn;
++
++  gotsym = gen_sym2GOTFUNCDESC (operands[1]);
++  PUT_MODE (gotsym, Pmode);
++  insn = emit_insn (gen_symGOT_load (operands[0], gotsym));
++
++  MEM_READONLY_P (SET_SRC (PATTERN (insn))) = 1;
++
++  DONE;
++}")
++
+ (define_expand "symGOTPLT2reg"
+   [(match_operand 0 "" "") (match_operand 1 "" "")]
+   ""
+@@ -8954,6 +9306,12 @@
+ 	   ? operands[0]
+ 	   : gen_reg_rtx (GET_MODE (operands[0])));
+ 
++  if (TARGET_FDPIC)
++    {
++      rtx pic_reg = gen_rtx_REG (Pmode, PIC_REG);
++      emit_move_insn (pic_reg, OUR_FDPIC_REG);
++    }
++
+   gotoffsym = gen_sym2GOTOFF (operands[1]);
+   PUT_MODE (gotoffsym, Pmode);
+   emit_move_insn (t, gotoffsym);
+@@ -8966,6 +9324,33 @@
+   DONE;
+ }")
+ 
++(define_expand "sym2GOTOFFFUNCDESC"
++  [(const (unspec [(match_operand 0 "" "")] UNSPEC_GOTOFFFUNCDESC))]
++  "TARGET_FDPIC"
++  "")
++
++(define_expand "symGOTOFFFUNCDESC2reg"
++  [(match_operand 0 "" "") (match_operand 1 "" "")]
++  "TARGET_FDPIC"
++  "
++{
++  rtx gotoffsym;
++  rtx t = (!can_create_pseudo_p ()
++	   ? operands[0]
++	   : gen_reg_rtx (GET_MODE (operands[0])));
++
++  rtx pic_reg = gen_rtx_REG (Pmode, PIC_REG);
++  emit_move_insn (pic_reg, OUR_FDPIC_REG);
++
++  gotoffsym = gen_sym2GOTOFFFUNCDESC (operands[1]);
++  PUT_MODE (gotoffsym, Pmode);
++  emit_move_insn (t, gotoffsym);
++  emit_move_insn (operands[0],
++		  gen_rtx_PLUS (Pmode, t,
++				gen_rtx_REG (Pmode, PIC_REG)));
++  DONE;
++}")
++
+ (define_expand "symPLT_label2reg"
+   [(set (match_operand:SI 0 "" "")
+ 	(const:SI
+@@ -9440,7 +9825,8 @@
+ {
+   rtx reg = gen_rtx_REG (Pmode, R0_REG);
+ 
+-  function_symbol (reg, \"__GCC_shcompact_return_trampoline\", SFUNC_STATIC);
++  function_symbol (reg, \"__GCC_shcompact_return_trampoline\", SFUNC_STATIC,
++		   NULL);
+   emit_jump_insn (gen_shcompact_return_tramp_i ());
+   DONE;
+ }")
+@@ -9611,7 +9997,7 @@
+ ;; complements the T bit and stores the result in a register
+ (define_insn "movrt"
+   [(set (match_operand:SI 0 "arith_reg_dest" "=r")
+-        (if_then_else (eq:SI (reg:SI T_REG) (const_int 0))
++        (if_then_else:SI (eq:SI (reg:SI T_REG) (const_int 0))
+         (const_int 1)
+         (const_int 0)))]
+   "TARGET_SH2A"
+@@ -10416,18 +10802,22 @@
+ (define_insn "block_move_real"
+   [(parallel [(set (mem:BLK (reg:SI R4_REG))
+ 		   (mem:BLK (reg:SI R5_REG)))
+-	      (use (match_operand:SI 0 "arith_reg_operand" "r"))
++	      (use (match_operand:SI 0 "arith_reg_operand" "r,r"))
++	      (use (match_operand 1 "" "Z,Ccl"))
+ 	      (clobber (reg:SI PR_REG))
+ 	      (clobber (reg:SI R0_REG))])]
+   "TARGET_SH1 && ! TARGET_HARD_SH4"
+-  "jsr	@%0%#"
++  "@
++   jsr	@%0%#
++   bsrf	%0\\n%O1:%#"
+   [(set_attr "type" "sfunc")
+    (set_attr "needs_delay_slot" "yes")])
+ 
+ (define_insn "block_lump_real"
+   [(parallel [(set (mem:BLK (reg:SI R4_REG))
+ 		   (mem:BLK (reg:SI R5_REG)))
+-	      (use (match_operand:SI 0 "arith_reg_operand" "r"))
++	      (use (match_operand:SI 0 "arith_reg_operand" "r,r"))
++	      (use (match_operand 1 "" "Z,Ccl"))
+ 	      (use (reg:SI R6_REG))
+ 	      (clobber (reg:SI PR_REG))
+ 	      (clobber (reg:SI T_REG))
+@@ -10436,27 +10826,33 @@
+ 	      (clobber (reg:SI R6_REG))
+ 	      (clobber (reg:SI R0_REG))])]
+   "TARGET_SH1 && ! TARGET_HARD_SH4"
+-  "jsr	@%0%#"
++  "@
++   jsr	@%0%#
++   bsrf	%0\\n%O1:%#"
+   [(set_attr "type" "sfunc")
+    (set_attr "needs_delay_slot" "yes")])
+ 
+ (define_insn "block_move_real_i4"
+   [(parallel [(set (mem:BLK (reg:SI R4_REG))
+ 		   (mem:BLK (reg:SI R5_REG)))
+-	      (use (match_operand:SI 0 "arith_reg_operand" "r"))
++	      (use (match_operand:SI 0 "arith_reg_operand" "r,r"))
++	      (use (match_operand 1 "" "Z,Ccl"))
+ 	      (clobber (reg:SI PR_REG))
+ 	      (clobber (reg:SI R0_REG))
+ 	      (clobber (reg:SI R1_REG))
+ 	      (clobber (reg:SI R2_REG))])]
+   "TARGET_HARD_SH4"
+-  "jsr	@%0%#"
++  "@
++   jsr	@%0%#
++   bsrf	%0\\n%O1:%#"
+   [(set_attr "type" "sfunc")
+    (set_attr "needs_delay_slot" "yes")])
+ 
+ (define_insn "block_lump_real_i4"
+   [(parallel [(set (mem:BLK (reg:SI R4_REG))
+ 		   (mem:BLK (reg:SI R5_REG)))
+-	      (use (match_operand:SI 0 "arith_reg_operand" "r"))
++	      (use (match_operand:SI 0 "arith_reg_operand" "r,r"))
++	      (use (match_operand 1 "" "Z,Ccl"))
+ 	      (use (reg:SI R6_REG))
+ 	      (clobber (reg:SI PR_REG))
+ 	      (clobber (reg:SI T_REG))
+@@ -10468,7 +10864,9 @@
+ 	      (clobber (reg:SI R2_REG))
+ 	      (clobber (reg:SI R3_REG))])]
+   "TARGET_HARD_SH4"
+-  "jsr	@%0%#"
++  "@
++   jsr	@%0%#
++   bsrf	%0\\n%O1:%#"
+   [(set_attr "type" "sfunc")
+    (set_attr "needs_delay_slot" "yes")])
+ 
+--- a/src/gcc/config/sh/sh.opt
++++ b/src/gcc/config/sh/sh.opt
+@@ -248,12 +248,17 @@
+ Target RejectNegative Joined Var(sh_divsi3_libfunc) Init("")
+ Specify name for 32 bit signed division function
+ 
++mfmovd
++Target RejectNegative Mask(FMOVD)
++Enable the use of 64-bit floating point registers in fmov instructions.  See -mdalign if 64-bit alignment is required.
++
+ mfixed-range=
+ Target RejectNegative Joined Var(sh_fixed_range_str)
+ Specify range of registers to make fixed
+ 
+-mfmovd
+-Target RejectNegative Mask(FMOVD) Undocumented
++mfdpic
++Target Report Mask(FDPIC)
++Generate ELF FDPIC code
+ 
+ mfused-madd
+ Target Var(TARGET_FMAC)
+@@ -319,7 +324,7 @@
+ 
+ mspace
+ Target Report RejectNegative Mask(SMALLCODE)
+-Deprecated. Use -Os instead
++Deprecated.  Use -Os instead
+ 
+ multcost=
+ Target RejectNegative Joined UInteger Var(sh_multcost) Init(-1)
+--- a/src/gcc/config/sh/t-1e
++++ b/src/gcc/config/sh/t-1e
+@@ -1 +0,0 @@
+-MULTILIB_ENDIAN =
+--- a/src/gcc/config/sh/t-linux
++++ b/src/gcc/config/sh/t-linux
+@@ -4,6 +4,5 @@
+ 
+ MULTILIB_DIRNAMES= 
+ MULTILIB_MATCHES = 
+-MULTILIB_EXCEPTIONS=
+ 
+ EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
+--- a/src/gcc/config/sh/t-mlib-sh1
++++ b/src/gcc/config/sh/t-mlib-sh1
+@@ -1 +0,0 @@
+-ML_sh1=m1/
+--- a/src/gcc/config/sh/t-mlib-sh2
++++ b/src/gcc/config/sh/t-mlib-sh2
+@@ -1 +0,0 @@
+-ML_sh2=m2/
+--- a/src/gcc/config/sh/t-mlib-sh2a
++++ b/src/gcc/config/sh/t-mlib-sh2a
+@@ -1 +0,0 @@
+-ML_sh2a=m2a/
+--- a/src/gcc/config/sh/t-mlib-sh2a-nofpu
++++ b/src/gcc/config/sh/t-mlib-sh2a-nofpu
+@@ -1 +0,0 @@
+-ML_sh2a_nofpu=m2a-nofpu/
+--- a/src/gcc/config/sh/t-mlib-sh2a-single
++++ b/src/gcc/config/sh/t-mlib-sh2a-single
+@@ -1 +0,0 @@
+-ML_sh2a_single=m2a-single/
+--- a/src/gcc/config/sh/t-mlib-sh2a-single-only
++++ b/src/gcc/config/sh/t-mlib-sh2a-single-only
+@@ -1 +0,0 @@
+-ML_sh2a_single_only=m2a-single-only/
+--- a/src/gcc/config/sh/t-mlib-sh2e
++++ b/src/gcc/config/sh/t-mlib-sh2e
+@@ -1 +0,0 @@
+-ML_sh2e=m2e/
+--- a/src/gcc/config/sh/t-mlib-sh3
++++ b/src/gcc/config/sh/t-mlib-sh3
+@@ -1 +0,0 @@
+-ML_sh3=m3/
+--- a/src/gcc/config/sh/t-mlib-sh3e
++++ b/src/gcc/config/sh/t-mlib-sh3e
+@@ -1 +0,0 @@
+-ML_sh3e=m3e/
+--- a/src/gcc/config/sh/t-mlib-sh4
++++ b/src/gcc/config/sh/t-mlib-sh4
+@@ -1 +0,0 @@
+-ML_sh4=m4/
+--- a/src/gcc/config/sh/t-mlib-sh4-nofpu
++++ b/src/gcc/config/sh/t-mlib-sh4-nofpu
+@@ -1 +0,0 @@
+-ML_sh4_nofpu=m4-nofpu/
+--- a/src/gcc/config/sh/t-mlib-sh4-single
++++ b/src/gcc/config/sh/t-mlib-sh4-single
+@@ -1 +0,0 @@
+-ML_sh4_single=m4-single/
+--- a/src/gcc/config/sh/t-mlib-sh4-single-only
++++ b/src/gcc/config/sh/t-mlib-sh4-single-only
+@@ -1 +0,0 @@
+-ML_sh4_single_only=m4-single-only/
+--- a/src/gcc/config/sh/t-mlib-sh4a
++++ b/src/gcc/config/sh/t-mlib-sh4a
+@@ -1 +0,0 @@
+-ML_sh4a=m4a/
+--- a/src/gcc/config/sh/t-mlib-sh4a-nofpu
++++ b/src/gcc/config/sh/t-mlib-sh4a-nofpu
+@@ -1 +0,0 @@
+-ML_sh4a_nofpu=m4a-nofpu/
+--- a/src/gcc/config/sh/t-mlib-sh4a-single
++++ b/src/gcc/config/sh/t-mlib-sh4a-single
+@@ -1 +0,0 @@
+-ML_sh4a_single=m4a-single/
+--- a/src/gcc/config/sh/t-mlib-sh4a-single-only
++++ b/src/gcc/config/sh/t-mlib-sh4a-single-only
+@@ -1 +0,0 @@
+-ML_sh4a_single_only=m4a-single-only/
+--- a/src/gcc/config/sh/t-mlib-sh4al
++++ b/src/gcc/config/sh/t-mlib-sh4al
+@@ -1 +0,0 @@
+-ML_sh4al=m4al/
+--- a/src/gcc/config/sh/t-mlib-sh5-32media
++++ b/src/gcc/config/sh/t-mlib-sh5-32media
+@@ -1 +0,0 @@
+-ML_sh5_32media=m5-32media/
+--- a/src/gcc/config/sh/t-mlib-sh5-32media-nofpu
++++ b/src/gcc/config/sh/t-mlib-sh5-32media-nofpu
+@@ -1 +0,0 @@
+-ML_sh5_32media_nofpu=m5-32media-nofpu/
+--- a/src/gcc/config/sh/t-mlib-sh5-64media
++++ b/src/gcc/config/sh/t-mlib-sh5-64media
+@@ -1 +0,0 @@
+-ML_sh5_64media=m5-64media/
+--- a/src/gcc/config/sh/t-mlib-sh5-64media-nofpu
++++ b/src/gcc/config/sh/t-mlib-sh5-64media-nofpu
+@@ -1 +0,0 @@
+-ML_sh5_64media_nofpu=m5-64media-nofpu/
+--- a/src/gcc/config/sh/t-mlib-sh5-compact
++++ b/src/gcc/config/sh/t-mlib-sh5-compact
+@@ -1 +0,0 @@
+-ML_sh5_compact=m5-compact/
+--- a/src/gcc/config/sh/t-mlib-sh5-compact-nofpu
++++ b/src/gcc/config/sh/t-mlib-sh5-compact-nofpu
+@@ -1 +0,0 @@
+-ML_sh5_compact_nofpu=m5-compact-nofpu/
+--- a/src/gcc/config/sh/t-sgxxlite-linux
++++ b/src/gcc/config/sh/t-sgxxlite-linux
+@@ -0,0 +1,3 @@
++MULTILIB_OPTIONS += muclibc
++MULTILIB_OSDIRNAMES += muclibc=!uclibc m4al/muclibc=!m4al/uclibc mb/muclibc=!mb/uclibc
++MULTILIB_EXCEPTIONS += mb/m4al/muclibc
+--- a/src/gcc/config/sh/t-sh
++++ b/src/gcc/config/sh/t-sh
+@@ -27,10 +27,10 @@
+ 	echo '#endif' 		>> fp-bit.c
+ 	cat $(srcdir)/config/fp-bit.c >> fp-bit.c
+ 
+-MULTILIB_ENDIAN = ml/mb
+-MULTILIB_CPUS= $(ML_sh1)$(ML_sh2a)$(ML_sh2a_nofpu)$(ML_sh2a_single_only)$(ML_sh2a_single)$(ML_sh2e)$(ML_sh2)$(ML_sh3e)$(ML_sh3)$(ML_sh4_nofpu)$(ML_sh4_single_only)$(ML_sh4_single)$(ML_sh4)$(ML_sh4a_nofpu)$(ML_sh4a_single_only)$(ML_sh4a_single)$(ML_sh4a)$(ML_sh5_32media)$(ML_sh5_32media_nofpu)$(ML_sh5_compact)$(ML_sh5_compact_nofpu)$(ML_sh5_64media)$(ML_sh5_64media_nofpu)
++DEFAULT_ENDIAN = $(word 1,$(TM_ENDIAN_CONFIG))
++OTHER_ENDIAN = $(word 2,$(TM_ENDIAN_CONFIG))
+ 
+-MULTILIB_OPTIONS= $(MULTILIB_ENDIAN) $(MULTILIB_CPUS:/=)
++MULTILIB_OPTIONS= $(OTHER_ENDIAN) $(TM_MULTILIB_CONFIG)
+ MULTILIB_DIRNAMES= 
+ 
+ # The separate entries for m2a-nofpu and m2a-single-only with
+@@ -58,7 +58,34 @@
+   done)
+ 
+ # SH1 only supports big endian.
+-MULTILIB_EXCEPTIONS = ml/m1 ml/m2a*
++MULTILIB_EXCEPTIONS = ml/m1 ml/m2a* $(TM_MULTILIB_EXCEPTIONS_CONFIG)
++
++MULTILIB_OSDIRNAMES = \
++	$(OTHER_ENDIAN)=!$(OTHER_ENDIAN) \
++	m1=!m1 $(OTHER_ENDIAN)/m1=!$(OTHER_ENDIAN)/m1 \
++	m2a=!m2a $(OTHER_ENDIAN)/m2a=!$(OTHER_ENDIAN)/m2a \
++	m2a-nofpu=!m2a-nofpu $(OTHER_ENDIAN)/m2a-nofpu=!$(OTHER_ENDIAN)/m2a-nofpu \
++	m2a-single-only=!m2a-single-only $(OTHER_ENDIAN)/m2a-single-only=!$(OTHER_ENDIAN)/m2a-single-only \
++	m2a-single=!m2a-single $(OTHER_ENDIAN)/m2a-single=!$(OTHER_ENDIAN)/m2a-single \
++	m2e=!m2e $(OTHER_ENDIAN)/m2e=!$(OTHER_ENDIAN)/m2e \
++	m2=!m2 $(OTHER_ENDIAN)/m2=!$(OTHER_ENDIAN)/m2 \
++	m3e=!m3e $(OTHER_ENDIAN)/m3e=!$(OTHER_ENDIAN)/m3e \
++	m3=!m3 $(OTHER_ENDIAN)/m3=!$(OTHER_ENDIAN)/m3 \
++	m4-nofpu=!m4-nofpu $(OTHER_ENDIAN)/m4-nofpu=!$(OTHER_ENDIAN)/m4-nofpu \
++	m4-single-only=!m4-single-only $(OTHER_ENDIAN)/m4-single-only=!$(OTHER_ENDIAN)/m4-single-only \
++	m4-single=!m4-single $(OTHER_ENDIAN)/m4-single=!$(OTHER_ENDIAN)/m4-single \
++	m4=!m4 $(OTHER_ENDIAN)/m4=!$(OTHER_ENDIAN)/m4 \
++	m4a-nofpu=!m4a-nofpu $(OTHER_ENDIAN)/m4a-nofpu=!$(OTHER_ENDIAN)/m4a-nofpu \
++	m4a-single-only=!m4a-single-only $(OTHER_ENDIAN)/m4a-single-only=!$(OTHER_ENDIAN)/m4a-single-only \
++	m4a-single=!m4a-single $(OTHER_ENDIAN)/m4a-single=!$(OTHER_ENDIAN)/m4a-single \
++	m4a=!m4a $(OTHER_ENDIAN)/m4a=!$(OTHER_ENDIAN)/m4a \
++	m4al=!m4al $(OTHER_ENDIAN)/m4al=!$(OTHER_ENDIAN)/m4al \
++	m5-32media=!m5-32media $(OTHER_ENDIAN)/m5-32media=!$(OTHER_ENDIAN)/m5-32media \
++	m5-32media-nofpu=!m5-32media-nofpu $(OTHER_ENDIAN)/m5-32media-nofpu=!$(OTHER_ENDIAN)/m5-32media-nofpu \
++	m5-compact=!m5-compact $(OTHER_ENDIAN)/m5-compact=!$(OTHER_ENDIAN)/m5-compact \
++	m5-compact-nofpu=!m5-compact-nofpu $(OTHER_ENDIAN)/m5-compact-nofpu=!$(OTHER_ENDIAN)/m5-compact-nofpu \
++	m5-64media=!m5-64media $(OTHER_ENDIAN)/m5-64media=!$(OTHER_ENDIAN)/m5-64media \
++	m5-64media-nofpu=!m5-64media-nofpu $(OTHER_ENDIAN)/m5-64media-nofpu=!$(OTHER_ENDIAN)/m5-64media-nofpu
+ 
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+--- a/src/gcc/config/sh/t-uclinux
++++ b/src/gcc/config/sh/t-uclinux
+@@ -0,0 +1,4 @@
++# Compile crtbeginS.o and crtendS.o with pic.
++CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
++
++EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o $(OPT_EXTRA_PARTS)
+--- a/src/gcc/config/sh/uclinux.h
++++ b/src/gcc/config/sh/uclinux.h
+@@ -0,0 +1,104 @@
++/* Definitions for SH based uClinux system using ELF objects with
++   special linker post-processing to produce FLAT executables.
++
++   Copyright (C) 2008
++   Free Software Foundation, Inc.
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 3, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++#undef STARTFILE_SPEC
++#define STARTFILE_SPEC "%{!shared:crt1.o%s} crti.o%s \
++   %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" \
++   FDPIC_STARTFILE_SPEC
++
++#undef  ENDFILE_SPEC
++#define ENDFILE_SPEC "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
++
++#define LINK_EH_SPEC "%{mfdpic:%{!static:--eh-frame-hdr}} "
++
++#ifdef FDPIC_DEFAULT
++#undef SUBTARGET_LINK_SPEC
++#define SUBTARGET_LINK_SPEC \
++  "%{shared:-shared} \
++   %{!static: \
++     %{rdynamic:-export-dynamic} \
++     %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++   %{static:-static}"
++#undef SUBTARGET_LINK_EMUL_SUFFIX
++#define SUBTARGET_LINK_EMUL_SUFFIX "_fd"
++#undef SUBTARGET_DRIVER_SELF_SPECS
++#define SUBTARGET_DRIVER_SELF_SPECS "%{!mno-fdpic:-mfdpic} "
++#undef SUBTARGET_ASM_SPEC
++#define SUBTARGET_ASM_SPEC "%{!mno-fdpic:--fdpic}"
++#define FDPIC_STARTFILE_SPEC "%{!mno-fdpic: crtreloc.o%s}"
++#else
++#undef SUBTARGET_LINK_SPEC
++#define SUBTARGET_LINK_SPEC "%{shared:-shared} %{static:-static} %{!elf2flt*:-elf2flt}"
++#undef SUBTARGET_LINK_EMUL_SUFFIX
++#define SUBTARGET_LINK_EMUL_SUFFIX "_uclinux"
++#define FDPIC_STARTFILE_SPEC "%{mfdpic: crtreloc.o%s}"
++#endif
++
++/* While the speed-optimized implementations of udivsi3_i4i / sdivsi3_i4i
++   in libgcc are not available for SH2, the space-optimized ones in
++   libgcc-Os-4-200 are.  Thus, when not optimizing for space, link
++   libgcc-Os-4-200 after libgcc, so that -mdiv=call-table works for -m2.  */
++#undef LIBGCC_SPEC
++#define LIBGCC_SPEC "%{Os: -lgcc-Os-4-200} -lgcc %{!Os: -lgcc-Os-4-200}"
++
++/* we have init/fini section. */
++#define HAS_INIT_SECTION
++
++/* Bring in standard linux defines */
++#undef TARGET_OS_CPP_BUILTINS
++#define TARGET_OS_CPP_BUILTINS()		\
++  do						\
++    {						\
++	builtin_define ("__gnu_linux__");	\
++	builtin_define_std ("linux");		\
++	builtin_define_std ("unix");		\
++	builtin_assert ("system=linux");	\
++	builtin_assert ("system=unix");		\
++	builtin_assert ("system=posix");	\
++	builtin_define ("__uClinux__");		\
++    }						\
++  while (0)
++
++/* The GNU C++ standard library requires that these macros be defined.  */
++#undef CPLUSPLUS_CPP_SPEC
++#define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)"
++
++/* Since libgcc is compiled with -fpic for this target, we can't use
++   __sdivsi3_1 as the division strategy for -O0 and -Os.  */
++#undef SH_DIV_STRATEGY_DEFAULT
++#define SH_DIV_STRATEGY_DEFAULT SH_DIV_CALL2
++#undef SH_DIV_STR_FOR_SIZE
++#define SH_DIV_STR_FOR_SIZE "call2"
++
++/* The uclinux binary format relies on relocations against a segment being
++   within that segment.  Conservatively apply this rule to individual
++   sections.  */
++#undef SH_OFFSETS_MUST_BE_WITHIN_SECTIONS_P
++#define SH_OFFSETS_MUST_BE_WITHIN_SECTIONS_P 1
++
++/* CSL LOCAL */
++#undef SUBTARGET_OVERRIDE_OPTIONS
++#define SUBTARGET_OVERRIDE_OPTIONS					\
++do {									\
++  /* __thread is not supported by uClibc.  */				\
++  targetm.have_tls = 0;							\
++} while (0)
+--- a/src/gcc/config/sol2.h
++++ b/src/gcc/config/sol2.h
+@@ -123,12 +123,12 @@
+    %{YP,*} \
+    %{R*} \
+    %{compat-bsd: \
+-     %{!YP,*:%{p|pg:-Y P,/usr/ucblib:/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \
+-             %{!p:%{!pg:-Y P,/usr/ucblib:/usr/ccs/lib:/usr/lib}}} \
+-             -R /usr/ucblib} \
++     %{!YP,*:%{p|pg:-Y P,%R/usr/ucblib:%R/usr/ccs/lib/libp:%R/usr/lib/libp:%R/usr/ccs/lib:%R/usr/lib} \
++             %{!p:%{!pg:-Y P,%R/usr/ucblib:%R/usr/ccs/lib:%R/usr/lib}}} \
++             -R %R/usr/ucblib} \
+    %{!compat-bsd: \
+-     %{!YP,*:%{p|pg:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \
+-             %{!p:%{!pg:-Y P,/usr/ccs/lib:/usr/lib}}}}"
++     %{!YP,*:%{p|pg:-Y P,%R/usr/ccs/lib/libp:%R/usr/lib/libp:%R/usr/ccs/lib:%R/usr/lib} \
++             %{!p:%{!pg:-Y P,%R/usr/ccs/lib:%R/usr/lib}}}}"
+ 
+ #undef LINK_ARCH32_SPEC
+ #define LINK_ARCH32_SPEC LINK_ARCH32_SPEC_BASE
+--- a/src/gcc/config/sparc/linux64.h
++++ b/src/gcc/config/sparc/linux64.h
+@@ -40,10 +40,15 @@
+    in a Medium/Low code model environment.  */
+ 
+ #undef TARGET_DEFAULT
++#ifdef BIARCH_32BIT_DEFAULT
++#define TARGET_DEFAULT \
++  (MASK_APP_REGS + MASK_FPU)
++#else
+ #define TARGET_DEFAULT \
+   (MASK_V9 + MASK_PTR64 + MASK_64BIT /* + MASK_HARD_QUAD */ \
+    + MASK_STACK_BIAS + MASK_APP_REGS + MASK_FPU + MASK_LONG_DOUBLE_128)
+ #endif
++#endif
+ 
+ /* This must be v9a not just v9 because by default we enable
+    -mvis.  */
+--- a/src/gcc/config/sparc/sol2-bi.h
++++ b/src/gcc/config/sparc/sol2-bi.h
+@@ -172,12 +172,12 @@
+    %{YP,*} \
+    %{R*} \
+    %{compat-bsd: \
+-     %{!YP,*:%{p|pg:-Y P,/usr/ucblib/sparcv9:/usr/lib/libp/sparcv9:/usr/lib/sparcv9} \
+-       %{!p:%{!pg:-Y P,/usr/ucblib/sparcv9:/usr/lib/sparcv9}}} \
+-     -R /usr/ucblib/sparcv9} \
++     %{!YP,*:%{p|pg:-Y P,%R/usr/ucblib/sparcv9:%R/usr/lib/libp/sparcv9:%R/usr/lib/sparcv9} \
++       %{!p:%{!pg:-Y P,%R/usr/ucblib/sparcv9:%R/usr/lib/sparcv9}}} \
++     -R %R/usr/ucblib/sparcv9} \
+    %{!compat-bsd: \
+-     %{!YP,*:%{p|pg:-Y P,/usr/lib/libp/sparcv9:/usr/lib/sparcv9} \
+-       %{!p:%{!pg:-Y P,/usr/lib/sparcv9}}}}"
++     %{!YP,*:%{p|pg:-Y P,%R/usr/lib/libp/sparcv9:%R/usr/lib/sparcv9} \
++       %{!p:%{!pg:-Y P,%R/usr/lib/sparcv9}}}}"
+ 
+ #define LINK_ARCH64_SPEC LINK_ARCH64_SPEC_BASE
+ 
+--- a/src/gcc/config/sparc/sparc.c
++++ b/src/gcc/config/sparc/sparc.c
+@@ -6104,7 +6104,7 @@
+ sparc_emit_float_lib_cmp (rtx x, rtx y, enum rtx_code comparison)
+ {
+   const char *qpfunc;
+-  rtx slot0, slot1, result, tem, tem2;
++  rtx slot0, slot1, result, tem, tem2, libfunc;
+   enum machine_mode mode;
+   enum rtx_code new_comparison;
+ 
+@@ -6167,7 +6167,8 @@
+ 	  emit_move_insn (slot1, y);
+ 	}
+ 
+-      emit_library_call (gen_rtx_SYMBOL_REF (Pmode, qpfunc), LCT_NORMAL,
++      libfunc = gen_rtx_SYMBOL_REF (Pmode, qpfunc);
++      emit_library_call (libfunc, LCT_NORMAL,
+ 			 DImode, 2,
+ 			 XEXP (slot0, 0), Pmode,
+ 			 XEXP (slot1, 0), Pmode);
+@@ -6175,7 +6176,8 @@
+     }
+   else
+     {
+-      emit_library_call (gen_rtx_SYMBOL_REF (Pmode, qpfunc), LCT_NORMAL,
++      libfunc = gen_rtx_SYMBOL_REF (Pmode, qpfunc);
++      emit_library_call (libfunc, LCT_NORMAL,
+ 			 SImode, 2,
+ 			 x, TFmode, y, TFmode);
+       mode = SImode;
+@@ -6186,7 +6188,7 @@
+      register so reload doesn't clobber the value if it needs
+      the return register for a spill reg.  */
+   result = gen_reg_rtx (mode);
+-  emit_move_insn (result, hard_libcall_value (mode));
++  emit_move_insn (result, hard_libcall_value (mode, libfunc));
+ 
+   switch (comparison)
+     {
+--- a/src/gcc/config/spu/spu.h
++++ b/src/gcc/config/spu/spu.h
+@@ -270,7 +270,8 @@
+ 
+ #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (LINK_REGISTER_REGNUM)
+ 
+-#define ARG_POINTER_CFA_OFFSET(FNDECL) (-STACK_POINTER_OFFSET)
++#define ARG_POINTER_CFA_OFFSET(FNDECL) \
++  (crtl->args.pretend_args_size - STACK_POINTER_OFFSET)
+ 
+ 
+ /* Stack Checking */
+--- a/src/gcc/config/t-eglibc
++++ b/src/gcc/config/t-eglibc
+@@ -0,0 +1,25 @@
++# multilibs  -*- mode:Makefile -*-
++
++MULTILIB_EXCEPTIONS :=
++MULTILIB_MATCHES    :=
++MULTILIB_ALIASES    :=
++
++# For all items in EGLIBC_CONFIGS except for the last one
++# do $1.  For the last one do $2.  The items are separated with ",".
++EGLIBC_AWK = $(shell echo $(EGLIBC_CONFIGS) | $(AWK) \
++	'{ \
++	N=split ($$0, configs, ","); \
++	for (i = 1; i < N; ++i) $1; \
++	if (N > 0) $2; \
++	}')
++
++MULTILIB_OPTIONS    := $(call EGLIBC_AWK, \
++	printf ("feglibc=%s/", configs[i]), \
++	printf ("feglibc=%s\n", configs[i]))
++MULTILIB_DIRNAMES   := $(call EGLIBC_AWK, \
++	printf ("%s ", configs[i]), \
++	printf ("%s\n", configs[i]))
++MULTILIB_OSDIRNAMES := $(call EGLIBC_AWK, \
++	printf ("feglibc.%s=!%s ", configs[i], configs[i]), \
++	printf ("feglibc.%s=!%s\n", configs[i], configs[i]))
++
+--- a/src/gcc/config/t-sysroot-suffix
++++ b/src/gcc/config/t-sysroot-suffix
+@@ -0,0 +1,7 @@
++# Generate SYSROOT_SUFFIX_SPEC from MULTILIB_OSDIRNAMES
++
++sysroot-suffix.h: $(srcdir)/config/print-sysroot-suffix.sh
++	$(SHELL) $(srcdir)/config/print-sysroot-suffix.sh \
++	  "$(MULTILIB_OSDIRNAMES)" "$(MULTILIB_OPTIONS)" \
++	  "$(MULTILIB_MATCHES)" "$(MULTILIB_ALIASES)" > tmp-sysroot-suffix.h
++	mv tmp-sysroot-suffix.h $@
+--- a/src/gcc/config/vx-common.h
++++ b/src/gcc/config/vx-common.h
+@@ -92,3 +92,6 @@
+ /* We occasionally need to distinguish between the VxWorks variants.  */
+ #define VXWORKS_KIND_NORMAL  1
+ #define VXWORKS_KIND_AE      2
++
++/* Enable get_feature license checking.  */
++#define TARGET_FLEXLM
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -209,6 +209,7 @@
+ # Avoid generic cases below matching.
+    h8300-*-rtems* | h8300-*-elf* \
+  | sh-*-elf* | sh-*-symbianelf* | sh-*-linux* | sh-*-netbsdelf* \
++ | sh-*-uclinux* \
+  | sh-*-rtems* | sh-wrs-vxworks) ;;
+    arm-*-coff*		\
+  | armel-*-coff*	\
+@@ -727,6 +728,28 @@
+ 	    need_64bit_hwint=yes
+ 	    # The EABI requires the use of __cxa_atexit.
+ 	    default_use_cxa_atexit=yes
++	    case ${target} in
++	    arm-wrs-linux-gnueabi) 
++		tm_file="$tm_file arm/wrs-linux.h"
++		tmake_file="$tmake_file arm/t-wrs-linux"
++		tm_defines="$tm_defines TARGET_FLEXLM"
++		;;
++	    arm-montavista*-linux-gnueabi)
++		tm_file="$tm_file arm/montavista-linux.h"
++		tmake_file="$tmake_file arm/t-montavista-linux"
++		;;
++	    *)
++		if test x$enable_extra_asa_multilibs = xyes; then
++			tmake_file="${tmake_file} arm/t-asa"
++		elif test x$enable_extra_sgxx_multilibs = xyes; then
++			tmake_file="${tmake_file} arm/t-cs-linux"
++		elif test x$enable_extra_sgxxlite_multilibs = xyes; then
++			tmake_file="${tmake_file} arm/t-cs-linux-lite"
++		fi
++		tm_file="$tm_file ./sysroot-suffix.h"
++		tmake_file="$tmake_file t-sysroot-suffix"
++		;;
++	    esac
+ 	    ;;
+ 	*)
+ 	    tmake_file="$tmake_file arm/t-linux"
+@@ -748,6 +771,13 @@
+ 	    need_64bit_hwint=yes
+ 	    # The EABI requires the use of __cxa_atexit.
+ 	    default_use_cxa_atexit=yes
++	    if test x$enable_extra_sgxx_multilibs = xyes; then
++		    tmake_file="${tmake_file} arm/t-cs-uclinux-eabi"
++	    elif test x$enable_extra_sgxxlite_multilibs = xyes; then
++		    tmake_file="${tmake_file} arm/t-cs-uclinux-eabi"
++	    fi
++	    tm_file="$tm_file ./sysroot-suffix.h"
++	    tmake_file="$tmake_file t-sysroot-suffix"
+ 	esac
+ 	tm_file="$tm_file arm/aout.h arm/arm.h"
+ 	tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp"
+@@ -757,7 +787,7 @@
+ 	tmake_file="arm/t-arm arm/t-arm-elf"
+ 	tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp"
+ 	;;
+-arm*-*-eabi* | arm*-*-symbianelf* )
++arm*-*-eabi* | arm*-*-nucleuseabi* | arm*-*-symbianelf* )
+ 	# The BPABI long long divmod functions return a 128-bit value in
+ 	# registers r0-r3.  Correctly modeling that requires the use of
+ 	# TImode.
+@@ -766,16 +796,31 @@
+ 	tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/bpabi.h"
+ 	tmake_file="arm/t-arm arm/t-arm-elf"
+ 	case ${target} in
+-	arm*-*-eabi*)
++	arm*-*-eabi* | arm*-*-nucleuseabi*)
+ 	  tm_file="$tm_file arm/eabi.h"
++	  tm_file="${tm_file} arm/nocrt0.h"
++	  case ${target} in
++	    *samsung-nucleuseabi*)
++	      tm_file="$tm_file arm/nucleus.h"
++	      tmake_file="${tmake_file} t-slibgcc-elf-ver t-libc-ok"
++	      tmake_file="${tmake_file} t-libgcc-pic arm/t-nucleus"
++	      tm_defines="${tm_defines} NUCLEUS_SHARED_EXEC=1"
++	      ;;
++	    *nucleuseabi*)
++	      tm_file="$tm_file arm/nucleus.h"
++	      ;;
++	  esac
+ 	  tmake_file="${tmake_file} arm/t-bpabi"
+ 	  extra_options="${extra_options} arm/eabi.opt"
++	  if test x$enable_extra_sgxx_multilibs = xyes; then
++		  tmake_file="${tmake_file} arm/t-cs-eabi"
++	  elif test x$enable_extra_sgxxlite_multilibs = xyes; then
++		  tmake_file="${tmake_file} arm/t-cs-eabi-lite"
++	  fi
+ 	  ;;
+ 	arm*-*-symbianelf*)
+ 	  tm_file="${tm_file} arm/symbian.h"
+-	  # We do not include t-bpabi for Symbian OS because the system
+-	  # provides its own implementation of the BPABI functions.
+-	  tmake_file="${tmake_file} arm/t-symbian"
++	  tmake_file="${tmake_file} arm/t-bpabi arm/t-symbian"
+ 	  ;;
+ 	esac
+ 	tm_file="${tm_file} arm/aout.h arm/arm.h"
+@@ -906,7 +951,7 @@
+ 	target_cpu_default="MASK_PA_11|MASK_NO_SPACE_REGS"
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h pa/pa-linux.h \
+ 		 pa/pa32-regs.h pa/pa32-linux.h"
+-	tmake_file="${tmake_file} pa/t-linux"
++	tmake_file="${tmake_file} pa/t-linux t-slibgcc-libgcc"
+ 	# Set the libgcc version number
+ 	if test x$sjlj = x1; then
+ 	    tmake_file="$tmake_file pa/t-slibgcc-sjlj-ver"
+@@ -1094,7 +1139,7 @@
+ 			tmake_file="${tmake_file} i386/t-linux64"
+ 			need_64bit_hwint=yes
+ 			case X"${with_cpu}" in
+-			Xgeneric|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx|Xathlon64-sse3|Xk8-sse3|Xopteron-sse3)
++			Xgeneric|Xatom|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx|Xathlon64-sse3|Xk8-sse3|Xopteron-sse3)
+ 				;;
+ 			X)
+ 				if test x$with_cpu_64 = x; then
+@@ -1103,13 +1148,29 @@
+ 				;;
+ 			*)
+ 				echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2
+-				echo "generic core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx athlon64-sse3 k8-sse3 opteron-sse3" 1>&2
++				echo "generic atom core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx athlon64-sse3 k8-sse3 opteron-sse3" 1>&2
+ 				exit 1
+ 				;;
+ 			esac
+ 		else
+ 			tm_file="${tm_file} i386/linux.h"
+ 		fi
++		case ${target} in
++		*-wrs-linux*)
++			tm_file="$tm_file i386/wrs-linux.h"
++			tmake_file="$tmake_file i386/t-wrs-linux"
++			extra_options="${extra_options} i386/wrs-linux.opt"
++			tm_defines="${tm_defines} TARGET_FLEXLM"
++			;;
++		esac
++		if test x$enable_extra_sgxx_multilibs = xyes; then
++			tm_file="${tm_file} i386/cs-linux.h"
++			tmake_file="${tmake_file} i386/t-cs-linux"
++			extra_options="${extra_options} i386/cs-linux.opt"
++		elif test x$enable_extra_sgxxlite_multilibs = xyes; then
++			tm_file="${tm_file} i386/cs-linux-lite.h"
++			tmake_file="${tmake_file} i386/t-cs-linux-lite"
++		fi
+ 		;;
+ 	i[34567]86-*-knetbsd*-gnu) tm_file="${tm_file} i386/linux.h knetbsd-gnu.h i386/knetbsd-gnu.h" ;;
+ 	i[34567]86-*-kfreebsd*-gnu) tm_file="${tm_file} i386/linux.h kfreebsd-gnu.h i386/kfreebsd-gnu.h" ;;
+@@ -1214,7 +1275,7 @@
+ 		# libgcc/configure.ac instead.
+ 		need_64bit_hwint=yes
+ 		case X"${with_cpu}" in
+-		Xgeneric|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx|Xathlon64-sse3|Xk8-sse3|Xopteron-sse3)
++		Xgeneric|Xatom|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx|Xathlon64-sse3|Xk8-sse3|Xopteron-sse3)
+ 			;;
+ 		X)
+ 			if test x$with_cpu_64 = x; then
+@@ -1223,7 +1284,7 @@
+ 			;;
+ 		*)
+ 			echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2
+-			echo "generic core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx athlon64-sse3 k8-sse3 opteron-sse3" 1>&2
++			echo "generic atom core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx athlon64-sse3 k8-sse3 opteron-sse3" 1>&2
+ 			exit 1
+ 			;;
+ 		esac
+@@ -1271,6 +1332,23 @@
+ 		thread_file='posix'
+ 	fi
+ 	;;
++arm-*-mingw32*)
++        tm_file="arm/semi.h arm/aout.h ${tm_file} arm/coff.h dbxcoff.h arm/pe.h arm/wince-pe.h arm/mingw32.h"
++        tmake_file="${tmake_file} arm/t-arm arm/t-wince-pe arm/t-cygming arm/t-mingw32"
++        target_gtfiles="\$(srcdir)/config/arm/pe.c"
++        extra_options="${extra_options} arm/pe.opt arm/cygming.opt"
++        extra_objs="pe.o pe-stubs.o"
++        c_target_objs="${c_target_objs} msformat-c.o"
++        cxx_target_objs="pe-cxx.o msformat-c.o"
++        default_use_cxa_atexit=yes
++        case ${enable_threads} in
++          "" | yes | win32)
++          thread_file='win32'
++          tmake_file="${tmake_file} i386/t-gthr-win32"
++          ;;
++        esac
++        tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp"
++        ;;
+ i[34567]86-*-mingw* | x86_64-*-mingw*)
+ 	tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h dbxcoff.h i386/cygming.h i386/mingw32.h"
+ 	xm_file=i386/xm-mingw32.h
+@@ -1585,6 +1663,7 @@
+ 			tm_defines="${tm_defines} MIPS_ISA_DEFAULT=65"
+ 			;;
+ 	esac
++	tmake_file="$tmake_file mips/t-crtfm"
+ 	gnu_ld=yes
+ 	gas=yes
+ 	test x$with_llsc != x || with_llsc=yes
+@@ -1598,8 +1677,28 @@
+                 ;;
+         mipsisa32*)
+ 		tm_defines="${tm_defines} MIPS_ISA_DEFAULT=32"
++		;;
++	mips-wrs-linux-gnu) 
++		tmake_file="$tmake_file mips/t-linux64 mips/t-wrs-linux"
++		tm_file="$tm_file mips/linux64.h mips/octeon.h mips/wrs-linux.h"
++		tm_defines="$tm_defines TARGET_FLEXLM"
++		;;
++	mips-montavista*-linux-gnu)
++		tmake_file="$tmake_file mips/t-linux64 mips/t-montavista-linux"
++		tm_file="$tm_file mips/linux64.h mips/octeon.h mips/montavista-linux.h"
++		;;
++	*)
++		if test x$enable_extra_sgxx_multilibs = xyes; then
++		    tmake_file="$tmake_file mips/t-sgxx-linux"
++		    tm_file="$tm_file mips/cs-sgxx-linux.h"
++		elif test x$enable_extra_sgxxlite_multilibs = xyes; then
++		    tmake_file="$tmake_file mips/t-sgxxlite-linux"
++		    tm_file="$tm_file mips/cs-sgxxlite-linux.h"
++		fi
++		;;
+         esac
+ 	test x$with_llsc != x || with_llsc=yes
++	tmake_file="$tmake_file mips/t-crtfm"
+ 	;;
+ mips*-*-openbsd*)
+ 	tm_defines="${tm_defines} OBSD_HAS_DECLARE_FUNCTION_NAME OBSD_HAS_DECLARE_OBJECT OBSD_HAS_CORRECT_SPECS"
+@@ -1644,6 +1743,25 @@
+ 	    tm_defines="MIPS_ISA_DEFAULT=64 MIPS_ABI_DEFAULT=ABI_N32"
+ 	    ;;
+ 	esac
++	if [ "$enable_sgxx_sde_multilibs" = "yes" ]; then
++	  tm_file="$tm_file mips/sdemtk.h"
++	  extra_options="$extra_options mips/sdemtk.opt"
++	  tmake_file="$tmake_file mips/t-sgxx-sde"
++          # SourceryG++ is configured --with-arch=mips32r2.
++	  tm_defines="MIPS_ISA_DEFAULT=33 MIPS_ABI_DEFAULT=ABI_32"
++	fi
++	;;
++mips64octeon*-wrs-elf*)
++	tm_file="elfos.h ${tm_file} mips/elf.h mips/octeon.h mips/octeon-elf.h"
++	tmake_file=mips/t-octeon-elf
++	tm_defines="MIPS_ABI_DEFAULT=ABI_EABI MIPS_CPU_STRING_DEFAULT=\\\"octeon\\\" TARGET_FLEXLM"
++	default_use_cxa_atexit=no
++	;;
++mips64octeon*-montavista-elf*)
++	tm_file="elfos.h ${tm_file} mips/elf.h mips/octeon.h mips/octeon-elf.h"
++	tmake_file="mips/t-octeon-elf mips/t-montavista-elf"
++	tm_defines="MIPS_ABI_DEFAULT=ABI_EABI MIPS_CPU_STRING_DEFAULT=\\\"octeon\\\""
++	default_use_cxa_atexit=no
+ 	;;
+ mipsisa32-*-elf* | mipsisa32el-*-elf* | \
+ mipsisa32r2-*-elf* | mipsisa32r2el-*-elf* | \
+@@ -1757,12 +1875,12 @@
+ 		tm_file="rs6000/secureplt.h ${tm_file}"
+ 	fi
+ 	extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt"
+-	tmake_file="t-dfprules rs6000/t-fprules ${tmake_file} rs6000/t-ppccomm rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp"
++	tmake_file="t-dfprules rs6000/t-fprules ${tmake_file} rs6000/t-ppccomm rs6000/t-linux64 t-slibgcc-libgcc rs6000/t-fprules-softfp soft-fp/t-softfp"
+ 	;;
+ powerpc64-*-gnu*)
+ 	tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux64.h rs6000/gnu.h"
+ 	extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt"
+-	tmake_file="rs6000/t-fprules t-slibgcc-elf-ver t-gnu rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp"
++	tmake_file="rs6000/t-fprules t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp"
+ 	;;
+ powerpc-*-darwin*)
+ 	extra_options="${extra_options} rs6000/darwin.opt"
+@@ -1868,7 +1986,7 @@
+ 		tm_file="${tm_file} rs6000/linux.h"
+ 		;;
+ 	esac
+-	tmake_file="${tmake_file} rs6000/t-fprules-softfp soft-fp/t-softfp"
++	tmake_file="${tmake_file} t-slibgcc-libgcc rs6000/t-fprules-softfp soft-fp/t-softfp"
+ 	if test x${enable_secureplt} = xyes; then
+ 		tm_file="rs6000/secureplt.h ${tm_file}"
+ 	fi
+@@ -1876,14 +1994,14 @@
+ powerpc-*-gnu-gnualtivec*)
+ 	tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxaltivec.h rs6000/gnu.h"
+ 	extra_options="${extra_options} rs6000/sysv4.opt"
+-	tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-gnu rs6000/t-ppccomm"
++	tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu rs6000/t-ppccomm"
+ 	if test x$enable_threads = xyes; then
+ 		thread_file='posix'
+ 	fi
+ 	;;
+ powerpc-*-gnu*)
+ 	tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/gnu.h"
+-	tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-gnu rs6000/t-ppccomm"
++	tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu rs6000/t-ppccomm"
+ 	extra_options="${extra_options} rs6000/sysv4.opt"
+ 	if test x$enable_threads = xyes; then
+ 		thread_file='posix'
+@@ -2014,6 +2132,7 @@
+ sh-*-elf* | sh[12346l]*-*-elf* | \
+ sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \
+   sh-*-linux* | sh[2346lbe]*-*-linux* | \
++  sh-*-uclinux* | sh[12]-*-uclinux* | \
+   sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
+    sh64-*-netbsd* | sh64l*-*-netbsd*)
+ 	tmake_file="${tmake_file} sh/t-sh sh/t-elf"
+@@ -2028,9 +2147,14 @@
+ 		*)				   with_endian=big,little ;;
+ 		esac
+ 	fi
++	# TM_ENDIAN_CONFIG is used by t-sh to determine multilibs.
++	#  First word : the default endian.
++	#  Second word: the secondary endian (optional).
+ 	case ${with_endian} in
+-	big|little)	tmake_file="${tmake_file} sh/t-1e" ;;
+-	big,little|little,big) ;;
++	big)		TM_ENDIAN_CONFIG=mb ;;
++	little)		TM_ENDIAN_CONFIG=ml ;;
++	big,little)	TM_ENDIAN_CONFIG="mb ml" ;;
++	little,big)	TM_ENDIAN_CONFIG="ml mb" ;;
+ 	*)	echo "with_endian=${with_endian} not supported."; exit 1 ;;
+ 	esac
+ 	case ${with_endian} in
+@@ -2046,6 +2170,13 @@
+ 	sh*-*-linux*)	tmake_file="${tmake_file} sh/t-linux"
+ 			tm_file="${tm_file} linux.h sh/linux.h" ;;
+ 	sh*-*-netbsd*)	tm_file="${tm_file} netbsd.h netbsd-elf.h sh/netbsd-elf.h" ;;
++	sh*-*-uclinux*)	if test x$enable_fdpic != xno; then
++				tmake_file="${tmake_file} t-slibgcc-elf-ver"
++				tm_file="${tm_file} sh/uclinux.h"
++				tm_defines="$tm_defines FDPIC_DEFAULT=1"
++			else
++				tm_file="${tm_file} flat.h sh/uclinux.h"
++			fi ;;
+ 	sh*-superh-elf)	if test x$with_libgloss != xno; then
+ 				with_libgloss=yes
+ 				tm_file="${tm_file} sh/newlib.h"
+@@ -2071,6 +2202,7 @@
+ 	*-*-netbsd)
+                 tmake_file="${tmake_file} sh/t-netbsd"
+ 		;;
++	sh*-*-uclinux*)	tmake_file="${tmake_file} sh/t-uclinux" ;;
+ 	sh64*-*-linux*)
+ 		tmake_file="${tmake_file} sh/t-sh64 sh/t-linux64"
+ 		tm_file="${tm_file} sh/sh64.h"
+@@ -2137,7 +2269,7 @@
+ 	*)	echo "with_cpu=$with_cpu not supported"; exit 1 ;;
+ 	esac
+ 	sh_multilibs=${with_multilib_list}
+-	if test x${sh_multilibs} = x ; then
++	if test "$sh_multilibs" = "default" ; then
+ 		case ${target} in
+ 		sh64-superh-linux* | \
+ 		sh[1234]*)	sh_multilibs=${sh_cpu_target} ;;
+@@ -2153,28 +2285,43 @@
+ 	fi
+ 	target_cpu_default=SELECT_`echo ${sh_cpu_default}|tr abcdefghijklmnopqrstuvwxyz- ABCDEFGHIJKLMNOPQRSTUVWXYZ_`
+ 	tm_defines=${tm_defines}' SH_MULTILIB_CPU_DEFAULT=\"'`echo $sh_cpu_default|sed s/sh/m/`'\"'
+-	sh_multilibs=`echo $sh_multilibs,$sh_cpu_default | sed -e 's/[ 	,/][ 	,]*/ /g' -e 's/ $//' -e 's/^m/sh/' -e 's/ m/ sh/g' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ_ abcdefghijklmnopqrstuvwxyz-`
++	tm_defines="$tm_defines SUPPORT_`echo $sh_cpu_default | sed 's/^m/sh/' | tr abcdefghijklmnopqrstuvwxyz- ABCDEFGHIJKLMNOPQRSTUVWXYZ_`=1"
++	sh_multilibs=`echo $sh_multilibs | sed -e 's/,/ /g' -e 's/^sh/m/i' -e 's/ sh/ m/gi' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ_ abcdefghijklmnopqrstuvwxyz-`
+ 	for sh_multilib in ${sh_multilibs}; do
+ 		case ${sh_multilib} in
+-		sh1 | sh2 | sh2e | sh3 | sh3e | \
+-		sh4 | sh4-single | sh4-single-only | sh4-nofpu | sh4-300 |\
+-		sh4a | sh4a-single | sh4a-single-only | sh4a-nofpu | sh4al | \
+-		sh2a | sh2a-single | sh2a-single-only | sh2a-nofpu | \
+-		sh5-64media | sh5-64media-nofpu | \
+-		sh5-32media | sh5-32media-nofpu | \
+-		sh5-compact | sh5-compact-nofpu)
+-			tmake_file="${tmake_file} sh/t-mlib-${sh_multilib}"
+-			tm_defines="$tm_defines SUPPORT_`echo $sh_multilib|tr abcdefghijklmnopqrstuvwxyz- ABCDEFGHIJKLMNOPQRSTUVWXYZ_`=1"
+-			;;
++		m1 | m2 | m2e | m3 | m3e | \
++		m4 | m4-single | m4-single-only | m4-nofpu | m4-300 |\
++		m4a | m4a-single | m4a-single-only | m4a-nofpu | m4al | \
++		m2a | m2a-single | m2a-single-only | m2a-nofpu | \
++		m5-64media | m5-64media-nofpu | \
++		m5-32media | m5-32media-nofpu | \
++		m5-compact | m5-compact-nofpu)
++			# TM_MULTILIB_CONFIG is used by t-sh for the non-endian multilib definition
++			# It is passed to MULTIILIB_OPTIONS verbatim.
++			TM_MULTILIB_CONFIG="${TM_MULTILIB_CONFIG}/${sh_multilib}"
++			tm_defines="$tm_defines SUPPORT_`echo $sh_multilib | sed 's/^m/sh/' | tr abcdefghijklmnopqrstuvwxyz- ABCDEFGHIJKLMNOPQRSTUVWXYZ_`=1"
++			;;
++		\!*)	# TM_MULTILIB_EXCEPTIONS_CONFIG is used by t-sh
++			# It is passed the MULTILIB_EXCEPTIONS verbatim.
++			TM_MULTILIB_EXCEPTIONS_CONFIG="${TM_MULTILIB_EXCEPTIONS_CONFIG} `echo $sh_multilib | sed 's/^!//'`" ;;
+ 		*)
+ 			echo "with_multilib_list=${sh_multilib} not supported."
+ 			exit 1
+ 			;;
+ 		esac
+ 	done
++	TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's:^/::'`
+ 	if test x${enable_incomplete_targets} = xyes ; then
+ 		tm_defines="$tm_defines SUPPORT_SH1=1 SUPPORT_SH2E=1 SUPPORT_SH4=1 SUPPORT_SH4_SINGLE=1 SUPPORT_SH2A=1 SUPPORT_SH2A_SINGLE=1 SUPPORT_SH5_32MEDIA=1 SUPPORT_SH5_32MEDIA_NOFPU=1 SUPPORT_SH5_64MEDIA=1 SUPPORT_SH5_64MEDIA_NOFPU=1"
+ 	fi
++	if test x$enable_extra_sgxxlite_multilibs = xyes \
++	   || test x$enable_extra_sgxx_multilibs = xyes; then
++		# SG++ and Lite do not differ, as yet, so use the Lite files for both
++		tm_file="$tm_file sh/cs-sgxxlite-linux.h"
++		tmake_file="$tmake_file sh/t-sgxxlite-linux"
++	fi
++	tm_file="$tm_file ./sysroot-suffix.h"
++	tmake_file="$tmake_file t-sysroot-suffix"
+ 	;;
+ sh-*-rtems*)
+ 	tmake_file="sh/t-sh sh/t-elf t-rtems sh/t-rtems"
+@@ -2213,6 +2360,11 @@
+ 		tm_file="${tm_file} sparc/linux.h"
+ 	fi
+ 	tmake_file="${tmake_file} sparc/t-crtfm"
++	case ${target} in
++	sparc-wrs-linux-gnu)
++		tm_defines="$tm_defines BIARCH_32BIT_DEFAULT TARGET_FLEXLM"
++		;;
++	esac
+ 	;;
+ sparc-*-rtems*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h"
+@@ -2677,8 +2829,8 @@
+ 		| armv[23456] | armv2a | armv3m | armv4t | armv5t \
+ 		| armv5te | armv6j |armv6k | armv6z | armv6zk | armv6-m \
+ 		| armv7 | armv7-a | armv7-r | armv7-m \
+-		| iwmmxt | ep9312)
+-			# OK
++		| iwmmxt | ep9312 | marvell-f )
++ 			# OK
+ 			;;
+ 		*)
+ 			echo "Unknown arch used in --with-arch=$with_arch" 1>&2
+@@ -2699,7 +2851,10 @@
+ 
+ 		case "$with_fpu" in
+ 		"" \
+-		| fpa | fpe2 | fpe3 | maverick | vfp | vfp3 | vfpv3 | vfpv3-d16 | neon )
++		| fpa | fpe2 | fpe3 | maverick \
++		| vfp | vfp3 | vfpv3 | vfpv3-fp16 | vfpv3-d16 \
++		| vfpv3-d16-fp16 | vfpv4 | vfpv4-d16 | fpv4-sp-d16 \
++		| neon | neon-fp16 | neon-vfpv4 )
+ 			# OK
+ 			;;
+ 		*)
+@@ -2836,7 +2991,7 @@
+ 				esac
+ 				# OK
+ 				;;
+-			"" | amdfam10 | barcelona | k8-sse3 | opteron-sse3 | athlon64-sse3 | k8 | opteron | athlon64 | athlon-fx | nocona | core2 | generic)
++			"" | amdfam10 | barcelona | k8-sse3 | opteron-sse3 | athlon64-sse3 | k8 | opteron | athlon64 | athlon-fx | nocona | core2 | atom | generic)
+ 				# OK
+ 				;;
+ 			*)
+@@ -2848,7 +3003,7 @@
+ 		;;
+ 
+ 	mips*-*-*)
+-		supported_defaults="abi arch float tune divide llsc mips-plt"
++		supported_defaults="abi arch arch_32 arch_64 float tune tune_32 tune_64 divide llsc mips-plt"
+ 
+ 		case ${with_float} in
+ 		"" | soft | hard)
+@@ -3110,10 +3265,16 @@
+ 			tm_defines="US_SOFTWARE_GOFAST $tm_defines"
+ 			tmake_file="mips/t-gofast $tmake_file"
+ 		else
+-			tmake_file="mips/t-mips $tmake_file"
++			case ${target} in
++				mips*-sde-elf*)
++					tmake_file="mips/t-fprules-softfp soft-fp/t-softfp $tmake_file"
++					;;
++				*)
++					tmake_file="mips/t-mips $tmake_file"
++					;;
++			esac
+ 		fi
+ 		;;
+-
+ 	powerpc*-*-* | rs6000-*-*)
+ 		# FIXME: The PowerPC port uses the value set at compile time,
+ 		# although it's only cosmetic.
+@@ -3164,6 +3325,22 @@
+ 		;;
+ esac
+ 
++case ${target} in
++    *-eglibc-*-*)
++	tmake_file="${tmake_file} t-eglibc"
++
++	case ${target} in
++	    arm-*)
++	     # ARM already includes below.
++		;;
++	    *)
++		tmake_file="${tmake_file} t-sysroot-suffix"
++		tm_file="${tm_file} ./sysroot-suffix.h"
++		;;
++	esac
++	;;
++esac
++
+ t=
+ all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 tune_64 schedule float mode fpu divide llsc mips-plt"
+ for option in $all_defaults
+--- a/src/gcc/config.in
++++ b/src/gcc/config.in
+@@ -101,6 +101,12 @@
+ #endif
+ 
+ 
++/* Define if gcc should always pass --build-id to linker. */
++#ifndef USED_FOR_TARGET
++#undef ENABLE_LD_BUILDID
++#endif
++
++
+ /* Define to 1 if translation of program messages to the user's native
+    language is requested. */
+ #ifndef USED_FOR_TARGET
+@@ -108,6 +114,12 @@
+ #endif
+ 
+ 
++/* Define to warn for use of native system header directories */
++#ifndef USED_FOR_TARGET
++#undef ENABLE_POISON_SYSTEM_DIRECTORIES
++#endif
++
++
+ /* Define if you want all operations on RTL (the basic data structure of the
+    optimizer and back end) to be checked for dynamic type safety at runtime.
+    This is quite expensive. */
+@@ -833,6 +845,13 @@
+ #endif
+ 
+ 
++/* Define if your assembler supports specifying the alignment of objects
++   allocated using the GAS .comm command. */
++#ifndef USED_FOR_TARGET
++#undef HAVE_GAS_ALIGNED_COMM
++#endif
++
++
+ /* Define if your assembler supports .balign and .p2align. */
+ #ifndef USED_FOR_TARGET
+ #undef HAVE_GAS_BALIGN_AND_P2ALIGN
+@@ -1032,6 +1051,12 @@
+ #endif
+ 
+ 
++/* Define if your linker supports --build-id. */
++#ifndef USED_FOR_TARGET
++#undef HAVE_LD_BUILDID
++#endif
++
++
+ /* Define if your linker supports --demangle option. */
+ #ifndef USED_FOR_TARGET
+ #undef HAVE_LD_DEMANGLE
+--- a/src/gcc/configure
++++ b/src/gcc/configure
+@@ -458,7 +458,7 @@
+ # include <unistd.h>
+ #endif"
+ 
+-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical build_libsubdir build_subdir host_subdir target_subdir GENINSRC CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT GNATBIND ac_ct_GNATBIND GNATMAKE ac_ct_GNATMAKE NO_MINUS_C_MINUS_O OUTPUT_OPTION CPP EGREP loose_warn strict_warn warn_cflags nocommon_flag TREEBROWSER valgrind_path valgrind_path_defines valgrind_command coverage_flags enable_multilib enable_decimal_float enable_fixed_point enable_shared TARGET_SYSTEM_ROOT TARGET_SYSTEM_ROOT_DEFINE CROSS_SYSTEM_HEADER_DIR onestep PKGVERSION REPORT_BUGS_TO REPORT_BUGS_TEXI datarootdir docdir htmldir SET_MAKE AWK LN_S LN RANLIB ac_ct_RANLIB ranlib_flags INSTALL INSTALL_PROGRAM INSTALL_DATA make_compare_target have_mktemp_command MAKEINFO BUILD_INFO GENERATED_MANPAGES FLEX BISON NM AR COLLECT2_LIBS GNAT_LIBEXC LDEXP_LIB TARGET_GETGROUPS_T LIBICONV LTLIBICONV LIBICONV_DEP manext objext gthread_flags extra_modes_file extra_opt_files USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT CROSS ALL SYSTEM_HEADER_DIR inhibit_libc CC_FOR_BUILD BUILD_CFLAGS BUILD_LDFLAGS STMP_FIXINC STMP_FIXPROTO collect2 LIBTOOL SED FGREP GREP LD DUMPBIN ac_ct_DUMPBIN OBJDUMP ac_ct_OBJDUMP ac_ct_AR STRIP ac_ct_STRIP lt_ECHO DSYMUTIL ac_ct_DSYMUTIL NMEDIT ac_ct_NMEDIT LIPO ac_ct_LIPO OTOOL ac_ct_OTOOL OTOOL64 ac_ct_OTOOL64 objdir enable_fast_install gcc_cv_as ORIGINAL_AS_FOR_TARGET gcc_cv_ld ORIGINAL_LD_FOR_TARGET gcc_cv_nm ORIGINAL_NM_FOR_TARGET gcc_cv_objdump gcc_cv_readelf libgcc_visibility GGC zlibdir zlibinc MAINT gcc_tooldir dollar slibdir subdirs srcdir all_compilers all_gtfiles all_lang_makefrags all_lang_makefiles all_languages all_selected_languages build_exeext build_install_headers_dir build_xm_file_list build_xm_include_list build_xm_defines build_file_translate check_languages cpp_install_dir xmake_file tmake_file extra_gcc_objs extra_headers_list extra_objs extra_parts extra_passes extra_programs float_h_file gcc_config_arguments gcc_gxx_include_dir host_exeext host_xm_file_list host_xm_include_list host_xm_defines out_host_hook_obj install lang_opt_files lang_specs_files lang_tree_files local_prefix md_file objc_boehm_gc out_file out_object_file thread_file tm_file_list tm_include_list tm_defines tm_p_file_list tm_p_include_list xm_file_list xm_include_list xm_defines c_target_objs cxx_target_objs fortran_target_objs target_cpu_default GMPLIBS GMPINC PPLLIBS PPLINC CLOOGLIBS CLOOGINC LIBOBJS LTLIBOBJS'
++ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical build_libsubdir build_subdir host_subdir target_subdir GENINSRC CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT GNATBIND ac_ct_GNATBIND GNATMAKE ac_ct_GNATMAKE NO_MINUS_C_MINUS_O OUTPUT_OPTION CPP EGREP loose_warn strict_warn warn_cflags nocommon_flag TREEBROWSER valgrind_path valgrind_path_defines valgrind_command coverage_flags enable_multilib enable_decimal_float enable_fixed_point enable_shared TARGET_SYSTEM_ROOT TARGET_SYSTEM_ROOT_DEFINE CROSS_SYSTEM_HEADER_DIR EGLIBC_CONFIGS CONFIGURE_SPECS onestep PKGVERSION REPORT_BUGS_TO REPORT_BUGS_TEXI datarootdir docdir htmldir SET_MAKE AWK LN_S LN RANLIB ac_ct_RANLIB ranlib_flags INSTALL INSTALL_PROGRAM INSTALL_DATA make_compare_target have_mktemp_command MAKEINFO BUILD_INFO GENERATED_MANPAGES FLEX BISON NM AR COLLECT2_LIBS GNAT_LIBEXC LDEXP_LIB TARGET_GETGROUPS_T LIBICONV LTLIBICONV LIBICONV_DEP manext objext gthread_flags extra_modes_file extra_opt_files USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT CROSS ALL SYSTEM_HEADER_DIR inhibit_libc CC_FOR_BUILD BUILD_CFLAGS BUILD_LDFLAGS STMP_FIXINC STMP_FIXPROTO collect2 LIBTOOL SED FGREP GREP LD DUMPBIN ac_ct_DUMPBIN OBJDUMP ac_ct_OBJDUMP ac_ct_AR STRIP ac_ct_STRIP lt_ECHO DSYMUTIL ac_ct_DSYMUTIL NMEDIT ac_ct_NMEDIT LIPO ac_ct_LIPO OTOOL ac_ct_OTOOL OTOOL64 ac_ct_OTOOL64 objdir enable_fast_install gcc_cv_as ORIGINAL_AS_FOR_TARGET gcc_cv_ld ORIGINAL_LD_FOR_TARGET gcc_cv_nm ORIGINAL_NM_FOR_TARGET gcc_cv_objdump gcc_cv_readelf libgcc_visibility GGC zlibdir zlibinc MAINT gcc_tooldir dollar slibdir subdirs srcdir all_compilers all_gtfiles all_lang_makefrags all_lang_makefiles all_languages all_selected_languages build_exeext build_install_headers_dir build_xm_file_list build_xm_include_list build_xm_defines build_file_translate check_languages cpp_install_dir xmake_file tmake_file TM_ENDIAN_CONFIG TM_MULTILIB_CONFIG TM_MULTILIB_EXCEPTIONS_CONFIG extra_gcc_objs extra_headers_list extra_objs extra_parts extra_passes extra_programs float_h_file gcc_config_arguments gcc_gxx_include_dir host_exeext host_xm_file_list host_xm_include_list host_xm_defines out_host_hook_obj install lang_opt_files lang_specs_files lang_tree_files local_prefix md_file objc_boehm_gc out_file out_object_file thread_file tm_file_list tm_include_list tm_defines tm_p_file_list tm_p_include_list xm_file_list xm_include_list xm_defines c_target_objs cxx_target_objs fortran_target_objs target_cpu_default GMPLIBS GMPINC PPLLIBS PPLINC CLOOGLIBS CLOOGINC LIBOBJS LTLIBOBJS'
+ ac_subst_files='language_hooks'
+ ac_pwd=`pwd`
+ 
+@@ -1078,12 +1078,16 @@
+   --enable-fast-install[=PKGS]
+                           optimize for fast installation [default=yes]
+   --disable-libtool-lock  avoid locking (might break parallel builds)
++  --enable-linker-build-id
++                          compiler will always pass --build-id to linker
+   --enable-maintainer-mode
+                           enable make rules and dependencies not useful
+                           (and sometimes confusing) to the casual installer
+   --enable-version-specific-runtime-libs
+                           specify that runtime libraries should be
+                           installed in a compiler-specific directory
++  --enable-poison-system-directories
++                          warn for use of native system header directories
+ 
+ Optional Packages:
+   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+@@ -1105,8 +1109,13 @@
+   --with-build-sysroot=sysroot
+                           use sysroot as the system root during the build
+   --with-sysroot=DIR Search for usr/lib, usr/include, et al, within DIR.
+-  --with-pkgversion=PKG   Use PKG in the version string in place of "GCC"
++  --with-eglibc-configs=CONFIGS
++                          build multilibs for these EGLIBC configurations
++  --with-specs=SPECS      add SPECS to driver command-line processing
++  --with-pkgversion=PKG   Use PKG in the version string in place of "Linaro
++                          GCC `cat $srcdir/LINARO-VERSION`"
+   --with-bugurl=URL       Direct users to URL to report a bug
++  --with-multilib-list    Select multilibs (SH only)
+   --with-gnu-ld           assume the C compiler uses GNU ld default=no
+   --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
+   --without-libiconv-prefix     don't search for libiconv in includedir and libdir
+@@ -8042,6 +8051,28 @@
+ 
+ 
+ 
++
++# Check whether --with-eglibc-configs or --without-eglibc-configs was given.
++if test "${with_eglibc_configs+set}" = set; then
++  withval="$with_eglibc_configs"
++  EGLIBC_CONFIGS=$withval
++else
++  EGLIBC_CONFIGS=
++
++fi;
++
++
++
++# Check whether --with-specs or --without-specs was given.
++if test "${with_specs+set}" = set; then
++  withval="$with_specs"
++  CONFIGURE_SPECS=$withval
++else
++  CONFIGURE_SPECS=
++
++fi;
++
++
+ # Build with intermodule optimisations
+ # Check whether --enable-intermodule or --disable-intermodule was given.
+ if test "${enable_intermodule+set}" = set; then
+@@ -8068,7 +8099,7 @@
+       *)   PKGVERSION="($withval) " ;;
+      esac
+ else
+-  PKGVERSION="(GCC) "
++  PKGVERSION="(Linaro GCC `cat $srcdir/LINARO-VERSION`) "
+ 
+ fi;
+ 
+@@ -8137,6 +8168,15 @@
+ 
+ 
+ 
++
++# Check whether --with-multilib-list or --without-multilib-list was given.
++if test "${with_multilib_list+set}" = set; then
++  withval="$with_multilib_list"
++  :
++else
++  with_multilib_list=default
++fi;
++
+ # -------------------------
+ # Checks for other programs
+ # -------------------------
+@@ -14509,13 +14549,13 @@
+ else
+   lt_cv_nm_interface="BSD nm"
+   echo "int some_variable = 0;" > conftest.$ac_ext
+-  (eval echo "\"\$as_me:14512: $ac_compile\"" >&5)
++  (eval echo "\"\$as_me:14552: $ac_compile\"" >&5)
+   (eval "$ac_compile" 2>conftest.err)
+   cat conftest.err >&5
+-  (eval echo "\"\$as_me:14515: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
++  (eval echo "\"\$as_me:14555: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+   cat conftest.err >&5
+-  (eval echo "\"\$as_me:14518: output\"" >&5)
++  (eval echo "\"\$as_me:14558: output\"" >&5)
+   cat conftest.out >&5
+   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+     lt_cv_nm_interface="MS dumpbin"
+@@ -14911,6 +14951,10 @@
+   lt_cv_file_magic_cmd='$OBJDUMP -f'
+   ;;
+ 
++nucleuseabi*)
++  lt_cv_deplibs_check_method=pass_all
++  ;;
++
+ darwin* | rhapsody*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+@@ -15672,7 +15716,7 @@
+   ;;
+ *-*-irix6*)
+   # Find out which ABI we are using.
+-  echo '#line 15675 "configure"' > conftest.$ac_ext
++  echo '#line 15719 "configure"' > conftest.$ac_ext
+   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+@@ -16971,11 +17015,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:16974: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:17018: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:16978: \$? = $ac_status" >&5
++   echo "$as_me:17022: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -17310,11 +17354,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:17313: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:17357: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:17317: \$? = $ac_status" >&5
++   echo "$as_me:17361: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -17415,11 +17459,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:17418: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:17462: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:17422: \$? = $ac_status" >&5
++   echo "$as_me:17466: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -17470,11 +17514,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:17473: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:17517: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:17477: \$? = $ac_status" >&5
++   echo "$as_me:17521: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -19369,6 +19413,21 @@
+   shlibpath_overrides_runpath=yes
+   ;;
+ 
++nucleus*)
++  case $host_vendor in
++    samsung)
++      version_type=linux
++      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
++      soname_spec='$libname${shared_ext}$major'
++      shlibpath_var=LD_LIBRARY_PATH
++      hardcode_into_libs=yes
++      ;;
++    *)
++      dynamic_linker=no
++      ;;
++  esac
++  ;;
++
+ *nto* | *qnx*)
+   version_type=qnx
+   need_lib_prefix=no
+@@ -20282,7 +20341,7 @@
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 20285 "configure"
++#line 20344 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -20378,7 +20437,7 @@
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 20381 "configure"
++#line 20440 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -22188,6 +22247,22 @@
+ 	tls_first_minor=16
+ 	tls_as_opt='-32 --fatal-warnings'
+ 	;;
++  m68k-*-*)
++    conftest_s='
++	.section .tdata,"awT",@progbits
++x:
++	.word 2
++	.text
++foo:
++	move.l x@TLSGD(%a5),%a0
++	move.l x@TLSLDM(%a5),%a0
++	move.l x@TLSLDO(%a5),%a0
++	move.l x@TLSIE(%a5),%a0
++	move.l x@TLSLE(%a5),%a0'
++	tls_first_major=2
++	tls_first_minor=19
++	tls_as_opt='--fatal-warnings'
++	;;
+   powerpc-*-*)
+     conftest_s='
+ 	.section ".tdata","awT",@progbits
+@@ -22819,6 +22894,44 @@
+   i[34567]86-*-* | x86_64-*-*)
+     case $target_os in
+       cygwin* | pe | mingw32*)
++	# Recent binutils allows the three-operand form of ".comm" on PE.  This
++	# definition is used unconditionally to initialise the default state of
++	# the target option variable that governs usage of the feature.
++	echo "$as_me:$LINENO: checking assembler for .comm with alignment" >&5
++echo $ECHO_N "checking assembler for .comm with alignment... $ECHO_C" >&6
++if test "${gcc_cv_as_comm_has_align+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  gcc_cv_as_comm_has_align=no
++    if test $in_tree_gas = yes; then
++    if test $gcc_cv_gas_vers -ge `expr \( \( 2 \* 1000 \) + 19 \) \* 1000 + 52`
++  then gcc_cv_as_comm_has_align=yes
++fi
++  elif test x$gcc_cv_as != x; then
++    echo '.comm foo,1,32' > conftest.s
++    if { ac_try='$gcc_cv_as  -o conftest.o conftest.s >&5'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }
++    then
++	gcc_cv_as_comm_has_align=yes
++    else
++      echo "configure: failed program was" >&5
++      cat conftest.s >&5
++    fi
++    rm -f conftest.o conftest.s
++  fi
++fi
++echo "$as_me:$LINENO: result: $gcc_cv_as_comm_has_align" >&5
++echo "${ECHO_T}$gcc_cv_as_comm_has_align" >&6
++
++
++cat >>confdefs.h <<_ACEOF
++#define HAVE_GAS_ALIGNED_COMM `if test $gcc_cv_as_comm_has_align = yes; then echo 1; else echo 0; fi`
++_ACEOF
++
+ 	# Used for DWARF 2 in PE
+ 	echo "$as_me:$LINENO: checking assembler for .secrel32 relocs" >&5
+ echo $ECHO_N "checking assembler for .secrel32 relocs... $ECHO_C" >&6
+@@ -24357,6 +24470,56 @@
+ 
+ fi
+ 
++echo "$as_me:$LINENO: checking linker --build-id support" >&5
++echo $ECHO_N "checking linker --build-id support... $ECHO_C" >&6
++if test "${gcc_cv_ld_buildid+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  gcc_cv_ld_buildid=no
++  if test $in_tree_ld = yes ; then
++    if test "$gcc_cv_gld_major_version" -eq 2 -a \
++       "$gcc_cv_gld_minor_version" -ge 18 -o \
++       "$gcc_cv_gld_major_version" -gt 2 \
++       && test $in_tree_ld_is_elf = yes; then
++      gcc_cv_ld_buildid=yes
++    fi
++  elif test x$gcc_cv_ld != x; then
++    if $gcc_cv_ld --help 2>/dev/null | grep build-id > /dev/null; then
++      gcc_cv_ld_buildid=yes
++    fi
++  fi
++fi
++echo "$as_me:$LINENO: result: $gcc_cv_ld_buildid" >&5
++echo "${ECHO_T}$gcc_cv_ld_buildid" >&6
++if test x"$gcc_cv_ld_buildid" = xyes; then
++
++cat >>confdefs.h <<\_ACEOF
++#define HAVE_LD_BUILDID 1
++_ACEOF
++
++fi
++
++# Check whether --enable-linker-build-id or --disable-linker-build-id was given.
++if test "${enable_linker_build_id+set}" = set; then
++  enableval="$enable_linker_build_id"
++
++else
++  enable_linker_build_id=no
++fi;
++
++if test x"$enable_linker_build_id" = xyes; then
++  if test x"$gcc_cv_ld_buildid" = xyes; then
++
++cat >>confdefs.h <<\_ACEOF
++#define ENABLE_LD_BUILDID 1
++_ACEOF
++
++  else
++    { echo "$as_me:$LINENO: WARNING: --build-id is not supported by your linker; --enable-linker-build-id ignored" >&5
++echo "$as_me: WARNING: --build-id is not supported by your linker; --enable-linker-build-id ignored" >&2;}
++  fi
++fi
++
+ echo "$as_me:$LINENO: checking linker --sysroot support" >&5
+ echo $ECHO_N "checking linker --sysroot support... $ECHO_C" >&6
+ if test "${gcc_cv_ld_sysroot+set}" = set; then
+@@ -24403,7 +24566,9 @@
+     case "$target" in
+        *-*-linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu)
+       if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
+-	if test "x$with_sysroot" = x; then
++	if test "x$with_headers" != x; then
++	  glibc_header_dir=$with_headers
++	elif test "x$with_sysroot" = x; then
+ 	  glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
+ 	elif test "x$with_build_sysroot" != "x"; then
+ 	  glibc_header_dir="${with_build_sysroot}/usr/include"
+@@ -24415,6 +24580,9 @@
+       else
+ 	glibc_header_dir=/usr/include
+       fi
++      if test "x$enable_libssp" = "xno"; then
++	gcc_cv_libc_provides_ssp=yes
++      fi
+       # glibc 2.4 and later provides __stack_chk_fail and
+       # either __stack_chk_guard, or TLS access to stack guard canary.
+       if test -f $glibc_header_dir/features.h \
+@@ -24799,8 +24967,8 @@
+ rm -f Make-hooks
+ touch Make-hooks
+ target_list="all.cross start.encap rest.encap tags \
+-	install-common install-man install-info install-pdf dvi pdf \
+-	html uninstall info man srcextra srcman srcinfo \
++	install-common install-man install-info install-pdf install-html dvi \
++	pdf html uninstall info man srcextra srcman srcinfo \
+ 	mostlyclean clean distclean maintainer-clean"
+ 
+ for t in $target_list
+@@ -24891,6 +25059,21 @@
+ fi;
+ 
+ 
++# Check whether --enable-poison-system-directories or --disable-poison-system-directories was given.
++if test "${enable_poison_system_directories+set}" = set; then
++  enableval="$enable_poison_system_directories"
++
++else
++  enable_poison_system_directories=no
++fi;
++if test "x${enable_poison_system_directories}" = "xyes"; then
++
++cat >>confdefs.h <<\_ACEOF
++#define ENABLE_POISON_SYSTEM_DIRECTORIES 1
++_ACEOF
++
++fi
++
+ # Substitute configuration variables
+ 
+ 
+@@ -24949,6 +25132,9 @@
+ 
+ 
+ 
++
++
++
+ # Echo link setup.
+ if test x${build} = x${host} ; then
+   if test x${host} = x${target} ; then
+@@ -25667,6 +25853,8 @@
+ s,@TARGET_SYSTEM_ROOT@,$TARGET_SYSTEM_ROOT,;t t
+ s,@TARGET_SYSTEM_ROOT_DEFINE@,$TARGET_SYSTEM_ROOT_DEFINE,;t t
+ s,@CROSS_SYSTEM_HEADER_DIR@,$CROSS_SYSTEM_HEADER_DIR,;t t
++s,@EGLIBC_CONFIGS@,$EGLIBC_CONFIGS,;t t
++s,@CONFIGURE_SPECS@,$CONFIGURE_SPECS,;t t
+ s,@onestep@,$onestep,;t t
+ s,@PKGVERSION@,$PKGVERSION,;t t
+ s,@REPORT_BUGS_TO@,$REPORT_BUGS_TO,;t t
+@@ -25786,6 +25974,9 @@
+ s,@cpp_install_dir@,$cpp_install_dir,;t t
+ s,@xmake_file@,$xmake_file,;t t
+ s,@tmake_file@,$tmake_file,;t t
++s,@TM_ENDIAN_CONFIG@,$TM_ENDIAN_CONFIG,;t t
++s,@TM_MULTILIB_CONFIG@,$TM_MULTILIB_CONFIG,;t t
++s,@TM_MULTILIB_EXCEPTIONS_CONFIG@,$TM_MULTILIB_EXCEPTIONS_CONFIG,;t t
+ s,@extra_gcc_objs@,$extra_gcc_objs,;t t
+ s,@extra_headers_list@,$extra_headers_list,;t t
+ s,@extra_objs@,$extra_objs,;t t
+--- a/src/gcc/configure.ac
++++ b/src/gcc/configure.ac
+@@ -770,6 +770,22 @@
+ AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
+ AC_SUBST(CROSS_SYSTEM_HEADER_DIR)
+ 
++AC_ARG_WITH(eglibc-configs,
++  [AS_HELP_STRING([--with-eglibc-configs=CONFIGS],
++                  [build multilibs for these EGLIBC configurations])],
++  [EGLIBC_CONFIGS=$withval],
++  [EGLIBC_CONFIGS=]
++)
++AC_SUBST(EGLIBC_CONFIGS)
++
++AC_ARG_WITH(specs,
++  [AS_HELP_STRING([--with-specs=SPECS],
++                  [add SPECS to driver command-line processing])],
++  [CONFIGURE_SPECS=$withval],
++  [CONFIGURE_SPECS=]
++)
++AC_SUBST(CONFIGURE_SPECS)
++
+ # Build with intermodule optimisations
+ AC_ARG_ENABLE(intermodule,
+ [  --enable-intermodule    build the compiler in one step],
+@@ -780,7 +796,7 @@
+ [onestep=""])
+ AC_SUBST(onestep)
+ 
+-ACX_PKGVERSION([GCC])
++ACX_PKGVERSION([Linaro GCC `cat $srcdir/LINARO-VERSION`])
+ ACX_BUGURL([http://gcc.gnu.org/bugs.html])
+ 
+ # Sanity check enable_languages in case someone does not run the toplevel
+@@ -810,6 +826,11 @@
+ AC_SUBST(docdir)
+ AC_SUBST(htmldir)
+ 
++AC_ARG_WITH(multilib-list,
++[  --with-multilib-list    Select multilibs (SH only)],
++:,
++with_multilib_list=default)
++
+ # -------------------------
+ # Checks for other programs
+ # -------------------------
+@@ -2631,6 +2652,22 @@
+ 	tls_first_minor=16
+ 	tls_as_opt='-32 --fatal-warnings'
+ 	;;
++  m68k-*-*)
++    conftest_s='
++	.section .tdata,"awT",@progbits
++x:
++	.word 2
++	.text
++foo:
++	move.l x@TLSGD(%a5),%a0
++	move.l x@TLSLDM(%a5),%a0
++	move.l x@TLSLDO(%a5),%a0
++	move.l x@TLSIE(%a5),%a0
++	move.l x@TLSLE(%a5),%a0'
++	tls_first_major=2
++	tls_first_minor=19
++	tls_as_opt='--fatal-warnings'
++	;;
+   powerpc-*-*)
+     conftest_s='
+ 	.section ".tdata","awT",@progbits
+@@ -2999,6 +3036,15 @@
+ changequote([,])dnl
+     case $target_os in
+       cygwin* | pe | mingw32*)
++	# Recent binutils allows the three-operand form of ".comm" on PE.  This
++	# definition is used unconditionally to initialise the default state of
++	# the target option variable that governs usage of the feature.
++	gcc_GAS_CHECK_FEATURE([.comm with alignment], gcc_cv_as_comm_has_align,
++	 [2,19,52],,[.comm foo,1,32])
++	AC_DEFINE_UNQUOTED(HAVE_GAS_ALIGNED_COMM,
++	  [`if test $gcc_cv_as_comm_has_align = yes; then echo 1; else echo 0; fi`],
++	  [Define if your assembler supports specifying the alignment
++	   of objects allocated using the GAS .comm command.])
+ 	# Used for DWARF 2 in PE
+ 	gcc_GAS_CHECK_FEATURE([.secrel32 relocs],
+ 	  gcc_cv_as_ix86_pe_secrel32,
+@@ -3598,6 +3644,41 @@
+   [Define if your linker supports the *_sol2 emulations.])
+ fi
+ 
++AC_CACHE_CHECK(linker --build-id support,
++  gcc_cv_ld_buildid,
++  [gcc_cv_ld_buildid=no
++  if test $in_tree_ld = yes ; then
++    if test "$gcc_cv_gld_major_version" -eq 2 -a \
++       "$gcc_cv_gld_minor_version" -ge 18 -o \
++       "$gcc_cv_gld_major_version" -gt 2 \
++       && test $in_tree_ld_is_elf = yes; then
++      gcc_cv_ld_buildid=yes
++    fi
++  elif test x$gcc_cv_ld != x; then
++    if $gcc_cv_ld --help 2>/dev/null | grep build-id > /dev/null; then
++      gcc_cv_ld_buildid=yes
++    fi
++  fi])
++if test x"$gcc_cv_ld_buildid" = xyes; then
++  AC_DEFINE(HAVE_LD_BUILDID, 1,
++  [Define if your linker supports --build-id.])
++fi
++
++AC_ARG_ENABLE(linker-build-id,
++[  --enable-linker-build-id
++                          compiler will always pass --build-id to linker],
++[],
++enable_linker_build_id=no)
++
++if test x"$enable_linker_build_id" = xyes; then
++  if test x"$gcc_cv_ld_buildid" = xyes; then
++    AC_DEFINE(ENABLE_LD_BUILDID, 1,
++    [Define if gcc should always pass --build-id to linker.])
++  else
++    AC_MSG_WARN(--build-id is not supported by your linker; --enable-linker-build-id ignored)
++  fi
++fi
++
+ AC_CACHE_CHECK(linker --sysroot support,
+   gcc_cv_ld_sysroot,
+   [gcc_cv_ld_sysroot=no
+@@ -3629,7 +3710,9 @@
+     case "$target" in
+        *-*-linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu)
+       if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
+-	if test "x$with_sysroot" = x; then
++	if test "x$with_headers" != x; then
++	  glibc_header_dir=$with_headers
++	elif test "x$with_sysroot" = x; then
+ 	  glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
+ 	elif test "x$with_build_sysroot" != "x"; then
+ 	  glibc_header_dir="${with_build_sysroot}/usr/include"
+@@ -3641,6 +3724,9 @@
+       else
+ 	glibc_header_dir=/usr/include
+       fi
++      if test "x$enable_libssp" = "xno"; then
++	gcc_cv_libc_provides_ssp=yes
++      fi
+       # glibc 2.4 and later provides __stack_chk_fail and
+       # either __stack_chk_guard, or TLS access to stack guard canary.
+       if test -f $glibc_header_dir/features.h \
+@@ -3910,8 +3996,8 @@
+ rm -f Make-hooks
+ touch Make-hooks
+ target_list="all.cross start.encap rest.encap tags \
+-	install-common install-man install-info install-pdf dvi pdf \
+-	html uninstall info man srcextra srcman srcinfo \
++	install-common install-man install-info install-pdf install-html dvi \
++	pdf html uninstall info man srcextra srcman srcinfo \
+ 	mostlyclean clean distclean maintainer-clean"
+ 
+ for t in $target_list
+@@ -3985,6 +4071,16 @@
+ htmldir='$(docdir)')
+ AC_SUBST(htmldir)
+ 
++AC_ARG_ENABLE([poison-system-directories],
++	      AS_HELP_STRING([--enable-poison-system-directories],
++			     [warn for use of native system header directories]),,
++	      [enable_poison_system_directories=no])
++if test "x${enable_poison_system_directories}" = "xyes"; then
++  AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
++	    [1],
++	    [Define to warn for use of native system header directories])
++fi
++
+ # Substitute configuration variables
+ AC_SUBST(subdirs)
+ AC_SUBST(srcdir)
+@@ -4004,6 +4100,9 @@
+ AC_SUBST(cpp_install_dir)
+ AC_SUBST(xmake_file)
+ AC_SUBST(tmake_file)
++AC_SUBST(TM_ENDIAN_CONFIG)
++AC_SUBST(TM_MULTILIB_CONFIG)
++AC_SUBST(TM_MULTILIB_EXCEPTIONS_CONFIG)
+ AC_SUBST(extra_gcc_objs)
+ AC_SUBST(extra_headers_list)
+ AC_SUBST(extra_objs)
+--- a/src/gcc/cp/Make-lang.in
++++ b/src/gcc/cp/Make-lang.in
+@@ -24,7 +24,7 @@
+ #
+ # foo.all.cross, foo.start.encap, foo.rest.encap,
+ # foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
+-# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
++# foo.install-html, foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
+ # foo.mostlyclean, foo.clean, foo.distclean,
+ # foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
+ #
+@@ -120,6 +120,7 @@
+ c++.dvi:
+ c++.pdf:
+ c++.install-pdf:
++c++.install-html:
+ c++.html:
+ c++.srcinfo:
+ c++.srcextra:
+--- a/src/gcc/cp/class.c
++++ b/src/gcc/cp/class.c
+@@ -6136,7 +6136,7 @@
+       if (flags & tf_error)
+ 	{
+ 	  error ("no matches converting function %qD to type %q#T",
+-		 DECL_NAME (OVL_FUNCTION (overload)),
++		 DECL_NAME (OVL_CURRENT (overload)),
+ 		 target_type);
+ 
+ 	  /* print_candidates expects a chain with the functions in
+@@ -6299,13 +6299,8 @@
+      dependent on overload resolution.  */
+   gcc_assert (TREE_CODE (rhs) == ADDR_EXPR
+ 	      || TREE_CODE (rhs) == COMPONENT_REF
+-	      || TREE_CODE (rhs) == COMPOUND_EXPR
+-	      || really_overloaded_fn (rhs));
+-
+-  /* We don't overwrite rhs if it is an overloaded function.
+-     Copying it would destroy the tree link.  */
+-  if (TREE_CODE (rhs) != OVERLOAD)
+-    rhs = copy_node (rhs);
++	      || really_overloaded_fn (rhs)
++	      || (flag_ms_extensions && TREE_CODE (rhs) == FUNCTION_DECL));
+ 
+   /* This should really only be used when attempting to distinguish
+      what sort of a pointer to function we have.  For now, any
+@@ -6357,19 +6352,6 @@
+ 						/*explicit_targs=*/NULL_TREE,
+ 						access_path);
+ 
+-    case COMPOUND_EXPR:
+-      TREE_OPERAND (rhs, 0)
+-	= instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
+-      if (TREE_OPERAND (rhs, 0) == error_mark_node)
+-	return error_mark_node;
+-      TREE_OPERAND (rhs, 1)
+-	= instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
+-      if (TREE_OPERAND (rhs, 1) == error_mark_node)
+-	return error_mark_node;
+-
+-      TREE_TYPE (rhs) = lhstype;
+-      return rhs;
+-
+     case ADDR_EXPR:
+     {
+       if (PTRMEM_OK_P (rhs))
+--- a/src/gcc/cp/cp-tree.h
++++ b/src/gcc/cp/cp-tree.h
+@@ -43,9 +43,6 @@
+ #else
+ #define ATTRIBUTE_GCC_CXXDIAG(m, n) ATTRIBUTE_NONNULL(m)
+ #endif
+-extern void cp_cpp_error			(cpp_reader *, int,
+-						 const char *, va_list *)
+-     ATTRIBUTE_GCC_CXXDIAG(3,0);
+ #ifdef GCC_TOPLEV_H
+ #error \
+ In order for the format checking to accept the C++ front end diagnostic \
+@@ -4619,6 +4616,8 @@
+ extern bool reregister_specialization		(tree, tree, tree);
+ extern tree fold_non_dependent_expr		(tree);
+ extern bool explicit_class_specialization_p     (tree);
++extern int push_tinst_level                     (tree);
++extern void pop_tinst_level                     (void);
+ extern struct tinst_level *outermost_tinst_level(void);
+ extern bool parameter_of_template_p		(tree, tree);
+ 
+--- a/src/gcc/cp/cvt.c
++++ b/src/gcc/cp/cvt.c
+@@ -581,6 +581,7 @@
+   tree e = expr;
+   enum tree_code code = TREE_CODE (type);
+   const char *invalid_conv_diag;
++  tree e1;
+ 
+   if (error_operand_p (e) || type == error_mark_node)
+     return error_mark_node;
+@@ -629,6 +630,10 @@
+ 	}
+     }
+ 
++  e1 = targetm.convert_to_type (type, e);
++  if (e1)
++    return e1;
++
+   if (code == VOID_TYPE && (convtype & CONV_STATIC))
+     {
+       e = convert_to_void (e, /*implicit=*/NULL, tf_warning_or_error);
+@@ -1231,11 +1236,18 @@
+ tree
+ type_promotes_to (tree type)
+ {
++  tree promoted_type;
++
+   if (type == error_mark_node)
+     return error_mark_node;
+ 
+   type = TYPE_MAIN_VARIANT (type);
+ 
++  /* Check for promotions of target-defined types first.  */
++  promoted_type = targetm.promoted_type (type);
++  if (promoted_type)
++    return promoted_type;
++
+   /* bool always promotes to int (not unsigned), even if it's the same
+      size.  */
+   if (type == boolean_type_node)
+--- a/src/gcc/cp/decl.c
++++ b/src/gcc/cp/decl.c
+@@ -2068,6 +2068,10 @@
+       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
+       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
+     }
++  /* Likewise for DECL_USER_ALIGN and DECL_PACKED.  */
++  DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
++  if (TREE_CODE (newdecl) == FIELD_DECL)
++    DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
+ 
+   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
+      with that from NEWDECL below.  */
+@@ -4508,7 +4512,7 @@
+ 
+       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
+ 
+-      layout_decl (decl, 0);
++      relayout_decl (decl);
+     }
+ }
+ 
+@@ -7622,6 +7626,7 @@
+   bool type_was_error_mark_node = false;
+   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
+   bool template_type_arg = false;
++  const char *errmsg;
+ 
+   signed_p = declspecs->specs[(int)ds_signed];
+   unsigned_p = declspecs->specs[(int)ds_unsigned];
+@@ -8300,6 +8305,12 @@
+ 		   decl, but to its return type.  */
+ 		type_quals = TYPE_UNQUALIFIED;
+ 	      }
++	    errmsg = targetm.invalid_return_type (type);
++	    if (errmsg)
++	      {
++		error (errmsg);
++		type = integer_type_node;
++	      }
+ 
+ 	    /* Error about some types functions can't return.  */
+ 
+@@ -8870,8 +8881,13 @@
+ 
+ 	  /* Replace the anonymous name with the real name everywhere.  */
+ 	  for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
+-	    if (TYPE_NAME (t) == oldname)
+-	      TYPE_NAME (t) = decl;
++	    {
++	      if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
++		{
++		  debug_hooks->set_name (t, decl);
++		  TYPE_NAME (t) = decl;
++		}
++	    }
+ 
+ 	  if (TYPE_LANG_SPECIFIC (type))
+ 	    TYPE_WAS_ANONYMOUS (type) = 1;
+@@ -9707,6 +9723,7 @@
+       tree type = NULL_TREE;
+       tree init = TREE_PURPOSE (parm);
+       tree decl = TREE_VALUE (parm);
++      const char *errmsg;
+ 
+       if (parm == void_list_node)
+ 	break;
+@@ -9740,6 +9757,14 @@
+ 	  init = NULL_TREE;
+ 	}
+ 
++      if (type != error_mark_node
++	  && (errmsg = targetm.invalid_parameter_type (type)))
++	{
++	  error (errmsg);
++	  type = error_mark_node;
++	  TREE_TYPE (decl) = error_mark_node;
++	}
++
+       if (type != error_mark_node)
+ 	{
+ 	  if (deprecated_state != DEPRECATED_SUPPRESS)
+--- a/src/gcc/cp/decl2.c
++++ b/src/gcc/cp/decl2.c
+@@ -1724,6 +1724,10 @@
+       || (DECL_ASSEMBLER_NAME_SET_P (decl)
+ 	  && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
+       return true;
++  /* Functions marked "dllexport" must be emitted so that they are
++     visible to other DLLs.  */
++  if (lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
++    return true;
+   /* Otherwise, DECL does not need to be emitted -- yet.  A subsequent
+      reference to DECL might cause it to be emitted later.  */
+   return false;
+@@ -3810,6 +3814,15 @@
+     }
+ 
+   TREE_USED (decl) = 1;
++  if (current_function_decl != NULL_TREE
++      && (TREE_CODE (decl) == VAR_DECL
++	  || TREE_CODE (decl) == PARM_DECL
++	  || TREE_CODE (decl) == FUNCTION_DECL))
++    {
++      tree context = decl_function_context (decl);
++      if (context != NULL_TREE && context != current_function_decl)
++	DECL_NONLOCAL (decl) = 1;
++    }
+   if (DECL_CLONED_FUNCTION_P (decl))
+     TREE_USED (DECL_CLONED_FUNCTION (decl)) = 1;
+   if (TREE_CODE (decl) == FUNCTION_DECL
+--- a/src/gcc/cp/error.c
++++ b/src/gcc/cp/error.c
+@@ -2672,39 +2672,6 @@
+ #undef next_int
+ }
+ 
+-/* Callback from cpp_error for PFILE to print diagnostics arising from
+-   interpreting strings.  The diagnostic is of type LEVEL; MSG is the
+-   translated message and AP the arguments.  */
+-
+-void
+-cp_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level,
+-	      const char *msg, va_list *ap)
+-{
+-  diagnostic_info diagnostic;
+-  diagnostic_t dlevel;
+-  switch (level)
+-    {
+-    case CPP_DL_WARNING:
+-    case CPP_DL_WARNING_SYSHDR:
+-      dlevel = DK_WARNING;
+-      break;
+-    case CPP_DL_PEDWARN:
+-      dlevel = DK_PEDWARN;
+-      break;
+-    case CPP_DL_ERROR:
+-      dlevel = DK_ERROR;
+-      break;
+-    case CPP_DL_ICE:
+-      dlevel = DK_ICE;
+-      break;
+-    default:
+-      gcc_unreachable ();
+-    }
+-  diagnostic_set_info_translated (&diagnostic, msg, ap,
+-				  input_location, dlevel);
+-  report_diagnostic (&diagnostic);
+-}
+-
+ /* Warn about the use of C++0x features when appropriate.  */
+ void
+ maybe_warn_cpp0x (const char* str)
+--- a/src/gcc/cp/except.c
++++ b/src/gcc/cp/except.c
+@@ -146,14 +146,26 @@
+ static tree
+ build_eh_type_type (tree type)
+ {
+-  tree exp = eh_type_info (type);
++  bool is_ref = TREE_CODE (type) == REFERENCE_TYPE;
++  tree exp;
++  
++  if (is_ref)
++    type = TREE_TYPE (type);
++  
++  exp = eh_type_info (type);
+ 
+   if (!exp)
+     return NULL;
+ 
+   mark_used (exp);
+ 
+-  return convert (ptr_type_node, build_address (exp));
++  exp = build_address (exp);
++  
++  if (is_ref)
++    exp = targetm.cxx.ttype_ref_encode (exp);
++
++  exp = convert (ptr_type_node, exp);
++  return exp;
+ }
+ 
+ tree
+@@ -495,6 +507,16 @@
+       initialize_handler_parm (decl, exp);
+     }
+ 
++  /* Preserve the reference type on the exception, as this affects
++     derived-to-base conversions in catch matching.  Only do this when
++     the ABI supports it, as originally this case was (incorrectly)
++     treated just as catching a pointer-to-class by value. */
++  if (targetm.cxx.ttype_ref_encode
++      && decl && TREE_CODE (type) == POINTER_TYPE
++      && CLASS_TYPE_P (TREE_TYPE (type))
++      && TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
++    type = build_reference_type (type);
++
+   return type;
+ }
+ 
+@@ -538,10 +560,20 @@
+        raw_raises && TREE_VALUE (raw_raises);
+        raw_raises = TREE_CHAIN (raw_raises))
+     {
+-      tree type = prepare_eh_type (TREE_VALUE (raw_raises));
++      tree orig_type = TREE_VALUE (raw_raises);
++      tree type = prepare_eh_type (orig_type);
+       tree tinfo = eh_type_info (type);
+ 
+       mark_used (tinfo);
++      /* Preserve the reference type on the exception, as this affects
++	 derived-to-base conversions in catch matching.  Only do this when
++	 the ABI supports it, as originally this case was (incorrectly)
++	 treated just as catching a pointer-to-class by value. */
++      if (targetm.cxx.ttype_ref_encode
++	  && TREE_CODE (orig_type) == REFERENCE_TYPE
++	  && TREE_CODE (type) == POINTER_TYPE
++	  && CLASS_TYPE_P (TREE_TYPE (type)))
++	type = build_reference_type (type);
+       raises = tree_cons (NULL_TREE, type, raises);
+     }
+ 
+@@ -956,24 +988,40 @@
+ static int
+ can_convert_eh (tree to, tree from)
+ {
+-  to = non_reference (to);
+-  from = non_reference (from);
++  bool to_ref = TREE_CODE (to) == REFERENCE_TYPE;
++  int depth = to_ref;
++  bool outer_const = true;
+ 
+-  if (TREE_CODE (to) == POINTER_TYPE && TREE_CODE (from) == POINTER_TYPE)
++  if (to_ref)
++    to = TREE_TYPE (to);
++  from = non_reference (from);
++  
++  while (TREE_CODE (to) == POINTER_TYPE && TREE_CODE (from) == POINTER_TYPE)
+     {
++      unsigned to_quals, from_quals;
++      
++      depth++;
++      
+       to = TREE_TYPE (to);
+       from = TREE_TYPE (from);
++      to_quals = TYPE_QUALS (to);
++      from_quals = TYPE_QUALS (from);
+ 
+-      if (! at_least_as_qualified_p (to, from))
++      if ((from_quals & ~to_quals)
++	  || (!outer_const && to_quals & ~from_quals))
+ 	return 0;
+-
+-      if (TREE_CODE (to) == VOID_TYPE)
+-	return 1;
+-
+-      /* Else fall through.  */
++	
++      if (!(to_quals & TYPE_QUAL_CONST))
++	outer_const = false;
+     }
+ 
+-  if (CLASS_TYPE_P (to) && CLASS_TYPE_P (from)
++  if (same_type_ignoring_top_level_qualifiers_p (from, to))
++    return 1;
++
++  if (depth == to_ref + 1 && TREE_CODE (to) == VOID_TYPE)
++    return 1;
++  
++  if (depth < 2 && CLASS_TYPE_P (to) && CLASS_TYPE_P (from)
+       && PUBLICLY_UNIQUELY_DERIVED_P (to, from))
+     return 1;
+ 
+--- a/src/gcc/cp/mangle.c
++++ b/src/gcc/cp/mangle.c
+@@ -2776,6 +2776,22 @@
+ mangle_decl_string (const tree decl)
+ {
+   tree result;
++  location_t saved_loc = input_location;
++  tree saved_fn = NULL_TREE;
++  bool template_p = false;
++
++  if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
++    {
++      struct tinst_level *tl = current_instantiation ();
++      if (!tl || tl->decl != decl)
++	{
++	  template_p = true;
++	  saved_fn = current_function_decl;
++	  push_tinst_level (decl);
++	  current_function_decl = NULL_TREE;
++	}
++    }
++  input_location = DECL_SOURCE_LOCATION (decl);
+ 
+   start_mangling (decl);
+ 
+@@ -2788,6 +2804,14 @@
+   if (DEBUG_MANGLE)
+     fprintf (stderr, "mangle_decl_string = '%s'\n\n",
+ 	     IDENTIFIER_POINTER (result));
++
++  if (template_p)
++    {
++      pop_tinst_level ();
++      current_function_decl = saved_fn;
++    }
++  input_location = saved_loc;
++
+   return result;
+ }
+ 
+--- a/src/gcc/cp/parser.c
++++ b/src/gcc/cp/parser.c
+@@ -309,8 +309,7 @@
+ 
+   /* Subsequent preprocessor diagnostics should use compiler
+      diagnostic functions to get the compiler source location.  */
+-  cpp_get_options (parse_in)->client_diagnostic = true;
+-  cpp_get_callbacks (parse_in)->error = cp_cpp_error;
++  done_lexing = true;
+ 
+   gcc_assert (lexer->next_token->type != CPP_PURGED);
+   return lexer;
+--- a/src/gcc/cp/pt.c
++++ b/src/gcc/cp/pt.c
+@@ -105,8 +105,6 @@
+ 			     unification_kind_t, int, bool);
+ static int unify (tree, tree, tree, tree, int);
+ static void add_pending_template (tree);
+-static int push_tinst_level (tree);
+-static void pop_tinst_level (void);
+ static tree reopen_tinst_level (struct tinst_level *);
+ static tree tsubst_initializer_list (tree, tree);
+ static tree get_class_bindings (tree, tree, tree);
+@@ -6433,7 +6431,7 @@
+ /* We're starting to instantiate D; record the template instantiation context
+    for diagnostics and to restore it later.  */
+ 
+-static int
++int
+ push_tinst_level (tree d)
+ {
+   struct tinst_level *new_level;
+@@ -6476,7 +6474,7 @@
+ /* We're done instantiating this template; return to the instantiation
+    context.  */
+ 
+-static void
++void
+ pop_tinst_level (void)
+ {
+   /* Restore the filename and line number stashed away when we started
+--- a/src/gcc/cp/rtti.c
++++ b/src/gcc/cp/rtti.c
+@@ -393,6 +393,7 @@
+ 	return d;
+     }
+ 
++  gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
+   name = mangle_typeinfo_for_type (type);
+ 
+   d = IDENTIFIER_GLOBAL_VALUE (name);
+--- a/src/gcc/cp/semantics.c
++++ b/src/gcc/cp/semantics.c
+@@ -1120,7 +1120,11 @@
+     type = expand_start_catch_block (decl);
+   HANDLER_TYPE (handler) = type;
+   if (!processing_template_decl && type)
+-    mark_used (eh_type_info (type));
++    {
++      if (TREE_CODE (type) == REFERENCE_TYPE)
++	type = TREE_TYPE (type);
++      mark_used (eh_type_info (type));
++    }
+ }
+ 
+ /* Finish a handler, which may be given by HANDLER.  The BLOCKs are
+@@ -3248,8 +3252,10 @@
+ 
+       /* If the user wants us to keep all inline functions, then mark
+ 	 this function as needed so that finish_file will make sure to
+-	 output it later.  */
+-      if (flag_keep_inline_functions && DECL_DECLARED_INLINE_P (fn))
++	 output it later.  Similarly, all dllexport'd functions must
++	 be emitted; there may be callers in other DLLs.  */
++      if ((flag_keep_inline_functions && DECL_DECLARED_INLINE_P (fn))
++	  || lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn)))
+ 	mark_needed (fn);
+     }
+ 
+--- a/src/gcc/cp/typeck.c
++++ b/src/gcc/cp/typeck.c
+@@ -1707,10 +1707,14 @@
+ tree
+ default_conversion (tree exp)
+ {
++  /* Check for target-specific promotions.  */
++  tree promoted_type = targetm.promoted_type (TREE_TYPE (exp));
++  if (promoted_type)
++    exp = cp_convert (promoted_type, exp);
+   /* Perform the integral promotions first so that bitfield
+      expressions (which may promote to "int", even if the bitfield is
+      declared "unsigned") are promoted correctly.  */
+-  if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (exp)))
++  else if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (exp)))
+     exp = perform_integral_promotions (exp);
+   /* Perform the other conversions.  */
+   exp = decay_conversion (exp);
+@@ -3378,7 +3382,6 @@
+ 
+   /* If an error was already reported for one of the arguments,
+      avoid reporting another error.  */
+-
+   if (code0 == ERROR_MARK || code1 == ERROR_MARK)
+     return error_mark_node;
+ 
+@@ -3389,6 +3392,25 @@
+       return error_mark_node;
+     }
+ 
++  /* Issue warnings about peculiar, but valid, uses of NULL.  */
++  if ((orig_op0 == null_node || orig_op1 == null_node)
++      /* It's reasonable to use pointer values as operands of &&
++	 and ||, so NULL is no exception.  */
++      && code != TRUTH_ANDIF_EXPR && code != TRUTH_ORIF_EXPR 
++      && ( /* Both are NULL (or 0) and the operation was not a
++	      comparison or a pointer subtraction.  */
++	  (null_ptr_cst_p (orig_op0) && null_ptr_cst_p (orig_op1) 
++	   && code != EQ_EXPR && code != NE_EXPR && code != MINUS_EXPR) 
++	  /* Or if one of OP0 or OP1 is neither a pointer nor NULL.  */
++	  || (!null_ptr_cst_p (orig_op0)
++	      && !TYPE_PTR_P (type0) && !TYPE_PTR_TO_MEMBER_P (type0))
++	  || (!null_ptr_cst_p (orig_op1) 
++	      && !TYPE_PTR_P (type1) && !TYPE_PTR_TO_MEMBER_P (type1)))
++      && (complain & tf_warning))
++    /* Some sort of arithmetic operation involving NULL was
++       performed.  */
++    warning (OPT_Wpointer_arith, "NULL used in arithmetic");
++
+   switch (code)
+     {
+     case MINUS_EXPR:
+@@ -3979,25 +4001,6 @@
+ 	}
+     }
+ 
+-  /* Issue warnings about peculiar, but valid, uses of NULL.  */
+-  if ((orig_op0 == null_node || orig_op1 == null_node)
+-      /* It's reasonable to use pointer values as operands of &&
+-	 and ||, so NULL is no exception.  */
+-      && code != TRUTH_ANDIF_EXPR && code != TRUTH_ORIF_EXPR 
+-      && ( /* Both are NULL (or 0) and the operation was not a comparison.  */
+-	  (null_ptr_cst_p (orig_op0) && null_ptr_cst_p (orig_op1) 
+-	   && code != EQ_EXPR && code != NE_EXPR) 
+-	  /* Or if one of OP0 or OP1 is neither a pointer nor NULL.  */
+-	  || (!null_ptr_cst_p (orig_op0) && TREE_CODE (TREE_TYPE (op0)) != POINTER_TYPE)
+-	  || (!null_ptr_cst_p (orig_op1) && TREE_CODE (TREE_TYPE (op1)) != POINTER_TYPE))
+-      && (complain & tf_warning))
+-    /* Some sort of arithmetic operation involving NULL was
+-       performed.  Note that pointer-difference and pointer-addition
+-       have already been handled above, and so we don't end up here in
+-       that case.  */
+-    warning (OPT_Wpointer_arith, "NULL used in arithmetic");
+-  
+-
+   /* If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
+      Then the expression will be built.
+      It will be given type FINAL_TYPE if that is nonzero;
+@@ -5024,6 +5027,12 @@
+       return rhs;
+     }
+ 
++  if (type_unknown_p (rhs))
++    {
++      error ("no context to resolve type of %qE", rhs);
++      return error_mark_node;
++    }
++  
+   return build2 (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs);
+ }
+ 
+--- a/src/gcc/cp/typeck2.c
++++ b/src/gcc/cp/typeck2.c
+@@ -451,13 +451,15 @@
+    expression to which INIT should be assigned.  INIT is a CONSTRUCTOR.  */
+ 
+ static void
+-split_nonconstant_init_1 (tree dest, tree init)
++split_nonconstant_init_1 (tree dest, tree *initp)
+ {
+   unsigned HOST_WIDE_INT idx;
++  tree init = *initp;
+   tree field_index, value;
+   tree type = TREE_TYPE (dest);
+   tree inner_type = NULL;
+   bool array_type_p = false;
++  HOST_WIDE_INT num_type_elements, num_initialized_elements;
+ 
+   switch (TREE_CODE (type))
+     {
+@@ -469,6 +471,7 @@
+     case RECORD_TYPE:
+     case UNION_TYPE:
+     case QUAL_UNION_TYPE:
++      num_initialized_elements = 0;
+       FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), idx,
+ 				field_index, value)
+ 	{
+@@ -491,12 +494,13 @@
+ 		sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
+ 			      NULL_TREE);
+ 
+-	      split_nonconstant_init_1 (sub, value);
++	      split_nonconstant_init_1 (sub, &value);
+ 	    }
+ 	  else if (!initializer_constant_valid_p (value, inner_type))
+ 	    {
+ 	      tree code;
+ 	      tree sub;
++	      HOST_WIDE_INT inner_elements;
+ 
+ 	      /* FIXME: Ordered removal is O(1) so the whole function is
+ 		 worst-case quadratic. This could be fixed using an aside
+@@ -519,9 +523,22 @@
+ 	      code = build2 (INIT_EXPR, inner_type, sub, value);
+ 	      code = build_stmt (EXPR_STMT, code);
+ 	      add_stmt (code);
++
++	      inner_elements = count_type_elements (inner_type, true);
++	      if (inner_elements < 0)
++		num_initialized_elements = -1;
++	      else if (num_initialized_elements >= 0)
++		num_initialized_elements += inner_elements;
+ 	      continue;
+ 	    }
+ 	}
++
++      num_type_elements = count_type_elements (type, true);
++      /* If all elements of the initializer are non-constant and
++	 have been split out, we don't need the empty CONSTRUCTOR.  */
++      if (num_type_elements > 0
++	  && num_type_elements == num_initialized_elements)
++	*initp = NULL;
+       break;
+ 
+     case VECTOR_TYPE:
+@@ -557,7 +574,7 @@
+   if (TREE_CODE (init) == CONSTRUCTOR)
+     {
+       code = push_stmt_list ();
+-      split_nonconstant_init_1 (dest, init);
++      split_nonconstant_init_1 (dest, &init);
+       code = pop_stmt_list (code);
+       DECL_INITIAL (dest) = init;
+       TREE_READONLY (dest) = 0;
+--- a/src/gcc/cse.c
++++ b/src/gcc/cse.c
+@@ -5754,6 +5754,11 @@
+       validate_change (object, &XEXP (x, i),
+ 		       cse_process_notes (XEXP (x, i), object, changed), 0);
+ 
++  /* Rebuild a PLUS expression in canonical form if the first operand
++     ends up as a constant.  */
++  if (code == PLUS && GET_CODE (XEXP (x, 0)) == CONST_INT)
++    return plus_constant (XEXP(x, 1), INTVAL (XEXP (x, 0)));
++
+   return x;
+ }
+ 
+--- a/src/gcc/dbxout.c
++++ b/src/gcc/dbxout.c
+@@ -377,6 +377,7 @@
+   dbxout_handle_pch,		         /* handle_pch */
+   debug_nothing_rtx,		         /* var_location */
+   debug_nothing_void,                    /* switch_text_section */
++  debug_nothing_tree_tree,		 /* set_name */
+   0                                      /* start_end_main_source_file */
+ };
+ #endif /* DBX_DEBUGGING_INFO  */
+@@ -410,6 +411,7 @@
+   dbxout_handle_pch,		         /* handle_pch */
+   debug_nothing_rtx,		         /* var_location */
+   debug_nothing_void,                    /* switch_text_section */
++  debug_nothing_tree_tree,	         /* set_name */
+   0                                      /* start_end_main_source_file */
+ };
+ #endif /* XCOFF_DEBUGGING_INFO  */
+--- a/src/gcc/debug.c
++++ b/src/gcc/debug.c
+@@ -51,6 +51,7 @@
+   debug_nothing_int,		         /* handle_pch */
+   debug_nothing_rtx,		         /* var_location */
+   debug_nothing_void,                    /* switch_text_section */
++  debug_nothing_tree_tree,		 /* set_name */
+   0                                      /* start_end_main_source_file */
+ };
+ 
+@@ -67,6 +68,12 @@
+ {
+ }
+ 
++void
++debug_nothing_tree_tree (tree t1 ATTRIBUTE_UNUSED,
++			 tree t2 ATTRIBUTE_UNUSED)
++{
++}
++
+ void
+ debug_nothing_tree_tree_tree_bool (tree t1 ATTRIBUTE_UNUSED,
+ 				   tree t2 ATTRIBUTE_UNUSED,
+--- a/src/gcc/debug.h
++++ b/src/gcc/debug.h
+@@ -130,6 +130,10 @@
+      text sections.  */
+   void (* switch_text_section) (void);
+ 
++  /* Called from grokdeclarator.  Replaces the anonymous name with the
++     type name.  */
++  void (* set_name) (tree, tree);
++
+   /* This is 1 if the debug writer wants to see start and end commands for the
+      main source files, and 0 otherwise.  */
+   int start_end_main_source_file;
+@@ -144,6 +148,7 @@
+ extern void debug_nothing_int (unsigned int);
+ extern void debug_nothing_int_int (unsigned int, unsigned int);
+ extern void debug_nothing_tree (tree);
++extern void debug_nothing_tree_tree (tree, tree);
+ extern void debug_nothing_tree_int (tree, int);
+ extern void debug_nothing_tree_tree_tree_bool (tree, tree, tree, bool);
+ extern bool debug_true_const_tree (const_tree);
+--- a/src/gcc/defaults.h
++++ b/src/gcc/defaults.h
+@@ -501,6 +501,10 @@
+ #define PIC_OFFSET_TABLE_REGNUM INVALID_REGNUM
+ #endif
+ 
++#ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
++#define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 0
++#endif
++
+ #ifndef TARGET_DLLIMPORT_DECL_ATTRIBUTES
+ #define TARGET_DLLIMPORT_DECL_ATTRIBUTES 0
+ #endif
+@@ -902,7 +906,8 @@
+ 
+ /* On most machines, the CFA coincides with the first incoming parm.  */
+ #ifndef ARG_POINTER_CFA_OFFSET
+-#define ARG_POINTER_CFA_OFFSET(FNDECL) FIRST_PARM_OFFSET (FNDECL)
++#define ARG_POINTER_CFA_OFFSET(FNDECL) \
++  (FIRST_PARM_OFFSET (FNDECL) + crtl->args.pretend_args_size)
+ #endif
+ 
+ /* On most machines, we use the CFA as DW_AT_frame_base.  */
+--- a/src/gcc/df-scan.c
++++ b/src/gcc/df-scan.c
+@@ -3952,14 +3952,13 @@
+ #endif
+     }
+ 
+-#ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
+   /* Many architectures have a GP register even without flag_pic.
+      Assume the pic register is not in use, or will be handled by
+      other means, if it is not fixed.  */
+-  if ((unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM
++  if (!PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
++      && (unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM
+       && fixed_regs[PIC_OFFSET_TABLE_REGNUM])
+     bitmap_set_bit (exit_block_uses, PIC_OFFSET_TABLE_REGNUM);
+-#endif
+   
+   /* Mark all global registers, and all registers used by the
+      epilogue as being live at the end of the function since they
+--- a/src/gcc/diagnostic.c
++++ b/src/gcc/diagnostic.c
+@@ -126,6 +126,7 @@
+   diagnostic->message.args_ptr = args;
+   diagnostic->message.format_spec = msg;
+   diagnostic->location = location;
++  diagnostic->override_column = 0;
+   diagnostic->kind = kind;
+   diagnostic->option_index = 0;
+ }
+@@ -153,6 +154,8 @@
+   };
+   const char *text = _(diagnostic_kind_text[diagnostic->kind]);
+   expanded_location s = expand_location (diagnostic->location);
++  if (diagnostic->override_column)
++    s.column = diagnostic->override_column;
+   gcc_assert (diagnostic->kind < DK_LAST_DIAGNOSTIC_KIND);
+ 
+   return
+--- a/src/gcc/diagnostic.h
++++ b/src/gcc/diagnostic.h
+@@ -41,6 +41,7 @@
+ {
+   text_info message;
+   location_t location;
++  unsigned int override_column;
+   /* TREE_BLOCK if the diagnostic is to be reported in some inline
+      function inlined into other function, otherwise NULL.  */
+   tree abstract_origin;
+@@ -185,6 +186,10 @@
+ 
+ #define report_diagnostic(D) diagnostic_report_diagnostic (global_dc, D)
+ 
++/* Override the column number to be used for reporting a
++   diagnostic.  */
++#define diagnostic_override_column(DI, COL) (DI)->override_column = (COL)
++
+ /* Diagnostic related functions.  */
+ extern void diagnostic_initialize (diagnostic_context *);
+ extern void diagnostic_report_current_module (diagnostic_context *);
+--- a/src/gcc/dwarf2out.c
++++ b/src/gcc/dwarf2out.c
+@@ -104,6 +104,9 @@
+ # endif
+ #endif
+ 
++#define NEED_UNWIND_TABLES \
++  (flag_unwind_tables || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS))
++
+ /* Map register numbers held in the call frame info that gcc has
+    collected using DWARF_FRAME_REGNUM to those that should be output in
+    .debug_frame and .eh_frame.  */
+@@ -127,9 +130,7 @@
+ 	  || write_symbols == VMS_AND_DWARF2_DEBUG
+ 	  || DWARF2_FRAME_INFO || saved_do_cfi_asm
+ #ifdef DWARF2_UNWIND_INFO
+-	  || (DWARF2_UNWIND_INFO
+-	      && (flag_unwind_tables
+-		  || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)))
++	  || (DWARF2_UNWIND_INFO && NEED_UNWIND_TABLES)
+ #endif
+ 	  );
+ }
+@@ -2486,6 +2487,12 @@
+     insn = PATTERN (insn);
+ 
+   dwarf2out_frame_debug_expr (insn, label);
++
++  /* Check again.  A parallel can save and update the same register.
++     We could probably check just once, here, but this is safer than
++     removing the check above.  */
++  if (clobbers_queued_reg_save (insn))
++    flush_queued_reg_saves ();
+ }
+ 
+ #endif
+@@ -3245,8 +3252,7 @@
+   /* ??? current_function_func_begin_label is also used by except.c
+      for call-site information.  We must emit this label if it might
+      be used.  */
+-  if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
+-      && ! dwarf2out_do_frame ())
++  if (! NEED_UNWIND_TABLES && ! dwarf2out_do_frame ())
+     return;
+ #else
+   if (! dwarf2out_do_frame ())
+@@ -3404,7 +3410,7 @@
+ 
+ #ifndef TARGET_UNWIND_INFO
+   /* Output another copy for the unwinder.  */
+-  if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
++  if (NEED_UNWIND_TABLES)
+     output_call_frame_info (1);
+ #endif
+ }
+@@ -4611,6 +4617,7 @@
+ static void dwarf2out_abstract_function (tree);
+ static void dwarf2out_var_location (rtx);
+ static void dwarf2out_begin_function (tree);
++static void dwarf2out_set_name (tree, tree);
+ 
+ /* The debug hooks structure.  */
+ 
+@@ -4645,6 +4652,7 @@
+   debug_nothing_int,		/* handle_pch */
+   dwarf2out_var_location,
+   dwarf2out_switch_text_section,
++  dwarf2out_set_name,
+   1                             /* start_end_main_source_file */
+ };
+ #endif
+@@ -5989,12 +5997,9 @@
+ 		 (const char *)x2) == 0;
+ }
+ 
+-/* Add a string attribute value to a DIE.  */
+-
+-static inline void
+-add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
++static struct indirect_string_node *
++find_AT_string (const char *str)
+ {
+-  dw_attr_node attr;
+   struct indirect_string_node *node;
+   void **slot;
+ 
+@@ -6015,6 +6020,18 @@
+     node = (struct indirect_string_node *) *slot;
+ 
+   node->refcount++;
++  return node;
++}
++
++/* Add a string attribute value to a DIE.  */
++
++static inline void
++add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
++{
++  dw_attr_node attr;
++  struct indirect_string_node *node;
++
++  node = find_AT_string (str);
+ 
+   attr.dw_attr = attr_kind;
+   attr.dw_attr_val.val_class = dw_val_class_str;
+@@ -6651,6 +6668,8 @@
+ static inline var_loc_list *
+ lookup_decl_loc (const_tree decl)
+ {
++  if (!decl_loc_table)
++    return NULL;
+   return (var_loc_list *)
+     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
+ }
+@@ -13504,6 +13523,7 @@
+   tree save_fn;
+   tree context;
+   int was_abstract = DECL_ABSTRACT (decl);
++  htab_t old_decl_loc_table;
+ 
+   /* Make sure we have the actual abstract inline, not a clone.  */
+   decl = DECL_ORIGIN (decl);
+@@ -13513,6 +13533,12 @@
+     /* We've already generated the abstract instance.  */
+     return;
+ 
++  /* We can be called while recursively when seeing block defining inlined subroutine
++     DIE.  Be sure to not clobber the outer location table nor use it or we would
++     get locations in abstract instantces.  */
++  old_decl_loc_table = decl_loc_table;
++  decl_loc_table = NULL;
++
+   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
+      we don't get confused by DECL_ABSTRACT.  */
+   if (debug_info_level > DINFO_LEVEL_TERSE)
+@@ -13534,6 +13560,7 @@
+     set_decl_abstract_flags (decl, 0);
+ 
+   current_function_decl = save_fn;
++  decl_loc_table = old_decl_loc_table;
+   pop_cfun ();
+ }
+ 
+@@ -15883,6 +15910,31 @@
+   return fd->emitted_number;
+ }
+ 
++/* Replace DW_AT_name for the decl with name.  */
++ 
++static void
++dwarf2out_set_name (tree decl, tree name)
++{
++  dw_die_ref die;
++  dw_attr_ref attr;
++
++  die = TYPE_SYMTAB_DIE (decl);
++  if (!die)
++    return;
++
++  attr = get_AT (die, DW_AT_name);
++  if (attr)
++    {
++      struct indirect_string_node *node;
++
++      node = find_AT_string (dwarf2_name (name, 0));
++      /* replace the string.  */
++      attr->dw_attr_val.v.val_str = node;
++    }
++
++  else
++    add_name_attribute (die, dwarf2_name (name, 0));
++}
+ /* Called by the final INSN scan whenever we see a var location.  We
+    use it to drop labels in the right places, and throw the location in
+    our lookup table.  */
+--- a/src/gcc/except.c
++++ b/src/gcc/except.c
+@@ -3572,6 +3572,12 @@
+ 	 paths below go through assemble_integer, which would take
+ 	 care of this for us.  */
+       STRIP_NOPS (type);
++      if (TREE_CODE (type) == POINTER_PLUS_EXPR)
++	{
++	  gcc_assert (TREE_CODE (TREE_OPERAND (type, 1)) == INTEGER_CST);
++	  type = TREE_OPERAND (type, 0);
++	  STRIP_NOPS (type);
++	}
+       if (TREE_CODE (type) == ADDR_EXPR)
+ 	{
+ 	  type = TREE_OPERAND (type, 0);
+--- a/src/gcc/explow.c
++++ b/src/gcc/explow.c
+@@ -1491,9 +1491,9 @@
+    in which a scalar value of mode MODE was returned by a library call.  */
+ 
+ rtx
+-hard_libcall_value (enum machine_mode mode)
++hard_libcall_value (enum machine_mode mode, rtx fun)
+ {
+-  return LIBCALL_VALUE (mode);
++  return targetm.calls.libcall_value (mode, fun);
+ }
+ 
+ /* Look up the tree code for a given rtx code
+--- a/src/gcc/expmed.c
++++ b/src/gcc/expmed.c
+@@ -103,7 +103,8 @@
+ static int neg_cost[2][NUM_MACHINE_MODES];
+ static int shift_cost[2][NUM_MACHINE_MODES][MAX_BITS_PER_WORD];
+ static int shiftadd_cost[2][NUM_MACHINE_MODES][MAX_BITS_PER_WORD];
+-static int shiftsub_cost[2][NUM_MACHINE_MODES][MAX_BITS_PER_WORD];
++static int shiftsub0_cost[2][NUM_MACHINE_MODES][MAX_BITS_PER_WORD];
++static int shiftsub1_cost[2][NUM_MACHINE_MODES][MAX_BITS_PER_WORD];
+ static int mul_cost[2][NUM_MACHINE_MODES];
+ static int sdiv_cost[2][NUM_MACHINE_MODES];
+ static int udiv_cost[2][NUM_MACHINE_MODES];
+@@ -130,7 +131,8 @@
+     struct rtx_def shift;	rtunion shift_fld1;
+     struct rtx_def shift_mult;	rtunion shift_mult_fld1;
+     struct rtx_def shift_add;	rtunion shift_add_fld1;
+-    struct rtx_def shift_sub;	rtunion shift_sub_fld1;
++    struct rtx_def shift_sub0;	rtunion shift_sub0_fld1;
++    struct rtx_def shift_sub1;	rtunion shift_sub1_fld1;
+   } all;
+ 
+   rtx pow2[MAX_BITS_PER_WORD];
+@@ -201,9 +203,13 @@
+   XEXP (&all.shift_add, 0) = &all.shift_mult;
+   XEXP (&all.shift_add, 1) = &all.reg;
+ 
+-  PUT_CODE (&all.shift_sub, MINUS);
+-  XEXP (&all.shift_sub, 0) = &all.shift_mult;
+-  XEXP (&all.shift_sub, 1) = &all.reg;
++  PUT_CODE (&all.shift_sub0, MINUS);
++  XEXP (&all.shift_sub0, 0) = &all.shift_mult;
++  XEXP (&all.shift_sub0, 1) = &all.reg;
++
++  PUT_CODE (&all.shift_sub1, MINUS);
++  XEXP (&all.shift_sub1, 0) = &all.reg;
++  XEXP (&all.shift_sub1, 1) = &all.shift_mult;
+ 
+   for (speed = 0; speed < 2; speed++)
+     {
+@@ -226,7 +232,8 @@
+ 	  PUT_MODE (&all.shift, mode);
+ 	  PUT_MODE (&all.shift_mult, mode);
+ 	  PUT_MODE (&all.shift_add, mode);
+-	  PUT_MODE (&all.shift_sub, mode);
++	  PUT_MODE (&all.shift_sub0, mode);
++	  PUT_MODE (&all.shift_sub1, mode);
+ 
+ 	  add_cost[speed][mode] = rtx_cost (&all.plus, SET, speed);
+ 	  neg_cost[speed][mode] = rtx_cost (&all.neg, SET, speed);
+@@ -254,8 +261,8 @@
+ 	    }
+ 
+ 	  shift_cost[speed][mode][0] = 0;
+-	  shiftadd_cost[speed][mode][0] = shiftsub_cost[speed][mode][0]
+-	    = add_cost[speed][mode];
++	  shiftadd_cost[speed][mode][0] = shiftsub0_cost[speed][mode][0]
++	    = shiftsub1_cost[speed][mode][0] = add_cost[speed][mode];
+ 
+ 	  n = MIN (MAX_BITS_PER_WORD, GET_MODE_BITSIZE (mode));
+ 	  for (m = 1; m < n; m++)
+@@ -265,7 +272,8 @@
+ 
+ 	      shift_cost[speed][mode][m] = rtx_cost (&all.shift, SET, speed);
+ 	      shiftadd_cost[speed][mode][m] = rtx_cost (&all.shift_add, SET, speed);
+-	      shiftsub_cost[speed][mode][m] = rtx_cost (&all.shift_sub, SET, speed);
++	      shiftsub0_cost[speed][mode][m] = rtx_cost (&all.shift_sub0, SET, speed);
++	      shiftsub1_cost[speed][mode][m] = rtx_cost (&all.shift_sub1, SET, speed);
+ 	    }
+ 	}
+     }
+@@ -2397,6 +2405,7 @@
+   struct mult_cost best_cost;
+   struct mult_cost new_limit;
+   int op_cost, op_latency;
++  unsigned HOST_WIDE_INT orig_t = t;
+   unsigned HOST_WIDE_INT q;
+   int maxm = MIN (BITS_PER_WORD, GET_MODE_BITSIZE (mode));
+   int hash_index;
+@@ -2542,6 +2551,38 @@
+ 	      best_alg->log[best_alg->ops] = m;
+ 	      best_alg->op[best_alg->ops] = alg_shift;
+ 	    }
++
++	  /* See if treating ORIG_T as a signed number yields a better
++	     sequence.  Try this sequence only for a negative ORIG_T
++	     as it would be useless for a non-negative ORIG_T.  */
++	  if ((HOST_WIDE_INT) orig_t < 0)
++	    {
++	      /* Shift ORIG_T as follows because a right shift of a
++		 negative-valued signed type is implementation
++		 defined.  */
++	      q = ~(~orig_t >> m);
++	      /* The function expand_shift will choose between a shift
++		 and a sequence of additions, so the observed cost is
++		 given as MIN (m * add_cost[speed][mode],
++		 shift_cost[speed][mode][m]).  */
++	      op_cost = m * add_cost[speed][mode];
++	      if (shift_cost[speed][mode][m] < op_cost)
++		op_cost = shift_cost[speed][mode][m];
++	      new_limit.cost = best_cost.cost - op_cost;
++	      new_limit.latency = best_cost.latency - op_cost;
++	      synth_mult (alg_in, q, &new_limit, mode);
++
++	      alg_in->cost.cost += op_cost;
++	      alg_in->cost.latency += op_cost;
++	      if (CHEAPER_MULT_COST (&alg_in->cost, &best_cost))
++		{
++		  struct algorithm *x;
++		  best_cost = alg_in->cost;
++		  x = alg_in, alg_in = best_alg, best_alg = x;
++		  best_alg->log[best_alg->ops] = m;
++		  best_alg->op[best_alg->ops] = alg_shift;
++		}
++	    }
+ 	}
+       if (cache_hit)
+ 	goto done;
+@@ -2604,6 +2645,29 @@
+ 	      best_alg->op[best_alg->ops] = alg_add_t_m2;
+ 	    }
+ 	}
++
++      /* We may be able to calculate a * -7, a * -15, a * -31, etc
++	 quickly with a - a * n for some appropriate constant n.  */
++      m = exact_log2 (-orig_t + 1);
++      if (m >= 0 && m < maxm)
++	{
++	  op_cost = shiftsub1_cost[speed][mode][m];
++	  new_limit.cost = best_cost.cost - op_cost;
++	  new_limit.latency = best_cost.latency - op_cost;
++	  synth_mult (alg_in, (unsigned HOST_WIDE_INT) (-orig_t + 1) >> m, &new_limit, mode);
++
++	  alg_in->cost.cost += op_cost;
++	  alg_in->cost.latency += op_cost;
++	  if (CHEAPER_MULT_COST (&alg_in->cost, &best_cost))
++	    {
++	      struct algorithm *x;
++	      best_cost = alg_in->cost;
++	      x = alg_in, alg_in = best_alg, best_alg = x;
++	      best_alg->log[best_alg->ops] = m;
++	      best_alg->op[best_alg->ops] = alg_sub_t_m2;
++	    }
++	}
++
+       if (cache_hit)
+ 	goto done;
+     }
+@@ -2673,9 +2737,9 @@
+ 	     hardware the shift may be executed concurrently with the
+ 	     earlier steps in the algorithm.  */
+ 	  op_cost = add_cost[speed][mode] + shift_cost[speed][mode][m];
+-	  if (shiftsub_cost[speed][mode][m] < op_cost)
++	  if (shiftsub0_cost[speed][mode][m] < op_cost)
+ 	    {
+-	      op_cost = shiftsub_cost[speed][mode][m];
++	      op_cost = shiftsub0_cost[speed][mode][m];
+ 	      op_latency = op_cost;
+ 	    }
+ 	  else
+@@ -2738,7 +2802,7 @@
+       m = exact_log2 (q);
+       if (m >= 0 && m < maxm)
+ 	{
+-	  op_cost = shiftsub_cost[speed][mode][m];
++	  op_cost = shiftsub0_cost[speed][mode][m];
+ 	  new_limit.cost = best_cost.cost - op_cost;
+ 	  new_limit.latency = best_cost.latency - op_cost;
+ 	  synth_mult (alg_in, (t + 1) >> m, &new_limit, mode);
+--- a/src/gcc/expr.c
++++ b/src/gcc/expr.c
+@@ -4391,6 +4391,29 @@
+ 
+   /* Compute FROM and store the value in the rtx we got.  */
+ 
++  if (TREE_CODE (to) == MISALIGNED_INDIRECT_REF)
++    {
++      rtx insn;
++      rtx from_rtx;
++      enum insn_code icode;
++      enum machine_mode mode = GET_MODE (to_rtx);
++
++      icode = optab_handler (movmisalign_optab, mode)->insn_code;
++      gcc_assert (icode != CODE_FOR_nothing);
++
++      from_rtx = expand_expr (from, NULL_RTX, mode, EXPAND_NORMAL);
++      insn = GEN_FCN (icode) (to_rtx, from_rtx);
++      /* If that failed then force the source into a reg and try again.  */
++      if (!insn)
++	{
++	  from_rtx = copy_to_mode_reg(mode, from_rtx);
++	  insn = GEN_FCN (icode) (to_rtx, from_rtx);
++	  gcc_assert(insn);
++	}
++      emit_insn (insn);
++      return;
++    }
++
+   push_temp_slots ();
+   result = store_expr (from, to_rtx, 0, nontemporal);
+   preserve_temp_slots (result);
+@@ -7291,6 +7314,19 @@
+       decl_rtl = DECL_RTL (exp);
+       gcc_assert (decl_rtl);
+       decl_rtl = copy_rtx (decl_rtl);
++      /* Record writes to register variables.  */
++      if (modifier == EXPAND_WRITE && REG_P(decl_rtl)
++	  && REGNO(decl_rtl) < FIRST_PSEUDO_REGISTER)
++	{
++	    int i = REGNO(decl_rtl);
++	    int nregs = hard_regno_nregs[i][GET_MODE(decl_rtl)];
++	    while (nregs)
++	      {
++		SET_HARD_REG_BIT(crtl->asm_clobbers, i);
++		i++;
++		nregs--;
++	      }
++	}
+ 
+       /* Ensure variable marked as used even if it doesn't go through
+ 	 a parser.  If it hasn't be used yet, write out an external
+@@ -7538,14 +7574,15 @@
+ 
+ 	/* Resolve the misalignment now, so that we don't have to remember
+ 	   to resolve it later.  Of course, this only works for reads.  */
+-	/* ??? When we get around to supporting writes, we'll have to handle
+-	   this in store_expr directly.  The vectorizer isn't generating
+-	   those yet, however.  */
+ 	if (code == MISALIGNED_INDIRECT_REF)
+ 	  {
+ 	    int icode;
+ 	    rtx reg, insn;
+ 
++	    /* For writes produce a MEM, and expand_assignment will DTRT.  */
++	    if (modifier == EXPAND_WRITE)
++	      return temp;
++
+ 	    gcc_assert (modifier == EXPAND_NORMAL
+ 			|| modifier == EXPAND_STACK_PARM);
+ 
+--- a/src/gcc/expr.h
++++ b/src/gcc/expr.h
+@@ -757,7 +757,7 @@
+ 
+ /* Return an rtx that refers to the value returned by a library call
+    in its original home.  This becomes invalid if any more code is emitted.  */
+-extern rtx hard_libcall_value (enum machine_mode);
++extern rtx hard_libcall_value (enum machine_mode, rtx);
+ 
+ /* Return the mode desired by operand N of a particular bitfield
+    insert/extract insn, or MAX_MACHINE_MODE if no such insn is
+--- a/src/gcc/final.c
++++ b/src/gcc/final.c
+@@ -891,6 +891,7 @@
+       if (LABEL_P (insn))
+ 	{
+ 	  rtx next;
++	  bool next_is_jumptable;
+ 
+ 	  /* Merge in alignments computed by compute_alignments.  */
+ 	  log = LABEL_TO_ALIGNMENT (insn);
+@@ -900,31 +901,30 @@
+ 	      max_skip = LABEL_TO_MAX_SKIP (insn);
+ 	    }
+ 
+-	  log = LABEL_ALIGN (insn);
+-	  if (max_log < log)
++	  next = next_nonnote_insn (insn);
++	  next_is_jumptable = next && JUMP_TABLE_DATA_P (next);
++	  if (!next_is_jumptable)
+ 	    {
+-	      max_log = log;
+-	      max_skip = LABEL_ALIGN_MAX_SKIP;
++	      log = LABEL_ALIGN (insn);
++	      if (max_log < log)
++		{
++		  max_log = log;
++		  max_skip = LABEL_ALIGN_MAX_SKIP;
++		}
+ 	    }
+-	  next = next_nonnote_insn (insn);
+ 	  /* ADDR_VECs only take room if read-only data goes into the text
+ 	     section.  */
+-	  if (JUMP_TABLES_IN_TEXT_SECTION
+-	      || readonly_data_section == text_section)
+-	    if (next && JUMP_P (next))
+-	      {
+-		rtx nextbody = PATTERN (next);
+-		if (GET_CODE (nextbody) == ADDR_VEC
+-		    || GET_CODE (nextbody) == ADDR_DIFF_VEC)
+-		  {
+-		    log = ADDR_VEC_ALIGN (next);
+-		    if (max_log < log)
+-		      {
+-			max_log = log;
+-			max_skip = LABEL_ALIGN_MAX_SKIP;
+-		      }
+-		  }
+-	      }
++	  if ((JUMP_TABLES_IN_TEXT_SECTION
++	       || readonly_data_section == text_section)
++	      && next_is_jumptable)
++	    {
++	      log = ADDR_VEC_ALIGN (next);
++	      if (max_log < log)
++		{
++		  max_log = log;
++		  max_skip = LABEL_ALIGN_MAX_SKIP;
++		}
++	    }
+ 	  LABEL_TO_ALIGNMENT (insn) = max_log;
+ 	  LABEL_TO_MAX_SKIP (insn) = max_skip;
+ 	  max_log = 0;
+@@ -2013,48 +2013,41 @@
+       app_disable ();
+ 
+       next = next_nonnote_insn (insn);
+-      if (next != 0 && JUMP_P (next))
++      /* If this label is followed by a jump-table, make sure we put
++	 the label in the read-only section.  Also possibly write the
++	 label and jump table together.  */
++      if (next != 0 && JUMP_TABLE_DATA_P (next))
+ 	{
+-	  rtx nextbody = PATTERN (next);
+-
+-	  /* If this label is followed by a jump-table,
+-	     make sure we put the label in the read-only section.  Also
+-	     possibly write the label and jump table together.  */
+-
+-	  if (GET_CODE (nextbody) == ADDR_VEC
+-	      || GET_CODE (nextbody) == ADDR_DIFF_VEC)
+-	    {
+ #if defined(ASM_OUTPUT_ADDR_VEC) || defined(ASM_OUTPUT_ADDR_DIFF_VEC)
+-	      /* In this case, the case vector is being moved by the
+-		 target, so don't output the label at all.  Leave that
+-		 to the back end macros.  */
++	  /* In this case, the case vector is being moved by the
++	     target, so don't output the label at all.  Leave that
++	     to the back end macros.  */
+ #else
+-	      if (! JUMP_TABLES_IN_TEXT_SECTION)
+-		{
+-		  int log_align;
++	  if (! JUMP_TABLES_IN_TEXT_SECTION)
++	    {
++	      int log_align;
+ 
+-		  switch_to_section (targetm.asm_out.function_rodata_section
+-				     (current_function_decl));
++	      switch_to_section (targetm.asm_out.function_rodata_section
++				 (current_function_decl));
+ 
+ #ifdef ADDR_VEC_ALIGN
+-		  log_align = ADDR_VEC_ALIGN (next);
++	      log_align = ADDR_VEC_ALIGN (next);
+ #else
+-		  log_align = exact_log2 (BIGGEST_ALIGNMENT / BITS_PER_UNIT);
++	      log_align = exact_log2 (BIGGEST_ALIGNMENT / BITS_PER_UNIT);
+ #endif
+-		  ASM_OUTPUT_ALIGN (file, log_align);
+-		}
+-	      else
+-		switch_to_section (current_function_section ());
++	      ASM_OUTPUT_ALIGN (file, log_align);
++	    }
++	  else
++	    switch_to_section (current_function_section ());
+ 
+ #ifdef ASM_OUTPUT_CASE_LABEL
+-	      ASM_OUTPUT_CASE_LABEL (file, "L", CODE_LABEL_NUMBER (insn),
+-				     next);
++	  ASM_OUTPUT_CASE_LABEL (file, "L", CODE_LABEL_NUMBER (insn),
++				 next);
+ #else
+-	      targetm.asm_out.internal_label (file, "L", CODE_LABEL_NUMBER (insn));
++	  targetm.asm_out.internal_label (file, "L", CODE_LABEL_NUMBER (insn));
+ #endif
+ #endif
+-	      break;
+-	    }
++	  break;
+ 	}
+       if (LABEL_ALT_ENTRY_P (insn))
+ 	output_alternate_entry_point (file, insn);
+@@ -2235,6 +2228,10 @@
+ #endif
+ 	      }
+ 
++	    if (targetm.asm_out.final_postscan_insn)
++	      targetm.asm_out.final_postscan_insn (file, insn, ops,
++						   insn_noperands);
++
+ 	    this_is_asm_operands = 0;
+ 	    break;
+ 	  }
+@@ -2637,6 +2634,12 @@
+ 	/* Output assembler code from the template.  */
+ 	output_asm_insn (templ, recog_data.operand);
+ 
++	/* Some target machines need to postscan each insn after
++	   it is output.  */
++	if (targetm.asm_out.final_postscan_insn)
++	  targetm.asm_out.final_postscan_insn (file, insn, recog_data.operand,
++					       recog_data.n_operands);
++
+ 	/* If necessary, report the effect that the instruction has on
+ 	   the unwind info.   We've already done this for delay slots
+ 	   and call instructions.  */
+--- a/src/gcc/fold-const.c
++++ b/src/gcc/fold-const.c
+@@ -2293,7 +2293,24 @@
+   real_convert (&value, TYPE_MODE (type), &TREE_REAL_CST (arg1));
+   t = build_real (type, value);
+ 
+-  TREE_OVERFLOW (t) = TREE_OVERFLOW (arg1);
++  /* If converting an infinity or NAN to a representation that doesn't
++     have one, set the overflow bit so that we can produce some kind of
++     error message at the appropriate point if necessary.  It's not the
++     most user-friendly message, but it's better than nothing.  */
++  if (REAL_VALUE_ISINF (TREE_REAL_CST (arg1))
++      && !MODE_HAS_INFINITIES (TYPE_MODE (type)))
++    TREE_OVERFLOW (t) = 1;
++  else if (REAL_VALUE_ISNAN (TREE_REAL_CST (arg1))
++	   && !MODE_HAS_NANS (TYPE_MODE (type)))
++    TREE_OVERFLOW (t) = 1;
++  /* Regular overflow, conversion produced an infinity in a mode that
++     can't represent them.  */
++  else if (!MODE_HAS_INFINITIES (TYPE_MODE (type))
++	   && REAL_VALUE_ISINF (value)
++	   && !REAL_VALUE_ISINF (TREE_REAL_CST (arg1)))
++    TREE_OVERFLOW (t) = 1;
++  else
++    TREE_OVERFLOW (t) = TREE_OVERFLOW (arg1);
+   return t;
+ }
+ 
+--- a/src/gcc/fortran/Make-lang.in
++++ b/src/gcc/fortran/Make-lang.in
+@@ -26,7 +26,7 @@
+ #
+ # foo.all.cross, foo.start.encap, foo.rest.encap,
+ # foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
+-# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
++# foo.install-html, foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
+ # foo.mostlyclean, foo.clean, foo.distclean,
+ # foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
+ #
+@@ -118,7 +118,27 @@
+ 
+ fortran.info: doc/gfortran.info doc/gfc-internals.info
+ fortran.dvi: doc/gfortran.dvi doc/gfc-internals.dvi
+-fortran.html: $(build_htmldir)/gfortran/index.html
++
++F95_HTMLFILES = $(build_htmldir)/gfortran
++
++fortran.html: $(F95_HTMLFILES)/index.html
++
++fortran.install-html: $(F95_HTMLFILES)
++	@$(NORMAL_INSTALL)
++	test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)"
++	@list='$(F95_HTMLFILES)'; for p in $$list; do \
++	  if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \
++	  f=$(html__strip_dir) \
++	  if test -d "$$d$$p"; then \
++	    echo " $(mkinstalldirs) '$(DESTDIR)$(htmldir)/$$f'"; \
++	    $(mkinstalldirs) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
++	    echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
++	    $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
++	  else \
++	    echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
++	    $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
++	  fi; \
++	done
+ 
+ F95_PDFFILES = doc/gfortran.pdf
+ 
+--- a/src/gcc/fortran/cpp.c
++++ b/src/gcc/fortran/cpp.c
+@@ -144,6 +144,9 @@
+ static void cb_ident (cpp_reader *, source_location, const cpp_string *);
+ static void cb_used_define (cpp_reader *, source_location, cpp_hashnode *);
+ static void cb_used_undef (cpp_reader *, source_location, cpp_hashnode *);
++static bool cb_cpp_error (cpp_reader *, int, location_t, unsigned int,
++			  const char *, va_list *)
++     ATTRIBUTE_GCC_DIAG(5,0);
+ void pp_dir_change (cpp_reader *, const char *);
+ 
+ static int dump_macro (cpp_reader *, cpp_hashnode *, void *);
+@@ -523,7 +526,6 @@
+   cpp_option->cplusplus_comments = 0;
+ 
+   cpp_option->pedantic = pedantic;
+-  cpp_option->inhibit_warnings = inhibit_warnings;
+ 
+   cpp_option->dollars_in_ident = gfc_option.flag_dollar_ok;
+   cpp_option->discard_comments = gfc_cpp_option.discard_comments;
+@@ -547,9 +549,6 @@
+ 
+   cpp_post_options (cpp_in);
+ 
+-  /* If an error has occurred in cpplib, note it so we fail immediately.  */
+-  errorcount += cpp_errors (cpp_in);
+-
+   gfc_cpp_register_include_paths ();
+ }
+ 
+@@ -564,6 +563,7 @@
+   cb->line_change = cb_line_change;
+   cb->ident = cb_ident;
+   cb->def_pragma = cb_def_pragma;
++  cb->error = cb_cpp_error;
+ 
+   if (gfc_cpp_option.dump_includes)
+     cb->include = cb_include;
+@@ -1059,6 +1059,57 @@
+   cpp_define_queue = q;
+ }
+ 
++/* Callback from cpp_error for PFILE to print diagnostics from the
++   preprocessor.  The diagnostic is of type LEVEL, at location
++   LOCATION, with column number possibly overridden by COLUMN_OVERRIDE
++   if not zero; MSG is the translated message and AP the arguments.
++   Returns true if a diagnostic was emitted, false otherwise.  */
++
++static bool
++cb_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level,
++	      location_t location, unsigned int column_override,
++	      const char *msg, va_list *ap)
++{
++  diagnostic_info diagnostic;
++  diagnostic_t dlevel;
++  int save_warn_system_headers = warn_system_headers;
++  bool ret;
++
++  switch (level)
++    {
++    case CPP_DL_WARNING_SYSHDR:
++      warn_system_headers = 1;
++      /* Fall through.  */
++    case CPP_DL_WARNING:
++      dlevel = DK_WARNING;
++      break;
++    case CPP_DL_PEDWARN:
++      dlevel = DK_PEDWARN;
++      break;
++    case CPP_DL_ERROR:
++      dlevel = DK_ERROR;
++      break;
++    case CPP_DL_ICE:
++      dlevel = DK_ICE;
++      break;
++    case CPP_DL_NOTE:
++      dlevel = DK_NOTE;
++      break;
++    case CPP_DL_FATAL:
++      dlevel = DK_FATAL;
++      break;
++    default:
++      gcc_unreachable ();
++    }
++  diagnostic_set_info_translated (&diagnostic, msg, ap,
++				  location, dlevel);
++  if (column_override)
++    diagnostic_override_column (&diagnostic, column_override);
++  ret = report_diagnostic (&diagnostic);
++  if (level == CPP_DL_WARNING_SYSHDR)
++    warn_system_headers = save_warn_system_headers;
++  return ret;
++}
+ 
+ /* Callback called when -fworking-director and -E to emit working
+    directory in cpp output file.  */
+--- a/src/gcc/function.c
++++ b/src/gcc/function.c
+@@ -276,7 +276,10 @@
+   if (! type)
+     type = lang_hooks.types.type_for_mode (mode, 0);
+ 
+-  return STACK_SLOT_ALIGNMENT (type, mode, alignment);
++  return alignment_for_aligned_arrays (type,
++				       STACK_SLOT_ALIGNMENT (type,
++							     mode,
++							     alignment));
+ }
+ 
+ /* Allocate a stack slot of SIZE bytes and return a MEM rtx for it
+@@ -5359,6 +5362,57 @@
+ {
+   return IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (cfun->decl));
+ }
++
++/* This function adjusts alignments as appropriate according to the
++   setting of -falign-arrays.  If that is specified then the minimum
++   alignment for array variables is set to be the largest power of two
++   less than or equal to their total storage size, or the biggest
++   alignment used on the machine, whichever is smaller.  */
++
++unsigned int
++alignment_for_aligned_arrays (tree ty, unsigned int existing_alignment)
++{
++  unsigned int min_alignment;
++  tree size;
++
++  /* Return the existing alignment if not using -falign-arrays or if
++     the type is not an array type.  */
++  if (!flag_align_arrays || !ty || TREE_CODE (ty) != ARRAY_TYPE)
++    return existing_alignment;
++
++  /* Extract the total storage size of the array in bits.  */
++  size = TYPE_SIZE (ty);
++  gcc_assert (size);
++
++  /* At least for variable-length arrays, TREE_CODE (size) might not be an
++     integer constant; check it now.  If it is not, give the array at
++     least BIGGEST_ALIGNMENT just to be safe.   Furthermore, we assume that
++     alignments always fit into a host integer.  So if we can't fit the
++     size of the array in bits into a host integer, it must also be large
++     enough to deserve at least BIGGEST_ALIGNMENT (see below).  */
++  if (TREE_CODE (size) != INTEGER_CST || !host_integerp (size, 1))
++    min_alignment = BIGGEST_ALIGNMENT;
++  else
++    {
++      unsigned HOST_WIDE_INT bits = TREE_INT_CST_LOW (size);
++      bits = (bits ? bits : 1);
++
++      /* An array with size greater than BIGGEST_ALIGNMENT is assigned
++	 at least that alignment.  In all other cases the minimum
++	 alignment of the array is set to be the largest power of two
++	 less than or equal to the total storage size of the array.
++	 We assume that BIGGEST_ALIGNMENT fits in "unsigned int"; thus,
++	 the shift below will not overflow.  */
++      if (bits >= BIGGEST_ALIGNMENT)
++	min_alignment = BIGGEST_ALIGNMENT;
++      else
++	min_alignment = 1 << (floor_log2 (bits));
++    }
++
++  /* Having computed the minimum permissible alignment, enlarge it
++     if EXISTING_ALIGNMENT is greater.  */
++  return MAX (min_alignment, existing_alignment); 
++}
+ 
+ 
+ static unsigned int
+--- a/src/gcc/function.h
++++ b/src/gcc/function.h
+@@ -25,6 +25,7 @@
+ #include "tree.h"
+ #include "hashtab.h"
+ #include "varray.h"
++#include "hard-reg-set.h"
+ 
+ /* Stack of pending (incomplete) sequences saved by `start_sequence'.
+    Each element describes one pending sequence.
+@@ -441,6 +442,8 @@
+ 
+   /* True if dbr_schedule has already been called for this function.  */
+   bool dbr_scheduled_p;
++
++  HARD_REG_SET asm_clobbers;
+ };
+ 
+ #define return_label (crtl->x_return_label)
+@@ -709,4 +712,7 @@
+ extern void used_types_insert (tree);
+ 
+ extern int get_next_funcdef_no (void);
++
++extern unsigned int alignment_for_aligned_arrays (tree, unsigned int);
++
+ #endif  /* GCC_FUNCTION_H */
+--- a/src/gcc/gcc.c
++++ b/src/gcc/gcc.c
+@@ -229,6 +229,16 @@
+ 
+ static int use_pipes;
+ 
++/* Nonzero means that libgcc is being linked automatically by the
++   compiler from its normal installed location; that is, neither -B,
++   -nostdlib nor -nodefaultlibs was passed.  */
++
++static int using_libgcc = 1;
++
++/* Nonzero means that the current spec is executing the linker.  */
++
++static int executing_linker = 0;
++
+ /* The compiler version.  */
+ 
+ static const char *compiler_version;
+@@ -651,8 +661,32 @@
+ 
+ /* config.h can define SWITCHES_NEED_SPACES to control which options
+    require spaces between the option and the argument.  */
++/* GCC Bugzilla PR11810 indicates that GCC does not correctly handle
++   "-ofoo.o", in that it records "-ofoo.o" as a temporary file to
++   delete, rather than "foo.o".  
++
++   Unfortunately, Eclipse's makefile generators use the "-ofoo.o"
++   form.  See also CS Issue #3433.  So, although most users probably
++   use "-o foo.o", the "-ofoo.o" form is used in practice.
++
++   See this email thread for additional information:
++
++     http://gcc.gnu.org/ml/gcc/2008-07/msg00395.html
++
++   Therefore, we define SWITCHES_NEED_SPACES to include "o" by
++   default.  This causes "-ofoo.o" to be split into "-o foo.o" during
++   the initial processing of the command-line, before being seen by
++   the specs machinery.
++ 
++   A risk of this change is that tools which *require* the "-ofoo.o"
++   form will no longer work.  However, we know of no such tools, and
++   they would not have worked with the "-o foo.o" form anyhow.  
++
++   If this general strategy is acceptable upstream, the best approach
++   might be simply to eliminate this macro, since the only definitions
++   in target files are also to the value "o".  */
+ #ifndef SWITCHES_NEED_SPACES
+-#define SWITCHES_NEED_SPACES ""
++#define SWITCHES_NEED_SPACES "o"
+ #endif
+ 
+ /* config.h can define ENDFILE_SPEC to override the default crtn files.  */
+@@ -717,6 +751,13 @@
+ #endif
+ #endif
+ 
++#ifndef LINK_BUILDID_SPEC
++# if defined(HAVE_LD_BUILDID) && defined(ENABLE_LD_BUILDID)
++#  define LINK_BUILDID_SPEC "%{!r:--build-id} "
++# endif
++#endif
++
++
+ /* -u* was put back because both BSD and SysV seem to support it.  */
+ /* %{static:} simply prevents an error message if the target machine
+    doesn't handle -static.  */
+@@ -728,6 +769,8 @@
+ %{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
+     %(linker) %l " LINK_PIE_SPEC "%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
+     %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
++    %{Wno-poison-system-directories:--no-poison-system-directories}\
++    %{Werror=poison-system-directories:--error-poison-system-directories}\
+     %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
+     %{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)} %(mflib)\
+     %{fprofile-arcs|fprofile-generate|coverage:-lgcov}\
+@@ -882,7 +925,7 @@
+ #endif
+ 
+ static const char *const driver_self_specs[] = {
+-  DRIVER_SELF_SPECS, GOMP_SELF_SPECS
++  DRIVER_SELF_SPECS, CONFIGURE_SPECS, GOMP_SELF_SPECS
+ };
+ 
+ #ifndef OPTION_DEFAULT_SPECS
+@@ -1831,9 +1874,16 @@
+     asm_spec = XOBFINISH (&obstack, const char *);
+   }
+ #endif
+-#ifdef LINK_EH_SPEC
++
++#if defined LINK_EH_SPEC || defined LINK_BUILDID_SPEC
++# ifdef LINK_BUILDID_SPEC
++  /* Prepend LINK_BUILDID_SPEC to whatever link_spec we had before.  */
++  obstack_grow (&obstack, LINK_BUILDID_SPEC, sizeof(LINK_BUILDID_SPEC) - 1);
++# endif
++# ifdef LINK_EH_SPEC
+   /* Prepend LINK_EH_SPEC to whatever link_spec we had before.  */
+   obstack_grow (&obstack, LINK_EH_SPEC, sizeof(LINK_EH_SPEC) - 1);
++# endif
+   obstack_grow0 (&obstack, link_spec, strlen (link_spec));
+   link_spec = XOBFINISH (&obstack, const char *);
+ #endif
+@@ -2853,6 +2903,29 @@
+ 
+   gcc_assert (!processing_spec_function);
+ 
++  if (executing_linker && using_libgcc)
++    {
++      const char *libgcc_a_filename;
++
++      /* Verify that the multilib being used is actually installed.  */
++      libgcc_a_filename = (gcc_exec_prefix
++			   ? gcc_exec_prefix
++			   : concat (standard_exec_prefix,
++				     machine_suffix, NULL));
++      if (multilib_dir && strcmp (multilib_dir, ".") != 0)
++	libgcc_a_filename = concat (libgcc_a_filename, multilib_dir,
++				    dir_separator_str, NULL);
++      libgcc_a_filename = concat (libgcc_a_filename, "libgcc.a", NULL);
++      if (access (libgcc_a_filename, R_OK) != 0)
++	{
++	  if (errno == ENOENT)
++	    fatal ("selected multilib '%s' not installed",
++		   multilib_dir ? multilib_dir : ".");
++	  else
++	    pfatal_with_name (libgcc_a_filename);
++	}
++    }
++
+   if (wrapper_string)
+     {
+       string = find_a_file (&exec_prefixes, argbuf[0], X_OK, false);
+@@ -3688,6 +3761,16 @@
+ 	  add_assembler_option ("--target-help", 13);
+ 	  add_linker_option ("--target-help", 13);
+ 	}
++      else if (! strcmp (argv[i], "-nodefaultlibs"))
++	{
++	  using_libgcc = 0;
++	  n_switches++;
++	}
++      else if (! strcmp (argv[i], "-nostdlib"))
++	{
++	  using_libgcc = 0;
++	  n_switches++;
++	}
+       else if (! strcmp (argv[i], "-pass-exit-codes"))
+ 	{
+ 	  pass_exit_codes = 1;
+@@ -3905,6 +3988,7 @@
+ 			    PREFIX_PRIORITY_B_OPT, 0, 0);
+ 		add_prefix (&include_prefixes, value, NULL,
+ 			    PREFIX_PRIORITY_B_OPT, 0, 0);
++		using_libgcc = 0;
+ 		n_switches++;
+ 	      }
+ 	      break;
+@@ -4616,27 +4700,53 @@
+ 
+   if (argbuf_index > 0)
+     {
+-      int i, first;
++      int i, first, n;
+ 
+       first = n_switches;
+-      n_switches += argbuf_index;
+-      switches = XRESIZEVEC (struct switchstr, switches, n_switches + 1);
++      n = n_switches + argbuf_index;
++      switches = XRESIZEVEC (struct switchstr, switches, n + 1);
++      switches[n] = switches[first];
+ 
+       switches[n_switches] = switches[first];
+       for (i = 0; i < argbuf_index; i++)
+ 	{
+ 	  struct switchstr *sw;
++	  const char *p = &argbuf[i][1];
++	  int c = *p;
+ 
+ 	  /* Each switch should start with '-'.  */
+ 	  if (argbuf[i][0] != '-')
+ 	    fatal ("switch '%s' does not start with '-'", argbuf[i]);
+ 
+-	  sw = &switches[i + first];
++	  sw = &switches[n_switches];
+ 	  sw->part1 = &argbuf[i][1];
+ 	  sw->args = 0;
+ 	  sw->live_cond = 0;
+ 	  sw->validated = 0;
+ 	  sw->ordering = 0;
++
++	  /* Deal with option arguments in separate argv elements.  */
++	  if ((SWITCH_TAKES_ARG (c) > (p[1] != 0))
++	      || WORD_SWITCH_TAKES_ARG (p))
++	    {
++	      int j = 0;
++	      int n_args = WORD_SWITCH_TAKES_ARG (p);
++
++	      if (n_args == 0)
++		{
++		  /* Count only the option arguments in separate argv elements.  */
++		  n_args = SWITCH_TAKES_ARG (c) - (p[1] != 0);
++		}
++	      if (i + n_args >= argbuf_index)
++		fatal ("argument to '-%s' is missing", p);
++	      switches[n_switches].args
++		= XNEWVEC (const char *, n_args + 1);
++	      while (j < n_args)
++		switches[n_switches].args[j++] = argbuf[++i];
++	      /* Null-terminate the vector.  */
++	      switches[n_switches].args[j] = 0;
++	    }
++	  n_switches++;
+ 	}
+     }
+ }
+@@ -6873,7 +6983,9 @@
+ 		    " to the linker.\n\n"));
+ 	  fflush (stdout);
+ 	}
++      executing_linker = 1;
+       value = do_spec (link_command_spec);
++      executing_linker = 0;
+       if (value < 0)
+ 	error_count = 1;
+       linker_was_run = (tmp != execution_count);
+--- a/src/gcc/gcse.c
++++ b/src/gcc/gcse.c
+@@ -172,6 +172,7 @@
+ #include "hashtab.h"
+ #include "df.h"
+ #include "dbgcnt.h"
++#include "target.h"
+ 
+ /* Propagate flow information through back edges and thus enable PRE's
+    moving loop invariant calculations out of loops.
+@@ -1203,7 +1204,11 @@
+ 
+ static GTY(()) rtx test_insn;
+ 
+-/* Return true if we can assign X to a pseudo register.  */
++/* Return true if we can assign X to a pseudo register.
++
++   Additionally, if the target requires it, check that the resulting insn
++   can be copied.  If it cannot, this means that X is special and probably
++   has hidden side-effects we don't want to mess with.  */
+ 
+ static bool
+ can_assign_to_reg_p (rtx x)
+@@ -1233,8 +1238,18 @@
+      valid.  */
+   PUT_MODE (SET_DEST (PATTERN (test_insn)), GET_MODE (x));
+   SET_SRC (PATTERN (test_insn)) = x;
+-  return ((icode = recog (PATTERN (test_insn), test_insn, &num_clobbers)) >= 0
+-	  && (num_clobbers == 0 || ! added_clobbers_hard_reg_p (icode)));
++  
++  icode = recog (PATTERN (test_insn), test_insn, &num_clobbers);
++  if (icode < 0)
++    return false;
++  
++  if (num_clobbers > 0 && added_clobbers_hard_reg_p (icode))
++    return false;
++  
++  if (targetm.cannot_copy_insn_p && targetm.cannot_copy_insn_p (test_insn))
++    return false;
++  
++  return true;
+ }
+ 
+ /* Return nonzero if the operands of expression X are unchanged from the
+@@ -1744,7 +1759,9 @@
+ 	     REG_EQUIV notes and if the argument slot is used somewhere
+ 	     explicitly, it means address of parameter has been taken,
+ 	     so we should not extend the lifetime of the pseudo.  */
+-	  && (note == NULL_RTX || ! MEM_P (XEXP (note, 0))))
++	  && (note == NULL_RTX || ! MEM_P (XEXP (note, 0)))
++	  && ! (targetm.cannot_copy_insn_p && INSN_P (insn)
++		&& targetm.cannot_copy_insn_p (insn)))
+ 	{
+ 	  /* An expression is not anticipatable if its operands are
+ 	     modified before this insn or if this is not the only SET in
+--- a/src/gcc/genautomata.c
++++ b/src/gcc/genautomata.c
+@@ -1,5 +1,5 @@
+ /* Pipeline hazard description translator.
+-   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008
++   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
+    Free Software Foundation, Inc.
+ 
+    Written by Vladimir Makarov <vmakarov@redhat.com>
+@@ -22,21 +22,25 @@
+ 
+ /* References:
+ 
+-   1. Detecting pipeline structural hazards quickly. T. Proebsting,
++   1. The finite state automaton based pipeline hazard recognizer and
++      instruction scheduler in GCC.  V. Makarov.  Proceedings of GCC
++      summit, 2003.
++
++   2. Detecting pipeline structural hazards quickly. T. Proebsting,
+       C. Fraser. Proceedings of ACM SIGPLAN-SIGACT Symposium on
+       Principles of Programming Languages, pages 280--286, 1994.
+ 
+       This article is a good start point to understand usage of finite
+       state automata for pipeline hazard recognizers.  But I'd
+-      recommend the 2nd article for more deep understanding.
++      recommend the 1st and 3rd article for more deep understanding.
+ 
+-   2. Efficient Instruction Scheduling Using Finite State Automata:
++   3. Efficient Instruction Scheduling Using Finite State Automata:
+       V. Bala and N. Rubin, Proceedings of MICRO-28.  This is the best
+       article about usage of finite state automata for pipeline hazard
+       recognizers.
+ 
+-   The current implementation is different from the 2nd article in the
+-   following:
++   The current implementation is described in the 1st article and it
++   is different from the 3rd article in the following:
+ 
+    1. New operator `|' (alternative) is permitted in functional unit
+       reservation which can be treated deterministically and
+@@ -463,7 +467,10 @@
+      insn.  */
+   int insn_num;
+   /* The following field value is list of bypasses in which given insn
+-     is output insn.  */
++     is output insn.  Bypasses with the same input insn stay one after
++     another in the list in the same order as their occurrences in the
++     description but the bypass without a guard stays always the last
++     in a row of bypasses with the same input insn.  */
+   struct bypass_decl *bypass_list;
+ 
+   /* The following fields are defined by automaton generator.  */
+@@ -2367,18 +2374,67 @@
+ }
+ 
+ 
+-/* The function searches for bypass with given IN_INSN_RESERV in given
+-   BYPASS_LIST.  */
+-static struct bypass_decl *
+-find_bypass (struct bypass_decl *bypass_list,
+-	     struct insn_reserv_decl *in_insn_reserv)
+-{
+-  struct bypass_decl *bypass;
+-
+-  for (bypass = bypass_list; bypass != NULL; bypass = bypass->next)
+-    if (bypass->in_insn_reserv == in_insn_reserv)
+-      break;
+-  return bypass;
++/* The function inserts BYPASS in the list of bypasses of the
++   corresponding output insn.  The order of bypasses in the list is
++   decribed in a comment for member `bypass_list' (see above).  If
++   there is already the same bypass in the list the function reports
++   this and does nothing.  */
++static void
++insert_bypass (struct bypass_decl *bypass)
++{
++  struct bypass_decl *curr, *last;
++  struct insn_reserv_decl *out_insn_reserv = bypass->out_insn_reserv;
++  struct insn_reserv_decl *in_insn_reserv = bypass->in_insn_reserv;
++  
++  for (curr = out_insn_reserv->bypass_list, last = NULL;
++       curr != NULL;
++       last = curr, curr = curr->next)
++    if (curr->in_insn_reserv == in_insn_reserv)
++      {
++	if ((bypass->bypass_guard_name != NULL
++	     && curr->bypass_guard_name != NULL
++	     && ! strcmp (bypass->bypass_guard_name, curr->bypass_guard_name))
++	    || bypass->bypass_guard_name == curr->bypass_guard_name)
++	  {
++	    if (bypass->bypass_guard_name == NULL)
++	      {
++		if (!w_flag)
++		  error ("the same bypass `%s - %s' is already defined",
++			 bypass->out_insn_name, bypass->in_insn_name);
++		else
++		  warning (0, "the same bypass `%s - %s' is already defined",
++			   bypass->out_insn_name, bypass->in_insn_name);
++	      }
++	    else if (!w_flag)
++	      error ("the same bypass `%s - %s' (guard %s) is already defined",
++		     bypass->out_insn_name, bypass->in_insn_name,
++		     bypass->bypass_guard_name);
++	    else
++	      warning
++		(0, "the same bypass `%s - %s' (guard %s) is already defined",
++		 bypass->out_insn_name, bypass->in_insn_name,
++		 bypass->bypass_guard_name);
++	    return;
++	  }
++	if (curr->bypass_guard_name == NULL)
++	  break;
++	if (curr->next == NULL || curr->next->in_insn_reserv != in_insn_reserv)
++	  {
++	    last = curr;
++	    break;
++	  }
++	  
++      }
++  if (last == NULL)
++    {
++      bypass->next = out_insn_reserv->bypass_list;
++      out_insn_reserv->bypass_list = bypass;
++    }
++  else
++    {
++      bypass->next = last->next;
++      last->next = bypass;
++    }
+ }
+ 
+ /* The function processes pipeline description declarations, checks
+@@ -2391,7 +2447,6 @@
+   decl_t decl_in_table;
+   decl_t out_insn_reserv;
+   decl_t in_insn_reserv;
+-  struct bypass_decl *bypass;
+   int automaton_presence;
+   int i;
+ 
+@@ -2514,36 +2569,7 @@
+ 		= DECL_INSN_RESERV (out_insn_reserv);
+ 	      DECL_BYPASS (decl)->in_insn_reserv
+ 		= DECL_INSN_RESERV (in_insn_reserv);
+-	      bypass
+-		= find_bypass (DECL_INSN_RESERV (out_insn_reserv)->bypass_list,
+-			       DECL_BYPASS (decl)->in_insn_reserv);
+-	      if (bypass != NULL)
+-		{
+-		  if (DECL_BYPASS (decl)->latency == bypass->latency)
+-		    {
+-		      if (!w_flag)
+-			error
+-			  ("the same bypass `%s - %s' is already defined",
+-			   DECL_BYPASS (decl)->out_insn_name,
+-			   DECL_BYPASS (decl)->in_insn_name);
+-		      else
+-			warning
+-			  (0, "the same bypass `%s - %s' is already defined",
+-			   DECL_BYPASS (decl)->out_insn_name,
+-			   DECL_BYPASS (decl)->in_insn_name);
+-		    }
+-		  else
+-		    error ("bypass `%s - %s' is already defined",
+-			   DECL_BYPASS (decl)->out_insn_name,
+-			   DECL_BYPASS (decl)->in_insn_name);
+-		}
+-	      else
+-		{
+-		  DECL_BYPASS (decl)->next
+-		    = DECL_INSN_RESERV (out_insn_reserv)->bypass_list;
+-		  DECL_INSN_RESERV (out_insn_reserv)->bypass_list
+-		    = DECL_BYPASS (decl);
+-		}
++	      insert_bypass (DECL_BYPASS (decl));
+ 	    }
+ 	}
+     }
+@@ -8159,19 +8185,32 @@
+ 			    (advance_cycle_insn_decl)->insn_num));
+ 	    fprintf (output_file, "        case %d:\n",
+ 		     bypass->in_insn_reserv->insn_num);
+-	    if (bypass->bypass_guard_name == NULL)
+-	      fprintf (output_file, "          return %d;\n",
+-		       bypass->latency);
+-	    else
++	    for (;;)
+ 	      {
+-		fprintf (output_file,
+-			 "          if (%s (%s, %s))\n",
+-			 bypass->bypass_guard_name, INSN_PARAMETER_NAME,
+-			 INSN2_PARAMETER_NAME);
+-		fprintf (output_file,
+-			 "            return %d;\n          break;\n",
+-			 bypass->latency);
++		if (bypass->bypass_guard_name == NULL)
++		  {
++		    gcc_assert (bypass->next == NULL
++				|| (bypass->in_insn_reserv
++				    != bypass->next->in_insn_reserv));
++		    fprintf (output_file, "          return %d;\n",
++			     bypass->latency);
++		  }
++		else
++		  {
++		    fprintf (output_file,
++			     "          if (%s (%s, %s))\n",
++			     bypass->bypass_guard_name, INSN_PARAMETER_NAME,
++			     INSN2_PARAMETER_NAME);
++		    fprintf (output_file, "            return %d;\n",
++			     bypass->latency);
++		  }
++		if (bypass->next == NULL
++		    || bypass->in_insn_reserv != bypass->next->in_insn_reserv)
++		  break;
++		bypass = bypass->next;
+ 	      }
++	    if (bypass->bypass_guard_name != NULL)
++	      fprintf (output_file, "          break;\n");
+ 	  }
+ 	fputs ("        }\n      break;\n", output_file);
+       }
+--- a/src/gcc/gengtype-lex.l
++++ b/src/gcc/gengtype-lex.l
+@@ -48,7 +48,7 @@
+ ID	[[:alpha:]_][[:alnum:]_]*
+ WS	[[:space:]]+
+ HWS	[ \t\r\v\f]*
+-IWORD	short|long|(un)?signed|char|int|HOST_WIDE_INT|HOST_WIDEST_INT|bool|size_t|BOOL_BITFIELD|CPPCHAR_SIGNED_T|ino_t|dev_t
++IWORD	short|long|(un)?signed|char|int|HOST_WIDE_INT|HOST_WIDEST_INT|bool|size_t|BOOL_BITFIELD|CPPCHAR_SIGNED_T|ino_t|dev_t|HARD_REG_SET
+ ITYPE	{IWORD}({WS}{IWORD})*
+ EOID	[^[:alnum:]_]
+ 
+--- a/src/gcc/genmultilib
++++ b/src/gcc/genmultilib
+@@ -73,6 +73,20 @@
+ # the os directory names are used exclusively.  Use the mapping when
+ # there is no one-to-one equivalence between GCC levels and the OS.
+ 
++# The optional eighth option is a list of multilib aliases.  This takes the
++# same form as the third argument.  It specifies that the second multilib is
++# a synonym for the first.  This allows a suitable multilib to be selected
++# for all option combinations while only building a subset of all possible
++# multilibs.
++# For example:
++#   genmultilib "mbig-endian mthumb" "eb thumb" "" "" "" "" "" \
++#		"mbig-endian=mbig-endian/mthumb" yes
++# This produces:
++#   ". !mbig-endian !mthumb;",
++#   "be mbig-endian !mthumb;",
++#   "be mbig-endian mthumb;",
++#   "thumb !mbig-endian mthumb;",
++
+ # The last option should be "yes" if multilibs are enabled.  If it is not
+ # "yes", all GCC multilib dir names will be ".".
+ 
+@@ -121,7 +135,8 @@
+ extra=$5
+ exclusions=$6
+ osdirnames=$7
+-enable_multilib=$8
++aliases=$8
++enable_multilib=$9
+ 
+ echo "static const char *const multilib_raw[] = {"
+ 
+@@ -129,6 +144,23 @@
+ # Use cd ./foo to avoid CDPATH output.
+ cd ./tmpmultilib.$$ || exit 1
+ 
++# Handle aliases
++cat >tmpmultilib3 <<\EOF
++#!/bin/sh
++# Output a list of aliases (including the original name) for a multilib.
++
++echo $1
++EOF
++for a in ${aliases}; do
++  l=`echo $a | sed -e 's/=.*$//' -e 's/?/=/g'`
++  r=`echo $a | sed -e 's/^.*=//' -e 's/?/=/g'`
++  echo "[ \$1 == /$l/ ] && echo /$r/" >>tmpmultilib3
++  
++  # Also add the alias to the exclusion list
++  exceptions="${exceptions} $r"
++done
++chmod +x tmpmultilib3
++
+ # What we want to do is select all combinations of the sets in
+ # options.  Each combination which includes a set of mutually
+ # exclusive options must then be output multiple times, once for each
+@@ -195,6 +227,21 @@
+   combinations=`./tmpmultilib2 ${combinations}`
+ fi
+ 
++# Check that all the aliases actually exist
++for a in ${aliases}; do
++  l=`echo $a | sed -e 's/=.*$//' -e 's/?/=/g'`
++  for c in ${combinations}; do
++    if [ "/$l/" = "$c" ]; then
++      l=""
++      break;
++    fi
++  done
++  if [ -n "$l" ] ;then
++    echo "Missing multilib $l for alias $a" 1>&2
++    exit 1
++  fi
++done
++
+ # Construct a sed pattern which will convert option names to directory
+ # names.
+ todirnames=
+@@ -343,23 +390,25 @@
+     fi
+   fi
+ 
+-  # Look through the options.  We must output each option that is
+-  # present, and negate each option that is not present.
+-  optout=
+-  for set in ${options}; do
+-    setopts=`echo ${set} | sed -e 's_[/|]_ _g'`
+-    for opt in ${setopts}; do
+-      if expr "${combo} " : ".*/${opt}/.*" > /dev/null; then
+-	optout="${optout} ${opt}"
+-      else
+-	optout="${optout} !${opt}"
+-      fi
++  for optcombo in `./tmpmultilib3 ${combo}`; do
++    # Look through the options.  We must output each option that is
++    # present, and negate each option that is not present.
++    optout=
++    for set in ${options}; do
++      setopts=`echo ${set} | sed -e 's_[/|]_ _g'`
++      for opt in ${setopts}; do
++	if expr "${optcombo} " : ".*/${opt}/.*" > /dev/null; then
++	  optout="${optout} ${opt}"
++	else
++	  optout="${optout} !${opt}"
++	fi
++      done
+     done
+-  done
+-  optout=`echo ${optout} | sed -e 's/^ //'`
++    optout=`echo ${optout} | sed -e 's/^ //'`
+ 
+-  # Output the line with all appropriate matches.
+-  dirout="${dirout}" optout="${optout}" ./tmpmultilib2
++    # Output the line with all appropriate matches.
++    dirout="${dirout}" optout="${optout}" ./tmpmultilib2
++  done
+ done
+ 
+ # Terminate the list of string.
+--- a/src/gcc/gimple.h
++++ b/src/gcc/gimple.h
+@@ -1020,6 +1020,7 @@
+ 
+ /* In tree-ssa.c  */
+ extern bool tree_ssa_useless_type_conversion (tree);
++extern tree tree_ssa_strip_useless_type_conversions (tree);
+ extern bool useless_type_conversion_p (tree, tree);
+ extern bool types_compatible_p (tree, tree);
+ 
+--- a/src/gcc/gthr-win32.h
++++ b/src/gcc/gthr-win32.h
+@@ -67,7 +67,9 @@
+ 
+ #define __GTHREADS 1
+ 
++#ifndef __MINGW32CE__
+ #include <errno.h>
++#endif
+ #ifdef __MINGW32__
+ #include <_mingw.h>
+ #endif
+@@ -535,7 +537,9 @@
+ #else /* ! __GTHREAD_HIDE_WIN32API */
+ 
+ #include <windows.h>
++#ifndef __MINGW32CE__
+ #include <errno.h>
++#endif
+ 
+ static inline int
+ __gthread_once (__gthread_once_t *__once, void (*__func) (void))
+@@ -543,7 +547,11 @@
+   if (! __gthread_active_p ())
+     return -1;
+   else if (__once == NULL || __func == NULL)
++#ifdef __MINGW32CE__
++    return -1;
++#else
+     return EINVAL;
++#endif
+ 
+   if (! __once->done)
+     {
+--- a/src/gcc/haifa-sched.c
++++ b/src/gcc/haifa-sched.c
+@@ -1990,6 +1990,23 @@
+   SCHED_GROUP_P (insn) = 0;  
+ }
+ 
++/* Return true if scheduling INSN will finish current clock cycle.  */
++static bool
++insn_finishes_cycle_p (rtx insn)
++{
++  if (SCHED_GROUP_P (insn))
++    /* After issuing INSN, rest of the sched_group will be forced to issue
++       in order.  Don't make any plans for the rest of cycle.  */
++    return true;
++
++  /* Finishing the block will, apparently, finish the cycle.  */
++  if (current_sched_info->insn_finishes_block_p
++      && current_sched_info->insn_finishes_block_p (insn))
++    return true;
++
++  return false;
++}
++
+ /* The following structure describe an entry of the stack of choices.  */
+ struct choice_entry
+ {
+@@ -2168,7 +2185,10 @@
+ 	  delay = state_transition (state, insn);
+ 	  if (delay < 0)
+ 	    {
+-	      if (state_dead_lock_p (state))
++	      if (state_dead_lock_p (state)
++		  || insn_finishes_cycle_p (insn))
++ 		/* We won't issue any more instructions in the next
++ 		   choice_state.  */
+ 		top->rest = 0;
+ 	      else
+ 		top->rest--;
+--- a/src/gcc/hooks.c
++++ b/src/gcc/hooks.c
+@@ -335,3 +335,10 @@
+ {
+   return NULL;
+ }
++
++/* Generic hook that takes a const_tree and returns NULL_TREE.  */
++tree
++hook_tree_const_tree_null (const_tree t ATTRIBUTE_UNUSED)
++{
++  return NULL;
++}
+--- a/src/gcc/hooks.h
++++ b/src/gcc/hooks.h
+@@ -64,6 +64,8 @@
+ extern int hook_int_size_t_constcharptr_int_0 (size_t, const char *, int);
+ extern int hook_int_void_no_regs (void);
+ 
++extern tree hook_tree_const_tree_null (const_tree);
++
+ extern tree hook_tree_tree_tree_null (tree, tree);
+ extern tree hook_tree_tree_tree_tree_null (tree, tree, tree);
+ extern tree hook_tree_tree_tree_tree_3rd_identity (tree, tree, tree);
+--- a/src/gcc/ifcvt.c
++++ b/src/gcc/ifcvt.c
+@@ -390,7 +390,11 @@
+   rtx false_expr;		/* test for then block insns */
+   rtx true_prob_val;		/* probability of else block */
+   rtx false_prob_val;		/* probability of then block */
+-  int n_insns;
++  rtx then_last_head = NULL_RTX;	/* Last match at the head of THEN */
++  rtx else_last_head = NULL_RTX;	/* Last match at the head of ELSE */
++  rtx then_first_tail = NULL_RTX;	/* First match at the tail of THEN */
++  rtx else_first_tail = NULL_RTX;	/* First match at the tail of ELSE */
++  int then_n_insns, else_n_insns, n_insns;
+   enum rtx_code false_code;
+ 
+   /* If test is comprised of && or || elements, and we've failed at handling
+@@ -423,15 +427,80 @@
+      number of insns and see if it is small enough to convert.  */
+   then_start = first_active_insn (then_bb);
+   then_end = last_active_insn (then_bb, TRUE);
+-  n_insns = ce_info->num_then_insns = count_bb_insns (then_bb);
++  then_n_insns = ce_info->num_then_insns = count_bb_insns (then_bb);
++  n_insns = then_n_insns;
+   max = MAX_CONDITIONAL_EXECUTE;
+ 
+   if (else_bb)
+     {
++      int n_matching;
++
+       max *= 2;
+       else_start = first_active_insn (else_bb);
+       else_end = last_active_insn (else_bb, TRUE);
+-      n_insns += ce_info->num_else_insns = count_bb_insns (else_bb);
++      else_n_insns = ce_info->num_else_insns = count_bb_insns (else_bb);
++      n_insns += else_n_insns;
++
++      /* Look for matching sequences at the head and tail of the two blocks,
++	 and limit the range of insns to be converted if possible.  */
++      n_matching = flow_find_cross_jump (0, then_bb, else_bb,
++					 &then_first_tail, &else_first_tail);
++      if (then_first_tail == BB_HEAD (then_bb))
++	then_start = then_end = NULL_RTX;
++      if (else_first_tail == BB_HEAD (else_bb))
++	else_start = else_end = NULL_RTX;
++
++      if (n_matching > 0)
++	{
++	  if (then_end)
++	    then_end = prev_active_insn (then_first_tail);
++	  if (else_end)
++	    else_end = prev_active_insn (else_first_tail);
++	  n_insns -= 2 * n_matching;
++	}
++
++      if (then_start && else_start)
++	{
++	  int longest_match = MIN (then_n_insns - n_matching,
++				   else_n_insns - n_matching);
++	  n_matching
++	    = flow_find_head_matching_sequence (0, then_bb, else_bb,
++						&then_last_head,
++						&else_last_head,
++						longest_match);
++      
++	  if (then_last_head == then_end)
++	    then_start = then_end = NULL_RTX;
++	  if (else_last_head == else_end)
++	    else_start = else_end = NULL_RTX;
++
++	  if (n_matching > 0)
++	    {
++	      rtx insn;
++
++	      if (then_start)
++		then_start = next_active_insn (then_last_head);
++	      if (else_start)
++		else_start = next_active_insn (else_last_head);
++	      n_insns -= 2 * n_matching;
++
++	      /* We won't pass the insns in the head sequence to
++		 cond_exec_process_insns, so we need to test them here
++		 to make sure that they don't clobber the condition.  */
++	      insn = BB_HEAD (then_bb);
++	      for (;;)
++		{
++		  if (!LABEL_P (insn) && !NOTE_P (insn))
++		    {
++		      if (modified_in_p (test_expr, insn))
++			return FALSE;
++		    }
++		  if (insn == then_last_head)
++		    break;
++		  insn = NEXT_INSN (insn);
++		}
++	    }
++	}
+     }
+ 
+   if (n_insns > max)
+@@ -575,7 +644,18 @@
+     fprintf (dump_file, "%d insn%s converted to conditional execution.\n",
+ 	     n_insns, (n_insns == 1) ? " was" : "s were");
+ 
+-  /* Merge the blocks!  */
++  /* Merge the blocks!  If we had matching sequences, make sure to delete one
++     copy at the appropriate location first.  */
++  if (then_first_tail)
++    {
++      rtx from = then_first_tail;
++      if (!INSN_P (from))
++	from = next_active_insn (from);
++      delete_insn_chain (from, BB_END (then_bb), false);
++    }
++  if (else_last_head)
++    delete_insn_chain (first_active_insn (else_bb), else_last_head, false);
++
+   merge_if_block (ce_info);
+   cond_exec_changed_p = TRUE;
+   return TRUE;
+--- a/src/gcc/incpath.c
++++ b/src/gcc/incpath.c
+@@ -30,6 +30,8 @@
+ #include "intl.h"
+ #include "incpath.h"
+ #include "cppdefault.h"
++#include "flags.h"
++#include "toplev.h"
+ 
+ /* Microsoft Windows does not natively support inodes.
+    VMS has non-numeric inodes.  */
+@@ -353,6 +355,24 @@
+ 	}
+       fprintf (stderr, _("End of search list.\n"));
+     }
++
++#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
++  if (flag_poison_system_directories)
++    {
++	struct cpp_dir *p;
++
++	for (p = heads[QUOTE]; p; p = p->next)
++	  {
++	   if ((!strncmp (p->name, "/usr/include", 12))
++	       || (!strncmp (p->name, "/usr/local/include", 18))
++	       || (!strncmp (p->name, "/usr/X11R6/include", 18)))
++	     warning (OPT_Wpoison_system_directories,
++		      "include location \"%s\" is unsafe for "
++		      "cross-compilation",
++		      p->name);
++	  }
++    }
++#endif
+ }
+ 
+ /* Use given -I paths for #include "..." but not #include <...>, and
+--- a/src/gcc/input.h
++++ b/src/gcc/input.h
+@@ -1,6 +1,6 @@
+ /* Declarations for variables relating to reading the source file.
+    Used by parsers, lexical analyzers, and error message routines.
+-   Copyright (C) 1993, 1997, 1998, 2000, 2003, 2004, 2007, 2008
++   Copyright (C) 1993, 1997, 1998, 2000, 2003, 2004, 2007, 2008, 2009
+    Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+@@ -30,7 +30,12 @@
+ #define UNKNOWN_LOCATION ((source_location) 0)
+ 
+ /* The location for declarations in "<built-in>" */
+-#define BUILTINS_LOCATION ((source_location) 2)
++#define BUILTINS_LOCATION ((source_location) 1)
++
++/* line-map.c reserves RESERVED_LOCATION_COUNT to the user.  Ensure
++   both UNKNOWN_LOCATION and BUILTINS_LOCATION fit into that.  */
++extern char builtins_location_check[(BUILTINS_LOCATION
++				     < RESERVED_LOCATION_COUNT) ? 1 : -1];
+ 
+ typedef struct GTY (())
+ {
+--- a/src/gcc/ira-costs.c
++++ b/src/gcc/ira-costs.c
+@@ -209,6 +209,14 @@
+       int alt_fail = 0;
+       int alt_cost = 0, op_cost_add;
+ 
++      if (!recog_data.alternative_enabled_p[alt])
++	{
++	  for (i = 0; i < recog_data.n_operands; i++)
++	    constraints[i] = skip_alternative (constraints[i]);
++
++	  continue;
++	}
++
+       for (i = 0; i < n_ops; i++)
+ 	{
+ 	  unsigned char c;
+@@ -706,11 +714,11 @@
+ 
+ /* Wrapper around REGNO_OK_FOR_INDEX_P, to allow pseudo registers.  */
+ static inline bool
+-ok_for_index_p_nonstrict (rtx reg)
++ok_for_index_p_nonstrict (rtx reg, enum machine_mode mode)
+ {
+   unsigned regno = REGNO (reg);
+ 
+-  return regno >= FIRST_PSEUDO_REGISTER || REGNO_OK_FOR_INDEX_P (regno);
++  return regno >= FIRST_PSEUDO_REGISTER || ok_for_index_p_1 (regno, mode);
+ }
+ 
+ /* A version of regno_ok_for_base_p for use here, when all
+@@ -748,7 +756,7 @@
+   enum reg_class rclass;
+ 
+   if (context == 1)
+-    rclass = INDEX_REG_CLASS;
++    rclass = index_reg_class (mode);
+   else
+     rclass = base_reg_class (mode, outer_code, index_code);
+ 
+@@ -795,7 +803,8 @@
+ 	   just record registers in any non-constant operands.  We
+ 	   assume here, as well as in the tests below, that all
+ 	   addresses are in canonical form.  */
+-	else if (INDEX_REG_CLASS == base_reg_class (VOIDmode, PLUS, SCRATCH))
++	else if (index_reg_class (mode)
++		 == base_reg_class (mode, PLUS, SCRATCH))
+ 	  {
+ 	    record_address_regs (mode, arg0, context, PLUS, code1, scale);
+ 	    if (! CONSTANT_P (arg1))
+@@ -816,7 +825,7 @@
+ 	else if (code0 == REG && code1 == REG
+ 		 && REGNO (arg0) < FIRST_PSEUDO_REGISTER
+ 		 && (ok_for_base_p_nonstrict (arg0, mode, PLUS, REG)
+-		     || ok_for_index_p_nonstrict (arg0)))
++		     || ok_for_index_p_nonstrict (arg0, mode)))
+ 	  record_address_regs (mode, arg1,
+ 			       ok_for_base_p_nonstrict (arg0, mode, PLUS, REG)
+ 			       ? 1 : 0,
+@@ -824,7 +833,7 @@
+ 	else if (code0 == REG && code1 == REG
+ 		 && REGNO (arg1) < FIRST_PSEUDO_REGISTER
+ 		 && (ok_for_base_p_nonstrict (arg1, mode, PLUS, REG)
+-		     || ok_for_index_p_nonstrict (arg1)))
++		     || ok_for_index_p_nonstrict (arg1, mode)))
+ 	  record_address_regs (mode, arg0,
+ 			       ok_for_base_p_nonstrict (arg1, mode, PLUS, REG)
+ 			       ? 1 : 0,
+--- a/src/gcc/ira.c
++++ b/src/gcc/ira.c
+@@ -1349,14 +1349,12 @@
+   return for_each_rtx (&insn, insn_contains_asm_1, NULL);
+ }
+ 
+-/* Set up regs_asm_clobbered.  */
++/* Add register clobbers from asm statements.  */
+ static void
+-compute_regs_asm_clobbered (char *regs_asm_clobbered)
++compute_regs_asm_clobbered (void)
+ {
+   basic_block bb;
+ 
+-  memset (regs_asm_clobbered, 0, sizeof (char) * FIRST_PSEUDO_REGISTER);
+-  
+   FOR_EACH_BB (bb)
+     {
+       rtx insn;
+@@ -1377,7 +1375,7 @@
+ 		      + hard_regno_nregs[dregno][mode] - 1;
+ 
+ 		    for (i = dregno; i <= end; ++i)
+-		      regs_asm_clobbered[i] = 1;
++		      SET_HARD_REG_BIT(crtl->asm_clobbers, i);
+ 		  }
+ 	      }
+ 	}
+@@ -1389,12 +1387,6 @@
+ static void
+ setup_eliminable_regset (void)
+ {
+-  /* Like regs_ever_live, but 1 if a reg is set or clobbered from an
+-     asm.  Unlike regs_ever_live, elements of this array corresponding
+-     to eliminable regs (like the frame pointer) are set if an asm
+-     sets them.  */
+-  char *regs_asm_clobbered
+-    = (char *) alloca (FIRST_PSEUDO_REGISTER * sizeof (char));
+ #ifdef ELIMINABLE_REGS
+   int i;
+   static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS;
+@@ -1415,7 +1407,8 @@
+   COPY_HARD_REG_SET (ira_no_alloc_regs, no_unit_alloc_regs);
+   CLEAR_HARD_REG_SET (eliminable_regset);
+ 
+-  compute_regs_asm_clobbered (regs_asm_clobbered);
++  compute_regs_asm_clobbered ();
++
+   /* Build the regset of all eliminable registers and show we can't
+      use those that we already know won't be eliminated.  */
+ #ifdef ELIMINABLE_REGS
+@@ -1425,7 +1418,7 @@
+ 	= (! CAN_ELIMINATE (eliminables[i].from, eliminables[i].to)
+ 	   || (eliminables[i].to == STACK_POINTER_REGNUM && need_fp));
+ 
+-      if (! regs_asm_clobbered[eliminables[i].from])
++      if (!TEST_HARD_REG_BIT (crtl->asm_clobbers, eliminables[i].from))
+ 	{
+ 	    SET_HARD_REG_BIT (eliminable_regset, eliminables[i].from);
+ 
+@@ -1439,7 +1432,7 @@
+ 	df_set_regs_ever_live (eliminables[i].from, true);
+     }
+ #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
+-  if (! regs_asm_clobbered[HARD_FRAME_POINTER_REGNUM])
++  if (!TEST_HARD_REG_BIT (crtl->asm_clobbers, HARD_FRAME_POINTER_REGNUM))
+     {
+       SET_HARD_REG_BIT (eliminable_regset, HARD_FRAME_POINTER_REGNUM);
+       if (need_fp)
+@@ -1453,7 +1446,7 @@
+ #endif
+ 
+ #else
+-  if (! regs_asm_clobbered[FRAME_POINTER_REGNUM])
++  if (!TEST_HARD_REG_BIT (crtl->asm_clobbers, HARD_FRAME_POINTER_REGNUM))
+     {
+       SET_HARD_REG_BIT (eliminable_regset, FRAME_POINTER_REGNUM);
+       if (need_fp)
+--- a/src/gcc/java/Make-lang.in
++++ b/src/gcc/java/Make-lang.in
+@@ -28,7 +28,7 @@
+ #
+ # foo.all.cross, foo.start.encap, foo.rest.encap,
+ # foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
+-# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
++# foo.install-html, foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
+ # foo.mostlyclean, foo.clean, foo.distclean,
+ # foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
+ #
+@@ -137,7 +137,9 @@
+ 
+ java.pdf: $(JAVA_PDFFILES)
+ 
+-java.html: $(build_htmldir)/java/index.html
++JAVA_HTMLFILES = $(build_htmldir)/java
++
++java.html: $(JAVA_HTMLFILES)/index.html
+ 
+ JAVA_MANFILES = doc/gcj.1 doc/jcf-dump.1 doc/gij.1 \
+                 doc/jv-convert.1 doc/grmic.1 \
+@@ -203,6 +205,22 @@
+ 	  $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
+ 	done
+ 
++java.install-html: $(JAVA_HTMLFILES)
++	@$(NORMAL_INSTALL)
++	test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)"
++	@list='$(JAVA_HTMLFILES)'; for p in $$list; do \
++	  if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \
++	  f=$(html__strip_dir) \
++	  if test -d "$$d$$p"; then \
++	    echo " $(mkinstalldirs) '$(DESTDIR)$(htmldir)/$$f'"; \
++	    $(mkinstalldirs) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
++	    echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
++	    $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
++	  else \
++	    echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
++	    $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
++	  fi; \
++	done
+ #
+ # Clean hooks:
+ # A lot of the ancillary files are deleted by the main makefile.
+--- a/src/gcc/java/builtins.c
++++ b/src/gcc/java/builtins.c
+@@ -305,7 +305,8 @@
+ {
+   enum machine_mode mode = TYPE_MODE (int_type_node);
+   if (sync_compare_and_swap_cc[mode] != CODE_FOR_nothing 
+-      || sync_compare_and_swap[mode] != CODE_FOR_nothing)
++      || sync_compare_and_swap[mode] != CODE_FOR_nothing
++      || flag_use_atomic_builtins)
+     {
+       tree addr, stmt;
+       UNMARSHAL5 (orig_call);
+@@ -325,7 +326,12 @@
+ {
+   enum machine_mode mode = TYPE_MODE (long_type_node);
+   if (sync_compare_and_swap_cc[mode] != CODE_FOR_nothing 
+-      || sync_compare_and_swap[mode] != CODE_FOR_nothing)
++      || sync_compare_and_swap[mode] != CODE_FOR_nothing
++      || (GET_MODE_SIZE (mode) <= GET_MODE_SIZE (word_mode)
++	  && flag_use_atomic_builtins))
++    /* We don't trust flag_use_atomic_builtins for multi-word
++       compareAndSwap.  Some machines such as ARM have atomic libfuncs
++       but not the multi-word versions.  */
+     {
+       tree addr, stmt;
+       UNMARSHAL5 (orig_call);
+@@ -344,7 +350,8 @@
+ {
+   enum machine_mode mode = TYPE_MODE (ptr_type_node);
+   if (sync_compare_and_swap_cc[mode] != CODE_FOR_nothing 
+-      || sync_compare_and_swap[mode] != CODE_FOR_nothing)
++      || sync_compare_and_swap[mode] != CODE_FOR_nothing
++      || flag_use_atomic_builtins)
+   {
+     tree addr, stmt;
+     int builtin;
+--- a/src/gcc/java/java-tree.h
++++ b/src/gcc/java/java-tree.h
+@@ -145,6 +145,9 @@
+ /* When nonzero, call a library routine to do integer divisions. */
+ extern int flag_use_divide_subroutine;
+ 
++/* When nonzero, use atomic builtins. */
++extern int flag_use_atomic_builtins;
++
+ /* When nonzero, generate code for the Boehm GC.  */
+ extern int flag_use_boehm_gc;
+ 
+--- a/src/gcc/java/jvspec.c
++++ b/src/gcc/java/jvspec.c
+@@ -73,6 +73,7 @@
+ 		   %<fclasspath* %<fCLASSPATH* %<fbootclasspath*\
+ 		   %<fextdirs*\
+ 		   %<fuse-divide-subroutine %<fno-use-divide-subroutine\
++		   %<fuse-atomic-builtins %<fno-use-atomic-builtins\
+ 		   %<fcheck-references %<fno-check-references\
+ 		   %<ffilelist-file %<fsaw-java-file %<fsource* %<ftarget*\
+ 		   %{f*} -fdollars-in-identifiers\
+--- a/src/gcc/java/lang.opt
++++ b/src/gcc/java/lang.opt
+@@ -192,6 +192,10 @@
+ Java Var(flag_use_divide_subroutine) Init(1)
+ Call a library routine to do integer divisions
+ 
++fuse-atomic-builtins
++Java Var(flag_use_atomic_builtins) Init(0)
++Generate code for built-in atomic operations
++
+ fbootstrap-classes
+ Java Var(flag_bootstrap_classes)
+ Generated should be loaded by bootstrap loader
+--- a/src/gcc/modulo-sched.c
++++ b/src/gcc/modulo-sched.c
+@@ -270,6 +270,7 @@
+   NULL,
+   sms_print_insn,
+   NULL,
++  NULL, /* insn_finishes_block_p */
+   NULL, NULL,
+   NULL, NULL,
+   0, 0,
+--- a/src/gcc/objc/Make-lang.in
++++ b/src/gcc/objc/Make-lang.in
+@@ -24,7 +24,7 @@
+ #
+ # foo.all.cross, foo.start.encap, foo.rest.encap,
+ # foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
+-# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
++# foo.install-html, foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
+ # foo.mostlyclean, foo.clean, foo.distclean,
+ # foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
+ #
+@@ -95,6 +95,7 @@
+ objc.pdf:
+ objc.install-pdf:
+ objc.html:
++objc.install-html:
+ objc.man:
+ objc.srcinfo:
+ objc.srcman:
+--- a/src/gcc/objc/lang-specs.h
++++ b/src/gcc/objc/lang-specs.h
+@@ -26,29 +26,33 @@
+   {"@objective-c",
+      "%{E|M|MM:cc1obj -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}\
+           %(cpp_options) %(cpp_debug_options)}\
++        %{fsection-anchors: %eGNU Objective C can't use -fsection-anchors} \
+       %{!E:%{!M:%{!MM:\
+ 	%{traditional|ftraditional|traditional-cpp:\
+ %eGNU Objective C no longer supports traditional compilation}\
+ 	%{save-temps|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps:%b.mi} %{!save-temps:%g.mi} \n\
+-	    cc1obj -fpreprocessed %{save-temps:%b.mi} %{!save-temps:%g.mi} %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}\
++           cc1obj -fpreprocessed -fno-section-anchors %{save-temps:%b.mi} %{!save-temps:%g.mi} %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}\
+ 	%{!save-temps:%{!no-integrated-cpp:\
+-	    cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}}\
++	    cc1obj %(cpp_unique_options) -fno-section-anchors %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}}\
+         %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+   {".mi", "@objc-cpp-output", 0, 0, 0},
+   {"@objc-cpp-output",
+-     "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
+-			     %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
++     "%{!M:%{!MM:%{!E:cc1obj -fno-section-anchors -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++			     %{!fsyntax-only:%(invoke_as)}}}}   \
++    %{fsection-anchors: %eGNU Objective C can't use -fsection-anchors} ", 0, 0, 0},
+   {"@objective-c-header",
+      "%{E|M|MM:cc1obj -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}\
+           %(cpp_options) %(cpp_debug_options)}\
++        %{fsection-anchors: %eGNU Objective C can't use -fsection-anchors} \
+       %{!E:%{!M:%{!MM:\
+ 	%{traditional|ftraditional|traditional-cpp:\
+ %eGNU Objective C no longer supports traditional compilation}\
+ 	%{save-temps|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps:%b.mi} %{!save-temps:%g.mi} \n\
+-	    cc1obj -fpreprocessed %b.mi %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++	    cc1obj -fpreprocessed %b.mi %(cc1_options) -fno-section-anchors %{print-objc-runtime-info} %{gen-decls}\
+                         -o %g.s %{!o*:--output-pch=%i.gch}\
+                         %W{o*:--output-pch=%*}%V}\
++        %{fsection-anchors: %eGNU Objective C can't use -fsection-anchors} \
+ 	%{!save-temps:%{!no-integrated-cpp:\
+-	    cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
++	    cc1obj %(cpp_unique_options) -fno-section-anchors %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
+                         -o %g.s %{!o*:--output-pch=%i.gch}\
+                         %W{o*:--output-pch=%*}%V}}}}}", 0, 0, 0},
+--- a/src/gcc/objcp/Make-lang.in
++++ b/src/gcc/objcp/Make-lang.in
+@@ -24,7 +24,7 @@
+ #
+ # foo.all.cross, foo.start.encap, foo.rest.encap,
+ # foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
+-# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
++# foo.install-html, foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
+ # foo.mostlyclean, foo.clean, foo.distclean,
+ # foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
+ #
+@@ -103,6 +103,7 @@
+ obj-c++.pdf:
+ obj-c++.install-pdf:
+ obj-c++.html:
++obj-c++.install-html:
+ obj-c++.srcinfo:
+ obj-c++.srcextra:
+ obj-c++.man:
+--- a/src/gcc/optabs.c
++++ b/src/gcc/optabs.c
+@@ -3300,7 +3300,8 @@
+       if (unoptab == ffs_optab || unoptab == clz_optab || unoptab == ctz_optab
+ 	  || unoptab == popcount_optab || unoptab == parity_optab)
+ 	outmode
+-	    = GET_MODE (hard_libcall_value (TYPE_MODE (integer_type_node)));
++	  = GET_MODE (hard_libcall_value (TYPE_MODE (integer_type_node),
++					  optab_libfunc (unoptab, mode)));
+ 
+       start_sequence ();
+ 
+@@ -4357,10 +4358,12 @@
+        mode != VOIDmode;
+        mode = GET_MODE_WIDER_MODE (mode))
+     {
+-      if ((libfunc = optab_libfunc (code_to_optab[comparison], mode)))
++      if (code_to_optab[comparison]
++	  && (libfunc = optab_libfunc (code_to_optab[comparison], mode)))
+ 	break;
+ 
+-      if ((libfunc = optab_libfunc (code_to_optab[swapped] , mode)))
++      if (code_to_optab[swapped]
++	  && (libfunc = optab_libfunc (code_to_optab[swapped], mode)))
+ 	{
+ 	  rtx tmp;
+ 	  tmp = x; x = y; y = tmp;
+@@ -4368,7 +4371,8 @@
+ 	  break;
+ 	}
+ 
+-      if ((libfunc = optab_libfunc (code_to_optab[reversed], mode))
++      if (code_to_optab[reversed]
++	  && (libfunc = optab_libfunc (code_to_optab[reversed], mode))
+ 	  && FLOAT_LIB_COMPARE_RETURNS_BOOL (mode, reversed))
+ 	{
+ 	  comparison = reversed;
+--- a/src/gcc/opts.c
++++ b/src/gcc/opts.c
+@@ -894,7 +894,8 @@
+   flag_caller_saves = opt2;
+   flag_peephole2 = opt2;
+ #ifdef INSN_SCHEDULING
+-  flag_schedule_insns = opt2;
++  /* Only run the pre-regalloc scheduling pass if optimizing for speed.  */
++  flag_schedule_insns = opt2 && ! optimize_size;
+   flag_schedule_insns_after_reload = opt2;
+ #endif
+   flag_regmove = opt2;
+@@ -906,7 +907,7 @@
+   flag_tree_vrp = opt2;
+   flag_tree_builtin_call_dce = opt2;
+   flag_tree_pre = opt2;
+-  flag_tree_switch_conversion = 1;
++  flag_tree_switch_conversion = opt2;
+   flag_ipa_cp = opt2;
+ 
+   /* Allow more virtual operators to increase alias precision.  */
+@@ -930,6 +931,7 @@
+   flag_gcse_after_reload = opt3;
+   flag_tree_vectorize = opt3;
+   flag_ipa_cp_clone = opt3;
++  flag_tree_pre_partial_partial = opt3;
+   if (flag_ipa_cp_clone)
+     flag_ipa_cp = 1;
+ 
+@@ -953,10 +955,13 @@
+ 	 being declared inline.  */
+       flag_inline_functions = 1;
+ 
+-      /* Basic optimization options.  */
+-      optimize_size = 1;
++      /* Basic optimization options at -Os are almost the same as -O2.  The
++	 only difference is that we disable PRE, because it sometimes still
++	 increases code size.  If the user want to run PRE with -Os, he/she
++	 will have to indicate so explicitly.  */
+       if (optimize > 2)
+ 	optimize = 2;
++      flag_tree_pre = 0;
+ 
+       /* We want to crossjump as much as possible.  */
+       set_param_value ("min-crossjump-insns", 1);
+@@ -2062,6 +2067,10 @@
+       /* These are no-ops, preserved for backward compatibility.  */
+       break;
+ 
++    case OPT_feglibc_:
++      /* This is a no-op at the moment.  */
++      break;
++
+     default:
+       /* If the flag was handled in a standard way, assume the lack of
+ 	 processing here is intentional.  */
+--- a/src/gcc/output.h
++++ b/src/gcc/output.h
+@@ -169,6 +169,11 @@
+    Prefixes such as % are optional.  */
+ extern int decode_reg_name (const char *);
+ 
++/* Similar to decode_reg_name, but takes an extra parameter that is a
++   pointer to the number of (internal) registers described by the
++   external name.  */
++extern int decode_reg_name_and_count (const char *, int *);
++
+ extern void assemble_alias (tree, tree);
+ 
+ extern void default_assemble_visibility (tree, int);
+--- a/src/gcc/passes.c
++++ b/src/gcc/passes.c
+@@ -591,6 +591,7 @@
+       NEXT_PASS (pass_rename_ssa_copies);
+       NEXT_PASS (pass_complete_unrolli);
+       NEXT_PASS (pass_ccp);
++      NEXT_PASS (pass_promote_indices);
+       NEXT_PASS (pass_forwprop);
+       /* Ideally the function call conditional
+ 	 dead code elimination phase can be delayed
+@@ -605,6 +606,7 @@
+ 	 alias information also rewrites no longer addressed
+ 	 locals into SSA form if possible.  */
+       NEXT_PASS (pass_build_alias);
++      NEXT_PASS (pass_remove_local_statics);
+       NEXT_PASS (pass_return_slot);
+       NEXT_PASS (pass_phiprop);
+       NEXT_PASS (pass_fre);
+@@ -791,6 +793,7 @@
+ 	  NEXT_PASS (pass_leaf_regs);
+ 	  NEXT_PASS (pass_split_before_sched2);
+ 	  NEXT_PASS (pass_sched2);
++	  NEXT_PASS (pass_peephole2);
+ 	  NEXT_PASS (pass_stack_regs);
+ 	    {
+ 	      struct opt_pass **p = &pass_stack_regs.pass.sub;
+--- a/src/gcc/pointer-set.c
++++ b/src/gcc/pointer-set.c
+@@ -181,6 +181,23 @@
+       break;
+ }
+ 
++/* Return the number of elements in PSET.  */
++
++size_t
++pointer_set_n_elements (struct pointer_set_t *pset)
++{
++  return pset->n_elements;
++}
++
++/* Remove all entries from PSET.  */
++
++void
++pointer_set_clear (struct pointer_set_t *pset)
++{
++  pset->n_elements = 0;
++  memset (pset->slots, 0, sizeof (pset->slots[0]) * pset->n_slots);
++}
++
+ 
+ /* A pointer map is represented the same way as a pointer_set, so
+    the hash code is based on the address of the key, rather than
+@@ -301,3 +318,20 @@
+     if (pmap->keys[i] && !fn (pmap->keys[i], &pmap->values[i], data))
+       break;
+ }
++
++/* Return the number of elements in PMAP.  */
++
++size_t
++pointer_map_n_elements (struct pointer_map_t *pmap)
++{
++  return pmap->n_elements;
++}
++
++/* Remove all entries from PMAP.  */
++
++void pointer_map_clear (struct pointer_map_t *pmap)
++{
++  pmap->n_elements = 0;
++  memset (pmap->keys, 0, sizeof (pmap->keys[0]) * pmap->n_slots);
++  memset (pmap->values, 0, sizeof (pmap->values[0]) * pmap->n_slots);
++}
+--- a/src/gcc/pointer-set.h
++++ b/src/gcc/pointer-set.h
+@@ -29,6 +29,8 @@
+ void pointer_set_traverse (const struct pointer_set_t *,
+ 			   bool (*) (const void *, void *),
+ 			   void *);
++size_t pointer_set_n_elements (struct pointer_set_t *);
++void pointer_set_clear (struct pointer_set_t *);
+ 
+ struct pointer_map_t;
+ struct pointer_map_t *pointer_map_create (void);
+@@ -38,5 +40,7 @@
+ void **pointer_map_insert (struct pointer_map_t *pmap, const void *p);
+ void pointer_map_traverse (const struct pointer_map_t *,
+ 			   bool (*) (const void *, void **, void *), void *);
++size_t pointer_map_n_elements (struct pointer_map_t *);
++void pointer_map_clear (struct pointer_map_t *);
+ 
+ #endif  /* POINTER_SET_H  */
+--- a/src/gcc/postreload.c
++++ b/src/gcc/postreload.c
+@@ -46,6 +46,7 @@
+ #include "tree.h"
+ #include "timevar.h"
+ #include "tree-pass.h"
++#include "addresses.h"
+ #include "df.h"
+ #include "dbgcnt.h"
+ 
+@@ -708,17 +709,19 @@
+   int last_label_ruid;
+   int min_labelno, n_labels;
+   HARD_REG_SET ever_live_at_start, *label_live;
++  enum reg_class index_regs;
+ 
+   /* If reg+reg can be used in offsetable memory addresses, the main chunk of
+      reload has already used it where appropriate, so there is no use in
+      trying to generate it now.  */
+-  if (double_reg_address_ok && INDEX_REG_CLASS != NO_REGS)
++  index_regs = index_reg_class (VOIDmode);
++  if (double_reg_address_ok && index_regs != NO_REGS)
+     return;
+ 
+   /* To avoid wasting too much time later searching for an index register,
+      determine the minimum and maximum index register numbers.  */
+   for (r = 0; r < FIRST_PSEUDO_REGISTER; r++)
+-    if (TEST_HARD_REG_BIT (reg_class_contents[INDEX_REG_CLASS], r))
++    if (TEST_HARD_REG_BIT (reg_class_contents[index_regs], r))
+       {
+ 	if (first_index_reg == -1)
+ 	  first_index_reg = r;
+@@ -826,8 +829,8 @@
+ 	     substitute uses of REG (typically in MEMs) with.
+ 	     First check REG and BASE for being index registers;
+ 	     we can use them even if they are not dead.  */
+-	  if (TEST_HARD_REG_BIT (reg_class_contents[INDEX_REG_CLASS], regno)
+-	      || TEST_HARD_REG_BIT (reg_class_contents[INDEX_REG_CLASS],
++	  if (TEST_HARD_REG_BIT (reg_class_contents[index_regs], regno)
++	      || TEST_HARD_REG_BIT (reg_class_contents[index_regs],
+ 				    REGNO (base)))
+ 	    {
+ 	      const_reg = reg;
+@@ -841,8 +844,7 @@
+ 		 two registers.  */
+ 	      for (i = first_index_reg; i <= last_index_reg; i++)
+ 		{
+-		  if (TEST_HARD_REG_BIT (reg_class_contents[INDEX_REG_CLASS],
+-					 i)
++		  if (TEST_HARD_REG_BIT (reg_class_contents[index_regs], i)
+ 		      && reg_state[i].use_index == RELOAD_COMBINE_MAX_USES
+ 		      && reg_state[i].store_ruid <= reg_state[regno].use_ruid
+ 		      && hard_regno_nregs[i][GET_MODE (reg)] == 1)
+--- a/src/gcc/real.c
++++ b/src/gcc/real.c
+@@ -4576,6 +4576,167 @@
+     false
+   };
+ 
++/* Encode half-precision floats.  This routine is used both for the IEEE
++   ARM alternative encodings.  */
++static void
++encode_ieee_half (const struct real_format *fmt, long *buf,
++		  const REAL_VALUE_TYPE *r)
++{
++  unsigned long image, sig, exp;
++  unsigned long sign = r->sign;
++  bool denormal = (r->sig[SIGSZ-1] & SIG_MSB) == 0;
++
++  image = sign << 15;
++  sig = (r->sig[SIGSZ-1] >> (HOST_BITS_PER_LONG - 11)) & 0x3ff;
++
++  switch (r->cl)
++    {
++    case rvc_zero:
++      break;
++
++    case rvc_inf:
++      if (fmt->has_inf)
++	image |= 31 << 10;
++      else
++	image |= 0x7fff;
++      break;
++
++    case rvc_nan:
++      if (fmt->has_nans)
++	{
++	  if (r->canonical)
++	    sig = (fmt->canonical_nan_lsbs_set ? (1 << 9) - 1 : 0);
++	  if (r->signalling == fmt->qnan_msb_set)
++	    sig &= ~(1 << 9);
++	  else
++	    sig |= 1 << 9;
++	  if (sig == 0)
++	    sig = 1 << 8;
++
++	  image |= 31 << 10;
++	  image |= sig;
++	}
++      else
++	image |= 0x3ff;
++      break;
++
++    case rvc_normal:
++      /* Recall that IEEE numbers are interpreted as 1.F x 2**exp,
++	 whereas the intermediate representation is 0.F x 2**exp.
++	 Which means we're off by one.  */
++      if (denormal)
++	exp = 0;
++      else
++	exp = REAL_EXP (r) + 15 - 1;
++      image |= exp << 10;
++      image |= sig;
++      break;
++
++    default:
++      gcc_unreachable ();
++    }
++
++  buf[0] = image;
++}
++
++/* Decode half-precision floats.  This routine is used both for the IEEE
++   ARM alternative encodings.  */
++static void
++decode_ieee_half (const struct real_format *fmt, REAL_VALUE_TYPE *r,
++		  const long *buf)
++{
++  unsigned long image = buf[0] & 0xffff;
++  bool sign = (image >> 15) & 1;
++  int exp = (image >> 10) & 0x1f;
++
++  memset (r, 0, sizeof (*r));
++  image <<= HOST_BITS_PER_LONG - 11;
++  image &= ~SIG_MSB;
++
++  if (exp == 0)
++    {
++      if (image && fmt->has_denorm)
++	{
++	  r->cl = rvc_normal;
++	  r->sign = sign;
++	  SET_REAL_EXP (r, -14);
++	  r->sig[SIGSZ-1] = image << 1;
++	  normalize (r);
++	}
++      else if (fmt->has_signed_zero)
++	r->sign = sign;
++    }
++  else if (exp == 31 && (fmt->has_nans || fmt->has_inf))
++    {
++      if (image)
++	{
++	  r->cl = rvc_nan;
++	  r->sign = sign;
++	  r->signalling = (((image >> (HOST_BITS_PER_LONG - 2)) & 1)
++			   ^ fmt->qnan_msb_set);
++	  r->sig[SIGSZ-1] = image;
++	}
++      else
++	{
++	  r->cl = rvc_inf;
++	  r->sign = sign;
++	}
++    }
++  else
++    {
++      r->cl = rvc_normal;
++      r->sign = sign;
++      SET_REAL_EXP (r, exp - 15 + 1);
++      r->sig[SIGSZ-1] = image | SIG_MSB;
++    }
++}
++
++/* Half-precision format, as specified in IEEE 754R.  */
++const struct real_format ieee_half_format =
++  {
++    encode_ieee_half,
++    decode_ieee_half,
++    2,
++    11,
++    11,
++    -13,
++    16,
++    15,
++    15,
++    false,
++    true,
++    true,
++    true,
++    true,
++    true,
++    true,
++    false
++  };
++
++/* ARM's alternative half-precision format, similar to IEEE but with
++   no reserved exponent value for NaNs and infinities; rather, it just
++   extends the range of exponents by one.  */
++const struct real_format arm_half_format =
++  {
++    encode_ieee_half,
++    decode_ieee_half,
++    2,
++    11,
++    11,
++    -13,
++    17,
++    15,
++    15,
++    false,
++    true,
++    false,
++    false,
++    true,
++    true,
++    false,
++    false
++  };
++
+ /* A synthetic "format" for internal arithmetic.  It's the size of the
+    internal significand minus the two bits needed for proper rounding.
+    The encode and decode routines exist only to satisfy our paranoia
+--- a/src/gcc/real.h
++++ b/src/gcc/real.h
+@@ -304,6 +304,8 @@
+ extern const struct real_format decimal_single_format;
+ extern const struct real_format decimal_double_format;
+ extern const struct real_format decimal_quad_format;
++extern const struct real_format ieee_half_format;
++extern const struct real_format arm_half_format;
+ 
+ 
+ /* ====================================================================== */
+--- a/src/gcc/reginfo.c
++++ b/src/gcc/reginfo.c
+@@ -559,10 +559,9 @@
+       else if (i == ARG_POINTER_REGNUM && fixed_regs[i])
+ 	;
+ #endif
+-#ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
+-      else if (i == (unsigned) PIC_OFFSET_TABLE_REGNUM && fixed_regs[i])
++      else if (!PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
++	       && i == (unsigned) PIC_OFFSET_TABLE_REGNUM && fixed_regs[i])
+ 	;
+-#endif
+       else if (CALL_REALLY_USED_REGNO_P (i))
+         {
+ 	  SET_HARD_REG_BIT (regs_invalidated_by_call, i);
+@@ -800,36 +799,41 @@
+ fix_register (const char *name, int fixed, int call_used)
+ {
+   int i;
++  int reg, nregs;
+ 
+   /* Decode the name and update the primary form of
+      the register info.  */
+ 
+-  if ((i = decode_reg_name (name)) >= 0)
++  if ((reg = decode_reg_name_and_count (name, &nregs)) >= 0)
+     {
+-      if ((i == STACK_POINTER_REGNUM
++      gcc_assert (nregs >= 1);
++      for (i = reg; i < reg + nregs; i++)
++	{
++	  if ((i == STACK_POINTER_REGNUM
+ #ifdef HARD_FRAME_POINTER_REGNUM
+-	   || i == HARD_FRAME_POINTER_REGNUM
++	       || i == HARD_FRAME_POINTER_REGNUM
+ #else
+-	   || i == FRAME_POINTER_REGNUM
++	       || i == FRAME_POINTER_REGNUM
+ #endif
+-	   )
+-	  && (fixed == 0 || call_used == 0))
+-	{
+-	  static const char * const what_option[2][2] = {
+-	    { "call-saved", "call-used" },
+-	    { "no-such-option", "fixed" }};
+-
+-	  error ("can't use '%s' as a %s register", name,
+-		 what_option[fixed][call_used]);
+-	}
+-      else
+-	{
+-	  fixed_regs[i] = fixed;
+-	  call_used_regs[i] = call_used;
++	       )
++	      && (fixed == 0 || call_used == 0))
++	    {
++	      static const char * const what_option[2][2] = {
++		{ "call-saved", "call-used" },
++		{ "no-such-option", "fixed" }};
++
++	      error ("can't use '%s' as a %s register", name,
++		     what_option[fixed][call_used]);
++	    }
++	  else
++	    {
++	      fixed_regs[i] = fixed;
++	      call_used_regs[i] = call_used;
+ #ifdef CALL_REALLY_USED_REGISTERS
+-	  if (fixed == 0)
+-	    call_really_used_regs[i] = call_used;
++	      if (fixed == 0)
++		call_really_used_regs[i] = call_used;
+ #endif
++	    }
+ 	}
+     }
+   else
+--- a/src/gcc/regmove.c
++++ b/src/gcc/regmove.c
+@@ -855,7 +855,7 @@
+ 	break;
+ 
+       /* If we have passed a call instruction, and the
+-         pseudo-reg SRC is not already live across a call,
++         pseudo-reg DST is not already live across a call,
+          then don't perform the optimization.  */
+       /* reg_set_p is overly conservative for CALL_INSNS, thinks that all
+ 	 hard regs are clobbered.  Thus, we only use it for src for
+@@ -868,11 +868,11 @@
+ 	      freq_calls += REG_FREQ_FROM_BB  (BLOCK_FOR_INSN (p));
+ 	    }
+ 
+-	  if (REG_N_CALLS_CROSSED (REGNO (src)) == 0)
++	  if (REG_N_CALLS_CROSSED (REGNO (dst)) == 0)
+ 	    break;
+ 
+-	  if ((HARD_REGISTER_P (dst) && call_used_regs [REGNO (dst)])
+-	      || find_reg_fusage (p, CLOBBER, dst))
++	  if ((HARD_REGISTER_P (src) && call_used_regs [REGNO (src)])
++	      || find_reg_fusage (p, CLOBBER, src))
+ 	    break;
+ 	}
+       else if (reg_set_p (src, PATTERN (p)))
+--- a/src/gcc/regrename.c
++++ b/src/gcc/regrename.c
+@@ -567,14 +567,14 @@
+ 	    int index_op;
+ 	    unsigned regno0 = REGNO (op0), regno1 = REGNO (op1);
+ 
+-	    if (REGNO_OK_FOR_INDEX_P (regno1)
++	    if (regno_ok_for_index_p (regno1, mode)
+ 		&& regno_ok_for_base_p (regno0, mode, PLUS, REG))
+ 	      index_op = 1;
+-	    else if (REGNO_OK_FOR_INDEX_P (regno0)
++	    else if (regno_ok_for_index_p (regno0, mode)
+ 		     && regno_ok_for_base_p (regno1, mode, PLUS, REG))
+ 	      index_op = 0;
+ 	    else if (regno_ok_for_base_p (regno0, mode, PLUS, REG)
+-		     || REGNO_OK_FOR_INDEX_P (regno1))
++		     || regno_ok_for_index_p (regno1, mode))
+ 	      index_op = 1;
+ 	    else if (regno_ok_for_base_p (regno1, mode, PLUS, REG))
+ 	      index_op = 0;
+@@ -599,7 +599,7 @@
+ 	  }
+ 
+ 	if (locI)
+-	  scan_rtx_address (insn, locI, INDEX_REG_CLASS, action, mode);
++	  scan_rtx_address (insn, locI, index_reg_class (mode), action, mode);
+ 	if (locB)
+ 	  scan_rtx_address (insn, locB, base_reg_class (mode, PLUS, index_code),
+ 			    action, mode);
+@@ -1488,14 +1488,14 @@
+ 	    int index_op;
+ 	    unsigned regno0 = REGNO (op0), regno1 = REGNO (op1);
+ 
+-	    if (REGNO_OK_FOR_INDEX_P (regno1)
++	    if (regno_ok_for_index_p (regno1, mode)
+ 		&& regno_ok_for_base_p (regno0, mode, PLUS, REG))
+ 	      index_op = 1;
+-	    else if (REGNO_OK_FOR_INDEX_P (regno0)
++	    else if (regno_ok_for_index_p (regno0, mode)
+ 		     && regno_ok_for_base_p (regno1, mode, PLUS, REG))
+ 	      index_op = 0;
+ 	    else if (regno_ok_for_base_p (regno0, mode, PLUS, REG)
+-		     || REGNO_OK_FOR_INDEX_P (regno1))
++		     || regno_ok_for_index_p (regno1, mode))
+ 	      index_op = 1;
+ 	    else if (regno_ok_for_base_p (regno1, mode, PLUS, REG))
+ 	      index_op = 0;
+@@ -1520,8 +1520,8 @@
+ 	  }
+ 
+ 	if (locI)
+-	  changed |= replace_oldest_value_addr (locI, INDEX_REG_CLASS, mode,
+-						insn, vd);
++	  changed |= replace_oldest_value_addr (locI, index_reg_class (mode),
++						mode, insn, vd);
+ 	if (locB)
+ 	  changed |= replace_oldest_value_addr (locB,
+ 						base_reg_class (mode, PLUS,
+--- a/src/gcc/reload.c
++++ b/src/gcc/reload.c
+@@ -5046,7 +5046,7 @@
+ 	    loc = &XEXP (*loc, 0);
+ 	}
+ 
+-      if (double_reg_address_ok)
++      if (double_reg_address_ok && index_reg_class (mode) != NO_REGS)
+ 	{
+ 	  /* Unshare the sum as well.  */
+ 	  *loc = ad = copy_rtx (ad);
+@@ -5054,8 +5054,8 @@
+ 	  /* Reload the displacement into an index reg.
+ 	     We assume the frame pointer or arg pointer is a base reg.  */
+ 	  find_reloads_address_part (XEXP (ad, 1), &XEXP (ad, 1),
+-				     INDEX_REG_CLASS, GET_MODE (ad), opnum,
+-				     type, ind_levels);
++				     index_reg_class (mode), GET_MODE (ad),
++				     opnum, type, ind_levels);
+ 	  return 0;
+ 	}
+       else
+@@ -5448,13 +5448,13 @@
+ #define REG_OK_FOR_CONTEXT(CONTEXT, REGNO, MODE, OUTER, INDEX)		\
+   ((CONTEXT) == 0							\
+    ? regno_ok_for_base_p (REGNO, MODE, OUTER, INDEX)			\
+-   : REGNO_OK_FOR_INDEX_P (REGNO))					
++   : regno_ok_for_index_p (REGNO, MODE))
+ 
+   enum reg_class context_reg_class;
+   RTX_CODE code = GET_CODE (x);
+ 
+   if (context == 1)
+-    context_reg_class = INDEX_REG_CLASS;
++    context_reg_class = index_reg_class (mode);
+   else
+     context_reg_class = base_reg_class (mode, outer_code, index_code);
+ 
+@@ -5546,17 +5546,17 @@
+ 
+ 	else if (code0 == REG && code1 == REG)
+ 	  {
+-	    if (REGNO_OK_FOR_INDEX_P (REGNO (op1))
++	    if (regno_ok_for_index_p (REGNO (op1), mode)
+ 		&& regno_ok_for_base_p (REGNO (op0), mode, PLUS, REG))
+ 	      return 0;
+-	    else if (REGNO_OK_FOR_INDEX_P (REGNO (op0))
++	    else if (regno_ok_for_index_p (REGNO (op0), mode)
+ 		     && regno_ok_for_base_p (REGNO (op1), mode, PLUS, REG))
+ 	      return 0;
+ 	    else if (regno_ok_for_base_p (REGNO (op0), mode, PLUS, REG))
+ 	      find_reloads_address_1 (mode, orig_op1, 1, PLUS, SCRATCH,
+ 				      &XEXP (x, 1), opnum, type, ind_levels,
+ 				      insn);
+-	    else if (REGNO_OK_FOR_INDEX_P (REGNO (op1)))
++	    else if (regno_ok_for_index_p (REGNO (op1), mode))
+ 	      find_reloads_address_1 (mode, orig_op0, 0, PLUS, REG,
+ 				      &XEXP (x, 0), opnum, type, ind_levels,
+ 				      insn);
+@@ -5564,7 +5564,7 @@
+ 	      find_reloads_address_1 (mode, orig_op0, 1, PLUS, SCRATCH,
+ 				      &XEXP (x, 0), opnum, type, ind_levels,
+ 				      insn);
+-	    else if (REGNO_OK_FOR_INDEX_P (REGNO (op0)))
++	    else if (regno_ok_for_index_p (REGNO (op0), mode))
+ 	      find_reloads_address_1 (mode, orig_op1, 0, PLUS, REG,
+ 				      &XEXP (x, 1), opnum, type, ind_levels,
+ 				      insn);
+@@ -5634,7 +5634,7 @@
+ 	   need to live longer than a TYPE reload normally would, so be
+ 	   conservative and class it as RELOAD_OTHER.  */
+ 	if ((REG_P (XEXP (op1, 1))
+-	     && !REGNO_OK_FOR_INDEX_P (REGNO (XEXP (op1, 1))))
++	     && !regno_ok_for_index_p (REGNO (XEXP (op1, 1)), mode))
+ 	    || GET_CODE (XEXP (op1, 1)) == PLUS)
+ 	  find_reloads_address_1 (mode, XEXP (op1, 1), 1, code, SCRATCH,
+ 				  &XEXP (op1, 1), opnum, RELOAD_OTHER,
+@@ -6131,18 +6131,26 @@
+ 	      /* For some processors an address may be valid in the
+ 		 original mode but not in a smaller mode.  For
+ 		 example, ARM accepts a scaled index register in
+-		 SImode but not in HImode.  Similarly, the address may
+-		 have been valid before the subreg offset was added,
+-		 but not afterwards.  find_reloads_address
+-		 assumes that we pass it a valid address, and doesn't
+-		 force a reload.  This will probably be fine if
+-		 find_reloads_address finds some reloads.  But if it
+-		 doesn't find any, then we may have just converted a
+-		 valid address into an invalid one.  Check for that
+-		 here.  */
++		 SImode but not in HImode.  Note that this is only
++		 a problem if the address in reg_equiv_mem is already
++		 invalid in the new mode; other cases would be fixed
++		 by find_reloads_address as usual.
++
++		 ??? We attempt to handle such cases here by doing an
++		 additional reload of the full address after the
++		 usual processing by find_reloads_address.  Note that
++		 this may not work in the general case, but it seems
++		 to cover the cases where this situation currently
++		 occurs.  A more general fix might be to reload the
++		 *value* instead of the address, but this would not
++		 be expected by the callers of this routine as-is.
++
++		 If find_reloads_address already completed replaced
++		 the address, there is nothing further to do.  */
+ 	      if (reloaded == 0
+-		  && !strict_memory_address_p (GET_MODE (tem),
+-					       XEXP (tem, 0)))
++		  && reg_equiv_mem[regno] != 0
++		  && !strict_memory_address_p (GET_MODE (x),
++					       XEXP (reg_equiv_mem[regno], 0)))
+ 		push_reload (XEXP (tem, 0), NULL_RTX, &XEXP (tem, 0), (rtx*) 0,
+ 			     base_reg_class (GET_MODE (tem), MEM, SCRATCH),
+ 			     GET_MODE (XEXP (tem, 0)), VOIDmode, 0, 0,
+--- a/src/gcc/rtl.def
++++ b/src/gcc/rtl.def
+@@ -1088,7 +1088,11 @@
+    guard for the bypass.  The function will get the two insns as
+    parameters.  If the function returns zero the bypass will be
+    ignored for this case.  Additional guard is necessary to recognize
+-   complicated bypasses, e.g. when consumer is load address.  */
++   complicated bypasses, e.g. when consumer is load address.  If there
++   are more one bypass with the same output and input insns, the
++   chosen bypass is the first bypass with a guard in description whose
++   guard function returns nonzero.  If there is no such bypass, then
++   bypass without the guard function is chosen.  */
+ DEF_RTL_EXPR(DEFINE_BYPASS, "define_bypass", "issS", RTX_EXTRA)
+ 
+ /* (define_automaton string) describes names of automata generated and
+--- a/src/gcc/rtlanal.c
++++ b/src/gcc/rtlanal.c
+@@ -132,13 +132,11 @@
+ 	  /* The arg pointer varies if it is not a fixed register.  */
+ 	  || (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM]))
+ 	return 0;
+-#ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
+       /* ??? When call-clobbered, the value is stable modulo the restore
+ 	 that must happen after a call.  This currently screws up local-alloc
+ 	 into believing that the restore is not needed.  */
+-      if (x == pic_offset_table_rtx)
++      if (!PIC_OFFSET_TABLE_REG_CALL_CLOBBERED && x == pic_offset_table_rtx)
+ 	return 0;
+-#endif
+       return 1;
+ 
+     case ASM_OPERANDS:
+@@ -211,14 +209,11 @@
+ 	  || (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM]))
+ 	return 0;
+       if (x == pic_offset_table_rtx
+-#ifdef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
+ 	  /* ??? When call-clobbered, the value is stable modulo the restore
+ 	     that must happen after a call.  This currently screws up
+ 	     local-alloc into believing that the restore is not needed, so we
+ 	     must return 0 only if we are called from alias analysis.  */
+-	  && for_alias
+-#endif
+-	  )
++	  && (!PIC_OFFSET_TABLE_REG_CALL_CLOBBERED || for_alias))
+ 	return 0;
+       return 1;
+ 
+@@ -2913,62 +2908,78 @@
+ commutative_operand_precedence (rtx op)
+ {
+   enum rtx_code code = GET_CODE (op);
++  int value;
+   
+   /* Constants always come the second operand.  Prefer "nice" constants.  */
+   if (code == CONST_INT)
+-    return -8;
+-  if (code == CONST_DOUBLE)
+-    return -7;
+-  if (code == CONST_FIXED)
+-    return -7;
+-  op = avoid_constant_pool_reference (op);
+-  code = GET_CODE (op);
+-
+-  switch (GET_RTX_CLASS (code))
+-    {
+-    case RTX_CONST_OBJ:
+-      if (code == CONST_INT)
+-        return -6;
+-      if (code == CONST_DOUBLE)
+-        return -5;
+-      if (code == CONST_FIXED)
+-        return -5;
+-      return -4;
+-
+-    case RTX_EXTRA:
+-      /* SUBREGs of objects should come second.  */
+-      if (code == SUBREG && OBJECT_P (SUBREG_REG (op)))
+-        return -3;
+-      return 0;
+-
+-    case RTX_OBJ:
+-      /* Complex expressions should be the first, so decrease priority
+-         of objects.  Prefer pointer objects over non pointer objects.  */
+-      if ((REG_P (op) && REG_POINTER (op))
+-	  || (MEM_P (op) && MEM_POINTER (op)))
+-	return -1;
+-      return -2;
+-
+-    case RTX_COMM_ARITH:
+-      /* Prefer operands that are themselves commutative to be first.
+-         This helps to make things linear.  In particular,
+-         (and (and (reg) (reg)) (not (reg))) is canonical.  */
+-      return 4;
+-
+-    case RTX_BIN_ARITH:
+-      /* If only one operand is a binary expression, it will be the first
+-         operand.  In particular,  (plus (minus (reg) (reg)) (neg (reg)))
+-         is canonical, although it will usually be further simplified.  */
+-      return 2;
++    value = -8;
++  else if (code == CONST_DOUBLE)
++    value = -7;
++  else if (code == CONST_FIXED)
++    value = -7;
++  else
++    {
++      op = avoid_constant_pool_reference (op);
++      code = GET_CODE (op);
++
++      switch (GET_RTX_CLASS (code))
++	{
++	case RTX_CONST_OBJ:
++	  if (code == CONST_INT)
++	    value = -6;
++	  else if (code == CONST_DOUBLE)
++	    value = -5;
++	  else if (code == CONST_FIXED)
++	    value = -5;
++	  else
++	    value = -4;
++	  break;
++
++	case RTX_EXTRA:
++	  /* SUBREGs of objects should come second.  */
++	  if (code == SUBREG && OBJECT_P (SUBREG_REG (op)))
++	    value = -3;
++	  else
++	    value = 0;
++	  break;
++
++	case RTX_OBJ:
++	  /* Complex expressions should be the first, so decrease priority
++	     of objects.  */
++	  value = -1;
++	  break;
++
++	case RTX_COMM_ARITH:
++	  /* Prefer operands that are themselves commutative to be first.
++	     This helps to make things linear.  In particular,
++	     (and (and (reg) (reg)) (not (reg))) is canonical.  */
++	  value = 4;
++	  break;
++
++	case RTX_BIN_ARITH:
++	  /* If only one operand is a binary expression, it will be the first
++	     operand.  In particular,  (plus (minus (reg) (reg)) (neg (reg)))
++	     is canonical, although it will usually be further simplified.  */
++	  value = 2;
++	  break;
+   
+-    case RTX_UNARY:
+-      /* Then prefer NEG and NOT.  */
+-      if (code == NEG || code == NOT)
+-        return 1;
++	case RTX_UNARY:
++	  /* Then prefer NEG and NOT.  */
++	  if (code == NEG || code == NOT)
++	    value = 1;
++	  else
++	    value = 0;
++	  break;
+ 
+-    default:
+-      return 0;
++	default:
++	  value = 0;
++	}
+     }
++
++  if (targetm.commutative_operand_precedence)
++    value = targetm.commutative_operand_precedence (op, value);
++
++  return value;
+ }
+ 
+ /* Return 1 iff it is necessary to swap operands of commutative operation
+--- a/src/gcc/sched-ebb.c
++++ b/src/gcc/sched-ebb.c
+@@ -286,6 +286,7 @@
+   rank,
+   ebb_print_insn,
+   ebb_contributes_to_priority,
++  NULL, /* insn_finishes_block_p */
+ 
+   NULL, NULL,
+   NULL, NULL,
+--- a/src/gcc/sched-int.h
++++ b/src/gcc/sched-int.h
+@@ -558,6 +558,10 @@
+      calculations.  */
+   int (*contributes_to_priority) (rtx, rtx);
+ 
++  /* Return true if scheduling insn (passed as the parameter) will trigger
++     finish of scheduling current block.  */
++  bool (*insn_finishes_block_p) (rtx);
++
+   /* The boundaries of the set of insns to be scheduled.  */
+   rtx prev_head, next_tail;
+ 
+--- a/src/gcc/sched-rgn.c
++++ b/src/gcc/sched-rgn.c
+@@ -2338,6 +2338,19 @@
+     0, 0, 0
+   };
+ 
++/* Return true if scheduling INSN will trigger finish of scheduling
++   current block.  */
++static bool
++rgn_insn_finishes_block_p (rtx insn)
++{
++  if (INSN_BB (insn) == target_bb
++      && sched_target_n_insns + 1 == target_n_insns)
++    /* INSN is the last not-scheduled instruction in the current block.  */
++    return true;
++
++  return false;
++}
++
+ /* Used in schedule_insns to initialize current_sched_info for scheduling
+    regions (or single basic blocks).  */
+ 
+@@ -2350,6 +2363,7 @@
+   rgn_rank,
+   rgn_print_insn,
+   contributes_to_priority,
++  rgn_insn_finishes_block_p,
+ 
+   NULL, NULL,
+   NULL, NULL,
+--- a/src/gcc/sdbout.c
++++ b/src/gcc/sdbout.c
+@@ -338,6 +338,7 @@
+   debug_nothing_int,		         /* handle_pch */
+   debug_nothing_rtx,		         /* var_location */
+   debug_nothing_void,                    /* switch_text_section */
++  debug_nothing_tree_tree,		 /* set_name */
+   0                                      /* start_end_main_source_file */
+ };
+ 
+--- a/src/gcc/sel-sched-ir.c
++++ b/src/gcc/sel-sched-ir.c
+@@ -5545,6 +5545,7 @@
+   NULL, /* rgn_rank */
+   sel_print_insn, /* rgn_print_insn */
+   contributes_to_priority,
++  NULL, /* insn_finishes_block_p */
+ 
+   NULL, NULL,
+   NULL, NULL,
+--- a/src/gcc/stmt.c
++++ b/src/gcc/stmt.c
+@@ -681,13 +681,14 @@
+   for (tail = clobbers; tail; tail = TREE_CHAIN (tail))
+     {
+       const char *regname;
++      int nregs;
+ 
+       if (TREE_VALUE (tail) == error_mark_node)
+ 	return;
+       regname = TREE_STRING_POINTER (TREE_VALUE (tail));
+ 
+-      i = decode_reg_name (regname);
+-      if (i >= 0 || i == -4)
++      i = decode_reg_name_and_count (regname, &nregs);
++      if (i == -4)
+ 	++nclobbers;
+       else if (i == -2)
+ 	error ("unknown register name %qs in %<asm%>", regname);
+@@ -695,14 +696,21 @@
+       /* Mark clobbered registers.  */
+       if (i >= 0)
+         {
+-	  /* Clobbering the PIC register is an error.  */
+-	  if (i == (int) PIC_OFFSET_TABLE_REGNUM)
++	  int reg;
++
++	  for (reg = i; reg < i + nregs; reg++)
+ 	    {
+-	      error ("PIC register %qs clobbered in %<asm%>", regname);
+-	      return;
+-	    }
++	      ++nclobbers;
++
++	      /* Clobbering the PIC register is an error.  */
++	      if (reg == (int) PIC_OFFSET_TABLE_REGNUM)
++		{
++		  error ("PIC register clobbered by %qs in %<asm%>", regname);
++		  return;
++		}
+ 
+-	  SET_HARD_REG_BIT (clobbered_regs, i);
++	      SET_HARD_REG_BIT (clobbered_regs, reg);
++	    }
+ 	}
+     }
+ 
+@@ -1012,7 +1020,8 @@
+       for (tail = clobbers; tail; tail = TREE_CHAIN (tail))
+ 	{
+ 	  const char *regname = TREE_STRING_POINTER (TREE_VALUE (tail));
+-	  int j = decode_reg_name (regname);
++	  int reg, nregs;
++	  int j = decode_reg_name_and_count (regname, &nregs);
+ 	  rtx clobbered_reg;
+ 
+ 	  if (j < 0)
+@@ -1034,30 +1043,39 @@
+ 	      continue;
+ 	    }
+ 
+-	  /* Use QImode since that's guaranteed to clobber just one reg.  */
+-	  clobbered_reg = gen_rtx_REG (QImode, j);
+-
+-	  /* Do sanity check for overlap between clobbers and respectively
+-	     input and outputs that hasn't been handled.  Such overlap
+-	     should have been detected and reported above.  */
+-	  if (!clobber_conflict_found)
++	  for (reg = j; reg < j + nregs; reg++)
+ 	    {
+-	      int opno;
++	      /* Use QImode since that's guaranteed to clobber just
++	       * one reg.  */
++	      clobbered_reg = gen_rtx_REG (QImode, reg);
++
++	      /* Do sanity check for overlap between clobbers and
++		 respectively input and outputs that hasn't been
++		 handled.  Such overlap should have been detected and
++		 reported above.  */
++	      if (!clobber_conflict_found)
++		{
++		  int opno;
+ 
+-	      /* We test the old body (obody) contents to avoid tripping
+-		 over the under-construction body.  */
+-	      for (opno = 0; opno < noutputs; opno++)
+-		if (reg_overlap_mentioned_p (clobbered_reg, output_rtx[opno]))
+-		  internal_error ("asm clobber conflict with output operand");
+-
+-	      for (opno = 0; opno < ninputs - ninout; opno++)
+-		if (reg_overlap_mentioned_p (clobbered_reg,
+-					     ASM_OPERANDS_INPUT (obody, opno)))
+-		  internal_error ("asm clobber conflict with input operand");
+-	    }
++		  /* We test the old body (obody) contents to avoid
++		     tripping over the under-construction body.  */
++		  for (opno = 0; opno < noutputs; opno++)
++		    if (reg_overlap_mentioned_p (clobbered_reg,
++						 output_rtx[opno]))
++		      internal_error
++			("asm clobber conflict with output operand");
++
++		  for (opno = 0; opno < ninputs - ninout; opno++)
++		    if (reg_overlap_mentioned_p (clobbered_reg,
++						 ASM_OPERANDS_INPUT (obody,
++								     opno)))
++		      internal_error
++			("asm clobber conflict with input operand");
++		}
+ 
+-	  XVECEXP (body, 0, i++)
+-	    = gen_rtx_CLOBBER (VOIDmode, clobbered_reg);
++	      XVECEXP (body, 0, i++)
++		= gen_rtx_CLOBBER (VOIDmode, clobbered_reg);
++	    }
+ 	}
+ 
+       emit_insn (body);
+--- a/src/gcc/target-def.h
++++ b/src/gcc/target-def.h
+@@ -84,7 +84,7 @@
+ #define TARGET_ASM_INTERNAL_LABEL default_internal_label
+ #endif
+ 
+-#ifndef TARGET_ARM_TTYPE
++#ifndef TARGET_ASM_TTYPE
+ #define TARGET_ASM_TTYPE hook_bool_rtx_false
+ #endif
+ 
+@@ -208,6 +208,10 @@
+ #define TARGET_EXTRA_LIVE_ON_ENTRY hook_void_bitmap
+ #endif
+ 
++#ifndef TARGET_WARN_FUNC_RESULT
++#define TARGET_WARN_FUNC_RESULT hook_bool_void_true
++#endif
++
+ #ifndef TARGET_ASM_FILE_START_APP_OFF
+ #define TARGET_ASM_FILE_START_APP_OFF false
+ #endif
+@@ -236,6 +240,10 @@
+ #define TARGET_ASM_OUTPUT_DWARF_DTPREL NULL
+ #endif
+ 
++#ifndef TARGET_ASM_FINAL_POSTSCAN_INSN
++#define TARGET_ASM_FINAL_POSTSCAN_INSN NULL
++#endif
++
+ #ifndef TARGET_ASM_RECORD_GCC_SWITCHES
+ #define TARGET_ASM_RECORD_GCC_SWITCHES NULL
+ #endif
+@@ -291,7 +299,8 @@
+ 			TARGET_ASM_RECORD_GCC_SWITCHES,		\
+ 			TARGET_ASM_RECORD_GCC_SWITCHES_SECTION,	\
+ 			TARGET_ASM_OUTPUT_ANCHOR,		\
+-			TARGET_ASM_OUTPUT_DWARF_DTPREL}
++			TARGET_ASM_OUTPUT_DWARF_DTPREL,		\
++			TARGET_ASM_FINAL_POSTSCAN_INSN}
+ 
+ /* Scheduler hooks.  All of these default to null pointers, which
+    haifa-sched.c looks for and handles.  */
+@@ -383,6 +392,9 @@
+ #define TARGET_VECTOR_ALIGNMENT_REACHABLE \
+   default_builtin_vector_alignment_reachable
+ #define TARGET_VECTORIZE_BUILTIN_VEC_PERM 0
++#define TARGET_VECTOR_MIN_ALIGNMENT \
++  default_vector_min_alignment
++#define TARGET_VECTOR_ALWAYS_MISALIGN hook_bool_const_tree_false
+ 
+ #define TARGET_VECTORIZE                                                \
+   {									\
+@@ -393,7 +405,9 @@
+     TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD,				\
+     TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST,			\
+     TARGET_VECTOR_ALIGNMENT_REACHABLE,                                  \
+-    TARGET_VECTORIZE_BUILTIN_VEC_PERM                                   \
++    TARGET_VECTORIZE_BUILTIN_VEC_PERM,                                  \
++    TARGET_VECTOR_MIN_ALIGNMENT,                                        \
++    TARGET_VECTOR_ALWAYS_MISALIGN,                                      \
+   }
+ 
+ #define TARGET_DEFAULT_TARGET_FLAGS 0
+@@ -504,6 +518,7 @@
+ #define TARGET_ALLOCATE_INITIAL_VALUE NULL
+ 
+ #define TARGET_UNSPEC_MAY_TRAP_P default_unspec_may_trap_p
++#define TARGET_COMMUTATIVE_OPERAND_PRECEDENCE NULL
+ 
+ #ifndef TARGET_SET_CURRENT_FUNCTION
+ #define TARGET_SET_CURRENT_FUNCTION hook_void_tree
+@@ -532,6 +547,10 @@
+ #define TARGET_INVALID_CONVERSION hook_constcharptr_const_tree_const_tree_null
+ #define TARGET_INVALID_UNARY_OP hook_constcharptr_int_const_tree_null
+ #define TARGET_INVALID_BINARY_OP hook_constcharptr_int_const_tree_const_tree_null
++#define TARGET_INVALID_PARAMETER_TYPE hook_constcharptr_const_tree_null
++#define TARGET_INVALID_RETURN_TYPE hook_constcharptr_const_tree_null
++#define TARGET_PROMOTED_TYPE hook_tree_const_tree_null
++#define TARGET_CONVERT_TO_TYPE hook_tree_tree_tree_null
+ 
+ #define TARGET_FIXED_CONDITION_CODE_REGS hook_bool_uintp_uintp_false
+ 
+@@ -590,6 +609,7 @@
+ #define TARGET_ARG_PARTIAL_BYTES hook_int_CUMULATIVE_ARGS_mode_tree_bool_0
+ 
+ #define TARGET_FUNCTION_VALUE default_function_value
++#define TARGET_LIBCALL_VALUE default_libcall_value
+ #define TARGET_INTERNAL_ARG_POINTER default_internal_arg_pointer
+ #define TARGET_UPDATE_STACK_BOUNDARY NULL
+ #define TARGET_GET_DRAP_RTX NULL
+@@ -613,6 +633,7 @@
+    TARGET_ARG_PARTIAL_BYTES,					\
+    TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN,			\
+    TARGET_FUNCTION_VALUE,					\
++   TARGET_LIBCALL_VALUE,					\
+    TARGET_INTERNAL_ARG_POINTER,					\
+    TARGET_UPDATE_STACK_BOUNDARY,				\
+    TARGET_GET_DRAP_RTX,						\
+@@ -716,6 +737,11 @@
+ #define TARGET_CXX_ADJUST_CLASS_AT_DEFINITION hook_void_tree
+ #endif
+ 
++
++#ifndef TARGET_CXX_TTYPE_REF_ENCODE
++#define TARGET_CXX_TTYPE_REF_ENCODE NULL
++#endif
++
+ #define TARGET_CXX				\
+   {						\
+     TARGET_CXX_GUARD_TYPE,			\
+@@ -730,7 +756,8 @@
+     TARGET_CXX_LIBRARY_RTTI_COMDAT,	        \
+     TARGET_CXX_USE_AEABI_ATEXIT,		\
+     TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT,	\
+-    TARGET_CXX_ADJUST_CLASS_AT_DEFINITION	\
++    TARGET_CXX_ADJUST_CLASS_AT_DEFINITION,	\
++    TARGET_CXX_TTYPE_REF_ENCODE			\
+   }
+ 
+ /* EMUTLS specific */
+@@ -886,6 +913,7 @@
+   TARGET_ADDRESS_COST,				\
+   TARGET_ALLOCATE_INITIAL_VALUE,		\
+   TARGET_UNSPEC_MAY_TRAP_P,                     \
++  TARGET_COMMUTATIVE_OPERAND_PRECEDENCE,        \
+   TARGET_DWARF_REGISTER_SPAN,                   \
+   TARGET_INIT_DWARF_REG_SIZES_EXTRA,		\
+   TARGET_FIXED_CONDITION_CODE_REGS,		\
+@@ -913,6 +941,10 @@
+   TARGET_INVALID_CONVERSION,			\
+   TARGET_INVALID_UNARY_OP,			\
+   TARGET_INVALID_BINARY_OP,			\
++  TARGET_INVALID_PARAMETER_TYPE,		\
++  TARGET_INVALID_RETURN_TYPE,			\
++  TARGET_PROMOTED_TYPE,				\
++  TARGET_CONVERT_TO_TYPE,			\
+   TARGET_IRA_COVER_CLASSES,			\
+   TARGET_SECONDARY_RELOAD,			\
+   TARGET_EXPAND_TO_RTL_HOOK,			\
+@@ -923,6 +955,7 @@
+   TARGET_EMUTLS,				\
+   TARGET_OPTION_HOOKS,				\
+   TARGET_EXTRA_LIVE_ON_ENTRY,			\
++  TARGET_WARN_FUNC_RESULT,			\
+   TARGET_UNWIND_TABLES_DEFAULT,			\
+   TARGET_HAVE_NAMED_SECTIONS,			\
+   TARGET_HAVE_SWITCHABLE_BSS_SECTIONS,		\
+--- a/src/gcc/target.h
++++ b/src/gcc/target.h
+@@ -245,6 +245,8 @@
+     /* Output a DTP-relative reference to a TLS symbol.  */
+     void (*output_dwarf_dtprel) (FILE *file, int size, rtx x);
+ 
++    /* Some target machines need to postscan each insn after it is output.  */
++    void (*final_postscan_insn) (FILE *, rtx, rtx *, int);
+   } asm_out;
+ 
+   /* Functions relating to instruction scheduling.  */
+@@ -473,7 +475,16 @@
+ 
+     /* Target builtin that implements vector permute.  */
+     tree (* builtin_vec_perm) (tree, tree*);
+-} vectorize;
++
++    /* Return the minimum alignment required to load or store a
++       vector of the given type, which may be less than the
++       natural alignment of the type.  */
++    int (* vector_min_alignment) (const_tree);
++
++    /* Return true if "movmisalign" patterns should be used for all
++       loads/stores from data arrays.  */
++    bool (* always_misalign) (const_tree);
++  } vectorize;
+ 
+   /* The initial value of target_flags.  */
+   int default_target_flags;
+@@ -694,6 +705,10 @@
+      FLAGS has the same meaning as in rtlanal.c: may_trap_p_1.  */
+   int (* unspec_may_trap_p) (const_rtx x, unsigned flags);
+ 
++  /* Return a value indicating whether an operand of a commutative
++     operation is preferred as the first or second operand.  */
++  int (* commutative_operand_precedence) (const_rtx, int);
++
+   /* Given a register, this hook should return a parallel of registers
+      to represent where to find the register pieces.  Define this hook
+      if the register and its mode are represented in Dwarf in
+@@ -870,6 +885,10 @@
+     rtx (*function_value) (const_tree ret_type, const_tree fn_decl_or_type,
+ 			   bool outgoing);
+ 
++    /* Return the rtx for the result of a libcall of mode MODE,
++       calling the function FN_NAME.  */
++    rtx (*libcall_value) (enum machine_mode, rtx);
++
+     /* Return an rtx for the argument pointer incoming to the
+        current function.  */
+     rtx (*internal_arg_pointer) (void);
+@@ -899,6 +918,24 @@
+      is not permitted on TYPE1 and TYPE2, NULL otherwise.  */
+   const char *(*invalid_binary_op) (int op, const_tree type1, const_tree type2);
+ 
++  /* Return the diagnostic message string if TYPE is not valid as a
++     function parameter type, NULL otherwise.  */
++  const char *(*invalid_parameter_type) (const_tree type);
++
++  /* Return the diagnostic message string if TYPE is not valid as a
++     function return type, NULL otherwise.  */
++  const char *(*invalid_return_type) (const_tree type);
++
++  /* If values of TYPE are promoted to some other type when used in
++     expressions (analogous to the integer promotions), return that type,
++     or NULL_TREE otherwise.  */
++  tree (*promoted_type) (const_tree type);
++
++  /* Convert EXPR to TYPE, if target-specific types with special conversion
++     rules are involved.  Return the converted expression, or NULL to apply
++     the standard conversion rules.  */
++  tree (*convert_to_type) (tree type, tree expr);
++
+   /* Return the array of IRA cover classes for the current target.  */
+   const enum reg_class *(*ira_cover_classes) (void);
+ 
+@@ -977,6 +1014,11 @@
+        class  (eg, tweak visibility or perform any other required
+        target modifications).  */
+     void (*adjust_class_at_definition) (tree type);
++    /* Encode a reference type info, used for catching pointer
++       references.  The provided expression will be the address of the
++       type info object of the type to which a reference is being
++       caught.  */
++    tree (* ttype_ref_encode) (tree);
+   } cxx;
+ 
+   /* Functions and data for emulated TLS support.  */
+@@ -1040,6 +1082,10 @@
+      bits in the bitmap passed in. */  
+   void (*live_on_entry) (bitmap); 
+ 
++  /* Return false if warnings about missing return statements or suspect
++     noreturn attributes should be suppressed for the current function.  */
++  bool (*warn_func_result) (void);
++
+   /* True if unwinding tables should be generated by default.  */
+   bool unwind_tables_default;
+ 
+--- a/src/gcc/targhooks.c
++++ b/src/gcc/targhooks.c
+@@ -65,7 +65,7 @@
+ #include "reload.h"
+ #include "optabs.h"
+ #include "recog.h"
+-
++#include "convert.h"
+ 
+ void
+ default_external_libcall (rtx fun ATTRIBUTE_UNUSED)
+@@ -441,6 +441,18 @@
+   return NULL;
+ }
+ 
++tree
++hook_cxx_ttype_ref_in_bit0 (tree exp)
++{
++  tree pointer_type = build_pointer_type (char_type_node);
++  tree one = convert (sizetype, integer_one_node);
++  
++  exp = convert_to_pointer (pointer_type, exp);
++  exp = fold_build2 (POINTER_PLUS_EXPR, pointer_type, exp, one);
++  
++  return exp;
++}
++
+ /* Initialize the stack protection decls.  */
+ 
+ /* Stack protection related decls living in libgcc.  */
+@@ -453,6 +465,8 @@
+ 
+   if (t == NULL)
+     {
++      rtx x;
++
+       t = build_decl (VAR_DECL, get_identifier ("__stack_chk_guard"),
+ 		      ptr_type_node);
+       TREE_STATIC (t) = 1;
+@@ -463,6 +477,11 @@
+       DECL_ARTIFICIAL (t) = 1;
+       DECL_IGNORED_P (t) = 1;
+ 
++      /* Do not share RTL as the declaration is visible outside of
++	 current function.  */
++      x = DECL_RTL (t);
++      RTX_FLAG (x, used) = 1;
++
+       stack_chk_guard_decl = t;
+     }
+ 
+@@ -561,6 +580,12 @@
+ }
+ 
+ rtx
++default_libcall_value (enum machine_mode mode, rtx fun ATTRIBUTE_UNUSED)
++{
++  return LIBCALL_VALUE (mode);
++}
++
++rtx
+ default_internal_arg_pointer (void)
+ {
+   /* If the reg that the virtual arg pointer will be translated into is
+@@ -712,6 +737,12 @@
+   return true;
+ }
+ 
++int
++default_vector_min_alignment (const_tree type)
++{
++  return TYPE_ALIGN_UNIT (type);
++}
++
+ bool
+ default_hard_regno_scratch_ok (unsigned int regno ATTRIBUTE_UNUSED)
+ {
+--- a/src/gcc/targhooks.h
++++ b/src/gcc/targhooks.h
+@@ -48,6 +48,7 @@
+ 
+ extern tree default_cxx_guard_type (void);
+ extern tree default_cxx_get_cookie_size (tree);
++extern tree hook_cxx_ttype_ref_in_bit0 (tree);
+ 
+ extern bool hook_pass_by_reference_must_pass_in_stack
+   (CUMULATIVE_ARGS *, enum machine_mode mode, const_tree, bool);
+@@ -71,6 +72,8 @@
+ 
+ extern bool default_builtin_vector_alignment_reachable (const_tree, bool);
+ 
++extern int default_vector_min_alignment (const_tree);
++
+ /* These are here, and not in hooks.[ch], because not all users of
+    hooks.h include tm.h, and thus we don't have CUMULATIVE_ARGS.  */
+ 
+@@ -87,6 +90,7 @@
+   (const_tree, const_tree, const_tree);
+ extern bool hook_bool_const_rtx_commutative_p (const_rtx, int);
+ extern rtx default_function_value (const_tree, const_tree, bool);
++extern rtx default_libcall_value (enum machine_mode, rtx);
+ extern rtx default_internal_arg_pointer (void);
+ #ifdef IRA_COVER_CLASSES
+ extern const enum reg_class *default_ira_cover_classes (void);
+--- a/src/gcc/testsuite/g++.dg/abi/arm_va_list2.C
++++ b/src/gcc/testsuite/g++.dg/abi/arm_va_list2.C
+@@ -0,0 +1,7 @@
++// { dg-do compile }
++// { dg-options "-Wpsabi" }
++// { dg-require-effective-target arm_eabi }
++
++#include <stdarg.h>
++#include "arm_va_list2.h"
++
+--- a/src/gcc/testsuite/g++.dg/abi/arm_va_list2.h
++++ b/src/gcc/testsuite/g++.dg/abi/arm_va_list2.h
+@@ -0,0 +1,4 @@
++// The mangling of va_list changed in GCC 4.4.  We want to warn about
++// that -- but not in a system header.
++#pragma GCC system_header
++void f(va_list) {}
+--- a/src/gcc/testsuite/g++.dg/abi/mangle-neon.C
++++ b/src/gcc/testsuite/g++.dg/abi/mangle-neon.C
+@@ -2,7 +2,7 @@
+ 
+ // { dg-do compile }
+ // { dg-require-effective-target arm_neon_ok }
+-// { dg-options "-mfpu=neon -mfloat-abi=softfp" }
++// { dg-add-options arm_neon }
+ 
+ #include <arm_neon.h>
+ 
+--- a/src/gcc/testsuite/g++.dg/abi/mangle11.C
++++ b/src/gcc/testsuite/g++.dg/abi/mangle11.C
+@@ -7,4 +7,4 @@
+   typedef int X;
+ };
+ 
+-template void f<S> (int);
++template void f<S> (int); // { dg-message "instantiated" }
+--- a/src/gcc/testsuite/g++.dg/abi/mangle12.C
++++ b/src/gcc/testsuite/g++.dg/abi/mangle12.C
+@@ -8,4 +8,4 @@
+   typedef int X;
+ };
+ 
+-template void f<S> (int); 
++template void f<S> (int); // { dg-message "instantiated" }
+--- a/src/gcc/testsuite/g++.dg/abi/mangle17.C
++++ b/src/gcc/testsuite/g++.dg/abi/mangle17.C
+@@ -5,7 +5,7 @@
+ template <int I> struct S {};
+ 
+ template <int I> void f (S<I + e + int (3.7)>) {} // { dg-warning "mangle" }
+-template void f<7>(S<7 + e + int (3.7)>);  
++template void f<7>(S<7 + e + int (3.7)>); // { dg-message "instantiated" }
+ 
+ template <int I> void g (S<I + e + int (3.7)>) {} // { dg-warning "mangle" }
+-template void g<7>(S<7 + e + int (3.7)>); 
++template void g<7>(S<7 + e + int (3.7)>); // { dg-message "instantiated" }
+--- a/src/gcc/testsuite/g++.dg/abi/mangle20-2.C
++++ b/src/gcc/testsuite/g++.dg/abi/mangle20-2.C
+@@ -10,7 +10,7 @@
+ template <int I> void f(int (*)[2]) {} // { dg-warning "mangled name" }
+ template <int I> void g(int (*)[I+2]) {}
+ 
+-template void f<1>(int (*)[2]);  
++template void f<1>(int (*)[2]);  // { dg-message "instantiated" }
+ //  { dg-final { scan-assembler "\n_?_Z1fILi1EEvPALi2E_i\[: \t\n\]" } }
+ template void g<1>(int (*)[3]);
+ //  { dg-final { scan-assembler "\n_?_Z1gILi1EEvPAplT_Li2E_i\[: \t\n\]" } }
+--- a/src/gcc/testsuite/g++.dg/eh/ref1.C
++++ b/src/gcc/testsuite/g++.dg/eh/ref1.C
+@@ -0,0 +1,61 @@
++// { dg-do run { xfail { ! arm*-*-*eabi } } }
++
++// catching a pointer to class by reference prohibits derived->base
++// transformation.   The generic C++ ABI gets this wrong.  ARM EABI
++// gets this right, except for exception specifications where a bug is
++// acknowledged. 
++
++#include <stdio.h>
++
++struct A {};
++
++struct B : A {};
++
++int Foo ()
++{
++  B b;
++  
++  try
++    {
++      throw &b;
++    }
++  catch (A *&a)  // { dg-bogus "earlier handler" "" { xfail { ! arm*-*-*eabi } } }
++    {
++      printf ("fail, caught A*&%p\n", a);
++      return 1;
++    }
++  catch (B *&b)  // { dg-bogus "will be caught" "" { xfail { ! arm*-*-*eabi } } }
++    {
++      printf ("pass, caught B*&%p\n", b);
++    }
++  catch (...)
++    {
++      printf ("fail, caught ...");
++      return 2;
++    }
++  try
++    {
++      throw &b;
++    }
++  catch (A *a) // { dg-warning "by earlier handler" }
++    {
++      printf ("pass, caught A*%p\n", a);
++    }
++  catch (B *b) // { dg-warning "will be caught" }
++    {
++      printf ("fail, caught B*%p\n", b);
++      return 3;
++    }
++  catch (...)
++    {
++      printf ("fail, caught ...");
++      return 4;
++    }
++  return 0;
++}
++
++
++int main ()
++{
++  return Foo ();
++}
+--- a/src/gcc/testsuite/g++.dg/eh/ref2.C
++++ b/src/gcc/testsuite/g++.dg/eh/ref2.C
+@@ -0,0 +1,70 @@
++// { dg-do run { xfail { ! arm*-*-*eabi } } }
++
++// catching a pointer to class by reference prohibits derived->base
++// transformation.   The generic C++ ABI gets this wrong.  ARM EABI
++// gets this right, except for exception specifications where a bug is
++// acknowledged. 
++
++#include <stdio.h>
++#include <exception>
++#include <stdlib.h>
++
++struct A {};
++
++struct B : A {};
++
++B b;
++
++void One () throw (A *&)
++{
++  throw &b;
++}
++
++void Two () throw (A *&, B *&)
++{
++  throw &b;
++}
++
++void Three () throw (A *)
++{
++  throw &b;
++}
++
++int Foo (void (*fn)())
++{
++  try
++    {
++      fn ();
++    }
++  catch (B *b)
++    {
++      printf ("pass, caught B*%p\n", b);
++    }
++  catch (...)
++    {
++      printf ("fail, caught ...");
++      return 1;
++    }
++  return 0;
++}
++
++void handler ()
++{
++  printf ("pass, got unexpected exception\n");
++  exit (0);
++}
++
++int main ()
++{
++  if (Foo (&Three))
++    return 1;
++
++  if (Foo (&Two))
++    return 2;
++
++  std::set_unexpected (handler);
++  if (Foo (&One))
++    return 3;
++  printf ("fail, did not get unexpected exception\n");
++  return 4;
++}
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-1.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-1.C
+@@ -0,0 +1,5 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do run { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++#include "arm-fp16-ops.h"
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-2.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-2.C
+@@ -0,0 +1,5 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do run { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=ieee -ffast-math" } */
++
++#include "arm-fp16-ops.h"
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-3.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-3.C
+@@ -0,0 +1,5 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do run { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=alternative" } */
++
++#include "arm-fp16-ops.h"
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-4.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-4.C
+@@ -0,0 +1,5 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do run { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=alternative -ffast-math" } */
++
++#include "arm-fp16-ops.h"
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-5.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-5.C
+@@ -0,0 +1,17 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do compile { target arm*-*-* } } */
++/* { dg-require-effective-target arm_neon_fp16_ok } */
++/* { dg-options "-mfp16-format=ieee" } */
++/* { dg-add-options arm_neon_fp16 } */
++
++#include "arm-fp16-ops.h"
++
++/* We've specified options for hardware float, including fp16 support, so
++   we should not see any calls to libfuncs here.  */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf2" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf3" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_h\[a-z\]*_ieee" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_h2f_ieee" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_f2h_ieee" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__aeabi_h2f" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__aeabi_f2h" } } */
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-6.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-6.C
+@@ -0,0 +1,17 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do compile { target arm*-*-* } } */
++/* { dg-require-effective-target arm_neon_fp16_ok } */
++/* { dg-options "-mfp16-format=ieee -ffast-math" } */
++/* { dg-add-options arm_neon_fp16 } */
++
++#include "arm-fp16-ops.h"
++
++/* We've specified options for hardware float, including fp16 support, so
++   we should not see any calls to libfuncs here.  */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf2" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf3" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_h\[a-z\]*_ieee" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_h2f_ieee" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_f2h_ieee" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__aeabi_h2f" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__aeabi_f2h" } } */
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-7.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-7.C
+@@ -0,0 +1,13 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do compile { target arm*-*-* } } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-mfp16-format=ieee" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm-fp16-ops.h"
++
++/* We've specified options for hardware float, so we should not see any 
++   calls to libfuncs here except for those to the conversion functions.  */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf2" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf3" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_h\[a-z\]*_ieee" } } */
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-8.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-8.C
+@@ -0,0 +1,13 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do compile { target arm*-*-* } } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-mfp16-format=ieee -ffast-math" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm-fp16-ops.h"
++
++/* We've specified options for hardware float, so we should not see any 
++   calls to libfuncs here except for those to the conversion functions.  */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf2" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf3" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_h\[a-z\]*_ieee" } } */
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops.h
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops.h
+@@ -0,0 +1,135 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++
++#include <assert.h>
++
++#define CHECK(e,r) assert ((e) == r)
++#define CHECK2(e,r) (assert ((e) == r), temp = (e), assert (temp == r))
++#define TEST(e) assert (e)
++#define TESTNOT(e) assert (!(e))
++
++volatile __fp16 h0 = 0.0;
++volatile __fp16 h1 = 1.0;
++volatile __fp16 h42 = 42.0;
++volatile __fp16 hm2 = -2.0;
++volatile __fp16 temp;
++
++volatile float f0 = 0.0;
++volatile float f1 = 1.0;
++volatile float f42 = 42.0;
++volatile float fm2 = -2.0;
++
++int main (void)
++{
++  TEST (h1);
++  TESTNOT (h0);
++  TEST (!h0);
++  TESTNOT (!h1);
++
++  CHECK2 (-h1, -1.0);
++  CHECK2 (+h1, 1.0);
++
++  CHECK (h1++, 1.0);
++  CHECK (h1, 2.0);
++  CHECK (++h1, 3.0);
++  CHECK (h1, 3.0);
++
++  CHECK (--h1, 2.0);
++  CHECK (h1, 2.0);
++  CHECK (h1--, 2.0);
++  CHECK (h1, 1.0);
++
++  CHECK2 (h42 * hm2, -84.0);
++  CHECK2 (h42 * (__fp16) -2.0, -84.0);
++  CHECK2 (h42 * fm2, -84.0);
++  CHECK2 (f42 * hm2, -84.0);
++
++  CHECK2 (h42 / hm2, -21.0);
++  CHECK2 (h42 / (__fp16) -2.0, -21.0);
++  CHECK2 (h42 / fm2, -21.0);
++  CHECK2 (f42 / hm2, -21.0);
++
++  CHECK2 (hm2 + h42, 40.0);
++  CHECK2 ((__fp16)-2.0 + h42, 40.0);
++  CHECK2 (hm2 + f42, 40.0);
++  CHECK2 (fm2 + h42, 40.0);
++
++  CHECK2 (hm2 - h42, -44.0);
++  CHECK2 ((__fp16)-2.0 - h42, -44.0);
++  CHECK2 (hm2 - f42, -44.0);
++  CHECK2 (fm2 - h42, -44.0);
++
++  TEST (hm2 < h42);
++  TEST (hm2 < (__fp16)42.0);
++  TEST (hm2 < f42);
++  TEST (fm2 < h42);
++
++  TEST (h42 > hm2);
++  TEST ((__fp16)42.0 > hm2);
++  TEST (h42 > fm2);
++  TEST (f42 > hm2);
++
++  TEST (hm2 <= h42);
++  TEST (hm2 <= (__fp16)42.0);
++  TEST (hm2 <= f42);
++  TEST (fm2 <= h42);
++
++  TEST (h42 >= hm2);
++  TEST (h42 >= (__fp16)-2.0);
++  TEST (h42 >= fm2);
++  TEST (f42 >= hm2);
++
++  TESTNOT (h1 == hm2);
++  TEST (h1 == h1);
++  TEST (h1 == (__fp16)1.0);
++  TEST (h1 == f1);
++  TEST (f1 == h1);
++
++  TEST (h1 != hm2);
++  TESTNOT (h1 != h1);
++  TESTNOT (h1 != (__fp16)1.0);
++  TESTNOT (h1 != f1);
++  TESTNOT (f1 != h1);
++
++  CHECK2 ((h1 ? hm2 : h42), -2.0);
++  CHECK2 ((h0 ? hm2 : h42), 42.0);
++
++  CHECK (h0 = h42, 42.0);
++  CHECK (h0, 42.0);
++  CHECK (h0 = (__fp16)-2.0, -2.0);
++  CHECK (h0, -2.0);
++  CHECK (h0 = f0, 0.0);
++  CHECK (h0, 0.0);
++
++  CHECK (h0 += h1, 1.0);
++  CHECK (h0, 1.0);
++  CHECK (h0 += (__fp16)1.0, 2.0);
++  CHECK (h0, 2.0);
++  CHECK (h0 += fm2, 0.0);
++  CHECK (h0, 0.0);
++
++  CHECK (h0 -= h1, -1.0);
++  CHECK (h0, -1.0);
++  CHECK (h0 -= (__fp16)1.0, -2.0);
++  CHECK (h0, -2.0);
++  CHECK (h0 -= fm2, 0.0);
++  CHECK (h0, 0.0);
++
++  h0 = hm2;
++  CHECK (h0 *= hm2, 4.0);
++  CHECK (h0, 4.0);
++  CHECK (h0 *= (__fp16)-2.0, -8.0);
++  CHECK (h0, -8.0);
++  CHECK (h0 *= fm2, 16.0);
++  CHECK (h0, 16.0);
++
++  CHECK (h0 /= hm2, -8.0);
++  CHECK (h0, -8.0);
++  CHECK (h0 /= (__fp16)-2.0, 4.0);
++  CHECK (h0, 4.0);
++  CHECK (h0 /= fm2, -2.0);
++  CHECK (h0, -2.0);
++
++  CHECK ((h0, h1), 1.0);
++
++  return 0;
++}
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/fp16-mangle-1.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/fp16-mangle-1.C
+@@ -0,0 +1,14 @@
++/* { dg-do compile { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* Test mangling */
++
++/* { dg-final { scan-assembler "\t.global\t_Z1fPDh" } } */
++void f (__fp16 *x) { }
++
++/* { dg-final { scan-assembler "\t.global\t_Z1gPDhS_" } } */
++void g (__fp16 *x, __fp16 *y) { }
++
++/* { dg-final { scan-assembler "\t.global\t_ZN1SIDhDhE1iE" } } */
++template <typename T, typename U> struct S { static int i; }; 
++template <> int S<__fp16, __fp16>::i = 3;
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/fp16-overload-1.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/fp16-overload-1.C
+@@ -0,0 +1,16 @@
++/* { dg-do compile { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* __fp16 values are autoconverted to float and should therefore be treated
++ * just like float for overloading purposes.  */
++
++extern int frobnify (float x);
++extern int frobnify (double x);
++
++int g (void)
++{
++  return frobnify ((__fp16)1.0);
++}
++
++/* { dg-final { scan-assembler "_Z8frobnifyf" } } */
++/* { dg-final { scan-assembler-not " _Z8frobnifyd" } } */
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/fp16-param-1.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/fp16-param-1.C
+@@ -0,0 +1,10 @@
++/* { dg-do compile { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* Functions cannot have parameters of type __fp16.  */
++extern void f (__fp16);		/* { dg-error "parameters cannot have __fp16 type" } */
++extern void (*pf) (__fp16);	/* { dg-error "parameters cannot have __fp16 type" } */
++
++/* These should be OK.  */
++extern void g (__fp16 *);
++extern void (*pg) (__fp16 *);
+--- a/src/gcc/testsuite/g++.dg/ext/arm-fp16/fp16-return-1.C
++++ b/src/gcc/testsuite/g++.dg/ext/arm-fp16/fp16-return-1.C
+@@ -0,0 +1,10 @@
++/* { dg-do compile { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* Functions cannot return type __fp16.  */
++extern __fp16 f (void);		/* { dg-error "cannot return __fp16" } */
++extern __fp16 (*pf) (void);	/* { dg-error "cannot return __fp16" } */
++
++/* These should be OK.  */
++extern __fp16 *g (void);
++extern __fp16 *(*pg) (void);
+--- a/src/gcc/testsuite/g++.dg/ext/dllexport2.C
++++ b/src/gcc/testsuite/g++.dg/ext/dllexport2.C
+@@ -0,0 +1,52 @@
++// { dg-do link }
++// { dg-require-dll "" }
++// { dg-additional-sources "dllexport2a.cc" }
++// { dg-options "-O2" }
++
++/* Test that inline functions declared "dllexport" appear in object
++   files, even if they are not called.
++
++   This behavior is required by the ARM C++ ABI:
++
++     Exporting a function that can be inlined should force the
++     creation and export of an out-of-line copy of it.
++
++   and should presumably also apply.
++
++   Visual Studio 2005 also honors that rule.  */
++
++__declspec(dllexport) inline void i1() {}
++
++__declspec(dllexport) extern inline void e1() {}
++
++/* It is invalid to declare the function inline after its definition.  */
++#if 0
++__declspec(dllexport) void i2() {}
++inline void i2();
++
++__declspec(dllexport) extern void e2() {}
++inline void e2();
++#endif
++
++__declspec(dllexport) inline void i3() {}
++void i3();
++
++__declspec(dllexport) inline void e3() {}
++extern void e3();
++
++__declspec(dllexport) void i4();
++inline void i4() {};
++
++__declspec(dllexport) extern void e4();
++inline void e4() {};
++
++__declspec(dllexport) inline void i5();
++void i5() {};
++
++__declspec(dllexport) inline void e5();
++extern void e5() {};
++
++/* Make sure that just declaring the function -- without defining it
++   -- does not cause errors.  */
++__declspec(dllexport) inline void i6();
++__declspec(dllexport) extern inline void e6();
+--- a/src/gcc/testsuite/g++.dg/ext/dllexport2a.cc
++++ b/src/gcc/testsuite/g++.dg/ext/dllexport2a.cc
+@@ -0,0 +1,21 @@
++extern void i1();
++extern void i3();
++extern void i4();
++extern void i5();
++
++extern void e1();
++extern void e3();
++extern void e4();
++extern void e5();
++
++int main () {
++  i1();
++  i3();
++  i4();
++  i5();
++
++  e1();
++  e3();
++  e4();
++  e5();
++}
+--- a/src/gcc/testsuite/g++.dg/ext/ms-1.C
++++ b/src/gcc/testsuite/g++.dg/ext/ms-1.C
+@@ -0,0 +1,17 @@
++
++// MS allows more things to be pointers to member functions
++// { dg-options "-fms-extensions" }
++
++struct X
++{
++  void Foo (X *);
++  void Bar ();
++};
++
++void Quux (void (X::*) ());
++
++void X::Foo (X *ptr)  // { dg-message "candidates" }
++{
++  Quux (Foo); // { dg-error "no matches" }
++  Quux (Bar);
++}
+--- a/src/gcc/testsuite/g++.dg/ext/packed8.C
++++ b/src/gcc/testsuite/g++.dg/ext/packed8.C
+@@ -2,7 +2,7 @@
+ // NOTE: This test assumes packed structure layout differs from unpacked
+ //       structure layout.  This isn't true, e.g., with the default
+ //       arm-none-elf options.
+-// { dg-options "-mstructure-size-boundary=8" { target arm-*-* } }
++// { dg-options "-mstructure-size-boundary=8" { target arm*-*-* } }
+ 
+ class A
+ {
+--- a/src/gcc/testsuite/g++.dg/init/array16.C
++++ b/src/gcc/testsuite/g++.dg/init/array16.C
+@@ -1,7 +1,7 @@
+ // Causes timeout for the MMIX simulator on a 3GHz P4 and we can't
+ // have "compile" for some targets and "run" for others.
+ // { dg-do run { target { ! mmix-*-* } } }
+-// { dg-options "-mstructure-size-boundary=8" { target arm-*-* } }
++// { dg-options "-mstructure-size-boundary=8" { target arm*-*-* } }
+ 
+ // Copyright (C) 2004 Free Software Foundation, Inc.
+ // Contributed by Nathan Sidwell 8 Dec 2004 <nathan@codesourcery.com>
+--- a/src/gcc/testsuite/g++.dg/init/pr42556.C
++++ b/src/gcc/testsuite/g++.dg/init/pr42556.C
+@@ -0,0 +1,10 @@
++// { dg-do compile }
++// { dg-options "-fdump-tree-gimple" }
++
++void foo (int a, int b, int c, int d)
++{
++  int v[4] = {a, b, c, d};
++}
++
++// { dg-final { scan-tree-dump-not "v = {}"  "gimple" } }
++// { dg-final { cleanup-tree-dump "gimple" } }
+--- a/src/gcc/testsuite/g++.dg/init/ref15.C
++++ b/src/gcc/testsuite/g++.dg/init/ref15.C
+@@ -1,6 +1,8 @@
+ // PR c++/20416.  We correctly constructed the temporary S in foo(),
+ // but incorrectly destroyed it every time foo() was called.
+-// { dg-do run }
++// When using a wrapped target, there is no way to override the exit
++// code after returning from main.
++// { dg-do run { target unwrapped } }
+ extern "C" void abort (void);
+ extern "C" void _exit (int);
+ 
+--- a/src/gcc/testsuite/g++.dg/opt/alias5.C
++++ b/src/gcc/testsuite/g++.dg/opt/alias5.C
+@@ -0,0 +1,24 @@
++// { dg-options "-O2" }
++// ICE in struct-alias
++
++typedef int (*PFN)(void);
++int f (void);
++struct Container
++{
++  PFN ptr;
++};
++
++inline PFN Get (struct Container *tpl)
++{
++  return tpl->ptr;
++}
++void Other (PFN);
++
++inline void Foo (PFN pfn)
++{
++  Other (Get ((struct Container *)&pfn));
++}
++void Bar (void)
++{
++  Foo (f);
++}
+--- a/src/gcc/testsuite/g++.dg/other/arm-neon-1.C
++++ b/src/gcc/testsuite/g++.dg/other/arm-neon-1.C
+@@ -0,0 +1,18 @@
++/* Basic smoke test for arm_neon.h */
++
++/* { dg-do assemble } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++
++float a[4];
++
++void test(void)
++{
++  float32x2x2_t v;
++  float32x2_t res;
++  v = vld2_f32(a);
++  res = vadd_f32(v.val[0], v.val[1]);
++  vst1_f32(a, res);
++}
+--- a/src/gcc/testsuite/g++.dg/other/armv7m-1.C
++++ b/src/gcc/testsuite/g++.dg/other/armv7m-1.C
+@@ -0,0 +1,69 @@
++/* { dg-do run { target arm*-*-* } } */
++/* Test Armv7m interrupt routines.  */
++#include <stdlib.h>
++
++#ifdef __ARM_ARCH_7M__
++void __attribute__((interrupt))
++foo(void)
++{
++  long long n;
++  long p;
++  asm volatile ("" : "=r" (p) : "0" (&n));
++  if (p & 4)
++    abort ();
++  return;
++}
++
++void __attribute__((interrupt))
++bar(void)
++{
++  throw 42;
++}
++
++int main()
++{
++  int a;
++  int before;
++  int after;
++  volatile register int sp asm("sp");
++
++  asm volatile ("mov %0, sp\n"
++		"blx %2\n"
++		"mov %1, sp\n"
++		: "=&r" (before), "=r" (after) : "r" (foo)
++		: "memory", "cc", "r0", "r1", "r2", "r3", "ip", "lr");
++  if (before != after)
++    abort();
++  asm volatile ("mov %0, sp\n"
++		"sub sp, sp, #4\n"
++		"blx %2\n"
++		"add sp, sp, #4\n"
++		"mov %1, sp\n"
++		: "=&r" (before), "=r" (after) : "r" (foo)
++		: "memory", "cc", "r0", "r1", "r2", "r3", "ip", "lr");
++  if (before != after)
++    abort();
++  before = sp;
++  try
++    {
++      bar();
++    }
++  catch (int i)
++    {
++      if (i != 42)
++	abort();
++    }
++  catch (...)
++    {
++      abort();
++    }
++  if (before != sp)
++    abort();
++  exit(0);
++}
++#else
++int main()
++{
++  exit (0);
++}
++#endif
+--- a/src/gcc/testsuite/g++.dg/other/crash-4.C
++++ b/src/gcc/testsuite/g++.dg/other/crash-4.C
+@@ -7,7 +7,7 @@
+ // NOTE: This test assumes packed structure layout differs from unpacked
+ //       structure layout.  This isn't true, e.g., with the default
+ //       arm-none-elf options.
+-// { dg-options "-mstructure-size-boundary=8" { target arm-*-* } }
++// { dg-options "-mstructure-size-boundary=8" { target arm*-*-* } }
+ 
+ struct a
+ {
+--- a/src/gcc/testsuite/g++.dg/other/packed1.C
++++ b/src/gcc/testsuite/g++.dg/other/packed1.C
+@@ -1,4 +1,4 @@
+-// { dg-do run { xfail arm-*-* sh-*-* } }
++// { dg-do run { xfail arm*-*-* sh-*-* } }
+ 
+ // NMS:2003-04-21 this fails on strict aligned architectures again,
+ // the patch was reverted because it broke something more important.
+--- a/src/gcc/testsuite/g++.dg/pr45112.C
++++ b/src/gcc/testsuite/g++.dg/pr45112.C
+@@ -0,0 +1,12 @@
++/* { dg-do compile } */
++
++struct JSString
++{
++  unsigned char mLength;
++  static JSString unitStringTable[];
++};
++
++JSString JSString::unitStringTable[] __attribute__ ((aligned (8))) = { 1 };
++
++int bug [__alignof__ (JSString::unitStringTable) >= 8 ? 1 : -1];
++
+--- a/src/gcc/testsuite/g++.dg/remove-local-statics-1.C
++++ b/src/gcc/testsuite/g++.dg/remove-local-statics-1.C
+@@ -0,0 +1,21 @@
++/* Verify that we do not eliminate a static variable in
++   main::Local::Foo.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler "thestatic" } } */
++
++int
++main (void)
++{
++   static int thestatic = 0;
++   struct Local {
++     __attribute__((__noinline__))
++     static void Foo () { thestatic = 1; }
++   };
++
++   thestatic = 2;
++   Local::Foo();
++
++   return thestatic++;
++}
+--- a/src/gcc/testsuite/g++.dg/remove-local-statics-2.C
++++ b/src/gcc/testsuite/g++.dg/remove-local-statics-2.C
+@@ -0,0 +1,21 @@
++/* Verify that we do not eliminate a static variable in
++   main due to its use in Local::Foo.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler "thestatic" } } */
++
++int
++main (void)
++{
++   static int thestatic = 0;
++   struct Local {
++     __attribute__((__noinline__))
++     static int Foo () { return thestatic; }
++   };
++
++   thestatic = 2;
++   thestatic = Local::Foo();
++
++   return thestatic++;
++}
+--- a/src/gcc/testsuite/g++.dg/rtti/dyncast3.C
++++ b/src/gcc/testsuite/g++.dg/rtti/dyncast3.C
+@@ -0,0 +1,81 @@
++// This testcase used to crash while looking in A for my_module.  I'm still
++// not sure it's well-formed, but it works now because of the optimization
++// to look at the expected address first.
++
++// { dg-do run }
++
++extern "C" int puts (const char *);
++extern "C" void abort ();
++
++struct my_object
++{
++  my_object() { puts ("in my_object ctor");}
++  virtual ~my_object() { puts ("in my_object dtor"); }
++};
++
++my_object* my_module_ptr = 0;
++
++struct my_module : my_object
++{
++  my_module()
++  {
++    puts ("in my_module ctor, setting up ptr");
++    my_module_ptr = this;
++  }
++  ~my_module() { puts ("in my_module dtor");}
++};
++
++struct D
++{
++  D() { puts ("in D ctor"); }
++  virtual ~D();
++};
++
++D::~D()
++{
++  puts ("in D dtor");
++  puts ("before DCASTing to my_module*");
++  my_module* m = dynamic_cast<my_module*>(my_module_ptr);
++  if (m != my_module_ptr)
++    abort ();
++  puts ("after DCASTing to my_module*");
++}
++
++struct my_interface
++{
++  my_interface() { puts ("in my_interface ctor");}
++  ~my_interface() { puts ("in my_interface dtor");}
++};
++
++struct myif : virtual my_interface
++{
++  myif() { puts ("in myif ctor");}
++  ~myif() { puts ("in myif dtor");}
++};
++
++struct A: virtual myif
++{
++  A() { puts ("in A ctor"); }
++  ~A() { puts ("in A dtor"); }
++
++  D d;
++};
++
++struct B: virtual myif
++{
++  B() { puts ("in B ctor"); }
++  ~B() { puts ("in B dtor"); }
++
++  D d;
++};
++
++struct C : my_module, A, B
++{
++  C() { puts ("in C ctor");}
++  ~C() { puts ("in C dtor"); }
++};
++
++int main(int, char**)
++{
++  C t;
++}
+--- a/src/gcc/testsuite/g++.dg/rtti/dyncast4.C
++++ b/src/gcc/testsuite/g++.dg/rtti/dyncast4.C
+@@ -0,0 +1,26 @@
++// Test to make sure that we keep searching if we don't find the type we
++// want at the expected address.
++
++// { dg-do run }
++
++struct A
++{
++  virtual void f() {};
++};
++
++struct B: A { };
++
++struct C: A { };
++
++struct D: B, C { };
++
++int main()
++{
++  D d;
++  A* ap = static_cast<B*>(&d);
++  C* cp = dynamic_cast<C*>(ap);
++  if (cp == 0)
++    return 1;
++  else
++    return 0;
++}
+--- a/src/gcc/testsuite/g++.dg/template/cond2.C
++++ b/src/gcc/testsuite/g++.dg/template/cond2.C
+@@ -3,8 +3,8 @@
+ 
+ template<int X> class c;
+ 
+-template<int X, int Y> int test(c<X ? : Y>&);
++template<int X, int Y> int test(c<X ? : Y>&); // { dg-error "omitted" }
+ 
+ void test(c<2>*c2) {
+-	test<0, 2>(*c2); // { dg-error "omitted" }
++	test<0, 2>(*c2); // { dg-message "instantiated" }	
+ }
+--- a/src/gcc/testsuite/g++.dg/template/overload9.C
++++ b/src/gcc/testsuite/g++.dg/template/overload9.C
+@@ -7,12 +7,12 @@
+ template <typename T>
+ struct A 
+ {
+-  A<T>& operator<<(A<T>& (*)(A<T>&)); // { dg-message "candidate" }
++  A<T>& operator<<(A<T>& (*)(A<T>&));
+ };
+ 
+ template <typename T> A<T>& foo(A<T>&);
+ extern A<char> c;
+ 
+ int main () {
+-  c << (1, foo); // { dg-error "no match" }
++  c << (1, foo); // { dg-error "no context" }
+ }
+--- a/src/gcc/testsuite/g++.dg/template/pr35240.C
++++ b/src/gcc/testsuite/g++.dg/template/pr35240.C
+@@ -4,9 +4,9 @@
+ 
+ template<int> struct A {};
+ 
+-template<int N> A<sizeof(new int[N][N])> foo();
++template<int N> A<sizeof(new int[N][N])> foo(); // { dg-message "unimplemented" }
+ 
+ void bar()
+ {
+-  foo<1>();	// { dg-message "unimplemented" }
++  foo<1>(); // { dg-message "instantiated" }
+ }
+--- a/src/gcc/testsuite/g++.dg/torture/pr36191.C
++++ b/src/gcc/testsuite/g++.dg/torture/pr36191.C
+@@ -1,6 +1,7 @@
+ // PR c++/36191
+ // { dg-do compile }
+ // { dg-options "-fnon-call-exceptions" }
++// { dg-skip-if "Frame pointer required for unwind tables" { sh*-*-* m68k*-*-* fido*-*-* } "-fomit-frame-pointer" "" }
+ 
+ __complex__ double
+ foo (__complex__ double x, double y)
+--- a/src/gcc/testsuite/g++.dg/tree-ssa/sink-1.C
++++ b/src/gcc/testsuite/g++.dg/tree-ssa/sink-1.C
+@@ -0,0 +1,50 @@
++/* { dg-do run } */
++/* { dg-options "-O1" } */
++
++class A {
++ public:
++  A() {}
++  virtual ~A() {}  
++  void * dostuff();
++  
++  virtual int dovirtual() = 0;
++};
++
++
++class B : public A {
++ public:
++  B() {}
++  int dovirtual() { return 0;}
++  virtual ~B() {};
++}; 
++
++class C : public B {
++ public:
++  C() {}
++  virtual ~C() {};
++};
++
++void* A::dostuff()
++{
++  return (void*)dovirtual();
++}
++
++/* tree-ssa-sink was sinking the inlined destructor for STUFF out of
++   the first inner block and into the second one, where it was ending up
++   after the inlined constructor for STUFF2.  This is bad because
++   cfgexpand aliases STUFF and STUFF2 to the same storage at -O1
++   (i.e., without -fstrict-aliasing), with the result that STUFF2's
++   vtable was getting trashed. */
++
++int main() {
++  {
++    B stuff;
++    stuff.dostuff();
++  }
++  {
++    C stuff2;
++    stuff2.dostuff();
++  }
++  return 0;
++}
++
+--- a/src/gcc/testsuite/g++.dg/vect/vect.exp
++++ b/src/gcc/testsuite/g++.dg/vect/vect.exp
+@@ -108,7 +108,7 @@
+ } elseif [istarget "ia64-*-*"] {
+     set dg-do-what-default run
+ } elseif [is-effective-target arm_neon_ok] {
+-    lappend DEFAULT_VECTCFLAGS "-mfpu=neon" "-mfloat-abi=softfp"
++    eval lappend DEFAULT_VECTCFLAGS [add_options_for_arm_neon ""]
+     if [is-effective-target arm_neon_hw] {
+       set dg-do-what-default run
+     } else {
+--- a/src/gcc/testsuite/g++.dg/warn/null4.C
++++ b/src/gcc/testsuite/g++.dg/warn/null4.C
+@@ -11,9 +11,22 @@
+   if (NULL < NULL) return -1; // { dg-warning "NULL used in arithmetic" } 
+   if (NULL >= 0) return -1;   // { dg-warning "NULL used in arithmetic" } 
+   if (NULL <= 0) return -1;   // { dg-warning "NULL used in arithmetic" } 
++  // Adding to the NULL pointer, which has no specific type, should
++  // result in a warning; the type of the resulting expression is
++  // actually "int", not a pointer type.
++  if (NULL + 1) return -1;    // { dg-warning "NULL used in arithmetic" }
++  if (1 + NULL) return -1;    // { dg-warning "NULL used in arithmetic" }
+   return 0;
+ }
+ 
++int *ip;
++
++struct S {};
++typedef int S::*SPD;
++typedef void (S::*SPF)(void);
++SPD spd;
++SPF spf;
++
+ int bar (void) 
+ {
+   if (NULL) return -1;
+@@ -25,5 +38,18 @@
+   if (NULL != NULL) return -1;
+   if (NULL == 0) return -1;
+   if (NULL != 0) return -1;
++  // Subtraction of pointers is vaild, so using NULL is OK.
++  if (ip - NULL) return -1;
++  if (NULL - NULL) return -1;
++  // Comparing NULL with a pointer-to-member is OK.
++  if (NULL == spd) return -1;
++  if (spd == NULL) return -1;
++  if (NULL != spd) return -1;
++  if (spd != NULL) return -1;
++  if (NULL == spf) return -1;
++  if (spf == NULL) return -1;
++  if (NULL != spf) return -1;
++  if (spf != NULL) return -1;
++
+   return 0;
+ }
+--- a/src/gcc/testsuite/g++.old-deja/g++.other/overload11.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.other/overload11.C
+@@ -54,11 +54,10 @@
+   
+   ptr = (ovl);              // ok
+   ptr = (&ovl);             // ok
+-  // 13.4 indicates these are ok.
+-  ptr = (0, ovl);           // ok { dg-bogus "" "" { xfail *-*-* } }
+-  ptr = (0, &ovl);          // ok { dg-bogus "" "" { xfail *-*-* } }
+-  ptr = (argc ? ovl : ovl); // ok { dg-bogus "" "" { xfail *-*-* } }
+-  ptr = (argc ? &ovl : &ovl);// ok { dg-bogus "" "" { xfail *-*-* } }
++  ptr = (0, ovl);           // ok { dg-error "no context" }
++  ptr = (0, &ovl);          // ok { dg-error "no context" }
++  ptr = (argc ? ovl : ovl); // ok { dg-error "no context" }
++  ptr = (argc ? &ovl : &ovl);// ok { dg-error "no context" }
+   
+   vptr = (ovl);              // { dg-error "" } no matching candidates
+   vptr = (&ovl);             // { dg-error "" } no matching candidates
+--- a/src/gcc/testsuite/gcc.c-torture/execute/20100416-1.c
++++ b/src/gcc/testsuite/gcc.c-torture/execute/20100416-1.c
+@@ -0,0 +1,40 @@
++void abort(void);
++
++int
++movegt(int x, int y, long long a)
++{
++  int i;
++  int ret = 0;
++  for (i = 0; i < y; i++)
++    {
++      if (a >= (long long) 0xf000000000000000LL)
++	ret = x;
++      else
++	ret = y;
++    }
++  return ret;
++}
++
++struct test
++{
++  long long val;
++  int ret;
++} tests[] = {
++  { 0xf000000000000000LL, -1 },
++  { 0xefffffffffffffffLL, 1 },
++  { 0xf000000000000001LL, -1 },
++  { 0x0000000000000000LL, -1 },
++  { 0x8000000000000000LL, 1 },
++};
++
++int
++main()
++{
++  int i;
++  for (i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)
++    {
++      if (movegt (-1, 1, tests[i].val) != tests[i].ret)
++	abort ();
++    }
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.c-torture/execute/990208-1.x
++++ b/src/gcc/testsuite/gcc.c-torture/execute/990208-1.x
+@@ -0,0 +1,12 @@
++
++# On ARM, with -Os, some of the functions that this test
++# expects to be inlined are not inlined for code size
++# reasons.  This is not a bug, it's intentional,
++# so stop this test from running.
++set torture_eval_before_compile {
++  if { [istarget "arm*-*-*"] && [string match {*-Os*} "$option"] } {
++    continue
++  }
++}
++
++return 0
+--- a/src/gcc/testsuite/gcc.c-torture/execute/bcp-1.x
++++ b/src/gcc/testsuite/gcc.c-torture/execute/bcp-1.x
+@@ -0,0 +1,12 @@
++
++# On ARM, with -Os, some of the functions that this test
++# expects to be inlined are not inlined for code size
++# reasons.  This is not a bug, it's intentional,
++# so stop this test from running.
++set torture_eval_before_compile {
++  if { [istarget "arm*-*-*"] && [string match {*-Os*} "$option"] } {
++    continue
++  }
++}
++
++return 0
+--- a/src/gcc/testsuite/gcc.c-torture/execute/bitfld-5.c
++++ b/src/gcc/testsuite/gcc.c-torture/execute/bitfld-5.c
+@@ -0,0 +1,35 @@
++/* See http://gcc.gnu.org/ml/gcc/2009-06/msg00072.html.  */
++
++extern void abort (void);
++
++struct s
++{
++  unsigned long long a:2;
++  unsigned long long b:40;
++  unsigned long long c:22;
++};
++
++__attribute__ ((noinline)) void
++g (unsigned long long a, unsigned long long b)
++{
++  asm ("");
++  if (a != b)
++    abort ();
++}
++
++__attribute__ ((noinline)) void
++f (struct s s, unsigned long long b)
++{
++  asm ("");
++  g (((unsigned long long) (s.b-8)) + 8, b);
++}
++
++int
++main ()
++{
++  struct s s = {1, 10, 3};
++  struct s t = {1, 2, 3};
++  f (s, 10);
++  f (t, 0x10000000002);
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp
++++ b/src/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp
+@@ -54,6 +54,9 @@
+      || [istarget "sh*-*-*"] } then {
+   lappend additional_flags "-mieee"
+ }
++if [istarget "mips*-sde-*"] then {
++  lappend additional_flags "-Wl,--defsym=__cs3_mips_float_type=2" "-lcs3-mips-cp1" "-lcs3-mips-fpemu"
++}
+ 
+ # load support procs
+ load_lib c-torture.exp
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr43323.c
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr43323.c
+@@ -0,0 +1,14 @@
++/* PR middle-end/43323 */
++
++extern void abort (void);
++
++int main()
++{
++  struct { unsigned bar:1; } foo;
++  foo.bar = 0x1;
++  if ((unsigned char)(foo.bar * 0xfe) != 0xfeu)
++    abort ();
++  if ((unsigned char)(foo.bar * 0xff) != 0xffu)
++    abort ();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.dg/Warray-bounds-8.c
++++ b/src/gcc/testsuite/gcc.dg/Warray-bounds-8.c
+@@ -0,0 +1,20 @@
++/* { dg-do compile } */
++/* { dg-options "-O3 -Wall" } */
++/* based on PR 43833 */
++
++extern unsigned char data[5];
++
++unsigned char
++foo (char *str)
++{
++  int i, j;
++  unsigned char c = 0;
++
++  for (i = 0; i < 8; i++)
++    {
++      j = i * 5;
++      if ((j % 8) > 3)
++	c |= data[(j / 8) + 1];
++    }
++  return c;
++}
+--- a/src/gcc/testsuite/gcc.dg/builtin-redefine.c
++++ b/src/gcc/testsuite/gcc.dg/builtin-redefine.c
+@@ -28,7 +28,7 @@
+ #define __TIME__ "X"         /* Re-define while defined.  */
+ 
+ #define __TIME__ "Y"         /* { dg-warning "\"__TIME__\" redefined" } */
+-/* { dg-warning "previous definition" "" { target *-*-* } 28 } */
++/* { dg-message "previous definition" "" { target *-*-* } 28 } */
+ 
+ #undef __TIME__              /* Undefine while defined.  */
+ 
+@@ -39,7 +39,7 @@
+ #define __DATE__ "X"         /* Re-define while defined.  */
+ 
+ #define __DATE__ "Y"         /* { dg-warning "\"__DATE__\" redefined" } */
+-/* { dg-warning "previous definition" "" { target *-*-* } 39 } */
++/* { dg-message "previous definition" "" { target *-*-* } 39 } */
+ 
+ #undef __DATE__              /* Undefine while defined.  */
+ 
+@@ -48,7 +48,7 @@
+ #define __TIMESTAMP__ "X"    /* Re-define while defined.  */
+ 
+ #define __TIMESTAMP__ "Y"    /* { dg-warning "\"__TIMESTAMP__\" redefined" } */
+-/* { dg-warning "previous definition" "" { target *-*-* } 48 } */
++/* { dg-message "previous definition" "" { target *-*-* } 48 } */
+ 
+ #undef __TIMESTAMP__         /* Undefine while defined.  */
+ 
+--- a/src/gcc/testsuite/gcc.dg/builtin-stringop-chk-1.c
++++ b/src/gcc/testsuite/gcc.dg/builtin-stringop-chk-1.c
+@@ -2,7 +2,7 @@
+    are emitted properly.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -std=gnu99" } */
+-/* { dg-options "-mstructure-size-boundary=8 -O2 -std=gnu99" { target arm-*-* } } */
++/* { dg-options "-mstructure-size-boundary=8 -O2 -std=gnu99" { target arm*-*-* } } */
+ 
+ extern void abort (void);
+ 
+--- a/src/gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c
++++ b/src/gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c
+@@ -46,7 +46,7 @@
+ "/* { dg-options \"%s-I%s\" } */\n",
+ "/* { dg-options \"%s-I%s -Wno-abi\" } */\n",
+ "/* { dg-options \"%s-I%s -mno-mmx -Wno-abi\" { target i?86-*-* x86_64-*-* } } */\n",
+-"/* { dg-options \"%s-I%s -fno-common\" { target hppa*-*-hpux* powerpc*-*-darwin* *-*-mingw32* *-*-cygwin* } } */\n",
++"/* { dg-options \"%s-I%s -fno-common\" { target hppa*-*-hpux* powerpc*-*-darwin* } } */\n",
+ "/* { dg-options \"%s-I%s -mno-mmx -fno-common -Wno-abi\" { target i?86-*-darwin* x86_64-*-darwin* } } */\n",
+ "/* { dg-options \"%s-I%s -mno-base-addresses\" { target mmix-*-* } } */\n",
+ "/* { dg-options \"%s-I%s -mlongcalls -mtext-section-literals\" { target xtensa*-*-* } } */\n"
+--- a/src/gcc/testsuite/gcc.dg/cpp/Wvariadic-1.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/Wvariadic-1.c
+@@ -4,3 +4,4 @@
+ #define f(x,...)	/* { dg-error "variadic" } */
+ #define g(x,y...)	/* { dg-error "variadic" } */
+ int not_empty;
++/* { dg-message "warnings being treated as errors" "" { target *-*-* } 0 } */
+--- a/src/gcc/testsuite/gcc.dg/cpp/Wvariadic-3.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/Wvariadic-3.c
+@@ -4,3 +4,4 @@
+ #define f(x,...)
+ #define g(x,y...)	/* { dg-error "variadic" } */
+ int not_empty;
++/* { dg-message "warnings being treated as errors" "" { target *-*-* } 0 } */
+--- a/src/gcc/testsuite/gcc.dg/cpp/include2.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/include2.c
+@@ -8,9 +8,8 @@
+ /* Source: Neil Booth, 4 Nov 2000.  */
+ 
+ #include <silly\>>  /* { dg-error "extra tokens" "" } */
+-#include "silly\""  /* { dg-error "extra tokens" "" } */
+ 
+ /* These error is No such file or directory, just once.  However, this
+    message is locale-dependent, so don't test for it.  */
+ /* { dg-error "silly" "" { target *-*-* } 10 } */
+-/* { dg-error "missing" "" { target *-*-* } 11 } */
++/* { dg-message "terminated" "" { target *-*-* } 0 } */
+--- a/src/gcc/testsuite/gcc.dg/cpp/include2a.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/include2a.c
+@@ -0,0 +1,16 @@
++/* Copyright (C) 2000 Free Software Foundation, Inc.  */
++
++/* { dg-do preprocess } */
++
++/* Tests that #include does not allow the terminating '>' or '"' to be
++   escaped, as per the standard.  */
++
++/* Source: Neil Booth, 4 Nov 2000.  */
++
++#include "silly\""  /* { dg-error "extra tokens" "" } */
++
++/* These error is No such file or directory, just once.  However, this
++   message is locale-dependent, so don't test for it.  */
++/* { dg-error "silly" "" { target *-*-* } 10 } */
++/* { dg-error "missing" "" { target *-*-* } 10 } */
++/* { dg-message "terminated" "" { target *-*-* } 0 } */
+--- a/src/gcc/testsuite/gcc.dg/cpp/missing-header-1.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/missing-header-1.c
+@@ -0,0 +1,9 @@
++/* Test that missing headers are fatal errors.  PR 15638.  */
++/* { dg-do compile } */
++/* { dg-options "" } */
++
++#include "nonexistent.h" /* { dg-error "nonexistent.h" } */
++/* { dg-message "terminated" "" { target *-*-* } 0 } */
++
++/* This declaration should not receive any diagnostic.  */
++foo bar;
+--- a/src/gcc/testsuite/gcc.dg/cpp/missing-header-MD.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/missing-header-MD.c
+@@ -0,0 +1,6 @@
++/* Test that missing user headers are fatal errors with -MD.  */
++/* { dg-do compile } */
++/* { dg-options "-MD" } */
++
++#include "nonexistent.h" /* { dg-error "nonexistent.h" } */
++/* { dg-message "terminated" "" { target *-*-* } 0 } */
+--- a/src/gcc/testsuite/gcc.dg/cpp/missing-header-MMD.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/missing-header-MMD.c
+@@ -0,0 +1,6 @@
++/* Test that missing user headers are fatal errors with -MMD.  */
++/* { dg-do compile } */
++/* { dg-options "-MMD" } */
++
++#include "nonexistent.h" /* { dg-error "nonexistent.h" } */
++/* { dg-message "terminated" "" { target *-*-* } 0 } */
+--- a/src/gcc/testsuite/gcc.dg/cpp/missing-sysheader-MD.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/missing-sysheader-MD.c
+@@ -0,0 +1,6 @@
++/* Test that missing system headers are fatal errors with -MD.  */
++/* { dg-do compile } */
++/* { dg-options "-MD" } */
++
++#include <nonexistent.h> /* { dg-error "nonexistent.h" } */
++/* { dg-message "terminated" "" { target *-*-* } 0 } */
+--- a/src/gcc/testsuite/gcc.dg/cpp/missing-sysheader-MMD.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/missing-sysheader-MMD.c
+@@ -0,0 +1,6 @@
++/* Test that missing system headers are fatal errors with -MMD.  */
++/* { dg-do compile } */
++/* { dg-options "-MMD" } */
++
++#include <nonexistent.h> /* { dg-error "nonexistent.h" } */
++/* { dg-message "terminated" "" { target *-*-* } 0 } */
+--- a/src/gcc/testsuite/gcc.dg/cpp/redef2.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/redef2.c
+@@ -23,9 +23,9 @@
+    { dg-warning "redefined" "redef ro"      { target *-*-* } 12 }
+    { dg-warning "redefined" "redef va"      { target *-*-* } 15 }
+ 
+-   { dg-warning "previous"  "prev def mac"  { target *-*-* } 6  }
+-   { dg-warning "previous"  "prev def mac"  { target *-*-* } 7  }
+-   { dg-warning "previous"  "prev def mac"  { target *-*-* } 8  }
+-   { dg-warning "previous"  "prev def ro"   { target *-*-* } 11 }
+-   { dg-warning "previous"  "prev def va"   { target *-*-* } 14 }
++   { dg-message "previous"  "prev def mac"  { target *-*-* } 6  }
++   { dg-message "previous"  "prev def mac"  { target *-*-* } 7  }
++   { dg-message "previous"  "prev def mac"  { target *-*-* } 8  }
++   { dg-message "previous"  "prev def ro"   { target *-*-* } 11 }
++   { dg-message "previous"  "prev def va"   { target *-*-* } 14 }
+ */
+--- a/src/gcc/testsuite/gcc.dg/cpp/redef3.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/redef3.c
+@@ -15,7 +15,7 @@
+    { dg-warning "redefined" "redef B"      { target *-*-* } 9  }
+    { dg-warning "redefined" "redef D"      { target *-*-* } 11 }
+    { dg-warning "redefined" "redef E"      { target *-*-* } 12 }
+-   { dg-warning "previous"  "prev def A"   { target *-*-* } 6  }
+-   { dg-warning "previous"  "prev def B"   { target *-*-* } 8  }
+-   { dg-warning "previous"  "prev def D/E" { target *-*-* } 0  }
++   { dg-message "previous"  "prev def A"   { target *-*-* } 6  }
++   { dg-message "previous"  "prev def B"   { target *-*-* } 8  }
++   { dg-message "previous"  "prev def D/E" { target *-*-* } 0  }
+ */
+--- a/src/gcc/testsuite/gcc.dg/cpp/trad/redef2.c
++++ b/src/gcc/testsuite/gcc.dg/cpp/trad/redef2.c
+@@ -2,31 +2,31 @@
+ 
+ /* { dg-do preprocess } */
+ 
+-#define foo bar    /* { dg-warning "previous def" "foo prev def" } */
++#define foo bar    /* { dg-message "previous def" "foo prev def" } */
+ #define foo barr   /* { dg-warning "redefined" "foo redefined" } */
+ 
+ #undef foo
+-#define foo bar    /* { dg-warning "previous def" "foo prev def 2" } */
++#define foo bar    /* { dg-message "previous def" "foo prev def 2" } */
+ #define foo() bar    /* { dg-warning "redefined" "foo redefined 2" } */
+ 
+ #undef foo
+-#define foo() bar    /* { dg-warning "previous def" "foo prev def" } */
++#define foo() bar    /* { dg-message "previous def" "foo prev def" } */
+ #define foo() barr   /* { dg-warning "redefined" "foo redefined" } */
+ 
+-#define quux(thud) a thud b /* { dg-warning "previous def" "quux prev def" } */
++#define quux(thud) a thud b /* { dg-message "previous def" "quux prev def" } */
+ #define quux(thu) a thud b   /* { dg-warning "redefined" "quux redefined" } */
+ 
+-#define bar(x, y) x+y /* { dg-warning "previous def" "bar prev def" } */
++#define bar(x, y) x+y /* { dg-message "previous def" "bar prev def" } */
+ #define bar(x, y) x+x   /* { dg-warning "redefined" "bar redefined" } */
+ 
+-#define bat(x, y) x+y  /* { dg-warning "previous def" "bat prev def" } */
++#define bat(x, y) x+y  /* { dg-message "previous def" "bat prev def" } */
+ #define bat(x, y) x+ y   /* { dg-warning "redefined" "bat redefined" } */
+ 
+-#define baz(x, y) x+y  /* { dg-warning "previous def" "baz prev def" } */
++#define baz(x, y) x+y  /* { dg-message "previous def" "baz prev def" } */
+ #define baz(x, y) x +y   /* { dg-warning "redefined" "baz redefined" } */
+ 
+-#define f(x, y) "x y"  /* { dg-warning "previous def" "f prev def" } */
++#define f(x, y) "x y"  /* { dg-message "previous def" "f prev def" } */
+ #define f(x, y) "x  y"   /* { dg-warning "redefined" "f redefined" } */
+ 
+-#define g(x, y) 'x'  /* { dg-warning "previous def" "g prev def" } */
++#define g(x, y) 'x'  /* { dg-message "previous def" "g prev def" } */
+ #define g(x, y) ' x'   /* { dg-warning "redefined" "g redefined" } */
+--- a/src/gcc/testsuite/gcc.dg/dll-4.c
++++ b/src/gcc/testsuite/gcc.dg/dll-4.c
+@@ -11,5 +11,6 @@
+ int f () { return foo1 + foo2; }
+ 
+ /* FIXME: We should scan the output of nm for this case.  */
+-/* { dg-final { scan-assembler "(foo2:.*\.comm\[ \t_\]*foo1)" } } */
++/* { dg-final { scan-assembler "(foo2:)" } } */
++/* { dg-final { scan-assembler "(\.comm\[ \t_\]*foo1)" } } */
+ /* { dg-final { scan-assembler-not "(__imp_|_imp__)" } } */
+--- a/src/gcc/testsuite/gcc.dg/dll-6.c
++++ b/src/gcc/testsuite/gcc.dg/dll-6.c
+@@ -0,0 +1,52 @@
++/* { dg-do link } */
++/* { dg-require-dll "" } */
++/* { dg-additional-sources "dll-6a.c" } */
++/* { dg-options "-w -O2 -std=gnu89" } */
++
++/* Test that inline functions declared "dllexport" appear in object
++   files, even if they are not called.
++
++   This behavior is required by the ARM C++ ABI:
++
++     Exporting a function that can be inlined should force the
++     creation and export of an out-of-line copy of it.
++
++   and should presumably also apply.
++
++   Visual Studio 2005 also honors that rule.  */
++
++__declspec(dllexport) inline void i1() {}
++
++__declspec(dllexport) extern inline void e1() {}
++
++/* It is invalid to declare the function inline after its definition.  */
++#if 0
++__declspec(dllexport) void i2() {}
++inline void i2();
++
++__declspec(dllexport) extern void e2() {}
++inline void e2();
++#endif
++
++__declspec(dllexport) inline void i3() {}
++void i3();
++
++__declspec(dllexport) inline void e3() {}
++extern void e3();
++
++__declspec(dllexport) void i4();
++inline void i4() {};
++
++__declspec(dllexport) extern void e4();
++inline void e4() {};
++
++__declspec(dllexport) inline void i5();
++void i5() {};
++
++__declspec(dllexport) inline void e5();
++extern void e5() {};
++
++/* Make sure that just declaring the function -- without defining it
++   -- does not cause errors.  */
++__declspec(dllexport) inline void i6();
++__declspec(dllexport) extern inline void e6();
+--- a/src/gcc/testsuite/gcc.dg/dll-6a.c
++++ b/src/gcc/testsuite/gcc.dg/dll-6a.c
+@@ -0,0 +1,21 @@
++extern void i1();
++extern void i3();
++extern void i4();
++extern void i5();
++
++extern void e1();
++extern void e3();
++extern void e4();
++extern void e5();
++
++int main () {
++  i1();
++  i3();
++  i4();
++  i5();
++
++  e1();
++  e3();
++  e4();
++  e5();
++}
+--- a/src/gcc/testsuite/gcc.dg/dll-7.c
++++ b/src/gcc/testsuite/gcc.dg/dll-7.c
+@@ -0,0 +1,52 @@
++/* { dg-do link } */
++/* { dg-require-dll "" } */
++/* { dg-additional-sources "dll-7a.c" } */
++/* { dg-options "-w -O2 -std=gnu99" } */
++
++/* Test that inline functions declared "dllexport" appear in object
++   files, even if they are not called.
++
++   This behavior is required by the ARM C++ ABI:
++
++     Exporting a function that can be inlined should force the
++     creation and export of an out-of-line copy of it.
++
++   and should presumably also apply.
++
++   Visual Studio 2005 also honors that rule.  */
++
++__declspec(dllexport) inline void i1() {}
++
++__declspec(dllexport) extern inline void e1() {}
++
++/* It is invalid to declare the function inline after its definition.  */
++#if 0
++__declspec(dllexport) void i2() {}
++inline void i2();
++
++__declspec(dllexport) extern void e2() {}
++inline void e2();
++#endif
++
++__declspec(dllexport) inline void i3() {}
++void i3();
++
++__declspec(dllexport) inline void e3() {}
++extern void e3();
++
++__declspec(dllexport) void i4();
++inline void i4() {};
++
++__declspec(dllexport) extern void e4();
++inline void e4() {};
++
++__declspec(dllexport) inline void i5();
++void i5() {};
++
++__declspec(dllexport) inline void e5();
++extern void e5() {};
++
++/* Make sure that just declaring the function -- without defining it
++   -- does not cause errors.  */
++__declspec(dllexport) inline void i6();
++__declspec(dllexport) extern inline void e6();
+--- a/src/gcc/testsuite/gcc.dg/dll-7a.c
++++ b/src/gcc/testsuite/gcc.dg/dll-7a.c
+@@ -0,0 +1,21 @@
++extern void i1();
++extern void i3();
++extern void i4();
++extern void i5();
++
++extern void e1();
++extern void e3();
++extern void e4();
++extern void e5();
++
++int main () {
++  i1();
++  i3();
++  i4();
++  i5();
++
++  e1();
++  e3();
++  e4();
++  e5();
++}
+--- a/src/gcc/testsuite/gcc.dg/falign-labels-1.c
++++ b/src/gcc/testsuite/gcc.dg/falign-labels-1.c
+@@ -0,0 +1,39 @@
++/* { dg-do run } */
++/* { dg-options "-falign-labels=8" { target { ! { m68k*-*-* || fido*-*-* } } } } */
++
++/* On ARMv7-A CPUs, this test resulted in incorrect code generation.
++   The code generated for the switch statement expected the jump table
++   to immediately follow the jump instruction, but -falign-labels
++   caused the label preceding the table to be aligned.  */
++/* M68K and fido only support -falign-labels argument <= 2.  */
++
++volatile int x;
++
++int main(void)
++{
++  int y;
++
++  x = 0;
++
++  switch(x)
++    {
++    case 0:
++      y = 2 * x;
++      break;
++    case 1:
++      y = -3 * x;
++      break;
++    case 2:
++      y = x + 5;
++      break;
++    case 3:
++      y = x - 7;
++      break;
++    default:
++      break;
++    }
++
++  x = y;
++
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.dg/fltconst-1.c
++++ b/src/gcc/testsuite/gcc.dg/fltconst-1.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-std=gnu99" } */
++/* { dg-options "-std=gnu99 -fshow-column" } */
+ 
+ double a = 1.ld;	/* { dg-error "12:invalid suffix" } */
+ double b = 1.fd;	/* { dg-error "12:invalid suffix" } */
+--- a/src/gcc/testsuite/gcc.dg/long-long-shift-1.c
++++ b/src/gcc/testsuite/gcc.dg/long-long-shift-1.c
+@@ -0,0 +1,18 @@
++/* The initial >> 39 is hoisted out of the loop by the RTL loop passes.
++   When the 39 is propagated into the variable shift code, this results
++   in an immediate left shift by -7 (assuming no native 64-bit shift operator).
++   This will eventially be eliminated by DCE, but lasts long enough to
++   cause problems in the Thumb-2 shift-arith patterns.  */
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++long long
++test (long long pat, long long mask, int n)
++{
++  long long z = 0;
++  int i;
++
++  for (i = 39; i < 62; i++)
++    z += (pat >> i) + mask ^ mask;
++
++  return z;
++}
+--- a/src/gcc/testsuite/gcc.dg/m68k-fp-1.c
++++ b/src/gcc/testsuite/gcc.dg/m68k-fp-1.c
+@@ -0,0 +1,13 @@
++/* ColdFire has restricted addressing modes for float operands.  */
++/* { dg-do compile { target m68k-*-* } }  */
++/* { dg-options "-O0 -mcpu=547x -mhard-float" }  */
++
++double Foo (unsigned a)
++{
++  unsigned local_data[16384] __attribute__((unused));
++  double d;
++
++  d = a;
++
++  return d;
++}
+--- a/src/gcc/testsuite/gcc.dg/pch/counter-2.c
++++ b/src/gcc/testsuite/gcc.dg/pch/counter-2.c
+@@ -10,6 +10,7 @@
+ #include "counter-2.h" /* { dg-warning "not used because `__COUNTER__' is invalid" } */
+ /* { dg-error "counter-2.h: No such file or directory" "no such file" { target *-*-* } 10 } */
+ /* { dg-error "one or more PCH files were found, but they were invalid" "invalid files" { target *-*-* } 10 } */
++/* { dg-message "terminated" "" { target *-*-* } 0 } */
+ 
+ int main(void) 
+ {
+--- a/src/gcc/testsuite/gcc.dg/pch/valid-1.c
++++ b/src/gcc/testsuite/gcc.dg/pch/valid-1.c
+@@ -3,5 +3,6 @@
+ #include "valid-1.h"/* { dg-warning "created with -gnone, but used with -g" } */
+ /* { dg-error "No such file" "no such file" { target *-*-* } 3 } */
+ /* { dg-error "they were invalid" "invalid files" { target *-*-* } 3 } */
++/* { dg-message "terminated" "" { target *-*-* } 0 } */
+ 
+ int x;
+--- a/src/gcc/testsuite/gcc.dg/pch/valid-2.c
++++ b/src/gcc/testsuite/gcc.dg/pch/valid-2.c
+@@ -3,4 +3,5 @@
+ #include "valid-2.h" /* { dg-warning "settings for -fexceptions do not match" } */
+ /* { dg-error "No such file" "no such file" { target *-*-* } 3 } */
+ /* { dg-error "they were invalid" "invalid files" { target *-*-* } 3 } */
++/* { dg-message "terminated" "" { target *-*-* } 0 } */
+ int x;
+--- a/src/gcc/testsuite/gcc.dg/pch/warn-1.c
++++ b/src/gcc/testsuite/gcc.dg/pch/warn-1.c
+@@ -5,6 +5,7 @@
+ #include "warn-1.h"/* { dg-warning "not used because .DEFINED_VALUE. is defined" } */
+ /* { dg-error "No such file" "no such file" { target *-*-* } 5 } */
+ /* { dg-error "they were invalid" "invalid files" { target *-*-* } 5 } */
++/* { dg-message "terminated" "" { target *-*-* } 0 } */
+ 
+ 
+ int main(void) 
+--- a/src/gcc/testsuite/gcc.dg/pr34263.c
++++ b/src/gcc/testsuite/gcc.dg/pr34263.c
+@@ -1,5 +1,5 @@
+ /* { dg-do run } */
+-/* { dg-options "-O2 -fdump-tree-optimized" } */
++/* { dg-options "-O2 -fdump-tree-optimized -fno-unroll-loops" } */
+ /* Same test as 990128-1.c.  */
+ 
+ extern int printf (const char *,...);
+--- a/src/gcc/testsuite/gcc.dg/pragma-isr-trapa2.c
++++ b/src/gcc/testsuite/gcc.dg/pragma-isr-trapa2.c
+@@ -1,4 +1,6 @@
+ /* { dg-do compile { target { { sh-*-* sh4*-*-* } && nonpic } } } */
++/* { dg-skip-if "FPU Required" { "sh*-*-*" } { "-m*nofpu*" } { "" } } */
++/* { dg-skip-if "FPU Required" { "sh*-*-*" } { "-m4al*" } { "" } } */
+ /* { dg-options "-O -m4" } */
+ 
+ extern void foo ();
+--- a/src/gcc/testsuite/gcc.dg/profile-dir-1.c
++++ b/src/gcc/testsuite/gcc.dg/profile-dir-1.c
+@@ -1,5 +1,6 @@
+ /* { dg-do compile } */
+ /* { dg-options "-O -fprofile-generate=. -fdump-tree-tree_profile" } */
++/* { dg-require-host-local "" } */
+ /* { dg-final { scan-tree-dump " ./profile-dir-1.gcda" "tree_profile" } } */
+ 
+ int
+--- a/src/gcc/testsuite/gcc.dg/profile-dir-2.c
++++ b/src/gcc/testsuite/gcc.dg/profile-dir-2.c
+@@ -1,5 +1,6 @@
+ /* { dg-do compile } */
+ /* { dg-options "-O -fprofile-generate -fdump-tree-tree_profile" } */
++/* { dg-require-host-local "" } */
+ /* { dg-final { scan-tree-dump "/profile-dir-2.gcda" "tree_profile" } } */
+ 
+ int
+--- a/src/gcc/testsuite/gcc.dg/profile-dir-3.c
++++ b/src/gcc/testsuite/gcc.dg/profile-dir-3.c
+@@ -1,5 +1,6 @@
+ /* { dg-do compile } */
+ /* { dg-options "-O -fprofile-generate -fprofile-dir=. -fdump-tree-tree_profile" } */
++/* { dg-require-host-local "" } */
+ /* { dg-final { scan-tree-dump " ./profile-dir-3.gcda" "tree_profile" } } */
+ 
+ int
+--- a/src/gcc/testsuite/gcc.dg/promote-short-1.c
++++ b/src/gcc/testsuite/gcc.dg/promote-short-1.c
+@@ -0,0 +1,15 @@
++/* Verify that we promote a short loop index variable.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fpromote-loop-indices -fdump-tree-promoteshort" } */
++/* { dg-final { scan-tree-dump-times "Promoting 1 variables" 1 "promoteshort" } } */
++/* { dg-final { cleanup-tree-dump "promoteshort" } } */
++
++void
++test1 (short n, int *x)
++{
++  short i;
++
++  for (i = 0; i < n; i++)
++    x[i] = 0;
++}
+--- a/src/gcc/testsuite/gcc.dg/promote-short-10.c
++++ b/src/gcc/testsuite/gcc.dg/promote-short-10.c
+@@ -0,0 +1,20 @@
++/* Verify that we do not promote a short loop index variable when its
++   address is taken.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fpromote-loop-indices -fdump-tree-promoteshort" } */
++/* { dg-final { scan-tree-dump-times "Found 0 candidates" 1 "promoteshort" } } */
++/* { dg-final { cleanup-tree-dump "promoteshort" } } */
++
++extern void outside (short *);
++
++void
++test1 (int n, int *x)
++{
++  short i;
++
++  for (i = 0; i < n; i++)
++    {
++      outside (&i);
++    }
++}
+--- a/src/gcc/testsuite/gcc.dg/promote-short-11.c
++++ b/src/gcc/testsuite/gcc.dg/promote-short-11.c
+@@ -0,0 +1,24 @@
++/* We used to ICE due to badness while rebuilding phi nodes.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fpromote-loop-indices -fdump-tree-promoteshort" } */
++/* { dg-final { scan-tree-dump-times "Inserting downcast" 1 "promoteshort" } } */
++/* { dg-final { cleanup-tree-dump "promoteshort" } } */
++
++int bar (void);
++
++unsigned char
++foo (int a)
++{
++  unsigned char i, ret = 0;
++
++  for (i = 0; i < 8; i++)
++      if (bar() && bar())
++        {
++          if (a)
++            ret = i;
++        }
++
++  return ret;
++}
++
+--- a/src/gcc/testsuite/gcc.dg/promote-short-12.c
++++ b/src/gcc/testsuite/gcc.dg/promote-short-12.c
+@@ -0,0 +1,27 @@
++/* We used to miss getting both assignments to ret correct.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fpromote-loop-indices -fdump-tree-promoteshort" } */
++/* { dg-final { scan-tree-dump-times "Inserting downcast" 2 "promoteshort" } } */
++/* { dg-final { cleanup-tree-dump "promoteshort" } } */
++
++int bar (void);
++
++unsigned char
++foo (int a)
++{
++  unsigned char i, j, ret = 0;
++
++  for (i = 0; i < 8; i++)
++    for (j = 0; j < 8; j++)
++      if (bar() && bar())
++        {
++          if (a)
++            ret = i;
++          else
++            ret = j;
++        }
++
++  return ret;
++}
++
+--- a/src/gcc/testsuite/gcc.dg/promote-short-2.c
++++ b/src/gcc/testsuite/gcc.dg/promote-short-2.c
+@@ -0,0 +1,16 @@
++/* Verify that we do not promote a short loop index variable when it is
++   being stored to memory.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fpromote-loop-indices -fdump-tree-promoteshort" } */
++/* { dg-final { scan-tree-dump-times "Promoting 0 variables" 1 "promoteshort" } } */
++/* { dg-final { cleanup-tree-dump "promoteshort" } } */
++
++void
++test1 (short n, short *x)
++{
++  short i;
++
++  for (i = 0; i < n; i++)
++    x[i] = i;
++}
+--- a/src/gcc/testsuite/gcc.dg/promote-short-3.c
++++ b/src/gcc/testsuite/gcc.dg/promote-short-3.c
+@@ -0,0 +1,18 @@
++/* Verify that we do not promote a short loop index variable when it is
++   being passed as a function parameter.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fpromote-loop-indices -fdump-tree-promoteshort" } */
++/* { dg-final { scan-tree-dump-times "Promoting 0 variables" 1 "promoteshort" { xfail m68k*-*-* fido*-*-* i?86-*-* x86_64-*-* mips*-*-* sh*-*-* } } } */
++/* { dg-final { cleanup-tree-dump "promoteshort" } } */
++
++extern void outside (short);
++
++void
++test1 (short n)
++{
++  short i;
++
++  for (i = 0; i < n; i++)
++    outside (i);
++}
+--- a/src/gcc/testsuite/gcc.dg/promote-short-4.c
++++ b/src/gcc/testsuite/gcc.dg/promote-short-4.c
+@@ -0,0 +1,19 @@
++/* Verify that we do not promote a short loop index variable when it is
++   modified within the loop.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fpromote-loop-indices -fdump-tree-promoteshort" } */
++/* { dg-final { scan-tree-dump-times "Promoting 0 variables" 1 "promoteshort" } } */
++/* { dg-final { cleanup-tree-dump "promoteshort" } } */
++
++void
++test1 (short n, int *x)
++{
++  short i;
++
++  for (i = 0; i < n; i++)
++    {
++      i++;
++      x[i] = 0;
++    }
++}
+--- a/src/gcc/testsuite/gcc.dg/promote-short-5.c
++++ b/src/gcc/testsuite/gcc.dg/promote-short-5.c
+@@ -0,0 +1,18 @@
++/* Verify that we do not promote a short loop index variable when it has
++   a non-unit-increment.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fpromote-loop-indices -fdump-tree-promoteshort" } */
++/* { dg-final { scan-tree-dump-times "Promoting 0 variables" 1 "promoteshort" } } */
++/* { dg-final { cleanup-tree-dump "promoteshort" } } */
++
++void
++test1 (short n, int *x)
++{
++  short i;
++
++  for (i = 0; i < n; i+=2)
++    {
++      x[i] = 0;
++    }
++}
+--- a/src/gcc/testsuite/gcc.dg/promote-short-6.c
++++ b/src/gcc/testsuite/gcc.dg/promote-short-6.c
+@@ -0,0 +1,18 @@
++/* Verify that we do promote a short loop index variable when it has
++   a non-unit-increment and -funsafe-loop-optimizations is in effect.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fpromote-loop-indices -funsafe-loop-optimizations -fdump-tree-promoteshort" } */
++/* { dg-final { scan-tree-dump-times "Promoting 1 variables" 1 "promoteshort" } } */
++/* { dg-final { cleanup-tree-dump "promoteshort" } } */
++
++void
++test1 (short n, int *x)
++{
++  short i;
++
++  for (i = 0; i < n; i+=2)
++    {
++      x[i] = 0;
++    }
++}
+--- a/src/gcc/testsuite/gcc.dg/promote-short-7.c
++++ b/src/gcc/testsuite/gcc.dg/promote-short-7.c
+@@ -0,0 +1,18 @@
++/* Verify that we do not promote a short loop index variable when the
++   loop in which it is used has a bound of wider type.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fpromote-loop-indices -fdump-tree-promoteshort" } */
++/* { dg-final { scan-tree-dump-times "Promoting 0 variables" 1 "promoteshort" } } */
++/* { dg-final { cleanup-tree-dump "promoteshort" } } */
++
++void
++test1 (int n, int *x)
++{
++  short i;
++
++  for (i = 0; i < n; i++)
++    {
++      x[i] = 0;
++    }
++}
+--- a/src/gcc/testsuite/gcc.dg/promote-short-8.c
++++ b/src/gcc/testsuite/gcc.dg/promote-short-8.c
+@@ -0,0 +1,19 @@
++/* Verify that we do promote a short loop index variable when the loop
++   in which it is used has a bound of wider type and
++   -funsafe-loop-optimizations is in effect.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fpromote-loop-indices -funsafe-loop-optimizations -fdump-tree-promoteshort" } */
++/* { dg-final { scan-tree-dump-times "Promoting 1 variables" 1 "promoteshort" } } */
++/* { dg-final { cleanup-tree-dump "promoteshort" } } */
++
++void
++test1 (int n, int *x)
++{
++  short i;
++
++  for (i = 0; i < n; i++)
++    {
++      x[i] = 0;
++    }
++}
+--- a/src/gcc/testsuite/gcc.dg/promote-short-9.c
++++ b/src/gcc/testsuite/gcc.dg/promote-short-9.c
+@@ -0,0 +1,15 @@
++/* -fpromote-loop-indices used to ICE on this.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fpromote-loop-indices" } */
++
++char
++lookup (char *haystack, char *needle)
++{
++  char x;
++
++  for (x = haystack[-2]; x < *needle; x++)
++    haystack[x] = needle[x];
++
++  return 1;
++}
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-1.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-1.c
+@@ -0,0 +1,16 @@
++/* Verify that we eliminate a static local variable where its uses
++   are dominated by a def.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler-not "thestatic" } } */
++
++int
++test1 (int x)
++{
++  static int thestatic;
++
++  thestatic = x;
++
++  return thestatic + x;
++}
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-10.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-10.c
+@@ -0,0 +1,32 @@
++/* Verify that we do not eliminate a static local variable when it is
++   live on return from a function call that recursively calls the
++   function in which the variable is defined.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler "thestatic" } } */
++
++int
++test2 (int x)
++{
++  if (x < 0)
++    return 0;
++  else
++    return test1 (x - 1);
++}
++
++int
++test1 (int x)
++{
++  static int thestatic;
++  int y;
++
++  thestatic = x;
++
++  y = test2 (x - 1);
++
++  y += thestatic;
++
++  return y + x;
++}
++  
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-11.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-11.c
+@@ -0,0 +1,16 @@
++/* Verify that we do not eliminate a static local variable when its
++   address is taken.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler "thestatic" } } */
++
++int *
++test1 (int x)
++{
++  static int thestatic;
++
++  thestatic = x;
++
++  return &thestatic + x;
++}
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-12.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-12.c
+@@ -0,0 +1,20 @@
++/* Verify that we do not eliminate a static variable when it is declared
++   in a function that has nested functions.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler "thestatic" } } */
++
++int test1 (int x)
++{
++  static int thestatic;
++
++  int nested_test1 (int x)
++  {
++    return x + thestatic;
++  }
++
++  thestatic = x;
++
++  return thestatic + x + nested_test1 (x);
++}
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-13.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-13.c
+@@ -0,0 +1,24 @@
++/* We used to ICE on this test, because the call to BAR appeared to
++   define both static variables in FOO.  Verify that we no longer do
++   this.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler "static1" } } */
++/* { dg-final { scan-assembler-not "static2" } } */
++
++int foo(int i) {
++  static int static1 = 0;
++  static int static2;
++
++  if (static2 = bar(i))
++    static1 = 1;
++  static2 = static1 + 30;
++
++  return static1 + static2;
++}
++
++int bar(int i) {
++  if (i) { foo(i-1); return 0; }
++  return 1;
++}
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-14.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-14.c
+@@ -0,0 +1,29 @@
++/* Verify that we do eliminate a static local variable whose last use is
++   in a statement containing a call expression.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler-not "thestatic" } } */
++
++int
++test2 (int x)
++{
++  if (x < 0)
++    return 0;
++  else
++    return test1 (x - 1);
++}
++
++int
++test1 (int x)
++{
++  static int thestatic;
++  int y;
++
++  thestatic = x;
++
++  y = test2 (thestatic - 1);
++
++  return y + x;
++}
++  
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-15.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-15.c
+@@ -0,0 +1,17 @@
++/* Verify that we do not consider an array variable for local static
++   elimination.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics -fdump-tree-remlocstatic-details" } */
++
++int foo (void)
++{
++  static int a[1];
++
++  a[0] = 0;
++
++  return a[0];
++}
++
++/* { dg-final { scan-tree-dump-times "static variables to consider" 0 "remlocstatic" } } */
++/* { dg-final { cleanup-tree-dump "remlocstatic" } } */
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-16.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-16.c
+@@ -0,0 +1,20 @@
++/* Verify that we do not consider an structure variable for local static
++   elimination.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics -fdump-tree-remlocstatic-details" } */
++
++int foo (void)
++{
++  static struct {
++    int x;
++    int y;
++  } a;
++
++  a.x = 0;
++
++  return a.y;
++}
++
++/* { dg-final { scan-tree-dump-times "static variables to consider" 0 "remlocstatic" } } */
++/* { dg-final { cleanup-tree-dump "remlocstatic" } } */
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-17.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-17.c
+@@ -0,0 +1,19 @@
++/* Verify that we do not eliminate a static variable that is "defined"
++   by an asm that clobbers memory.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics -fdump-tree-remlocstatic-details" } */
++
++int foo (void)
++{
++  static int foo = 0;
++
++  __asm__ __volatile__ ("" : : : "memory");
++
++  foo++;
++
++  return foo;
++}
++
++/* { dg-final { scan-tree-dump-times "removed 0 static variables" 1 "remlocstatic" } } */
++/* { dg-final { cleanup-tree-dump "remlocstatic" } } */
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-2.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-2.c
+@@ -0,0 +1,19 @@
++/* Verify that we do not eliminate a static local variable when its uses
++   are not dominated by a def.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler "first_time" } } */
++
++int
++test1 (int x)
++{
++  static int first_time;
++
++  if (x == 1)
++    first_time = 1;
++  else if (x > 0)
++    first_time = 2;
++
++  return first_time + x;
++}
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-3.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-3.c
+@@ -0,0 +1,16 @@
++/* Verify that we do not eliminate a static local variable whose uses
++   are dominated by a def when the variable is volatile.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler "thestatic" } } */
++
++int
++test1 (int x)
++{
++  static volatile int thestatic;
++
++  thestatic = x;
++
++  return thestatic + x;
++}
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-4.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-4.c
+@@ -0,0 +1,15 @@
++/* Verify that we don't eliminate a global static variable.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler "global_static" } } */
++
++static int global_static;
++
++int
++test1 (int x)
++{
++  global_static = x;
++
++  return global_static + x;
++}
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-5.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-5.c
+@@ -0,0 +1,24 @@
++/* Verify that we do not eliminate a static local variable whose uses
++   are dominated by a def when the function calls setjmp.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler "thestatic" } } */
++
++#include <setjmp.h>
++
++int
++foo (int x)
++{
++  static int thestatic;
++  int retval;
++  jmp_buf env;
++
++  thestatic = x;
++
++  retval = thestatic + x;
++
++  setjmp (env);
++
++  return retval;
++}
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-6.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-6.c
+@@ -0,0 +1,16 @@
++/* Verify that we do not eliminate a static local variable whose uses
++   are dominated by a def when the variable is addressed.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler "thestatic" } } */
++
++int *
++test1 (int x)
++{
++  static int thestatic;
++
++  thestatic = x;
++
++  return &thestatic + x;
++}
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-7.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-7.c
+@@ -0,0 +1,21 @@
++/* Verify that we eliminate a static local variable where it is defined
++   along all paths leading to a use.
++
++   XFAIL'd because our analysis is currently too weak.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler-not "thestatic" } } */
++
++int
++test1 (int x)
++{
++  static int thestatic;
++
++  if (x < 0)
++    thestatic = x;
++  else
++    thestatic = -x;
++
++  return thestatic + x;
++}
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-8.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-8.c
+@@ -0,0 +1,33 @@
++/* Verify that we eliminate a static local variable when it is dead on
++   return from a function call that recursively calls the function in
++   which the variable is defined.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler-not "thestatic" } } */
++
++int test1 (int);
++int test2 (int);
++
++int
++test2 (int x)
++{
++  if (x < 0)
++    return 0;
++  else
++    return test1 (x - 1);
++}
++
++int
++test1 (int x)
++{
++  static int thestatic;
++  int y;
++
++  thestatic = x;
++
++  y = thestatic;
++
++  return y + x + test1 (x - 1) + test2 (x - 1);
++}
++  
+--- a/src/gcc/testsuite/gcc.dg/remove-local-statics-9.c
++++ b/src/gcc/testsuite/gcc.dg/remove-local-statics-9.c
+@@ -0,0 +1,34 @@
++/* Verify that we eliminate a static local variable when it is live
++   on return from a function call that does not recursively call the
++   function in which the variable is defined.  */
++
++/* XFAIL'd because we don't utilize the callgraph properly.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fremove-local-statics" } */
++/* { dg-final { scan-assembler-not "thestatic" { xfail *-*-* } } } */
++
++static int
++test2 (int x)
++{
++  if (x < 0)
++    return 0;
++  else
++    return x + test2 (x - 1);
++}
++
++int
++test1 (int x)
++{
++  static int thestatic;
++  int y;
++
++  thestatic = x;
++
++  y = test2 (x - 1);
++
++  y += thestatic;
++
++  return y + x;
++}
++  
+--- a/src/gcc/testsuite/gcc.dg/strncpy-fix-1.c
++++ b/src/gcc/testsuite/gcc.dg/strncpy-fix-1.c
+@@ -0,0 +1,11 @@
++/* Test that use of strncpy does not result in a "value computed is
++   not used" warning.  */
++/* { dg-do compile } */
++/* { dg-options "-O2 -Wall" } */
++
++#include <string.h>
++void
++f (char *s)
++{
++  strncpy (s, "::", 2);
++}
+--- a/src/gcc/testsuite/gcc.dg/tls/pie-1.c
++++ b/src/gcc/testsuite/gcc.dg/tls/pie-1.c
+@@ -0,0 +1,6 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target fpic } */
++/* { dg-options "-fpie" } */
++/* { dg-require-effective-target tls } */
++
++__thread int a; int b; int main() { return a = b; }
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-compile-assign.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-compile-assign.c
+@@ -0,0 +1,29 @@
++/* { dg-do compile { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* Test basic assignments and conversions for __fp16.  */
++
++__fp16 h0 = -1.0;
++__fp16 h1 = 0.0;
++__fp16 h2 = 1234.0;
++__fp16 h3 = 42.0;
++float f1 = 2.0;
++float f2 = -999.9;
++
++void f (__fp16 *p)
++{
++  __fp16 t;
++
++  h0 = 1.0;
++  h1 = h2;
++  h2 = f1;
++  f2 = h2;
++
++  t = *p;
++  *p = h3;
++  h3 = t;
++}
++
++/* Make sure we are not falling through to undefined libcalls.  */
++/* { dg-final { scan-assembler-not "__truncsfhf" } } */
++/* { dg-final { scan-assembler-not "__extendhfsf" } } */
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-compile-convert.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-compile-convert.c
+@@ -0,0 +1,41 @@
++/* { dg-do compile { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* Test basic assignments and conversions for __fp16.  */
++
++__fp16 h1 = 0.0;
++__fp16 h2 = 1234.0;
++char c1 = 1;
++char c2 = 2;
++short s1 = 10;
++short s2 = 20;
++int i1 = -100;
++int i2 = -200;
++long long l1 = 1000.0;
++long long l2 = 2000.0;
++double d1 = -10000.0;
++double d2 = -20000.0;
++
++void f (void)
++{
++  c1 = h1;
++  h2 = c2;
++
++  h1 = s1;
++  s2 = h2;
++
++  i1 = h1;
++  h2 = i2;
++
++  h1 = l1;
++  l2 = h2;
++  
++  d1 = h1;
++  h2 = d2;
++}
++
++/* Make sure we are not falling through to undefined libcalls.  */
++/* { dg-final { scan-assembler-not "__float.ihf" } } */
++/* { dg-final { scan-assembler-not "__fixhf.i" } } */
++/* { dg-final { scan-assembler-not "__trunc.fhf" } } */
++/* { dg-final { scan-assembler-not "__extendhf.f" } } */
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-int-convert-alt.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-int-convert-alt.c
+@@ -0,0 +1,17 @@
++/* Test floating-point conversions.  Standard types and __fp16.  */
++/* { dg-do run { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=alternative" } */
++
++#include "fp-int-convert.h"
++#define FP16_MANT_DIG 11
++
++int
++main (void)
++{
++  TEST_I_F(signed char, unsigned char, float, FP16_MANT_DIG);
++  TEST_I_F(signed short, unsigned short, float, FP16_MANT_DIG);
++  TEST_I_F(signed int, unsigned int, float, FP16_MANT_DIG);
++  TEST_I_F(signed long, unsigned long, float, FP16_MANT_DIG);
++  TEST_I_F(signed long long, unsigned long long, float, FP16_MANT_DIG);
++  exit (0);
++}
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-int-convert-ieee.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-int-convert-ieee.c
+@@ -0,0 +1,17 @@
++/* Test floating-point conversions.  Standard types and __fp16.  */
++/* { dg-do run { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++#include "fp-int-convert.h"
++#define FP16_MANT_DIG 11
++
++int
++main (void)
++{
++  TEST_I_F(signed char, unsigned char, float, FP16_MANT_DIG);
++  TEST_I_F(signed short, unsigned short, float, FP16_MANT_DIG);
++  TEST_I_F(signed int, unsigned int, float, FP16_MANT_DIG);
++  TEST_I_F(signed long, unsigned long, float, FP16_MANT_DIG);
++  TEST_I_F(signed long long, unsigned long long, float, FP16_MANT_DIG);
++  exit (0);
++}
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-1.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-1.c
+@@ -0,0 +1,5 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do run { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++#include "arm-fp16-ops.h"
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-2.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-2.c
+@@ -0,0 +1,5 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do run { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=ieee -ffast-math" } */
++
++#include "arm-fp16-ops.h"
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-3.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-3.c
+@@ -0,0 +1,5 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do run { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=alternative" } */
++
++#include "arm-fp16-ops.h"
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-4.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-4.c
+@@ -0,0 +1,5 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do run { target arm*-*-* } } */
++/* { dg-options "-mfp16-format=alternative -ffast-math" } */
++
++#include "arm-fp16-ops.h"
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-5.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-5.c
+@@ -0,0 +1,17 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do compile { target arm*-*-* } } */
++/* { dg-require-effective-target arm_neon_fp16_ok } */
++/* { dg-options "-mfp16-format=ieee" } */
++/* { dg-add-options arm_neon_fp16 } */
++
++#include "arm-fp16-ops.h"
++
++/* We've specified options for hardware float, including fp16 support, so
++   we should not see any calls to libfuncs here.  */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf2" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf3" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_h\[a-z\]*_ieee" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_h2f_ieee" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_f2h_ieee" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__aeabi_h2f" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__aeabi_f2h" } } */
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-6.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-6.c
+@@ -0,0 +1,17 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do compile { target arm*-*-* } } */
++/* { dg-require-effective-target arm_neon_fp16_ok } */
++/* { dg-options "-mfp16-format=ieee -ffast-math" } */
++/* { dg-add-options arm_neon_fp16 } */
++
++#include "arm-fp16-ops.h"
++
++/* We've specified options for hardware float, including fp16 support, so
++   we should not see any calls to libfuncs here.  */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf2" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf3" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_h\[a-z\]*_ieee" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_h2f_ieee" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_f2h_ieee" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__aeabi_h2f" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__aeabi_f2h" } } */
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-7.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-7.c
+@@ -0,0 +1,13 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do compile { target arm*-*-* } } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-mfp16-format=ieee" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm-fp16-ops.h"
++
++/* We've specified options for hardware float, so we should not see any 
++   calls to libfuncs here except for those to the conversion functions.  */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf2" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf3" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_h\[a-z\]*_ieee" } } */
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-8.c
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops-8.c
+@@ -0,0 +1,13 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++/* { dg-do compile { target arm*-*-* } } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-mfp16-format=ieee -ffast-math" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm-fp16-ops.h"
++
++/* We've specified options for hardware float, so we should not see any 
++   calls to libfuncs here except for those to the conversion functions.  */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf2" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__.*hf3" } } */
++/* { dg-final { scan-assembler-not "\tbl\t__gnu_h\[a-z\]*_ieee" } } */
+--- a/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops.h
++++ b/src/gcc/testsuite/gcc.dg/torture/arm-fp16-ops.h
+@@ -0,0 +1,135 @@
++/* Test various operators on __fp16 and mixed __fp16/float operands.  */
++
++#include <assert.h>
++
++#define CHECK(e,r) assert ((e) == r)
++#define CHECK2(e,r) (assert ((e) == r), temp = (e), assert (temp == r))
++#define TEST(e) assert (e)
++#define TESTNOT(e) assert (!(e))
++
++volatile __fp16 h0 = 0.0;
++volatile __fp16 h1 = 1.0;
++volatile __fp16 h42 = 42.0;
++volatile __fp16 hm2 = -2.0;
++volatile __fp16 temp;
++
++volatile float f0 = 0.0;
++volatile float f1 = 1.0;
++volatile float f42 = 42.0;
++volatile float fm2 = -2.0;
++
++int main (void)
++{
++  TEST (h1);
++  TESTNOT (h0);
++  TEST (!h0);
++  TESTNOT (!h1);
++
++  CHECK2 (-h1, -1.0);
++  CHECK2 (+h1, 1.0);
++
++  CHECK (h1++, 1.0);
++  CHECK (h1, 2.0);
++  CHECK (++h1, 3.0);
++  CHECK (h1, 3.0);
++
++  CHECK (--h1, 2.0);
++  CHECK (h1, 2.0);
++  CHECK (h1--, 2.0);
++  CHECK (h1, 1.0);
++
++  CHECK2 (h42 * hm2, -84.0);
++  CHECK2 (h42 * (__fp16) -2.0, -84.0);
++  CHECK2 (h42 * fm2, -84.0);
++  CHECK2 (f42 * hm2, -84.0);
++
++  CHECK2 (h42 / hm2, -21.0);
++  CHECK2 (h42 / (__fp16) -2.0, -21.0);
++  CHECK2 (h42 / fm2, -21.0);
++  CHECK2 (f42 / hm2, -21.0);
++
++  CHECK2 (hm2 + h42, 40.0);
++  CHECK2 ((__fp16)-2.0 + h42, 40.0);
++  CHECK2 (hm2 + f42, 40.0);
++  CHECK2 (fm2 + h42, 40.0);
++
++  CHECK2 (hm2 - h42, -44.0);
++  CHECK2 ((__fp16)-2.0 - h42, -44.0);
++  CHECK2 (hm2 - f42, -44.0);
++  CHECK2 (fm2 - h42, -44.0);
++
++  TEST (hm2 < h42);
++  TEST (hm2 < (__fp16)42.0);
++  TEST (hm2 < f42);
++  TEST (fm2 < h42);
++
++  TEST (h42 > hm2);
++  TEST ((__fp16)42.0 > hm2);
++  TEST (h42 > fm2);
++  TEST (f42 > hm2);
++
++  TEST (hm2 <= h42);
++  TEST (hm2 <= (__fp16)42.0);
++  TEST (hm2 <= f42);
++  TEST (fm2 <= h42);
++
++  TEST (h42 >= hm2);
++  TEST (h42 >= (__fp16)-2.0);
++  TEST (h42 >= fm2);
++  TEST (f42 >= hm2);
++
++  TESTNOT (h1 == hm2);
++  TEST (h1 == h1);
++  TEST (h1 == (__fp16)1.0);
++  TEST (h1 == f1);
++  TEST (f1 == h1);
++
++  TEST (h1 != hm2);
++  TESTNOT (h1 != h1);
++  TESTNOT (h1 != (__fp16)1.0);
++  TESTNOT (h1 != f1);
++  TESTNOT (f1 != h1);
++
++  CHECK2 ((h1 ? hm2 : h42), -2.0);
++  CHECK2 ((h0 ? hm2 : h42), 42.0);
++
++  CHECK (h0 = h42, 42.0);
++  CHECK (h0, 42.0);
++  CHECK (h0 = (__fp16)-2.0, -2.0);
++  CHECK (h0, -2.0);
++  CHECK (h0 = f0, 0.0);
++  CHECK (h0, 0.0);
++
++  CHECK (h0 += h1, 1.0);
++  CHECK (h0, 1.0);
++  CHECK (h0 += (__fp16)1.0, 2.0);
++  CHECK (h0, 2.0);
++  CHECK (h0 += fm2, 0.0);
++  CHECK (h0, 0.0);
++
++  CHECK (h0 -= h1, -1.0);
++  CHECK (h0, -1.0);
++  CHECK (h0 -= (__fp16)1.0, -2.0);
++  CHECK (h0, -2.0);
++  CHECK (h0 -= fm2, 0.0);
++  CHECK (h0, 0.0);
++
++  h0 = hm2;
++  CHECK (h0 *= hm2, 4.0);
++  CHECK (h0, 4.0);
++  CHECK (h0 *= (__fp16)-2.0, -8.0);
++  CHECK (h0, -8.0);
++  CHECK (h0 *= fm2, 16.0);
++  CHECK (h0, 16.0);
++
++  CHECK (h0 /= hm2, -8.0);
++  CHECK (h0, -8.0);
++  CHECK (h0 /= (__fp16)-2.0, 4.0);
++  CHECK (h0, 4.0);
++  CHECK (h0 /= fm2, -2.0);
++  CHECK (h0, -2.0);
++
++  CHECK ((h0, h1), 1.0);
++
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.dg/torture/type-generic-1.c
++++ b/src/gcc/testsuite/gcc.dg/torture/type-generic-1.c
+@@ -3,6 +3,7 @@
+ 
+ /* { dg-do run } */
+ /* { dg-options "-mieee" { target alpha*-*-* sh*-*-* } } */
++/* { dg-options "-Wl,--defsym=__cs3_mips_float_type=2 -lcs3-mips-cp1 -lcs3-mips-fpemu" { target mips*-*sde*-* } } */
+ /* { dg-skip-if "No Inf/NaN support" { spu-*-* } } */
+ 
+ #include "../tg-tests.h"
+--- a/src/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-25.c
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-25.c
+@@ -47,9 +47,11 @@
+   return 0;
+ }
+ 
+-int main (int n)
++static volatile int n = 1;
++
++int main (void)
+ {
+-  return main_1 (n + 2, &n);
++  return main_1 (n + 2, (int *) &n);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c
+@@ -9,7 +9,7 @@
+ 
+ /* unaligned store.  */
+ 
+-int main (int off)
++int main_1 (int off)
+ {
+   int i;
+   char ia[N+OFF];
+@@ -29,6 +29,13 @@
+   return 0;
+ }
+ 
++static volatile int off = 1;
++
++int main (void)
++{
++  return main_1 (off);
++}
++
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/tree-ssa/loop-31.c
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/loop-31.c
+@@ -15,5 +15,5 @@
+ 
+ /* When we do not have addressing mode including multiplication,
+    the memory access should be strength-reduced.  */
+-/* { dg-final { scan-tree-dump-times " \\+ 2" 1 "optimized" { target arm-*-* ia64-*-* } } } */
++/* { dg-final { scan-tree-dump-times " \\+ 2" 1 "optimized" { target arm*-*-* ia64-*-* } } } */
+ /* { dg-final { cleanup-tree-dump "optimized" } } */
+--- a/src/gcc/testsuite/gcc.dg/tree-ssa/pr21559.c
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/pr21559.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fdump-tree-vrp1-details" } */
++/* { dg-options "-O2 -fdump-tree-vrp1-details -fno-remove-local-statics" } */
+ 
+ static int blocksize = 4096;
+ 
+--- a/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-3.c
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-3.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fpredictive-commoning -fdump-tree-pcom-details" } */
++/* { dg-options "-O2 -fpredictive-commoning -fdump-tree-pcom-details --param max-unroll-times=3" } */
+ 
+ int a[1000], b[1000];
+ 
+--- a/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-4.c
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-4.c
+@@ -1,6 +1,6 @@
+ /* { dg-do compile } */
+ /* { dg-do run } */
+-/* { dg-options "-O2 -fpredictive-commoning -fdump-tree-pcom-details" } */
++/* { dg-options "-O2 -fpredictive-commoning -fdump-tree-pcom-details --param max-unroll-times=3" } */
+ 
+ /* Test for predictive commoning of expressions, without reassociation.  */
+ 
+--- a/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-5.c
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-5.c
+@@ -1,6 +1,6 @@
+ /* { dg-do compile } */
+ /* { dg-do run } */
+-/* { dg-options "-O2 -fpredictive-commoning -fdump-tree-pcom-details" } */
++/* { dg-options "-O2 -fpredictive-commoning -fdump-tree-pcom-details --param max-unroll-times=3" } */
+ 
+ /* Test for predictive commoning of expressions, with reassociation.  */
+ 
+--- a/src/gcc/testsuite/gcc.dg/tree-ssa/prefetch-7.c
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/prefetch-7.c
+@@ -1,6 +1,7 @@
+ /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+ /* { dg-require-effective-target ilp32 } */
+ /* { dg-require-effective-target sse2 } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=athlon" } } */
+ /* { dg-options "-O2 -fprefetch-loop-arrays -march=athlon -msse2 -mfpmath=sse --param simultaneous-prefetches=100 --param max-unrolled-insns=1 -fdump-tree-aprefetch-details -fdump-tree-final_cleanup" } */
+ 
+ #define K 1000000
+--- a/src/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-6.c
++++ b/src/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-6.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -fdump-tree-dse1" } */
++/* { dg-options "-O2 -fdump-tree-dse1 -fno-remove-local-statics" } */
+ 
+ int foo11 (int c)
+ {
+--- a/src/gcc/testsuite/gcc.dg/utf-array-short-wchar.c
++++ b/src/gcc/testsuite/gcc.dg/utf-array-short-wchar.c
+@@ -1,6 +1,7 @@
+ /* Contributed by Kris Van Hees <kris.van.hees@oracle.com> */
+ /* Expected errors for char16_t/char32_t string literals. */
+ /* { dg-do compile } */
++/* { dg-require-effective-target wchar } */
+ /* { dg-options "-std=gnu99 -fshort-wchar" } */
+ 
+ #include <wchar.h>
+--- a/src/gcc/testsuite/gcc.dg/utf-array.c
++++ b/src/gcc/testsuite/gcc.dg/utf-array.c
+@@ -1,6 +1,7 @@
+ /* Contributed by Kris Van Hees <kris.van.hees@oracle.com> */
+ /* Expected errors for char16_t/char32_t string literals. */
+ /* { dg-do compile } */
++/* { dg-require-effective-target wchar } */
+ /* { dg-options "-std=gnu99" } */
+ 
+ #include <wchar.h>
+--- a/src/gcc/testsuite/gcc.dg/vect/aligned-section-anchors-nest-1.c
++++ b/src/gcc/testsuite/gcc.dg/vect/aligned-section-anchors-nest-1.c
+@@ -0,0 +1,34 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target section_anchors } */
++/* { dg-require-effective-target vect_int } */
++
++#include <stdarg.h>
++#include "tree-vect.h"
++
++#define N 32
++
++static int a[N][N];
++static int b[N][N];
++static int c[N][N];
++
++void clobber(int *);
++
++int *foo(void)
++{
++  int i;
++  int j;
++
++  clobber (&a[0][0]);
++  clobber (&b[0][0]);
++  clobber (&c[0][0]);
++
++  for (i = 0; i < N; i++) {
++      for (j = 0; j < N; j++) {
++	  c[j][i] += a[j][i] + c[j][i];
++      }
++  }
++  return &c[0][0];
++}
++
++/* { dg-final { scan-ipa-dump-times "Increasing alignment of decl" 3 "increase_alignment" } } */
++/* { dg-final { cleanup-ipa-dump "increase_alignment" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-31.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-31.c
+@@ -88,5 +88,5 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-64.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-64.c
+@@ -84,5 +84,5 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-66.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-66.c
+@@ -79,5 +79,5 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-68.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-68.c
+@@ -88,5 +88,5 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c
++++ b/src/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c
+@@ -114,7 +114,7 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail {! vector_alignment_reachable} } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail { vect_element_align || {! vector_alignment_reachable} } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target {! vector_alignment_reachable} } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target {! vector_alignment_reachable} } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { { ! vector_alignment_reachable } && { ! vect_element_align } } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c
++++ b/src/gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c
+@@ -115,6 +115,6 @@
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+ /* Alignment forced using versioning until the pass that increases alignment
+   is extended to handle structs.  */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 4 "vect" { target {vect_int && vector_alignment_reachable } } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 4 "vect" { target { {vect_int && vector_alignment_reachable } && { ! vect_element_align } } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 4 "vect" { target {vect_int && {! vector_alignment_reachable} } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/slp-25.c
++++ b/src/gcc/testsuite/gcc.dg/vect/slp-25.c
+@@ -56,5 +56,5 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect"  } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail vect_no_align } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-109.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-109.c
+@@ -73,6 +73,6 @@
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 0 loops" 2 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "not vectorized: unsupported unaligned store" 2 "vect" } } */
++/* { dg-final { scan-tree-dump-times "not vectorized: unsupported unaligned store" 2 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+ 
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-26.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-26.c
+@@ -37,5 +37,5 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-27.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-27.c
+@@ -45,6 +45,6 @@
+ /* The initialization induction loop (with aligned access) is also vectorized.  */
+ /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { xfail vect_no_align } } } */
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align || vect_element_align } } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-28.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-28.c
+@@ -40,6 +40,6 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target vector_alignment_reachable } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { vector_alignment_reachable && { ! vect_element_align } } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { ! vector_alignment_reachable } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-29.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-29.c
+@@ -50,7 +50,7 @@
+ 
+ /* The initialization induction loop (with aligned access) is also vectorized.  */
+ /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align || vect_element_align } } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" {target vect_no_align } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-33.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-33.c
+@@ -39,6 +39,6 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target vector_alignment_reachable } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { vector_alignment_reachable && { ! vect_element_align } } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { ! vector_alignment_reachable } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-42.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-42.c
+@@ -57,6 +57,6 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+ /*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { vect_no_align || { ! vector_alignment_reachable } } } } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || { ! vector_alignment_reachable } } } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail {vect_no_align || { ! vector_alignment_reachable } } } } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { { vect_no_align || vect_element_align } || { ! vector_alignment_reachable } } } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align || vect_element_align } || { ! vector_alignment_reachable } } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-44.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-44.c
+@@ -65,8 +65,8 @@
+    two loads to be aligned).  */
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align || vect_element_align } || {! vector_alignment_reachable} } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target vect_no_align } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && {! vect_no_align} } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-48.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-48.c
+@@ -54,7 +54,7 @@
+    (The store is aligned).  */
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target vect_no_align } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-50.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-50.c
+@@ -61,8 +61,8 @@
+    two loads to be aligned).  */
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align || vect_element_align } || {! vector_alignment_reachable} } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target vect_no_align } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && {! vect_no_align} } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-52.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-52.c
+@@ -55,7 +55,7 @@
+    (The store is aligned).  */
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target vect_no_align } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-54.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-54.c
+@@ -59,5 +59,5 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-56.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-56.c
+@@ -67,6 +67,6 @@
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-58.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-58.c
+@@ -58,5 +58,5 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-60.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-60.c
+@@ -68,6 +68,6 @@
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-70.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-70.c
+@@ -64,6 +64,6 @@
+           
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target vector_alignment_reachable } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target { vector_alignment_reachable && { ! vect_element_align } } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target {! vector_alignment_reachable} } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-72.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-72.c
+@@ -46,6 +46,6 @@
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align || vect_element_align } } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-75.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-75.c
+@@ -45,5 +45,5 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+ /*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail vect_no_align } } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align || vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-87.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-87.c
+@@ -51,6 +51,6 @@
+ /* Fails for targets that don't vectorize PLUS (e.g alpha).  */
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target vector_alignment_reachable } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target { vector_alignment_reachable && { ! vect_element_align } } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target {! vector_alignment_reachable} } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-88.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-88.c
+@@ -51,6 +51,6 @@
+ /* Fails for targets that don't vectorize PLUS (e.g alpha).  */
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target vector_alignment_reachable } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target { vector_alignment_reachable && { ! vect_element_align } } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target {! vector_alignment_reachable} } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-89.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-89.c
+@@ -46,5 +46,5 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-91.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-91.c
+@@ -59,6 +59,6 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" { xfail vect_no_int_add } } } */
+ /* { dg-final { scan-tree-dump-times "accesses have the same alignment." 3 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" {target vector_alignment_reachable } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" {target { vector_alignment_reachable && { ! vect_element_align } } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" {target {! vector_alignment_reachable} } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-92.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-92.c
+@@ -92,5 +92,5 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-93.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-93.c
+@@ -72,7 +72,7 @@
+ /* main && main1 together: */
+ /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 2 "vect" { target powerpc*-*-* i?86-*-* x86_64-*-* } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target { vect_no_align && {! vector_alignment_reachable} } } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail { { vect_no_align || vect_element_align } || {! vector_alignment_reachable} } } } } */
+ 
+ /* in main1: */
+ /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target !powerpc*-*-* !i?86-*-* !x86_64-*-* } } } */
+@@ -80,6 +80,6 @@
+ 
+ /* in main: */
+ /* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail vect_no_align } } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align || vect_element_align } } } } */
+ 
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-95.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-95.c
+@@ -62,8 +62,8 @@
+    stores and generate misaligned accesses for the loads. For targets that 
+    don't support unaligned loads we version for all four accesses.  */
+ 
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { xfail vect_no_align } } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
+ /*  { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target vect_no_align } } } */
+ /*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 4 "vect" { target vect_no_align } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-align-2.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-align-2.c
+@@ -43,6 +43,6 @@
+ 
+ 
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { ! vect_element_align } } } } */
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
+@@ -78,11 +78,11 @@
+   return 0;
+ }
+ 
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail *-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail { ! vect_element_align } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align || vect_element_align } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail *-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || vect_element_align } } } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail *-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+ 
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-3.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-3.c
+@@ -54,6 +54,6 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+ /*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" { target vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" {xfail vect_no_align } } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" {xfail { vect_no_align || vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+ 
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
+@@ -85,11 +85,11 @@
+   return 0;
+ }
+ 
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail *-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail { ! vect_element_align } } } } */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align || vect_element_align } } } } */
+ /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail *-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } } } */
++/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || vect_element_align } } } } */
+ /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 8 "vect" { xfail *-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail vect_no_align } } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail { vect_no_align || vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+ 
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-6.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-multitypes-6.c
+@@ -61,6 +61,6 @@
+ 
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { sparc*-*-* && ilp32 } }} } */
+ /*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 6 "vect" { target vect_no_align } } } */
+-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 6 "vect" {xfail vect_no_align } } } */
++/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 6 "vect" {xfail { vect_no_align || vect_element_align } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+ 
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-shift-2.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-shift-2.c
+@@ -0,0 +1,37 @@
++/* { dg-require-effective-target vect_shift_char } */
++/* { dg-require-effective-target vect_int } */
++
++#include "tree-vect.h"
++
++#define N 32
++
++unsigned char dst[N] __attribute__((aligned(N)));
++unsigned char src[N] __attribute__((aligned(N)));
++
++__attribute__ ((noinline))
++void array_shift(void)
++{
++  int i;
++  for (i = 0; i < N; i++)
++    dst[i] = src[i] >> 3;
++}
++
++int main()
++{
++  volatile int i;
++  check_vect ();
++
++  for (i = 0; i < N; i++)
++    src[i] = i << 3;
++
++  array_shift ();
++
++  for (i = 0; i < N; i++)
++    if (dst[i] != i)
++      abort ();
++
++  return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect-shift-3.c
++++ b/src/gcc/testsuite/gcc.dg/vect/vect-shift-3.c
+@@ -0,0 +1,37 @@
++/* { dg-require-effective-target vect_shift } */
++/* { dg-require-effective-target vect_int } */
++
++#include "tree-vect.h"
++
++#define N 32
++
++unsigned short dst[N] __attribute__((aligned(N)));
++unsigned short src[N] __attribute__((aligned(N)));
++
++__attribute__ ((noinline))
++void array_shift(void)
++{
++  int i;
++  for (i = 0; i < N; i++)
++    dst[i] = src[i] >> 3;
++}
++
++int main()
++{
++  volatile int i;
++  check_vect ();
++
++  for (i = 0; i < N; i++)
++    src[i] = i << 3;
++
++  array_shift ();
++
++  for (i = 0; i < N; i++)
++    if (dst[i] != i)
++      abort ();
++
++  return 0;
++}
++
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.dg/vect/vect.exp
++++ b/src/gcc/testsuite/gcc.dg/vect/vect.exp
+@@ -100,7 +100,7 @@
+ } elseif [istarget "ia64-*-*"] {
+     set dg-do-what-default run
+ } elseif [is-effective-target arm_neon_ok] {
+-    lappend DEFAULT_VECTCFLAGS "-mfpu=neon" "-mfloat-abi=softfp"
++    eval lappend DEFAULT_VECTCFLAGS [add_options_for_arm_neon ""]
+     if [is-effective-target arm_neon_hw] {
+       set dg-do-what-default run
+     } else {
+@@ -186,6 +186,12 @@
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/section-anchors-*.\[cS\]]]  \
+ 	"" $DEFAULT_VECTCFLAGS
+ 
++# alignment-sensitive -fsection-anchors tests
++set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS
++lappend DEFAULT_VECTCFLAGS "-fsection-anchors" "-fdump-ipa-increase_alignment"
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/aligned-section-anchors-*.\[cS\]]]  \
++	"" $DEFAULT_VECTCFLAGS
++
+ # -fno-section-anchors tests
+ set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS
+ lappend DEFAULT_VECTCFLAGS "-fno-section-anchors"
+--- a/src/gcc/testsuite/gcc.misc-tests/i386-prefetch.exp
++++ b/src/gcc/testsuite/gcc.misc-tests/i386-prefetch.exp
+@@ -90,6 +90,13 @@
+ dg-init
+ torture-init
+ 
++if { [board_info target exists multilib_flags]
++     && [string match "* -march=*" " [board_info target multilib_flags] "] } {
++    # Multilib flags come after the -march flags we pass and override
++    # them, so skip these tests when such flags are passed.
++    return
++}
++
+ set-torture-options $PREFETCH_NONE
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/i386-pf-none-*.c]] ""
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/aapcs.exp
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/aapcs.exp
+@@ -0,0 +1,35 @@
++# Copyright (C) 1997, 2004, 2006, 2007 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++# GCC testsuite that uses the `dg.exp' driver.
++
++# Exit immediately if this isn't an ARM target.
++if ![istarget arm*-*-*] then {
++  return
++}
++
++# Load support procs.
++load_lib gcc-dg.exp
++
++# Initialize `dg'.
++dg-init
++
++# Main loop.
++dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \
++	"" ""
++
++# All done.
++dg-finish
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/abitest.h
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/abitest.h
+@@ -0,0 +1,118 @@
++#define IN_FRAMEWORK
++
++#ifdef VFP
++#define D0	0
++#define D1	8
++#define D2	16
++#define D3	24
++#define D4	32
++#define D5	40
++#define D6	48
++#define D7	56
++
++#define S0	64
++#define S1	68
++#define S2	72
++#define S3	76
++#define S4	80
++#define S5	84
++#define S6	88
++#define S7	92
++#define S8      86
++#define S9	100
++#define S10	104
++#define S11	108
++#define S12	112
++#define S13	116
++#define S14	120
++#define S15	124
++
++#define R0	128
++#define R1	132
++#define R2	136
++#define R3	140
++
++#define STACK	144
++
++#else
++
++#define R0	0
++#define R1	4
++#define R2	8
++#define R3	12
++
++#define STACK   16
++
++#endif
++
++extern void abort (void);
++
++__attribute__((naked))  void dumpregs () __asm("myfunc");
++__attribute__((naked))  void dumpregs ()
++{
++  asm(
++      "mov	ip, sp\n\t"
++      "stmfd	sp!, {r0-r3}\n\t"
++#ifdef VFP
++      "fstmdbs	sp!, {s0-s15}\n\t"
++      "fstmdbd	sp!, {d0-d7}\n\t"
++#endif
++      "mov	r0, sp\n\t"
++      "stmfd	sp!, {ip, r14}\n\t"
++      "bl	testfunc\n\t"
++      "ldmfd	sp!, {r0, r14}\n\t"
++      "mov	sp, r0\n\t"
++      "bx	lr");
++}
++
++
++#define LAST_ARG(type,val,offset) { type __x = val; if (memcmp(&__x, stack+offset, sizeof(type)) != 0) abort(); }
++#define ARG(type,val,offset) LAST_ARG(type, val, offset)
++#define ANON(type,val,offset) LAST_ARG(type, val, offset)
++#define LAST_ANON(type,val,offset) LAST_ARG(type, val, offset)
++#define DOTS
++
++void testfunc(char* stack)
++{
++#include TESTFILE
++  return;
++}
++
++#undef LAST_ARG
++#undef ARG
++#undef DOTS
++#undef ANON
++#undef LAST_ANON
++#define LAST_ARG(type,val,offset) type
++#define ARG(type,val,offset) LAST_ARG(type, val, offset),
++#define DOTS ...
++#define ANON(type,val, offset)
++#define LAST_ANON(type,val, offset)
++
++#ifndef MYFUNCTYPE
++#define MYFUNCTYPE void
++#endif
++
++MYFUNCTYPE myfunc(
++#include TESTFILE
++);
++
++#undef LAST_ARG
++#undef ARG
++#undef DOTS
++#undef ANON
++#undef LAST_ANON
++#define LAST_ARG(type,val,offset) val
++#define ARG(type,val,offset) LAST_ARG(type, val, offset),
++#define DOTS
++#define LAST_ANON(type,val,offset) LAST_ARG(type, val, offset)
++#define ANON(type,val,offset) LAST_ARG(type, val, offset),
++
++
++int main()
++{
++  myfunc(
++#include TESTFILE
++);
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/vfp1.c
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp1.c
+@@ -0,0 +1,17 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm*-*-eabi* } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp1.c"
++#include "abitest.h"
++
++#else
++  ARG(int, 4, R0)
++  ARG(double, 4.0, D0)
++  LAST_ARG(int, 3, R1)
++#endif
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/vfp10.c
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp10.c
+@@ -0,0 +1,38 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm*-*-eabi* } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp10.c"
++
++__complex__ x = 1.0+2.0i;
++
++struct y
++{
++  int p;
++  int q;
++  int r;
++  int s;
++} v = { 1, 2, 3, 4 };
++
++struct z
++{
++  double x[4];
++};
++
++struct z a = { 5.0, 6.0, 7.0, 8.0 };
++struct z b = { 9.0, 10.0, 11.0, 12.0 };
++
++#include "abitest.h"
++#else
++  /* A variadic function passes using the base ABI */
++  ARG(double, 11.0, R0)
++  DOTS
++  ANON(struct z, a, R2)
++  ANON(struct z, b, STACK+24)
++  LAST_ANON(double, 0.5, STACK+56)
++#endif
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/vfp11.c
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp11.c
+@@ -0,0 +1,39 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm*-*-eabi* } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp11.c"
++
++__complex__ x = 1.0+2.0i;
++
++struct y
++{
++  int p;
++  int q;
++  int r;
++  int s;
++} v = { 1, 2, 3, 4 };
++
++struct z
++{
++  double x[4];
++};
++
++struct z a = { 5.0, 6.0, 7.0, 8.0 };
++struct z b = { 9.0, 10.0, 11.0, 12.0 };
++
++#define MYFUNCTYPE struct y
++
++#include "abitest.h"
++#else
++  ARG(int, 7, R1)
++  ARG(struct y, v, R2)
++  ARG(struct z, a, D0)
++  ARG(struct z, b, D4)
++  LAST_ARG(double, 0.5, STACK+8)
++#endif
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/vfp12.c
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp12.c
+@@ -0,0 +1,38 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm*-*-eabi* } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp12.c"
++
++__complex__ x = 1.0+2.0i;
++
++struct y
++{
++  int p;
++  int q;
++  int r;
++  int s;
++} v = { 1, 2, 3, 4 };
++
++struct z
++{
++  double x[4];
++};
++
++struct z a = { 5.0, 6.0, 7.0, 8.0 };
++struct z b = { 9.0, 10.0, 11.0, 12.0 };
++
++#include "abitest.h"
++#else
++  ARG(int, 7, R0)
++  ARG(struct y, v, R1)
++  ARG(struct z, a, D0)
++  ARG(double, 1.0, D4)
++  ARG(struct z, b, STACK+8)
++  LAST_ARG(double, 0.5, STACK+40)
++#endif
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/vfp13.c
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp13.c
+@@ -0,0 +1,39 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm*-*-eabi* } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp13.c"
++
++__complex__ x = 1.0+2.0i;
++
++struct y
++{
++  int p;
++  int q;
++  int r;
++  int s;
++} v = { 1, 2, 3, 4 };
++
++struct z
++{
++  double x[4];
++};
++
++struct z a = { 5.0, 6.0, 7.0, 8.0 };
++struct z b = { 9.0, 10.0, 11.0, 12.0 };
++
++#include "abitest.h"
++#else
++  ARG(int, 7, R0)
++  ARG(int, 9, R1)
++  ARG(struct z, a, D0)
++  ARG(double, 1.0, D4)
++  ARG(struct z, b, STACK)
++  ARG(int, 4, R2)
++  LAST_ARG(double, 0.5, STACK+32)
++#endif
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/vfp14.c
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp14.c
+@@ -0,0 +1,24 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm*-*-eabi* } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp14.c"
++
++#include "abitest.h"
++#else
++  ARG(double, 1.0, D0)
++  ARG(double, 2.0, D1)
++  ARG(double, 3.0, D2)
++  ARG(double, 4.0, D3)
++  ARG(double, 5.0, D4)
++  ARG(double, 6.0, D5)
++  ARG(double, 7.0, D6)
++  ARG(double, 8.0, D7)
++  ARG(double, 9.0, STACK)
++  LAST_ARG(double, 10.0, STACK+8)
++#endif
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/vfp2.c
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp2.c
+@@ -0,0 +1,19 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm*-*-eabi* } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp2.c"
++#include "abitest.h"
++
++#else
++  ARG(float, 1.0f, S0)
++  ARG(double, 4.0, D1)
++  ARG(float, 2.0f, S1)
++  ARG(double, 5.0, D2)
++  LAST_ARG(int, 3, R0)
++#endif
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/vfp3.c
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp3.c
+@@ -0,0 +1,21 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm*-*-eabi* } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp3.c"
++
++__complex__ x = 1.0+2.0i;
++
++#include "abitest.h"
++#else
++  ARG(float, 1.0f, S0)
++  ARG(__complex__ double, x, D1)
++  ARG(float, 2.0f, S1)
++  ARG(double, 5.0, D3)
++  LAST_ARG(int, 3, R0)
++#endif
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/vfp4.c
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp4.c
+@@ -0,0 +1,20 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm*-*-eabi* } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp4.c"
++
++__complex__ float x = 1.0f + 2.0fi;
++#include "abitest.h"
++#else
++  ARG(float, 1.0f, S0)
++  ARG(__complex__ float, x, S1)
++  ARG(float, 2.0f, S3)
++  ARG(double, 5.0, D2)
++  LAST_ARG(int, 3, R0)
++#endif
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/vfp5.c
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp5.c
+@@ -0,0 +1,30 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm*-*-eabi* } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp5.c"
++
++__complex__ float x = 1.0+2.0i;
++
++struct y
++{
++  int p;
++  int q;
++  int r;
++  int s;
++} v = { 1, 2, 3, 4 };
++
++#include "abitest.h"
++#else
++  ARG(float, 1.0f, S0)
++  ARG(__complex__ float, x, S1)
++  ARG(float, 2.0f, S3)
++  ARG(double, 5.0, D2)
++  ARG(struct y, v, R0)
++  LAST_ARG(int, 3, STACK)
++#endif
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/vfp6.c
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp6.c
+@@ -0,0 +1,30 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm*-*-eabi* } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp6.c"
++
++__complex__ float x = 1.0+2.0i;
++
++struct y
++{
++  int p;
++  int q;
++  int r;
++  int s;
++} v = { 1, 2, 3, 4 };
++
++#include "abitest.h"
++#else
++  ARG(struct y, v, R0)
++  ARG(float, 1.0f, S0)
++  ARG(__complex__ float, x, S1)
++  ARG(float, 2.0f, S3)
++  ARG(double, 5.0, D2)
++  LAST_ARG(int, 3, STACK)
++#endif
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/vfp7.c
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp7.c
+@@ -0,0 +1,37 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm*-*-eabi* } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp7.c"
++
++__complex__ x = 1.0+2.0i;
++
++struct y
++{
++  int p;
++  int q;
++  int r;
++  int s;
++} v = { 1, 2, 3, 4 };
++
++struct z
++{
++  double x[4];
++};
++
++struct z a = { 5.0, 6.0, 7.0, 8.0 };
++struct z b = { 9.0, 10.0, 11.0, 12.0 };
++
++#include "abitest.h"
++#else
++  ARG(struct z, a, D0)
++  ARG(struct z, b, D4)
++  ARG(double, 0.5, STACK)
++  ARG(int, 7, R0)
++  LAST_ARG(struct y, v, STACK+8)
++#endif
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/vfp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp8.c
+@@ -0,0 +1,37 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm*-*-eabi* } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp8.c"
++
++__complex__ x = 1.0+2.0i;
++
++struct y
++{
++  int p;
++  int q;
++  int r;
++  int s;
++} v = { 1, 2, 3, 4 };
++
++struct z
++{
++  double x[4];
++};
++
++struct z a = { 5.0, 6.0, 7.0, 8.0 };
++struct z b = { 9.0, 10.0, 11.0, 12.0 };
++
++#include "abitest.h"
++#else
++  ARG(int, 7, R0)
++  ARG(struct y, v, R1)
++  ARG(struct z, a, D0)
++  ARG(struct z, b, D4)
++  LAST_ARG(double, 0.5, STACK+8)
++#endif
+--- a/src/gcc/testsuite/gcc.target/arm/aapcs/vfp9.c
++++ b/src/gcc/testsuite/gcc.target/arm/aapcs/vfp9.c
+@@ -0,0 +1,38 @@
++/* Test AAPCS layout (VFP variant) */
++
++/* { dg-do run { target arm*-*-eabi* } } */
++/* { dg-require-effective-target arm_hard_vfp_ok } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */
++
++#ifndef IN_FRAMEWORK
++#define VFP
++#define TESTFILE "vfp9.c"
++
++__complex__ x = 1.0+2.0i;
++
++struct y
++{
++  int p;
++  int q;
++  int r;
++  int s;
++} v = { 1, 2, 3, 4 };
++
++struct z
++{
++  double x[4];
++};
++
++struct z a = { 5.0, 6.0, 7.0, 8.0 };
++struct z b = { 9.0, 10.0, 11.0, 12.0 };
++
++#include "abitest.h"
++#else
++  /* A variadic function passes using the base ABI */
++  ARG(int, 7, R0)
++  DOTS
++  ANON(struct z, a, R2)
++  ANON(struct z, b, STACK+24)
++  LAST_ANON(double, 0.5, STACK+56)
++#endif
+--- a/src/gcc/testsuite/gcc.target/arm/ctz.c
++++ b/src/gcc/testsuite/gcc.target/arm/ctz.c
+@@ -0,0 +1,12 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm32 } */
++/* { dg-options "-O2 -march=armv6t2" } */
++
++unsigned int functest(unsigned int x)
++{
++	return __builtin_ctz(x);
++}
++
++/* { dg-final { scan-assembler "rbit" } } */
++/* { dg-final { scan-assembler "clz" } } */
++/* { dg-final { scan-assembler-not "rsb" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/eabi1.c
++++ b/src/gcc/testsuite/gcc.target/arm/eabi1.c
+@@ -30,43 +30,48 @@
+ #include <stdlib.h>
+ #include <math.h>
+ 
+-#define decl_float(code, type)					\
+-  extern type __aeabi_ ## code ## add (type, type);		\
+-  extern type __aeabi_ ## code ## div (type, type);		\
+-  extern type __aeabi_ ## code ## mul (type, type);		\
+-  extern type __aeabi_ ## code ## neg (type);			\
+-  extern type __aeabi_ ## code ## rsub (type, type);		\
+-  extern type __aeabi_ ## code ## sub (type, type);		\
+-  extern int __aeabi_ ## code ## cmpeq (type, type);		\
+-  extern int __aeabi_ ## code ## cmplt (type, type);		\
+-  extern int __aeabi_ ## code ## cmple (type, type);		\
+-  extern int __aeabi_ ## code ## cmpge (type, type);		\
+-  extern int __aeabi_ ## code ## cmpgt (type, type);		\
+-  extern int __aeabi_ ## code ## cmpun (type, type);		\
+-  extern int __aeabi_ ## code ## 2iz (type);			\
+-  extern unsigned int __aeabi_ ## code ## 2uiz (type);		\
+-  extern long long __aeabi_ ## code ## 2lz (type);		\
+-  extern unsigned long long __aeabi_ ## code ## 2ulz (type);	\
+-  extern type __aeabi_i2 ## code (int);				\
+-  extern type __aeabi_ui2 ## code (int);			\
+-  extern type __aeabi_l2 ## code (long long);			\
+-  extern type __aeabi_ul2 ## code (unsigned long long);		\
+-								\
+-  type code ## zero = 0.0;					\
+-  type code ## one = 1.0;					\
+-  type code ## two = 2.0;					\
+-  type code ## four = 4.0;					\
+-  type code ## minus_one = -1.0;				\
+-  type code ## minus_two = -2.0;				\
+-  type code ## minus_four = -4.0;				\
+-  type code ## epsilon = 1E-32;					\
+-  type code ## NaN = 0.0 / 0.0;				
++/* All these functions are defined to use the base ABI, so use the
++   attribute to ensure the tests use the base ABI to call them even
++   when the VFP ABI is otherwise in effect.  */
++#define PCS __attribute__((pcs("aapcs")))
++
++#define decl_float(code, type)						\
++  extern type __aeabi_ ## code ## add (type, type) PCS;			\
++  extern type __aeabi_ ## code ## div (type, type) PCS;			\
++  extern type __aeabi_ ## code ## mul (type, type) PCS;			\
++  extern type __aeabi_ ## code ## neg (type) PCS;			\
++  extern type __aeabi_ ## code ## rsub (type, type) PCS;		\
++  extern type __aeabi_ ## code ## sub (type, type) PCS;			\
++  extern int __aeabi_ ## code ## cmpeq (type, type) PCS;		\
++  extern int __aeabi_ ## code ## cmplt (type, type) PCS;		\
++  extern int __aeabi_ ## code ## cmple (type, type) PCS;		\
++  extern int __aeabi_ ## code ## cmpge (type, type) PCS;		\
++  extern int __aeabi_ ## code ## cmpgt (type, type) PCS;		\
++  extern int __aeabi_ ## code ## cmpun (type, type) PCS;		\
++  extern int __aeabi_ ## code ## 2iz (type) PCS;			\
++  extern unsigned int __aeabi_ ## code ## 2uiz (type) PCS;		\
++  extern long long __aeabi_ ## code ## 2lz (type) PCS;			\
++  extern unsigned long long __aeabi_ ## code ## 2ulz (type) PCS;	\
++  extern type __aeabi_i2 ## code (int) PCS;				\
++  extern type __aeabi_ui2 ## code (int) PCS;				\
++  extern type __aeabi_l2 ## code (long long) PCS;			\
++  extern type __aeabi_ul2 ## code (unsigned long long) PCS;		\
++									\
++  type code ## zero = 0.0;						\
++  type code ## one = 1.0;						\
++  type code ## two = 2.0;						\
++  type code ## four = 4.0;						\
++  type code ## minus_one = -1.0;					\
++  type code ## minus_two = -2.0;					\
++  type code ## minus_four = -4.0;					\
++  type code ## epsilon = 1E-32;						\
++  type code ## NaN = 0.0 / 0.0;
+ 
+ decl_float (d, double)
+ decl_float (f, float)
+ 
+-extern float __aeabi_d2f (double);
+-extern double __aeabi_f2d (float);
++extern float __aeabi_d2f (double) PCS;
++extern double __aeabi_f2d (float) PCS;
+ extern long long __aeabi_lmul (long long, long long);
+ extern long long __aeabi_llsl (long long, int);
+ extern long long __aeabi_llsr (long long, int);
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-builtins-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-builtins-1.c
+@@ -0,0 +1,92 @@
++/* Test type-generic builtins with __fp16 arguments.
++   Except as otherwise noted, they should behave exactly
++   the same as those with float arguments.  */
++
++/* { dg-do run } */
++/* { dg-options "-mfp16-format=ieee -std=gnu99" } */
++
++#include <stdlib.h>
++#include <math.h>
++
++volatile __fp16 h1, h2;
++volatile float f1, f2;
++
++void
++set1 (double x)
++{
++  h1 = x;
++  f1 = h1;
++}
++
++void
++set2 (double x, double y)
++{
++  h1 = x;
++  f1 = h1;
++  h2 = y;
++  f2 = h2;
++}
++
++#define test1(p,x)				\
++  set1 (x);					\
++  hp = (p (h1) ? 1 : 0);			\
++  fp = (p (f1) ? 1 : 0);			\
++  if (hp ^ fp) abort ()
++
++#define test2(p,x,y)				\
++  set2 (x,y);					\
++  hp = (p (h1, h2) ? 1 : 0);			\
++  fp = (p (f1, f2) ? 1 : 0);			\
++  if (hp ^ fp) abort ()
++
++int
++main (void)
++{
++  int hp, fp;
++
++  test1 (__builtin_isfinite, 17.0);
++  test1 (__builtin_isfinite, INFINITY);
++  test1 (__builtin_isinf, -0.5);
++  test1 (__builtin_isinf, INFINITY);
++  test1 (__builtin_isnan, 493.0);
++  test1 (__builtin_isnan, NAN);
++  test1 (__builtin_isnormal, 3.14159);
++
++  test2 (__builtin_isgreater, 5.0, 3.0);
++  test2 (__builtin_isgreater, 3.0, 5.0);
++  test2 (__builtin_isgreater, 73.5, 73.5);
++  test2 (__builtin_isgreater, 1.0, NAN);
++
++  test2 (__builtin_isgreaterequal, 5.0, 3.0);
++  test2 (__builtin_isgreaterequal, 3.0, 5.0);
++  test2 (__builtin_isgreaterequal, 73.5, 73.5);
++  test2 (__builtin_isgreaterequal, 1.0, NAN);
++
++  test2 (__builtin_isless, 5.0, 3.0);
++  test2 (__builtin_isless, 3.0, 5.0);
++  test2 (__builtin_isless, 73.5, 73.5);
++  test2 (__builtin_isless, 1.0, NAN);
++
++  test2 (__builtin_islessequal, 5.0, 3.0);
++  test2 (__builtin_islessequal, 3.0, 5.0);
++  test2 (__builtin_islessequal, 73.5, 73.5);
++  test2 (__builtin_islessequal, 1.0, NAN);
++
++  test2 (__builtin_islessgreater, 5.0, 3.0);
++  test2 (__builtin_islessgreater, 3.0, 5.0);
++  test2 (__builtin_islessgreater, 73.5, 73.5);
++  test2 (__builtin_islessgreater, 1.0, NAN);
++
++  test2 (__builtin_isunordered, 5.0, 3.0);
++  test2 (__builtin_isunordered, 3.0, 5.0);
++  test2 (__builtin_isunordered, 73.5, 73.5);
++  test2 (__builtin_isunordered, 1.0, NAN);
++
++  /* Test that __builtin_isnormal recognizes a denormalized __fp16 value,
++     even if it's representable as a normalized float.  */
++  h1 = 5.96046E-8;
++  if (__builtin_isnormal (h1))
++    abort ();
++
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-1.c
+@@ -0,0 +1,8 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=alternative" } */
++
++__fp16 xx = 0.0;
++
++/* { dg-final { scan-assembler "\t.eabi_attribute 38, 2" } } */
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.space\t2" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-10.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-10.c
+@@ -0,0 +1,8 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=alternative -pedantic -std=gnu99" } */
++
++#include <math.h>
++
++/* NaNs are not representable in the alternative format; we should get a
++   diagnostic.  */
++__fp16 xx = NAN; /* { dg-warning "overflow" } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-11.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-11.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=alternative -pedantic -std=gnu99" } */
++
++#include <math.h>
++
++/* Infinities are not representable in the alternative format;
++   we should get a diagnostic, and the value set to the largest
++   representable value.  */
++/* 0x7fff = 32767 */
++__fp16 xx = INFINITY; /* { dg-warning "overflow" } */
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t32767" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-12.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-12.c
+@@ -0,0 +1,8 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=alternative" } */
++
++float xx __attribute__((mode(HF))) = 0.0;
++
++/* { dg-final { scan-assembler "\t.eabi_attribute 38, 2" } } */
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.space\t2" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-2.c
+@@ -0,0 +1,9 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=alternative" } */
++
++/* Encoding taken from:  http://en.wikipedia.org/wiki/Half_precision */
++/* 0x3c00 = 15360 */
++__fp16 xx = 1.0;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t15360" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-3.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-3.c
+@@ -0,0 +1,9 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=alternative" } */
++
++/* Encoding taken from:  http://en.wikipedia.org/wiki/Half_precision */
++/* 0xc000 = 49152 */
++__fp16 xx = -2.0;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t49152" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-4.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-4.c
+@@ -0,0 +1,9 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=alternative" } */
++
++/* Encoding taken from:  http://en.wikipedia.org/wiki/Half_precision */
++/* 0x7bff = 31743 */
++__fp16 xx = 65504.0;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t31743" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-5.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-5.c
+@@ -0,0 +1,9 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=alternative" } */
++
++/* Encoding taken from:  http://en.wikipedia.org/wiki/Half_precision */
++/* 0x3555 = 13653 */
++__fp16 xx = (1.0/3.0);
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t13653" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-6.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-6.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=alternative" } */
++
++/* This number is the maximum value representable in the alternative
++   encoding.  */
++/* 0x7fff = 32767 */
++__fp16 xx = 131008.0;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t32767" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-7.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-7.c
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=alternative -pedantic" } */
++
++/* This number overflows the range of the alternative encoding.  Since this
++   encoding doesn't have infinities, we should get a pedantic warning,
++   and the value should be set to the largest representable value.  */
++/* 0x7fff = 32767 */
++__fp16 xx = 123456789.0;  /* { dg-warning "overflow" } */
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t32767" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-8.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-8.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=alternative" } */
++
++/* Encoding taken from:  http://en.wikipedia.org/wiki/Half_precision */
++/* This is the minimum normalized value.  */
++/* 0x0400 = 1024 */
++__fp16 xx = 6.10352E-5;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t1024" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-9.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-alt-9.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=alternative" } */
++
++/* Encoding taken from:  http://en.wikipedia.org/wiki/Half_precision */
++/* This is the minimum denormalized value.  */
++/* 0x0001 = 1 */
++__fp16 xx = 5.96046E-8;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t1" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-exprtype.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-exprtype.c
+@@ -0,0 +1,29 @@
++/* Test that expressions involving __fp16 values have the right types.  */
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* This produces a diagnostic if EXPR doesn't have type TYPE.  */
++#define CHECK(expr,type)			\
++  do {						\
++    type v;					\
++    __typeof (expr) *p = &v;			\
++  } while (0);
++
++volatile __fp16 f1;
++volatile __fp16 f2;
++
++int
++main (void)
++{
++  CHECK (f1, __fp16);
++  CHECK (+f1, float);
++  CHECK (-f1, float);
++  CHECK (f1+f2, float);
++  CHECK ((__fp16)(f1+f2), __fp16);
++  CHECK ((__fp16)99.99, __fp16);
++  CHECK ((f1+f2, f1), __fp16);
++}
++
++
++
++
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-1.c
+@@ -0,0 +1,8 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++__fp16 xx = 0.0;
++
++/* { dg-final { scan-assembler "\t.eabi_attribute 38, 1" } } */
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.space\t2" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-10.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-10.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee -std=gnu99" } */
++
++#include <math.h>
++
++/* 0x7e00 = 32256 */
++__fp16 xx = NAN;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t32256" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-11.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-11.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee -std=gnu99" } */
++
++#include <math.h>
++
++/* 0x7c00 = 31744 */
++__fp16 xx = INFINITY;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t31744" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-12.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-12.c
+@@ -0,0 +1,8 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++float xx __attribute__((mode(HF))) = 0.0;
++
++/* { dg-final { scan-assembler "\t.eabi_attribute 38, 1" } } */
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.space\t2" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-2.c
+@@ -0,0 +1,9 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* Encoding taken from:  http://en.wikipedia.org/wiki/Half_precision */
++/* 0x3c00 = 15360 */
++__fp16 xx = 1.0;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t15360" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-3.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-3.c
+@@ -0,0 +1,9 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* Encoding taken from:  http://en.wikipedia.org/wiki/Half_precision */
++/* 0xc000 = 49152 */
++__fp16 xx = -2.0;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t49152" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-4.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-4.c
+@@ -0,0 +1,9 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* Encoding taken from:  http://en.wikipedia.org/wiki/Half_precision */
++/* 0x7bff = 31743 */
++__fp16 xx = 65504.0;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t31743" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-5.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-5.c
+@@ -0,0 +1,9 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* Encoding taken from:  http://en.wikipedia.org/wiki/Half_precision */
++/* 0x3555 = 13653 */
++__fp16 xx = (1.0/3.0);
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t13653" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-6.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-6.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* Encoding taken from:  http://en.wikipedia.org/wiki/Half_precision */
++/* This number is too big and is represented as infinity.  */
++/* 0x7c00 = 31744 */
++__fp16 xx = 131008.0;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t31744" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-7.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-7.c
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee -pedantic" } */
++
++/* Encoding taken from:  http://en.wikipedia.org/wiki/Half_precision */
++/* This number is too big and is represented as infinity.  */
++/* We should *not* get an overflow warning here.  */
++/* 0x7c00 = 31744 */
++__fp16 xx = 123456789.0;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t31744" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-8.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-8.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* Encoding taken from:  http://en.wikipedia.org/wiki/Half_precision */
++/* This is the minimum normalized value.  */
++/* 0x0400 = 1024 */
++__fp16 xx = 6.10352E-5;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t1024" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-9.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-ieee-9.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* Encoding taken from:  http://en.wikipedia.org/wiki/Half_precision */
++/* This is the minimum denormalized value.  */
++/* 0x0001 = 1 */
++__fp16 xx = 5.96046E-8;
++
++/* { dg-final { scan-assembler "\t.size\txx, 2" } } */
++/* { dg-final { scan-assembler "\t.short\t1" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-none-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-none-1.c
+@@ -0,0 +1,6 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=none" } */
++
++/* __fp16 type name is not recognized unless you explicitly enable it
++   by selecting -mfp16-format=ieee or -mfp16-format=alternative.  */
++__fp16 xx = 0.0;  /* { dg-error "expected" } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-none-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-none-2.c
+@@ -0,0 +1,7 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=none" } */
++
++/* mode(HF) attributes are not recognized unless you explicitly enable
++   half-precision floating point by selecting -mfp16-format=ieee or
++   -mfp16-format=alternative.  */
++float xx __attribute__((mode(HF))) = 0.0;  /* { dg-error "HF" } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-compile-vcvt.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-compile-vcvt.c
+@@ -0,0 +1,20 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_fp16_ok } */
++/* { dg-options "-mfp16-format=ieee" } */
++/* { dg-add-options arm_neon_fp16 } */
++
++/* Test generation of VFP __fp16 instructions.  */
++
++__fp16 h1 = 0.0;
++__fp16 h2 = 1234.0;
++float f1 = 2.0;
++float f2 = -999.9;
++
++void f (void)
++{
++  h1 = f1;
++  f2 = h2;
++}
++
++/* { dg-final { scan-assembler "\tvcvtb.f32.f16" } } */
++/* { dg-final { scan-assembler "\tvcvtb.f16.f32" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-param-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-param-1.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* Functions cannot have parameters of type __fp16.  */
++extern void f (__fp16);		/* { dg-error "parameters cannot have __fp16 type" } */
++extern void (*pf) (__fp16);	/* { dg-error "parameters cannot have __fp16 type" } */
++
++/* These should be OK.  */
++extern void g (__fp16 *);
++extern void (*pg) (__fp16 *);
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-return-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-return-1.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++/* Functions cannot return type __fp16.  */
++extern __fp16 f (void);		/* { dg-error "cannot return __fp16" } */
++extern __fp16 (*pf) (void);	/* { dg-error "cannot return __fp16" } */
++
++/* These should be OK.  */
++extern __fp16 *g (void);
++extern __fp16 *(*pg) (void);
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-rounding-alt-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-rounding-alt-1.c
+@@ -0,0 +1,47 @@
++/* Test intermediate rounding of double to float and then to __fp16, using
++   an example of a number that would round differently if it went directly
++   from double to __fp16.  */
++
++/* { dg-do run } */
++/* { dg-options "-mfp16-format=alternative" } */
++
++#include <stdlib.h>
++
++/* The original double value.  */
++#define ORIG 0x1.0020008p0
++
++/* The expected (double)((__fp16)((float)ORIG)) value.  */
++#define ROUNDED 0x1.0000000p0
++
++typedef union u {
++  __fp16 f;
++  unsigned short h;
++} ufh;
++
++ufh s = { ORIG };
++ufh r = { ROUNDED };
++
++double d = ORIG;
++
++int
++main (void)
++{
++  ufh x;
++
++  /* Test that the rounding is correct for static initializers.  */
++  if (s.h != r.h)
++    abort ();
++
++  /* Test that the rounding is correct for a casted constant expression
++     not in a static initializer.  */
++  x.f = (__fp16)ORIG;
++  if (x.h != r.h)
++    abort ();
++
++  /* Test that the rounding is correct for a runtime conversion.  */
++  x.f = (__fp16)d;
++  if (x.h != r.h)
++    abort ();
++
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-rounding-ieee-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-rounding-ieee-1.c
+@@ -0,0 +1,47 @@
++/* Test intermediate rounding of double to float and then to __fp16, using
++   an example of a number that would round differently if it went directly
++   from double to __fp16.  */
++
++/* { dg-do run } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++#include <stdlib.h>
++
++/* The original double value.  */
++#define ORIG 0x1.0020008p0
++
++/* The expected (double)((__fp16)((float)ORIG)) value.  */
++#define ROUNDED 0x1.0000000p0
++
++typedef union u {
++  __fp16 f;
++  unsigned short h;
++} ufh;
++
++ufh s = { ORIG };
++ufh r = { ROUNDED };
++
++double d = ORIG;
++
++int
++main (void)
++{
++  ufh x;
++
++  /* Test that the rounding is correct for static initializers.  */
++  if (s.h != r.h)
++    abort ();
++
++  /* Test that the rounding is correct for a casted constant expression
++     not in a static initializer.  */
++  x.f = (__fp16)ORIG;
++  if (x.h != r.h)
++    abort ();
++
++  /* Test that the rounding is correct for a runtime conversion.  */
++  x.f = (__fp16)d;
++  if (x.h != r.h)
++    abort ();
++
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-unprototyped-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-unprototyped-1.c
+@@ -0,0 +1,21 @@
++/* Test promotion of __fp16 to double as arguments to unprototyped
++   function in another compilation unit.  */
++
++/* { dg-do run } */
++/* { dg-options "-mfp16-format=ieee" } */
++/* { dg-additional-sources "fp16-unprototyped-2.c" } */
++
++#include <stdlib.h>
++
++extern int f ();
++
++static __fp16 x = 42.0;
++static __fp16 y = -42.0;
++
++int
++main (void)
++{
++  if (!f (x, y))
++    abort ();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-unprototyped-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-unprototyped-2.c
+@@ -0,0 +1,12 @@
++/* { dg-do compile } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++extern int f ();
++
++int
++f (double xx, double yy)
++{
++  if (xx == 42.0 && yy == -42.0)
++    return 1;
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/fp16-variadic-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/fp16-variadic-1.c
+@@ -0,0 +1,37 @@
++/* Test promotion of __fp16 to double as arguments to variadic function.  */
++
++/* { dg-do run } */
++/* { dg-options "-mfp16-format=ieee" } */
++
++#include <stdlib.h>
++#include <stdarg.h>
++
++extern int f (int n, ...);
++
++int 
++f (int n, ...)
++{
++  if (n == 2)
++    {
++      double xx, yy;
++      va_list ap;
++      va_start (ap, n);
++      xx = va_arg (ap, double);
++      yy = va_arg (ap, double);
++      va_end (ap);
++      if (xx == 42.0 && yy == -42.0)
++	return 1;
++    }
++  return 0;
++}
++
++static __fp16 x = 42.0;
++static __fp16 y = -42.0;
++
++int
++main (void)
++{
++  if (!f (2, x, y))
++    abort ();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/frame-pointer-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/frame-pointer-1.c
+@@ -0,0 +1,42 @@
++/* Check local register variables using a register conventionally 
++   used as the frame pointer aren't clobbered under high register pressure.  */
++/* { dg-do run } */
++/* { dg-options "-Os -mthumb -fomit-frame-pointer" } */
++
++#include <stdlib.h>
++
++int global=5;
++
++void __attribute__((noinline)) foo(int p1, int p2, int p3, int p4)
++{
++  if (global != 5 || p1 != 1 || p2 != 2 || p3 != 3 || p4 != 4)
++    abort();
++}
++
++int __attribute__((noinline)) test(int a, int b, int c, int d)
++{
++  register unsigned long r __asm__("r7") = 0xdeadbeef;
++  int e;
++
++  /* ABCD are live after the call which should be enough
++     to cause r7 to be used if it weren't for the register variable.  */
++  foo(a,b,c,d);
++
++  e = 0;
++  __asm__ __volatile__ ("mov %0, %2"
++			: "=r" (e)
++			: "0" (e), "r" (r));
++
++  global = a+b+c+d;
++
++  return e;
++}
++
++int main()
++{
++  if (test(1, 2, 3, 4) != 0xdeadbeef)
++    abort();
++  if (global != 10)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/janus-2cc-shift-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/janus-2cc-shift-1.c
+@@ -0,0 +1,17 @@
++/* Check that a nop is inserted after a shift taking a register operand.  */
++/* { dg-do compile } */
++/* { dg-options "-mfix-janus-2cc" } */
++/* { dg-require-effective-target arm_not_thumb } */
++int foo(int x)
++{
++  int y;
++  int z;
++  
++  y = x << 4;
++  z = y << x;
++
++  return y+z;
++}
++/* { dg-final { scan-assembler "\tmov\tr\[0-9], r\[0-9], asl r\[0-9]\n\tnop\n" } } */
++/* { dg-final { scan-assembler-not "\tmov\tr\[0-9], r\[0-9], asl #4\n\tnop\n" } } */
++
+--- a/src/gcc/testsuite/gcc.target/arm/janus-2cc-shift-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/janus-2cc-shift-2.c
+@@ -0,0 +1,17 @@
++/* Check that a nop is inserted after a shift taking a register operand.  */
++/* { dg-do compile } */
++/* { dg-options "-mfix-janus-2cc -mthumb" } */
++/* { dg-require-effective-target arm_thumb1_ok } */
++int foo(int x)
++{
++  int y;
++  int z;
++  
++  y = x << 4;
++  z = y << x;
++
++  return y+z;
++}
++/* { dg-final { scan-assembler "\tlsl\tr\[0-9], r\[0-9], r\[0-9]\n\tnop\n" } } */
++/* { dg-final { scan-assembler-not "\tlsl\tr\[0-9], r\[0-9], #4\n\tnop\n" } } */
++
+--- a/src/gcc/testsuite/gcc.target/arm/mmx-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/mmx-1.c
+@@ -3,10 +3,10 @@
+ /* { dg-do compile } */
+ /* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mcpu=*" } { "-mcpu=iwmmxt" } } */
+ /* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mabi=*" } { "-mabi=iwmmxt" } } */
+-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mfloat-abi=softfp" } { "" } } */
+ /* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-march=*" } { "-march=iwmmxt" } } */
+ /* { dg-options "-O -mno-apcs-frame -mcpu=iwmmxt -mabi=iwmmxt" } */
+ /* { dg-require-effective-target arm32 } */
++/* { dg-require-effective-target arm_iwmmxt_ok } */
+ /* { dg-final { scan-assembler "ldmfd\[ 	]sp!.*ip,\[ ]*pc" } } */
+ 
+ /* This function uses all the call-saved registers, namely r4, r5, r6,
+--- a/src/gcc/testsuite/gcc.target/arm/naked-3.c
++++ b/src/gcc/testsuite/gcc.target/arm/naked-3.c
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -Wall" } */
++/* Check that we do not get warnings about missing return statements
++   or bogus looking noreturn functions.  */
++int __attribute__((naked))
++foo(void)
++{
++  __asm__ volatile ("mov r0, #1\r\nbx lr\n");
++}
++
++int __attribute__((naked,noreturn))
++bar(void)
++{
++  __asm__ volatile ("frob r0\n");
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon/polytypes.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/polytypes.c
+@@ -3,7 +3,7 @@
+ 
+ /* { dg-do compile } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include <arm_neon.h>
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRaddhns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRaddhns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRaddhns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRaddhns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRaddhns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRaddhns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRaddhnu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRaddhnu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRaddhnu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRaddhnu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRaddhnu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRaddhnu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRhaddQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhadds16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRhadds16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhadds32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRhadds32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhadds8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRhadds8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRhaddu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRhaddu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRhaddu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRhaddu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshlQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshlQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshlQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshlQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshlQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshlQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshlQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshlQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshls64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshls64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshls8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshls8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshlu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshlu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshlu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshlu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshlu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshrQ_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshr_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshr_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshr_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshr_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshr_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshr_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshr_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshr_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshr_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRshrn_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsraQ_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsra_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsra_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsra_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsra_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsra_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsra_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsra_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsra_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsra_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsubhns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsubhns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsubhns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsubhns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsubhns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsubhns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsubhnu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsubhnu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsubhnu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsubhnu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vRsubhnu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vRsubhnu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabaQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabaQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabaQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabaQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabaQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabaQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabaQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabaQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabaQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabaQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabaQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabaQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabals16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabals16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabals32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabals32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabals8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabals8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabalu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabalu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabalu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabalu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabalu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabalu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabas16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabas16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabas32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabas32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabas8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabas8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabau16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabau16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabau32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabau32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabau8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabau8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdls8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdls8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdlu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdlu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdlu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdlu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdlu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdlu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabds16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabds16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabds32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabds32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabds8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabds8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabdu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabdu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabsQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabsQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabsQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabsQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabsQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabsQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabsQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabsQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabsf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabsf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabss16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabss16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabss32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabss32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vabss8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vabss8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddhns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddhns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddhns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddhns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddhns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddhns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddhnu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddhnu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddhnu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddhnu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddhnu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddhnu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddls8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddls8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddlu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddlu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddlu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddlu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddlu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddlu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vadds16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vadds16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vadds32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vadds32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vadds64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vadds64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_int64x1_t = vadd_s64 (arg0_int64x1_t, arg1_int64x1_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vadd\.i64\[ 	\]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vadds8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vadds8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_uint64x1_t = vadd_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vadd\.i64\[ 	\]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddws16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddws16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddws32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddws32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddws8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddws8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddwu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddwu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddwu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddwu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vaddwu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vaddwu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vandQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vandQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vandQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vandQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vandQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vandQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vandQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vandQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vands16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vands16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vands32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vands32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vands64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vands64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_int64x1_t = vand_s64 (arg0_int64x1_t, arg1_int64x1_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vand\[ 	\]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vands8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vands8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vandu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vandu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vandu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_uint64x1_t = vand_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vand\[ 	\]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vandu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vandu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbicQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbicQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbicQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbicQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbicQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbicQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbicQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbicQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbics16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbics16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbics32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbics32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbics64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbics64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_int64x1_t = vbic_s64 (arg0_int64x1_t, arg1_int64x1_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vbic\[ 	\]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbics8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbics8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbicu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbicu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbicu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_uint64x1_t = vbic_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vbic\[ 	\]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbicu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbicu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslQp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslQp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbsls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbsls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbsls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbsls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbsls64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbsls64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbsls8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbsls8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vbslu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vbslu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcageQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcageQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcagef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcagef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcagtQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcagtQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcagtf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcagtf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcaleQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcaleQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcalef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcalef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcaltQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcaltQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcaltf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcaltf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vceqQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vceqQp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vceqQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vceqQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vceqQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vceqQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vceqQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vceqQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vceqf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vceqp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vceqs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vceqs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vceqs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vceqs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcequ16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcequ16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcequ32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcequ32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcequ8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcequ8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgeQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgeQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgeQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgeQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgeQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgeQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgeQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcges16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcges16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcges32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcges32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcges8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcges8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgeu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgeu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgeu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgeu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgtQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgtQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgtQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgtQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgtQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgtQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgtQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgtf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgts16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgts16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgts32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgts32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgts8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgts8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgtu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgtu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcgtu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcgtu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcleQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcleQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcleQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcleQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcleQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcleQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcleQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcles16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcles16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcles32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcles32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcles8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcles8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcleu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcleu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcleu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcleu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclsQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclsQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclsQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclsQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclsQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclsQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclss16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclss16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclss32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclss32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclss8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclss8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcltQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcltQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcltQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcltQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcltQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcltQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcltQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcltf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclts16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclts16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclts32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclts32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclts8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclts8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcltu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcltu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcltu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcltu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclzQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclzQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclzQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclzQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclzQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclzQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclzs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclzs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclzs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclzu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclzu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vclzu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vclzu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcntQp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcntQp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcntQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcntQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcntQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcntQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcntp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcntp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcnts8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcnts8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcntu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcntu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombinef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcombinef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombinep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcombinep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombinep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcombinep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombines16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcombines16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombines32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcombines32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombines64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcombines64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombines8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcombines8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombineu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcombineu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombineu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcombineu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombineu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcombineu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcombineu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcombineu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreatef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcreatef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreatep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcreatep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreatep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcreatep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreates16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcreates16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreates32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcreates32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreates64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcreates64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreates8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcreates8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreateu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcreateu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreateu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcreateu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreateu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcreateu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcreateu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcreateu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQ_nf32_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvtQ_nf32_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQ_nf32_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvtQ_nf32_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQ_ns32_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvtQ_ns32_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQ_nu32_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvtQ_nu32_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQf32_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvtQf32_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQf32_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvtQf32_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQs32_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvtQs32_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtQu32_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvtQu32_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvt_nf32_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvt_nf32_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvt_nf32_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvt_nf32_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvt_ns32_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvt_ns32_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvt_nu32_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvt_nu32_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtf32_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvtf32_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtf32_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvtf32_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvts32_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvts32_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vcvtu32_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vcvtu32_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanes64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_laneu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_float32x4_t = vdupq_n_f32 (arg0_float32_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_np16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_np16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_poly16x8_t = vdupq_n_p16 (arg0_poly16_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_np8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_np8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_poly8x16_t = vdupq_n_p8 (arg0_poly8_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_int16x8_t = vdupq_n_s16 (arg0_int16_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_int32x4_t = vdupq_n_s32 (arg0_int32_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,6 +16,4 @@
+   out_int64x2_t = vdupq_n_s64 (arg0_int64_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_int8x16_t = vdupq_n_s8 (arg0_int8_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_uint16x8_t = vdupq_n_u16 (arg0_uint16_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_uint32x4_t = vdupq_n_u32 (arg0_uint32_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,6 +16,4 @@
+   out_uint64x2_t = vdupq_n_u64 (arg0_uint64_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_uint8x16_t = vdupq_n_u8 (arg0_uint8_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanes64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_laneu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_nf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_nf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_float32x2_t = vdup_n_f32 (arg0_float32_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_np16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_np16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_poly16x4_t = vdup_n_p16 (arg0_poly16_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_np8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_np8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_poly8x8_t = vdup_n_p8 (arg0_poly8_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_int16x4_t = vdup_n_s16 (arg0_int16_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_int32x2_t = vdup_n_s32 (arg0_int32_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,4 @@
+   out_int64x1_t = vdup_n_s64 (arg0_int64_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_int8x8_t = vdup_n_s8 (arg0_int8_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_uint16x4_t = vdup_n_u16 (arg0_uint16_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_uint32x2_t = vdup_n_u32 (arg0_uint32_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,4 @@
+   out_uint64x1_t = vdup_n_u64 (arg0_uint64_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vdup_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vdup_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_uint8x8_t = vdup_n_u8 (arg0_uint8_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veorQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veorQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veorQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veorQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veorQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veorQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veorQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veorQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veorQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veors16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veors16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veors32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veors32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veors64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veors64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_int64x1_t = veor_s64 (arg0_int64x1_t, arg1_int64x1_t);
+ }
+ 
+-/* { dg-final { scan-assembler "veor\[ 	\]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veors8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veors8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veoru16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veoru16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veoru32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veoru32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veoru64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veoru64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_uint64x1_t = veor_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+ }
+ 
+-/* { dg-final { scan-assembler "veor\[ 	\]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/veoru8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/veoru8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextQp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextQp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vexts16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vexts16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vexts32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vexts32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vexts64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vexts64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vexts8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vexts8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vextu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vextu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vfp-shift-a2t2.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vfp-shift-a2t2.c
+@@ -0,0 +1,27 @@
++/* Check that NEON vector shifts support immediate values == size.  /*
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint16x8_t test_vshll_n_u8 (uint8x8_t a)
++{
++    return vshll_n_u8(a, 8);
++}
++
++uint32x4_t test_vshll_n_u16 (uint16x4_t a)
++{   
++    return vshll_n_u16(a, 16);
++}
++
++uint64x2_t test_vshll_n_u32 (uint32x2_t a)
++{
++    return vshll_n_u32(a, 32);
++}
++
++/* { dg-final { scan-assembler "vshll\.u16\[ 	\]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vshll\.u32\[ 	\]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vshll\.u8\[ 	\]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanes64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_laneu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_highf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_highp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_highp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_highs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_highs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_highs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_highs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_highu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_highu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_highu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_highu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_highu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lanes64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,4 @@
+   out_int64_t = vget_lane_s64 (arg0_int64x1_t, 0);
+ }
+ 
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[rR\]\[0-9\]+, \[rR\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_laneu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,4 @@
+   out_uint64_t = vget_lane_u64 (arg0_uint64x1_t, 0);
+ }
+ 
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[rR\]\[0-9\]+, \[rR\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhaddQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhaddQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhaddQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhaddQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhaddQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhaddQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhadds16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhadds16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhadds32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhadds32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhadds8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhadds8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhaddu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhaddu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhaddu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhaddu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhsubQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhsubQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhsubQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhsubQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhsubQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhsubQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhsubs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhsubs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhsubs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhsubu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhsubu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vhsubu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vhsubu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dups8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_dupu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Q_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1Qu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dups8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_dupu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld1u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld1u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Q_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2Qu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dups8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_dupu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld2u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld2u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Q_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3Qu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dups8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_dupu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld3u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld3u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Q_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4Qu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dups8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_dupu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vld4u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vld4u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmaxQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmaxQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmaxQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmaxQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmaxQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmaxQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmaxQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmaxf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmaxs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmaxs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmaxs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmaxu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmaxu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmaxu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmaxu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vminQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vminQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vminQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vminQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vminQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vminQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vminQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vminf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmins16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmins16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmins32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmins32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmins8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmins8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vminu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vminu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vminu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vminu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_nf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_nf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQ_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmla_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmla_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmla_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmla_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmla_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_nf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmla_nf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmla_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmla_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmla_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmla_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmla_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlaf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlaf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlal_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlal_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlal_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlal_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlal_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlal_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlal_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlal_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlal_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlals16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlals16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlals32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlals32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlals8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlals8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlalu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlalu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlalu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlalu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlalu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlalu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlas16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlas16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlas32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlas32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlas8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlas8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlau16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlau16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlau32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlau32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlau8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlau8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_nf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_nf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQ_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmls_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmls_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmls_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmls_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmls_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_nf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmls_nf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmls_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmls_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmls_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmls_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmls_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsl_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsls8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsls8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlslu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlslu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlslu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlslu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlslu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlslu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlss16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlss16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlss32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlss32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlss8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlss8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmlsu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmlsu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_float32x4_t = vmovq_n_f32 (arg0_float32_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_np16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_np16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_poly16x8_t = vmovq_n_p16 (arg0_poly16_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_np8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_np8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_poly8x16_t = vmovq_n_p8 (arg0_poly8_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_int16x8_t = vmovq_n_s16 (arg0_int16_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_int32x4_t = vmovq_n_s32 (arg0_int32_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,6 +16,4 @@
+   out_int64x2_t = vmovq_n_s64 (arg0_int64_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_int8x16_t = vmovq_n_s8 (arg0_int8_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_uint16x8_t = vmovq_n_u16 (arg0_uint16_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_uint32x4_t = vmovq_n_u32 (arg0_uint32_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,6 +16,4 @@
+   out_uint64x2_t = vmovq_n_u64 (arg0_uint64_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_uint8x16_t = vmovq_n_u8 (arg0_uint8_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[qQ\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[qQ\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_nf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmov_nf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_float32x2_t = vmov_n_f32 (arg0_float32_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_np16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmov_np16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_poly16x4_t = vmov_n_p16 (arg0_poly16_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_np8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmov_np8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_poly8x8_t = vmov_n_p8 (arg0_poly8_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmov_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_int16x4_t = vmov_n_s16 (arg0_int16_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmov_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_int32x2_t = vmov_n_s32 (arg0_int32_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmov_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,4 @@
+   out_int64x1_t = vmov_n_s64 (arg0_int64_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmov_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_int8x8_t = vmov_n_s8 (arg0_int8_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmov_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_uint16x4_t = vmov_n_u16 (arg0_uint16_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.16\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmov_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_uint32x2_t = vmov_n_u32 (arg0_uint32_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.32\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmov_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,4 @@
+   out_uint64x1_t = vmov_n_u64 (arg0_uint64_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmov_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmov_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -15,5 +16,5 @@
+   out_uint8x8_t = vmov_n_u8 (arg0_uint8_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { scan-assembler "vdup\.8\[ 	\]+\[dD\]\[0-9\]+, (\[rR\]\[0-9\]+|\[dD\]\[0-9\]+\\\[\[0-9\]+\\\])!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovls8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovls8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovlu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovlu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovlu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovlu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovlu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovlu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovnu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovnu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovnu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovnu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmovnu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmovnu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_nf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_nf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQ_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmul_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmul_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmul_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmul_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmul_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_nf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmul_nf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmul_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmul_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmul_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmul_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmul_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmull_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmull_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmull_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmull_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmull_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmull_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmull_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmull_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmull_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmullp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmullp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulls8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulls8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmullu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmullu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmullu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmullu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmullu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmullu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmuls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmuls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmuls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmuls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmuls8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmuls8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmulu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmulu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnQp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmvnQp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmvnQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmvnQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmvnQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmvnQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmvnQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmvnQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmvnp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmvns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmvns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmvns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmvnu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmvnu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vmvnu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vmvnu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vnegQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vnegQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vnegQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vnegQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vnegf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vnegs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vnegs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vnegs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vnegs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vornQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vornQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vornQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vornQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vornQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vornQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vornQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vornQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_int64x1_t = vorn_s64 (arg0_int64x1_t, arg1_int64x1_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vorn\[ 	\]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vornu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vornu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vornu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_uint64x1_t = vorn_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vorn\[ 	\]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vornu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vornu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorrQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorrQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorrQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorrQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorrQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorrQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorrQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorrQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorrs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorrs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorrs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_int64x1_t = vorr_s64 (arg0_int64x1_t, arg1_int64x1_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vorr\[ 	\]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorrs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorrs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorru16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorru16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorru32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorru32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorru64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorru64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_uint64x1_t = vorr_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vorr\[ 	\]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vorru8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vorru8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadalQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadalQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadalQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadalQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadalQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadalQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadals16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadals16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadals32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadals32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadals8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadals8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadalu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadalu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadalu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadalu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddlQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddls8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddls8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddlu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddlu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddlu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddlu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadds16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadds16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadds32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadds32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpadds8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpadds8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpaddu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpaddu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmaxf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpmaxf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmaxs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpmaxs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmaxs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpmaxs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmaxs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpmaxs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmaxu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpmaxu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmaxu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpmaxu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmaxu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpmaxu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpminf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpminf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmins16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpmins16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmins32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpmins32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpmins8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpmins8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpminu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpminu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpminu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpminu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vpminu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vpminu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQ_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQ_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQ_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQ_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulh_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulh_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulh_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulh_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulh_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulh_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulh_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulh_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRdmulhs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshlQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshls64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshls64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshls8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshls8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshlu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshlu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshlu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshlu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshlu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshrn_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrun_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshrun_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrun_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshrun_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqRshrun_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqRshrun_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqabsQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqabsQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqabsQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqabsQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqabsQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqabsQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqabss16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqabss16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqabss32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqabss32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqabss8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqabss8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqaddQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqaddQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqaddQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqaddQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqaddQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqaddQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqaddQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqaddQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqadds16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqadds16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqadds32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqadds32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqadds64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqadds64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqadds8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqadds8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqaddu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqaddu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqaddu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqaddu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqaddu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlal_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmlal_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlal_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmlal_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlal_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmlal_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlal_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmlal_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlals16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmlals16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlals32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmlals32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsl_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsl_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsl_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsl_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsl_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsl_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsl_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsl_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmlsls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQ_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQ_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQ_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQ_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulh_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmulh_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulh_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmulh_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulh_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmulh_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulh_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmulh_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmulhs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmull_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmull_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmull_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmull_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmull_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmull_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmull_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmull_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmulls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqdmulls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqdmulls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqmovns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqmovns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqmovns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovnu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqmovnu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovnu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqmovnu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovnu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqmovnu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovuns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqmovuns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovuns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqmovuns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqmovuns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqmovuns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqnegQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqnegQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqnegQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqnegQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqnegQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqnegQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqnegs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqnegs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqnegs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqnegs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqnegs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqnegs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQ_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshl_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshl_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshl_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshl_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshl_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshl_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshl_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshl_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshl_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshls64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshls64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshls8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshls8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshluQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshluQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshluQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshluQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshluQ_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshluQ_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshluQ_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshluQ_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlu_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlu_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlu_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshlu_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshlu_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshrn_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrun_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshrun_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrun_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshrun_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqshrun_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqshrun_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vqsubu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vqsubu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrecpeQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrecpeQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrecpeQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrecpeQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrecpef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrecpef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrecpeu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrecpeu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrecpsQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrecpsQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrecpsf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrecpsf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQf32_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp16_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQp8_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs16_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs32_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs64_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQs8_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu16_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu32_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu64_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretQu8_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretf32_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp16_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretp8_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets16_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets32_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets64_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterprets8_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu16_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu32_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu64_u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vreinterpretu8_u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev16Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev16Qp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev16Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev16Qs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev16Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev16Qu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev16p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev16p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev16s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev16s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev16u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev16u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev32Qu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev32p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev32p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev32s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev32s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev32u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev32u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev32u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64Qu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrev64u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrev64u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrsqrteQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrsqrteQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrsqrteQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrsqrteQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrsqrtef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrsqrtef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrsqrteu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrsqrteu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrsqrtsQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrsqrtsQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vrsqrtsf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vrsqrtsf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanes64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_laneu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsetQ_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vset_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vset_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vset_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vset_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vset_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vset_lanes64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_int64x1_t = vset_lane_s64 (arg0_int64_t, arg1_int64x1_t, 0);
+ }
+ 
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vset_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vset_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vset_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vset_laneu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_uint64x1_t = vset_lane_u64 (arg0_uint64_t, arg1_uint64x1_t, 0);
+ }
+ 
+-/* { dg-final { scan-assembler "vmov\[ 	\]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vset_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vset_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQ_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshl_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshl_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshl_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshl_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshl_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshl_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshl_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshl_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshl_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshll_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshll_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshll_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshll_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshll_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshll_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshll_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshll_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshll_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshll_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshll_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshll_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshls64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshls64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshls8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshls8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshlu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshlu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshrQ_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshr_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshr_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshr_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshr_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshr_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshr_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshr_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshr_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshr_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrn_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshrn_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrn_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshrn_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrn_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshrn_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrn_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshrn_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrn_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshrn_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vshrn_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vshrn_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_np16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_np16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_np8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_np8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsliQ_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_np16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsli_np16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_np8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsli_np8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsli_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsli_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsli_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsli_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsli_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsli_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsli_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsli_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsli_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsraQ_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsra_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsra_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsra_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsra_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsra_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsra_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsra_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsra_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsra_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_np16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_np16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_np8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_np8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsriQ_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_np16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsri_np16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_np8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsri_np8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_ns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsri_ns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_ns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsri_ns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsri_ns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_ns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsri_ns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_nu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsri_nu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_nu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsri_nu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsri_nu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsri_nu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsri_nu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Qu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Q_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2Qu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst2u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst2u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Q_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3Qu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst3u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst3u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Q_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4Qu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanef32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanef32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanep16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanep16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanep8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanep8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_lanes8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4_laneu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4f32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4f32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4p16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4p16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4s16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4s16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4s32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4s32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4s64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4s64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4u16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4u16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4u32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4u32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4u64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4u64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vst4u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vst4u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubQs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubQu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubhns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubhns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubhns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubhns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubhns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubhns64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubhnu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubhnu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubhnu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubhnu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubhnu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubhnu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubls16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubls16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubls32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubls32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubls8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubls8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsublu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsublu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsublu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsublu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsublu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsublu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubs64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_int64x1_t = vsub_s64 (arg0_int64x1_t, arg1_int64x1_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vsub\.i64\[ 	\]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubu64.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+@@ -16,5 +17,4 @@
+   out_uint64x1_t = vsub_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+ }
+ 
+-/* { dg-final { scan-assembler "vsub\.i64\[ 	\]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ 	\]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+ /* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubws16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubws16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubws32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubws32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubws8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubws8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubwu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubwu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubwu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubwu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vsubwu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vsubwu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl1p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbl1p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl1s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbl1s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl1u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbl1u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl2p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbl2p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl2s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbl2s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl2u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbl2u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl3p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbl3p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl3s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbl3s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl3u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbl3u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl4p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbl4p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl4s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbl4s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbl4u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbl4u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx1p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbx1p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx1s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbx1s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx1u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbx1u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx2p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbx2p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx2s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbx2s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx2u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbx2u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx3p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbx3p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx3s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbx3s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx3u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbx3u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx4p8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbx4p8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx4s8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbx4s8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtbx4u8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtbx4u8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnQp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnQp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrns16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrns16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrns32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrns32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrns8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrns8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtrnu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtrnu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstQp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtstQp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtstQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtstQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtstQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtstQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtstQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtstQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtstp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtsts16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtsts16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtsts32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtsts32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtsts8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtsts8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtstu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtstu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vtstu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vtstu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpQp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpQp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzps16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzps16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzps32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzps32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzps8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzps8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vuzpu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vuzpu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipQf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipQp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipQp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQs16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipQs16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQs32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipQs32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQs8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipQs8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipQu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipQu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipQu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipQu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipf32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipf32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipp16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipp16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipp8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipp8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzips16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzips16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzips32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzips32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzips8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzips8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipu16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipu16.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipu32.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipu32.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon/vzipu8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon/vzipu8.c
+@@ -3,7 +3,8 @@
+ 
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target arm_neon_ok } */
+-/* { dg-options "-save-temps -O0 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-save-temps -O0" } */
++/* { dg-add-options arm_neon } */
+ 
+ #include "arm_neon.h"
+ 
+--- a/src/gcc/testsuite/gcc.target/arm/neon-cond-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-cond-1.c
+@@ -1,6 +1,7 @@
+ /* { dg-do run } */
+ /* { dg-require-effective-target arm_neon_hw } */
+-/* { dg-options "-O2 -mfpu=neon -mfloat-abi=softfp" } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
+ /* Check that the arm_final_prescan_insn ccfsm code does not try to
+  * conditionally execute NEON instructions.  */
+ #include <arm_neon.h>
+--- a/src/gcc/testsuite/gcc.target/arm/neon-load-df0.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-load-df0.c
+@@ -0,0 +1,14 @@
++/* Test the optimization of loading 0.0 for ARM Neon.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++double x;
++void bar ()
++{
++  x = 0.0;
++}
++/* { dg-final { scan-assembler "vmov\.i32\[ 	\]+\[dD\]\[0-9\]+, #0\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-modes-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-modes-1.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O1" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++void neon_internal_error(int *dst, int *src)
++{
++  uint16x8x4_t sval;
++
++  sval = vld4q_u16((void *)src);
++  vst4q_u16((void *)dst,sval);
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vadds64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vadds64.c
+@@ -0,0 +1,21 @@
++/* Test the `vadd_s64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  int64x1_t out_int64x1_t = 0;
++  int64x1_t arg0_int64x1_t = (int64x1_t)0xdeadbeef00000000LL;
++  int64x1_t arg1_int64x1_t = (int64x1_t)0x00000000deadbeefLL;
++
++  out_int64x1_t = vadd_s64 (arg0_int64x1_t, arg1_int64x1_t);
++  if (out_int64x1_t != (int64x1_t)0xdeadbeefdeadbeefLL)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vaddu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vaddu64.c
+@@ -0,0 +1,21 @@
++/* Test the `vadd_u64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  uint64x1_t out_uint64x1_t = 0;
++  uint64x1_t arg0_uint64x1_t = (uint64x1_t)0xdeadbeef00000000LL;
++  uint64x1_t arg1_uint64x1_t = (uint64x1_t)0x00000000deadbeefLL;
++
++  out_uint64x1_t = vadd_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
++  if (out_uint64x1_t != (uint64x1_t)0xdeadbeefdeadbeefLL)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vands64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vands64.c
+@@ -0,0 +1,21 @@
++/* Test the `vand_s64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  int64x1_t out_int64x1_t = 0;
++  int64x1_t arg0_int64x1_t = (int64x1_t)0xdeadbeef00000000LL;
++  int64x1_t arg1_int64x1_t = (int64x1_t)0xdead00000000beefLL;
++
++  out_int64x1_t = vand_s64 (arg0_int64x1_t, arg1_int64x1_t);
++  if (out_int64x1_t != (int64x1_t)0xdead000000000000LL)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vandu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vandu64.c
+@@ -0,0 +1,21 @@
++/* Test the `vand_u64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  uint64x1_t out_uint64x1_t = 0;
++  uint64x1_t arg0_uint64x1_t = (uint64x1_t)0xdeadbeef00000000LL;
++  uint64x1_t arg1_uint64x1_t = (uint64x1_t)0xdead00000000beefLL;
++
++  out_uint64x1_t = vand_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
++  if (out_uint64x1_t != (uint64x1_t)0xdead000000000000LL)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vbics64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vbics64.c
+@@ -0,0 +1,21 @@
++/* Test the `vbic_s64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  int64x1_t out_int64x1_t = 0;
++  int64x1_t arg0_int64x1_t = (int64x1_t)0xdeadbeef00000000LL;
++  int64x1_t arg1_int64x1_t = (int64x1_t)(~0xdead00000000beefLL);
++
++  out_int64x1_t = vbic_s64 (arg0_int64x1_t, arg1_int64x1_t);
++  if (out_int64x1_t != (int64x1_t)0xdead000000000000LL)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vbicu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vbicu64.c
+@@ -0,0 +1,21 @@
++/* Test the `vbic_u64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  uint64x1_t out_uint64x1_t = 0;
++  uint64x1_t arg0_uint64x1_t = (uint64x1_t)0xdeadbeef00000000LL;
++  uint64x1_t arg1_uint64x1_t = (uint64x1_t)(~0xdead00000000beefLL);
++
++  out_uint64x1_t = vbic_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
++  if (out_uint64x1_t != (uint64x1_t)0xdead000000000000LL)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-1.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_f32' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++float32x4_t out_float32x4_t;
++void test_vdupq_nf32 (void)
++{
++  out_float32x4_t = vdupq_n_f32 (0.0);
++}
++
++/* { dg-final { scan-assembler "vmov\.f32\[ 	\]+\[qQ\]\[0-9\]+, #0\.0\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-10.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-10.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint32x4_t out_uint32x4_t;
++void test_vdupq_nu32 (void)
++{
++  out_uint32x4_t = vdupq_n_u32 (~0x12000000);
++}
++
++/* { dg-final { scan-assembler "vmov\.i32\[ 	\]+\[qQ\]\[0-9\]+, #3992977407\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-11.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-11.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u16' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint16x8_t out_uint16x8_t;
++void test_vdupq_nu16 (void)
++{
++  out_uint16x8_t = vdupq_n_u16 (0x12);
++}
++
++/* { dg-final { scan-assembler "vmov\.i16\[ 	\]+\[qQ\]\[0-9\]+, #18\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-12.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-12.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u16' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint16x8_t out_uint16x8_t;
++void test_vdupq_nu16 (void)
++{
++  out_uint16x8_t = vdupq_n_u16 (0x1200);
++}
++
++/* { dg-final { scan-assembler "vmov\.i16\[ 	\]+\[qQ\]\[0-9\]+, #4608\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-13.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-13.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u16' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint16x8_t out_uint16x8_t;
++void test_vdupq_nu16 (void)
++{
++  out_uint16x8_t = vdupq_n_u16 (~0x12);
++}
++
++/* { dg-final { scan-assembler "vmov\.i16\[ 	\]+\[qQ\]\[0-9\]+, #65517\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-14.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-14.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u16' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint16x8_t out_uint16x8_t;
++void test_vdupq_nu16 (void)
++{
++  out_uint16x8_t = vdupq_n_u16 (~0x1200);
++}
++
++/* { dg-final { scan-assembler "vmov\.i16\[ 	\]+\[qQ\]\[0-9\]+, #60927\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-15.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-15.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u8' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint8x16_t out_uint8x16_t;
++void test_vdupq_nu8 (void)
++{
++  out_uint8x16_t = vdupq_n_u8 (0x12);
++}
++
++/* { dg-final { scan-assembler "vmov\.i8\[ 	\]+\[qQ\]\[0-9\]+, #18\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-16.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-16.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint32x4_t out_uint32x4_t;
++void test_vdupq_nu32 (void)
++{
++  out_uint32x4_t = vdupq_n_u32 (0x12ff);
++}
++
++/* { dg-final { scan-assembler "vmov\.i32\[ 	\]+\[qQ\]\[0-9\]+, #4863\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-17.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-17.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint32x4_t out_uint32x4_t;
++void test_vdupq_nu32 (void)
++{
++  out_uint32x4_t = vdupq_n_u32 (0x12ffff);
++}
++
++/* { dg-final { scan-assembler "vmov\.i32\[ 	\]+\[qQ\]\[0-9\]+, #1245183\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-18.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-18.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint32x4_t out_uint32x4_t;
++void test_vdupq_nu32 (void)
++{
++  out_uint32x4_t = vdupq_n_u32 (~0x12ff);
++}
++
++/* { dg-final { scan-assembler "vmov\.i32\[ 	\]+\[qQ\]\[0-9\]+, #4294962432\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-19.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-19.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint32x4_t out_uint32x4_t;
++void test_vdupq_nu32 (void)
++{
++  out_uint32x4_t = vdupq_n_u32 (~0x12ffff);
++}
++
++/* { dg-final { scan-assembler "vmov\.i32\[ 	\]+\[qQ\]\[0-9\]+, #4293722112\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-2.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_f32' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++float32x4_t out_float32x4_t;
++void test_vdupq_nf32 (void)
++{
++  out_float32x4_t = vdupq_n_f32 (0.125);
++}
++
++/* { dg-final { scan-assembler "vmov\.f32\[ 	\]+\[qQ\]\[0-9\]+, #1\.25e-1\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-3.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-3.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint32x4_t out_uint32x4_t;
++void test_vdupq_nu32 (void)
++{
++  out_uint32x4_t = vdupq_n_u32 (0x12);
++}
++
++/* { dg-final { scan-assembler "vmov\.i32\[ 	\]+\[qQ\]\[0-9\]+, #18\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-4.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-4.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint32x4_t out_uint32x4_t;
++void test_vdupq_nu32 (void)
++{
++  out_uint32x4_t = vdupq_n_u32 (0x1200);
++}
++
++/* { dg-final { scan-assembler "vmov\.i32\[ 	\]+\[qQ\]\[0-9\]+, #4608\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-5.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-5.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint32x4_t out_uint32x4_t;
++void test_vdupq_nu32 (void)
++{
++  out_uint32x4_t = vdupq_n_u32 (0x120000);
++}
++
++/* { dg-final { scan-assembler "vmov\.i32\[ 	\]+\[qQ\]\[0-9\]+, #1179648\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-6.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-6.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint32x4_t out_uint32x4_t;
++void test_vdupq_nu32 (void)
++{
++  out_uint32x4_t = vdupq_n_u32 (0x12000000);
++}
++
++/* { dg-final { scan-assembler "vmov\.i32\[ 	\]+\[qQ\]\[0-9\]+, #301989888\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-7.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-7.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint32x4_t out_uint32x4_t;
++void test_vdupq_nu32 (void)
++{
++  out_uint32x4_t = vdupq_n_u32 (~0x12);
++}
++
++/* { dg-final { scan-assembler "vmov\.i32\[ 	\]+\[qQ\]\[0-9\]+, #4294967277\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-8.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-8.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint32x4_t out_uint32x4_t;
++void test_vdupq_nu32 (void)
++{
++  out_uint32x4_t = vdupq_n_u32 (~0x1200);
++}
++
++/* { dg-final { scan-assembler "vmov\.i32\[ 	\]+\[qQ\]\[0-9\]+, #4294962687\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-9.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-9.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint32x4_t out_uint32x4_t;
++void test_vdupq_nu32 (void)
++{
++  out_uint32x4_t = vdupq_n_u32 (~0x120000);
++}
++
++/* { dg-final { scan-assembler "vmov\.i32\[ 	\]+\[qQ\]\[0-9\]+, #4293787647\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdupQ_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdupQ_lanes64.c
+@@ -0,0 +1,22 @@
++/* Test the `vdupq_lanes64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  int64x2_t out_int64x2_t = {0, 0};
++  int64_t arg0_int64_t = (int64_t) 0xdeadbeef;
++
++  out_int64x2_t = vdupq_lane_s64 ((int64x1_t)arg0_int64_t, 0);
++  if (vgetq_lane_s64 (out_int64x2_t, 0) != arg0_int64_t)
++    abort();
++  if (vgetq_lane_s64 (out_int64x2_t, 1) != arg0_int64_t)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdupQ_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdupQ_laneu64.c
+@@ -0,0 +1,22 @@
++/* Test the `vdupq_laneu64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  uint64x2_t out_uint64x2_t = {0, 0};
++  uint64_t arg0_uint64_t = (uint64_t) 0xdeadbeef;
++
++  out_uint64x2_t = vdupq_lane_u64 ((uint64x1_t)arg0_uint64_t, 0);
++  if (vgetq_lane_u64 (out_uint64x2_t, 0) != arg0_uint64_t)
++    abort();
++  if (vgetq_lane_u64 (out_uint64x2_t, 1) != arg0_uint64_t)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdupQ_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdupQ_ns64.c
+@@ -0,0 +1,22 @@
++/* Test the `vdupq_ns64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  int64x2_t out_int64x2_t = {0, 0};
++  int64_t arg0_int64_t = (int64_t) 0xdeadbeef;
++
++  out_int64x2_t = vdupq_n_s64 (arg0_int64_t);
++  if (vgetq_lane_s64 (out_int64x2_t, 0) != arg0_int64_t)
++    abort();
++  if (vgetq_lane_s64 (out_int64x2_t, 1) != arg0_int64_t)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdupQ_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdupQ_nu64.c
+@@ -0,0 +1,22 @@
++/* Test the `vdupq_nu64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  uint64x2_t out_uint64x2_t = {0, 0};
++  uint64_t arg0_uint64_t = (uint64_t) 0xdeadbeef;
++
++  out_uint64x2_t = vdupq_n_u64 (arg0_uint64_t);
++  if (vgetq_lane_u64 (out_uint64x2_t, 0) != arg0_uint64_t)
++    abort();
++  if (vgetq_lane_u64 (out_uint64x2_t, 1) != arg0_uint64_t)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup_ns64.c
+@@ -0,0 +1,20 @@
++/* Test the `vdup_ns64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  int64x1_t out_int64x1_t = 0;
++  int64_t arg0_int64_t = (int64_t) 0xdeadbeef;
++
++  out_int64x1_t = vdup_n_s64 (arg0_int64_t);
++  if ((int64_t)out_int64x1_t != arg0_int64_t)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup_nu64.c
+@@ -0,0 +1,20 @@
++/* Test the `vdup_nu64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  uint64x1_t out_uint64x1_t = 0;
++  uint64_t arg0_uint64_t = (uint64_t) 0xdeadbeef;
++
++  out_uint64x1_t = vdup_n_u64 (arg0_uint64_t);
++  if ((uint64_t)out_uint64x1_t != arg0_uint64_t)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-veors64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-veors64.c
+@@ -0,0 +1,21 @@
++/* Test the `veor_s64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  int64x1_t out_int64x1_t = 0;
++  int64x1_t arg0_int64x1_t = (int64x1_t)0xdeadbeef00000000LL;
++  int64x1_t arg1_int64x1_t = (int64x1_t)0xdead00000000beefLL;
++
++  out_int64x1_t = veor_s64 (arg0_int64x1_t, arg1_int64x1_t);
++  if (out_int64x1_t != (int64x1_t)0x0000beef0000beefLL)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-veoru64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-veoru64.c
+@@ -0,0 +1,21 @@
++/* Test the `veor_u64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  uint64x1_t out_uint64x1_t = 0;
++  uint64x1_t arg0_uint64x1_t = (uint64x1_t)0xdeadbeef00000000LL;
++  uint64x1_t arg1_uint64x1_t = (uint64x1_t)0xdead00000000beefLL;
++
++  out_uint64x1_t = veor_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
++  if (out_uint64x1_t != (uint64x1_t)0x0000beef0000beefLL)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vget_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vget_lanes64.c
+@@ -0,0 +1,20 @@
++/* Test the `vget_lane_s64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  int64_t out_int64_t = 0;
++  int64x1_t arg0_int64x1_t = (int64x1_t) 0xdeadbeefbadf00dLL;
++
++  out_int64_t = vget_lane_s64 (arg0_int64x1_t, 0);
++  if (out_int64_t != (int64_t)arg0_int64x1_t)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vget_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vget_laneu64.c
+@@ -0,0 +1,20 @@
++/* Test the `vget_lane_u64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  uint64_t out_uint64_t = 0;
++  uint64x1_t arg0_uint64x1_t = (uint64x1_t) 0xdeadbeefbadf00dLL;
++
++  out_uint64_t = vget_lane_u64 (arg0_uint64x1_t, 0);
++  if (out_uint64_t != (uint64_t)arg0_uint64x1_t)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vmla-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vmla-1.c
+@@ -0,0 +1,11 @@
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O2 -ftree-vectorize" } */
++/* { dg-add-options arm_neon } */
++/* { dg-final { scan-assembler "vmla\\.f32" } } */
++
++/* Verify that VMLA is used.  */
++void f1(int n, float a, float x[], float y[]) {
++  int i;
++  for (i = 0; i < n; ++i)
++    y[i] = a * x[i] + y[i];
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vmls-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vmls-1.c
+@@ -0,0 +1,11 @@
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O2 -ftree-vectorize" } */
++/* { dg-add-options arm_neon } */
++/* { dg-final { scan-assembler "vmls\\.f32" } } */
++
++/* Verify that VMLS is used.  */
++void f1(int n, float a, float x[], float y[]) {
++  int i;
++  for (i = 0; i < n; ++i)
++    y[i] = y[i] - a * x[i];
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vmovQ_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vmovQ_ns64.c
+@@ -0,0 +1,22 @@
++/* Test the `vmovq_ns64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  int64x2_t out_int64x2_t = {0, 0};
++  int64_t arg0_int64_t = (int64_t) 0xdeadbeef;
++
++  out_int64x2_t = vmovq_n_s64 (arg0_int64_t);
++  if (vgetq_lane_s64 (out_int64x2_t, 0) != arg0_int64_t)
++    abort();
++  if (vgetq_lane_s64 (out_int64x2_t, 1) != arg0_int64_t)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vmovQ_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vmovQ_nu64.c
+@@ -0,0 +1,23 @@
++/* Test the `vmovq_nu64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  uint64x2_t out_uint64x2_t = {0, 0};
++  uint64_t arg0_uint64_t = (uint64_t) 0xdeadbeef;
++
++  out_uint64x2_t = vmovq_n_u64 (arg0_uint64_t);
++  if (vgetq_lane_u64 (out_uint64x2_t, 0) != arg0_uint64_t)
++    abort();
++  if (vgetq_lane_u64 (out_uint64x2_t, 1) != arg0_uint64_t)
++    abort();
++  return 0;
++}
++
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vmov_ns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vmov_ns64.c
+@@ -0,0 +1,20 @@
++/* Test the `vmov_ns64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  int64x1_t out_int64x1_t = 0;
++  int64_t arg0_int64_t = (int64_t) 0xdeadbeef;
++
++  out_int64x1_t = vmov_n_s64 (arg0_int64_t);
++  if ((int64_t)out_int64x1_t != arg0_int64_t)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vmov_nu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vmov_nu64.c
+@@ -0,0 +1,20 @@
++/* Test the `vmov_nu64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  uint64x1_t out_uint64x1_t = 0;
++  uint64_t arg0_uint64_t = (uint64_t) 0xdeadbeef;
++
++  out_uint64x1_t = vmov_n_u64 (arg0_uint64_t);
++  if ((uint64_t)out_uint64x1_t != arg0_uint64_t)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vorns64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vorns64.c
+@@ -0,0 +1,21 @@
++/* Test the `vorn_s64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  int64x1_t out_int64x1_t = 0;
++  int64x1_t arg0_int64x1_t = (int64x1_t)0xdeadbeef00000000LL;
++  int64x1_t arg1_int64x1_t = (int64x1_t)(~0xdead00000000beefLL);
++
++  out_int64x1_t = vorn_s64 (arg0_int64x1_t, arg1_int64x1_t);
++  if (out_int64x1_t != (int64x1_t)0xdeadbeef0000beefLL)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vornu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vornu64.c
+@@ -0,0 +1,21 @@
++/* Test the `vorn_u64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  uint64x1_t out_uint64x1_t = 0;
++  uint64x1_t arg0_uint64x1_t = (uint64x1_t)0xdeadbeef00000000LL;
++  uint64x1_t arg1_uint64x1_t = (uint64x1_t)(~0xdead00000000beefLL);
++
++  out_uint64x1_t = vorn_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
++  if (out_uint64x1_t != (uint64x1_t)0xdeadbeef0000beefLL)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vorrs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vorrs64.c
+@@ -0,0 +1,21 @@
++/* Test the `vorr_s64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  int64x1_t out_int64x1_t = 0;
++  int64x1_t arg0_int64x1_t = (int64x1_t)0xdeadbeef00000000LL;
++  int64x1_t arg1_int64x1_t = (int64x1_t)0xdead00000000beefLL;
++
++  out_int64x1_t = vorr_s64 (arg0_int64x1_t, arg1_int64x1_t);
++  if (out_int64x1_t != (int64x1_t)0xdeadbeef0000beefLL)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vorru64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vorru64.c
+@@ -0,0 +1,21 @@
++/* Test the `vorr_u64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  uint64x1_t out_uint64x1_t = 0;
++  uint64x1_t arg0_uint64x1_t = (uint64x1_t)0xdeadbeef00000000LL;
++  uint64x1_t arg1_uint64x1_t = (uint64x1_t)0xdead00000000beefLL;
++
++  out_uint64x1_t = vorr_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
++  if (out_uint64x1_t != (uint64x1_t)0xdeadbeef0000beefLL)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vset_lanes64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vset_lanes64.c
+@@ -0,0 +1,21 @@
++/* Test the `vset_lane_s64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  int64x1_t out_int64x1_t = 0;
++  int64_t arg0_int64_t = 0xf00f00f00LL;
++  int64x1_t arg1_int64x1_t = (int64x1_t) 0xdeadbeefbadf00dLL;
++
++  out_int64x1_t = vset_lane_s64 (arg0_int64_t, arg1_int64x1_t, 0);
++  if ((int64_t)out_int64x1_t != arg0_int64_t)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vset_laneu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vset_laneu64.c
+@@ -0,0 +1,21 @@
++/* Test the `vset_lane_s64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  uint64x1_t out_uint64x1_t = 0;
++  uint64_t arg0_uint64_t = 0xf00f00f00LL;
++  uint64x1_t arg1_uint64x1_t = (uint64x1_t) 0xdeadbeefbadf00dLL;
++
++  out_uint64x1_t = vset_lane_u64 (arg0_uint64_t, arg1_uint64x1_t, 0);
++  if ((uint64_t)out_uint64x1_t != arg0_uint64_t)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vsubs64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vsubs64.c
+@@ -0,0 +1,21 @@
++/* Test the `vsub_s64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  int64x1_t out_int64x1_t = 0;
++  int64x1_t arg0_int64x1_t = (int64x1_t)0xdeadbeefdeadbeefLL;
++  int64x1_t arg1_int64x1_t = (int64x1_t)0x0000beefdead0000LL;
++
++  out_int64x1_t = vsub_s64 (arg0_int64x1_t, arg1_int64x1_t);
++  if (out_int64x1_t != (int64x1_t)0xdead00000000beefLL)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vsubu64.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vsubu64.c
+@@ -0,0 +1,21 @@
++/* Test the `vsub_u64' ARM Neon intrinsic.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O0" } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++#include <stdlib.h>
++
++int main (void)
++{
++  uint64x1_t out_uint64x1_t = 0;
++  uint64x1_t arg0_uint64x1_t = (uint64x1_t)0xdeadbeefdeadbeefLL;
++  uint64x1_t arg1_uint64x1_t = (uint64x1_t)0x0000beefdead0000LL;
++
++  out_uint64x1_t = vsub_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
++  if (out_uint64x1_t != (uint64x1_t)0xdead00000000beefLL)
++    abort();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/pr39429.c
++++ b/src/gcc/testsuite/gcc.target/arm/pr39429.c
+@@ -0,0 +1,28 @@
++/* PR target/39429 */
++/* { dg-do run } */
++/* { dg-options "-O2 -mtune=arm740t" } */
++
++struct obj {
++    unsigned int _filler[270];
++    unsigned int mapsize;
++    unsigned int size;
++};
++
++int __attribute__((noinline)) useOffScreen(struct obj *obj)
++{
++    unsigned int size = obj->size;
++    unsigned int mapsize = obj->mapsize;
++
++    return (mapsize - size) < 16*1024 ? 0 : 1;
++}
++
++int main(void)
++{
++    struct obj obj;
++
++    obj.mapsize = 0;
++    obj.size = 0;
++    if (useOffScreen(&obj) != 0)
++	__builtin_abort();
++    return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/pr40482.c
++++ b/src/gcc/testsuite/gcc.target/arm/pr40482.c
+@@ -0,0 +1,7 @@
++/* { dg-options "-mthumb -Os" }  */
++/* { dg-final { scan-assembler-not "ldr" } } */
++
++unsigned int foo (unsigned int i )
++{
++  return i | 0xff000000;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/pr42496.c
++++ b/src/gcc/testsuite/gcc.target/arm/pr42496.c
+@@ -0,0 +1,16 @@
++/* { dg-options "-O2" }  */
++
++void foo(int i)
++{
++    extern int j;
++
++    if (i) {
++         j = 10;
++    }
++    else {
++          j = 20;
++    }
++}
++
++/* { dg-final { scan-assembler-not "strne" } } */
++/* { dg-final { scan-assembler-not "streq" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/pr45094.c
++++ b/src/gcc/testsuite/gcc.target/arm/pr45094.c
+@@ -0,0 +1,27 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon_hw } */
++/* { dg-options "-O2 -mcpu=cortex-a8" } */
++/* { dg-add-options arm_neon } */
++
++#include <stdlib.h>
++
++long long buffer[32];
++
++void __attribute__((noinline)) f(long long *p, int n)
++{
++  while (--n >= 0)
++    {
++      *p = 1;
++      p += 32;
++    }
++}
++
++int main(void)
++{
++  f(buffer, 1);
++  
++  if (!buffer[0])
++    abort();
++
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/thumb2-mul-space-2.c
++++ b/src/gcc/testsuite/gcc.target/arm/thumb2-mul-space-2.c
+@@ -0,0 +1,15 @@
++/* In Thumb-2 mode, when optimizing for size, generate a "muls"
++   instruction and use the resulting condition flags rather than a
++   separate compare instruction.  */
++/* { dg-options "-mthumb -Os" }  */
++/* { dg-require-effective-target arm_thumb2_ok } */
++/* { dg-final { scan-assembler "muls" } } */
++/* { dg-final { scan-assembler-not "cmp" } } */
++
++int x;
++
++void f(int i, int j)
++{
++  if (i * j < 0)
++    x = 1;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/thumb2-mul-space-3.c
++++ b/src/gcc/testsuite/gcc.target/arm/thumb2-mul-space-3.c
+@@ -0,0 +1,17 @@
++/* In Thumb-2 mode, when optimizing for size, generate a "muls"
++   instruction and use the resulting condition flags rather than a
++   separate compare instruction.  */
++/* { dg-options "-mthumb -Os" }  */
++/* { dg-require-effective-target arm_thumb2_ok } */
++/* { dg-final { scan-assembler "muls" } } */
++/* { dg-final { scan-assembler-not "cmp" } } */
++
++int x;
++
++int f(int i, int j)
++{
++  i = i * j;
++  if (i < 0)
++    x = 1;
++  return i;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/thumb2-mul-space.c
++++ b/src/gcc/testsuite/gcc.target/arm/thumb2-mul-space.c
+@@ -0,0 +1,10 @@
++/* Use 16-bit multiply instruction in Thumb-2 mode when optimizing for
++   size.  */
++/* { dg-options "-mthumb -Os" }  */
++/* { dg-require-effective-target arm_thumb2_ok } */
++/* { dg-final { scan-assembler "muls" } } */
++
++int f(int i, int j) 
++{
++  return i * j;
++}
+--- a/src/gcc/testsuite/gcc.target/arm/thumb2-mul-speed.c
++++ b/src/gcc/testsuite/gcc.target/arm/thumb2-mul-speed.c
+@@ -0,0 +1,27 @@
++/* Do not use 16-bit multiply instructions in Thumb-2 mode when
++   optimizing for speed.  */
++/* { dg-options "-mthumb -O2" }  */
++/* { dg-require-effective-target arm_thumb2_ok } */
++/* { dg-final { scan-assembler-not "muls" } } */
++
++int f(int i, int j) 
++{
++  return i * j;
++}
++
++int x;
++
++void g(int i, int j)
++{
++  if (i * j < 0)
++    x = 1;
++}
++
++int h(int i, int j)
++{
++  i = i * j;
++  if (i < 0)
++    x = 1;
++  return i;
++}
++
+--- a/src/gcc/testsuite/gcc.target/arm/vfp-ldmdbd.c
++++ b/src/gcc/testsuite/gcc.target/arm/vfp-ldmdbd.c
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_vfp_ok } */
++/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
++
++extern void bar (double);
++
++void
++foo (double *p, double a, int n)
++{
++  do
++    bar (*--p + a);
++  while (n--);
++}
++
++/* { dg-final { scan-assembler "fldmdbd" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/vfp-ldmdbs.c
++++ b/src/gcc/testsuite/gcc.target/arm/vfp-ldmdbs.c
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_vfp_ok } */
++/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
++
++extern void baz (float);
++
++void
++foo (float *p, float a, int n)
++{
++  do
++    bar (*--p + a);
++  while (n--);
++}
++
++/* { dg-final { scan-assembler "fldmdbs" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/vfp-ldmiad.c
++++ b/src/gcc/testsuite/gcc.target/arm/vfp-ldmiad.c
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_vfp_ok } */
++/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
++
++extern void bar (double);
++
++void
++foo (double *p, double a, int n)
++{
++  do
++    bar (*p++ + a);
++  while (n--);
++}
++
++/* { dg-final { scan-assembler "fldmiad" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/vfp-ldmias.c
++++ b/src/gcc/testsuite/gcc.target/arm/vfp-ldmias.c
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_vfp_ok } */
++/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
++
++extern void baz (float);
++
++void
++foo (float *p, float a, int n)
++{
++  do
++    bar (*p++ + a);
++  while (n--);
++}
++
++/* { dg-final { scan-assembler "fldmias" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/vfp-stmdbd.c
++++ b/src/gcc/testsuite/gcc.target/arm/vfp-stmdbd.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_vfp_ok } */
++/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
++
++void
++foo (double *p, double a, double b, int n)
++{
++  double c = a + b;
++  do
++    *--p = c;
++  while (n--);
++}
++
++/* { dg-final { scan-assembler "fstmdbd" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/vfp-stmdbs.c
++++ b/src/gcc/testsuite/gcc.target/arm/vfp-stmdbs.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_vfp_ok } */
++/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
++
++void
++foo (float *p, float a, float b, int n)
++{
++  float c = a + b;
++  do
++    *--p = c;
++  while (n--);
++}
++
++/* { dg-final { scan-assembler "fstmdbs" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/vfp-stmiad.c
++++ b/src/gcc/testsuite/gcc.target/arm/vfp-stmiad.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_vfp_ok } */
++/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
++
++void
++foo (double *p, double a, double b, int n)
++{
++  double c = a + b;
++  do
++    *p++ = c;
++  while (n--);
++}
++
++/* { dg-final { scan-assembler "fstmiad" } } */
+--- a/src/gcc/testsuite/gcc.target/arm/vfp-stmias.c
++++ b/src/gcc/testsuite/gcc.target/arm/vfp-stmias.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_vfp_ok } */
++/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
++
++void
++foo (float *p, float a, float b, int n)
++{
++  float c = a + b;
++  do
++    *p++ = c;
++  while (n--);
++}
++
++/* { dg-final { scan-assembler "fstmias" } } */
+--- a/src/gcc/testsuite/gcc.target/i386/387-1.c
++++ b/src/gcc/testsuite/gcc.target/i386/387-1.c
+@@ -1,6 +1,7 @@
+ /* Verify that -mno-fancy-math-387 works.  */
+ /* { dg-do compile } */
+ /* { dg-require-effective-target ilp32 } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=i386" } } */
+ /* { dg-options "-O -ffast-math -mfpmath=387 -mno-fancy-math-387 -march=i386" } */
+ /* { dg-final { scan-assembler "call\t(.*)sin" } } */
+ /* { dg-final { scan-assembler "call\t(.*)cos" } } */
+--- a/src/gcc/testsuite/gcc.target/i386/387-5.c
++++ b/src/gcc/testsuite/gcc.target/i386/387-5.c
+@@ -1,6 +1,7 @@
+ /* Verify that -mno-fancy-math-387 works.  */
+ /* { dg-do compile } */
+ /* { dg-require-effective-target ilp32 } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=i386" } } */
+ /* { dg-options "-O -ffast-math -mfpmath=387 -mno-fancy-math-387 -march=i386" } */
+ /* { dg-final { scan-assembler "call\t(.*)atan" } } */
+ /* { dg-final { scan-assembler "call\t(.*)log1p" } } */
+--- a/src/gcc/testsuite/gcc.target/i386/cmov7.c
++++ b/src/gcc/testsuite/gcc.target/i386/cmov7.c
+@@ -1,6 +1,7 @@
+ /* PR middle-end/33187 */
+ 
+ /* { dg-do compile } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=k8" } } */
+ /* { dg-options "-O2 -ffast-math -march=k8 -mbranch-cost=5 -mfpmath=387" } */
+ /* { dg-final { scan-assembler "fcmov" } } */
+ 
+--- a/src/gcc/testsuite/gcc.target/i386/funcspec-1.c
++++ b/src/gcc/testsuite/gcc.target/i386/funcspec-1.c
+@@ -3,6 +3,7 @@
+    for a function that doesn't use attribute((option)).  */
+ /* { dg-do compile } */
+ /* { dg-require-effective-target ilp32 } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=i386" } } */
+ /* { dg-options "-O3 -ftree-vectorize -march=i386" } */
+ /* { dg-final { scan-assembler "addps\[ \t\]" } } */
+ /* { dg-final { scan-assembler "fsubs\[ \t\]" } } */
+--- a/src/gcc/testsuite/gcc.target/i386/funcspec-8.c
++++ b/src/gcc/testsuite/gcc.target/i386/funcspec-8.c
+@@ -1,6 +1,7 @@
+ /* Test whether using target specific options, we can use the x86 builtin
+    functions in functions with the appropriate function specific options.  */
+ /* { dg-do compile } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=k8" } } */
+ /* { dg-options "-O2 -march=k8 -mfpmath=sse" } */
+ 
+ typedef float     __m128  __attribute__ ((__vector_size__ (16), __may_alias__));
+--- a/src/gcc/testsuite/gcc.target/i386/gcc-have-sync-compare-and-swap-1.c
++++ b/src/gcc/testsuite/gcc.target/i386/gcc-have-sync-compare-and-swap-1.c
+@@ -1,5 +1,6 @@
+ /* { dg-do preprocess } */
+ /* { dg-require-effective-target ilp32 } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=i386" } } */
+ /* { dg-options "-march=i386" } */
+ 
+ #ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1
+--- a/src/gcc/testsuite/gcc.target/i386/gcc-have-sync-compare-and-swap-2.c
++++ b/src/gcc/testsuite/gcc.target/i386/gcc-have-sync-compare-and-swap-2.c
+@@ -1,5 +1,6 @@
+ /* { dg-do preprocess } */
+ /* { dg-require-effective-target ilp32 } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=i486" } } */
+ /* { dg-options "-march=i486" } */
+ 
+ #ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1
+--- a/src/gcc/testsuite/gcc.target/i386/isa-10.c
++++ b/src/gcc/testsuite/gcc.target/i386/isa-10.c
+@@ -1,4 +1,5 @@
+ /* { dg-do run } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=x86-64" } } */
+ /* { dg-options "-march=x86-64 -msse5 -mno-sse4" } */
+ 
+ extern void abort (void);
+--- a/src/gcc/testsuite/gcc.target/i386/isa-6.c
++++ b/src/gcc/testsuite/gcc.target/i386/isa-6.c
+@@ -1,4 +1,5 @@
+ /* { dg-do run } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=amdfam10" } } */
+ /* { dg-options "-march=amdfam10 -mno-sse4" } */
+ 
+ extern void abort (void);
+--- a/src/gcc/testsuite/gcc.target/i386/isa-7.c
++++ b/src/gcc/testsuite/gcc.target/i386/isa-7.c
+@@ -1,4 +1,5 @@
+ /* { dg-do run } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=amdfam10" } } */
+ /* { dg-options "-march=amdfam10 -msse5 -mno-sse4" } */
+ 
+ extern void abort (void);
+--- a/src/gcc/testsuite/gcc.target/i386/isa-8.c
++++ b/src/gcc/testsuite/gcc.target/i386/isa-8.c
+@@ -1,4 +1,5 @@
+ /* { dg-do run } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=amdfam10" } } */
+ /* { dg-options "-march=amdfam10 -msse5 -mno-sse4a" } */
+ 
+ extern void abort (void);
+--- a/src/gcc/testsuite/gcc.target/i386/isa-9.c
++++ b/src/gcc/testsuite/gcc.target/i386/isa-9.c
+@@ -1,4 +1,5 @@
+ /* { dg-do run } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=amdfam10" } } */
+ /* { dg-options "-march=amdfam10 -mno-sse5" } */
+ 
+ extern void abort (void);
+--- a/src/gcc/testsuite/gcc.target/i386/lea.c
++++ b/src/gcc/testsuite/gcc.target/i386/lea.c
+@@ -1,5 +1,6 @@
+ /* { dg-do compile } */
+ /* { dg-require-effective-target ilp32 } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=pentiumpro" } } */
+ /* { dg-options "-O2 -march=pentiumpro" } */
+ /* { dg-final { scan-assembler "leal" } } */
+ typedef struct {
+--- a/src/gcc/testsuite/gcc.target/i386/movbe-1.c
++++ b/src/gcc/testsuite/gcc.target/i386/movbe-1.c
+@@ -0,0 +1,18 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -mmovbe" } */
++
++extern int x;
++
++void
++foo (int i)
++{
++  x = __builtin_bswap32 (i);
++}
++
++int
++bar ()
++{
++  return __builtin_bswap32 (x);
++}
++
++/* { dg-final { scan-assembler-times "movbe\[ \t\]" 2 } } */
+--- a/src/gcc/testsuite/gcc.target/i386/movbe-2.c
++++ b/src/gcc/testsuite/gcc.target/i386/movbe-2.c
+@@ -0,0 +1,19 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -mmovbe" } */
++
++extern long long x;
++
++void
++foo (long long i)
++{
++  x = __builtin_bswap64 (i);
++}
++
++long long
++bar ()
++{
++  return __builtin_bswap64 (x);
++}
++
++/* { dg-final { scan-assembler-times "movbe\[ \t\]" 4 { target ilp32 } } } */
++/* { dg-final { scan-assembler-times "movbe\[ \t\]" 2 { target lp64 } } } */
+--- a/src/gcc/testsuite/gcc.target/i386/pentium4-not-mull.c
++++ b/src/gcc/testsuite/gcc.target/i386/pentium4-not-mull.c
+@@ -1,5 +1,6 @@
+ /* { dg-do compile } */
+ /* { dg-require-effective-target ilp32 } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=pentium4" } } */
+ /* { dg-options "-O2 -march=pentium4" } */
+ /* { dg-final { scan-assembler-not "imull" } } */
+ 
+--- a/src/gcc/testsuite/gcc.target/i386/pr37216.c
++++ b/src/gcc/testsuite/gcc.target/i386/pr37216.c
+@@ -0,0 +1,17 @@
++/* { dg-do run } */
++/* { dg-options "-O3 -msse2" } */
++/* { dg-options "-O3 -msse2 -mpe-aligned-commons" { target pe_aligned_commons } } */
++
++#include "sse2-check.h"
++
++int iarr[64];
++int iint = 0;
++
++void
++sse2_test (void)
++{
++  int i;
++
++  for (i = 0; i < 64; i++)
++    iarr[i] = -2;
++}
+--- a/src/gcc/testsuite/gcc.target/i386/pr37843-1.c
++++ b/src/gcc/testsuite/gcc.target/i386/pr37843-1.c
+@@ -2,8 +2,8 @@
+ /* { dg-do compile { target nonpic } } */
+ /* { dg-options "-O2 -mpreferred-stack-boundary=6 -mincoming-stack-boundary=5" } */
+ /* { dg-final { scan-assembler "and\[lq\]?\[\\t \]*\\$-64,\[\\t \]*%\[re\]?sp" } } */
+-/* { dg-final { scan-assembler "call\[\\t \]*foo" } } */
+-/* { dg-final { scan-assembler-not "jmp\[\\t \]*foo" } } */
++/* { dg-final { scan-assembler "call\[\\t \]*_?foo" } } */
++/* { dg-final { scan-assembler-not "jmp\[\\t \]*_?foo" } } */
+ 
+ extern int foo (void);
+ 
+--- a/src/gcc/testsuite/gcc.target/i386/pr37843-2.c
++++ b/src/gcc/testsuite/gcc.target/i386/pr37843-2.c
+@@ -2,8 +2,8 @@
+ /* { dg-do compile { target nonpic } } */
+ /* { dg-options "-O2 -mpreferred-stack-boundary=6 -mincoming-stack-boundary=6" } */
+ /* { dg-final { scan-assembler-not "and\[lq\]?\[\\t \]*\\$-64,\[\\t \]*%\[re\]?sp" } } */
+-/* { dg-final { scan-assembler-not "call\[\\t \]*foo" } } */
+-/* { dg-final { scan-assembler "jmp\[\\t \]*foo" } } */
++/* { dg-final { scan-assembler-not "call\[\\t \]*_?foo" } } */
++/* { dg-final { scan-assembler "jmp\[\\t \]*_?foo" } } */
+ 
+ extern int foo (void);
+ 
+--- a/src/gcc/testsuite/gcc.target/i386/pr37843-3.c
++++ b/src/gcc/testsuite/gcc.target/i386/pr37843-3.c
+@@ -3,8 +3,8 @@
+ /* { dg-options "-O2 -msse2 -mpreferred-stack-boundary=4 -mstackrealign" } */
+ /* { dg-require-effective-target sse2 } */
+ /* { dg-final { scan-assembler-not "andl\[\\t \]*\\$-16,\[\\t \]*%\[re\]?sp" } } */
+-/* { dg-final { scan-assembler-not "call\[\\t \]*foo" } } */
+-/* { dg-final { scan-assembler "jmp\[\\t \]*foo" } } */
++/* { dg-final { scan-assembler-not "call\[\\t \]*_?foo" } } */
++/* { dg-final { scan-assembler "jmp\[\\t \]*_?foo" } } */
+ 
+ #include <emmintrin.h>
+ 
+--- a/src/gcc/testsuite/gcc.target/i386/pr9771-1.c
++++ b/src/gcc/testsuite/gcc.target/i386/pr9771-1.c
+@@ -28,7 +28,10 @@
+   *adr = save;
+ }
+ 
+-int main()
++/* This must not be inlined becuase main() requires the frame pointer
++   for stack alignment.  */
++void test(void) __attribute__((noinline));
++void test(void)
+ {
+   B = &x;
+ 
+@@ -42,3 +45,9 @@
+   exit(0);
+ }
+ 
++int main()
++{
++  test();
++  return 0;
++
++}
+--- a/src/gcc/testsuite/gcc.target/i386/sse-5.c
++++ b/src/gcc/testsuite/gcc.target/i386/sse-5.c
+@@ -1,5 +1,6 @@
+ /* { dg-do compile } */
+ /* { dg-require-effective-target ilp32 } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=i386" } } */
+ /* { dg-options "-Winline -O2 -march=i386" } */
+ 
+ typedef double v2df __attribute__ ((vector_size (16)));
+--- a/src/gcc/testsuite/gcc.target/i386/ssefn-1.c
++++ b/src/gcc/testsuite/gcc.target/i386/ssefn-1.c
+@@ -8,6 +8,7 @@
+ /* { dg-final { scan-assembler "mulss" } } */
+ /* { dg-final { scan-assembler-not "movsd" } } */
+ /* { dg-final { scan-assembler-not "mulsd" } } */
++/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=i386" } } */
+ /* { dg-options "-O2 -march=i386 -msse -mfpmath=sse -fno-inline" } */
+ 
+ static float xs (void)
+--- a/src/gcc/testsuite/gcc.target/m68k/20090709-1.c
++++ b/src/gcc/testsuite/gcc.target/m68k/20090709-1.c
+@@ -0,0 +1,20 @@
++/* { dg-do compile } */
++/* There should be 3 occurrences of .LC0 in the code:
++   one for the definition of "0",
++   one for use in test1() and
++   one for use in test2().
++   FIXME: At the moment m68k GCC does not optimize test1() to nop
++   for some reason.  */
++/* { dg-final { scan-assembler-times ".LC0" 3 } } */
++
++void dummy(char *arg);
++
++void test1(void)
++{
++  char tmp[2] = "0";
++}
++
++void test2(void)
++{
++  dummy("0");
++}
+--- a/src/gcc/testsuite/gcc.target/m68k/20100512-1.c
++++ b/src/gcc/testsuite/gcc.target/m68k/20100512-1.c
+@@ -0,0 +1,16 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -fstack-protector" } */
++/* { dg-require-effective-target fstack_protector } */
++/* There should be 2 references to __stack_chk_guard in every function.  */
++/* { dg-final { scan-assembler-times "__stack_chk_guard" 4 } } */
++
++#include <stdlib.h>
++#include <string.h>
++void doTest1(void) {
++  volatile char foo[10];
++  memset((void *)foo, 1, 100);
++}
++void doTest2(void) {
++  volatile char foo[10];
++  memset((void *)foo, 1, 100);
++}
+--- a/src/gcc/testsuite/gcc.target/m68k/pr36134.c
++++ b/src/gcc/testsuite/gcc.target/m68k/pr36134.c
+@@ -1,10 +1,15 @@
+ /* pr36134.c
+ 
+    This test ensures that the shorter LEA instruction is used in preference
+-   to the longer ADD instruction.  */
++   to the longer ADD instruction.
++
++   This preference is applicable to ColdFire only.  On CPU32, we can
++   use a sequence of two ADDQ instructions, which is faster than the
++   LEA instruction.  */
+ 
+ /* { dg-do compile }  */
+-/* { dg-options "-O2" }  */
++/* { dg-skip-if "" { *-*-* } { "-mcpu=*" } { "-mcpu=5208" } } */
++/* { dg-options "-O2 -mcpu=5208" }  */
+ /* { dg-final { scan-assembler "lea" } } */
+ /* { dg-final { scan-assembler-not "add" } } */
+ 
+--- a/src/gcc/testsuite/gcc.target/m68k/pr41302.c
++++ b/src/gcc/testsuite/gcc.target/m68k/pr41302.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-final { scan-assembler "move.l \%d0,\%a0" { target *-*-*linux* } } } */
++
++struct pts {
++  int c;
++};
++
++unsigned int bar (struct pts *a, int b);
++
++struct pts * foo (struct pts *a, int b)
++{
++  return (struct pts *) bar (a, b);
++}
+--- a/src/gcc/testsuite/gcc.target/m68k/tls-gd-xgot.c
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-gd-xgot.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -fpic -mxgot" } */
++/* { dg-final { scan-assembler "#foo@TLSGD,\%\[ad\]\[0-7\]" } } */
++/* { dg-final { scan-assembler "bsr.l __tls_get_addr@PLTPC" } } */
++
++extern int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+--- a/src/gcc/testsuite/gcc.target/m68k/tls-gd.c
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-gd.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -fpic" } */
++/* { dg-final { scan-assembler "foo@TLSGD\\(\%a5\\)" } } */
++/* { dg-final { scan-assembler "bsr.l __tls_get_addr@PLTPC" } } */
++
++extern int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+--- a/src/gcc/testsuite/gcc.target/m68k/tls-ie-xgot.c
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-ie-xgot.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -mxgot" } */
++/* { dg-final { scan-assembler "jsr __m68k_read_tp" } } */
++/* { dg-final { scan-assembler "#foo@TLSIE,\%\[ad\]\[0-7\]" } } */
++
++extern int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+--- a/src/gcc/testsuite/gcc.target/m68k/tls-ie.c
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-ie.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2" } */
++/* { dg-final { scan-assembler "jsr __m68k_read_tp" } } */
++/* { dg-final { scan-assembler "foo@TLSIE\\(\%a5\\)" } } */
++
++extern int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+--- a/src/gcc/testsuite/gcc.target/m68k/tls-ld-xgot-xtls.c
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-ld-xgot-xtls.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -fpic -mxgot -mxtls" } */
++/* { dg-final { scan-assembler "#foo@TLSLDM,\%\[ad\]\[0-7\]" } } */
++/* { dg-final { scan-assembler "bsr.l __tls_get_addr@PLTPC" } } */
++/* { dg-final { scan-assembler "#foo@TLSLDO,\%\[ad\]\[0-7\]" } } */
++
++static int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+--- a/src/gcc/testsuite/gcc.target/m68k/tls-ld-xgot.c
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-ld-xgot.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -fpic -mxgot" } */
++/* { dg-final { scan-assembler "#foo@TLSLDM,\%\[ad\]\[0-7\]" } } */
++/* { dg-final { scan-assembler "bsr.l __tls_get_addr@PLTPC" } } */
++/* { dg-final { scan-assembler "lea \\(foo@TLSLDO,\%a0\\)" } } */
++
++static int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+--- a/src/gcc/testsuite/gcc.target/m68k/tls-ld-xtls.c
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-ld-xtls.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -fpic -mxtls" } */
++/* { dg-final { scan-assembler "foo@TLSLDM\\(\%a5\\)" } } */
++/* { dg-final { scan-assembler "bsr.l __tls_get_addr@PLTPC" } } */
++/* { dg-final { scan-assembler "#foo@TLSLDO,\%\[ad\]\[0-7\]" } } */
++
++static int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+--- a/src/gcc/testsuite/gcc.target/m68k/tls-ld.c
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-ld.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -fpic" } */
++/* { dg-final { scan-assembler "foo@TLSLDM\\(\%a5\\)" } } */
++/* { dg-final { scan-assembler "bsr.l __tls_get_addr@PLTPC" } } */
++/* { dg-final { scan-assembler "lea \\(foo@TLSLDO,\%a0\\)" } } */
++
++static int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+--- a/src/gcc/testsuite/gcc.target/m68k/tls-le-xtls.c
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-le-xtls.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2 -mxtls" } */
++/* { dg-final { scan-assembler "jsr __m68k_read_tp" } } */
++/* { dg-final { scan-assembler "#foo@TLSLE,\%\[ad\]\[0-7\]" } } */
++
++static int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+--- a/src/gcc/testsuite/gcc.target/m68k/tls-le.c
++++ b/src/gcc/testsuite/gcc.target/m68k/tls-le.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-skip-if "" { ! *-linux-* } { "*" } { "" } } */
++/* { dg-options "-O2" } */
++/* { dg-final { scan-assembler "jsr __m68k_read_tp" } } */
++/* { dg-final { scan-assembler "lea \\(foo@TLSLE,\%a0\\)" } } */
++
++static int __thread foo;
++
++int *
++bar (void)
++{
++  return &foo;
++}
+--- a/src/gcc/testsuite/gcc.target/mips/branch-2.c
++++ b/src/gcc/testsuite/gcc.target/mips/branch-2.c
+@@ -0,0 +1,44 @@
++/* Check that we correctly expand out-of-range branches */
++/* { dg-do run } */
++/* { dg-options "-O2 -mabi=32 -fPIC" } */
++
++#include <stdlib.h>
++
++/* This is weak so the compiler cannot assume that calls from this TU
++   necessarily arrive here.   And hence that $gp may be clobbered in
++   o32 and o64 ABIs.  */
++
++void __attribute__ ((weak)) Foo (int i)
++{
++  static int once = 0;
++
++  if (!i && once++)
++    exit (0);
++
++#if (_ABIO32 || _ABIO64)
++  /* Clobber $gp */
++  __asm volatile ("li $gp,0");
++#endif
++}
++
++#define N1(X)  (Foo (X))
++#define N2(X)  (N1 (X), N1 (X+(1<<0)))
++#define N3(X)  (N2 (X), N2 (X+(1<<1)))
++#define N4(X)  (N3 (X), N3 (X+(1<<2)))
++#define N5(X)  (N4 (X), N4 (X+(1<<3)))
++#define N6(X)  (N5 (X), N5 (X+(1<<4)))
++#define N7(X)  (N6 (X), N6 (X+(1<<5)))
++#define N8(X)  (N7 (X), N7 (X+(1<<6)))
++#define N9(X)  (N8 (X), N8 (X+(1<<7)))
++#define N10(X)  (N9 (X), N9 (X+(1<<8)))
++#define N11(X)  (N10 (X), N10 (X+(1<<9)))
++#define N12(X)  (N11 (X), N11 (X+(1<<10)))
++#define N13(X)  (N12 (X), N12 (X+(1<<11)))
++#define N14(X)  (N13 (X), N13 (X+(1<<12)))
++
++int main (void)
++{
++  while (1)
++    N14 (0);
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/mips/clear-cache-2.c
++++ b/src/gcc/testsuite/gcc.target/mips/clear-cache-2.c
+@@ -2,7 +2,8 @@
+ /* { dg-options "-O2 -mips32" } */
+ /* { dg-final { scan-assembler-not "synci" } } */
+ /* { dg-final { scan-assembler-not "jr.hb" } } */
+-/* { dg-final { scan-assembler "_flush_cache" } } */
++/* { dg-final { scan-assembler "mips_sync_icache" { target { *-sde-* } } } } */
++/* { dg-final { scan-assembler "_flush_cache" { target { ! *-sde-* } } } } */
+ 
+ void f()
+ {
+--- a/src/gcc/testsuite/gcc.target/mips/fpr-moves-5.c
++++ b/src/gcc/testsuite/gcc.target/mips/fpr-moves-5.c
+@@ -1,4 +1,5 @@
+ /* { dg-options "-mabi=64 -mhard-float -O2 -EL" } */
++/* { dg-require-effective-target mips_newabi_large_long_double } */
+ 
+ NOMIPS16 void
+ foo (long double d, long double *x)
+--- a/src/gcc/testsuite/gcc.target/mips/fpr-moves-6.c
++++ b/src/gcc/testsuite/gcc.target/mips/fpr-moves-6.c
+@@ -1,4 +1,5 @@
+ /* { dg-options "-mabi=64 -mhard-float -O2 -EB" } */
++/* { dg-require-effective-target mips_newabi_large_long_double } */
+ 
+ NOMIPS16 void
+ foo (long double d, long double *x)
+--- a/src/gcc/testsuite/gcc.target/mips/mips.exp
++++ b/src/gcc/testsuite/gcc.target/mips/mips.exp
+@@ -229,6 +229,7 @@
+     gpopt
+     local-sdata
+     long-calls
++    octeon-useun
+     paired-single
+     plt
+     shared
+--- a/src/gcc/testsuite/gcc.target/mips/near-far-1.c
++++ b/src/gcc/testsuite/gcc.target/mips/near-far-1.c
+@@ -16,5 +16,5 @@
+ 
+ /* { dg-final { scan-assembler-not "\tjal\tlong_call_func\n" } } */
+ /* { dg-final { scan-assembler-not "\tjal\tfar_func\n" } } */
+-/* { dg-final { scan-assembler     "\tjal\tnear_func\n" } } */
++/* { dg-final { scan-assembler     "\tjals?\tnear_func\n" } } */
+ /* { dg-final { scan-assembler-not "\tjal\tnormal_func\n" } } */
+--- a/src/gcc/testsuite/gcc.target/mips/near-far-2.c
++++ b/src/gcc/testsuite/gcc.target/mips/near-far-2.c
+@@ -16,5 +16,5 @@
+ 
+ /* { dg-final { scan-assembler-not "\tjal\tlong_call_func\n" } } */
+ /* { dg-final { scan-assembler-not "\tjal\tfar_func\n" } } */
+-/* { dg-final { scan-assembler     "\tjal\tnear_func\n" } } */
+-/* { dg-final { scan-assembler     "\tjal\tnormal_func\n" } } */
++/* { dg-final { scan-assembler     "\tjals?\tnear_func\n" } } */
++/* { dg-final { scan-assembler     "\tjals?\tnormal_func\n" } } */
+--- a/src/gcc/testsuite/gcc.target/mips/octeon-useun.c
++++ b/src/gcc/testsuite/gcc.target/mips/octeon-useun.c
+@@ -0,0 +1,16 @@
++/* Check the mov_u[ls][dw] patterns.  */
++/* { dg-options "-march=octeon -O2 -mabi=64 -mocteon-useun -meb" } */
++struct __attribute__((packed)) sl { unsigned long x; };
++struct __attribute__((packed)) si { unsigned int x; };
++unsigned long f1 (struct sl *s) { return s[0].x; };
++unsigned int f2 (struct si *s) { return s[1].x; };
++void f3 (struct sl *s, unsigned long x) { s[10].x = x; }
++void f4 (struct si *s, unsigned int x) { s[11].x = x; }
++void f5 (struct sl *s) { s[100].x = 0; }
++void f6 (struct si *s) { s[101].x = 0; }
++/* { dg-final { scan-assembler "\tjr?\t\\\$31\n\tuld\t\\\$2,0\\(\\\$4\\)\n" } } */
++/* { dg-final { scan-assembler "\tulw\t\\\$2,4\\(\\\$4\\)\n" } } */
++/* { dg-final { scan-assembler "\tjr?\t\\\$31\n\tusd\t\\\$5,80\\(\\\$4\\)\n" } } */
++/* { dg-final { scan-assembler "\tjr?\t\\\$31\n\tusw\t\\\$5,44\\(\\\$4\\)\n" } } */
++/* { dg-final { scan-assembler "\tjr?\t\\\$31\n\tusd\t\\\$0,800\\(\\\$4\\)\n" } } */
++/* { dg-final { scan-assembler "\tjr?\t\\\$31\n\tusw\t\\\$0,404\\(\\\$4\\)\n" } } */
+--- a/src/gcc/testsuite/gcc.target/sh/20080410-1.c
++++ b/src/gcc/testsuite/gcc.target/sh/20080410-1.c
+@@ -1,5 +1,5 @@
+ /* { dg-do compile { target "sh-*-*" } } */
+-/* { dg-options "-O0 -m4 -ml -fira" } */
++/* { dg-options "-O0 -m4 -ml" } */
+ /* { dg-final { scan-assembler-not "add\tr0,r0" } } */
+ 
+ /* This test checks that chain reloads conflict.  I they don't
+--- a/src/gcc/testsuite/gcc.target/sh/mfmovd.c
++++ b/src/gcc/testsuite/gcc.target/sh/mfmovd.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile { target "sh*-*-*" } } */
++/* { dg-options "-mfmovd" } */
++/* { dg-skip-if "No double precision FPU support" { "sh*-*-*" } "-m2a-nofpu -m2a-single-only -m4-nofpu -m4-single-only -m4a-nofpu -m4a-single-only" { "" } }  */
++/* { dg-final { scan-assembler "fmov.d"} }  */
++
++extern double g;
++
++void
++f (double d)
++{
++  g = d;
++}
++
+--- a/src/gcc/testsuite/gcc.target/sh/sh-relax.c
++++ b/src/gcc/testsuite/gcc.target/sh/sh-relax.c
+@@ -1,6 +1,7 @@
+ /* Check that -mrelax works.  */
+ /* { dg-do run { target { { sh-*-* sh?-*-* } && { ! { sh*-*-vxworks* && nonpic } } } } } */
+ /* { dg-options "-O1 -mrelax" } */
++/* { dg-xfail-if "" { "sh*-*-uclinux" } { "*" } { "" } } */
+ 
+ extern void abort (void);
+ extern int qwerty (int);
+--- a/src/gcc/testsuite/gcc.target/sh/sh4a-bitmovua.c
++++ b/src/gcc/testsuite/gcc.target/sh/sh4a-bitmovua.c
+@@ -35,15 +35,15 @@
+ }
+ 
+ /* Aligned.  */
+-struct u0 { unsigned long long d : 32; } y0;
++struct u0 { unsigned long long d : 32; } y_0;
+ unsigned long long g0() {
+-  return y0.d;
++  return y_0.d;
+ }
+ 
+ /* Unaligned load.  */
+-struct u1 { long long c : 8; unsigned long long d : 32; } y1;
++struct u1 { long long c : 8; unsigned long long d : 32; } y_1;
+ unsigned long long g1() {
+-  return y1.d;
++  return y_1.d;
+ }
+ 
+ /* Unaligned load.  */
+--- a/src/gcc/testsuite/gcc.target/sh/sh4a-memmovua.c
++++ b/src/gcc/testsuite/gcc.target/sh/sh4a-memmovua.c
+@@ -5,7 +5,7 @@
+ /* { dg-final { scan-assembler-times "\tmovua\\.l\t(.*)+" 2 } } */
+ 
+ #ifdef __SH4A__
+-#include <stdlib.h>
++#include <string.h>
+ 
+ struct s { int i; char a[10], b[10]; } x;
+ int f() {
+--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c
++++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c
+@@ -0,0 +1,27 @@
++/* Test for cross x86_64<->w64 abi standard calls.  */
++/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
++/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
++/* { dg-additional-sources "func-2b.c" } */
++
++extern void __attribute__ ((sysv_abi)) abort (void);
++long double func_cross (long double, double, float, long, int, char);
++
++long double __attribute__ ((sysv_abi))
++func_native (long double a, double b, float c, long d, int e, char f)
++{
++  long double ret;
++  ret = a + (long double) b + (long double) c;
++  ret *= (long double) (d + (long) e);
++  if (f>0)
++    ret += func_native (a,b,c,d,e,-f);
++  return ret;
++}
++
++int __attribute__ ((sysv_abi))
++main ()
++{
++  if (func_cross (1.0,2.0,3.0,1,2,3)
++      != func_native (1.0,2.0,3.0,1,2,3))
++    abort ();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c
++++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c
+@@ -0,0 +1,13 @@
++/* Test for cross x86_64<->w64 abi standard calls.  */
++/* { dg-options "-mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
++
++long double func_cross (long double a, double b, float c, long d, int e,
++			char f)
++{
++  long double ret;
++  ret = a + (long double) b + (long double) c;
++  ret *= (long double) (d + (long) e);
++  if (f>0)
++    ret += func_cross (a,b,c,d,e,-f);
++  return ret;
++}
+--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c
++++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c
+@@ -0,0 +1,17 @@
++/* Test for cross x86_64<->w64 abi standard calls via variable.  */
++/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
++/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
++/* { dg-additional-sources "func-indirect-2b.c" } */
++
++extern void __attribute__ ((sysv_abi)) abort (void);
++typedef int (*func)(void *, char *, char *, short, long long);
++extern func get_callback (void);
++
++int __attribute__ ((sysv_abi))
++main ()
++{
++  func callme = get_callback ();
++  if (callme (0, 0, 0, 0x1234, 0x1234567890abcdefLL))
++    abort ();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c
++++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c
+@@ -0,0 +1,24 @@
++/* Test for cross x86_64<->w64 abi standard calls via variable.  */
++/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
++
++typedef int (*func)(void *, char *, char *, short, long long);
++
++static int
++callback (void *ptr, char *string1, char *string2, short number,
++	  long long rand)
++{
++  if (ptr != 0
++      || string1 != 0
++      || string2 != 0
++      || number != 0x1234
++      || rand != 0x1234567890abcdefLL)
++    return 1;
++  else
++    return 0;
++}
++
++func
++get_callback (void)
++{
++  return callback;
++}
+--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c
++++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c
+@@ -0,0 +1,24 @@
++/* Test for cross x86_64<->w64 abi va_list calls.  */
++/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
++/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
++/* { dg-additional-sources "vaarg-4b.c" } */
++
++extern __SIZE_TYPE__ __attribute__ ((sysv_abi)) strlen (const char *);
++extern int __attribute__ ((sysv_abi)) sprintf (char *,const char *, ...);
++extern void __attribute__ ((sysv_abi)) abort (void);
++
++extern void do_cpy (char *, ...);
++
++int __attribute__ ((sysv_abi))
++main ()
++{
++  char s[256];
++
++  do_cpy (s, "1","2","3","4", "5", "6", "7", "");
++
++  if (s[0] != '1' || s[1] !='2' || s[2] != '3' || s[3] != '4'
++      || s[4] != '5' || s[5] != '6' || s[6] != '7' || s[7] != 0)
++    abort ();
++
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c
++++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c
+@@ -0,0 +1,31 @@
++/* Test for cross x86_64<->w64 abi va_list calls.  */
++/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
++
++#include <stdarg.h>
++
++extern __SIZE_TYPE__ __attribute__ ((sysv_abi)) strlen (const char *);
++extern int __attribute__ ((sysv_abi)) sprintf (char *, const char *, ...);
++
++static void
++vdo_cpy (char *s, va_list argp)
++{
++  __SIZE_TYPE__ len;
++  char *r = s;
++  char *e;
++  *r = 0;
++  for (;;) {
++    e = va_arg (argp, char *);
++    if (*e == 0) break;
++    sprintf (r,"%s", e);
++    r += strlen (r);
++  }
++}
++
++void
++do_cpy (char *s, ...)
++{
++  va_list argp;
++  va_start (argp, s);
++  vdo_cpy (s, argp);
++  va_end (argp);
++}
+--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c
++++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c
+@@ -0,0 +1,17 @@
++/* Test for cross x86_64<->w64 abi va_list calls.  */
++/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
++/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
++/* { dg-additional-sources "vaarg-5b.c" } */
++
++extern void __attribute__ ((sysv_abi)) abort (void);
++extern int fct2 (int, ...);
++
++#define SZ_ARGS	1ll,2ll,3ll,4ll,5ll,6ll,7ll,0ll
++
++int __attribute__ ((sysv_abi))
++main()
++{
++  if (fct2 (-1, SZ_ARGS) != 0)
++    abort ();
++  return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c
++++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c
+@@ -0,0 +1,37 @@
++/* Test for cross x86_64<->w64 abi va_list calls.  */
++/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
++
++#include <stdarg.h>
++
++#define SZ_ARGS	1ll,2ll,3ll,4ll,5ll,6ll,7ll,0ll
++
++static int __attribute__ ((sysv_abi))
++fct1 (va_list argp, ...)
++{
++  long long p1,p2;
++  int ret = 1;
++  __builtin_sysv_va_list argp_2;
++
++  __builtin_sysv_va_start (argp_2, argp);
++  do {
++    p1 = va_arg (argp_2, long long);
++    p2 = va_arg (argp, long long);
++    if (p1 != p2)
++      ret = 0;
++  } while (ret && p1 != 0);
++  __builtin_sysv_va_end (argp_2);
++
++  return ret;
++}
++
++int
++fct2 (int dummy, ...)
++{
++  va_list argp;
++  int ret = dummy;
++
++  va_start (argp, dummy);
++  ret += fct1 (argp, SZ_ARGS);
++  va_end (argp);
++  return ret;
++}
+--- a/src/gcc/testsuite/gfortran.dg/vect/vect.exp
++++ b/src/gcc/testsuite/gfortran.dg/vect/vect.exp
+@@ -101,7 +101,7 @@
+ } elseif [istarget "ia64-*-*"] {
+     set dg-do-what-default run
+ } elseif [is-effective-target arm_neon_ok] {
+-    lappend DEFAULT_VECTCFLAGS "-mfpu=neon" "-mfloat-abi=softfp"
++    eval lappend DEFAULT_VECTCFLAGS [add_options_for_arm_neon ""]
+     if [is-effective-target arm_neon_hw] {
+       set dg-do-what-default run
+     } else {
+--- a/src/gcc/testsuite/lib/prune.exp
++++ b/src/gcc/testsuite/lib/prune.exp
+@@ -57,3 +57,34 @@
+ 	return $text
+     }
+ }
++
++# Extend prune_warnings (provided by DejaGNU itself) to prune more
++# things.  The prune_gcc_output function above is called only by some
++# tests; prune_warnings is used by all.
++if { [info procs prune_warnings_orig] == "" } {
++    rename prune_warnings prune_warnings_orig
++    
++    proc prune_warnings { text } {
++	set text [prune_warnings_orig $text]
++	
++	if { [ishost "sparc*-*-solaris2*"] } {
++	    # When testing a compiler built for SPARC Solaris 2.9 (or earlier)
++	    # on a host running Solaris 2.10 (or later), we get this warning 
++	    # from the static linker when building with g++:
++	    #
++	    #   libm.so.1, needed by .../libstdc++.so may conflict with
++	    #   libm.so
++	    #
++	    # The warning is issued because libstdc++ is linked against
++	    # libm.so.1 (from the Solaris 2.9 sysroot), whereas Solaris 2.10
++	    # provides both libm.so.2 and libm.so.1.  On Solaris 2.10, libc.so
++	    # depends on libm.so.2, so all programs pull in libm.so.2.
++	    #
++	    # Pulling both libraries must in fact be harmless, as, otherwise,
++	    # programs built for Solaris 2.9 would break on Solaris 2.10.
++	    regsub -all "(^|\n)\[^\n\]*: warning: libm.so.1, needed by \[^\n\]*, may conflict with libm.so.2" $text "" text
++	}
++
++	return $text
++    }
++}
+--- a/src/gcc/testsuite/lib/target-supports.exp
++++ b/src/gcc/testsuite/lib/target-supports.exp
+@@ -611,6 +611,18 @@
+     } "-pthread"]
+ }
+ 
++# Return 1 if compilation with -mpe-aligned-commons is error-free
++# for trivial code, 0 otherwise.
++
++proc check_effective_target_pe_aligned_commons {} {
++    if { [istarget *-*-cygwin*] || [istarget *-*-mingw*] } {
++	return [check_no_compiler_messages pe_aligned_commons object {
++	    int foo;
++	} "-mpe-aligned-commons"]
++    }
++    return 0
++}
++
+ # Return 1 if the target supports -static
+ proc check_effective_target_static {} {
+     return [check_no_compiler_messages static executable {
+@@ -727,6 +739,15 @@
+     } [add_options_for_mips16_attribute ""]]
+ }
+ 
++# Return 1 if the target supports long double larger than double when
++# using the new ABI, 0 otherwise.
++
++proc check_effective_target_mips_newabi_large_long_double { } {
++    return [check_no_compiler_messages mips_newabi_large_long_double object {
++	int dummy[sizeof(long double) > sizeof(double) ? 1 : -1];
++    } "-mabi=64"]
++}
++
+ # Return 1 if the current multilib does not generate PIC by default.
+ 
+ proc check_effective_target_nonpic { } {
+@@ -1509,6 +1530,18 @@
+     }]
+ }
+ 
++# Return 1 if this is an ARM target that only supports aligned vector accesses
++proc check_effective_target_arm_vect_no_misalign { } {
++    return [check_no_compiler_messages arm_vect_no_misalign assembly {
++	#if !defined(__arm__) \
++	    || (defined(__ARMEL__) \
++	        && (!defined(__thumb__) || defined(__thumb2__)))
++	#error FOO
++	#endif
++    }]
++}
++
++
+ # Return 1 if this is an ARM target supporting -mfpu=vfp
+ # -mfloat-abi=softfp.  Some multilibs may be incompatible with these
+ # options.
+@@ -1523,18 +1556,110 @@
+     }
+ }
+ 
+-# Return 1 if this is an ARM target supporting -mfpu=neon
+-# -mfloat-abi=softfp.  Some multilibs may be incompatible with these
++# Return 1 if this is an ARM target supporting -mfpu=vfp
++# -mfloat-abi=hard.  Some multilibs may be incompatible with these
+ # options.
+ 
+-proc check_effective_target_arm_neon_ok { } {
++proc check_effective_target_arm_hard_vfp_ok { } {
+     if { [check_effective_target_arm32] } {
+-        return [check_no_compiler_messages arm_neon_ok object {
+-            int dummy;
+-        } "-mfpu=neon -mfloat-abi=softfp"]
++	return [check_no_compiler_messages arm_hard_vfp_ok executable {
++	    int main() { return 0;}
++	} "-mfpu=vfp -mfloat-abi=hard"]
+     } else {
+-        return 0
++	return 0
++    }
++}
++
++# Add the options needed for NEON.  We need either -mfloat-abi=softfp
++# or -mfloat-abi=hard, but if one is already specified by the
++# multilib, use it.  Similarly, if a -mfpu option already enables
++# NEON, do not add -mfpu=neon.
++
++proc add_options_for_arm_neon { flags } {
++    if { ! [check_effective_target_arm_neon_ok] } {
++	return "$flags"
++    }
++    global et_arm_neon_flags
++    return "$flags $et_arm_neon_flags"
++}
++
++# Return 1 if this is an ARM target supporting -mfpu=neon
++# -mfloat-abi=softfp or equivalent options.  Some multilibs may be
++# incompatible with these options.  Also set et_arm_neon_flags to the
++# best options to add.
++
++proc check_effective_target_arm_neon_ok_nocache { } {
++    global et_arm_neon_flags
++    set et_arm_neon_flags ""
++    if { [check_effective_target_arm32] } {
++	foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon" "-mfpu=neon -mfloat-abi=softfp"} {
++	    if { [check_no_compiler_messages_nocache arm_neon_ok object {
++		#include "arm_neon.h"
++		int dummy;
++	    } "$flags"] } {
++		set et_arm_neon_flags $flags
++		return 1
++	    }
++	}
++    }
++
++    return 0
++}
++
++proc check_effective_target_arm_neon_ok { } {
++    return [check_cached_effective_target arm_neon_ok \
++		check_effective_target_arm_neon_ok_nocache]
++}
++
++# Add the options needed for NEON.  We need either -mfloat-abi=softfp
++# or -mfloat-abi=hard, but if one is already specified by the
++# multilib, use it.
++
++proc add_options_for_arm_neon_fp16 { flags } {
++    if { ! [check_effective_target_arm_neon_fp16_ok] } {
++	return "$flags"
++    }
++    global et_arm_neon_fp16_flags
++    return "$flags $et_arm_neon_fp16_flags"
++}
++
++# Return 1 if this is an ARM target supporting -mfpu=neon-fp16
++# -mfloat-abi=softfp or equivalent options.  Some multilibs may be
++# incompatible with these options.  Also set et_arm_neon_flags to the
++# best options to add.
++
++proc check_effective_target_arm_neon_fp16_ok_nocache { } {
++    global et_arm_neon_fp16_flags
++    set et_arm_neon_fp16_flags ""
++    if { [check_effective_target_arm32] } {
++	# Always add -mfpu=neon-fp16, since there is no preprocessor
++	# macro for FP16 support.
++	foreach flags {"-mfpu=neon-fp16" "-mfpu=neon-fp16 -mfloat-abi=softfp"} {
++	    if { [check_no_compiler_messages_nocache arm_neon_fp16_ok object {
++		#include "arm_neon.h"
++		int dummy;
++	    } "$flags"] } {
++		set et_arm_neon_fp16_flags $flags
++		return 1
++	    }
++	}
+     }
++
++    return 0
++}
++
++proc check_effective_target_arm_neon_fp16_ok { } {
++    return [check_cached_effective_target arm_neon_fp16_ok \
++		check_effective_target_arm_neon_fp16_ok_nocache]
++}
++
++# Return 1 if this is an arm target using 32-bit instructions, but not thumb
++proc check_effective_target_arm_not_thumb { } {
++    return [check_no_compiler_messages arm_not_thumb assembly {
++      #if !defined(__arm__) || defined(__thumb__)
++      #error FOO
++      #endif
++    }]
+ }
+ 
+ # Return 1 is this is an ARM target where -mthumb causes Thumb-1 to be
+@@ -1548,6 +1673,17 @@
+     } "-mthumb"]
+ }
+ 
++# Return 1 is this is an ARM target where -mthumb causes Thumb-2 to be
++# used.
++
++proc check_effective_target_arm_thumb2_ok { } {
++    return [check_no_compiler_messages arm_thumb2_ok assembly {
++	#if !defined(__thumb2__)
++	#error FOO
++	#endif
++    } "-mthumb"]
++}
++
+ # Return 1 if the target supports executing NEON instructions, 0
+ # otherwise.  Cache the result.
+ 
+@@ -1562,7 +1698,7 @@
+ 	       : "0" (a), "w" (b));
+ 	  return (a != 1);
+ 	}
+-    } "-mfpu=neon -mfloat-abi=softfp"]
++    } [add_options_for_arm_neon ""]]
+ }
+ 
+ # Return 1 if this is a ARM target with NEON enabled.
+@@ -1605,6 +1741,19 @@
+     }]
+ }
+ 
++# Return 1 if this is an ARM target supporting -mcpu=iwmmxt.
++# Some multilibs may be incompatible with this option.
++
++proc check_effective_target_arm_iwmmxt_ok { } {
++    if { [check_effective_target_arm32] } {
++	return [check_no_compiler_messages arm_iwmmxt_ok object {
++	    int dummy;
++	} "-mcpu=iwmmxt"]
++    } else {
++	return 0
++    }
++}
++
+ # Return 1 if this is a PowerPC target with floating-point registers.
+ 
+ proc check_effective_target_powerpc_fprs { } {
+@@ -1801,6 +1950,26 @@
+     return $et_vect_shift_saved
+ }
+ 
++# Return 1 if the target supports hardware vector shift operation for char.
++
++proc check_effective_target_vect_shift_char { } {
++    global et_vect_shift_char_saved
++
++    if [info exists et_vect_shift_char_saved] {
++	verbose "check_effective_target_vect_shift_char: using cached result" 2
++    } else {
++	set et_vect_shift_char_saved 0
++	if { ([istarget powerpc*-*-*]
++             && ![istarget powerpc-*-linux*paired*])
++	     || [check_effective_target_arm32] } {
++	   set et_vect_shift_char_saved 1
++	}
++    }
++
++    verbose "check_effective_target_vect_shift_char: returning $et_vect_shift_char_saved" 2
++    return $et_vect_shift_char_saved
++}
++
+ # Return 1 if the target supports hardware vectors of long, 0 otherwise.
+ #
+ # This can change for different subtargets so do not cache the result.
+@@ -2260,7 +2429,7 @@
+ 	if { [istarget mipsisa64*-*-*]
+ 	     || [istarget sparc*-*-*]
+ 	     || [istarget ia64-*-*]
+-	     || [check_effective_target_arm32] } { 
++	     || [check_effective_target_arm_vect_no_misalign] } { 
+ 	    set et_vect_no_align_saved 1
+ 	}
+     }
+@@ -2374,6 +2543,24 @@
+     return $et_vector_alignment_reachable_for_64bit_saved
+ }
+ 
++# Return 1 if the target only requires element alignment for vector accesses
++
++proc check_effective_target_vect_element_align { } {
++    global et_vect_element_align
++
++    if [info exists et_vect_element_align] {
++	verbose "check_effective_target_vect_elemetn_align: using cached result" 2
++    } else {
++	set et_vect_element_align 0
++	if { [istarget arm*-*-*] } {
++	   set et_vect_element_align 1
++	}
++    }
++
++    verbose "check_effective_target_vect_element_align: returning $et_vect_element_align" 2
++    return $et_vect_element_align
++}
++
+ # Return 1 if the target supports vector conditional operations, 0 otherwise.
+ 
+ proc check_effective_target_vect_condition { } {
+@@ -2569,7 +2756,8 @@
+         verbose "check_effective_target_section_anchors: using cached result" 2
+     } else {
+         set et_section_anchors_saved 0
+-        if { [istarget powerpc*-*-*] } {
++        if { [istarget powerpc*-*-*] 
++	      || [istarget arm*-*-*] } {
+            set et_section_anchors_saved 1
+         }
+     }
+--- a/src/gcc/testsuite/objc/execute/forward-1.x
++++ b/src/gcc/testsuite/objc/execute/forward-1.x
+@@ -4,6 +4,7 @@
+ 
+ if { ([istarget x86_64-*-linux*] && [check_effective_target_lp64] )
+      || [istarget powerpc*-*-linux*]
++     || [istarget arm*]
+      || [istarget powerpc*-*-aix*]
+      || [istarget s390*-*-*-linux*]
+      || [istarget sh4-*-linux*]
+--- a/src/gcc/timevar.def
++++ b/src/gcc/timevar.def
+@@ -134,6 +134,7 @@
+ DEFTIMEVAR (TV_PREDCOM		     , "predictive commoning")
+ DEFTIMEVAR (TV_TREE_LOOP_INIT	     , "tree loop init")
+ DEFTIMEVAR (TV_TREE_LOOP_FINI	     , "tree loop fini")
++DEFTIMEVAR (TV_TREE_LOOP_PROMOTE     , "tree loop index promotion")
+ DEFTIMEVAR (TV_TREE_CH		     , "tree copy headers")
+ DEFTIMEVAR (TV_TREE_SSA_UNCPROP	     , "tree SSA uncprop")
+ DEFTIMEVAR (TV_TREE_SSA_TO_NORMAL    , "tree SSA to normal")
+@@ -141,6 +142,7 @@
+ DEFTIMEVAR (TV_TREE_COPY_RENAME	     , "tree rename SSA copies")
+ DEFTIMEVAR (TV_TREE_SSA_VERIFY       , "tree SSA verifier")
+ DEFTIMEVAR (TV_TREE_STMT_VERIFY      , "tree STMT verifier")
++DEFTIMEVAR (TV_TREE_RLS              , "tree local static removal")
+ DEFTIMEVAR (TV_TREE_SWITCH_CONVERSION, "tree switch initialization conversion")
+ DEFTIMEVAR (TV_CGRAPH_VERIFY         , "callgraph verifier")
+ DEFTIMEVAR (TV_DOM_FRONTIERS         , "dominance frontiers")
+--- a/src/gcc/toplev.h
++++ b/src/gcc/toplev.h
+@@ -139,6 +139,7 @@
+ extern int flag_unroll_all_loops;
+ extern int flag_unswitch_loops;
+ extern int flag_cprop_registers;
++extern int flag_remove_local_statics;
+ extern int time_report;
+ extern int flag_ira_coalesce;
+ extern int flag_ira_move_spills;
+--- a/src/gcc/tree-cfg.c
++++ b/src/gcc/tree-cfg.c
+@@ -47,6 +47,7 @@
+ #include "value-prof.h"
+ #include "pointer-set.h"
+ #include "tree-inline.h"
++#include "target.h"
+ 
+ /* This file contains functions for building the Control Flow Graph (CFG)
+    for a function tree.  */
+@@ -7052,6 +7053,9 @@
+   edge e;
+   edge_iterator ei;
+ 
++  if (!targetm.warn_func_result())
++    return 0;
++
+   /* If we have a path to EXIT, then we do return.  */
+   if (TREE_THIS_VOLATILE (cfun->decl)
+       && EDGE_COUNT (EXIT_BLOCK_PTR->preds) > 0)
+--- a/src/gcc/tree-pass.h
++++ b/src/gcc/tree-pass.h
+@@ -323,6 +323,7 @@
+ extern struct gimple_opt_pass pass_empty_loop;
+ extern struct gimple_opt_pass pass_record_bounds;
+ extern struct gimple_opt_pass pass_graphite_transforms;
++extern struct gimple_opt_pass pass_promote_indices;
+ extern struct gimple_opt_pass pass_if_conversion;
+ extern struct gimple_opt_pass pass_loop_distribution;
+ extern struct gimple_opt_pass pass_vectorize;
+@@ -388,6 +389,7 @@
+ extern struct gimple_opt_pass pass_rebuild_cgraph_edges;
+ extern struct gimple_opt_pass pass_build_cgraph_edges;
+ extern struct gimple_opt_pass pass_reset_cc_flags;
++extern struct gimple_opt_pass pass_remove_local_statics;
+ 
+ /* IPA Passes */
+ extern struct ipa_opt_pass pass_ipa_inline;
+--- a/src/gcc/tree-sra.c
++++ b/src/gcc/tree-sra.c
+@@ -274,6 +274,12 @@
+ 		      != TYPE_PRECISION (TREE_TYPE (t))))
+ 		goto fail;
+ 
++	      /* Disable optimization of bitfields on BITS_BIG_ENDIAN
++		 architectures.  SRA doesn't properly handle padding bits
++		 at the bottom, see issue6713.  */
++	      if (DECL_BIT_FIELD (t) && BITS_BIG_ENDIAN)
++		goto fail;
++
+ 	      saw_one_field = true;
+ 	    }
+ 
+--- a/src/gcc/tree-ssa-loop-promote.c
++++ b/src/gcc/tree-ssa-loop-promote.c
+@@ -0,0 +1,1692 @@
++/* Promotion of shorter-than-word-size loop indices.
++   Copyright (C) 2009 Free Software Foundation, Inc.
++   
++This file is part of GCC.
++   
++GCC is free software; you can redistribute it and/or modify it
++under the terms of the GNU General Public License as published by the
++Free Software Foundation; either version 3, or (at your option) any
++later version.
++   
++GCC is distributed in the hope that it will be useful, but WITHOUT
++ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++for more details.
++   
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++/* This pass finds loop indices that are declared as
++   shorter-than-word-size and replaces them with word-sized loop
++   indices.  (It assumes that word-sized quantities are the most
++   efficient type on which to do arithmetic.)  The loop optimization
++   machinery has a difficult time seeing through the casts required to
++   promote such indices to word-sized quantities for memory addressing
++   and/or preserving the semantics of the source language (such as C).
++   The transformation also helps eliminate unnecessary
++   {sign,zero}-extensions required for the same.
++
++   Although this is most naturally expressed as a loop optimization
++   pass, we choose to place this pass some ways before the loop
++   optimization passes proper, so that other scalar optimizations will
++   run on our "cleaned-up" code.  This decision has the negative of
++   requiring us to build and destroy all the loop optimization
++   infrastructure.
++
++   The algorithm is relatively simple.  For each single-exit loop, we
++   identify the loop index variable.  If the loop index variable is
++   shorter than the word size, then we have a candidate for promotion.
++   We determine whether the scalar evolution of the loop index fits a
++   particular pattern (incremented by 1, compared against a
++   similarly-typed loop bound, and only modified by a single increment
++   within the loop), as well as examining the uses of the loop index to
++   ensure we are able to safely promote those uses (e.g. the loop index
++   must not be stored to memory or passed to function calls).  If these
++   conditions are satisfied, we create an appropriate word-sized type
++   and replace all uses and defs of the loop index variable with the new
++   variable.  */
++
++#include "config.h"
++#include "system.h"
++#include "coretypes.h"
++#include "tm.h"
++
++#include "toplev.h"
++#include "rtl.h"
++#include "tm_p.h"
++#include "hard-reg-set.h"
++#include "obstack.h"
++#include "basic-block.h"
++#include "pointer-set.h"
++#include "intl.h"
++
++#include "tree.h"
++#include "gimple.h"
++#include "hashtab.h"
++#include "diagnostic.h"
++#include "tree-flow.h"
++#include "tree-dump.h"
++#include "cfgloop.h"
++#include "flags.h"
++#include "timevar.h"
++#include "tree-pass.h"
++
++struct promote_info {
++  /* The loop being analyzed.  */
++  struct loop *loop;
++
++  /* The GIMPLE_COND controlling exit from the loop.  */
++  gimple exit_expr;
++
++  /* The loop index variable's SSA_NAME that is defined in a phi node in
++     LOOP->HEADER.  Note that this SSA_NAME may be different than the
++     one appearing in EXIT_EXPR.  */
++  tree loop_index_name;
++
++  /* The bound of the loop.  */
++  tree loop_limit;
++
++  /* Whether we've warned about things with
++     warn_unsafe_loop_optimizations.  */
++  bool warned;
++
++  /* LOOP_INDEX_NAME's underlying VAR_DECL.  */
++  tree var_decl;
++
++  /* The types to which defs/uses of LOOP_INDEX_NAME are cast via
++     NOP_EXPRs.  */
++  VEC(tree, heap) *cast_types;
++
++  /* The number of times we have seen a cast to the corresponding type
++     (as determined by types_compatible_p) in CAST_TYPES.  */
++  VEC(int, heap) *cast_counts;
++
++  /* Whether LOOP_INDEX_NAME is suitable for promotion.  */
++  bool can_be_promoted_p;
++
++  /* If CAN_BE_PROMOTED_P, the promoted type.  */
++  tree promoted_type;
++
++  /* If CAN_BE_PROMOTED_P, the promoted VAR_DECL.  */
++  tree promoted_var;
++};
++
++/* A set of `struct promote_info'.  */
++
++static struct pointer_set_t *promotion_info;
++
++/* A set of all potentially promotable SSA_NAMEs, used for quick
++decision-making during analysis.  */
++
++static struct pointer_set_t *promotable_names;
++
++/* A map from SSA_NAMEs to the VAR_DECL to which they will be
++   promoted.  */
++
++static struct pointer_map_t *variable_map;
++
++/* A set of the stmts that we have already rebuilt with promoted variables.  */
++
++static struct pointer_set_t *promoted_stmts;
++
++/* Phi nodes that we have to fix up after we've promoted everything else.  */
++
++static struct pointer_set_t *phi_nodes_to_promote;
++
++
++/* Add CASTED to PI->CAST_TYPES if we haven't seen CASTED before.  */
++
++static void
++add_casted_type (struct promote_info *pi, tree casted)
++{
++  int i;
++  tree type;
++
++  /* For this information to be useful later, CASTED must be wider than
++     the type of the variable.  */
++  if (TYPE_PRECISION (casted) <= TYPE_PRECISION (TREE_TYPE (pi->var_decl)))
++    return;
++
++  for (i = 0; VEC_iterate (tree, pi->cast_types, i, type); i++)
++    if (types_compatible_p (casted, type))
++      {
++       int c = VEC_index(int, pi->cast_counts, i);
++       VEC_replace(int, pi->cast_counts, i, ++c);
++       return;
++      }
++
++  /* Haven't see the type before.  */
++  VEC_safe_push (tree, heap, pi->cast_types, casted);
++  VEC_safe_push (int, heap, pi->cast_counts, 1);
++}
++
++/* Return the most-casted-to type in PI->CAST_TYPES.  Return an
++   appropriately signed variant of size_type_node if the variable wasn't
++   cast in some fashion.  */
++
++static tree
++choose_profitable_promoted_type (struct promote_info *pi)
++{
++  int i;
++  int count;
++  tree type = NULL_TREE;
++  int maxuse = -1;
++
++  for (i = 0; VEC_iterate (int, pi->cast_counts, i, count); i++)
++    if (count > maxuse)
++      {
++       maxuse = count;
++       type = VEC_index (tree, pi->cast_types, i);
++      }
++
++  if (type == NULL_TREE)
++    {
++      if (dump_file)
++       {
++         fprintf (dump_file, "Warning, failed to find upcast type for ");
++         print_generic_expr (dump_file, pi->loop_index_name, 0);
++         fprintf (dump_file, "\n");
++       }
++      return (TYPE_UNSIGNED (TREE_TYPE (pi->var_decl))
++             ? size_type_node
++             : signed_type_for (size_type_node));
++    }
++  else
++    return signed_type_for (type);
++}
++
++/* Intuit the loop index for LOOP from PHI.  There must be a path that
++   only goes through NOP_EXPRs or CONVERT_EXPRs from the result of PHI
++   to one of the operands of COND.  If such a path cannot be found,
++   return NULL_TREE.  If LIMIT is not NULL and a path can be found,
++   store the other operand of COND into LIMIT.  */
++
++static tree
++find_promotion_candidate_from_phi (struct loop *loop, gimple cond,
++                                  gimple phi, tree *limit)
++{
++  tree op0, op1;
++  tree result, candidate;
++
++  result = candidate = PHI_RESULT (phi);
++  /* Must be an integer variable.  */
++  if (TREE_CODE (TREE_TYPE (candidate)) != INTEGER_TYPE)
++    return NULL_TREE;
++
++  op0 = gimple_cond_lhs (cond);
++  op1 = gimple_cond_rhs (cond);
++
++  /* See if there's a path from CANDIDATE to an operand of COND.  */
++  while (true)
++    {
++      use_operand_p use;
++      imm_use_iterator iui;
++      gimple use_stmt = NULL;
++
++      if (candidate == op0)
++       {
++         if (limit) *limit = op1;
++         break;
++       }
++      if (candidate == op1)
++       {
++         if (limit) *limit = op0;
++         break;
++       }
++
++      /* Find a single use in the loop header.  Give up if there's
++        multiple ones.  */
++      FOR_EACH_IMM_USE_FAST (use, iui, candidate)
++       {
++         gimple stmt = USE_STMT (use);
++
++         if (gimple_bb (stmt) == loop->header)
++           {
++             if (use_stmt)
++               {
++                 if (dump_file)
++                   {
++                     fprintf (dump_file, "Rejecting ");
++                     print_generic_expr (dump_file, candidate, 0);
++                     fprintf (dump_file, " because it has multiple uses in the loop header (bb #%d).\n",
++                              loop->header->index);
++                     fprintf (dump_file, "first use: ");
++                     print_gimple_stmt (dump_file, use_stmt, 0, 0);
++                     fprintf (dump_file, "\nsecond use: ");
++                     print_gimple_stmt (dump_file, stmt, 0, 0);
++                     fprintf (dump_file, "\n(possibly more, but unanalyzed)\n");
++                   }
++                 return NULL_TREE;
++               }
++             else
++               use_stmt = stmt;
++           }
++       }
++
++      /* No uses in the loop header, bail.  */
++      if (use_stmt == NULL)
++       return NULL_TREE;
++
++      if (gimple_code (use_stmt) != GIMPLE_ASSIGN
++         || TREE_CODE (gimple_assign_lhs (use_stmt)) != SSA_NAME
++         || (gimple_assign_rhs_code (use_stmt) != NOP_EXPR
++             && gimple_assign_rhs_code (use_stmt) != CONVERT_EXPR))
++       {
++         if (dump_file)
++           {
++             fprintf (dump_file, "Rejecting ");
++             print_generic_expr (dump_file, candidate, 0);
++             fprintf (dump_file, " because of use in ");
++             print_gimple_stmt (dump_file, use_stmt, 0, 0);
++             fprintf (dump_file, "\n");
++           }
++         return NULL_TREE;
++       }
++
++      candidate = gimple_assign_lhs (use_stmt);
++    }
++
++  /* CANDIDATE is now what we believe to be the loop index variable.  There
++     are two possibilities:
++
++     - CANDIDATE is not the "true" loop index variable, but rather is a
++       promoted version of RESULT, done for purposes of satisfying a
++       language's semantics;
++
++     - CANDIDATE is the "true" loop index variable.  */
++  if (!types_compatible_p (TREE_TYPE (result), TREE_TYPE (candidate)))
++    candidate = result;
++
++  /* The type of candidate must be "short" to consider promoting it.  */
++  if (TREE_CODE (TREE_TYPE (candidate)) != INTEGER_TYPE
++      || TYPE_PRECISION (TREE_TYPE (candidate)) >= TYPE_PRECISION (size_type_node))
++    return NULL_TREE;
++
++  return candidate;
++}
++
++/* Find the loop index variable of LOOP.  LOOP's exit is controlled by
++   the COND_EXPR EXPR.  IF we can't determine what the loop index
++   variable is, or EXPR does not appear to be analyzable, then return
++   NULL_TREE.  */
++
++static tree
++find_promotion_candidate (struct loop *loop, gimple cond, tree *limit)
++{
++  tree candidate = NULL_TREE;
++  gimple_stmt_iterator gsi;
++
++  switch (gimple_cond_code (cond))
++    {
++    case GT_EXPR:
++    case GE_EXPR:
++    case NE_EXPR:
++    case LT_EXPR:
++    case LE_EXPR:
++      break;
++
++    default:
++      return NULL_TREE;
++    }
++
++  /* We'd like to examine COND and intuit the loop index variable from
++     there.  Instead, we're going to start from the phi nodes in BB and
++     attempt to work our way forwards to one of the operands of COND,
++     since starting from COND might yield an upcast loop index.  If we
++     find multiple phi nodes whose results reach COND, then give up.  */
++  for (gsi = gsi_start_phis (loop->header); !gsi_end_p (gsi); gsi_next (&gsi))
++    {
++      gimple phi = gsi_stmt (gsi);
++      tree t = find_promotion_candidate_from_phi (loop, cond, phi, limit);
++
++      if (t == NULL_TREE)
++       continue;
++      else if (candidate == NULL_TREE)
++       candidate = t;
++      else
++       {
++         if (dump_file)
++           {
++             fprintf (dump_file, "Can't find a candidate from ");
++             print_gimple_stmt (dump_file, cond, 0, 0);
++             fprintf (dump_file, "\n  because too many phi node results reach the condition.\n");
++           }
++         return NULL_TREE;
++       }
++    }
++
++  return candidate;
++}
++
++/* Return true if X is something that could be promoted.  */
++
++static bool
++could_be_promoted (tree x)
++{
++  return (TREE_CODE (x) == INTEGER_CST
++         || (TREE_CODE (x) == SSA_NAME
++             && pointer_set_contains (promotable_names, x)));
++}
++
++/* Examine the RHS of STMT's suitability with respect to being able to
++   promote VAR.  */
++
++static bool
++check_rhs_for_promotability (struct promote_info *pi, tree var, gimple stmt,
++                            bool is_assign)
++{
++  enum tree_code subcode = gimple_assign_rhs_code (stmt);
++
++  bool ok = true;
++
++  switch (subcode)
++    {
++    case PLUS_EXPR:
++    case MINUS_EXPR:
++    case MULT_EXPR:
++    case EQ_EXPR:
++    case NE_EXPR:
++    case LT_EXPR:
++    case LE_EXPR:
++    case GT_EXPR:
++    case GE_EXPR:
++      {
++       tree op0 = gimple_assign_rhs1 (stmt);
++       tree op1 = gimple_assign_rhs2 (stmt);
++
++       ok = ((op0 == var && could_be_promoted (op1))
++             || (op1 == var && could_be_promoted (op0)));
++       break;
++      }
++    case COND_EXPR:
++      if (gimple_expr_type (stmt) == NULL
++         || gimple_expr_type (stmt) == void_type_node)
++       ok = true;
++      else
++       /* This is conservative; it's possible that these sorts of nodes
++          could be promoted, but we'd have to be very careful about
++          checking in which parts of the COND_EXPR the promotable
++          variable(s) are.  */
++       ok = false;
++      break;
++    case SSA_NAME:
++      {
++       tree expr = gimple_assign_rhs1 (stmt);
++       ok = (expr == var || could_be_promoted (expr));
++      }
++      break;
++    case INTEGER_CST:
++      break;
++    case NOP_EXPR:
++    case CONVERT_EXPR:
++      if (!is_assign)
++       {
++         add_casted_type (pi, gimple_expr_type (stmt));
++         break;
++       }
++      /* Fallthrough.  */
++    default:
++      ok = false;
++      break;
++    }
++
++  return ok;
++}
++
++/* Analyze the loop index VAR for promotability.  The rules for
++   promotability are:
++
++   For uses:
++
++   - The underlying variable may be used in NOP_EXPRs.
++
++   - The underlying variable may be used in simple arithmmetic
++     expressions so long as the other parts are potentially promotable
++     variables or constants (so we don't go willy-nilly on promoting
++     things).
++
++   - The underlying variable may not be stored to memory.
++
++   - All uses must occur inside the loop.
++
++   For defs:
++
++   - The underlying variable may not be loaded from memory; and
++
++   - The underlying variable may only be formed from expressions
++     involving potentially promotable varibles or constants.
++
++   Note that defs may occur outside of the loop; we do this to handle
++   initial conditions before entering the loop.  */
++
++static void
++analyze_loop_index_uses (tree var, struct promote_info *pi)
++{
++  imm_use_iterator iui;
++  use_operand_p use;
++  gimple bad_stmt = NULL;
++  const char *reason = NULL;
++
++  FOR_EACH_IMM_USE_FAST (use, iui, var)
++    {
++      basic_block bb;
++      gimple use_stmt = USE_STMT (use);
++
++      /* Uses must exist only within the loop.  */
++      bb = gimple_bb (use_stmt);
++
++      if (dump_file)
++       {
++         fprintf (dump_file, "Checking ");
++         print_gimple_stmt (dump_file, use_stmt, 0, 0);
++         fprintf (dump_file, "\n");
++       }
++
++      if (!flow_bb_inside_loop_p (pi->loop, bb))
++       {
++         bad_stmt = use_stmt;
++         reason = " is involved in stmt outside loop ";
++         break;
++       }
++
++      /* We cannot store the index to memory.  */
++      if (gimple_references_memory_p (use_stmt))
++       {
++         bad_stmt = use_stmt;
++         reason = " is stored to memory in ";
++         break;
++       }
++
++      if (gimple_code (use_stmt) == GIMPLE_CALL)
++       {
++         /* We cannot pass the variable to a function.  */
++         bad_stmt = use_stmt;
++         reason = " is passed to function in ";
++         break;
++       }
++      else if (gimple_code (use_stmt) == GIMPLE_ASSIGN)
++       {
++         tree lhs = gimple_assign_lhs (use_stmt);
++
++         if (!check_rhs_for_promotability (pi, var, use_stmt,
++                                           /*is_assign=*/false))
++           {
++             bad_stmt = use_stmt;
++             reason = " is involved in non-promotable expression ";
++             break;
++           }
++         else if ((TREE_CODE_CLASS (gimple_assign_rhs_code (use_stmt)) == tcc_binary
++                   || gimple_assign_rhs_code (use_stmt) == SSA_NAME)
++                  && !could_be_promoted (lhs))
++           {
++             bad_stmt = use_stmt;
++             reason = " is being assigned to non-promotable variable ";
++             break;
++           }
++       }
++      else if (gimple_code (use_stmt) != GIMPLE_COND
++              && gimple_code (use_stmt) != GIMPLE_PHI)
++       {
++         /* Use of the variable in some statement we don't know how to
++            analyze.  */
++         bad_stmt = use_stmt;
++         reason = " is used in unanalyzable expression in ";
++         break;
++       }
++    }
++
++  if (bad_stmt && reason)
++    {
++      if (dump_file)
++       {
++         fprintf (dump_file, "Loop index ");
++         print_generic_expr (dump_file, var, 0);
++         fprintf (dump_file, "%s", reason);
++         print_gimple_stmt (dump_file, bad_stmt, 0, 0);
++         fprintf (dump_file, "\n");
++       }
++      pi->can_be_promoted_p = false;
++    }
++}
++
++/* Check that the uses and def of VAR, defined in STMT, conform to the
++   rules given above.  */
++
++static bool
++analyze_loop_index (tree var, gimple stmt, void *data)
++{
++  struct promote_info *pi = (struct promote_info *) data;
++
++  if (dump_file)
++    {
++      fprintf (dump_file, "Analyzing loop index ");
++      print_generic_expr (dump_file, var, 0);
++      fprintf (dump_file, " defined in ");
++      print_gimple_stmt (dump_file, stmt, 0, 0);
++      fprintf (dump_file, "\n");
++    }
++
++  /* Check the definition.  */
++  switch (gimple_code (stmt))
++    {
++    case GIMPLE_PHI:
++      /* Phi nodes are OK.  */
++      break;
++
++    case GIMPLE_ASSIGN:
++      if (!check_rhs_for_promotability (pi, var, stmt,
++                                       /*is_assign=*/true))
++       break;
++      /* Fallthrough.  */
++
++    default:
++      /* Something we can't handle or the variable is being loaded from
++        memory.  */
++      pi->can_be_promoted_p = false;
++      goto done;
++    }
++
++  if (gimple_code (stmt) == GIMPLE_PHI)
++    {
++      unsigned int i;
++
++      for (i = 0; i < gimple_phi_num_args (stmt); i++)
++       {
++         tree arg = PHI_ARG_DEF (stmt, i);
++
++         if (TREE_CODE (arg) == SSA_NAME)
++           pointer_set_insert (promotable_names, arg);
++       }
++
++      analyze_loop_index_uses (PHI_RESULT (stmt), pi);
++    }
++  else
++    analyze_loop_index_uses (var, pi);
++
++  /* Only worth continuing if we think the loop index can be
++     promoted.  */
++ done:
++  if (dump_file)
++    {
++      fprintf (dump_file, "Done analyzing ");
++      print_generic_expr (dump_file, var, 0);
++      fprintf (dump_file, " defined in ");
++      print_gimple_stmt (dump_file, stmt, 0, 0);
++      fprintf (dump_file, "...%s to analyze\n\n",
++              pi->can_be_promoted_p ? "continuing" : "not continuing");
++    }
++  return !pi->can_be_promoted_p;
++}
++
++/* Determine whether T is an INTEGER_CST or a single-use SSA_NAME
++   defined as the result of a NOP_EXPR or CONVERT_EXPR.  Return the
++   operand of the NOP_EXPR or CONVERT_EXPR if so.  */
++
++static tree
++upcast_operand_p (tree t)
++{
++  gimple def;
++
++  if (TREE_CODE (t) == INTEGER_CST)
++    return t;
++
++  if (TREE_CODE (t) != SSA_NAME
++      || !has_single_use (t))
++    return NULL_TREE;
++
++  def = SSA_NAME_DEF_STMT (t);
++  if (gimple_code (def) != GIMPLE_ASSIGN)
++    return NULL_TREE;
++
++  if (gimple_assign_rhs_code (def) != CONVERT_EXPR
++      && gimple_assign_rhs_code (def) != NOP_EXPR)
++    return NULL_TREE;
++
++  return gimple_assign_rhs1 (def);
++}
++
++/* Check for the idiom:
++
++     short x, y;
++     unsigned short x.2, y.2, tmp;
++     ...
++     x.2 = (unsigned short) x;
++     y.2 = (unsigned short) y;
++     tmp = x.2 + y.2;
++     x = (short) tmp;
++
++   which is generated by convert for avoiding signed arithmetic
++   overflow.  RHS is TMP in the above statement.  If RHS is
++   defined via such an idiom, store x and y into *OP0 and *OP1,
++   respectively.  We permit y.2 to be a constant if necessary.  */
++
++static bool
++signed_arithmetic_overflow_idiom_p (tree rhs, tree *op0, tree *op1)
++{
++  gimple op_stmt = SSA_NAME_DEF_STMT (rhs);
++  tree x2, y2;
++  bool yes = false;
++  enum tree_code code;
++
++  if (!has_single_use (rhs)
++      || gimple_code (op_stmt) != GIMPLE_ASSIGN)
++    goto done;
++
++  /* This could probably profitably be expanded to consider
++     MINUS_EXPR, MULT_EXPR, etc.  */
++  code = gimple_assign_rhs_code (op_stmt);
++  if (code != PLUS_EXPR)
++    goto done;
++  x2 = gimple_assign_rhs1 (op_stmt);
++  y2 = gimple_assign_rhs2 (op_stmt);
++
++  x2 = upcast_operand_p (x2);
++  if (x2 == NULL_TREE)
++    goto done;
++  y2 = upcast_operand_p (y2);
++  if (y2 == NULL_TREE)
++    goto done;
++
++  *op0 = x2;
++  *op1 = y2;
++  yes = true;
++
++ done:
++  return yes;
++}
++
++/* Simple wrapper around flow_bb_inside_loop_p that handles NULL
++   statements and initial definitions of variables.  */
++
++static bool
++stmt_in_loop_p (gimple t, struct loop *loop)
++{
++  basic_block bb;
++
++  if (t == NULL)
++    return false;
++
++  bb = gimple_bb (t);
++  if (bb == NULL)
++    return false;
++
++  return flow_bb_inside_loop_p (loop, bb);
++}
++
++/* The loop index should have a specific usage pattern:
++
++   - It should be defined in a phi node with two incoming values:
++
++     LI_phi = PHI (LI_out, LI_in)
++
++   - One incoming value, LI_out, should be from outside the loop.
++
++   - The other incoming value, LI_in, should be defined thusly:
++
++     LI_in = LI_phi + increment
++
++   - increment should be 1.  We permit other increments with
++     -funsafe-loop-optimizations.
++
++   - Finally, in the comparison to exit the loop, the loop index must be
++     compared against a variable that has a type at least as precise as
++     the loop index's type.  For instance, something like:
++
++       char limit;
++       short i;
++
++       for (i = 0; i < limit; i++) ... 
++
++     would not be permitted.  */
++
++static bool
++analyze_loop_index_definition_pattern (struct promote_info *pi)
++{
++  gimple phi = SSA_NAME_DEF_STMT (pi->loop_index_name);
++  bool ok = false, warn = false;
++  tree in0, in1;
++  bool inside0, inside1;
++  gimple def0, def1;
++  tree op0, op1, increment = NULL_TREE;
++
++  if (gimple_code (phi) != GIMPLE_PHI
++      || gimple_phi_num_args (phi) != 2)
++    goto done;
++
++  in0 = PHI_ARG_DEF (phi, 0);
++  in1 = PHI_ARG_DEF (phi, 1);
++
++  /* Figure out which value comes from outside the loop.  */
++  def0 = TREE_CODE (in0) == SSA_NAME ? SSA_NAME_DEF_STMT (in0) : NULL;
++  def1 = TREE_CODE (in1) == SSA_NAME ? SSA_NAME_DEF_STMT (in1) : NULL;
++
++  inside0 = stmt_in_loop_p (def0, pi->loop);
++  inside1 = stmt_in_loop_p (def1, pi->loop);
++
++  if (inside0 && inside1)
++    goto done;
++  else if (inside0)
++    {
++      tree t = in0;
++      gimple g;
++      in0 = in1;
++      in1 = t;
++      g = def0;
++      def0 = def1;
++      def1 = g;
++    }
++  else if (!inside1)
++    goto done;
++
++  /* IN0 comes from outside the loop, IN1 from inside.  Analyze IN1.  */
++  if (gimple_code (def1) != GIMPLE_ASSIGN)
++    goto done;
++
++  switch (gimple_assign_rhs_code (def1))
++    {
++    case CONVERT_EXPR:
++    case NOP_EXPR:
++      if (!signed_arithmetic_overflow_idiom_p (gimple_assign_rhs1 (def1),
++                                              &op0, &op1))
++       goto done;
++      goto plus;
++    case PLUS_EXPR:
++      op0 = gimple_assign_rhs1 (def1);
++      op1 = gimple_assign_rhs2 (def1);
++    plus:
++      {
++       bool op0_li = op0 == PHI_RESULT (phi);
++       bool op1_li = op1 == PHI_RESULT (phi);
++       if (op0_li && op1_li)
++         /* This is weird, and definitely is not a case we can support
++            for promotion.  */
++         goto done;
++       else if (op0_li)
++         increment = op1;
++       else if (op1_li)
++         increment = op0;
++       else
++         goto done;
++       break;
++      }
++    default:
++      break;
++    }
++
++
++  /* Check that the exit condition for the loop is OK.  */
++  {
++    enum tree_code code = gimple_cond_code (pi->exit_expr);
++
++    op0 = gimple_cond_lhs (pi->exit_expr);
++    op1 = gimple_cond_rhs (pi->exit_expr);
++
++    if (op0 == pi->loop_limit)
++      {
++       tree t = op0;
++       op0 = op1;
++       op1 = t;
++       code = swap_tree_comparison (code);
++      }
++
++    if (code != LT_EXPR && code != LE_EXPR)
++      goto done;
++
++    if (!types_compatible_p (TREE_TYPE (pi->loop_index_name),
++                            TREE_TYPE (pi->loop_limit)))
++      {
++       switch (TREE_CODE (pi->loop_limit))
++         {
++         case INTEGER_CST:
++           if (!int_fits_type_p (pi->loop_limit,
++                                 TREE_TYPE (pi->loop_index_name)))
++             goto done;
++           break;
++         case SSA_NAME:
++           {
++             tree v = pi->loop_limit;
++             gimple def = SSA_NAME_DEF_STMT (v);
++
++             /* Backtrack through CONVERT_EXPRs and/or NOP_EXPRs to
++                determine if the variables "started out" as the same
++                type.  */
++             while (gimple_code (def) == GIMPLE_ASSIGN)
++               {
++                 enum tree_code rhs_code = gimple_assign_rhs_code (def);
++
++                 if (rhs_code != NOP_EXPR && rhs_code != CONVERT_EXPR)
++                   break;
++
++                 v = gimple_assign_rhs1 (def);
++                 def = SSA_NAME_DEF_STMT (v);
++               }
++             /* Permit comparisons between non-compatible types with
++                flag_unsafe_loop_optimizations, since we can assume the
++                loop index does not overflow.  */
++             if (types_compatible_p (TREE_TYPE (pi->loop_index_name),
++                                     TREE_TYPE (v))
++                 || flag_unsafe_loop_optimizations)
++               break;
++             /* Fallthrough.  */
++           default:
++             goto done;
++           }
++         }
++      }
++  }
++
++  if (increment == NULL_TREE)
++    goto done;
++  if (TREE_CODE (increment) != INTEGER_CST
++      || compare_tree_int (increment, 1) != 0)
++    {
++      warn = true;
++      if (!flag_unsafe_loop_optimizations)
++       goto done;
++    }
++
++  ok = true;
++ done:
++  if (warn && !pi->warned)
++    {
++      pi->warned = true;
++      /* We can promote unsigned indices only if -funsafe-loop-optimizations
++        is in effect, since the user might be depending on the modulo
++        wraparound behavior of unsigned types.  */
++      if (warn_unsafe_loop_optimizations)
++       {
++         const char *wording;
++
++         wording = (flag_unsafe_loop_optimizations
++                    ? N_("assuming that the loop counter does not overflow")
++                    : N_("cannot optimize loop, the loop counter may overflow"));
++         warning (OPT_Wunsafe_loop_optimizations, "%s", gettext (wording));
++       }
++    }
++
++  return ok;
++}
++
++/* Analyze the loop associated with PI_ to see if its loop index can be
++   promoted.  */
++
++static bool
++analyze_loop (const void *pi_, void *data)
++{
++  struct promote_info *pi = CONST_CAST (struct promote_info *,
++                                       (const struct promote_info *) pi_);
++  bool *changed = (bool *) data;
++
++  /* We previously determined we can't promote this; go ahead and
++     continue iterating.  */
++  if (pi->loop_index_name == NULL_TREE)
++    return true;
++
++  /* Assume we can always promote the loop index, even if it doesn't
++     exist.  */
++  pi->can_be_promoted_p = true;
++
++  if (dump_file)
++    {
++      fprintf (dump_file, "Analyzing ");
++      print_generic_expr (dump_file, pi->loop_index_name, 0);
++      fprintf (dump_file, "\n");
++    }
++
++  if (pi->loop_index_name
++      && analyze_loop_index_definition_pattern (pi))
++    {
++      /* Clear any previously gathered information.  */
++      VEC_truncate (tree, pi->cast_types, 0);
++      VEC_truncate (int, pi->cast_counts, 0);
++
++      walk_use_def_chains (pi->loop_index_name, analyze_loop_index, pi, false);
++    }
++  else
++    pi->can_be_promoted_p = false;
++
++  /* If we determined the loop index is used in strange ways, clear it
++     so we don't examine it again.  */
++  if (!pi->can_be_promoted_p)
++    pi->loop_index_name = NULL_TREE;
++
++  /* Let our caller know whether to re-do the analysis.  */
++  *changed = *changed || !pi->can_be_promoted_p;
++  /* Continue if PI is promotable.  */
++  return pi->can_be_promoted_p;
++}
++
++/* Add PI_->LOOP_INDEX_NAME to the set of variables, DATA, that we are
++   considering for promotion.  */
++
++static bool
++add_variable (const void *pi_, void *data ATTRIBUTE_UNUSED)
++{
++  const struct promote_info *pi = (const struct promote_info *) pi_;
++  struct pointer_set_t *pset = (struct pointer_set_t *) data;
++  int presentp;
++
++  if (pi->loop_index_name != NULL_TREE)
++    {
++      presentp = pointer_set_insert (pset, pi->loop_index_name);
++      gcc_assert (!presentp);
++    }
++
++  /* Continue traversal.  */
++  return true;
++}
++
++/* For each promotable variable:
++
++   - create a new, promoted VAR_DECL;
++
++   - walk through all the uses and defs and create new statements using
++     the promoted variables.  We don't create new phi nodes; post-pass
++     SSA update will handle those for us.  */
++
++/* Make dump files readable.  */
++#define PROMOTED_VAR_SUFFIX ".promoted"
++
++/* Create a variable NAME with TYPE and do the necessary work to inform
++   the SSA machinery about it.  */
++
++static tree
++create_pli_var (tree type, char *name)
++{
++  tree var = create_tmp_var (type, name);
++  create_var_ann (var);
++  mark_sym_for_renaming (var);
++  add_referenced_var (var);
++  return var;
++}
++
++/* Associate the SSA_NAME VAR with the promoted variable DATA.  */
++
++static bool
++associate_name_with_var (tree var, gimple def_stmt, void *data)
++{
++  tree promoted_var = (tree) data;
++  void **p;
++
++  gcc_assert (promoted_var != NULL_TREE);
++
++  if (gimple_code (def_stmt) == GIMPLE_PHI)
++    var = PHI_RESULT (def_stmt);
++
++  p = pointer_map_insert (variable_map, var);
++
++  if (!*p)
++    {
++      if (dump_file)
++       {
++         fprintf (dump_file, "Associating ");
++         print_generic_expr (dump_file, var, 0);
++         fprintf (dump_file, " with ");
++         print_generic_expr (dump_file, promoted_var, 0);
++         fprintf (dump_file, "\n\n");
++       }
++      *(tree *)p = promoted_var;
++    }
++
++  /* Continue traversal.  */
++  return false;
++}
++
++/* Create a promoted variable for the variable from PI_.  */
++
++static bool
++create_promoted_variable (const void *pi_, void *data ATTRIBUTE_UNUSED)
++{
++  struct promote_info *pi = CONST_CAST (struct promote_info *,
++                                       (const struct promote_info *) pi_);
++
++  if (pi->can_be_promoted_p)
++    {
++      tree type = choose_profitable_promoted_type (pi);
++      tree orig_name = DECL_NAME (pi->var_decl);
++      size_t id_len = IDENTIFIER_LENGTH (orig_name);
++      size_t name_len = id_len + strlen (PROMOTED_VAR_SUFFIX) + 1;
++      char *name;
++
++      name = (char *) alloca (name_len);
++      strcpy (name, IDENTIFIER_POINTER (orig_name));
++      strcpy (name + id_len, PROMOTED_VAR_SUFFIX);
++
++      pi->promoted_type = type;
++      pi->promoted_var = create_pli_var (type, name);
++
++      if (dump_file)
++       {
++         fprintf (dump_file, "Created new variable ");
++         print_generic_expr (dump_file, pi->promoted_var, 0);
++         fprintf (dump_file, " to stand in for ");
++         print_generic_expr (dump_file, pi->loop_index_name, 0);
++         fprintf (dump_file, "\n\n");
++       }
++
++      walk_use_def_chains (pi->loop_index_name,
++                          associate_name_with_var,
++                          pi->promoted_var, false);
++    }
++
++  /* Continue traversal.  */
++  return true;
++}
++
++/* Rebuild T with newly promoted variables; STMT is the original
++   statement in which T appeared and may be equivalent to T.  TYPE is
++   non-null when rebuilding the rhs of a GIMPLE_ASSIGN and indicates the
++   type of the lhs.  */
++
++static tree
++rebuild_tree_with_promotion (tree t, gimple stmt, tree type,
++                            gimple_stmt_iterator gsi,
++                            struct promote_info *pi)
++{
++  tree op0, op1;
++
++  switch (TREE_CODE (t))
++    {
++    case NOP_EXPR:
++    case CONVERT_EXPR:
++      {
++       tree pvar = rebuild_tree_with_promotion (TREE_OPERAND (t, 0), stmt, type, gsi, pi);
++
++       if (types_compatible_p (type, TREE_TYPE (pvar)))
++         return pvar;
++       else
++         return build1 (TREE_CODE (t), type, pvar);
++      }
++    case INTEGER_CST:
++      {
++       return build_int_cst_wide (pi->promoted_type,
++                                  TREE_INT_CST_LOW (t),
++                                  TREE_INT_CST_HIGH (t));
++      }
++    case COND_EXPR:
++      {
++       tree orig_op0 = TREE_OPERAND (t, 0);
++       op0 = rebuild_tree_with_promotion (orig_op0, stmt, type, gsi, pi);
++       gcc_assert (orig_op0 != op0);
++       TREE_OPERAND (t, 0) = op0;
++       return t;
++      }
++    case PLUS_EXPR:
++    case MINUS_EXPR:
++    case MULT_EXPR:
++      type = pi->promoted_type;
++      goto binary_expr;
++    case EQ_EXPR:
++    case NE_EXPR:
++    case LT_EXPR:
++    case LE_EXPR:
++    case GT_EXPR:
++    case GE_EXPR:
++      type = TREE_TYPE (t);
++    binary_expr:
++      op0 = TREE_OPERAND (t, 0);
++      op1 = TREE_OPERAND (t, 1);
++      op0 = rebuild_tree_with_promotion (op0, stmt, type, gsi, pi);
++      op1 = rebuild_tree_with_promotion (op1, stmt, type, gsi, pi);
++      return build2 (TREE_CODE (t), type, op0, op1);
++    case SSA_NAME:
++      {
++       void **p = pointer_map_contains (variable_map, t);
++
++       if (p == NULL)
++         {
++           /* This is unexpected, but it does happen if we were dealing
++              with COND_EXPRs and such.  Just go ahead and create a
++              temporary for it.  */
++           if (types_compatible_p (TREE_TYPE (t), pi->promoted_type)
++               || SSA_NAME_DEF_STMT (t) == stmt)
++             return t;
++           else
++             goto insert_cast;
++         }
++       else
++         return *(tree *)p;
++      }
++    case VAR_DECL:
++      return t;
++    default:
++    insert_cast:
++      {
++       gimple cast;
++       tree tmp, nop;
++       tree to_upcast = t;
++
++       /* If we are dealing with a memory reference, then we can't have
++          wrap it in a NOP_EXPR; we need to load the value from memory
++          first, then convert it.  */
++       if (!is_gimple_reg (to_upcast))
++         {
++           tree tmp = create_pli_var (TREE_TYPE (to_upcast),
++                                      CONST_CAST (char *, "loadtmp"));
++           gimple stmt = gimple_build_assign (tmp, to_upcast);
++           gsi_insert_before (&gsi, stmt, GSI_SAME_STMT);
++           to_upcast = tmp;
++         }
++
++       tmp = create_pli_var (pi->promoted_type,
++                             CONST_CAST (char *, "promotetmp"));
++       nop = build1 (NOP_EXPR, pi->promoted_type, to_upcast);
++       cast = gimple_build_assign (tmp, nop);
++       if (dump_file)
++         {
++           fprintf (dump_file, "Inserting cast ");
++           print_gimple_stmt (dump_file, cast, 0, 0);
++           fprintf (dump_file, " prior to ");
++           print_gimple_stmt (dump_file, stmt, 0, 0);
++           fprintf (dump_file, "\n");
++         }
++       gsi_insert_before (&gsi, cast, GSI_SAME_STMT);
++       return tmp;
++      }
++    }
++}
++
++/* Split E and place STMT in the block created by doing so.  */
++
++static void
++insert_along_edge (gimple stmt, edge e)
++{
++  basic_block bb = split_edge (e);
++
++  gimple_set_bb (stmt, bb);
++  set_bb_seq (bb, gimple_seq_alloc_with_stmt (stmt));
++}
++
++/* Rebuild STMT, which contains uses or a def of the promotable variable
++   associated with PI.  */
++
++static void
++rebuild_with_promotion (gimple stmt, struct promote_info *pi)
++{
++  gimple_stmt_iterator gsi;
++
++  if (pointer_set_insert (promoted_stmts, stmt))
++    return;
++
++  if (dump_file)
++    {
++      fprintf (dump_file, "Rebuilding stmt ");
++      print_gimple_stmt (dump_file, stmt, 0, 0);
++      fprintf (dump_file, "\n");
++    }
++
++  gsi = gsi_for_stmt (stmt);
++  
++  switch (gimple_code (stmt))
++    {
++    case GIMPLE_ASSIGN:
++      {
++       enum tree_code subcode = gimple_assign_rhs_code (stmt);
++       enum tree_code newcode = subcode;
++       tree lhs = gimple_assign_lhs (stmt);
++       tree rhs1 = gimple_assign_rhs1 (stmt);
++       tree rhs2 = gimple_assign_rhs2 (stmt);
++       tree x, y;
++       void **v;
++
++       /* If we are defining a promotable variable, check for special
++          idioms.  */
++       v = pointer_map_contains (variable_map, lhs);
++       if (v != NULL
++           && *(tree *)v == pi->promoted_var
++           && (subcode == NOP_EXPR || subcode == CONVERT_EXPR)
++           && signed_arithmetic_overflow_idiom_p (rhs1, &x, &y))
++         {
++           void **xp;
++           void **yp;
++           if (TYPE_PRECISION (TREE_TYPE (rhs1))
++               >= TYPE_PRECISION (pi->promoted_type))
++             goto done;
++
++           /* It's possible that we've already promoted the operands of
++              one or both of the NOP_EXPRs.  In that case, we can
++              bypass the logic below and go straight to rebuilding the
++              rhs that we really want to transform.  */
++           if (TREE_CODE (x) == VAR_DECL
++               || TREE_CODE (y) == VAR_DECL)
++             goto build_fake;
++           xp = pointer_map_contains (variable_map, x);
++           yp = pointer_map_contains (variable_map, y);
++
++           /* Nothing to see here.  */
++           if (!types_compatible_p (TREE_TYPE (x),
++                                    TREE_TYPE (y))
++               || (xp == NULL && yp == NULL))
++             goto done;
++           x = (xp == NULL ? NULL_TREE : *(tree *)xp);
++           y = (yp == NULL ? NULL_TREE : *(tree *)yp);
++
++           if (x != pi->promoted_var && y != pi->promoted_var)
++             goto done;
++
++         build_fake:
++           newcode = PLUS_EXPR;
++           rhs1 = x;
++           rhs2 = y;
++           if (dump_file)
++             {
++               fprintf (dump_file, "Substituting ");
++               print_generic_expr (dump_file, x, 0);
++               fprintf (dump_file, " + ");
++               print_generic_expr (dump_file, y, 0);
++               fprintf (dump_file, " for rhs of original statement\n");
++             }
++
++         done:
++           ;
++         }
++
++       lhs = rebuild_tree_with_promotion (lhs, stmt, NULL, gsi, pi);
++       rhs1 = rebuild_tree_with_promotion (rhs1, stmt, NULL, gsi, pi);
++       if (rhs2)
++         rhs2 = rebuild_tree_with_promotion (rhs2, stmt, NULL, gsi, pi);
++
++       if (newcode != subcode)
++         {
++           gimple newstmt = gimple_build_assign_with_ops (newcode,
++                                                          lhs, rhs1, rhs2);
++           gsi_replace (&gsi, newstmt, true);
++           stmt = newstmt;
++         }
++       else
++         {
++           gimple_assign_set_lhs (stmt, lhs);
++           gimple_assign_set_rhs1 (stmt, rhs1);
++           if (rhs2)
++             gimple_assign_set_rhs2 (stmt, rhs2);
++         }
++      }
++      break;
++    case GIMPLE_COND:
++      {
++       tree lhs = gimple_cond_lhs (stmt);
++       tree rhs = gimple_cond_rhs (stmt);
++
++       lhs = rebuild_tree_with_promotion (lhs, stmt, NULL, gsi, pi);
++       rhs = rebuild_tree_with_promotion (rhs, stmt, NULL, gsi, pi);
++
++       gimple_cond_set_lhs (stmt, lhs);
++       gimple_cond_set_rhs (stmt, rhs);
++      }
++      break;
++    case GIMPLE_PHI:
++      /* Save for later rebuilding.  Any rebuilding of a phi node will
++	 cause an incoming edge to be split, which means that the phi
++	 node may be reallocated, which means that keeping track of
++	 which statements have been rebuilt (by pointer equality) breaks
++	 down.  */
++      gsi = gsi_for_stmt (stmt);
++      pointer_set_insert (phi_nodes_to_promote, gsi_stmt_ptr (&gsi));
++      break;
++    default:
++      gcc_unreachable ();
++    }
++
++  if (dump_file)
++    {
++      fprintf (dump_file, "Converted stmt ");
++      print_gimple_stmt (dump_file, stmt, 0, 0);
++      fprintf (dump_file, "\n\n");
++    }
++  update_stmt (stmt);
++}
++
++/* Helper function for promote_variable that walks over use/def
++   chains.  */
++
++static bool
++promote_variable_1 (tree var, gimple stmt, void *data)
++{
++  struct promote_info *pi = (struct promote_info *) data;
++  imm_use_iterator imi;
++  gimple use_stmt;
++
++  rebuild_with_promotion (stmt, pi);
++
++  if (gimple_code (stmt) == GIMPLE_PHI)
++    var = PHI_RESULT (stmt);
++
++  if (could_be_promoted (var))
++    FOR_EACH_IMM_USE_STMT (use_stmt, imi, var)
++      {
++	rebuild_with_promotion (use_stmt, pi);
++      }
++
++  return false;
++}
++
++/* Convert all uses and defs of PI_->LOOP_INDEX_NAME as linked by
++   use-def chains to uses and defs of PI_->PROMOTED_VAR.  */
++
++static bool
++promote_variable (const void *pi_, void *data ATTRIBUTE_UNUSED)
++{
++  const struct promote_info *pi = (const struct promote_info *) pi_;
++
++  if (pi->can_be_promoted_p)
++    {
++      walk_use_def_chains (pi->loop_index_name, promote_variable_1,
++                          CONST_CAST (struct promote_info *, pi), false);
++    }
++
++  /* Continue traversal.  */
++  return true;
++}
++
++static bool
++promote_phi_node (const void *phi_, void *data ATTRIBUTE_UNUSED)
++{
++  const gimple *cphi = (const gimple *) phi_;
++  gimple_stmt_iterator gsi = gsi_for_stmt (*cphi);
++  gimple *phi_p = gsi_stmt_ptr (&gsi);
++  gimple phi = *phi_p;
++  unsigned int i;
++  bool promoted_result = could_be_promoted (PHI_RESULT (phi));
++
++  /* There are two cases we have to be concerned about:
++
++     - If the result can be promoted, then any incoming INTEGER_CSTs
++       need to be assigned to the newly promoted variable, rather than
++       the promotable variable;
++
++     - If the result cannot be promoted, then we need to check if any of
++       the arguments are promotable.  For each argument that is, we need
++       to insert a truncating assignment to convert from the type of the
++       promoted variable to the type of the PHI_RESULT.
++
++     In both cases, we have to regrab the phi node after we've inserted
++     the new assignment along the appropriate edge, since
++     insert_along_edge might have reallocated the phi node.  */
++  for (i = 0; i < gimple_phi_num_args (phi); i++)
++    {
++      tree var = gimple_phi_arg_def (phi, i);
++      edge e = gimple_phi_arg_edge (phi, i);
++      gimple assign = NULL;
++
++      if (TREE_CODE (var) == INTEGER_CST && promoted_result)
++	{
++	  tree promoted, cst;
++	  void **p;
++	  
++	  p = pointer_map_contains (variable_map, PHI_RESULT (phi));
++	  gcc_assert (p);
++	  promoted = (tree) *p;
++	  cst = build_int_cst_wide (TREE_TYPE (promoted),
++				    TREE_INT_CST_LOW (var),
++				    TREE_INT_CST_HIGH (var));
++
++	  assign = gimple_build_assign (promoted, cst);
++	}
++      else if (!promoted_result
++	       && TREE_CODE (var) == SSA_NAME
++	       && could_be_promoted (var))
++	{
++	  tree promoted, t, name;
++	  void **p;
++
++	  p = pointer_map_contains (variable_map, var);
++	  gcc_assert (p);
++	  promoted = (tree) *p;
++
++	  if (dump_file)
++	    {
++	      fprintf (dump_file, "Inserting downcast of promoted variable ");
++	      print_generic_expr (dump_file, promoted, 0);
++	      fprintf (dump_file, "\n");
++	    }
++
++	  t = create_pli_var (TREE_TYPE (PHI_RESULT (phi)),
++			      CONST_CAST (char *, "promote_cast_tmp"));
++	  assign = gimple_build_assign_with_ops (CONVERT_EXPR,
++						 t, promoted,
++						 NULL_TREE);
++
++	  name = make_ssa_name (t, assign);
++	  gimple_assign_set_lhs (assign, name);
++	  SET_PHI_ARG_DEF (phi, i, name);
++	}
++
++      if (assign != NULL)
++	{
++	  insert_along_edge (assign, e);
++	  phi = *phi_p;
++	}
++    }
++
++  /* Continue traversal.  */
++  return true;
++}
++
++/* Free PI_ and its associated data.  */
++
++static bool
++free_pi_entries (const void *pi_, void *data ATTRIBUTE_UNUSED)
++{
++  struct promote_info *pi = CONST_CAST (struct promote_info *,
++                                       (const struct promote_info *) pi_);
++
++  VEC_free (tree, heap, pi->cast_types);
++  VEC_free (int, heap, pi->cast_counts);
++  free (pi);
++
++  /* Continue traversal.  */
++  return true;
++}
++
++/* Collect information about variables that we believe to be loop
++   indices in PROMOTION_INFO.  */
++
++static void
++collect_promotion_candidates (void)
++{
++  loop_iterator li;
++  struct loop *loop;
++
++  FOR_EACH_LOOP (li, loop, 0)
++    {
++      basic_block header = loop->header;
++      gimple exit_cond = last_stmt (header);
++      
++      if (exit_cond && gimple_code (exit_cond) == GIMPLE_COND)
++       {
++         tree loop_index;
++         tree limit = NULL_TREE;
++         tree decl;
++         struct promote_info *pi;
++
++         loop_index = find_promotion_candidate (loop, exit_cond, &limit);
++         if (loop_index == NULL_TREE)
++           continue;
++         decl = SSA_NAME_VAR (loop_index);
++         if (TREE_ADDRESSABLE (decl))
++           continue;
++
++         if (dump_file)
++           {
++             fprintf (dump_file, "Found loop index ");
++             print_generic_expr (dump_file, loop_index, 0);
++             fprintf (dump_file, " involved in ");
++             print_gimple_stmt (dump_file, exit_cond, 0, 0);
++             fprintf (dump_file, "\n\n");
++           }
++
++         pi = XCNEW (struct promote_info);
++         pi->loop = loop;
++         pi->exit_expr = exit_cond;
++         pi->loop_index_name = loop_index;
++         pi->loop_limit = limit;
++         pi->var_decl = decl;
++         /* We think so, anyway...  */
++         pi->can_be_promoted_p = true;
++         pointer_set_insert (promotion_info, pi);
++       }
++      else if (dump_file)
++       {
++         fprintf (dump_file, "\nSkipping analysis of loop %d (header bb #%d)\n",
++                  loop->num, loop->header->index);
++         if (exit_cond)
++           {
++             fprintf (dump_file, "Exit condition was ");
++             print_gimple_stmt (dump_file, exit_cond, 0, 0);
++             fprintf (dump_file, "\n");
++           }
++       }
++    }
++}
++
++/* Free memory associated with global variables that we used.  */
++
++static void
++pli_cleanup (void)
++{
++  if (phi_nodes_to_promote)
++    {
++      pointer_set_destroy (phi_nodes_to_promote);
++      phi_nodes_to_promote = NULL;
++    }
++  if (promoted_stmts)
++    {
++      pointer_set_destroy (promoted_stmts);
++      promoted_stmts = NULL;
++    }
++  if (variable_map)
++    {
++      pointer_map_destroy (variable_map);
++      variable_map = NULL;
++    }
++  if (promotable_names)
++    {
++      pointer_set_destroy (promotable_names);
++      promotable_names = NULL;
++    }
++  if (promotion_info)
++    {
++      pointer_set_traverse (promotion_info, free_pi_entries, NULL);
++      pointer_set_destroy (promotion_info);
++      promotion_info = NULL;
++    }
++}
++
++/* The guts of the pass.  */
++
++static unsigned int
++promote_short_indices (void)
++{
++  bool did_something = false;
++  bool changed;
++  size_t max_iterations, i, n_promoted;
++
++  promotion_info = pointer_set_create ();
++  collect_promotion_candidates ();
++
++  if (dump_file)
++    fprintf (dump_file, "Found %d candidates for promotion\n",
++            (int) pointer_set_n_elements (promotion_info));
++
++  /* Nothing to do.  */
++  if (pointer_set_n_elements (promotion_info) == 0)
++    goto cleanup;
++
++  /* We have information about which variables are loop index variables.
++     We now need to determine the promotability of the loop indices.
++     Since the promotability of loop indices may depend on other loop
++     indices, we need to repeat this until we reach a fixed point.  */
++  changed = true;
++  max_iterations = pointer_set_n_elements (promotion_info);
++  i = 0;
++
++  promotable_names = pointer_set_create ();
++
++  while (changed)
++    {
++      changed = false;
++      pointer_set_clear (promotable_names);
++      pointer_set_traverse (promotion_info, add_variable,
++                           promotable_names);
++      n_promoted = pointer_set_n_elements (promotable_names);
++
++      if (dump_file)
++       fprintf (dump_file, "\nIteration %d, have %d variables to consider\n",
++                (int) i, (int) n_promoted);
++
++      if (n_promoted == 0)
++       break;
++      gcc_assert (i < max_iterations);
++      pointer_set_traverse (promotion_info, analyze_loop, &changed);
++      i++;
++    }
++
++  if (dump_file)
++    fprintf (dump_file, "Promoting %d variables\n",
++            (int) n_promoted);
++
++  if (n_promoted != 0)
++    {
++      did_something = true;
++      variable_map = pointer_map_create ();
++      promoted_stmts = pointer_set_create ();
++      phi_nodes_to_promote = pointer_set_create ();
++      pointer_set_traverse (promotion_info, create_promoted_variable, NULL);
++      pointer_set_traverse (promotion_info, promote_variable, NULL);
++      pointer_set_traverse (phi_nodes_to_promote, promote_phi_node, NULL);
++    }
++
++ cleanup:
++  pli_cleanup ();
++  return did_something ? TODO_update_ssa : 0;
++}
++
++/* Entry point for the short loop index promotion pass.  */
++
++static unsigned int
++tree_short_index_promotion (void)
++{
++  unsigned int changed = 0;
++
++  /* Initialize all the necessary loop infrastructure.  */
++  loop_optimizer_init (LOOPS_HAVE_PREHEADERS | LOOPS_HAVE_SIMPLE_LATCHES | LOOPS_HAVE_RECORDED_EXITS);
++  add_noreturn_fake_exit_edges ();
++  connect_infinite_loops_to_exit ();
++
++  if (number_of_loops () > 1)
++    changed = promote_short_indices ();
++
++  /* Tear down loop optimization infrastructure.  */
++  remove_fake_exit_edges ();
++  free_numbers_of_iterations_estimates ();
++  loop_optimizer_finalize ();
++
++  return changed;
++}
++
++static bool
++gate_short_index_promotion (void)
++{
++  return optimize > 0 && flag_promote_loop_indices;
++}
++
++struct gimple_opt_pass pass_promote_indices =
++{
++  {
++    GIMPLE_PASS,
++    "promoteshort",                    /* name */
++    gate_short_index_promotion,                /* gate */
++    tree_short_index_promotion,                /* execute */
++    NULL,                              /* sub */
++    NULL,                              /* next */
++    0,                                 /* static_pass_number */
++    TV_TREE_LOOP_PROMOTE,              /* tv_id */
++    PROP_cfg | PROP_ssa,               /* properties_required */
++    0,                                 /* properties_provided */
++    0,                                 /* properties_destroyed */
++    0,                                 /* todo_flags_start */
++    TODO_dump_func | TODO_verify_loops 
++    | TODO_ggc_collect                 /* todo_flags_finish */
++  }
++};
+--- a/src/gcc/tree-ssa-pre.c
++++ b/src/gcc/tree-ssa-pre.c
+@@ -104,6 +104,10 @@
+    In order to make it fully redundant, we insert the expression into
+    the predecessors where it is not available, but is ANTIC.
+ 
++   When optimizing for size, we only eliminate the partial redundancy
++   if we need to insert in only one predecessor.  This avoids almost
++   completely the code size increase that PRE usually causes.
++
+    For the partial anticipation case, we only perform insertion if it
+    is partially anticipated in some block, and fully available in all
+    of the predecessors.
+@@ -425,6 +429,7 @@
+ static void bitmap_value_insert_into_set (bitmap_set_t, pre_expr);
+ static void bitmap_value_replace_in_set (bitmap_set_t, pre_expr);
+ static void bitmap_set_copy (bitmap_set_t, bitmap_set_t);
++static void bitmap_set_and (bitmap_set_t, bitmap_set_t);
+ static bool bitmap_set_contains_value (bitmap_set_t, unsigned int);
+ static void bitmap_insert_into_set (bitmap_set_t, pre_expr);
+ static void bitmap_insert_into_set_1 (bitmap_set_t, pre_expr, bool);
+@@ -2989,13 +2994,6 @@
+   tree temp;
+   gimple phi;
+ 
+-  if (dump_file && (dump_flags & TDF_DETAILS))
+-    {
+-      fprintf (dump_file, "Found partial redundancy for expression ");
+-      print_pre_expr (dump_file, expr);
+-      fprintf (dump_file, " (%04d)\n", val);
+-    }
+-
+   /* Make sure we aren't creating an induction variable.  */
+   if (block->loop_depth > 0 && EDGE_COUNT (block->preds) == 2
+       && expr->kind != REFERENCE)
+@@ -3193,6 +3191,47 @@
+ }
+ 
+ 
++/* Indicate if, when optimizing for speed, it is appropriate to make
++   INSERTS_NEEDED insertions in order to make EXPR in BLOCK redundant.  */
++static bool
++ppre_n_insert_for_speed_p (pre_expr expr, basic_block block,
++			   unsigned int inserts_needed)
++{
++  /* The more expensive EXPR is, the more we should be prepared to insert
++     in the predecessors of BLOCK to make EXPR fully redundant.
++     For now, only recognize AND, OR, XOR, PLUS and MINUS of a multiple-use
++     SSA_NAME with a constant as cheap.  */
++  int cost;
++
++  if (flag_tree_pre_partial_partial_obliviously)
++    return true;
++  if (expr->kind == NARY)
++    {
++      vn_nary_op_t nary = PRE_EXPR_NARY (expr);
++      switch (nary->opcode)
++	{
++	  tree name, cnst;
++	case BIT_AND_EXPR: case BIT_IOR_EXPR: case BIT_XOR_EXPR:
++	case PLUS_EXPR: case MINUS_EXPR:
++
++	  gcc_assert (nary->length == 2);
++	  name = nary->op[0];
++	  cnst = nary->op[1];
++	  if (TREE_CODE (name) != SSA_NAME || has_single_use (name))
++	    return true;
++	  if (!is_gimple_min_invariant (cnst))
++	    return true;
++	  cost = 1;
++	  break;
++	default:
++	  return true;
++	}
++    }
++  else
++    return true;
++  return EDGE_COUNT (block->preds) * cost >= inserts_needed;
++
++}
+ 
+ /* Perform insertion of partially redundant values.
+    For BLOCK, do the following:
+@@ -3227,6 +3266,7 @@
+ 	  pre_expr *avail;
+ 	  unsigned int val;
+ 	  bool by_some = false;
++	  unsigned int inserts_needed = 0;
+ 	  bool cant_insert = false;
+ 	  bool all_same = true;
+ 	  pre_expr first_s = NULL;
+@@ -3281,6 +3321,7 @@
+ 		{
+ 		  avail[bprime->index] = eprime;
+ 		  all_same = false;
++		  inserts_needed++;
+ 		}
+ 	      else
+ 		{
+@@ -3290,6 +3331,11 @@
+ 		    first_s = edoubleprime;
+ 		  else if (!pre_expr_eq (first_s, edoubleprime))
+ 		    all_same = false;
++		  /* If the available value is not a NAME, PREing this
++		     value will probably result in a copy on the edge
++		     to assign the expression to a register.  */
++		  if (edoubleprime->kind != NAME)
++		    inserts_needed++;
+ 		}
+ 	    }
+ 	  /* If we can insert it, it's not the same value
+@@ -3298,9 +3344,27 @@
+ 	     partially redundant.  */
+ 	  if (!cant_insert && !all_same && by_some && dbg_cnt (treepre_insert))
+ 	    {
+-	      if (insert_into_preds_of_block (block, get_expression_id (expr),
+-					      avail))
+-		new_stuff = true;
++  	      if (dump_file && (dump_flags & TDF_DETAILS))
++		{
++		  fprintf (dump_file,
++			   "Found partial redundancy for expression ");
++		  print_pre_expr (dump_file, expr);
++		  fprintf (dump_file, " (%04d)\n", get_expr_value_id (expr));
++		}
++
++	      /* If optimizing for size, insert at most one
++		 new expression to avoid increasing code size.  */
++	      if (optimize_function_for_speed_p (cfun)
++		  ? 1 : EDGE_COUNT (block->preds) - inserts_needed == 1)
++		new_stuff |=
++		  insert_into_preds_of_block (block,
++					      get_expression_id (expr),
++					      avail);
++	      else if (dump_file && (dump_flags & TDF_DETAILS))
++		fprintf (dump_file, "Not inserting (optimizing for %s)\n",
++			 optimize_function_for_speed_p (cfun)
++			 ? "speed" : "size");
++
+ 	    }
+ 	  /* If all edges produce the same value and that value is
+ 	     an invariant, then the PHI has the same value on all
+@@ -3429,9 +3493,28 @@
+ 	  if (!cant_insert && by_all && dbg_cnt (treepre_insert))
+ 	    {
+ 	      pre_stats.pa_insert++;
+-	      if (insert_into_preds_of_block (block, get_expression_id (expr),
+-					      avail))
+-		new_stuff = true;
++	      if (dump_file && (dump_flags & TDF_DETAILS))
++		{
++		  fprintf (dump_file,
++			   "Found partial redundancy for expression ");
++		  print_pre_expr (dump_file, expr);
++		  fprintf (dump_file, " (%04d)\n", get_expr_value_id (expr));
++		}
++	      /* Assuming the expression is 50% anticipatable, we have to
++		 multiply the number of insertions needed by two for a cost
++		 comparison.  */
++	      if (!optimize_function_for_speed_p (cfun)
++		  || ppre_n_insert_for_speed_p (expr, block,
++						2 * EDGE_COUNT (block->preds)))
++		new_stuff |=
++		  insert_into_preds_of_block (block,
++					      get_expression_id (expr),
++					      avail);
++	      else if (dump_file && (dump_flags & TDF_DETAILS))
++		fprintf (dump_file, "Not inserting (optimizing for %s)\n",
++			 optimize_function_for_speed_p (cfun)
++			 ? "speed" : "size");
++
+ 	    }
+ 	  free (avail);
+ 	}
+@@ -3472,7 +3555,9 @@
+ 	  if (!single_pred_p (block))
+ 	    {
+ 	      new_stuff |= do_regular_insertion (block, dom);
+-	      if (do_partial_partial)
++	      /* Don't bother with partial-partial redundancies when
++		 optimizing for size.  */
++	      if (do_partial_partial && ! optimize_function_for_size_p (cfun))
+ 		new_stuff |= do_partial_partial_insertion (block, dom);
+ 	    }
+ 	}
+@@ -4212,11 +4297,11 @@
+    only wants to do full redundancy elimination.  */
+ 
+ static unsigned int
+-execute_pre (bool do_fre ATTRIBUTE_UNUSED)
++execute_pre (bool do_fre)
+ {
+   unsigned int todo = 0;
+ 
+-  do_partial_partial = optimize > 2;
++  do_partial_partial = flag_tree_pre_partial_partial;
+ 
+   /* This has to happen before SCCVN runs because
+      loop_optimizer_init may create new phis, etc.  */
+@@ -4288,19 +4373,20 @@
+   return todo;
+ }
+ 
+-/* Gate and execute functions for PRE.  */
++/* Gate and execute functions for FRE/PRE.  */
+ 
+ static unsigned int
+ do_pre (void)
+ {
+-  return TODO_rebuild_alias | execute_pre (false);
++  return TODO_rebuild_alias
++	 | execute_pre (! flag_tree_pre);
+ }
+ 
+ static bool
+ gate_pre (void)
+ {
+-  /* PRE tends to generate bigger code.  */
+-  return flag_tree_pre != 0 && optimize_function_for_speed_p (cfun);
++  /* Run FRE even if we don't run PRE.  */
++  return (flag_tree_fre || flag_tree_pre);
+ }
+ 
+ struct gimple_opt_pass pass_pre =
+--- a/src/gcc/tree-ssa-remove-local-statics.c
++++ b/src/gcc/tree-ssa-remove-local-statics.c
+@@ -0,0 +1,885 @@
++/* Local static variable elimination pass.
++   Copyright (C) 2007 Free Software Foundation, Inc.
++   Contributed by Nathan Froyd <froydnj@codesourcery.com>
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify it
++under the terms of the GNU General Public License as published by the
++Free Software Foundation; either version 3, or (at your option) any
++later version.
++
++GCC is distributed in the hope that it will be useful, but WITHOUT
++ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING3.  If not see
++<http://www.gnu.org/licenses/>.  */
++
++/* Converting static function-local variables to automatic variables.
++
++   The motivating example is a function like:
++
++   void
++   foo (unsigned n)
++   {
++     static int var;
++     unsigned i;
++
++     for (i = 0; i != n; i++)
++       {
++         var = ...
++
++         do other things with var...
++       }
++   }
++
++   Because VAR is static, doing things like code motion to loads and
++   stores of VAR is difficult.  Furthermore, accesses to VAR are
++   inefficient.  This pass aims to recognize the cases where it is not
++   necessary for VAR to be static and modify the code so that later
++   passes will do the appropriate optimizations.
++
++   The criteria for a static function-local variable V in a function F
++   being converted to an automatic variable are:
++
++   1. F does not call setjmp; and
++   2. V's address is never taken; and
++   3. V is not declared volatile; and
++   4. V is not used in any nested function;
++   5. V is not an aggregate value (union, struct, array, etc.); and
++   6. Every use of V is defined along all paths leading to the use.
++
++   NOTE: For ease of implementation, we currently treat a function call
++   as killing all previous definitions of static variables, since we
++   could have:
++
++   static void
++   foo (...)
++   {
++     static int x;
++
++     x = ...;       (1)
++
++    f (...);        (2)
++
++     ... = x;       (3)
++   }
++
++   The use at (3) needs to pick up a possible definition made by the
++   call at (2).  If the call at (2) does not call back into 'foo',
++   then the call is not a killing call.  We currently treat it as
++   though it is.  */
++
++#include "config.h"
++#include "system.h"
++#include "coretypes.h"
++#include "tm.h"
++
++#include "rtl.h"
++#include "tm_p.h"
++#include "hard-reg-set.h"
++#include "obstack.h"
++#include "basic-block.h"
++
++#include "tree.h"
++#include "gimple.h"
++#include "hashtab.h"
++#include "diagnostic.h"
++#include "tree-flow.h"
++#include "tree-dump.h"
++#include "flags.h"
++#include "timevar.h"
++#include "tree-pass.h"
++
++struct rls_decl_info
++{
++  /* The variable declaration.  */
++  tree orig_var;
++
++  /* Its index in rls_block_local_data.  */
++  int index;
++
++  /* Whether we can optimize this variable.  */
++  bool optimizable_p;
++
++  /* The new variable declaration, if we can optimize away the staticness
++     of 'orig_var'.  */
++  tree new_var;
++};
++
++/* Filled with 'struct rls_decl_info'; keyed off ORIG_VAR.  */
++static htab_t static_variables;
++
++struct rls_stmt_info
++{
++  /* The variable declaration.  */
++  tree var;
++
++  /* The statement in which we found a def or a use of the variable.  */
++  gimple stmt;
++
++  /* Whether STMT represents a use of VAR.  */
++  bool use_p;
++
++  /* A bitmap whose entries denote what variables have been defined
++     when execution arrives at STMT.  This field is only used when
++     USE_P is true.  */
++  sbitmap defined;
++};
++
++/* Filled with 'struct rls_stmt_info'; keyed off STMT.  */
++static htab_t defuse_statements;
++
++static struct
++{
++  /* The number of static variables we found.  */
++  size_t n_statics;
++
++  /* The number of optimizable variables we found.  */
++  size_t n_optimizable;
++} stats;
++
++struct rls_block_dataflow_data {
++  /* A bitmap whose entries denote what variables have been defined on
++     entry to this block.  */
++  sbitmap defined_in;
++
++  /* A bitmap whose entries denote what variables have been defined on
++     exit from this block.  */
++  sbitmap defined_out;
++};
++
++/* Parameters for the 'static_variables' hash table.  */
++
++static hashval_t
++rls_hash_decl_info (const void *x)
++{
++  return htab_hash_pointer
++    ((const void *) ((const struct rls_decl_info *) x)->orig_var);
++}
++
++static int
++rls_eq_decl_info (const void *x, const void *y)
++{
++  const struct rls_decl_info *a = (const struct rls_decl_info *) x;
++  const struct rls_decl_info *b = (const struct rls_decl_info *) y;
++
++  return a->orig_var == b->orig_var;
++}
++
++static void
++rls_free_decl_info (void *info)
++{
++  free (info);
++}
++
++/* Parameters for the 'defuse_statements' hash table.  */
++
++static hashval_t
++rls_hash_use_info (const void *x)
++{
++  return htab_hash_pointer
++    ((const void *) ((const struct rls_stmt_info *) x)->stmt);
++}
++
++static int
++rls_eq_use_info (const void *x, const void *y)
++{
++  const struct rls_stmt_info *a = (const struct rls_stmt_info *) x;
++  const struct rls_stmt_info *b = (const struct rls_stmt_info *) y;
++
++  return a->stmt == b->stmt;
++}
++
++static void
++rls_free_use_info (void *info)
++{
++  struct rls_stmt_info *stmt_info = (struct rls_stmt_info *) info;
++
++  if (stmt_info->defined)
++    sbitmap_free (stmt_info->defined);
++
++  free (stmt_info);
++}
++
++/* Initialize data structures and statistics.  */
++
++static void
++rls_init (void)
++{
++  basic_block bb;
++
++  /* We expect relatively few static variables, hence the small
++     initial size for the hash table.  */
++  static_variables = htab_create (8, rls_hash_decl_info,
++                                  rls_eq_decl_info, rls_free_decl_info);
++
++  /* We expect quite a few statements.  */
++  defuse_statements = htab_create (128, rls_hash_use_info,
++                                   rls_eq_use_info, rls_free_use_info);
++
++  FOR_ALL_BB (bb)
++    {
++      struct rls_block_dataflow_data *data;
++
++      data = XNEW (struct rls_block_dataflow_data);
++      memset (data, 0, sizeof (*data));
++      bb->aux = data;
++    }
++
++  stats.n_statics = 0;
++  stats.n_optimizable = 0;
++}
++
++/* Free data structures.  */
++
++static void
++rls_done (void)
++{
++  basic_block bb;
++
++  htab_delete (static_variables);
++  htab_delete (defuse_statements);
++
++  FOR_ALL_BB (bb)
++    {
++      struct rls_block_dataflow_data *data
++	= (struct rls_block_dataflow_data *) bb->aux;
++
++      gcc_assert (data);
++
++      if (data->defined_in)
++	sbitmap_free (data->defined_in);
++      if (data->defined_out)
++	sbitmap_free (data->defined_out);
++      free (data);
++      bb->aux = NULL;
++    }
++}
++
++
++/* Doing the initial work to find static variables.  */
++
++/* Examine the defining statement for VAR and determine whether it is a
++   static variable we could potentially optimize.  If so, stick in it
++   in the 'static_variables' hashtable.
++
++   STMT is the statement in which a definition or use of VAR occurs.
++   USE_P indicates whether VAR is used or defined in STMT.  Enter STMT
++   into 'defuse_statements' as well for use during dataflow
++   analysis.  */
++
++static void
++maybe_discover_new_declaration (tree var, gimple stmt, bool use_p)
++{
++  tree def_stmt = SSA_NAME_VAR (var);
++
++  if (TREE_CODE (def_stmt) == VAR_DECL
++      && DECL_CONTEXT (def_stmt) != NULL_TREE
++      && TREE_CODE (DECL_CONTEXT (def_stmt)) == FUNCTION_DECL
++      /* We cannot optimize away a static used in multiple functions (as
++	 might happen in C++).  */
++      && !DECL_NONLOCAL(def_stmt)
++      && TREE_STATIC (def_stmt)
++      /* We cannot optimize away aggregate statics, as we would have to
++	 prove that definitions of every field of the aggregate dominate
++	 uses.  */
++      && !AGGREGATE_TYPE_P (TREE_TYPE (def_stmt))
++      /* GCC doesn't normally treat vectors as aggregates; we need to,
++	 though, since a user could use intrinsics to read/write
++	 particular fields of the vector, thereby treating it as an
++	 array.  */
++      && TREE_CODE (TREE_TYPE (def_stmt)) != VECTOR_TYPE
++      && !TREE_ADDRESSABLE (def_stmt)
++      && !TREE_THIS_VOLATILE (def_stmt))
++    {
++      struct rls_decl_info dummy;
++      void **slot;
++
++      dummy.orig_var = def_stmt;
++      slot = htab_find_slot (static_variables, &dummy, INSERT);
++
++      if (*slot == NULL)
++        {
++          /* Found a use or a def of a new declaration.  */
++          struct rls_decl_info *info = XNEW (struct rls_decl_info);
++
++          info->orig_var = def_stmt;
++          info->index = stats.n_statics++;
++          /* Optimistically assume that we can optimize.  */
++          info->optimizable_p = true;
++          info->new_var = NULL_TREE;
++          *slot = (void *) info;
++        }
++
++      /* Enter the statement into DEFUSE_STATEMENTS.  */
++      {
++        struct rls_stmt_info dummy;
++        struct rls_stmt_info *info;
++
++        dummy.stmt = stmt;
++        slot = htab_find_slot (defuse_statements, &dummy, INSERT);
++
++        /* We should never insert the same statement into the
++           hashtable twice.  */
++        gcc_assert (*slot == NULL
++		    || ((struct rls_stmt_info *)(*slot))->stmt == stmt);
++
++	if (*slot != NULL && ((struct rls_stmt_info *)(*slot))->stmt == stmt)
++	  return;
++
++        info = XNEW (struct rls_stmt_info);
++        info->var = def_stmt;
++        info->stmt = stmt;
++        if (dump_file)
++          {
++            fprintf (dump_file, "entering as %s ", use_p ? "use" : "def");
++            print_gimple_stmt (dump_file, stmt, 0, TDF_DETAILS | TDF_VOPS);
++          }
++        info->use_p = use_p;
++        /* We don't know how big to make the bitmap yet.  */
++        info->defined = NULL;
++        *slot = (void *) info;
++      }
++    }
++}
++
++/* Grovel through all the statements in the program, looking for
++   SSA_NAMEs whose SSA_NAME_VAR is a VAR_DECL.  We look at both use and
++   def SSA_NAMEs.  */
++
++static void
++find_static_nonvolatile_declarations (void)
++{
++  basic_block bb;
++
++  FOR_EACH_BB (bb)
++    {
++      gimple_stmt_iterator i;
++
++      for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
++        {
++          tree var;
++          ssa_op_iter iter;
++	  gimple stmt = gsi_stmt (i);
++
++	  /* If there's a call expression in STMT, then previous passes
++	     will have determined if the call transitively defines some
++	     static variable.  However, we need more precise
++	     information--we need to know whether static variables are
++	     live out after the call.
++
++	     Since we'll never see something like:
++
++	       staticvar = foo (bar, baz);
++
++	     in GIMPLE (the result of the call will be assigned to a
++	     normal, non-static local variable which is then assigned to
++	     STATICVAR in a subsequent statement), don't bother finding
++	     new declarations if we see a GIMPLE_CALL.
++	     
++	     In a similar fashion, asm statements that clobber memory
++	     will appear to define static variables.  In general,
++	     however, assuming that asm statements define static
++	     variables would cause us to see that in the following
++	     situation:
++
++	       static int foo = 0;
++
++	       __asm__ (... : "memory");
++	       foo++;
++
++	     foo could be unstaticized because the asm has "defined"
++	     foo.  This is likely false.  (Even if the asm does happen
++	     to define foo--and only foo--that situation would be
++	     sufficiently unusual that not optimizing it seems OK.)  */
++	  if (gimple_code (stmt) != GIMPLE_CALL
++	      && gimple_code (stmt) != GIMPLE_ASM)
++	    FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VDEF)
++	      {
++		maybe_discover_new_declaration (var, stmt, false);
++	      }
++
++          FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE)
++            {
++              maybe_discover_new_declaration (var, stmt, true);
++            }
++        }
++    }
++}
++
++
++/* Determining if we have anything to optimize.  */
++
++/* Examine *SLOT (which is a 'struct rls_decl_info *') to see whether
++   the associated variable is optimizable.  If it is, create a new,
++   non-static declaration for the variable; this new variable will be
++   used during a subsequent rewrite of the function.  */
++
++#define NEW_VAR_PREFIX ".unstatic"
++
++static int
++maybe_create_new_variable (void **slot, void *data ATTRIBUTE_UNUSED)
++{
++  struct rls_decl_info *info = (struct rls_decl_info *) *slot;
++  tree id_node = DECL_NAME (info->orig_var);
++  size_t id_len = IDENTIFIER_LENGTH (id_node);
++  size_t name_len = id_len + strlen (NEW_VAR_PREFIX) + 1;
++  char *name;
++
++  /* Don't create a new variable multiple times.  */
++  gcc_assert (!info->new_var);
++
++  /* Tie the new name to the old one to aid debugging dumps.  */
++  name = (char *) alloca (name_len);
++  strcpy (name, IDENTIFIER_POINTER (id_node));
++  strcpy (name + id_len, NEW_VAR_PREFIX);
++  info->new_var = create_tmp_var (TREE_TYPE (info->orig_var), name);
++
++  if (dump_file)
++    {
++      fprintf (dump_file, "new variable ");
++      print_generic_expr (dump_file, info->new_var, 0);
++      fprintf (dump_file, "\n");
++    }
++
++  /* Inform SSA about this new variable.  */
++  create_var_ann (info->new_var);
++  mark_sym_for_renaming (info->new_var);
++  /* We need to make sure we rebuild bits for the original variable,
++     such as virtual operands attached to statements.  */
++  mark_sym_for_renaming (info->orig_var);
++  add_referenced_var (info->new_var);
++
++  /* Always continue scanning.  */
++  return 1;
++}
++
++#undef NEW_VAR_PREFIX
++
++/* Traverse the 'defuse_statements' hash table.  For every use,
++   determine if the associated variable is defined along all paths
++   leading to said use.  Remove the associated variable from
++   'static_variables' if it is not.  */
++
++static int
++check_definedness (void **slot, void *data ATTRIBUTE_UNUSED)
++{
++  struct rls_stmt_info *info = (struct rls_stmt_info *) *slot;
++  struct rls_decl_info dummy;
++  struct rls_decl_info *decl;
++
++  /* We don't need to look at definitions.  Continue scanning.  */
++  if (!info->use_p)
++    return 1;
++
++  if (dump_file)
++    {
++      fprintf (dump_file, "defined bitmap for ");
++      print_gimple_stmt (dump_file, info->stmt, 0, 0);
++      fprintf (dump_file, " : ");
++      dump_sbitmap (dump_file, info->defined);
++    }
++
++  dummy.orig_var = info->var;
++  slot = htab_find_slot (static_variables, &dummy, NO_INSERT);
++
++  gcc_assert (slot);
++
++  decl = (struct rls_decl_info *) *slot;
++
++  if (dump_file)
++    {
++      fprintf (dump_file, "with index %d for var ", decl->index);
++      print_generic_expr (dump_file, decl->orig_var, 0);
++      fprintf (dump_file, "\n\n");
++    }
++
++  if (decl->optimizable_p && !TEST_BIT (info->defined, decl->index))
++    {
++      if (dump_file)
++	{
++	  fprintf (dump_file, "not optimizing ");
++	  print_generic_expr (dump_file, decl->orig_var, 0);
++	  fprintf (dump_file, " due to uncovered use in ");
++	  print_gimple_stmt (dump_file, info->stmt, 0, 0);
++	  fprintf (dump_file, "\n");
++	}
++
++      decl->optimizable_p = false;
++      stats.n_optimizable--;
++    }
++
++  /* Continue scan.  */
++  return 1;
++}
++
++/* Check all statements in 'defuse_statements' to see if all the
++   statements that use a static variable have that variable defined
++   along all paths leading to the statement.  Once that's done, go
++   through and create new, non-static variables for any static variables
++   that can be optimized.  */
++
++static size_t
++determine_optimizable_statics (void)
++{
++  htab_traverse (defuse_statements, check_definedness, NULL);
++
++  htab_traverse (static_variables, maybe_create_new_variable, NULL);
++
++  return stats.n_optimizable;
++}
++
++/* Look at STMT to see if we have uses or defs of a static variable.
++   STMT is passed in DATA.  Definitions of a static variable are found
++   by the presence of a V_MUST_DEF, while uses are found by the presence
++   of a VUSE.  */
++
++static int
++unstaticize_variable (void **slot, void *data)
++{
++  struct rls_decl_info *info = (struct rls_decl_info *) *slot;
++  gimple stmt = (gimple) data;
++  tree vdef;
++  tree vuse;
++  int continue_scan = 1;
++
++  /* Can't do anything to this variable.  */
++  if (!info->optimizable_p)
++    goto done;
++
++  /* Check for virtual definitions first.  */
++  vdef = SINGLE_SSA_TREE_OPERAND (stmt, SSA_OP_VDEF);
++
++  if (vdef != NULL
++      && ZERO_SSA_OPERANDS (stmt, SSA_OP_DEF)
++      && gimple_code (stmt) == GIMPLE_ASSIGN
++      && TREE_CODE (gimple_assign_lhs (stmt)) == VAR_DECL
++      && gimple_assign_lhs(stmt) == info->orig_var)
++    {
++      /* Make the statement define the new name.  The new name has
++         already been marked for renaming, so no need to do that
++         here.  */
++      gimple_assign_set_lhs (stmt, info->new_var);
++      if (dump_file)
++	{
++	  fprintf (dump_file, "found virtual definition!\n");
++	  print_gimple_stmt (dump_file, stmt, 0, TDF_VOPS | TDF_DETAILS);
++	  fprintf (dump_file, "\n");
++	}
++      continue_scan = 0;
++      goto done;
++    }
++
++  /* Check for virtual uses.  */
++  vuse = SINGLE_SSA_TREE_OPERAND (stmt, SSA_OP_VUSE);
++
++  if (vuse != NULL
++      && gimple_code (stmt) == GIMPLE_ASSIGN
++      && gimple_assign_rhs_code (stmt) == VAR_DECL
++      && gimple_assign_rhs1 (stmt) == info->orig_var)
++    {
++      /* Make the statement use the new name.  */
++      gimple_assign_set_rhs1 (stmt, info->new_var);
++      if (dump_file)
++	{
++	  fprintf (dump_file, "found virtual use!\n");
++	  print_gimple_stmt (dump_file, stmt, 0, TDF_VOPS | TDF_DETAILS);
++	  fprintf (dump_file, "\n");
++	}
++      continue_scan = 0;
++      goto done;
++    }
++
++ done:
++  if (!continue_scan)
++    {
++      /* None of the other optimizable static variables can occur
++         in this statement.  Stop the scan.  */
++      update_stmt (stmt);
++
++      if (dump_file)
++	{
++	  fprintf (dump_file, "updated stmt\n");
++	  print_gimple_stmt (dump_file, stmt, 0, TDF_VOPS | TDF_DETAILS);
++	}
++    }
++
++  return continue_scan;
++}
++
++/* Determine if we have any static variables we can optimize.  If so,
++   replace any defs or uses of those variables in their defining/using
++   statements.  */
++
++static void
++maybe_remove_static_from_declarations (void)
++{
++  size_t n_optimizable = determine_optimizable_statics ();
++  basic_block bb;
++
++  if (n_optimizable)
++    /* Replace any optimizable variables with new, non-static variables.  */
++    FOR_EACH_BB (bb)
++      {
++        gimple_stmt_iterator gsi;
++
++        for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
++          {
++            gimple stmt = gsi_stmt (gsi);
++
++            htab_traverse (static_variables, unstaticize_variable, stmt);
++          }
++      }
++}
++
++/* Callback for htab_traverse to initialize the bitmap for *SLOT, which
++   is a 'struct rls_stmt_info'.  */
++
++static int
++initialize_statement_dataflow (void **slot, void *data ATTRIBUTE_UNUSED)
++{
++  struct rls_stmt_info *info = (struct rls_stmt_info *) *slot;
++
++  gcc_assert (!info->defined);
++
++  if (info->use_p)
++    {
++      info->defined = sbitmap_alloc (stats.n_statics);
++      /* Assume defined along all paths until otherwise informed.  */
++      sbitmap_ones (info->defined);
++    }
++
++  /* Continue traversal.  */
++  return 1;
++}
++
++/* We have N_STATICS static variables to consider.  Go through all the
++   blocks and all the use statements to initialize their bitmaps.  */
++
++static void
++initialize_block_and_statement_dataflow (size_t n_statics)
++{
++  basic_block bb;
++
++  FOR_ALL_BB (bb)
++    {
++      struct rls_block_dataflow_data *data
++	= (struct rls_block_dataflow_data *) bb->aux;
++
++      gcc_assert (data);
++
++      data->defined_in = sbitmap_alloc (n_statics);
++      sbitmap_zero (data->defined_in);
++      data->defined_out = sbitmap_alloc (n_statics);
++      sbitmap_zero (data->defined_out);
++    }
++
++  htab_traverse (defuse_statements, initialize_statement_dataflow, NULL);
++}
++
++/* Apply the individual effects of the stmts in BB to update the
++   dataflow analysis information for BB.  */
++
++static void
++compute_definedness_for_block (basic_block bb)
++{
++  bool changed_p = false;
++  struct rls_block_dataflow_data *data
++	= (struct rls_block_dataflow_data *) bb->aux;
++  gimple_stmt_iterator gsi;
++
++  sbitmap_copy (data->defined_out, data->defined_in);
++
++  for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
++    {
++      gimple stmt = gsi_stmt (gsi);
++
++      if (gimple_code (stmt) == GIMPLE_CALL)
++	/* If there's a call expression in STMT, then previous passes
++	   will have determined if the call transitively defines some
++	   static variable.  However, we need more precise
++	   information--we need to know whether static variables are
++	   live out after the call.  In the absence of such information,
++	   simply declare that all static variables are clobbered by the
++	   call.  A better analysis would be interprocedural and compute
++	   the liveness information we require, but for now, we're being
++	   pessimistic.  */
++	sbitmap_zero (data->defined_out);
++      else 
++	{
++	  struct rls_stmt_info dummy;
++	  void **slot;
++
++	  /* See if this statement uses or defines a static variable.  */
++	  dummy.stmt = stmt;
++	  slot = htab_find_slot (defuse_statements, &dummy, NO_INSERT);
++
++	  /* Check for uses.  */
++	  if (slot)
++	    {
++	      struct rls_stmt_info *info = (struct rls_stmt_info *) *slot;
++
++	      if (info->use_p)
++		{
++		  gcc_assert (info->defined);
++
++		  /* Found a statement that uses a function-local static
++		     variable.  Copy the current state of definedness.  */
++		  sbitmap_copy (info->defined, data->defined_out);
++		}
++	      else
++		{
++		  struct rls_decl_info dummy;
++		  struct rls_decl_info *decl;
++
++		  gcc_assert (!info->defined);
++
++		  /* Found a statement that defines a function-local static
++		     variable.  Look up the associated variable's information
++		     and mark it as defined in the block.  */
++		  dummy.orig_var = info->var;
++		  slot = htab_find_slot (static_variables, &dummy, NO_INSERT);
++
++		  gcc_assert (slot);
++
++		  decl = (struct rls_decl_info *) *slot;
++
++		  SET_BIT (data->defined_out, decl->index);
++		  changed_p |= true;
++		}
++	    }
++	}
++    }
++}
++
++/* Solve the dataflow equations:
++
++   DEFINED_IN(b) = intersect DEFINED_OUT(p) for p in preds(b)
++   DEFINED_OUT(b) = VARIABLES_DEFINED (b, DEFINED_IN (b))
++
++   via a simple iterative solver.  VARIABLES_DEFINED is computed by
++   'compute_definedness_for_block'.  */
++
++static void
++compute_definedness (void)
++{
++  basic_block bb;
++  bool changed_p;
++  sbitmap tmp_bitmap = sbitmap_alloc (stats.n_statics);
++
++  /* Compute initial sets.  */
++  FOR_EACH_BB (bb)
++    {
++      compute_definedness_for_block (bb);
++    }
++
++  /* Iterate.  */
++  do {
++    changed_p = false;
++
++    FOR_EACH_BB (bb)
++      {
++        edge e;
++        edge_iterator ei;
++        struct rls_block_dataflow_data *data
++	  = (struct rls_block_dataflow_data *) bb->aux;
++        bool bitmap_changed_p = false;
++
++        sbitmap_ones (tmp_bitmap);
++
++        gcc_assert (data);
++
++        /* We require information about whether a variable was defined
++           over all paths leading to a particular use.  Therefore, we
++           intersect the DEFINED sets of all predecessors.  */
++        FOR_EACH_EDGE (e, ei, bb->preds)
++          {
++            struct rls_block_dataflow_data *pred_data
++	      = (struct rls_block_dataflow_data *) e->src->aux;
++
++            gcc_assert (pred_data);
++
++            sbitmap_a_and_b (tmp_bitmap, tmp_bitmap, pred_data->defined_out);
++          }
++
++        bitmap_changed_p = !sbitmap_equal (tmp_bitmap, data->defined_in);
++
++        if (bitmap_changed_p)
++          {
++            sbitmap_copy (data->defined_in, tmp_bitmap);
++            compute_definedness_for_block (bb);
++          }
++
++        changed_p |= bitmap_changed_p;
++      }
++  } while (changed_p);
++
++  sbitmap_free (tmp_bitmap);
++}
++
++static unsigned int
++execute_rls (void)
++{
++  rls_init ();
++
++  find_static_nonvolatile_declarations ();
++
++  /* Can we optimize anything?  */
++  if (stats.n_statics != 0)
++    {
++      stats.n_optimizable = stats.n_statics;
++
++      if (dump_file)
++        fprintf (dump_file, "found %d static variables to consider\n",
++                 stats.n_statics);
++
++      initialize_block_and_statement_dataflow (stats.n_statics);
++
++      compute_definedness ();
++
++      maybe_remove_static_from_declarations ();
++
++      if (dump_file)
++        fprintf (dump_file, "removed %d static variables\n",
++                 stats.n_optimizable);
++    }
++
++  rls_done ();
++
++  if (stats.n_optimizable > 0)
++    return TODO_rebuild_alias | TODO_update_ssa;
++  else
++    return 0;
++}
++
++static bool
++gate_rls (void)
++{
++  return (flag_remove_local_statics != 0
++          && !cfun->calls_setjmp
++          && !cgraph_node (current_function_decl)->ever_was_nested);
++}
++
++struct gimple_opt_pass pass_remove_local_statics =
++{
++  {
++    GIMPLE_PASS,
++    "remlocstatic",               /* name */
++    gate_rls,                     /* gate */
++    execute_rls,                  /* execute */
++    NULL,                         /* sub */
++    NULL,                         /* next */
++    0,                            /* static_pass_number */
++    TV_TREE_RLS,                  /* tv_id */
++    PROP_cfg | PROP_ssa,          /* properties_required */
++    0,                            /* properties_provided */
++    0,                            /* properties_destroyed */
++    0,                            /* todo_flags_start */
++    TODO_dump_func | TODO_verify_ssa | TODO_verify_stmts
++    | TODO_rebuild_alias | TODO_update_ssa /* todo_flags_finish */
++  }
++};
+--- a/src/gcc/tree-ssa-sink.c
++++ b/src/gcc/tree-ssa-sink.c
+@@ -449,6 +449,47 @@
+ 	  last = false;
+ 	  continue;
+ 	}      
++
++      /* We cannot move statements that contain references to block-scope
++	 variables out of that block, as this may lead to incorrect aliasing
++	 when we lay out the stack frame in cfgexpand.c.
++	 In lieu of more sophisticated analysis, be very conservative here
++	 and prohibit moving any statement that references memory out of a
++	 block with variables.  */
++      if (gimple_references_memory_p (stmt))
++	{
++	  tree fromblock = gimple_block (stmt);
++	  while (fromblock
++		 && fromblock != current_function_decl
++		 && !BLOCK_VARS (fromblock))
++	    fromblock = BLOCK_SUPERCONTEXT (fromblock);
++	  if (fromblock && fromblock != current_function_decl)
++	    {
++	      gimple tostmt;
++	      tree toblock;
++
++	      if (gsi_end_p (togsi))
++		tostmt = gimple_seq_last_stmt (gsi_seq (togsi));
++	      else
++		tostmt = gsi_stmt (togsi);
++	      if (tostmt)
++		toblock = gimple_block (tostmt);
++	      else
++		toblock = NULL;
++	      while (toblock
++		     && toblock != current_function_decl
++		     && toblock != fromblock)
++		toblock = BLOCK_SUPERCONTEXT (toblock);
++	      if (!toblock || toblock != fromblock)
++		{
++		  if (!gsi_end_p (gsi))
++		    gsi_prev (&gsi);
++		  last = false;
++		  continue;
++		}
++	    }
++	}
++
+       if (dump_file)
+ 	{
+ 	  fprintf (dump_file, "Sinking ");
+--- a/src/gcc/tree-ssa.c
++++ b/src/gcc/tree-ssa.c
+@@ -1271,6 +1271,18 @@
+   return false;
+ }
+ 
++/* Strip conversions from EXP according to
++   tree_ssa_useless_type_conversion and return the resulting
++   expression.  */
++
++tree
++tree_ssa_strip_useless_type_conversions (tree exp)
++{
++  while (tree_ssa_useless_type_conversion (exp))
++    exp = TREE_OPERAND (exp, 0);
++  return exp;
++}
++
+ 
+ /* Internal helper for walk_use_def_chains.  VAR, FN and DATA are as
+    described in walk_use_def_chains.
+--- a/src/gcc/tree-vect-analyze.c
++++ b/src/gcc/tree-vect-analyze.c
+@@ -1459,7 +1459,7 @@
+     }
+ 
+   base = build_fold_indirect_ref (base_addr);
+-  alignment = ssize_int (TYPE_ALIGN (vectype)/BITS_PER_UNIT);
++  alignment = ssize_int (targetm.vectorize.vector_min_alignment (vectype));
+ 
+   if ((aligned_to && tree_int_cst_compare (aligned_to, alignment) < 0)
+       || !misalign)
+@@ -1510,7 +1510,8 @@
+   /* At this point we assume that the base is aligned.  */
+   gcc_assert (base_aligned
+ 	      || (TREE_CODE (base) == VAR_DECL 
+-		  && DECL_ALIGN (base) >= TYPE_ALIGN (vectype)));
++		  && (DECL_ALIGN (base)
++		      >= targetm.vectorize.vector_min_alignment (vectype))));
+ 
+   /* Modulo alignment.  */
+   misalign = size_binop (TRUNC_MOD_EXPR, misalign, alignment);
+--- a/src/gcc/tree-vect-transform.c
++++ b/src/gcc/tree-vect-transform.c
+@@ -5444,7 +5444,21 @@
+ 	       vect_permute_store_chain().  */
+ 	    vec_oprnd = VEC_index (tree, result_chain, i);
+ 
+-	  data_ref = build_fold_indirect_ref (dataref_ptr);
++	  if (alignment_support_scheme == dr_aligned
++	      && !targetm.vectorize.always_misalign(vectype))
++	    {
++	      data_ref = build_fold_indirect_ref (dataref_ptr);
++	    }
++	  else
++	    {
++	      /* TODO: Record actual alignment in always_misalign case.  */
++	      int mis = DR_MISALIGNMENT (first_dr);
++	      tree tmis;
++	      tmis = (mis == -1 ? size_zero_node : size_int (mis));
++	      tmis = size_binop (MULT_EXPR, tmis, size_int(BITS_PER_UNIT));
++	      data_ref =
++		build2 (MISALIGNED_INDIRECT_REF, vectype, dataref_ptr, tmis);
++	    }
+ 
+ 	  /* Arguments are ready. Create the new vector stmt.  */
+ 	  new_stmt = gimple_build_assign (data_ref, vec_oprnd);
+@@ -6623,10 +6637,15 @@
+ 	    {
+ 	    case dr_aligned:
+ 	      gcc_assert (aligned_access_p (first_dr));
+-	      data_ref = build_fold_indirect_ref (dataref_ptr);
+-	      break;
++	      if (!targetm.vectorize.always_misalign(vectype))
++		{
++		  data_ref = build_fold_indirect_ref (dataref_ptr);
++		  break;
++		}
++	      /* Fall through... */
+ 	    case dr_unaligned_supported:
+ 	      {
++		/* TODO: Record actual alignment in always_misalign case.  */
+ 		int mis = DR_MISALIGNMENT (first_dr);
+ 		tree tmis = (mis == -1 ? size_zero_node : size_int (mis));
+ 
+@@ -7597,7 +7616,7 @@
+   gimple dr_stmt = DR_STMT (dr);
+   stmt_vec_info stmt_info = vinfo_for_stmt (dr_stmt);
+   tree vectype = STMT_VINFO_VECTYPE (stmt_info);
+-  int vectype_align = TYPE_ALIGN (vectype) / BITS_PER_UNIT;
++  int vectype_align = targetm.vectorize.vector_min_alignment (vectype);
+   tree niters_type = TREE_TYPE (loop_niters);
+   int step = 1;
+   int element_size = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (DR_REF (dr))));
+--- a/src/gcc/tree-vectorizer.c
++++ b/src/gcc/tree-vectorizer.c
+@@ -2868,11 +2868,13 @@
+        vnode = vnode->next_needed)
+     {
+       tree vectype, decl = vnode->decl;
++      tree t;
+       unsigned int alignment;
+ 
+-      if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
++      t = TREE_TYPE(decl);
++      if (TREE_CODE (t) != ARRAY_TYPE)
+ 	continue;
+-      vectype = get_vectype_for_scalar_type (TREE_TYPE (TREE_TYPE (decl)));
++      vectype = get_vectype_for_scalar_type (strip_array_types (t));
+       if (!vectype)
+ 	continue;
+       alignment = TYPE_ALIGN (vectype);
+@@ -2887,6 +2889,7 @@
+ 	    { 
+ 	      fprintf (dump_file, "Increasing alignment of decl: ");
+ 	      print_generic_expr (dump_file, decl, TDF_SLIM);
++	      fprintf (dump_file, "\n");
+ 	    }
+ 	}
+     }
+--- a/src/gcc/tree-vrp.c
++++ b/src/gcc/tree-vrp.c
+@@ -775,6 +775,27 @@
+ 	 && integer_zerop (vr->max);
+ }
+ 
++/* Return true if max and min of VR are INTEGER_CST.  It's not necessary
++   a singleton.  */
++
++static inline bool
++range_int_cst_p (value_range_t *vr)
++{
++  return (vr->type == VR_RANGE
++	  && TREE_CODE (vr->max) == INTEGER_CST
++	  && TREE_CODE (vr->min) == INTEGER_CST
++	  && !TREE_OVERFLOW (vr->max)
++	  && !TREE_OVERFLOW (vr->min));
++}
++
++/* Return true if VR is a INTEGER_CST singleton.  */
++
++static inline bool
++range_int_cst_singleton_p (value_range_t *vr)
++{
++  return (range_int_cst_p (vr)
++	  && tree_int_cst_equal (vr->min, vr->max));
++}
+ 
+ /* Return true if value range VR involves at least one symbol.  */
+ 
+@@ -2511,19 +2532,20 @@
+     }
+   else if (code == BIT_AND_EXPR)
+     {
+-      if (vr0.type == VR_RANGE
+-	  && vr0.min == vr0.max
+-	  && TREE_CODE (vr0.max) == INTEGER_CST
+-	  && !TREE_OVERFLOW (vr0.max)
+-	  && tree_int_cst_sgn (vr0.max) >= 0)
++      bool vr0_int_cst_singleton_p, vr1_int_cst_singleton_p;
++
++      vr0_int_cst_singleton_p = range_int_cst_singleton_p (&vr0);
++      vr1_int_cst_singleton_p = range_int_cst_singleton_p (&vr1);
++
++      if (vr0_int_cst_singleton_p && vr1_int_cst_singleton_p)
++	min = max = int_const_binop (code, vr0.max, vr1.max, 0);
++      else if (vr0_int_cst_singleton_p
++	       && tree_int_cst_sgn (vr0.max) >= 0)
+ 	{
+ 	  min = build_int_cst (expr_type, 0);
+ 	  max = vr0.max;
+ 	}
+-      else if (vr1.type == VR_RANGE
+-	       && vr1.min == vr1.max
+-	       && TREE_CODE (vr1.max) == INTEGER_CST
+-	       && !TREE_OVERFLOW (vr1.max)
++      else if (vr1_int_cst_singleton_p
+ 	       && tree_int_cst_sgn (vr1.max) >= 0)
+ 	{
+ 	  type = VR_RANGE;
+@@ -2538,12 +2560,8 @@
+     }
+   else if (code == BIT_IOR_EXPR)
+     {
+-      if (vr0.type == VR_RANGE
+-          && vr1.type == VR_RANGE
+-	  && TREE_CODE (vr0.min) == INTEGER_CST
+-	  && TREE_CODE (vr1.min) == INTEGER_CST
+-	  && TREE_CODE (vr0.max) == INTEGER_CST
+-	  && TREE_CODE (vr1.max) == INTEGER_CST
++      if (range_int_cst_p (&vr0)
++	  && range_int_cst_p (&vr1)
+ 	  && tree_int_cst_sgn (vr0.min) >= 0
+ 	  && tree_int_cst_sgn (vr1.min) >= 0)
+ 	{
+--- a/src/gcc/tree.c
++++ b/src/gcc/tree.c
+@@ -51,6 +51,7 @@
+ #include "params.h"
+ #include "pointer-set.h"
+ #include "fixed-value.h"
++#include "intl.h"
+ 
+ /* Tree code classes.  */
+ 
+@@ -3572,9 +3573,9 @@
+ expand_location (source_location loc)
+ {
+   expanded_location xloc;
+-  if (loc == 0)
++  if (loc <= BUILTINS_LOCATION)
+     {
+-      xloc.file = NULL;
++      xloc.file = loc == UNKNOWN_LOCATION ? NULL : _("<built-in>");
+       xloc.line = 0;
+       xloc.column = 0;
+       xloc.sysp = 0;
+@@ -4066,6 +4067,7 @@
+ 		      bool *no_add_attrs)
+ {
+   tree node = *pnode;
++  bool is_dllimport;
+ 
+   /* These attributes may apply to structure and union types being created,
+      but otherwise should pass to the declaration involved.  */
+@@ -4113,9 +4115,11 @@
+       return NULL_TREE;
+     }
+ 
++  is_dllimport = is_attribute_p ("dllimport", name);
++
+   /* Report error on dllimport ambiguities seen now before they cause
+      any damage.  */
+-  else if (is_attribute_p ("dllimport", name))
++  if (is_dllimport)
+     {
+       /* Honor any target-specific overrides. */ 
+       if (!targetm.valid_dllimport_attribute_p (node))
+@@ -4157,6 +4161,9 @@
+       if (*no_add_attrs == false)
+         DECL_DLLIMPORT_P (node) = 1;
+     }
++  else if (DECL_DECLARED_INLINE_P (node))
++    /* An exported function, even if inline, must be emitted.  */
++    DECL_EXTERNAL (node) = 0;
+ 
+   /*  Report error if symbol is not accessible at global scope.  */
+   if (!TREE_PUBLIC (node)
+@@ -7994,6 +8001,19 @@
+ 	return true;
+       }
+ 
++    case STRING_CST:
++      {
++	int i;
++
++	/* We need to loop through all elements to handle cases like
++	   "\0" and "\0foobar".  */
++	for (i = 0; i < TREE_STRING_LENGTH (init); ++i)
++	  if (TREE_STRING_POINTER (init)[i] != '\0')
++	    return false;
++
++	return true;
++      }
++
+     default:
+       return false;
+     }
+@@ -9098,6 +9118,79 @@
+     return EXPR_LOCATION (exp);
+ }
+ 
++/* Return true iff conversion in EXP generates no instruction.  Mark
++   it inline so that we fully inline into the stripping functions even
++   though we have two uses of this function.  */
++
++static inline bool
++tree_nop_conversion (const_tree exp)
++{
++  tree outer_type, inner_type;
++
++  if (!CONVERT_EXPR_P (exp)
++      && TREE_CODE (exp) != NON_LVALUE_EXPR)
++    return false;
++  if (TREE_OPERAND (exp, 0) == error_mark_node)
++    return false;
++
++  outer_type = TREE_TYPE (exp);
++  inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
++
++  /* Use precision rather then machine mode when we can, which gives
++     the correct answer even for submode (bit-field) types.  */
++  if ((INTEGRAL_TYPE_P (outer_type)
++       || POINTER_TYPE_P (outer_type)
++       || TREE_CODE (outer_type) == OFFSET_TYPE)
++      && (INTEGRAL_TYPE_P (inner_type)
++	  || POINTER_TYPE_P (inner_type)
++	  || TREE_CODE (inner_type) == OFFSET_TYPE))
++    return TYPE_PRECISION (outer_type) == TYPE_PRECISION (inner_type);
++
++  /* Otherwise fall back on comparing machine modes (e.g. for
++     aggregate types, floats).  */
++  return TYPE_MODE (outer_type) == TYPE_MODE (inner_type);
++}
++
++/* Return true iff conversion in EXP generates no instruction.  Don't
++   consider conversions changing the signedness.  */
++
++static bool
++tree_sign_nop_conversion (const_tree exp)
++{
++  tree outer_type, inner_type;
++
++  if (!tree_nop_conversion (exp))
++    return false;
++
++  outer_type = TREE_TYPE (exp);
++  inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
++
++  return (TYPE_UNSIGNED (outer_type) == TYPE_UNSIGNED (inner_type)
++	  && POINTER_TYPE_P (outer_type) == POINTER_TYPE_P (inner_type));
++}
++
++/* Strip conversions from EXP according to tree_nop_conversion and
++   return the resulting expression.  */
++
++tree
++tree_strip_nop_conversions (tree exp)
++{
++  while (tree_nop_conversion (exp))
++    exp = TREE_OPERAND (exp, 0);
++  return exp;
++}
++
++/* Strip conversions from EXP according to tree_sign_nop_conversion
++   and return the resulting expression.  */
++
++tree
++tree_strip_sign_nop_conversions (tree exp)
++{
++  while (tree_sign_nop_conversion (exp))
++    exp = TREE_OPERAND (exp, 0);
++  return exp;
++}
++
+ 
+ /* These are the hash table functions for the hash table of OPTIMIZATION_NODEq
+    nodes.  */
+--- a/src/gcc/tree.h
++++ b/src/gcc/tree.h
+@@ -381,8 +381,10 @@
+   unsigned lang_flag_5 : 1;
+   unsigned lang_flag_6 : 1;
+   unsigned visited : 1;
++  unsigned packed_flag : 1;
++  unsigned user_align : 1;
+ 
+-  unsigned spare : 23;
++  unsigned spare : 21;
+ 
+   union tree_ann_d *ann;
+ };
+@@ -974,30 +976,17 @@
+   case NOP_EXPR:						\
+   case CONVERT_EXPR
+ 
+-/* Given an expression as a tree, strip any NON_LVALUE_EXPRs and NOP_EXPRs
+-   that don't change the machine mode.  */
++/* Given an expression as a tree, strip any conversion that generates
++   no instruction.  Accepts both tree and const_tree arguments since
++   we are not modifying the tree itself.  */
+ 
+-#define STRIP_NOPS(EXP)						\
+-  while ((CONVERT_EXPR_P (EXP)					\
+-	  || TREE_CODE (EXP) == NON_LVALUE_EXPR)		\
+-	 && TREE_OPERAND (EXP, 0) != error_mark_node		\
+-	 && (TYPE_MODE (TREE_TYPE (EXP))			\
+-	     == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
+-    (EXP) = TREE_OPERAND (EXP, 0)
++#define STRIP_NOPS(EXP) \
++  (EXP) = tree_strip_nop_conversions (CONST_CAST_TREE (EXP))
+ 
+ /* Like STRIP_NOPS, but don't let the signedness change either.  */
+ 
+ #define STRIP_SIGN_NOPS(EXP) \
+-  while ((CONVERT_EXPR_P (EXP)					\
+-	  || TREE_CODE (EXP) == NON_LVALUE_EXPR)		\
+-	 && TREE_OPERAND (EXP, 0) != error_mark_node		\
+-	 && (TYPE_MODE (TREE_TYPE (EXP))			\
+-	     == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))	\
+-	 && (TYPE_UNSIGNED (TREE_TYPE (EXP))			\
+-	     == TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (EXP, 0)))) \
+-	 && (POINTER_TYPE_P (TREE_TYPE (EXP))			\
+-	     == POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
+-    (EXP) = TREE_OPERAND (EXP, 0)
++  (EXP) = tree_strip_sign_nop_conversions (CONST_CAST_TREE (EXP))
+ 
+ /* Like STRIP_NOPS, but don't alter the TREE_TYPE either.  */
+ 
+@@ -1012,9 +1001,8 @@
+ /* Remove unnecessary type conversions according to
+    tree_ssa_useless_type_conversion.  */
+ 
+-#define STRIP_USELESS_TYPE_CONVERSION(EXP)				\
+-      while (tree_ssa_useless_type_conversion (EXP))			\
+-	EXP = TREE_OPERAND (EXP, 0)
++#define STRIP_USELESS_TYPE_CONVERSION(EXP) \
++  (EXP) = tree_ssa_strip_useless_type_conversions (EXP)
+ 
+ /* Nonzero if TYPE represents an integral type.  Note that we do not
+    include COMPLEX types here.  Keep these checks in ascending code
+@@ -2140,7 +2128,7 @@
+ 
+ /* 1 if the alignment for this type was requested by "aligned" attribute,
+    0 if it is the default for this type.  */
+-#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->type.user_align)
++#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->common.base.user_align)
+ 
+ /* The alignment for NODE, in bytes.  */
+ #define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT)
+@@ -2246,7 +2234,7 @@
+ 
+ /* Indicated that objects of this type should be laid out in as
+    compact a way as possible.  */
+-#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->type.packed_flag)
++#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->common.base.packed_flag)
+ 
+ /* Used by type_contains_placeholder_p to avoid recomputation.
+    Values are: 0 (unknown), 1 (false), 2 (true).  Never access
+@@ -2265,17 +2253,16 @@
+   tree attributes;
+   unsigned int uid;
+ 
+-  unsigned int precision : 9;
+-  ENUM_BITFIELD(machine_mode) mode : 7;
+-
+-  unsigned string_flag : 1;
++  unsigned int precision : 10;
+   unsigned no_force_blk_flag : 1;
+   unsigned needs_constructing_flag : 1;
+   unsigned transparent_union_flag : 1;
+-  unsigned packed_flag : 1;
+   unsigned restrict_flag : 1;
+   unsigned contains_placeholder_bits : 2;
+ 
++  ENUM_BITFIELD(machine_mode) mode : 8;
++
++  unsigned string_flag : 1;
+   unsigned lang_flag_0 : 1;
+   unsigned lang_flag_1 : 1;
+   unsigned lang_flag_2 : 1;
+@@ -2283,7 +2270,6 @@
+   unsigned lang_flag_4 : 1;
+   unsigned lang_flag_5 : 1;
+   unsigned lang_flag_6 : 1;
+-  unsigned user_align : 1;
+ 
+   unsigned int align;
+   alias_set_type alias_set;
+@@ -2584,7 +2570,7 @@
+ #define DECL_ALIGN_UNIT(NODE) (DECL_ALIGN (NODE) / BITS_PER_UNIT)
+ /* Set if the alignment of this DECL has been set by the user, for
+    example with an 'aligned' attribute.  */
+-#define DECL_USER_ALIGN(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.user_align)
++#define DECL_USER_ALIGN(NODE) (DECL_COMMON_CHECK (NODE)->common.base.user_align)
+ /* Holds the machine mode corresponding to the declaration of a variable or
+    field.  Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a
+    FIELD_DECL.  */
+@@ -2621,7 +2607,7 @@
+    example, for a FUNCTION_DECL, DECL_SAVED_TREE may be non-NULL and
+    DECL_EXTERNAL may be true simultaneously; that can be the case for
+    a C99 "extern inline" function.  */
+-#define DECL_EXTERNAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.decl_flag_2)
++#define DECL_EXTERNAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.decl_flag_1)
+ 
+ /* Nonzero in a ..._DECL means this variable is ref'd from a nested function.
+    For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes.
+@@ -2696,7 +2682,6 @@
+   unsigned ignored_flag : 1;
+   unsigned abstract_flag : 1;
+   unsigned artificial_flag : 1;
+-  unsigned user_align : 1;
+   unsigned preserve_flag: 1;
+   unsigned debug_expr_is_from : 1;
+ 
+@@ -2712,22 +2697,20 @@
+   /* In LABEL_DECL, this is DECL_ERROR_ISSUED.
+      In VAR_DECL and PARM_DECL, this is DECL_REGISTER.  */
+   unsigned decl_flag_0 : 1;
+-  /* In FIELD_DECL, this is DECL_PACKED.  */
+-  unsigned decl_flag_1 : 1;
+   /* In FIELD_DECL, this is DECL_BIT_FIELD
+      In VAR_DECL and FUNCTION_DECL, this is DECL_EXTERNAL.
+-     In TYPE_DECL, this is TYPE_DECL_SUPRESS_DEBUG.  */
+-  unsigned decl_flag_2 : 1;
++     In TYPE_DECL, this is TYPE_DECL_SUPPRESS_DEBUG.  */
++  unsigned decl_flag_1 : 1;
+   /* In FIELD_DECL, this is DECL_NONADDRESSABLE_P
+-     In VAR_DECL and PARM_DECL, this is DECL_HAS_VALUE_EXPR.  */
+-  unsigned decl_flag_3 : 1;
++     In VAR_DECL and PARM_DECL, this is DECL_HAS_VALUE_EXPR_P.  */
++  unsigned decl_flag_2 : 1;
+   /* Logically, these two would go in a theoretical base shared by var and
+      parm decl. */
+   unsigned gimple_reg_flag : 1;
+   /* In a DECL with pointer type, set if no TBAA should be done.  */
+   unsigned no_tbaa_flag : 1;
+   /* Padding so that 'align' can be on a 32-bit boundary.  */
+-  unsigned decl_common_unused : 2;
++  unsigned decl_common_unused : 4;
+ 
+   unsigned int align : 24;
+   /* DECL_OFFSET_ALIGN, used only for FIELD_DECLs.  */
+@@ -2751,7 +2734,7 @@
+    decl itself.  This should only be used for debugging; once this field has
+    been set, the decl itself may not legitimately appear in the function.  */
+ #define DECL_HAS_VALUE_EXPR_P(NODE) \
+-  (TREE_CHECK2 (NODE, VAR_DECL, PARM_DECL)->decl_common.decl_flag_3)
++  (TREE_CHECK2 (NODE, VAR_DECL, PARM_DECL)->decl_common.decl_flag_2)
+ #define DECL_VALUE_EXPR(NODE) \
+   (decl_value_expr_lookup (DECL_WRTL_CHECK (NODE)))
+ #define SET_DECL_VALUE_EXPR(NODE, VAL)			\
+@@ -2830,11 +2813,11 @@
+ #define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.fcontext)
+ 
+ /* In a FIELD_DECL, indicates this field should be bit-packed.  */
+-#define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_1)
++#define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->common.base.packed_flag)
+ 
+ /* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed
+    specially.  */
+-#define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_2)
++#define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_1)
+ 
+ /* Used in a FIELD_DECL to indicate that we cannot form the address of
+    this component.  This makes it possible for Type-Based Alias Analysis
+@@ -2852,7 +2835,7 @@
+    accesses to s.i must not be given the alias set of the type of 'i'
+    (int) but instead directly that of the type of 's' (struct S).  */
+ #define DECL_NONADDRESSABLE_P(NODE) \
+-  (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_3)
++  (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_2)
+ 
+ struct tree_field_decl GTY(())
+ {
+@@ -3337,7 +3320,7 @@
+    into stabs.  Instead it will generate cross reference ('x') of names.
+    This uses the same flag as DECL_EXTERNAL.  */
+ #define TYPE_DECL_SUPPRESS_DEBUG(NODE) \
+-  (TYPE_DECL_CHECK (NODE)->decl_common.decl_flag_2)
++  (TYPE_DECL_CHECK (NODE)->decl_common.decl_flag_1)
+ 
+ /* Getter of the imported declaration associated to the
+    IMPORTED_DECL node.  */
+@@ -4702,6 +4685,8 @@
+ extern bool prototype_p (tree);
+ extern int function_args_count (tree);
+ extern bool auto_var_in_fn_p (const_tree, const_tree);
++extern tree tree_strip_nop_conversions (tree);
++extern tree tree_strip_sign_nop_conversions (tree);
+ 
+ /* In gimplify.c */
+ extern tree unshare_expr (tree);
+--- a/src/gcc/tsystem.h
++++ b/src/gcc/tsystem.h
+@@ -89,12 +89,14 @@
+ /* All systems have this header.  */
+ #include <sys/types.h>
+ 
+-/* All systems have this header.  */
++#ifndef __MINGW32CE__
++/* All systems except Windows CE have this header.  */
+ #include <errno.h>
+ 
+ #ifndef errno
+ extern int errno;
+ #endif
++#endif
+ 
+ /* GCC (fixproto) guarantees these system headers exist.  */
+ #include <string.h>
+--- a/src/gcc/unwind-dw2.c
++++ b/src/gcc/unwind-dw2.c
+@@ -1414,16 +1414,12 @@
+ /* Fill in CONTEXT for top-of-stack.  The only valid registers at this
+    level will be the return address and the CFA.  */
+ 
+-#define uw_init_context(CONTEXT)					   \
+-  do									   \
+-    {									   \
+-      /* Do any necessary initialization to access arbitrary stack frames. \
+-	 On the SPARC, this means flushing the register windows.  */	   \
+-      __builtin_unwind_init ();						   \
+-      uw_init_context_1 (CONTEXT, __builtin_dwarf_cfa (),		   \
+-			 __builtin_return_address (0));			   \
+-    }									   \
+-  while (0)
++#define uw_init_context(CONTEXT)					\
++  /* Do any necessary initialization to access arbitrary stack frames.	\
++     On the SPARC, this means flushing the register windows.  */	\
++  (__builtin_unwind_init (),						\
++   uw_init_context_1 ((CONTEXT), __builtin_dwarf_cfa (),		\
++		      __builtin_return_address (0)))
+ 
+ static inline void
+ init_dwarf_reg_size_table (void)
+@@ -1431,7 +1427,7 @@
+   __builtin_init_dwarf_reg_size_table (dwarf_reg_size_table);
+ }
+ 
+-static void
++static _Unwind_Reason_Code
+ uw_init_context_1 (struct _Unwind_Context *context,
+ 		   void *outer_cfa, void *outer_ra)
+ {
+@@ -1445,7 +1441,8 @@
+   context->flags = EXTENDED_CONTEXT_BIT;
+ 
+   code = uw_frame_state_for (context, &fs);
+-  gcc_assert (code == _URC_NO_REASON);
++  if (code != _URC_NO_REASON)
++    return code;
+ 
+ #if __GTHREADS
+   {
+@@ -1471,20 +1468,36 @@
+      initialization context, then we can't see it in the given
+      call frame data.  So have the initialization context tell us.  */
+   context->ra = __builtin_extract_return_addr (outer_ra);
++
++  return _URC_NO_REASON;
+ }
+ 
++static void _Unwind_DebugHook (void *, void *)
++  __attribute__ ((__noinline__, __used__));
++
++/* This function is called during unwinding.  It is intended as a hook
++   for a debugger to intercept exceptions.  CFA is the CFA of the
++   target frame.  HANDLER is the PC to which control will be
++   transferred.  */
++static void
++_Unwind_DebugHook (void *cfa __attribute__ ((__unused__)),
++		   void *handler __attribute__ ((__unused__)))
++{
++  asm ("");
++}
+ 
+ /* Install TARGET into CURRENT so that we can return to it.  This is a
+    macro because __builtin_eh_return must be invoked in the context of
+    our caller.  */
+ 
+-#define uw_install_context(CURRENT, TARGET)				 \
+-  do									 \
+-    {									 \
+-      long offset = uw_install_context_1 ((CURRENT), (TARGET));		 \
+-      void *handler = __builtin_frob_return_addr ((TARGET)->ra);	 \
+-      __builtin_eh_return (offset, handler);				 \
+-    }									 \
++#define uw_install_context(CURRENT, TARGET)				\
++  do									\
++    {									\
++      long offset = uw_install_context_1 ((CURRENT), (TARGET));		\
++      void *handler = __builtin_frob_return_addr ((TARGET)->ra);	\
++      _Unwind_DebugHook ((TARGET)->cfa, handler);			\
++      __builtin_eh_return (offset, handler);				\
++    }									\
+   while (0)
+ 
+ static long
+--- a/src/gcc/unwind-sjlj.c
++++ b/src/gcc/unwind-sjlj.c
+@@ -292,10 +292,11 @@
+   uw_update_context (context, fs);
+ }
+ 
+-static inline void
++static inline _Unwind_Reason_Code
+ uw_init_context (struct _Unwind_Context *context)
+ {
+   context->fc = _Unwind_SjLj_GetContext ();
++  return _URC_NO_REASON;
+ }
+ 
+ static void __attribute__((noreturn))
+--- a/src/gcc/unwind.inc
++++ b/src/gcc/unwind.inc
+@@ -85,7 +85,8 @@
+   _Unwind_Reason_Code code;
+ 
+   /* Set up this_context to describe the current stack frame.  */
+-  uw_init_context (&this_context);
++  code = uw_init_context (&this_context);
++  gcc_assert (code == _URC_NO_REASON);
+   cur_context = this_context;
+ 
+   /* Phase 1: Search.  Unwind the stack, calling the personality routine
+@@ -198,7 +199,8 @@
+   struct _Unwind_Context this_context, cur_context;
+   _Unwind_Reason_Code code;
+ 
+-  uw_init_context (&this_context);
++  code = uw_init_context (&this_context);
++  gcc_assert (code == _URC_NO_REASON);
+   cur_context = this_context;
+ 
+   exc->private_1 = (_Unwind_Ptr) stop;
+@@ -221,7 +223,8 @@
+   struct _Unwind_Context this_context, cur_context;
+   _Unwind_Reason_Code code;
+ 
+-  uw_init_context (&this_context);
++  code = uw_init_context (&this_context);
++  gcc_assert (code == _URC_NO_REASON);
+   cur_context = this_context;
+ 
+   /* Choose between continuing to process _Unwind_RaiseException
+@@ -251,7 +254,8 @@
+   if (exc->private_1 == 0)
+     return _Unwind_RaiseException (exc);
+ 
+-  uw_init_context (&this_context);
++  code = uw_init_context (&this_context);
++  gcc_assert (code == _URC_NO_REASON);
+   cur_context = this_context;
+ 
+   code = _Unwind_ForcedUnwind_Phase2 (exc, &cur_context);
+@@ -280,7 +284,9 @@
+   struct _Unwind_Context context;
+   _Unwind_Reason_Code code;
+ 
+-  uw_init_context (&context);
++  code = uw_init_context (&context);
++  if (code != _URC_NO_REASON)
++    return _URC_FATAL_PHASE1_ERROR;
+ 
+   while (1)
+     {
+--- a/src/gcc/varasm.c
++++ b/src/gcc/varasm.c
+@@ -1031,8 +1031,11 @@
+    Prefixes such as % are optional.  */
+ 
+ int
+-decode_reg_name (const char *asmspec)
++decode_reg_name_and_count (const char *asmspec, int *pnregs)
+ {
++  /* Presume just one register is clobbered.  */
++  *pnregs = 1;
++
+   if (asmspec != 0)
+     {
+       int i;
+@@ -1058,6 +1061,25 @@
+ 	    && ! strcmp (asmspec, strip_reg_name (reg_names[i])))
+ 	  return i;
+ 
++#ifdef OVERLAPPING_REGISTER_NAMES
++      {
++	static const struct
++	{
++	  const char *const name;
++	  const int number;
++	  const int nregs;
++	} table[] = OVERLAPPING_REGISTER_NAMES;
++
++	for (i = 0; i < (int) ARRAY_SIZE (table); i++)
++	  if (table[i].name[0]
++	      && ! strcmp (asmspec, table[i].name))
++	    {
++	      *pnregs = table[i].nregs;
++	      return table[i].number;
++	    }
++      }
++#endif /* OVERLAPPING_REGISTER_NAMES */
++
+ #ifdef ADDITIONAL_REGISTER_NAMES
+       {
+ 	static const struct { const char *const name; const int number; } table[]
+@@ -1081,6 +1103,14 @@
+ 
+   return -1;
+ }
++
++int
++decode_reg_name (const char *name)
++{
++  int count;
++  return decode_reg_name_and_count (name, &count);
++}
++
+ 
+ /* Return true if DECL's initializer is suitable for a BSS section.  */
+ 
+@@ -1126,11 +1156,14 @@
+     {
+ #ifdef DATA_ALIGNMENT
+       unsigned int data_align = DATA_ALIGNMENT (TREE_TYPE (decl), align);
++#else
++      unsigned int data_align = align;
++#endif
++      data_align = alignment_for_aligned_arrays (TREE_TYPE (decl), data_align);
+       /* Don't increase alignment too much for TLS variables - TLS space
+ 	 is too precious.  */
+       if (! DECL_THREAD_LOCAL_P (decl) || data_align <= BITS_PER_WORD)
+ 	align = data_align;
+-#endif
+ #ifdef CONSTANT_ALIGNMENT
+       if (DECL_INITIAL (decl) != 0 && DECL_INITIAL (decl) != error_mark_node)
+ 	{
+@@ -3198,6 +3231,10 @@
+   set_mem_alias_set (rtl, 0);
+   set_mem_alias_set (rtl, const_alias_set);
+ 
++  /* We cannot share RTX'es in pool entries.
++     Mark this piece of RTL as required for unsharing.  */
++  RTX_FLAG (rtl, used) = 1;
++
+   /* Set flags or add text to the name to record information, such as
+      that it is a local symbol.  If the name is changed, the macro
+      ASM_OUTPUT_LABELREF will have to know how to strip this
+--- a/src/gcc/vmsdbgout.c
++++ b/src/gcc/vmsdbgout.c
+@@ -213,6 +213,7 @@
+    debug_nothing_int,		  /* handle_pch */
+    debug_nothing_rtx,		  /* var_location */
+    debug_nothing_void,            /* switch_text_section */
++   debug_nothing_tree_tree,	  /* set_name */
+    0                              /* start_end_main_source_file */
+ };
+ 
+--- a/src/include/libiberty.h
++++ b/src/include/libiberty.h
+@@ -591,6 +591,10 @@
+ 
+ extern int pwait (int, int *, int);
+ 
++/* Convert a Cygwin path to a Windows path.  */
++
++extern int cygpath (const char *, char []);
++
+ #if !HAVE_DECL_ASPRINTF
+ /* Like sprintf but provides a pointer to malloc'd storage, which must
+    be freed by the caller.  */
+--- a/src/libcpp/Makefile.in
++++ b/src/libcpp/Makefile.in
+@@ -72,13 +72,12 @@
+ libcpp_a_OBJS = charset.o directives.o directives-only.o errors.o \
+ 	expr.o files.o identifiers.o init.o lex.o line-map.o macro.o \
+ 	mkdeps.o pch.o symtab.o traditional.o
+-makedepend_OBJS = makedepend.o
+ 
+ libcpp_a_SOURCES = charset.c directives.c directives-only.c errors.c \
+ 	expr.c files.c identifiers.c init.c lex.c line-map.c macro.c \
+ 	mkdeps.c pch.c symtab.c traditional.c
+ 
+-all: libcpp.a makedepend$(EXEEXT) $(USED_CATALOGS)
++all: libcpp.a $(USED_CATALOGS)
+ 
+ .SUFFIXES:
+ .SUFFIXES: .c .gmo .o .obj .po .pox
+@@ -88,12 +87,6 @@
+ 	$(AR) $(ARFLAGS) libcpp.a $(libcpp_a_OBJS)
+ 	$(RANLIB) libcpp.a
+ 
+-makedepend$(EXEEXT): $(makedepend_OBJS) libcpp.a ../libiberty/libiberty.a
+-	@rm -f makedepend$(EXEEXT)
+-	$(CC) $(CFLAGS) $(LDFLAGS) -o makedepend$(EXEEXT) \
+-	  $(makedepend_OBJS) libcpp.a ../libiberty/libiberty.a \
+-	  $(LIBINTL) $(LIBICONV)
+-
+ # Rules to rebuild the configuration
+ 
+ Makefile: $(srcdir)/Makefile.in config.status
+@@ -165,7 +158,7 @@
+ 	-rm -f *.o
+ 
+ clean: mostlyclean
+-	-rm -rf makedepend$(EXEEXT) libcpp.a $(srcdir)/autom4te.cache
++	-rm -rf libcpp.a $(srcdir)/autom4te.cache
+ 
+ distclean: clean
+ 	-rm -f config.h stamp-h1 config.status config.cache config.log \
+@@ -247,7 +240,7 @@
+ 	sed 's:$(srcdir)/::g' <po/$(PACKAGE).pot.tmp >po/$(PACKAGE).pot
+ 	rm po/$(PACKAGE).pot.tmp
+ 
+-TAGS_SOURCES = $(libcpp_a_SOURCES) makedepend.c internal.h ucnid.h \
++TAGS_SOURCES = $(libcpp_a_SOURCES) internal.h ucnid.h \
+     include/line-map.h include/symtab.h include/cpp-id-data.h \
+     include/cpplib.h include/mkdeps.h system.h
+ 
+@@ -259,7 +252,7 @@
+ .NOEXPORT:
+ 
+ # Dependencies
+--include $(patsubst %.o, $(DEPDIR)/%.Po, $(libcpp_a_OBJS) $(makedepend_OBJS))
++-include $(patsubst %.o, $(DEPDIR)/%.Po, $(libcpp_a_OBJS))
+ 
+ # Dependencies on generated headers have to be explicit.
+ init.o: localedir.h
+--- a/src/libcpp/directives.c
++++ b/src/libcpp/directives.c
+@@ -2376,13 +2376,6 @@
+   run_directive (pfile, type, str, count);
+ }
+ 
+-/* The number of errors for a given reader.  */
+-unsigned int
+-cpp_errors (cpp_reader *pfile)
+-{
+-  return pfile->errors;
+-}
+-
+ /* The options structure.  */
+ cpp_options *
+ cpp_get_options (cpp_reader *pfile)
+--- a/src/libcpp/errors.c
++++ b/src/libcpp/errors.c
+@@ -28,171 +28,69 @@
+ #include "cpplib.h"
+ #include "internal.h"
+ 
+-static void print_location (cpp_reader *, source_location, unsigned int);
+-
+-/* Print the logical file location (LINE, COL) in preparation for a
+-   diagnostic.  Outputs the #include chain if it has changed.  A line
+-   of zero suppresses the include stack, and outputs the program name
+-   instead.  */
+-static void
+-print_location (cpp_reader *pfile, source_location line, unsigned int col)
+-{
+-  if (line == 0)
+-    fprintf (stderr, "%s: ", progname);
+-  else
+-    {
+-      const struct line_map *map;
+-      linenum_type lin;
+-
+-      map = linemap_lookup (pfile->line_table, line);
+-      linemap_print_containing_files (pfile->line_table, map);
+-
+-      lin = SOURCE_LINE (map, line);
+-      if (col == 0)
+-	{
+-	  col = SOURCE_COLUMN (map, line);
+-	  if (col == 0)
+-	    col = 1;
+-	}
+-
+-      if (lin == 0)
+-	fprintf (stderr, "%s:", map->to_file);
+-      else if (CPP_OPTION (pfile, show_column) == 0)
+-	fprintf (stderr, "%s:%u:", map->to_file, lin);
+-      else
+-	fprintf (stderr, "%s:%u:%u:", map->to_file, lin, col);
+-
+-      fputc (' ', stderr);
+-    }
+-}
+-
+-/* Set up for a diagnostic: print the file and line, bump the error
+-   counter, etc.  SRC_LOC is the logical line number; zero means to print
+-   at the location of the previously lexed token, which tends to be
+-   the correct place by default.  The column number can be specified either
+-   using COLUMN or (if COLUMN==0) extracting SOURCE_COLUMN from SRC_LOC.
+-   (This may seem redundant, but is useful when pre-scanning (cleaning) a line,
+-   when we haven't yet verified whether the current line_map has a
+-   big enough max_column_hint.)
+-
+-   Returns 0 if the error has been suppressed.  */
+-static int
+-_cpp_begin_message (cpp_reader *pfile, int code,
+-		    source_location src_loc, unsigned int column)
+-{
+-  int level = CPP_DL_EXTRACT (code);
+-
+-  switch (level)
+-    {
+-    case CPP_DL_WARNING:
+-    case CPP_DL_PEDWARN:
+-      if (cpp_in_system_header (pfile)
+-	  && ! CPP_OPTION (pfile, warn_system_headers))
+-	return 0;
+-      /* Fall through.  */
+-
+-    case CPP_DL_WARNING_SYSHDR:
+-      if (CPP_OPTION (pfile, warnings_are_errors)
+-	  || (level == CPP_DL_PEDWARN && CPP_OPTION (pfile, pedantic_errors)))
+-	{
+-	  if (CPP_OPTION (pfile, inhibit_errors))
+-	    return 0;
+-	  level = CPP_DL_ERROR;
+-	  pfile->errors++;
+-	}
+-      else if (CPP_OPTION (pfile, inhibit_warnings))
+-	return 0;
+-      break;
+-
+-    case CPP_DL_ERROR:
+-      if (CPP_OPTION (pfile, inhibit_errors))
+-	return 0;
+-      /* ICEs cannot be inhibited.  */
+-    case CPP_DL_ICE:
+-      pfile->errors++;
+-      break;
+-    }
+-
+-  print_location (pfile, src_loc, column);
+-  if (CPP_DL_WARNING_P (level))
+-    fputs (_("warning: "), stderr);
+-  else if (level == CPP_DL_ICE)
+-    fputs (_("internal error: "), stderr);
+-  else
+-    fputs (_("error: "), stderr);
+-
+-  return 1;
+-}
+-
+-/* Don't remove the blank before do, as otherwise the exgettext
+-   script will mistake this as a function definition */
+-#define v_message(msgid, ap) \
+- do { vfprintf (stderr, _(msgid), ap); putc ('\n', stderr); } while (0)
+-
+-/* Exported interface.  */
+-
+ /* Print an error at the location of the previously lexed token.  */
+-void
++bool
+ cpp_error (cpp_reader * pfile, int level, const char *msgid, ...)
+ {
+   source_location src_loc;
+   va_list ap;
+-  
++  bool ret;
++
+   va_start (ap, msgid);
+ 
+-  if (CPP_OPTION (pfile, client_diagnostic))
+-    pfile->cb.error (pfile, level, _(msgid), &ap);
+-  else
++  if (CPP_OPTION (pfile, traditional))
+     {
+-      if (CPP_OPTION (pfile, traditional))
+-	{
+-	  if (pfile->state.in_directive)
+-	    src_loc = pfile->directive_line;
+-	  else
+-	    src_loc = pfile->line_table->highest_line;
+-	}
+-      /* We don't want to refer to a token before the beginning of the
+-	 current run -- that is invalid.  */
+-      else if (pfile->cur_token == pfile->cur_run->base)
+-	{
+-	  if (pfile->cur_run->prev != NULL)
+-	    src_loc = pfile->cur_run->prev->limit->src_loc;
+-	  else
+-	    src_loc = 0;
+-	}
++      if (pfile->state.in_directive)
++	src_loc = pfile->directive_line;
+       else
+-	{
+-	  src_loc = pfile->cur_token[-1].src_loc;
+-	}
+-
+-      if (_cpp_begin_message (pfile, level, src_loc, 0))
+-	v_message (msgid, ap);
++	src_loc = pfile->line_table->highest_line;
++    }
++  /* We don't want to refer to a token before the beginning of the
++     current run -- that is invalid.  */
++  else if (pfile->cur_token == pfile->cur_run->base)
++    {
++      if (pfile->cur_run->prev != NULL)
++	src_loc = pfile->cur_run->prev->limit->src_loc;
++      else
++	src_loc = 0;
+     }
++  else
++    {
++      src_loc = pfile->cur_token[-1].src_loc;
++    }
++
++  if (!pfile->cb.error)
++    abort ();
++  ret = pfile->cb.error (pfile, level, src_loc, 0, _(msgid), &ap);
+ 
+   va_end (ap);
++  return ret;
+ }
+ 
+ /* Print an error at a specific location.  */
+-void
++bool
+ cpp_error_with_line (cpp_reader *pfile, int level,
+ 		     source_location src_loc, unsigned int column,
+ 		     const char *msgid, ...)
+ {
+   va_list ap;
++  bool ret;
+   
+   va_start (ap, msgid);
+ 
+-  if (_cpp_begin_message (pfile, level, src_loc, column))
+-    v_message (msgid, ap);
++  if (!pfile->cb.error)
++    abort ();
++  ret = pfile->cb.error (pfile, level, src_loc, column, _(msgid), &ap);
+ 
+   va_end (ap);
++  return ret;
+ }
+ 
+-void
++bool
+ cpp_errno (cpp_reader *pfile, int level, const char *msgid)
+ {
+   if (msgid[0] == '\0')
+     msgid = _("stdout");
+ 
+-  cpp_error (pfile, level, "%s: %s", msgid, xstrerror (errno));
++  return cpp_error (pfile, level, "%s: %s", msgid, xstrerror (errno));
+ }
+--- a/src/libcpp/files.c
++++ b/src/libcpp/files.c
+@@ -488,7 +488,6 @@
+ 	      return file;
+ 	    }
+ 
+-	  open_file_failed (pfile, file, angle_brackets);
+ 	  if (invalid_pch)
+ 	    {
+ 	      cpp_error (pfile, CPP_DL_ERROR,
+@@ -497,6 +496,7 @@
+ 		cpp_error (pfile, CPP_DL_ERROR,
+ 			   "use -Winvalid-pch for more information");
+ 	    }
++	  open_file_failed (pfile, file, angle_brackets);
+ 	  break;
+ 	}
+ 
+@@ -934,15 +934,28 @@
+ 
+   errno = file->err_no;
+   if (print_dep && CPP_OPTION (pfile, deps.missing_files) && errno == ENOENT)
+-    deps_add_dep (pfile->deps, file->name);
++    {
++      deps_add_dep (pfile->deps, file->name);
++      /* If the preprocessor output (other than dependency information) is
++         being used, we must also flag an error.  */
++      if (CPP_OPTION (pfile, deps.need_preprocessor_output))
++	cpp_errno (pfile, CPP_DL_FATAL, file->path);
++    }
+   else
+     {
+-      /* If we are outputting dependencies but not for this file then
+-	 don't error because we can still produce correct output.  */
+-      if (CPP_OPTION (pfile, deps.style) && ! print_dep)
+-	cpp_errno (pfile, CPP_DL_WARNING, file->path);
++      /* If we are not outputting dependencies, or if we are and dependencies
++         were requested for this file, or if preprocessor output is needed
++         in addition to dependency information, this is an error.
++
++         Otherwise (outputting dependencies but not for this file, and not
++         using the preprocessor output), we can still produce correct output
++         so it's only a warning.  */
++      if (CPP_OPTION (pfile, deps.style) == DEPS_NONE
++          || print_dep
++          || CPP_OPTION (pfile, deps.need_preprocessor_output))
++	cpp_errno (pfile, CPP_DL_FATAL, file->path);
+       else
+-	cpp_errno (pfile, CPP_DL_ERROR, file->path);
++	cpp_errno (pfile, CPP_DL_WARNING, file->path);
+     }
+ }
+ 
+--- a/src/libcpp/include/cpplib.h
++++ b/src/libcpp/include/cpplib.h
+@@ -302,22 +302,9 @@
+   /* Nonzero means print names of header files (-H).  */
+   unsigned char print_include_names;
+ 
+-  /* Nonzero means cpp_pedwarn causes a hard error.  */
+-  unsigned char pedantic_errors;
+-
+-  /* Nonzero means don't print warning messages.  */
+-  unsigned char inhibit_warnings;
+-
+   /* Nonzero means complain about deprecated features.  */
+   unsigned char warn_deprecated;
+ 
+-  /* Nonzero means don't suppress warnings from system headers.  */
+-  unsigned char warn_system_headers;
+-
+-  /* Nonzero means don't print error messages.  Has no option to
+-     select it, but can be set by a user of cpplib (e.g. fix-header).  */
+-  unsigned char inhibit_errors;
+-
+   /* Nonzero means warn if slash-star appears in a comment.  */
+   unsigned char warn_comments;
+ 
+@@ -353,9 +340,6 @@
+      explicitly undefined.  */
+   unsigned char warn_builtin_macro_redefined;
+ 
+-  /* Nonzero means turn warnings into errors.  */
+-  unsigned char warnings_are_errors;
+-
+   /* Nonzero means we should look for header.gcc files that remap file
+      names.  */
+   unsigned char remap;
+@@ -432,6 +416,10 @@
+ 
+     /* If true, no dependency is generated on the main file.  */
+     bool ignore_main_file;
++
++    /* If true, intend to use the preprocessor output (e.g., for compilation)
++       in addition to the dependency info.  */
++    bool need_preprocessor_output;
+   } deps;
+ 
+   /* Target-specific features set by the front end or client.  */
+@@ -450,9 +438,6 @@
+   /* Nonzero means __STDC__ should have the value 0 in system headers.  */
+   unsigned char stdc_0_in_system_headers;
+ 
+-  /* True means error callback should be used for diagnostics.  */
+-  bool client_diagnostic;
+-
+   /* True disables tokenization outside of preprocessing directives. */
+   bool directives_only;
+ };
+@@ -492,10 +477,11 @@
+      be expanded.  */
+   cpp_hashnode * (*macro_to_expand) (cpp_reader *, const cpp_token *);
+ 
+-  /* Called to emit a diagnostic if client_diagnostic option is true.
+-     This callback receives the translated message.  */
+-  void (*error) (cpp_reader *, int, const char *, va_list *)
+-       ATTRIBUTE_FPTR_PRINTF(3,0);
++  /* Called to emit a diagnostic.  This callback receives the
++     translated message.  */
++  bool (*error) (cpp_reader *, int, source_location, unsigned int,
++		 const char *, va_list *)
++       ATTRIBUTE_FPTR_PRINTF(5,0);
+ 
+   /* Callbacks for when a macro is expanded, or tested (whether
+      defined or not at the time) in #ifdef, #ifndef or "defined".  */
+@@ -697,19 +683,13 @@
+ 
+ /* Call this to finish preprocessing.  If you requested dependency
+    generation, pass an open stream to write the information to,
+-   otherwise NULL.  It is your responsibility to close the stream.
+-
+-   Returns cpp_errors (pfile).  */
+-extern int cpp_finish (cpp_reader *, FILE *deps_stream);
++   otherwise NULL.  It is your responsibility to close the stream.  */
++extern void cpp_finish (cpp_reader *, FILE *deps_stream);
+ 
+ /* Call this to release the handle at the end of preprocessing.  Any
+-   use of the handle after this function returns is invalid.  Returns
+-   cpp_errors (pfile).  */
++   use of the handle after this function returns is invalid.  */
+ extern void cpp_destroy (cpp_reader *);
+ 
+-/* Error count.  */
+-extern unsigned int cpp_errors (cpp_reader *);
+-
+ extern unsigned int cpp_token_len (const cpp_token *);
+ extern unsigned char *cpp_token_as_text (cpp_reader *, const cpp_token *);
+ extern unsigned char *cpp_spell_token (cpp_reader *, const cpp_token *,
+@@ -835,24 +815,23 @@
+ /* An internal consistency check failed.  Prints "internal error: ",
+    otherwise the same as CPP_DL_ERROR.  */
+ #define CPP_DL_ICE		0x04
+-/* Extracts a diagnostic level from an int.  */
+-#define CPP_DL_EXTRACT(l)	(l & 0xf)
+-/* Nonzero if a diagnostic level is one of the warnings.  */
+-#define CPP_DL_WARNING_P(l)	(CPP_DL_EXTRACT (l) >= CPP_DL_WARNING \
+-				 && CPP_DL_EXTRACT (l) <= CPP_DL_PEDWARN)
++/* An informative note following a warning.  */
++#define CPP_DL_NOTE		0x05
++/* A fatal error.  */
++#define CPP_DL_FATAL		0x06
+ 
+ /* Output a diagnostic of some kind.  */
+-extern void cpp_error (cpp_reader *, int, const char *msgid, ...)
++extern bool cpp_error (cpp_reader *, int, const char *msgid, ...)
+   ATTRIBUTE_PRINTF_3;
+ 
+ /* Output a diagnostic with "MSGID: " preceding the
+    error string of errno.  No location is printed.  */
+-extern void cpp_errno (cpp_reader *, int, const char *msgid);
++extern bool cpp_errno (cpp_reader *, int, const char *msgid);
+ 
+ /* Same as cpp_error, except additionally specifies a position as a
+    (translation unit) physical line and physical column.  If the line is
+    zero, then no location is printed.  */
+-extern void cpp_error_with_line (cpp_reader *, int, source_location, unsigned,
++extern bool cpp_error_with_line (cpp_reader *, int, source_location, unsigned,
+ 				 const char *msgid, ...) ATTRIBUTE_PRINTF_5;
+ 
+ /* In lex.c */
+--- a/src/libcpp/include/line-map.h
++++ b/src/libcpp/include/line-map.h
+@@ -144,11 +144,10 @@
+ extern const struct line_map *linemap_lookup
+   (struct line_maps *, source_location);
+ 
+-/* Print the file names and line numbers of the #include commands
+-   which led to the map MAP, if any, to stderr.  Nothing is output if
+-   the most recently listed stack is the same as the current one.  */
+-extern void linemap_print_containing_files (struct line_maps *,
+-					    const struct line_map *);
++/* source_location values from 0 to RESERVED_LOCATION_COUNT-1 will
++   be reserved for libcpp user as special values, no token from libcpp
++   will contain any of those locations.  */
++#define RESERVED_LOCATION_COUNT	2
+ 
+ /* Converts a map and a source_location to source line.  */
+ #define SOURCE_LINE(MAP, LOC) \
+--- a/src/libcpp/init.c
++++ b/src/libcpp/init.c
+@@ -631,12 +631,11 @@
+ }
+ 
+ /* This is called at the end of preprocessing.  It pops the last
+-   buffer and writes dependency output, and returns the number of
+-   errors.
++   buffer and writes dependency output.
+ 
+    Maybe it should also reset state, such that you could call
+    cpp_start_read with a new filename to restart processing.  */
+-int
++void
+ cpp_finish (cpp_reader *pfile, FILE *deps_stream)
+ {
+   /* Warn about unused macros before popping the final buffer.  */
+@@ -651,9 +650,8 @@
+   while (pfile->buffer)
+     _cpp_pop_buffer (pfile);
+ 
+-  /* Don't write the deps file if there are errors.  */
+   if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
+-      && deps_stream && pfile->errors == 0)
++      && deps_stream)
+     {
+       deps_write (pfile->deps, deps_stream, 72);
+ 
+@@ -664,8 +662,6 @@
+   /* Report on headers that could use multiple include guards.  */
+   if (CPP_OPTION (pfile, print_include_names))
+     _cpp_report_missing_guards (pfile);
+-
+-  return pfile->errors;
+ }
+ 
+ static void
+--- a/src/libcpp/internal.h
++++ b/src/libcpp/internal.h
+@@ -398,9 +398,6 @@
+   /* Nonzero prevents the lexer from re-using the token runs.  */
+   unsigned int keep_tokens;
+ 
+-  /* Error counter for exit code.  */
+-  unsigned int errors;
+-
+   /* Buffer to hold macro definition string.  */
+   unsigned char *macro_buffer;
+   unsigned int macro_buffer_len;
+--- a/src/libcpp/line-map.c
++++ b/src/libcpp/line-map.c
+@@ -38,8 +38,8 @@
+   set->trace_includes = false;
+   set->depth = 0;
+   set->cache = 0;
+-  set->highest_location = 0;
+-  set->highest_line = 0;
++  set->highest_location = RESERVED_LOCATION_COUNT - 1;
++  set->highest_line = RESERVED_LOCATION_COUNT - 1;
+   set->max_column_hint = 0;
+ }
+ 
+@@ -302,45 +302,6 @@
+   return &set->maps[mn];
+ }
+ 
+-/* Print the file names and line numbers of the #include commands
+-   which led to the map MAP, if any, to stderr.  Nothing is output if
+-   the most recently listed stack is the same as the current one.  */
+-
+-void
+-linemap_print_containing_files (struct line_maps *set,
+-				const struct line_map *map)
+-{
+-  if (MAIN_FILE_P (map) || set->last_listed == map->included_from)
+-    return;
+-
+-  set->last_listed = map->included_from;
+-  map = INCLUDED_FROM (set, map);
+-
+-  fprintf (stderr,  _("In file included from %s:%u"),
+-	   map->to_file, LAST_SOURCE_LINE (map));
+-
+-  while (! MAIN_FILE_P (map))
+-    {
+-      map = INCLUDED_FROM (set, map);
+-      /* Translators note: this message is used in conjunction
+-	 with "In file included from %s:%ld" and some other
+-	 tricks.  We want something like this:
+-
+-	 | In file included from sys/select.h:123,
+-	 |                  from sys/types.h:234,
+-	 |                  from userfile.c:31:
+-	 | bits/select.h:45: <error message here>
+-
+-	 with all the "from"s lined up.
+-	 The trailing comma is at the beginning of this message,
+-	 and the trailing colon is not translated.  */
+-      fprintf (stderr, _(",\n                 from %s:%u"),
+-	       map->to_file, LAST_SOURCE_LINE (map));
+-    }
+-
+-  fputs (":\n", stderr);
+-}
+-
+ /* Print an include trace, for e.g. the -H option of the preprocessor.  */
+ 
+ static void
+--- a/src/libcpp/macro.c
++++ b/src/libcpp/macro.c
+@@ -1833,11 +1833,13 @@
+ 
+       if (warn_of_redefinition (pfile, node, macro))
+ 	{
+-	  cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->directive_line, 0,
+-			       "\"%s\" redefined", NODE_NAME (node));
++	  bool warned;
++	  warned = cpp_error_with_line (pfile, CPP_DL_PEDWARN,
++					pfile->directive_line, 0,
++					"\"%s\" redefined", NODE_NAME (node));
+ 
+-	  if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
+-	    cpp_error_with_line (pfile, CPP_DL_PEDWARN,
++	  if (warned && node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
++	    cpp_error_with_line (pfile, CPP_DL_NOTE,
+ 				 node->value.macro->line, 0,
+ 			 "this is the location of the previous definition");
+ 	}
+--- a/src/libcpp/makedepend.c
++++ b/src/libcpp/makedepend.c
+@@ -1,206 +0,0 @@
+-/* Dependency generator utility.
+-   Copyright (C) 2004 Free Software Foundation, Inc.
+-   Contributed by Zack Weinberg, May 2004
+-
+-This program is free software; you can redistribute it and/or modify it
+-under the terms of the GNU General Public License as published by the
+-Free Software Foundation; either version 2, or (at your option) any
+-later version.
+-
+-This program is distributed in the hope that it will be useful,
+-but WITHOUT ANY WARRANTY; without even the implied warranty of
+-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-GNU General Public License for more details.
+-
+-You should have received a copy of the GNU General Public License
+-along with this program; if not, write to the Free Software
+-Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+-
+- In other words, you are welcome to use, share and improve this program.
+- You are forbidden to forbid anyone else to use, share and improve
+- what you give them.   Help stamp out software-hoarding!  */
+-
+-#include "config.h"
+-#include "system.h"
+-#include "line-map.h"
+-#include "cpplib.h"
+-#include "getopt.h"
+-#include "mkdeps.h"
+-
+-const char *progname;
+-const char *vpath;
+-
+-static const char *output_file;
+-static bool had_errors;
+-
+-/* Option lists, to give to cpplib before each input file.  */
+-struct cmd_line_macro
+-{
+-  struct cmd_line_macro *next;
+-  bool is_undef;
+-  const char *macro;
+-};
+-
+-static struct cmd_line_macro *cmd_line_macros;
+-static cpp_dir *cmd_line_searchpath;
+-
+-static void
+-add_clm (const char *macro, bool is_undef)
+-{
+-  struct cmd_line_macro *clm = XNEW (struct cmd_line_macro);
+-  clm->next = cmd_line_macros;
+-  clm->is_undef = is_undef;
+-  clm->macro = macro;
+-  cmd_line_macros = clm;
+-}
+-
+-static void
+-add_dir (char *name, bool sysp)
+-{
+-  cpp_dir *dir = XNEW (cpp_dir);
+-  dir->next = cmd_line_searchpath;
+-  dir->name = name;
+-  dir->sysp = sysp;
+-  dir->construct = 0;
+-  dir->user_supplied_p = 1;
+-  cmd_line_searchpath = dir;
+-}
+-
+-/* Command line processing.  */
+-
+-static void ATTRIBUTE_NORETURN
+-usage (int errcode)
+-{
+-  fprintf (stderr,
+-"usage: %s [-vh] [-V vpath] [-Dname[=def]...] [-Uname] [-Idir...] [-o file] sources...\n",
+-	   progname);
+-  exit (errcode);
+-}
+-
+-static int
+-parse_options (int argc, char **argv)
+-{
+-  static const struct option longopts[] = {
+-    { "--help", no_argument, 0, 'h' },
+-    { 0, 0, 0, 0 }
+-  };
+-
+-  for (;;)
+-    switch (getopt_long (argc, argv, "hD:U:I:J:o:V:", longopts, 0))
+-      {
+-      case 'h': usage (0);
+-      case 'D': add_clm (optarg, false); break;
+-      case 'U': add_clm (optarg, true);  break;
+-      case 'I': add_dir (optarg, false); break;
+-      case 'J': add_dir (optarg, true);  break;
+-      case 'o':
+-	if (output_file)
+-	  {
+-	    fprintf (stderr, "%s: too many output files\n", progname);
+-	    usage (2);
+-	  }
+-	output_file = optarg;
+-	break;
+-      case 'V':
+-	if (vpath)
+-	  {
+-	    fprintf (stderr, "%s: too many vpaths\n", progname);
+-	    usage (2);
+-	  }
+-	vpath = optarg;
+-	break;
+-      case '?':
+-	usage (2);  /* getopt has issued the error message.  */
+-
+-      case -1: /* end of options */
+-	if (optind == argc)
+-	  {
+-	    fprintf (stderr, "%s: no input files\n", progname);
+-	    usage (2);
+-	  }
+-	return optind;
+-
+-      default:
+-	abort ();
+-      }
+-}
+-
+-/* Set up cpplib from command line options.  */
+-static cpp_reader *
+-reader_init (struct line_maps *line_table)
+-{
+-  cpp_reader *reader;
+-  cpp_options *options;
+-
+-  linemap_init (line_table);
+-  reader = cpp_create_reader (CLK_GNUC89, 0, line_table);
+-
+-  /* Ignore warnings and errors (we don't have access to system
+-     headers).  Request dependency output.  */
+-  options = cpp_get_options (reader);
+-  options->inhibit_warnings = 1;
+-  options->inhibit_errors = 1;
+-  options->deps.style = DEPS_USER;
+-
+-  /* Further initialization.  */
+-  cpp_post_options (reader);
+-  cpp_init_iconv (reader);
+-  cpp_set_include_chains (reader, cmd_line_searchpath, cmd_line_searchpath,
+-			  false);
+-  if (vpath)
+-    {
+-      struct deps *deps = cpp_get_deps (reader);
+-      deps_add_vpath (deps, vpath);
+-    }
+-
+-  return reader;
+-}
+-
+-/* Process one input source file.  */
+-static void
+-process_file (const char *file)
+-{
+-  struct line_maps line_table;
+-  cpp_reader *reader = reader_init (&line_table);
+-
+-  if (!cpp_read_main_file (reader, file))
+-    had_errors = true;
+-  else
+-    {
+-      struct cmd_line_macro *clm;
+-
+-      cpp_init_builtins (reader, true);
+-      for (clm = cmd_line_macros; clm; clm = clm->next)
+-	(clm->is_undef ? cpp_undef : cpp_define) (reader, clm->macro);
+-
+-      cpp_scan_nooutput (reader);
+-      if (cpp_finish (reader, stdout))
+-	had_errors = true;
+-    }
+-  cpp_destroy (reader);
+-  linemap_free (&line_table);
+-}
+-
+-/* Master control.  */
+-
+-int
+-main(int argc, char **argv)
+-{
+-  int first_input, i;
+-
+-  progname = argv[0];
+-  xmalloc_set_program_name (progname);
+-
+-  first_input = parse_options (argc, argv);
+-  if (output_file)
+-    if (!freopen (output_file, "w", stdout))
+-      {
+-	perror (output_file);
+-	return 1;
+-      }
+-
+-  for (i = first_input; i < argc; i++)
+-    process_file (argv[i]);
+-
+-  return had_errors;
+-}
+--- a/src/libgcc/Makefile.in
++++ b/src/libgcc/Makefile.in
+@@ -389,18 +389,24 @@
+ endif
+ endif
+ 
++ifeq ($(LIB2_DIVMOD_EXCEPTION_FLAGS),)
++# Provide default flags for compiling divmod functions, if they haven't been
++# set already by a target-specific Makefile fragment.
++LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions -fnon-call-exceptions
++endif
++
+ # Build LIB2_DIVMOD_FUNCS.
+ lib2-divmod-o = $(patsubst %,%$(objext),$(LIB2_DIVMOD_FUNCS))
+ $(lib2-divmod-o): %$(objext): $(gcc_srcdir)/libgcc2.c
+ 	$(gcc_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c \
+-	  -fexceptions -fnon-call-exceptions $(vis_hide)
++	  $(LIB2_DIVMOD_EXCEPTION_FLAGS) $(vis_hide)
+ libgcc-objects += $(lib2-divmod-o)
+ 
+ ifeq ($(enable_shared),yes)
+ lib2-divmod-s-o = $(patsubst %,%_s$(objext),$(LIB2_DIVMOD_FUNCS))
+ $(lib2-divmod-s-o): %_s$(objext): $(gcc_srcdir)/libgcc2.c
+ 	$(gcc_s_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c \
+-	  -fexceptions -fnon-call-exceptions
++	  $(LIB2_DIVMOD_EXCEPTION_FLAGS)
+ libgcc-s-objects += $(lib2-divmod-s-o)
+ endif
+ 
+--- a/src/libgcc/config/arm/t-divmod-ef
++++ b/src/libgcc/config/arm/t-divmod-ef
+@@ -0,0 +1,4 @@
++# On ARM, specifying -fnon-call-exceptions will needlessly pull in
++# the unwinder in simple programs which use 64-bit division.  Omitting
++# the option is safe.
++LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions
+--- a/src/libgcc/config/mips/t-crtfm
++++ b/src/libgcc/config/mips/t-crtfm
+@@ -0,0 +1,3 @@
++crtfastmath.o: $(gcc_srcdir)/config/mips/crtfastmath.c
++	$(gcc_compile) -c $(gcc_srcdir)/config/mips/crtfastmath.c
++
+--- a/src/libgcc/config/sh/t-uclinux-fdpic
++++ b/src/libgcc/config/sh/t-uclinux-fdpic
+@@ -0,0 +1,40 @@
++# FIXME: -DNO_FPSCR_VALUES is probably appropriate (we have shared libs).
++# But it requires __fpscr_values be provided by libc.so.
++HOST_LIBGCC2_CFLAGS = -fpic
++
++# Do we need unwind-dw2-fde-glibc for EH?  It does not currently
++# build.
++#LIB2ADDEH = $(gcc_srcdir)/unwind-dw2.c $(gcc_srcdir)/unwind-dw2-fde-glibc.c \
++#  $(gcc_srcdir)/unwind-sjlj.c $(gcc_srcdir)/gthr-gnat.c \
++#  $(gcc_srcdir)/unwind-c.c
++
++# Override t-slibgcc-elf-ver to hide some lib1func routines which
++# should not be called via PLT.
++SHLIB_MAPFILES += $(gcc_srcdir)/config/sh/libgcc-excl.ver
++
++# Override SHLIB_LINK and SHLIB_INSTALL to use linker script
++# libgcc_s.so.
++SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
++	-Wl,--soname=@shlib_base_name@.so.1 \
++	-Wl,--version-script=@shlib_map_file@ \
++	-o @multilib_dir@/@shlib_base_name@.so.1.tmp @multilib_flags@ \
++	@shlib_objs@ -lc && \
++	rm -f @multilib_dir@/@shlib_base_name@.so && \
++	if [ -f @multilib_dir@/@shlib_base_name@.so.1 ]; then \
++	  mv -f @multilib_dir@/@shlib_base_name@.so.1 \
++		@multilib_dir@/@shlib_base_name@.so.1.backup; \
++	else true; fi && \
++	mv @multilib_dir@/@shlib_base_name@.so.1.tmp \
++	   @multilib_dir@/@shlib_base_name@.so.1 && \
++	(echo "/* GNU ld script"; \
++	 echo "   Use the shared library, but some functions are only in"; \
++	 echo "   the static library.  */"; \
++	 echo "GROUP ( @shlib_base_name@.so.1 libgcc.a )" \
++	) > @multilib_dir@/@shlib_base_name@.so
++SHLIB_INSTALL = \
++	$(mkinstalldirs) $(DESTDIR)$(slibdir)@shlib_slibdir_qual@; \
++	$(INSTALL_DATA) @multilib_dir@/@shlib_base_name@.so.1 \
++	  $(DESTDIR)$(slibdir)@shlib_slibdir_qual@/@shlib_base_name@.so.1; \
++	rm -f $(DESTDIR)$(slibdir)@shlib_slibdir_qual@/@shlib_base_name@.so; \
++	$(INSTALL_DATA) @multilib_dir@/@shlib_base_name@.so \
++	  $(DESTDIR)$(slibdir)@shlib_slibdir_qual@/@shlib_base_name@.so
+--- a/src/libgcc/config.host
++++ b/src/libgcc/config.host
+@@ -203,12 +203,15 @@
+ arm*-*-netbsd*)
+ 	;;
+ arm*-*-linux*)			# ARM GNU/Linux with ELF
++	tmake_file="${tmake_file} arm/t-divmod-ef"
+ 	;;
+ arm*-*-uclinux*)		# ARM ucLinux
++	tmake_file="${tmake_file} arm/t-divmod-ef"
+ 	;;
+ arm*-*-ecos-elf)
+ 	;;
+-arm*-*-eabi* | arm*-*-symbianelf* )
++arm*-*-eabi* | arm*-*-nucleuseabi* | arm*-*-symbianelf* )
++	tmake_file="${tmake_file} arm/t-divmod-ef"
+ 	;;
+ arm*-*-rtems*)
+ 	;;
+@@ -216,6 +219,8 @@
+ 	;;
+ arm*-wince-pe*)
+ 	;;
++arm*-*-mingw32ce* | arm*-*-cegcc*)
++	;;
+ arm-*-pe*)
+ 	;;
+ avr-*-rtems*)
+@@ -394,8 +399,12 @@
+ mips*-*-netbsd*)			# NetBSD/mips, either endian.
+ 	;;
+ mips64*-*-linux*)
++	extra_parts="$extra_parts crtfastmath.o"
++	tmake_file="{$tmake_file} mips/t-crtfm"
+ 	;;
+ mips*-*-linux*)				# Linux MIPS, either endian.
++	extra_parts="$extra_parts crtfastmath.o"
++	tmake_file="{$tmake_file} mips/t-crtfm"
+ 	;;
+ mips*-*-openbsd*)
+ 	;;
+@@ -419,6 +428,10 @@
+         ;;
+ mips64orion-*-elf* | mips64orionel-*-elf*)
+ 	;;
++mips64octeon-wrs-elf* | mips64octeonel-wrs-elf*)
++	;;
++mips64octeon-montavista-elf*)
++	;;
+ mips*-*-rtems*)
+ 	;;
+ mips-wrs-vxworks)
+@@ -507,12 +520,20 @@
+ sh-*-elf* | sh[12346l]*-*-elf* | \
+ sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \
+   sh-*-linux* | sh[2346lbe]*-*-linux* | \
++  sh-*-uclinux* | sh[12]-*-uclinux* | \
+   sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
+    sh64-*-netbsd* | sh64l*-*-netbsd*)
+ 	case ${host} in
+ 	sh*-*-linux*)
+ 		tmake_file="${tmake_file} sh/t-linux"
+ 		;;
++	sh*-*-uclinux*)
++		# Upstream submission question: do we even need the
++		# pre-FDPIC configuration?
++		if test x$enable_fdpic != xno; then
++			tmake_file="${tmake_file} sh/t-uclinux-fdpic"
++		fi
++		;;
+ 	esac
+ 	;;
+ sh-*-rtems*)
+--- a/src/libgcc/shared-object.mk
++++ b/src/libgcc/shared-object.mk
+@@ -8,11 +8,13 @@
+ 
+ ifeq ($(suffix $o),.c)
+ 
++c_flags-$(base)$(objext) := $(c_flags)
+ $(base)$(objext): $o
+-	$(gcc_compile) $(c_flags) -c $< $(vis_hide)
++	$(gcc_compile) $(c_flags-$@) -c $< $(vis_hide)
+ 
++c_flags-$(base)_s$(objext) := $(c_flags)
+ $(base)_s$(objext): $o
+-	$(gcc_s_compile) $(c_flags) -c $<
++	$(gcc_s_compile) $(c_flags-$@) -c $<
+ 
+ else
+ 
+--- a/src/libgcc/static-object.mk
++++ b/src/libgcc/static-object.mk
+@@ -8,8 +8,9 @@
+ 
+ ifeq ($(suffix $o),.c)
+ 
++c_flags-$(base)$(objext) := $(c_flags)
+ $(base)$(objext): $o
+-	$(gcc_compile) $(c_flags) -c $< $(vis_hide)
++	$(gcc_compile) $(c_flags-$@) -c $< $(vis_hide)
+ 
+ else
+ 
+--- a/src/libgfortran/config.h.in
++++ b/src/libgfortran/config.h.in
+@@ -300,6 +300,9 @@
+ /* libm includes erfl */
+ #undef HAVE_ERFL
+ 
++/* errno.h exists */
++#undef HAVE_ERRNO_H
++
+ /* Define to 1 if you have the <execinfo.h> header file. */
+ #undef HAVE_EXECINFO_H
+ 
+--- a/src/libgfortran/configure
++++ b/src/libgfortran/configure
+@@ -15652,6 +15652,152 @@
+ fi
+ 
+ 
++if test "${ac_cv_header_errno_h+set}" = set; then
++  echo "$as_me:$LINENO: checking for errno.h" >&5
++echo $ECHO_N "checking for errno.h... $ECHO_C" >&6
++if test "${ac_cv_header_errno_h+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++echo "$as_me:$LINENO: result: $ac_cv_header_errno_h" >&5
++echo "${ECHO_T}$ac_cv_header_errno_h" >&6
++else
++  # Is the header compilable?
++echo "$as_me:$LINENO: checking errno.h usability" >&5
++echo $ECHO_N "checking errno.h usability... $ECHO_C" >&6
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++#include <errno.h>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++  (eval $ac_compile) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest.$ac_objext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  ac_header_compiler=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ac_header_compiler=no
++fi
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6
++
++# Is the header present?
++echo "$as_me:$LINENO: checking errno.h presence" >&5
++echo $ECHO_N "checking errno.h presence... $ECHO_C" >&6
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <errno.h>
++_ACEOF
++if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
++  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null; then
++  if test -s conftest.err; then
++    ac_cpp_err=$ac_c_preproc_warn_flag
++    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
++  else
++    ac_cpp_err=
++  fi
++else
++  ac_cpp_err=yes
++fi
++if test -z "$ac_cpp_err"; then
++  ac_header_preproc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_header_preproc=no
++fi
++rm -f conftest.err conftest.$ac_ext
++echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6
++
++# So?  What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
++  yes:no: )
++    { echo "$as_me:$LINENO: WARNING: errno.h: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: errno.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
++    { echo "$as_me:$LINENO: WARNING: errno.h: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: errno.h: proceeding with the compiler's result" >&2;}
++    ac_header_preproc=yes
++    ;;
++  no:yes:* )
++    { echo "$as_me:$LINENO: WARNING: errno.h: present but cannot be compiled" >&5
++echo "$as_me: WARNING: errno.h: present but cannot be compiled" >&2;}
++    { echo "$as_me:$LINENO: WARNING: errno.h:     check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: errno.h:     check for missing prerequisite headers?" >&2;}
++    { echo "$as_me:$LINENO: WARNING: errno.h: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: errno.h: see the Autoconf documentation" >&2;}
++    { echo "$as_me:$LINENO: WARNING: errno.h:     section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: errno.h:     section \"Present But Cannot Be Compiled\"" >&2;}
++    { echo "$as_me:$LINENO: WARNING: errno.h: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: errno.h: proceeding with the preprocessor's result" >&2;}
++    { echo "$as_me:$LINENO: WARNING: errno.h: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: errno.h: in the future, the compiler will take precedence" >&2;}
++    (
++      cat <<\_ASBOX
++## ------------------------------------------------------ ##
++## Report this to the GNU Fortran Runtime Library lists.  ##
++## ------------------------------------------------------ ##
++_ASBOX
++    ) |
++      sed "s/^/$as_me: WARNING:     /" >&2
++    ;;
++esac
++echo "$as_me:$LINENO: checking for errno.h" >&5
++echo $ECHO_N "checking for errno.h... $ECHO_C" >&6
++if test "${ac_cv_header_errno_h+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_cv_header_errno_h=$ac_header_preproc
++fi
++echo "$as_me:$LINENO: result: $ac_cv_header_errno_h" >&5
++echo "${ECHO_T}$ac_cv_header_errno_h" >&6
++
++fi
++if test $ac_cv_header_errno_h = yes; then
++
++cat >>confdefs.h <<\_ACEOF
++#define HAVE_ERRNO_H 1
++_ACEOF
++
++fi
++
++
+ 
+ 
+ inttype_headers=`echo inttypes.h sys/inttypes.h  | sed -e 's/,/ /g'`
+@@ -16361,7 +16507,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16425,7 +16572,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16466,7 +16614,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16523,7 +16672,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16564,7 +16714,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16629,7 +16780,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16697,7 +16849,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (void *)); }
+ unsigned long ulongval () { return (long) (sizeof (void *)); }
+ #include <stdio.h>
+@@ -16785,7 +16938,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16849,7 +17003,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16890,7 +17045,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16947,7 +17103,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16988,7 +17145,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17053,7 +17211,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17121,7 +17280,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (long)); }
+ unsigned long ulongval () { return (long) (sizeof (long)); }
+ #include <stdio.h>
+@@ -17209,7 +17369,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17273,7 +17434,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17314,7 +17476,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17371,7 +17534,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17412,7 +17576,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17477,7 +17642,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17545,7 +17711,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (int)); }
+ unsigned long ulongval () { return (long) (sizeof (int)); }
+ #include <stdio.h>
+@@ -17629,7 +17796,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17693,7 +17861,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17734,7 +17903,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17791,7 +17961,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17832,7 +18003,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17897,7 +18069,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17965,7 +18138,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (short)); }
+ unsigned long ulongval () { return (long) (sizeof (short)); }
+ #include <stdio.h>
+@@ -18049,7 +18223,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -18113,7 +18288,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -18154,7 +18330,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -18211,7 +18388,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -18252,7 +18430,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -18317,7 +18496,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -18385,7 +18565,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (char)); }
+ unsigned long ulongval () { return (long) (sizeof (char)); }
+ #include <stdio.h>
+--- a/src/libgfortran/configure.ac
++++ b/src/libgfortran/configure.ac
+@@ -193,6 +193,7 @@
+ AC_CHECK_HEADERS(sys/types.h sys/stat.h sys/wait.h floatingpoint.h ieeefp.h)
+ AC_CHECK_HEADERS(fenv.h fptrap.h float.h execinfo.h pwd.h)
+ AC_CHECK_HEADER([complex.h],[AC_DEFINE([HAVE_COMPLEX_H], [1], [complex.h exists])])
++AC_CHECK_HEADER([errno.h],[AC_DEFINE([HAVE_ERRNO_H], [1], [errno.h exists])])
+ GCC_HEADER_STDINT(gstdint.h)
+ 
+ AC_CHECK_MEMBERS([struct stat.st_blksize])
+--- a/src/libgfortran/intrinsics/access.c
++++ b/src/libgfortran/intrinsics/access.c
+@@ -25,7 +25,6 @@
+ 
+ #include "libgfortran.h"
+ 
+-#include <errno.h>
+ #include <string.h>
+ 
+ #ifdef HAVE_UNISTD_H
+@@ -85,6 +84,6 @@
+   file[name_len] = '\0';
+ 
+   /* And make the call to access().  */
+-  return (access (file, m) == 0 ? 0 : errno);
++  return (access (file, m) == 0 ? 0 : get_oserrno ());
+ }
+ #endif
+--- a/src/libgfortran/intrinsics/chdir.c
++++ b/src/libgfortran/intrinsics/chdir.c
+@@ -25,7 +25,9 @@
+ 
+ #include "libgfortran.h"
+ 
++#if HAVE_ERRNO_H
+ #include <errno.h>
++#endif
+ #include <string.h>
+ 
+ #ifdef HAVE_UNISTD_H
+--- a/src/libgfortran/intrinsics/chmod.c
++++ b/src/libgfortran/intrinsics/chmod.c
+@@ -25,7 +25,9 @@
+ 
+ #include "libgfortran.h"
+ 
++#if HAVE_ERRNO_H
+ #include <errno.h>
++#endif
+ #include <string.h>
+ 
+ #ifdef HAVE_UNISTD_H
+--- a/src/libgfortran/intrinsics/env.c
++++ b/src/libgfortran/intrinsics/env.c
+@@ -61,7 +61,11 @@
+   memcpy (name_nt, name, name_len);
+   name_nt[name_len] = '\0'; 
+ 
+-  res = getenv(name_nt);
++#ifndef __MINGW32CE__
++  res = getenv (name_nt);
++#else
++  res = NULL;
++#endif
+ 
+   /* If res is NULL, it means that the environment variable didn't 
+      exist, so just return.  */
+@@ -137,7 +141,11 @@
+   memcpy (name_nt, name, name_len);
+   name_nt[name_len] = '\0'; 
+   
+-  res = getenv(name_nt);
++#ifndef __MINGW32CE__
++  res = getenv (name_nt);
++#else
++  res = NULL;
++#endif
+ 
+   if (res == NULL)
+     stat = GFC_NAME_DOES_NOT_EXIST;
+--- a/src/libgfortran/intrinsics/gerror.c
++++ b/src/libgfortran/intrinsics/gerror.c
+@@ -25,7 +25,9 @@
+ 
+ #include "libgfortran.h"
+ 
++#if HAVE_ERRNO_H
+ #include <errno.h>
++#endif
+ #include <string.h>
+ 
+ 
+@@ -33,7 +35,6 @@
+    message corresponding to the last system error (C errno).
+    CHARACTER(len=*), INTENT(OUT) :: MESSAGE  */
+ 
+-#ifdef HAVE_STRERROR
+ void PREFIX(gerror) (char *, gfc_charlen_type);
+ export_proto_np(PREFIX(gerror));
+ 
+@@ -41,11 +42,11 @@
+ PREFIX(gerror) (char * msg, gfc_charlen_type msg_len)
+ {
+   int p_len;
+-  char *p;
++  const char *p;
+ 
+   memset (msg, ' ', msg_len); /* Blank the string.  */
+ 
+-  p = strerror (errno);
++  p = get_oserror ();
+   if (p == NULL)
+     return;
+ 
+@@ -55,4 +56,3 @@
+   else
+     memcpy (msg, p, p_len);
+ }
+-#endif
+--- a/src/libgfortran/intrinsics/getXid.c
++++ b/src/libgfortran/intrinsics/getXid.c
+@@ -30,7 +30,7 @@
+ 
+ #ifdef __MINGW32__
+ #define HAVE_GETPID 1
+-#include <process.h>
++#include <windows.h>
+ #endif
+ 
+ #ifdef HAVE_GETGID
+@@ -51,7 +51,11 @@
+ GFC_INTEGER_4
+ PREFIX(getpid) (void)
+ {
++#ifdef __MINGW32CE__
++  return (GFC_INTEGER_4) GetCurrentProcessId ();
++#else
+   return getpid ();
++#endif
+ }
+ #endif
+ 
+--- a/src/libgfortran/intrinsics/getcwd.c
++++ b/src/libgfortran/intrinsics/getcwd.c
+@@ -26,7 +26,9 @@
+ #include "libgfortran.h"
+ 
+ #include <string.h>
++#if HAVE_ERRNO_H
+ #include <errno.h>
++#endif
+ 
+ #ifdef HAVE_UNISTD_H
+ #include <unistd.h>
+--- a/src/libgfortran/intrinsics/getlog.c
++++ b/src/libgfortran/intrinsics/getlog.c
+@@ -36,9 +36,60 @@
+ 
+ /* Windows32 version */
+ #if defined __MINGW32__ && !defined  HAVE_GETLOGIN
+-#define WIN32_LEAN_AND_MEAN
+ #include <windows.h>
+-#include <lmcons.h>  /* for UNLEN */ 
++#include <lmcons.h>  /* for UNLEN */
++#include <malloc.h>
++
++#ifdef __MINGW32CE__
++
++/* GetUserNameExA is only available on CE >= 4.  Load it
++   dynamically.  */
++typedef enum
++{
++  NameUnknown = 0,
++  /* ... */
++  NameWindowsCeLocal = 0x80000001
++} EXTENDED_NAME_FORMAT;
++
++static BOOLEAN
++ce_GetUserNameA (LPSTR lpNameBuffer, PULONG nSize)
++{
++  static HMODULE dll = INVALID_HANDLE_VALUE;
++  static BOOLEAN (*pGetUserNameEx) (EXTENDED_NAME_FORMAT, LPTSTR, PULONG);
++
++  WCHAR *wbuf = alloca (*nSize * 2);
++
++  if (dll == INVALID_HANDLE_VALUE)
++    {
++      dll = GetModuleHandle (L"coredll.dll");
++      if (dll == NULL)
++	{
++	  /* paranoia */
++	  SetLastError (ERROR_NOT_SUPPORTED);
++	  return FALSE;
++	}
++
++      pGetUserNameEx = (void*) GetProcAddress (dll, L"GetUserNameExW");
++    }
++
++  if (pGetUserNameEx == NULL)
++    {
++      SetLastError (ERROR_NOT_SUPPORTED);
++      return FALSE;
++    }
++
++  *nSize *= 2;
++  if (!(*pGetUserNameEx) (NameWindowsCeLocal, wbuf, nSize))
++    return FALSE;
++
++  *nSize /= 2;
++  wcstombs (lpNameBuffer, wbuf, *nSize);
++  return TRUE;
++}
++
++#undef GetUserName
++#define GetUserName ce_GetUserNameA
++#endif
+ 
+ static char *
+ w32_getlogin (void)
+--- a/src/libgfortran/intrinsics/hostnm.c
++++ b/src/libgfortran/intrinsics/hostnm.c
+@@ -25,7 +25,9 @@
+ 
+ #include "libgfortran.h"
+ 
++#if HAVE_ERRNO_H
+ #include <errno.h>
++#endif
+ #include <string.h>
+ 
+ #ifdef HAVE_UNISTD_H
+@@ -37,8 +39,10 @@
+ #if defined __MINGW32__ && !defined  HAVE_GETHOSTNAME
+ #define WIN32_LEAN_AND_MEAN
+ #include <windows.h>
+-#include <errno.h>
+ 
++#ifndef __MINGW32CE__
++
++/* Windows (non-CE) version.  */
+ static int
+ w32_gethostname (char *name, size_t len)
+ {
+@@ -67,6 +71,55 @@
+   return 0;
+ }
+ 
++#else
++
++/* There's no GetComputerName on Windows CE, but, we can read the
++   computer name from the registry, at "HKLM\\Ident\\Name".  The
++   Internet claims this is what's WinSock's gethostname does too.  */
++
++static int
++w32_gethostname (char *name, size_t len)
++{
++  DWORD res;
++  HKEY hKey;
++
++/* XXX: Is this limit valid on CE?  */
++#ifndef MAX_COMPUTERNAME_LENGTH
++#define MAX_COMPUTERNAME_LENGTH 15
++#endif
++
++  res = RegOpenKeyEx (HKEY_LOCAL_MACHINE, L"Ident", 0, KEY_READ, &hKey);
++  if (res == ERROR_SUCCESS)
++    {
++      WCHAR buffer[MAX_COMPUTERNAME_LENGTH + 1];
++      DWORD type;
++      DWORD nbytes;
++
++      nbytes = sizeof (buffer);
++      res = RegQueryValueEx (hKey, L"Name", NULL, &type, (LPBYTE) buffer,
++			     &nbytes);
++      RegCloseKey (hKey);
++
++      if (res == ERROR_SUCCESS)
++	{
++	  if (((nbytes / 2) + 1) > len)
++	    {
++	      SetLastError (ERROR_INVALID_PARAMETER);
++	      /* Truncate as per POSIX spec.  We do not
++		 NUL-terminate. */
++	      nbytes = len * 2;
++	    }
++
++	  wcstombs (name, buffer, nbytes / 2);
++	  return 0;
++	}
++    }
++
++  return -1;
++}
++
++#endif
++
+ #undef gethostname
+ #define gethostname w32_gethostname
+ #define  HAVE_GETHOSTNAME 1
+@@ -101,7 +154,7 @@
+   }
+ 
+   if (status != NULL) 
+-    *status = (val == 0) ? 0 : errno;
++    *status = (val == 0) ? 0 : get_oserrno ();
+ }
+ iexport(hostnm_i4_sub);
+ 
+@@ -127,7 +180,7 @@
+   }
+ 
+   if (status != NULL) 
+-    *status = (val == 0) ? 0 : errno;
++    *status = (val == 0) ? 0 : get_oserrno ();
+ }
+ iexport(hostnm_i8_sub);
+ 
+--- a/src/libgfortran/intrinsics/ierrno.c
++++ b/src/libgfortran/intrinsics/ierrno.c
+@@ -25,9 +25,6 @@
+ 
+ #include "libgfortran.h"
+ 
+-#include <errno.h>
+-
+-
+ /* INTEGER FUNCTION IERRNO()  */
+ 
+ extern GFC_INTEGER_4 ierrno_i4 (void);
+@@ -36,7 +33,7 @@
+ GFC_INTEGER_4
+ ierrno_i4 (void)
+ {
+-  return (GFC_INTEGER_4) errno;
++  return get_oserrno ();
+ }
+ 
+ extern GFC_INTEGER_8 ierrno_i8 (void);
+@@ -45,5 +42,5 @@
+ GFC_INTEGER_8
+ ierrno_i8 (void)
+ {
+-  return (GFC_INTEGER_8) errno;
++  return (GFC_INTEGER_8) get_oserrno ();
+ }
+--- a/src/libgfortran/intrinsics/kill.c
++++ b/src/libgfortran/intrinsics/kill.c
+@@ -24,7 +24,9 @@
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #include "libgfortran.h"
++#if HAVE_ERRNO_H
+ #include <errno.h>
++#endif
+ 
+ #ifdef HAVE_SIGNAL_H
+ #include <signal.h>
+--- a/src/libgfortran/intrinsics/link.c
++++ b/src/libgfortran/intrinsics/link.c
+@@ -25,7 +25,9 @@
+ 
+ #include "libgfortran.h"
+ 
++#if HAVE_ERRNO_H
+ #include <errno.h>
++#endif
+ #include <string.h>
+ 
+ #ifdef HAVE_UNISTD_H
+--- a/src/libgfortran/intrinsics/perror.c
++++ b/src/libgfortran/intrinsics/perror.c
+@@ -25,9 +25,18 @@
+ 
+ #include "libgfortran.h"
+ 
++#if HAVE_ERRNO_H
+ #include <errno.h>
++#endif
+ #include <string.h>
+ 
++#ifdef __MINGW32CE__
++extern void pwinerror (const char *s);
++internal_proto(pwinerror);
++#define perror pwinerror
++#define HAVE_PERROR 1
++#endif
++
+ /* SUBROUTINE PERROR(STRING)
+    CHARACTER(len=*), INTENT(IN) :: STRING   */
+ 
+--- a/src/libgfortran/intrinsics/rename.c
++++ b/src/libgfortran/intrinsics/rename.c
+@@ -25,7 +25,9 @@
+ 
+ #include "libgfortran.h"
+ 
++#if HAVE_ERRNO_H
+ #include <errno.h>
++#endif
+ #include <string.h>
+ 
+ /* SUBROUTINE RENAME(PATH1, PATH2, STATUS)
+@@ -61,7 +63,7 @@
+   val = rename (str1, str2);
+ 
+   if (status != NULL) 
+-    *status = (val == 0) ? 0 : errno;
++    *status = (val == 0) ? 0 : get_oserrno ();
+ }
+ iexport(rename_i4_sub);
+ 
+@@ -94,7 +96,7 @@
+   val = rename (str1, str2);
+ 
+   if (status != NULL) 
+-    *status = (val == 0) ? 0 : errno;
++    *status = (val == 0) ? 0 : get_oserrno ();
+ }
+ iexport(rename_i8_sub);
+ 
+--- a/src/libgfortran/intrinsics/signal.c
++++ b/src/libgfortran/intrinsics/signal.c
+@@ -37,14 +37,32 @@
+ #include <inttypes.h>
+ #endif
+ 
++#if HAVE_ERRNO_H
+ #include <errno.h>
++#endif
++
++#ifdef __MINGW32CE__
++# include <windows.h>
++#endif
++
++static void
++not_supported (void)
++{
++#if defined __MINGW32CE__
++  SetLastError (ERROR_NOT_SUPPORTED);
++#else
++  errno = ENOSYS;
++#endif
++}
+ 
+ /* SIGNAL subroutine with PROCEDURE as handler  */
+ extern void signal_sub (int *, void (*)(int), int *);
+ iexport_proto(signal_sub);
+ 
+ void
+-signal_sub (int *number, void (*handler)(int), int *status)
++signal_sub (int *number __attribute__ ((unused)),
++	    void (*handler)(int) __attribute__ ((unused)),
++	    int *status)
+ {
+ #ifdef HAVE_SIGNAL
+   intptr_t ret;
+@@ -57,7 +75,7 @@
+   else
+     signal (*number, handler);
+ #else
+-  errno = ENOSYS;
++  not_supported ();
+   if (status != NULL)
+     *status = -1;
+ #endif
+@@ -70,7 +88,9 @@
+ iexport_proto(signal_sub_int);
+ 
+ void
+-signal_sub_int (int *number, int *handler, int *status)
++signal_sub_int (int *number __attribute__ ((unused)),
++		int *handler __attribute__ ((unused)),
++		int *status)
+ {
+ #ifdef HAVE_SIGNAL
+   intptr_t ptr = *handler, ret;
+@@ -83,7 +103,7 @@
+   else
+     signal (*number, (void (*)(int)) ptr);
+ #else
+-  errno = ENOSYS;
++  not_supported ();
+   if (status != NULL)
+     *status = -1;
+ #endif
+@@ -143,7 +163,7 @@
+       alarm (*seconds);
+     }
+ #else
+-  errno = ENOSYS;
++  not_supported ();
+   if (status != NULL)
+     *status = -1;
+ #endif
+@@ -173,7 +193,7 @@
+       alarm (*seconds);
+     }
+ #else
+-  errno = ENOSYS;
++  not_supported ();
+   if (status != NULL)
+     *status = -1;
+ #endif
+@@ -204,7 +224,7 @@
+       alarm (*seconds);
+     }
+ #else
+-  errno = ENOSYS;
++  not_supported ();
+   if (status != NULL)
+     *status = -1;
+ #endif
+@@ -234,7 +254,7 @@
+       alarm (*seconds);
+     }
+ #else
+-  errno = ENOSYS;
++  not_supported ();
+   if (status != NULL)
+     *status = -1;
+ #endif
+--- a/src/libgfortran/intrinsics/sleep.c
++++ b/src/libgfortran/intrinsics/sleep.c
+@@ -25,8 +25,6 @@
+ 
+ #include "libgfortran.h"
+ 
+-#include <errno.h>
+-
+ #ifdef HAVE_UNISTD_H
+ #include <unistd.h>
+ #endif
+--- a/src/libgfortran/intrinsics/stat.c
++++ b/src/libgfortran/intrinsics/stat.c
+@@ -26,7 +26,6 @@
+ #include "libgfortran.h"
+ 
+ #include <string.h>
+-#include <errno.h>
+ 
+ #ifdef HAVE_SYS_STAT_H
+ #include <sys/stat.h>
+@@ -141,7 +140,7 @@
+     }
+ 
+   if (status != NULL)
+-    *status = (val == 0) ? 0 : errno;
++    *status = (val == 0) ? 0 : get_oserrno ();
+ }
+ 
+ 
+@@ -260,7 +259,7 @@
+     }
+ 
+   if (status != NULL)
+-    *status = (val == 0) ? 0 : errno;
++    *status = (val == 0) ? 0 : get_oserrno ();
+ }
+ 
+ 
+@@ -439,7 +438,7 @@
+     }
+ 
+   if (status != NULL)
+-    *status = (val == 0) ? 0 : errno;
++    *status = (val == 0) ? 0 : get_oserrno ();
+ }
+ iexport(fstat_i4_sub);
+ 
+@@ -520,7 +519,7 @@
+     }
+ 
+   if (status != NULL)
+-    *status = (val == 0) ? 0 : errno;
++    *status = (val == 0) ? 0 : get_oserrno ();
+ }
+ iexport(fstat_i8_sub);
+ 
+--- a/src/libgfortran/intrinsics/symlnk.c
++++ b/src/libgfortran/intrinsics/symlnk.c
+@@ -25,7 +25,9 @@
+ 
+ #include "libgfortran.h"
+ 
++#if HAVE_ERRNO_H
+ #include <errno.h>
++#endif
+ #include <string.h>
+ 
+ #ifdef HAVE_UNISTD_H
+--- a/src/libgfortran/intrinsics/system.c
++++ b/src/libgfortran/intrinsics/system.c
+@@ -30,6 +30,10 @@
+ #include <stdlib.h>
+ #endif
+ 
++#ifdef __MINGW32CE__
++#include <windows.h>
++#endif
++
+ extern void system_sub (const char *fcmd, GFC_INTEGER_4 * status,
+ 			gfc_charlen_type cmd_len);
+ iexport_proto(system_sub);
+@@ -45,8 +49,14 @@
+ 
+   memcpy (cmd, fcmd, cmd_len);
+   cmd[cmd_len] = '\0';
+-
++#ifndef __MINGW32CE__
+   stat = system (cmd);
++#else
++  /* XXX: We could use ShellExecuteEx or
++     CreateProcess/WaitForSingleObject to implement this.  */
++  stat = -1;
++  SetLastError (ERROR_NOT_SUPPORTED);
++#endif
+   if (status)
+     *status = stat;
+ }
+--- a/src/libgfortran/intrinsics/umask.c
++++ b/src/libgfortran/intrinsics/umask.c
+@@ -38,6 +38,17 @@
+ #include <unistd.h>
+ #endif
+ 
++#ifdef __MINGW32CE__
++
++static mode_t
++ce_umask (mode_t m)
++{
++  /* XXX: Is there anything more sensible to do?  */
++  return 0 * m; /* avoid unused warning */
++}
++
++#define umask ce_umask
++#endif
+ 
+ /* SUBROUTINE UMASK(MASK, OLD)
+    INTEGER, INTENT(IN) :: MASK
+--- a/src/libgfortran/intrinsics/unlink.c
++++ b/src/libgfortran/intrinsics/unlink.c
+@@ -26,7 +26,6 @@
+ #include "libgfortran.h"
+ 
+ #include <string.h>
+-#include <errno.h>
+ 
+ #ifdef HAVE_UNISTD_H
+ #include <unistd.h>
+@@ -58,7 +57,7 @@
+   stat = unlink (str);
+ 
+   if (status != NULL)
+-    *status = (stat == 0) ? stat : errno;
++    *status = (stat == 0) ? stat : get_oserrno ();
+ }
+ iexport(unlink_i4_sub);
+ 
+--- a/src/libgfortran/io/open.c
++++ b/src/libgfortran/io/open.c
+@@ -27,8 +27,13 @@
+ #include "io.h"
+ #include <unistd.h>
+ #include <string.h>
++#ifdef HAVE_ERRNO_H
+ #include <errno.h>
++#endif
+ 
++#ifdef __MINGW32CE__
++#include <windows.h>
++#endif
+ 
+ static const st_option access_opt[] = {
+   {"sequential", ACCESS_SEQUENTIAL},
+@@ -505,9 +510,28 @@
+       msg = (char *) gfc_alloca (opp->file_len + 51);
+       unpack_filename (path, opp->file, opp->file_len);
+ 
++#ifdef _WIN32_WCE
++      switch (GetLastError ())
++	{
++	case ERROR_FILE_NOT_FOUND:
++	  sprintf (msg, "File '%s' does not exist", path);
++	  break;
++
++	case ERROR_FILE_EXISTS:
++	  sprintf (msg, "File '%s' already exists", path);
++	  break;
++
++	case ERROR_ACCESS_DENIED:
++	  sprintf (msg, "Permission denied trying to open file '%s'", path);
++	  break;
++
++	default:
++	  msg = NULL;
++	}
++#else
+       switch (errno)
+ 	{
+-	case ENOENT: 
++	case ENOENT:
+ 	  sprintf (msg, "File '%s' does not exist", path);
+ 	  break;
+ 
+@@ -526,6 +550,7 @@
+ 	default:
+ 	  msg = NULL;
+ 	}
++#endif
+ 
+       generate_error (&opp->common, LIBERROR_OS, msg);
+       goto cleanup;
+--- a/src/libgfortran/io/read.c
++++ b/src/libgfortran/io/read.c
+@@ -25,11 +25,17 @@
+ 
+ #include "io.h"
+ #include <string.h>
+-#include <errno.h>
++#ifdef HAVE_ERRNO_H
++# include <errno.h>
++#endif
+ #include <ctype.h>
+ #include <stdlib.h>
+ #include <assert.h>
+ 
++#ifdef __MINGW32CE__
++# include <windows.h>
++#endif
++
+ typedef unsigned char uchar;
+ 
+ /* read.c -- Deal with formatted reads */
+@@ -134,7 +140,11 @@
+ int
+ convert_real (st_parameter_dt *dtp, void *dest, const char *buffer, int length)
+ {
++#ifdef __MINGW32CE__
++  SetLastError (0);
++#else
+   errno = 0;
++#endif
+ 
+   switch (length)
+     {
+@@ -167,7 +177,13 @@
+       internal_error (&dtp->common, "Unsupported real kind during IO");
+     }
+ 
++#ifndef __MINGW32CE__
+   if (errno == EINVAL)
++#else
++    /* TESTME: It is not clear if CE ever sets a last error at
++       all.  */
++  if (GetLastError () == ERROR_INVALID_PARAMETER)
++#endif
+     {
+       generate_error (&dtp->common, LIBERROR_READ_VALUE,
+ 		      "Error during floating point read");
+--- a/src/libgfortran/io/transfer.c
++++ b/src/libgfortran/io/transfer.c
+@@ -32,8 +32,6 @@
+ #include <string.h>
+ #include <assert.h>
+ #include <stdlib.h>
+-#include <errno.h>
+-
+ 
+ /* Calling conventions:  Data transfer statements are unlike other
+    library calls in that they extend over several calls.
+@@ -2752,11 +2750,11 @@
+ 	{
+ 	  do
+ 	    {
+-              errno = 0;
++	      clear_oserrno ();
+               cc = fbuf_getc (dtp->u.p.current_unit);
+ 	      if (cc == EOF) 
+ 		{
+-                  if (errno != 0)
++		  if (get_oserrno () != 0)
+                     generate_error (&dtp->common, LIBERROR_OS, NULL);
+ 		  else
+ 		    {
+--- a/src/libgfortran/io/unix.c
++++ b/src/libgfortran/io/unix.c
+@@ -36,8 +36,10 @@
+ #include <assert.h>
+ 
+ #include <string.h>
+-#include <errno.h>
+ 
++#if HAVE_ERRNO_H
++#include <errno.h>
++#endif
+ 
+ /* For mingw, we don't identify files by their inode number, but by a
+    64-bit identifier created from a BY_HANDLE_FILE_INFORMATION. */
+@@ -68,13 +70,23 @@
+ {
+   HANDLE hFile;
+   uint64_t res;
++#ifdef __MINGW32CE__
++  WCHAR wpath[MAX_PATH];
++#endif
+ 
+   if (!path || !*path || access (path, F_OK))
+     return (uint64_t) -1;
+ 
+-  hFile = CreateFile (path, 0, 0, NULL, OPEN_EXISTING,
+-		      FILE_FLAG_BACKUP_SEMANTICS | FILE_ATTRIBUTE_READONLY,
+-		      NULL);
++#ifdef __MINGW32CE__
++  MultiByteToWideChar (CP_ACP, 0, path, -1, wpath, MAX_PATH);
++  hFile = CreateFileW (wpath,
++#else
++  hFile = CreateFileA (path,
++#endif
++		       0, 0, NULL, OPEN_EXISTING,
++		       FILE_FLAG_BACKUP_SEMANTICS | FILE_ATTRIBUTE_READONLY,
++		       NULL);
++
+   res = id_from_handle (hFile);
+   CloseHandle (hFile);
+   return res;
+@@ -84,7 +96,11 @@
+ static uint64_t
+ id_from_fd (const int fd)
+ {
++#ifdef __MINGW32CE__
++  return id_from_handle ((HANDLE) fd);
++#else
+   return id_from_handle ((HANDLE) _get_osfhandle (fd));
++#endif
+ }
+ 
+ #endif
+@@ -190,6 +206,14 @@
+   return fd;
+ }
+ 
++/* On Windows CE, file descriptors are actually pointers.  For the
++   most part, we pretend they're integers (sizeof(void*) == sizeof
++   (int), and INVALID_FILE_HANDLE is (void*)-1.  These hide a bit the
++   fact, avoiding integer/pointer comparison warnings.  */
++
++#define GFC_STDOUT_FILENO ((int) STDOUT_FILENO)
++#define GFC_STDERR_FILENO ((int) STDERR_FILENO)
++#define GFC_STDIN_FILENO ((int) STDIN_FILENO)
+ 
+ /* If the stream corresponds to a preconnected unit, we flush the
+    corresponding C stream.  This is bugware for mixed C-Fortran codes
+@@ -200,22 +224,127 @@
+   int fd;
+ 
+   fd = ((unix_stream *) s)->fd;
+-  if (fd == STDIN_FILENO)
++  if (fd == GFC_STDIN_FILENO)
+     fflush (stdin);
+-  else if (fd == STDOUT_FILENO)
++  else if (fd == GFC_STDOUT_FILENO)
+     fflush (stdout);
+-  else if (fd == STDERR_FILENO)
++  else if (fd == GFC_STDERR_FILENO)
+     fflush (stderr);
+ }
+ 
++#ifdef _WIN32
++
++#include <stdio.h>
++#include <windows.h>
++
++#ifndef COUNTOF
++#define COUNTOF(ARRAY) (sizeof (ARRAY) / sizeof ((ARRAY)[0]))
++#endif
++
++/* Map the Windows error number in ERROR to a locale-dependent error
++   message string and return a pointer to it.  Typically, the values
++   for ERROR come from GetLastError.
++
++   The string pointed to shall not be modified by the application, but
++   may be overwritten by a subsequent call to strwinerror
++
++   The strwinerror function does not change the current setting of
++   GetLastError.  */
++
++static char *
++strwinerror (DWORD error)
++{
++  static char buf[1024];
++  TCHAR *msgbuf;
++  DWORD lasterr = GetLastError ();
++  DWORD chars = FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM
++			       | FORMAT_MESSAGE_ALLOCATE_BUFFER,
++			       NULL,
++			       error,
++			       0, /* Default language */
++			       (LPVOID)&msgbuf,
++			       0,
++			       NULL);
++  if (chars != 0)
++    {
++      /* If there is an \r\n appended, zap it.  */
++      if (chars >= 2
++	  && msgbuf[chars - 2] == '\r'
++	  && msgbuf[chars - 1] == '\n')
++	{
++	  chars -= 2;
++	  msgbuf[chars] = 0;
++	}
++
++      if (chars > ((COUNTOF (buf)) - 1))
++	{
++	  chars = COUNTOF (buf) - 1;
++	  msgbuf [chars] = 0;
++	}
++
++#ifdef UNICODE
++      wcstombs (buf, msgbuf, chars + 1);
++#else
++      strncpy (buf, msgbuf, chars + 1);
++#endif
++      LocalFree (msgbuf);
++    }
++  else
++    sprintf (buf, "unknown win32 error (%ld)", error);
++
++  SetLastError (lasterr);
++  return buf;
++}
++
++extern void pwinerror (const char *s);
++internal_proto(pwinerror);
++
++void
++pwinerror (const char *s)
++{
++  if (s && *s)
++    fprintf (stderr, "%s: %s\n", s, strwinerror (GetLastError ()));
++  else
++    fprintf (stderr, "%s\n", strwinerror (GetLastError ()));
++}
++
++#endif
+ 
+ /* get_oserror()-- Get the most recent operating system error.  For
+- * unix, this is errno. */
++ * unix, this is errno; for Windows CE, this is GetLastError.  */
+ 
+ const char *
+ get_oserror (void)
+ {
++#ifdef __MINGW32CE__
++  return strwinerror (GetLastError ());
++#else
+   return strerror (errno);
++#endif
++}
++
++/* get_oserrno()-- Get the most recent operating system error.  For
++ * unix and Windows, this is errno; for Windows CE, this is
++ * GetLastError.  */
++
++GFC_INTEGER_4
++get_oserrno (void)
++{
++#ifdef __MINGW32CE__
++  return (GFC_INTEGER_4) GetLastError ();
++#else
++  return errno;
++#endif
++}
++
++void
++clear_oserrno (void)
++{
++#ifdef __MINGW32CE__
++  SetLastError (0);
++#else
++  errno = 0;
++#endif
+ }
+ 
+ 
+@@ -261,10 +390,11 @@
+       trans = write (s->fd, buf_st, bytes_left);
+       if (trans < 0)
+ 	{
++#ifdef EINTR
+ 	  if (errno == EINTR)
+ 	    continue;
+-	  else
+-	    return trans;
++#endif
++	  return trans;
+ 	}
+       buf_st += trans;
+       bytes_left -= trans;
+@@ -303,9 +433,9 @@
+ {
+   int retval;
+   
+-  if (s->fd != STDOUT_FILENO
+-      && s->fd != STDERR_FILENO
+-      && s->fd != STDIN_FILENO)
++  if (s->fd != GFC_STDOUT_FILENO
++      && s->fd != GFC_STDERR_FILENO
++      && s->fd != GFC_STDIN_FILENO)
+     retval = close (s->fd);
+   else
+     retval = 0;
+@@ -491,7 +621,11 @@
+     }
+   if (offset < 0)
+     {
++#ifdef __MINGW32CE__
++      SetLastError (ERROR_INVALID_PARAMETER);
++#else
+       errno = EINVAL;
++#endif
+       return -1;
+     }
+   s->logical_offset = offset;
+@@ -656,7 +790,11 @@
+      negative offset, so don't check for that.  */
+   if (offset > s->file_length)
+     {
++#ifdef __MINGW32CE__
++      SetLastError (ERROR_INVALID_PARAMETER);
++#else
+       errno = EINVAL;
++#endif
+       return -1;
+     }
+ 
+@@ -751,6 +889,9 @@
+ static stream *
+ fd_to_stream (int fd, int prot)
+ {
++#ifdef __MINGW32CE__
++  BY_HANDLE_FILE_INFORMATION fi;
++#endif
+   struct stat statbuf;
+   unix_stream *s;
+ 
+@@ -765,7 +906,28 @@
+ 
+   /* Get the current length of the file. */
+ 
++#ifdef __MINGW32CE__
++  /* mingw32ce's implementation of fstat is currently incorrect.  */
++  statbuf.st_mode = 0;
++  statbuf.st_size = -1;
++  if (fd == GFC_STDIN_FILENO || fd == GFC_STDOUT_FILENO
++      || fd == GFC_STDERR_FILENO)
++    statbuf.st_mode = S_IFCHR;
++  else
++      if (GetFileInformationByHandle ((HANDLE) fd, &fi))
++	{
++	  if (fi.dwFileAttributes & FILE_ATTRIBUTE_DEVICE)
++	    statbuf.st_mode = S_IFCHR;
++	  else
++	    if (fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
++	      statbuf.st_mode = S_IFDIR;
++	    else
++	      statbuf.st_mode = S_IFREG;
++	  statbuf.st_size = fi.nFileSizeLow;
++	}
++#else
+   fstat (fd, &statbuf);
++#endif
+ 
+   if (lseek (fd, 0, SEEK_CUR) == (off_t) -1)
+     s->file_length = -1;
+@@ -774,14 +936,25 @@
+ 
+   s->special_file = !S_ISREG (statbuf.st_mode);
+ 
++#ifdef __MINGW32CE__
++  if (options.all_unbuffered
++      ||(options.unbuffered_preconnected &&
++         (s->fd == GFC_STDIN_FILENO
++          || s->fd == GFC_STDOUT_FILENO
++          || s->fd == GFC_STDERR_FILENO)))
++    raw_init (s);
++  else
++    buf_init (s);
++#else
+   if (isatty (s->fd) || options.all_unbuffered
+       ||(options.unbuffered_preconnected && 
+-         (s->fd == STDIN_FILENO 
+-          || s->fd == STDOUT_FILENO 
+-          || s->fd == STDERR_FILENO)))
++         (s->fd == GFC_STDIN_FILENO
++          || s->fd == GFC_STDOUT_FILENO
++          || s->fd == GFC_STDERR_FILENO)))
+     raw_init (s);
+   else
+     buf_init (s);
++#endif
+ 
+   return (stream *) s;
+ }
+@@ -822,6 +995,55 @@
+   return 0;
+ }
+ 
++#ifdef __MINGW32CE__
++
++static char *
++ce_mktemp (char *temp)
++{
++  char *string = temp;
++  unsigned number;
++  int letter = 'a';
++  int xcount = 0;
++  DWORD old_lasterror;
++
++  number = GetCurrentProcessId ();
++
++  while (*string != '\0')
++    string++;
++
++  while (*--string == 'X')
++    {
++      xcount++;
++      *string = (char) ((number % 10) + '0');
++      number /= 10;
++    }
++
++  /* FIXME: process ids on CE are really handles/pointers, so 6 digits
++     isn't enough.  Write hex over the XXXXXX instead?  */
++  if (*++string == '\0' || xcount != 6)
++    return NULL;
++
++  old_lasterror = GetLastError ();
++  SetLastError (0);
++
++  while (access (temp, F_OK) == 0)
++    {
++      if (letter == 'z' + 1)
++	{
++	  temp = NULL;
++	  break;
++	}
++
++      SetLastError (0);
++      *string = (char) letter++;
++    }
++
++  SetLastError (old_lasterror);
++  return temp;
++}
++
++#define mktemp ce_mktemp
++#endif
+ 
+ /* tempfile()-- Generate a temporary filename for a scratch file and
+  * open it.  mkstemp() opens the file for reading and writing, but the
+@@ -833,15 +1055,17 @@
+ static int
+ tempfile (st_parameter_open *opp)
+ {
+-  const char *tempdir;
++  const char *tempdir = NULL;
+   char *template;
+   int fd;
+ 
++#ifndef __MINGW32CE__
+   tempdir = getenv ("GFORTRAN_TMPDIR");
+   if (tempdir == NULL)
+     tempdir = getenv ("TMP");
+   if (tempdir == NULL)
+     tempdir = getenv ("TEMP");
++#endif
+   if (tempdir == NULL)
+     tempdir = DEFAULT_TEMPDIR;
+ 
+@@ -855,6 +1079,14 @@
+ 
+ #else /* HAVE_MKSTEMP */
+ 
++#ifndef __MINGW32CE__
++# define error_file_exists (errno == EEXIST)
++#else
++# define error_file_exists			\
++  (GetLastError () == ERROR_FILE_EXISTS		\
++   || GetLastError () == ERROR_ALREADY_EXISTS)
++#endif
++
+   if (mktemp (template))
+     do
+ #if defined(HAVE_CRLF) && defined(O_BINARY)
+@@ -863,13 +1095,14 @@
+ #else
+       fd = open (template, O_RDWR | O_CREAT | O_EXCL, S_IREAD | S_IWRITE);
+ #endif
+-    while (!(fd == -1 && errno == EEXIST) && mktemp (template));
++    while (!(fd == -1 && error_file_exists) && mktemp (template));
+   else
+     fd = -1;
+ 
+ #endif /* HAVE_MKSTEMP */
+ 
+-  if (fd < 0)
++  /* Values < -1 are forbidden by POSIX but indicate success on Windows CE.  */
++  if (fd == -1)
+     free_mem (template);
+   else
+     {
+@@ -897,7 +1130,12 @@
+ 
+   if (unpack_filename (path, opp->file, opp->file_len))
+     {
+-      errno = ENOENT;		/* Fake an OS error */
++      /* Fake an OS error */
++#ifndef __MINGW32CE__
++      errno = ENOENT;
++#else
++      SetLastError (ERROR_FILE_NOT_FOUND);
++#endif
+       return -1;
+     }
+ 
+@@ -956,30 +1194,58 @@
+   if (flags->action != ACTION_UNSPECIFIED)
+     return fd;
+ 
+-  if (fd >= 0)
++  /* Values < -1 are forbidden by POSIX but indicate success on Windows CE.  */
++  if (fd != -1)
+     {
+       flags->action = ACTION_READWRITE;
+       return fd;
+     }
++#ifndef __MINGW32CE__
+   if (errno != EACCES && errno != EROFS)
+-     return fd;
++    return fd;
++#else
++  switch (GetLastError ())
++    {
++    case ERROR_WRITE_PROTECT:
++    case ERROR_ACCESS_DENIED:
++    case ERROR_LOCK_VIOLATION:
++    case ERROR_SHARING_VIOLATION:
++      break;
++    default:
++      return fd;
++    }
++#endif
+ 
+   /* retry for read-only access */
+   rwflag = O_RDONLY;
+   fd = open (path, rwflag | crflag, mode);
+-  if (fd >=0)
++  /* Values < -1 are forbidden by POSIX but indicate success on Windows CE.  */
++  if (fd != -1)
+     {
+       flags->action = ACTION_READ;
+       return fd;		/* success */
+     }
+   
++#ifndef __MINGW32CE__
+   if (errno != EACCES)
+     return fd;			/* failure */
++#else
++  switch (GetLastError ())
++    {
++    case ERROR_ACCESS_DENIED:
++    case ERROR_LOCK_VIOLATION:
++    case ERROR_SHARING_VIOLATION:
++      break;
++    default:
++      return fd;	        /* failure */
++    }
++#endif
+ 
+   /* retry for write-only access */
+   rwflag = O_WRONLY;
+   fd = open (path, rwflag | crflag, mode);
+-  if (fd >=0)
++  /* Values < -1 are forbidden by POSIX but indicate success on Windows CE.  */
++  if (fd != -1)
+     {
+       flags->action = ACTION_WRITE;
+       return fd;		/* success */
+@@ -1005,7 +1271,9 @@
+ 
+ #if HAVE_UNLINK_OPEN_FILE
+       /* We can unlink scratch files now and it will go away when closed. */
+-      if (fd >= 0)
++      /* Values < -1 are forbidden by POSIX but indicate success on Windows
++	 CE.  */
++      if (fd != -1)
+ 	unlink (opp->file);
+ #endif
+     }
+@@ -1016,7 +1284,7 @@
+       fd = regular_file (opp, flags);
+     }
+ 
+-  if (fd < 0)
++  /* Values < -1 are forbidden by POSIX but indicate success on Windows CE.  */  if (fd == -1)
+     return NULL;
+   fd = fix_fd (fd);
+ 
+@@ -1048,9 +1316,17 @@
+ stream *
+ input_stream (void)
+ {
+-  return fd_to_stream (STDIN_FILENO, PROT_READ);
++  return fd_to_stream (GFC_STDIN_FILENO, PROT_READ);
+ }
+ 
++#ifdef __MINGW32CE__
++/* libcoredll.a exports this, and MSDN claims it exists on CE, but,
++   the mingw32ce headers don't export it.  We should fix the headers.
++   Meanwhile, this is easier.  */
++# define setmode _setmode
++int _setmode (int, int);
++#define HAVE_SETMODE 1
++#endif
+ 
+ /* output_stream()-- Return a stream pointer to the default output stream.
+  * Called on initialization. */
+@@ -1061,10 +1337,10 @@
+   stream * s;
+ 
+ #if defined(HAVE_CRLF) && defined(HAVE_SETMODE)
+-  setmode (STDOUT_FILENO, O_BINARY);
++  setmode (GFC_STDOUT_FILENO, O_BINARY);
+ #endif
+ 
+-  s = fd_to_stream (STDOUT_FILENO, PROT_WRITE);
++  s = fd_to_stream (GFC_STDOUT_FILENO, PROT_WRITE);
+   return s;
+ }
+ 
+@@ -1078,10 +1354,10 @@
+   stream * s;
+ 
+ #if defined(HAVE_CRLF) && defined(HAVE_SETMODE)
+-  setmode (STDERR_FILENO, O_BINARY);
++  setmode (GFC_STDERR_FILENO, O_BINARY);
+ #endif
+ 
+-  s = fd_to_stream (STDERR_FILENO, PROT_WRITE);
++  s = fd_to_stream (GFC_STDERR_FILENO, PROT_WRITE);
+   return s;
+ }
+ 
+@@ -1102,7 +1378,7 @@
+   int written;
+   int fd;
+ 
+-  fd = options.use_stderr ? STDERR_FILENO : STDOUT_FILENO;
++  fd = options.use_stderr ? GFC_STDERR_FILENO : GFC_STDOUT_FILENO;
+ #ifdef HAVE_VSNPRINTF
+   written = vsnprintf(buffer, ST_VPRINTF_SIZE, format, ap);
+ #else
+@@ -1369,7 +1645,11 @@
+ 
+   if (unpack_filename (path, u->file, u->file_len))
+     {				/* Shouldn't be possible */
++#ifndef __MINGW32CE__
+       errno = ENOENT;
++#else
++      SetLastError (ERROR_FILE_NOT_FOUND);
++#endif
+       return 1;
+     }
+ 
+@@ -1515,10 +1795,11 @@
+ static int
+ fallback_access (const char *path, int mode)
+ {
+-  if ((mode & R_OK) && open (path, O_RDONLY) < 0)
++  /* Values < -1 are forbidden by POSIX but indicate success on Windows CE.  */
++  if ((mode & R_OK) && open (path, O_RDONLY) == -1)
+     return -1;
+ 
+-  if ((mode & W_OK) && open (path, O_WRONLY) < 0)
++  if ((mode & W_OK) && open (path, O_WRONLY) == -1)
+     return -1;
+ 
+   return 0;
+@@ -1616,7 +1897,13 @@
+ int
+ stream_isatty (stream *s)
+ {
++#ifdef __MINGW32CE__
++  return (((unix_stream *) s)->fd == GFC_STDIN_FILENO
++	  || ((unix_stream *) s)->fd == GFC_STDOUT_FILENO
++	  || ((unix_stream *) s)->fd == GFC_STDERR_FILENO);
++#else
+   return isatty (((unix_stream *) s)->fd);
++#endif
+ }
+ 
+ char *
+--- a/src/libgfortran/io/write.c
++++ b/src/libgfortran/io/write.c
+@@ -31,7 +31,9 @@
+ #include <ctype.h>
+ #include <stdlib.h>
+ #include <stdbool.h>
++#if HAVE_ERRNO_H
+ #include <errno.h>
++#endif
+ #define star_fill(p, n) memset(p, '*', n)
+ 
+ #include "write_float.def"
+@@ -325,7 +327,7 @@
+ 		}
+ 
+ 	      /* Write out the CR_LF sequence.  */ 
+-	      write_default_char4 (dtp, crlf, 2, 0);
++	      write_default_char4 (dtp, (gfc_char4_t *) crlf, 2, 0);
+ 	    }
+ 	  else
+ 	    bytes++;
+--- a/src/libgfortran/io/write_float.def
++++ b/src/libgfortran/io/write_float.def
+@@ -752,6 +752,11 @@
+ 
+ #endif
+ 
++#if defined (__MINGW32CE__) && !defined (signbit)
++/* Should use __builtin_signbit on all targets? */
++# define signbit(x) __builtin_signbit (x)
++#endif
++
+ #define WRITE_FLOAT(x,y)\
+ {\
+ 	GFC_REAL_ ## x tmp;\
+--- a/src/libgfortran/libgfortran.h
++++ b/src/libgfortran/libgfortran.h
+@@ -659,6 +659,12 @@
+ extern const char *get_oserror (void);
+ internal_proto(get_oserror);
+ 
++extern GFC_INTEGER_4 get_oserrno (void);
++internal_proto(get_oserrno);
++
++extern void clear_oserrno (void);
++internal_proto(clear_oserrno);
++
+ extern const char *translate_error (int);
+ internal_proto(translate_error);
+ 
+--- a/src/libgfortran/runtime/environ.c
++++ b/src/libgfortran/runtime/environ.c
+@@ -41,6 +41,15 @@
+ 
+ options_t options;
+ 
++#ifdef __MINGW32CE__
++/* No environ on CE.  Force all defaults.  */
++static char *
++ce_getenv (const char *name __attribute ((unused)))
++{
++  return NULL;
++}
++#define getenv ce_getenv
++#endif
+ 
+ typedef struct variable
+ {
+--- a/src/libgfortran/runtime/error.c
++++ b/src/libgfortran/runtime/error.c
+@@ -27,7 +27,6 @@
+ #include "libgfortran.h"
+ #include <assert.h>
+ #include <string.h>
+-#include <errno.h>
+ 
+ #ifdef HAVE_SIGNAL_H
+ #include <signal.h>
+@@ -398,7 +397,7 @@
+ 
+   /* Set the error status.  */
+   if ((cmp->flags & IOPARM_HAS_IOSTAT))
+-    *cmp->iostat = (family == LIBERROR_OS) ? errno : family;
++    *cmp->iostat = (family == LIBERROR_OS) ? get_oserrno () : family;
+ 
+   if (message == NULL)
+     message =
+--- a/src/libgfortran/runtime/main.c
++++ b/src/libgfortran/runtime/main.c
+@@ -104,7 +104,8 @@
+ #define DIR_SEPARATOR '/'
+ #endif
+ 
+-  char buf[PATH_MAX], *cwd, *path;
++  char buf[PATH_MAX], *path;
++  const char *cwd;
+ 
+   /* On the simulator argv is not set.  */
+   if (argv0 == NULL || argv0[0] == '/')
+--- a/src/libgomp/Makefile.am
++++ b/src/libgomp/Makefile.am
+@@ -1,5 +1,10 @@
+ ## Process this file with automake to produce Makefile.in
+ 
++datarootdir = @datarootdir@
++docdir = @docdir@
++htmldir = @htmldir@
++pdfdir = @pdfdir@
++
+ ACLOCAL_AMFLAGS = -I .. -I ../config
+ SUBDIRS = testsuite
+ 
+@@ -41,6 +46,12 @@
+ nodist_finclude_HEADERS = omp_lib.h omp_lib.f90 omp_lib.mod omp_lib_kinds.mod
+ endif
+ 
++LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
++
++LINK = $(LIBTOOL) --tag CC --mode=link $(CCLD) $(AM_CCFLAGS) $(CFLAGS) \
++	$(AM_LDFLAGS) $(LTLDFLAGS) -o $@
++
++
+ omp_lib_kinds.mod: omp_lib.mod
+ 	:
+ omp_lib.mod: omp_lib.f90
+@@ -50,10 +61,30 @@
+ env.lo: libgomp_f.h
+ env.o: libgomp_f.h
+ 
++HTMLS_INSTALL=libgomp
++HTMLS_BUILD=libgomp/index.html
+ 
+-# No install-html or install-pdf support in automake yet
+-.PHONY: install-html install-pdf
+-install-html:
++$(HTMLS_BUILD): $(info_TEXINFOS)
++	$(TEXI2HTML) $(MAKEINFOFLAGS) -I$(srcdir) -o $(@D) $<
++
++html__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
++
++install-html: $(HTMLS_BUILD)
++	@$(NORMAL_INSTALL)
++	test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)"
++	@list='$(HTMLS_INSTALL)'; for p in $$list; do \
++	  if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \
++	  f=$(html__strip_dir) \
++	  if test -d "$$d$$p"; then \
++	    echo " $(mkinstalldirs) '$(DESTDIR)$(htmldir)/$$f'"; \
++	    $(mkinstalldirs) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
++	    echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
++	    $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
++	  else \
++	    echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
++	    $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
++	  fi; \
++	done
+ 
+ install-pdf: $(PDFS)
+ 	@$(NORMAL_INSTALL)
+@@ -71,6 +102,7 @@
+ # `texinfo.tex' for your package. The value of this variable should be
+ # the relative path from the current `Makefile.am' to `texinfo.tex'.
+ TEXINFO_TEX   = ../gcc/doc/include/texinfo.tex
++TEXI2HTML = $(MAKEINFO) --html
+ 
+ # Defines info, dvi, pdf and html targets
+ MAKEINFOFLAGS = -I $(srcdir)/../gcc/doc/include
+--- a/src/libgomp/Makefile.in
++++ b/src/libgomp/Makefile.in
+@@ -97,8 +97,6 @@
+ 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ 	$(AM_CFLAGS) $(CFLAGS)
+ CCLD = $(CC)
+-LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+-	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+ SOURCES = $(libgomp_la_SOURCES)
+ MULTISRCTOP = 
+ MULTIBUILDTOP = 
+@@ -247,6 +245,8 @@
+ build_vendor = @build_vendor@
+ config_path = @config_path@
+ datadir = @datadir@
++datarootdir = @datarootdir@
++docdir = @docdir@
+ enable_shared = @enable_shared@
+ enable_static = @enable_static@
+ exec_prefix = @exec_prefix@
+@@ -255,6 +255,7 @@
+ host_cpu = @host_cpu@
+ host_os = @host_os@
+ host_vendor = @host_vendor@
++htmldir = @htmldir@
+ includedir = @includedir@
+ infodir = @infodir@
+ install_sh = @install_sh@
+@@ -268,6 +269,7 @@
+ mkdir_p = @mkdir_p@
+ multi_basedir = @multi_basedir@
+ oldincludedir = @oldincludedir@
++pdfdir = @pdfdir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+@@ -305,6 +307,13 @@
+ nodist_noinst_HEADERS = libgomp_f.h
+ nodist_libsubinclude_HEADERS = omp.h
+ @USE_FORTRAN_TRUE@nodist_finclude_HEADERS = omp_lib.h omp_lib.f90 omp_lib.mod omp_lib_kinds.mod
++LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
++LINK = $(LIBTOOL) --tag CC --mode=link $(CCLD) $(AM_CCFLAGS) $(CFLAGS) \
++	$(AM_LDFLAGS) $(LTLDFLAGS) -o $@
++
++HTMLS_INSTALL = libgomp
++HTMLS_BUILD = libgomp/index.html
++html__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+ 
+ # Automake Documentation:
+ # If your package has Texinfo files in many directories, you can use the
+@@ -312,6 +321,7 @@
+ # `texinfo.tex' for your package. The value of this variable should be
+ # the relative path from the current `Makefile.am' to `texinfo.tex'.
+ TEXINFO_TEX = ../gcc/doc/include/texinfo.tex
++TEXI2HTML = $(MAKEINFO) --html
+ 
+ # Defines info, dvi, pdf and html targets
+ MAKEINFOFLAGS = -I $(srcdir)/../gcc/doc/include
+@@ -924,9 +934,25 @@
+ env.lo: libgomp_f.h
+ env.o: libgomp_f.h
+ 
+-# No install-html or install-pdf support in automake yet
+-.PHONY: install-html install-pdf
+-install-html:
++$(HTMLS_BUILD): $(info_TEXINFOS)
++	$(TEXI2HTML) $(MAKEINFOFLAGS) -I$(srcdir) -o $(@D) $<
++
++install-html: $(HTMLS_BUILD)
++	@$(NORMAL_INSTALL)
++	test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)"
++	@list='$(HTMLS_INSTALL)'; for p in $$list; do \
++	  if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \
++	  f=$(html__strip_dir) \
++	  if test -d "$$d$$p"; then \
++	    echo " $(mkinstalldirs) '$(DESTDIR)$(htmldir)/$$f'"; \
++	    $(mkinstalldirs) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
++	    echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
++	    $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
++	  else \
++	    echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
++	    $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
++	  fi; \
++	done
+ 
+ install-pdf: $(PDFS)
+ 	@$(NORMAL_INSTALL)
+--- a/src/libgomp/configure
++++ b/src/libgomp/configure
+@@ -457,7 +457,7 @@
+ # include <unistd.h>
+ #endif"
+ 
+-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS GENINSRC_TRUE GENINSRC_FALSE build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar multi_basedir toolexecdir toolexeclibdir CC ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CFLAGS AR ac_ct_AR RANLIB ac_ct_RANLIB PERL BUILD_INFO_TRUE BUILD_INFO_FALSE LIBTOOL SED EGREP FGREP GREP LD DUMPBIN ac_ct_DUMPBIN NM LN_S OBJDUMP ac_ct_OBJDUMP lt_ECHO DSYMUTIL ac_ct_DSYMUTIL NMEDIT ac_ct_NMEDIT LIPO ac_ct_LIPO OTOOL ac_ct_OTOOL OTOOL64 ac_ct_OTOOL64 CPP CPPFLAGS enable_shared enable_static MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT FC FCFLAGS LDFLAGS ac_ct_FC libtool_VERSION SECTION_LDFLAGS OPT_LDFLAGS LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE LIBGOMP_BUILD_VERSIONED_SHLIB_FALSE config_path XCFLAGS XLDFLAGS link_gomp USE_FORTRAN_TRUE USE_FORTRAN_FALSE OMP_LOCK_SIZE OMP_LOCK_ALIGN OMP_NEST_LOCK_SIZE OMP_NEST_LOCK_ALIGN OMP_LOCK_KIND OMP_NEST_LOCK_KIND OMP_LOCK_25_SIZE OMP_LOCK_25_ALIGN OMP_NEST_LOCK_25_SIZE OMP_NEST_LOCK_25_ALIGN OMP_LOCK_25_KIND OMP_NEST_LOCK_25_KIND LIBOBJS LTLIBOBJS'
++ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS GENINSRC_TRUE GENINSRC_FALSE build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar multi_basedir toolexecdir toolexeclibdir datarootdir docdir pdfdir htmldir CC ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CFLAGS AR ac_ct_AR RANLIB ac_ct_RANLIB PERL BUILD_INFO_TRUE BUILD_INFO_FALSE LIBTOOL SED EGREP FGREP GREP LD DUMPBIN ac_ct_DUMPBIN NM LN_S OBJDUMP ac_ct_OBJDUMP lt_ECHO DSYMUTIL ac_ct_DSYMUTIL NMEDIT ac_ct_NMEDIT LIPO ac_ct_LIPO OTOOL ac_ct_OTOOL OTOOL64 ac_ct_OTOOL64 CPP CPPFLAGS enable_shared enable_static MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT FC FCFLAGS LDFLAGS ac_ct_FC libtool_VERSION SECTION_LDFLAGS OPT_LDFLAGS LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE LIBGOMP_BUILD_VERSIONED_SHLIB_FALSE config_path XCFLAGS XLDFLAGS link_gomp USE_FORTRAN_TRUE USE_FORTRAN_FALSE OMP_LOCK_SIZE OMP_LOCK_ALIGN OMP_NEST_LOCK_SIZE OMP_NEST_LOCK_ALIGN OMP_LOCK_KIND OMP_NEST_LOCK_KIND OMP_LOCK_25_SIZE OMP_LOCK_25_ALIGN OMP_NEST_LOCK_25_SIZE OMP_NEST_LOCK_25_ALIGN OMP_LOCK_25_KIND OMP_NEST_LOCK_25_KIND LIBOBJS LTLIBOBJS'
+ ac_subst_files=''
+ ac_pwd=`pwd`
+ 
+@@ -1029,6 +1029,10 @@
+ Optional Packages:
+   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
++  --with-datarootdir=DIR  Use DIR as the data root [PREFIX/share]
++  --with-docdir=DIR       Install documentation in DIR [DATAROOTDIR]
++  --with-pdfdir           install pdf in this directory.
++  --with-htmldir=DIR      html documentation in in DIR [DOCDIR]
+   --with-pic              try to use only PIC/non-PIC objects [default=use
+                           both]
+   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+@@ -2201,6 +2205,46 @@
+ 
+ 
+ 
++
++# Check whether --with-datarootdir or --without-datarootdir was given.
++if test "${with_datarootdir+set}" = set; then
++  withval="$with_datarootdir"
++  datarootdir="\${prefix}/$with_datarootdir"
++else
++  datarootdir='$(prefix)/share'
++fi;
++
++
++
++# Check whether --with-docdir or --without-docdir was given.
++if test "${with_docdir+set}" = set; then
++  withval="$with_docdir"
++  docdir="\${prefix}/$with_docdir"
++else
++  docdir='$(datarootdir)'
++fi;
++
++
++
++# Check whether --with-pdfdir or --without-pdfdir was given.
++if test "${with_pdfdir+set}" = set; then
++  withval="$with_pdfdir"
++  pdfdir="\${prefix}/${withval}"
++else
++  pdfdir="\${docdir}"
++fi;
++
++
++
++# Check whether --with-htmldir or --without-htmldir was given.
++if test "${with_htmldir+set}" = set; then
++  withval="$with_htmldir"
++  htmldir="\${prefix}/$with_htmldir"
++else
++  htmldir='$(docdir)'
++fi;
++
++
+ # Check the compiler.
+ # The same as in boehm-gc and libstdc++. Have to borrow it from there.
+ # We must force CC to /not/ be precious variables; otherwise
+@@ -4156,13 +4200,13 @@
+ else
+   lt_cv_nm_interface="BSD nm"
+   echo "int some_variable = 0;" > conftest.$ac_ext
+-  (eval echo "\"\$as_me:4159: $ac_compile\"" >&5)
++  (eval echo "\"\$as_me:4203: $ac_compile\"" >&5)
+   (eval "$ac_compile" 2>conftest.err)
+   cat conftest.err >&5
+-  (eval echo "\"\$as_me:4162: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
++  (eval echo "\"\$as_me:4206: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+   cat conftest.err >&5
+-  (eval echo "\"\$as_me:4165: output\"" >&5)
++  (eval echo "\"\$as_me:4209: output\"" >&5)
+   cat conftest.out >&5
+   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+     lt_cv_nm_interface="MS dumpbin"
+@@ -5320,7 +5364,7 @@
+   ;;
+ *-*-irix6*)
+   # Find out which ABI we are using.
+-  echo '#line 5323 "configure"' > conftest.$ac_ext
++  echo '#line 5367 "configure"' > conftest.$ac_ext
+   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+@@ -7101,11 +7145,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:7104: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:7148: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:7108: \$? = $ac_status" >&5
++   echo "$as_me:7152: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -7440,11 +7484,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:7443: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:7487: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:7447: \$? = $ac_status" >&5
++   echo "$as_me:7491: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -7545,11 +7589,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:7548: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:7592: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:7552: \$? = $ac_status" >&5
++   echo "$as_me:7596: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -7600,11 +7644,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:7603: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:7647: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:7607: \$? = $ac_status" >&5
++   echo "$as_me:7651: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -10412,7 +10456,7 @@
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 10415 "configure"
++#line 10459 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -10508,7 +10552,7 @@
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 10511 "configure"
++#line 10555 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -10859,7 +10903,7 @@
+ 
+ 
+ # Provide some information about the compiler.
+-echo "$as_me:10862:" \
++echo "$as_me:10906:" \
+      "checking for Fortran compiler version" >&5
+ ac_compiler=`set X $ac_compile; echo $2`
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+@@ -11095,7 +11139,7 @@
+ 
+ 
+ # Provide some information about the compiler.
+-echo "$as_me:11098:" \
++echo "$as_me:11142:" \
+      "checking for Fortran compiler version" >&5
+ ac_compiler=`set X $ac_compile; echo $2`
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+@@ -11835,11 +11879,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:11838: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:11882: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:11842: \$? = $ac_status" >&5
++   echo "$as_me:11886: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -11934,11 +11978,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:11937: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:11981: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:11941: \$? = $ac_status" >&5
++   echo "$as_me:11985: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -11986,11 +12030,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:11989: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:12033: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:11993: \$? = $ac_status" >&5
++   echo "$as_me:12037: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -15133,7 +15177,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -15197,7 +15242,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -15238,7 +15284,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -15295,7 +15342,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -15336,7 +15384,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -15401,7 +15450,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -15469,7 +15519,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (void *)); }
+ unsigned long ulongval () { return (long) (sizeof (void *)); }
+ #include <stdio.h>
+@@ -15557,7 +15608,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -15621,7 +15673,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -15662,7 +15715,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -15719,7 +15773,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -15760,7 +15815,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -15825,7 +15881,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -15893,7 +15950,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (long)); }
+ unsigned long ulongval () { return (long) (sizeof (long)); }
+ #include <stdio.h>
+@@ -15981,7 +16039,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16045,7 +16104,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16086,7 +16146,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16143,7 +16204,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16184,7 +16246,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16249,7 +16312,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16317,7 +16381,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (int)); }
+ unsigned long ulongval () { return (long) (sizeof (int)); }
+ #include <stdio.h>
+@@ -16401,7 +16466,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16465,7 +16531,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16506,7 +16573,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16563,7 +16631,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16604,7 +16673,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16669,7 +16739,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16737,7 +16808,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (short)); }
+ unsigned long ulongval () { return (long) (sizeof (short)); }
+ #include <stdio.h>
+@@ -16821,7 +16893,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16885,7 +16958,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16926,7 +17000,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -16983,7 +17058,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17024,7 +17100,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17089,7 +17166,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -17157,7 +17235,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (char)); }
+ unsigned long ulongval () { return (long) (sizeof (char)); }
+ #include <stdio.h>
+@@ -17859,6 +17938,7 @@
+ 
+ # See if we support thread-local storage.
+ 
++
+    # Check whether --enable-tls or --disable-tls was given.
+ if test "${enable_tls+set}" = set; then
+   enableval="$enable_tls"
+@@ -17906,6 +17986,64 @@
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
++  chktls_save_LDFLAGS="$LDFLAGS"
++	  	  	  case $host in
++	    *-*-linux*)
++	      LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
++	      ;;
++	  esac
++	  chktls_save_CFLAGS="$CFLAGS"
++	  CFLAGS="-fPIC $CFLAGS"
++	  	  cat >conftest.$ac_ext <<_ACEOF
++int f() { return 0; }
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++  (eval $ac_link) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest$ac_exeext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  cat >conftest.$ac_ext <<_ACEOF
++__thread int a; int b; int f() { return a = b; }
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++  (eval $ac_link) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest$ac_exeext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
+   gcc_cv_have_tls=yes
+ else
+   echo "$as_me: failed program was:" >&5
+@@ -17915,6 +18053,24 @@
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++gcc_cv_have_tls=yes
++fi
++rm -f conftest.err conftest.$ac_objext \
++      conftest$ac_exeext conftest.$ac_ext
++	  CFLAGS="$chktls_save_CFLAGS"
++	  LDFLAGS="$chktls_save_LDFLAGS"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++gcc_cv_have_tls=no
++fi
++rm -f conftest.err conftest.$ac_objext \
++      conftest$ac_exeext conftest.$ac_ext
+ 
+ 
+ else
+@@ -22801,6 +22957,10 @@
+ s,@multi_basedir@,$multi_basedir,;t t
+ s,@toolexecdir@,$toolexecdir,;t t
+ s,@toolexeclibdir@,$toolexeclibdir,;t t
++s,@datarootdir@,$datarootdir,;t t
++s,@docdir@,$docdir,;t t
++s,@pdfdir@,$pdfdir,;t t
++s,@htmldir@,$htmldir,;t t
+ s,@CC@,$CC,;t t
+ s,@ac_ct_CC@,$ac_ct_CC,;t t
+ s,@EXEEXT@,$EXEEXT,;t t
+--- a/src/libgomp/configure.ac
++++ b/src/libgomp/configure.ac
+@@ -94,6 +94,30 @@
+ AC_SUBST(toolexecdir)
+ AC_SUBST(toolexeclibdir)
+ 
++AC_ARG_WITH(datarootdir,
++[  --with-datarootdir=DIR  Use DIR as the data root [[PREFIX/share]]],
++datarootdir="\${prefix}/$with_datarootdir",
++datarootdir='$(prefix)/share')
++AC_SUBST(datarootdir)
++
++AC_ARG_WITH(docdir,
++[  --with-docdir=DIR       Install documentation in DIR [[DATAROOTDIR]]],
++docdir="\${prefix}/$with_docdir",
++docdir='$(datarootdir)')
++AC_SUBST(docdir)
++
++AC_ARG_WITH(pdfdir,
++[  --with-pdfdir           install pdf in this directory.],
++[pdfdir="\${prefix}/${withval}"],
++[pdfdir="\${docdir}"])
++AC_SUBST(pdfdir)
++
++AC_ARG_WITH(htmldir,
++[  --with-htmldir=DIR      html documentation in in DIR [[DOCDIR]]],
++htmldir="\${prefix}/$with_htmldir",
++htmldir='$(docdir)')
++AC_SUBST(htmldir)
++
+ # Check the compiler.
+ # The same as in boehm-gc and libstdc++. Have to borrow it from there.
+ # We must force CC to /not/ be precious variables; otherwise
+--- a/src/libgomp/testsuite/Makefile.in
++++ b/src/libgomp/testsuite/Makefile.in
+@@ -177,6 +177,8 @@
+ build_vendor = @build_vendor@
+ config_path = @config_path@
+ datadir = @datadir@
++datarootdir = @datarootdir@
++docdir = @docdir@
+ enable_shared = @enable_shared@
+ enable_static = @enable_static@
+ exec_prefix = @exec_prefix@
+@@ -185,6 +187,7 @@
+ host_cpu = @host_cpu@
+ host_os = @host_os@
+ host_vendor = @host_vendor@
++htmldir = @htmldir@
+ includedir = @includedir@
+ infodir = @infodir@
+ install_sh = @install_sh@
+@@ -198,6 +201,7 @@
+ mkdir_p = @mkdir_p@
+ multi_basedir = @multi_basedir@
+ oldincludedir = @oldincludedir@
++pdfdir = @pdfdir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+ sbindir = @sbindir@
+--- a/src/libiberty/Makefile.in
++++ b/src/libiberty/Makefile.in
+@@ -124,7 +124,7 @@
+ CFILES = alloca.c argv.c asprintf.c atexit.c				\
+ 	basename.c bcmp.c bcopy.c bsearch.c bzero.c			\
+ 	calloc.c choose-temp.c clock.c concat.c cp-demangle.c		\
+-	 cp-demint.c cplus-dem.c					\
++	 cp-demint.c cplus-dem.c cygpath.c				\
+ 	dyn-string.c							\
+ 	fdmatch.c ffs.c fibheap.c filename_cmp.c floatformat.c		\
+ 	fnmatch.c fopen_unlocked.c					\
+@@ -182,7 +182,7 @@
+ # maint-missing" and "make check".
+ CONFIGURED_OFILES = ./asprintf.o ./atexit.o				\
+ 	./basename.o ./bcmp.o ./bcopy.o ./bsearch.o ./bzero.o		\
+-	./calloc.o ./clock.o ./copysign.o				\
++	./calloc.o ./clock.o ./copysign.o ./cygpath.o			\
+ 	./_doprnt.o							\
+ 	./ffs.o								\
+ 	./getcwd.o ./getpagesize.o ./gettimeofday.o			\
+@@ -619,6 +619,13 @@
+ 	else true; fi
+ 	$(COMPILE.c) $(srcdir)/cplus-dem.c $(OUTPUT_OPTION)
+ 
++./cygpath.o: $(srcdir)/cygpath.c config.h $(INCDIR)/ansidecl.h \
++	$(INCDIR)/libiberty.h
++	if [ x"$(PICFLAG)" != x ]; then \
++	  $(COMPILE.c) $(PICFLAG) $(srcdir)/cygpath.c -o pic/$@; \
++	else true; fi
++	$(COMPILE.c) $(srcdir)/cygpath.c $(OUTPUT_OPTION)
++
+ ./dyn-string.o: $(srcdir)/dyn-string.c config.h $(INCDIR)/ansidecl.h \
+ 	$(INCDIR)/dyn-string.h $(INCDIR)/libiberty.h
+ 	if [ x"$(PICFLAG)" != x ]; then \
+--- a/src/libiberty/argv.c
++++ b/src/libiberty/argv.c
+@@ -119,6 +119,24 @@
+     }
+ }
+ 
++static void
++consume_whitespace (const char **input)
++{
++  while (ISSPACE (**input))
++    {
++      (*input)++;
++    }
++}
++
++static int
++only_whitespace (const char* input)
++{
++  while (*input != EOS && ISSPACE (*input))
++    input++;
++
++  return (*input == EOS);
++}
++
+ /*
+ 
+ @deftypefn Extension char** buildargv (char *@var{sp})
+@@ -179,10 +197,8 @@
+       do
+ 	{
+ 	  /* Pick off argv[argc] */
+-	  while (ISBLANK (*input))
+-	    {
+-	      input++;
+-	    }
++	  consume_whitespace (&input);
++
+ 	  if ((maxargc == 0) || (argc >= (maxargc - 1)))
+ 	    {
+ 	      /* argv needs initialization, or expansion */
+@@ -278,10 +294,7 @@
+ 	  argc++;
+ 	  argv[argc] = NULL;
+ 
+-	  while (ISSPACE (*input))
+-	    {
+-	      input++;
+-	    }
++	  consume_whitespace (&input);
+ 	}
+       while (*input != EOS);
+     }
+@@ -420,8 +433,17 @@
+ 	goto error;
+       /* Add a NUL terminator.  */
+       buffer[len] = '\0';
+-      /* Parse the string.  */
+-      file_argv = buildargv (buffer);
++      /* If the file is empty or contains only whitespace, buildargv would
++	 return a single empty argument.  In this context we want no arguments,
++	 instead.  */
++      if (only_whitespace (buffer))
++	{
++	  file_argv = (char **) xmalloc (sizeof (char *));
++	  file_argv[0] = NULL;
++	}
++      else
++	/* Parse the string.  */
++	file_argv = buildargv (buffer);
+       /* If *ARGVP is not already dynamically allocated, copy it.  */
+       if (!argv_dynamic)
+ 	{
+@@ -434,7 +456,7 @@
+ 	}
+       /* Count the number of arguments.  */
+       file_argc = 0;
+-      while (file_argv[file_argc] && *file_argv[file_argc])
++      while (file_argv[file_argc])
+ 	++file_argc;
+       /* Now, insert FILE_ARGV into ARGV.  The "+1" below handles the
+ 	 NULL terminator at the end of ARGV.  */ 
+--- a/src/libiberty/configure
++++ b/src/libiberty/configure
+@@ -8891,6 +8891,20 @@
+ esac
+ 
+ 
++# On MinGW, add support for Cygwin paths.
++case "${host}" in
++     *-*-mingw*)
++	case $LIBOBJS in
++    "cygpath.$ac_objext"   | \
++  *" cygpath.$ac_objext"   | \
++    "cygpath.$ac_objext "* | \
++  *" cygpath.$ac_objext "* ) ;;
++  *) LIBOBJS="$LIBOBJS cygpath.$ac_objext" ;;
++esac
++
++	;;
++esac
++
+ if test x$gcc_no_link = xyes; then
+   if test "x${ac_cv_func_mmap_fixed_mapped+set}" != xset; then
+     ac_cv_func_mmap_fixed_mapped=no
+--- a/src/libiberty/configure.ac
++++ b/src/libiberty/configure.ac
+@@ -663,6 +663,13 @@
+ esac
+ AC_SUBST(pexecute)
+ 
++# On MinGW, add support for Cygwin paths.
++case "${host}" in
++     *-*-mingw*)
++	AC_LIBOBJ([cygpath])
++	;;
++esac
++
+ libiberty_AC_FUNC_STRNCMP
+ 
+ # Install a library built with a cross compiler in $(tooldir) rather
+--- a/src/libiberty/cygpath.c
++++ b/src/libiberty/cygpath.c
+@@ -0,0 +1,684 @@
++/* Support Cygwin paths under MinGW.
++   Copyright (C) 2006 Free Software Foundation, Inc.
++   Written by CodeSourcery.
++
++This file is part of the libiberty library.
++Libiberty is free software; you can redistribute it and/or modify it
++under the terms of the GNU Library General Public License as published
++by the Free Software Foundation; either version 2 of the License, or
++(at your option) any later version.
++
++Libiberty is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++Library General Public License for more details.
++
++You should have received a copy of the GNU Library General Public
++License along with libiberty; see the file COPYING.LIB.  If not, write
++to the Free Software Foundation, Inc., 51 Franklin Street - Fifth
++Floor, Boston, MA 02110-1301, USA.  */
++
++#include <windows.h>
++#include <errno.h>
++#include <fcntl.h>
++#include <sys/stat.h>
++#include <sys/types.h>
++#include <io.h>
++#include <process.h>
++#include <stdbool.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include "libiberty.h"
++
++/* If non-zero, we have attempted to use cygpath.  CYGPATH_PEX may
++   still be NULL, if cygpath is unavailable.  */
++static int cygpath_initialized;
++
++/* If non-NULL, an instance of cygpath connected via a pipe.  */
++static struct pex_obj *cygpath_pex;
++
++/* The input to cygpath.  */
++static FILE *cygpath_in;
++
++/* The output from cygpath.  */
++static FILE *cygpath_out;
++
++/* If non-NULL, a file to which path translations are logged.  */
++static FILE *cygpath_log;
++
++/* Record MESSAGE in the CYGPATH_LOG.  MESSAGE is a format string,
++   which is expected to have a single "%s" field, to be replaced by
++   ARG.  */
++static void
++cygpath_log_msg_arg (const char *message, const char *arg)
++{
++  if (!cygpath_log)
++    return;
++  fprintf (cygpath_log, "[%d] cygpath: ", _getpid ());
++  fprintf (cygpath_log, message, arg);
++  fprintf (cygpath_log, "\n");
++  fflush (cygpath_log);
++}
++
++/* Record MESSAGE in the CYGPATH_LOG.  */
++static void
++cygpath_log_msg (const char *message)
++{
++  cygpath_log_msg_arg ("%s", message);
++}
++
++/* An error has occured.  Add the MESSAGE to the CYGPATH_LOG, noting
++   the cause of the error based on errno.  */
++static void
++cygpath_perror (const char *message)
++{
++  if (!cygpath_log)
++    return;
++  fprintf (cygpath_log, "[%d] cygpath: error: %s: %s\n",
++	   _getpid(), message, strerror (errno));
++  fflush (cygpath_log);
++}
++
++/* Closes CYGPATH_PEX and frees all associated
++   resoures.  */
++static void
++cygpath_close (void)
++{
++  /* Free resources.  */
++  if (cygpath_out)
++    {
++      fclose (cygpath_out);
++      cygpath_out = NULL;
++    }
++  if (cygpath_in)
++    {
++      fclose (cygpath_in);
++      cygpath_in = NULL;
++    }
++  if (cygpath_pex)
++    {
++      pex_free (cygpath_pex);
++      cygpath_pex = NULL;
++    }
++  if (cygpath_log)
++    {
++      cygpath_log_msg ("end");
++      cygpath_log = NULL;
++    }
++}
++
++/* CYG_PATH is a pointer to a Cygwin path.  This function converts the
++   Cygwin path to a Windows path, storing the result in
++   WIN32_PATH.  Returns true if the conversion was successful; false
++   otherwise.  */
++int
++cygpath (const char *cyg_path, char win32_path[MAX_PATH + 1])
++{
++  bool ok;
++  bool retrying;
++  
++  /* Special-case the empty path.  cygpath cannot handle the empty
++     path correctly.  It ignores the empty line, waiting for a
++     non-empty line, which in turn causes an application using this
++     function to appear stuck.  */
++  if (cyg_path[0] == '\0')
++    {
++      win32_path[0] = '\0';
++      return true;
++    }
++  
++  retrying = false;
++
++ retry:
++  if (!cygpath_initialized) 
++    {
++      const char *argv[] = { "cygpath", "-w", "-f", "-", NULL };
++      const char *cygpath_path;
++      const char *log;
++      int err;
++
++      /* If we are unable to invoke cygpath, we do not want to try
++	 again.  So, we set the initialized flag at this point; if
++	 errors occur during the invocation, it will remain set.  */
++      cygpath_initialized = 1;
++      /* Check to see if the user wants cygpath support.  */
++      cygpath_path = getenv ("CYGPATH");
++      if (!cygpath_path)
++	/* The user doesn't need to support Cygwin paths.  */
++	goto error;
++      /* If debugging, open the log file.  */
++      log = getenv ("CSL_DEBUG_CYGPATH");
++      if (log && log[0])
++	{
++	  /* The log file is opened for "append" so that multiple
++	     processes (perhaps invoked from "make") can share it.  */
++	  cygpath_log = fopen (log, "a");
++	  if (cygpath_log)
++	    cygpath_log_msg ("begin");
++	}
++      /* If the environment variable is set to a non-empty string, use
++	 that string as the path to cygpath.  */ 
++      if (cygpath_path[0] != '\0')
++	argv[0] = cygpath_path;
++      /* Create the pex object.  */
++      cygpath_pex = pex_init (PEX_SEARCH | PEX_USE_PIPES, 
++			      "cygpath", NULL);
++      if (!cygpath_pex)
++	goto error;
++      /* Get the FILE we will use to write to the child.  */
++      cygpath_in = pex_input_pipe (cygpath_pex, /*binary=*/0);
++      if (!cygpath_in)
++	goto error;
++      /* Start the child process.  */
++      if (pex_run (cygpath_pex, PEX_SEARCH | PEX_USE_PIPES, 
++		   argv[0], (char**) argv, 
++		   NULL, NULL,
++		   &err) != NULL)
++	goto error;
++      /* Get the FILE we will use to read from the child.  */
++      cygpath_out = pex_read_output (cygpath_pex, /*binary=*/1);
++      if (!cygpath_out)
++	goto error;
++    }
++  else if (!cygpath_pex) 
++    /* We previously tried to use cygpath, but something went wrong.  */
++    return false;
++
++  /* Write CYG_PATH to the child, on a line by itself.  */
++  cygpath_log_msg_arg ("-> %s", cyg_path);
++  if (fprintf (cygpath_in, "%s\n", cyg_path) < 0)
++    {
++      cygpath_perror ("write failed");
++      goto error;
++    }
++  /* Flush the output.  (We cannot set the stream into line-buffered
++     mode with setvbuf because Windows treats _IOLBF as a synonym for
++     _IOFBF.)  */
++  if (fflush (cygpath_in))
++    cygpath_perror ("flush failed");
++  /* Read the output.  */
++  ok = true;
++  while (1)
++    {
++      size_t pathlen;
++      if (!fgets (win32_path, MAX_PATH, cygpath_out))
++	{
++	  if (ferror (cygpath_out))
++	    cygpath_perror ("read failed");
++	  else
++	    {
++	      cygpath_log_msg ("error: EOF");
++	      /* Unfortunately, cygpath sometimes crashes for no
++		 apparent reason.  We give it two chances... */
++	      if (!retrying)
++		{
++		  retrying = true;
++		  cygpath_log_msg ("retrying");
++		  cygpath_close ();
++		  cygpath_initialized = 0;
++		  goto retry;
++		}
++	      else
++		{
++		  /* Give up, but in case the error is specific to
++		     this path, reopen at the next request.  */
++		  cygpath_close ();
++		  cygpath_initialized = 0;
++		}
++	    }
++	  goto error;
++	}
++      pathlen = strlen (win32_path);
++      if (pathlen == 0 && ok)
++	/* This isn't a well-formed response from cygpath.  */
++	goto error;
++      if (win32_path[pathlen - 1] == '\n')
++	{
++	  win32_path[pathlen - 1] = '\0';
++	  cygpath_log_msg_arg ("<- %s", win32_path);
++	  break;
++	}
++      /* We didn't reach the end of the line.  There's no point in
++	 trying to use this output, since we know the length of
++	 paths are limited to MAX_PATH characters, but we read the
++	 entire line so that we are still in sync with
++	 cygpath.  */
++      ok = false;
++      if (cygpath_log)
++	cygpath_log_msg_arg ("error: invalid response: %s",
++			     win32_path);
++    }
++  
++  return ok;
++  
++ error:
++  cygpath_close();
++  return false;
++}
++
++typedef struct
++{
++  DWORD dwRVAFunctionNameList;
++  DWORD dwUseless1;
++  DWORD dwUseless2;
++  DWORD dwRVAModuleName;
++  DWORD dwRVAFunctionAddressList;
++} IMAGE_IMPORT_MODULE_DIRECTORY, *PIMAGE_IMPORT_MODULE_DIRECTORY;
++
++#define IMAGE_DIRECTORY_ENTRY_IMPORT 1
++
++/* Returns the handle for the MVCRT DLL, or NULL if it is not
++   available.  */
++static HMODULE
++msvcrt_dll (void)
++{
++  static HMODULE dll = (HMODULE)(-1);
++  PIMAGE_OPTIONAL_HEADER opth;
++  PIMAGE_IMPORT_MODULE_DIRECTORY impdir;
++  HANDLE image;
++
++  /* After we call GetModuleHandle, DLL will be either a valid handle
++     or NULL, so this check ensures that we only try to load the
++     library once.  */
++  if (dll != (HMODULE)(-1))
++    return dll;
++
++  dll = NULL;
++
++  /* Check which C runtime is loaded by this executable.  Do that by
++     looking at the import directory for DLLs the EXE links to that
++     looks like msvcr*.  This catches e.g., `msvcr90.dll' and
++     `msvcrt.dll'.  */
++
++  image = GetModuleHandle (NULL);
++
++  /* Get to the PE optional header.  */
++  opth = (PIMAGE_OPTIONAL_HEADER)
++    ((DWORD) image + ((PIMAGE_DOS_HEADER) image)->e_lfanew
++     + sizeof (DWORD) + sizeof (IMAGE_FILE_HEADER));
++  impdir = (PIMAGE_IMPORT_MODULE_DIRECTORY)
++    (opth->ImageBase
++     + opth->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
++
++  for (; impdir->dwRVAModuleName; impdir++)
++    {
++      char *dllname;
++
++      dllname = (char *) opth->ImageBase + impdir->dwRVAModuleName;
++      if (strncasecmp (dllname, "msvcr", sizeof ("msvcr") - 1) == 0)
++	{
++	  dll = GetModuleHandle (dllname);
++	  if (dll == NULL)
++	    {
++	      if (cygpath_log)
++		cygpath_log_msg ("error: GetModuleHandle failed");
++	    }
++	  break;
++	}
++    }
++
++  return dll;
++}
++
++/* Call the underlying MSVCRT fopen with PATH and MODE, and return
++   what it returns.  */
++static FILE *
++msvcrt_fopen (const char *path, const char *mode)
++{
++  typedef FILE *(fopen_type)(const char *path, 
++			     const char *mode);
++
++  static fopen_type *f = NULL;
++
++  /* Get the address of "fopen".  */
++  if (!f) 
++    {
++      HMODULE dll = msvcrt_dll ();
++      if (!dll)
++	{
++	  errno = ENOSYS;
++	  return NULL;
++	}
++      f = (fopen_type *) GetProcAddress (dll, "fopen");
++      if (!f)
++	{
++	  errno = ENOSYS;
++	  return NULL;
++	}
++    }
++
++  /* Call fopen.  */
++  return (*f)(path, mode);
++}
++
++FILE *
++fopen (const char *path, const char *mode)
++{
++  FILE *f;
++  char win32_path[MAX_PATH + 1];
++
++  /* Assume PATH is a Windows path.  */
++  f = msvcrt_fopen (path, mode);
++  if (f || errno != ENOENT)
++    return f;
++  /* Perhaps it is a Cygwin path?  */
++  if (cygpath (path, win32_path))
++    f = msvcrt_fopen (win32_path, mode);
++  return f;
++}
++
++int 
++open (const char *path, int oflag, ...)
++{
++  int fd;
++  char win32_path[MAX_PATH + 1];
++  int pmode = 0;
++
++  if ((oflag & _O_CREAT))
++    {
++      va_list ap;
++      va_start (ap, oflag);
++      pmode = va_arg (ap, int); 
++      va_end (ap);
++    }
++
++  /* Assume PATH is a Windows path.  */
++  fd = _open (path, oflag, pmode);
++  if (fd != -1 || errno != ENOENT)
++    return fd;
++  /* Perhaps it is a Cygwin path?  */
++  if (cygpath (path, win32_path))
++    fd = _open (win32_path, oflag, pmode);
++  return fd;
++}
++
++/* Call the underlying MSVCRT stat with PATH and MODE, and return
++   what it returns.  */
++int
++msvcrt_stat (const char *path, struct stat *buffer)
++{
++  typedef int *(stat_type)(const char *path,
++			   struct stat *buffer);
++
++  static stat_type *f = NULL;
++
++  /* Get the address of "stat".  */
++  if (!f)
++    {
++      HMODULE dll = msvcrt_dll ();
++      if (!dll)
++	{
++	  errno = ENOSYS;
++	  return NULL;
++	}
++      if (sizeof (time_t) == 8)
++	f = (stat_type *) GetProcAddress (dll, "_stat64i32");
++      else
++	{
++	  f = (stat_type *) GetProcAddress (dll, "_stat32");
++	  if (!f)
++	    f = (stat_type *) GetProcAddress (dll, "_stat");
++	}
++      if (!f)
++	{
++	  errno = ENOSYS;
++	  return NULL;
++	}
++    }
++
++  /* Call fopen.  */
++  return (*f)(path, buffer);
++}
++
++int
++stat (const char *path, struct stat *buffer)
++{
++  int r;
++  char win32_path[MAX_PATH + 1];
++
++  /* Assume PATH is a Windows path.  */
++  r = msvcrt_stat (path, (struct _stat *) buffer);
++  if (r != -1 || errno != ENOENT)
++    return r;
++  /* Perhaps it is a Cygwin path?  */
++  if (cygpath (path, win32_path))
++    r = msvcrt_stat (win32_path, (struct _stat *) buffer);
++  return r;
++}
++
++int
++access (const char *path, int mode)
++{
++  int r;
++  char win32_path[MAX_PATH + 1];
++
++#ifdef _WIN32
++  /* Some GNU tools mistakenly defined X_OK to 1 on Windows.  */
++  mode = mode & ~1;
++#endif
++  /* Assume PATH is a Windows path.  */
++  r = _access (path, mode);
++  if (r != -1 || errno != ENOENT)
++    return r;
++  /* Perhaps it is a Cygwin path?  */
++  if (cygpath (path, win32_path))
++    r = _access (win32_path, mode);
++  return r;
++}
++
++/* Given the WINDOWS_CODE (typically the result of GetLastError), set
++   ERRNO to the corresponding error code.  If there is no obvious
++   correspondence, ERRNO will be set to EACCES.  */
++static void
++set_errno_from_windows_code (DWORD windows_code)
++{
++  int mapping[][2] = {
++    {ERROR_ACCESS_DENIED, EACCES},
++    {ERROR_ACCOUNT_DISABLED, EACCES},
++    {ERROR_ACCOUNT_RESTRICTION, EACCES},
++    {ERROR_ALREADY_ASSIGNED, EBUSY},
++    {ERROR_ALREADY_EXISTS, EEXIST},
++    {ERROR_ARITHMETIC_OVERFLOW, ERANGE},
++    {ERROR_BAD_COMMAND, EIO},
++    {ERROR_BAD_DEVICE, ENODEV},
++    {ERROR_BAD_DRIVER_LEVEL, ENXIO},
++    {ERROR_BAD_EXE_FORMAT, ENOEXEC},
++    {ERROR_BAD_FORMAT, ENOEXEC},
++    {ERROR_BAD_LENGTH, EINVAL},
++    {ERROR_BAD_PATHNAME, ENOENT},
++    {ERROR_BAD_PIPE, EPIPE},
++    {ERROR_BAD_UNIT, ENODEV},
++    {ERROR_BAD_USERNAME, EINVAL},
++    {ERROR_BROKEN_PIPE, EPIPE},
++    {ERROR_BUFFER_OVERFLOW, ENOMEM},
++    {ERROR_BUSY, EBUSY},
++    {ERROR_BUSY_DRIVE, EBUSY},
++    {ERROR_CALL_NOT_IMPLEMENTED, ENOSYS},
++    {ERROR_CRC, EIO},
++    {ERROR_CURRENT_DIRECTORY, EINVAL},
++    {ERROR_DEVICE_IN_USE, EBUSY},
++    {ERROR_DIR_NOT_EMPTY, EEXIST},
++    {ERROR_DIRECTORY, ENOENT},
++    {ERROR_DISK_CHANGE, EIO},
++    {ERROR_DISK_FULL, ENOSPC},
++    {ERROR_DRIVE_LOCKED, EBUSY},
++    {ERROR_ENVVAR_NOT_FOUND, EINVAL},
++    {ERROR_EXE_MARKED_INVALID, ENOEXEC},
++    {ERROR_FILE_EXISTS, EEXIST},
++    {ERROR_FILE_INVALID, ENODEV},
++    {ERROR_FILE_NOT_FOUND, ENOENT},
++    {ERROR_FILENAME_EXCED_RANGE, ENAMETOOLONG},
++    {ERROR_GEN_FAILURE, EIO},
++    {ERROR_HANDLE_DISK_FULL, ENOSPC},
++    {ERROR_INSUFFICIENT_BUFFER,  ENOMEM},
++    {ERROR_INVALID_ACCESS, EINVAL},
++    {ERROR_INVALID_ADDRESS, EFAULT},
++    {ERROR_INVALID_BLOCK, EFAULT},
++    {ERROR_INVALID_DATA, EINVAL},
++    {ERROR_INVALID_DRIVE, ENODEV},
++    {ERROR_INVALID_EXE_SIGNATURE,  ENOEXEC},
++    {ERROR_INVALID_FLAGS, EINVAL},
++    {ERROR_INVALID_FUNCTION,  ENOSYS},
++    {ERROR_INVALID_HANDLE, EBADF},
++    {ERROR_INVALID_LOGON_HOURS,  EACCES},
++    {ERROR_INVALID_NAME, ENOENT},
++    {ERROR_INVALID_OWNER, EINVAL},
++    {ERROR_INVALID_PARAMETER, EINVAL},
++    {ERROR_INVALID_PASSWORD, EPERM},
++    {ERROR_INVALID_PRIMARY_GROUP, EINVAL},
++    {ERROR_INVALID_SIGNAL_NUMBER, EINVAL},
++    {ERROR_INVALID_TARGET_HANDLE, EIO},
++    {ERROR_INVALID_WORKSTATION, EACCES},
++    {ERROR_IO_DEVICE, EIO},
++    {ERROR_IO_INCOMPLETE, EINTR},
++    {ERROR_LOCKED, EBUSY},
++    {ERROR_LOGON_FAILURE, EACCES},
++    {ERROR_MAPPED_ALIGNMENT, EINVAL},
++    {ERROR_META_EXPANSION_TOO_LONG, E2BIG},
++    {ERROR_MORE_DATA, EPIPE},
++    {ERROR_NEGATIVE_SEEK, ESPIPE},
++    {ERROR_NO_DATA, EPIPE},
++    {ERROR_NO_MORE_SEARCH_HANDLES, EIO},
++    {ERROR_NO_PROC_SLOTS, EAGAIN},
++    {ERROR_NO_SUCH_PRIVILEGE, EACCES},
++    {ERROR_NOACCESS, EFAULT},
++    {ERROR_NONE_MAPPED, EINVAL},
++    {ERROR_NOT_ENOUGH_MEMORY, ENOMEM},
++    {ERROR_NOT_READY, ENODEV},
++    {ERROR_NOT_SAME_DEVICE, EXDEV},
++    {ERROR_OPEN_FAILED, EIO},
++    {ERROR_OPERATION_ABORTED, EINTR},
++    {ERROR_OUTOFMEMORY,  ENOMEM},
++    {ERROR_PASSWORD_EXPIRED, EACCES},
++    {ERROR_PATH_BUSY,  EBUSY},
++    {ERROR_PATH_NOT_FOUND, ENOTDIR},
++    {ERROR_PIPE_BUSY, EBUSY},
++    {ERROR_PIPE_CONNECTED, EPIPE},
++    {ERROR_PIPE_LISTENING, EPIPE},
++    {ERROR_PIPE_NOT_CONNECTED, EPIPE},
++    {ERROR_PRIVILEGE_NOT_HELD, EACCES},
++    {ERROR_READ_FAULT, EIO},
++    {ERROR_SEEK, ESPIPE},
++    {ERROR_SEEK_ON_DEVICE, ESPIPE},
++    {ERROR_SHARING_BUFFER_EXCEEDED, ENFILE},
++    {ERROR_STACK_OVERFLOW, ENOMEM},
++    {ERROR_SWAPERROR, ENOENT},
++    {ERROR_TOO_MANY_MODULES, EMFILE},
++    {ERROR_TOO_MANY_OPEN_FILES, EMFILE},
++    {ERROR_UNRECOGNIZED_MEDIA,  ENXIO},
++    {ERROR_UNRECOGNIZED_VOLUME,  ENODEV},
++    {ERROR_WAIT_NO_CHILDREN,  ECHILD},
++    {ERROR_WRITE_FAULT, EIO},
++    {ERROR_WRITE_PROTECT, EROFS}
++/*  MinGW does not define ETXTBSY as yet.  
++    {ERROR_LOCK_VIOLATION, ETXTBSY},
++    {ERROR_SHARING_VIOLATION, ETXTBSY}, 
++*/
++  };
++
++  size_t i;
++
++  for (i = 0; i < sizeof (mapping)/sizeof (mapping[0]); ++i)
++    if (mapping[i][0] == windows_code)
++      {
++	errno = mapping[i][1];
++	return;
++      }
++
++  /* Unrecognized error. Use EACCESS to have some error code,
++     not misleading "No error" thing.  */
++  errno = EACCES;      
++}
++
++int rename (const char *oldpath, const char *newpath)
++{
++  BOOL r;
++  int oldpath_converted = 0;
++  char win32_oldpath[MAX_PATH + 1];
++  char win32_newpath[MAX_PATH + 1];
++
++  /* Older versions of the cygpath program called FindFirstFile, but
++     not FindClose.  As a result, a long-running cygpath program ends
++     up leaking these handles, and, as a result, the Windows kernel
++     will not let us remove or rename things in directories.  Therefore,
++     we kill the child cygpath program now.
++
++     The defect in cygpath was corrected by this patch:
++
++       http://cygwin.com/ml/cygwin-patches/2007-q1/msg00033.html
++
++     but older versions of cygpath will be in use for the forseeable
++     future.  */
++
++  cygpath_close ();
++  cygpath_initialized = 0;
++
++  /* Assume all paths are Windows paths.  */
++  r = MoveFileEx (oldpath, newpath, MOVEFILE_REPLACE_EXISTING);
++  if (r)
++      return 0;
++  else if (GetLastError () != ERROR_PATH_NOT_FOUND)
++    goto error;
++
++  /* Perhaps the old path is a cygwin path?  */
++  if (cygpath (oldpath, win32_oldpath))
++    {
++      oldpath_converted = 1;
++      r = MoveFileEx (win32_oldpath, newpath, MOVEFILE_REPLACE_EXISTING);      
++      if (r)
++          return 0;
++      else if (GetLastError () != ERROR_PATH_NOT_FOUND)
++          goto error;
++    }
++
++  /* Perhaps the new path is a cygwin path?  */
++  if (cygpath (newpath, win32_newpath))
++    {
++      r = MoveFileEx (oldpath_converted ? win32_oldpath : oldpath,
++		      win32_newpath, MOVEFILE_REPLACE_EXISTING);
++      if (r == TRUE)
++	return 0;
++    }
++error:
++  set_errno_from_windows_code (GetLastError ());
++  return -1;      
++}
++
++int remove (const char *pathname)
++{
++  int r;
++  char win32_path[MAX_PATH + 1];
++
++  cygpath_close ();
++  cygpath_initialized = 0;
++
++  /* Assume PATH is a Windows path.  */
++  r = _unlink (pathname);
++  if (r != -1 || errno != ENOENT)
++    return r;
++  /* Perhaps it is a Cygwin path?  */
++  if (cygpath (pathname, win32_path))
++    r = _unlink (win32_path);
++  return r;
++}
++
++int unlink(const char *pathname)
++{
++    return remove (pathname);
++}
++
++int
++chdir (const char *path)
++{
++  int ret;
++  char win32_path[MAX_PATH + 1];
++
++  /* Assume PATH is a Windows path.  */
++  ret = _chdir (path);
++  if (ret != -1 || errno != ENOENT)
++    return ret;
++  /* Perhaps it is a Cygwin path?  */
++  if (cygpath (path, win32_path))
++    ret = _chdir (win32_path);
++  return ret;
++}
+--- a/src/libiberty/lrealpath.c
++++ b/src/libiberty/lrealpath.c
+@@ -138,6 +138,17 @@
+   {
+     char buf[MAX_PATH];
+     char* basename;
++
++    if (_access (filename, F_OK) != 0)
++      {
++	char cygbuf[MAX_PATH + 1];
++	/* The file does not exist.  It's fine to call lrealpath
++	   on a non-existing path... but if this would be an existing
++	   path after cygpath conversion, use that instead.  */
++	if (cygpath (filename, cygbuf) && _access (cygbuf, F_OK) == 0)
++	  filename = cygbuf;
++      }
++
+     DWORD len = GetFullPathName (filename, MAX_PATH, buf, &basename);
+     if (len == 0 || len > MAX_PATH - 1)
+       return strdup (filename);
+--- a/src/libiberty/pex-common.c
++++ b/src/libiberty/pex-common.c
+@@ -505,6 +505,7 @@
+   if (o < 0 || o == STDIN_FILE_NO)
+     return NULL;
+   obj->read_err = obj->funcs->fdopenr (obj, o, binary);
++  obj->stderr_pipe = -1;
+   return obj->read_err;    
+ }
+ 
+@@ -597,8 +598,17 @@
+ void
+ pex_free (struct pex_obj *obj)
+ {
++  /* Close pipe file descriptors corresponding to child's stdout and
++     stderr so that the child does not hang trying to output anything
++     while we're waiting for it.  */
+   if (obj->next_input >= 0 && obj->next_input != STDIN_FILE_NO)
+     obj->funcs->close (obj, obj->next_input);
++  if (obj->stderr_pipe >= 0 && obj->stderr_pipe != STDIN_FILE_NO)
++    obj->funcs->close (obj, obj->stderr_pipe);
++  if (obj->read_output != NULL)
++    fclose (obj->read_output);
++  if (obj->read_err != NULL)
++    fclose (obj->read_err);
+ 
+   /* If the caller forgot to wait for the children, we do it here, to
+      avoid zombies.  */
+@@ -619,10 +629,6 @@
+     free (obj->status);
+   if (obj->time != NULL)
+     free (obj->time);
+-  if (obj->read_output != NULL)
+-    fclose (obj->read_output);
+-  if (obj->read_err != NULL)
+-    fclose (obj->read_err);
+ 
+   if (obj->remove_count > 0)
+     {
+--- a/src/libiberty/pex-win32.c
++++ b/src/libiberty/pex-win32.c
+@@ -119,7 +119,7 @@
+ pex_win32_open_read (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name,
+ 		     int binary)
+ {
+-  return _open (name, _O_RDONLY | (binary ? _O_BINARY : _O_TEXT));
++  return open (name, _O_RDONLY | (binary ? _O_BINARY : _O_TEXT));
+ }
+ 
+ /* Open a file for writing.  */
+@@ -130,10 +130,10 @@
+ {
+   /* Note that we can't use O_EXCL here because gcc may have already
+      created the temporary file via make_temp_file.  */
+-  return _open (name,
+-		(_O_WRONLY | _O_CREAT | _O_TRUNC
+-		 | (binary ? _O_BINARY : _O_TEXT)),
+-		_S_IREAD | _S_IWRITE);
++  return open (name,
++	       (_O_WRONLY | _O_CREAT | _O_TRUNC
++		| (binary ? _O_BINARY : _O_TEXT)),
++	       _S_IREAD | _S_IWRITE);
+ }
+ 
+ /* Close a file.  */
+@@ -746,6 +746,28 @@
+   OSVERSIONINFO version_info;
+   STARTUPINFO si;
+   PROCESS_INFORMATION pi;
++  int orig_out, orig_in, orig_err;
++  BOOL separate_stderr = !(flags & PEX_STDERR_TO_STDOUT);
++
++  /* Ensure we have inheritable descriptors to pass to the child, and close the
++     original descriptors.  */
++  orig_in = in;
++  in = _dup (orig_in);
++  if (orig_in != STDIN_FILENO)
++    _close (orig_in);
++  
++  orig_out = out;
++  out = _dup (orig_out);
++  if (orig_out != STDOUT_FILENO)
++    _close (orig_out);
++  
++  if (separate_stderr)
++    {
++      orig_err = errdes;
++      errdes = _dup (orig_err);
++      if (orig_err != STDERR_FILENO)
++	_close (orig_err);
++    }
+ 
+   stdin_handle = INVALID_HANDLE_VALUE;
+   stdout_handle = INVALID_HANDLE_VALUE;
+@@ -753,7 +775,7 @@
+ 
+   stdin_handle = (HANDLE) _get_osfhandle (in);
+   stdout_handle = (HANDLE) _get_osfhandle (out);
+-  if (!(flags & PEX_STDERR_TO_STDOUT))
++  if (separate_stderr)
+     stderr_handle = (HANDLE) _get_osfhandle (errdes);
+   else
+     stderr_handle = stdout_handle;
+@@ -822,12 +844,13 @@
+       *errmsg = "CreateProcess";
+     }
+ 
+-  /* Close the standard output and standard error handles in the
+-     parent.  */ 
+-  if (out != STDOUT_FILENO)
+-    obj->funcs->close (obj, out);
+-  if (errdes != STDERR_FILENO)
+-    obj->funcs->close (obj, errdes);
++  /* Close the standard input, standard output and standard error handles
++     in the parent.  */ 
++
++  _close (in);
++  _close (out);
++  if (separate_stderr)
++    _close (errdes);
+ 
+   return pid;
+ }
+@@ -883,7 +906,7 @@
+ pex_win32_pipe (struct pex_obj *obj ATTRIBUTE_UNUSED, int *p,
+ 		int binary)
+ {
+-  return _pipe (p, 256, binary ? _O_BINARY : _O_TEXT);
++  return _pipe (p, 256, (binary ? _O_BINARY : _O_TEXT) | _O_NOINHERIT);
+ }
+ 
+ /* Get a FILE pointer to read from a file descriptor.  */
+--- a/src/libiberty/testsuite/test-expandargv.c
++++ b/src/libiberty/testsuite/test-expandargv.c
+@@ -107,6 +107,38 @@
+   ARGV0,
+   0,
+ 
++  /* Test 4 - Check for options beginning with an empty line.  */
++  "\na\nb",	/* Test 4 data */
++  ARGV0,
++  "@test-expandargv-4.lst",
++  0,
++  ARGV0,
++  "a",
++  "b",
++  0,
++
++  /* Test 5 - Check for options containing an empty argument.  */
++  "a\n''\nb",    /* Test 5 data */
++  ARGV0,
++  "@test-expandargv-5.lst",
++  0,
++  ARGV0,
++  "a",
++  "",
++  "b",
++  0,
++
++  /* Test 6 - Check for options containing a quoted newline.  */
++  "a\n'a\n\nb'\nb",    /* Test 6 data */
++  ARGV0,
++  "@test-expandargv-6.lst",
++  0,
++  ARGV0,
++  "a",
++  "a\n\nb",
++  "b",
++  0,
++
+   0 /* Test done marker, don't remove. */
+ };
+ 
+@@ -246,7 +278,7 @@
+       /* Compare each of the argv's ... */
+       else
+         for (k = 0; k < argc_after; k++)
+-          if (strncmp (argv_before[k], argv_after[k], strlen(argv_after[k])) != 0)
++          if (strcmp (argv_before[k], argv_after[k]) != 0)
+             {
+               printf ("FAIL: test-expandargv-%d. Arguments don't match.\n", i);
+               failed++;
+--- a/src/libjava/classpath/Makefile.in
++++ b/src/libjava/classpath/Makefile.in
+@@ -360,9 +360,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ 
+--- a/src/libjava/classpath/configure
++++ b/src/libjava/classpath/configure
+@@ -461,7 +461,7 @@
+ # include <unistd.h>
+ #endif"
+ 
+-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os JAVA_MAINTAINER_MODE_TRUE JAVA_MAINTAINER_MODE_FALSE GENINSRC_TRUE GENINSRC_FALSE multi_basedir INSTALL_BINARIES_TRUE INSTALL_BINARIES_FALSE LIBVERSION CLASSPATH_MODULE CLASSPATH_CONVENIENCE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CREATE_COLLECTIONS_TRUE CREATE_COLLECTIONS_FALSE CREATE_JNI_LIBRARIES_TRUE CREATE_JNI_LIBRARIES_FALSE CREATE_CORE_JNI_LIBRARIES_TRUE CREATE_CORE_JNI_LIBRARIES_FALSE CREATE_GCONF_PEER_LIBRARIES_TRUE CREATE_GCONF_PEER_LIBRARIES_FALSE CREATE_GSTREAMER_PEER_LIBRARIES_TRUE CREATE_GSTREAMER_PEER_LIBRARIES_FALSE default_toolkit CREATE_XMLJ_LIBRARY_TRUE CREATE_XMLJ_LIBRARY_FALSE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP CREATE_ALSA_LIBRARIES_TRUE CREATE_ALSA_LIBRARIES_FALSE CREATE_DSSI_LIBRARIES_TRUE CREATE_DSSI_LIBRARIES_FALSE CREATE_GTK_PEER_LIBRARIES_TRUE CREATE_GTK_PEER_LIBRARIES_FALSE CREATE_QT_PEER_LIBRARIES_TRUE CREATE_QT_PEER_LIBRARIES_FALSE CREATE_PLUGIN_TRUE CREATE_PLUGIN_FALSE CREATE_GJDOC_TRUE CREATE_GJDOC_FALSE toolexeclibdir nativeexeclibdir glibjdir CREATE_JNI_HEADERS_TRUE CREATE_JNI_HEADERS_FALSE CREATE_GJDOC_PARSER_TRUE CREATE_GJDOC_PARSER_FALSE CREATE_WRAPPERS_TRUE CREATE_WRAPPERS_FALSE LN_S LIBTOOL SED FGREP GREP LD DUMPBIN ac_ct_DUMPBIN NM OBJDUMP ac_ct_OBJDUMP AR ac_ct_AR RANLIB ac_ct_RANLIB lt_ECHO DSYMUTIL ac_ct_DSYMUTIL NMEDIT ac_ct_NMEDIT LIPO ac_ct_LIPO OTOOL ac_ct_OTOOL OTOOL64 ac_ct_OTOOL64 CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP PERL COLLECTIONS_PREFIX LIBMAGIC LIBICONV LTLIBICONV WARNING_CFLAGS EXTRA_CFLAGS STRICT_WARNING_CFLAGS ERROR_CFLAGS PKG_CONFIG XML_CFLAGS XML_LIBS XSLT_CFLAGS XSLT_LIBS X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS GTK_CFLAGS GTK_LIBS FREETYPE2_CFLAGS FREETYPE2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS CAIRO_CFLAGS CAIRO_LIBS XTEST_LIBS GCONF_CFLAGS GCONF_LIBS GDK_CFLAGS GDK_LIBS GSTREAMER_CFLAGS GSTREAMER_LIBS GSTREAMER_BASE_CFLAGS GSTREAMER_BASE_LIBS GSTREAMER_PLUGINS_BASE_CFLAGS GSTREAMER_PLUGINS_BASE_LIBS GST_PLUGIN_LDFLAGS GSTREAMER_FILE_READER GSTREAMER_MIXER_PROVIDER QT_CFLAGS QT_LIBS MOC MOZILLA_CFLAGS MOZILLA_LIBS GLIB_CFLAGS GLIB_LIBS PLUGIN_DIR GMP_CFLAGS GMP_LIBS USER_JAVAH CLASSPATH_INCLUDES vm_classes MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBDEBUG INIT_LOAD_LIBRARY ECJ_JAR JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION REMOVE MKDIR CP DATE FIND ZIP JAR WITH_JAR_TRUE WITH_JAR_FALSE INSTALL_GLIBJ_ZIP_TRUE INSTALL_GLIBJ_ZIP_FALSE INSTALL_CLASS_FILES_TRUE INSTALL_CLASS_FILES_FALSE BUILD_CLASS_FILES_TRUE BUILD_CLASS_FILES_FALSE EXAMPLESDIR TOOLSDIR GJDOC CREATE_API_DOCS_TRUE CREATE_API_DOCS_FALSE JAY JAY_SKELETON REGEN_PARSERS_TRUE REGEN_PARSERS_FALSE USE_PREBUILT_GLIBJ_ZIP_TRUE USE_PREBUILT_GLIBJ_ZIP_FALSE PATH_TO_GLIBJ_ZIP JAVA uudecode JAVAC JAVAC_IS_GCJ GCJ_JAVAC_TRUE GCJ_JAVAC_FALSE ANTLR_JAR ANTLR ac_ct_ANTLR JAVAC_MEM_OPT USE_ESCHER_TRUE USE_ESCHER_FALSE PATH_TO_ESCHER ENABLE_LOCAL_SOCKETS_TRUE ENABLE_LOCAL_SOCKETS_FALSE DEFAULT_PREFS_PEER WANT_NATIVE_BIG_INTEGER CREATE_GMPBI_LIBRARY_TRUE CREATE_GMPBI_LIBRARY_FALSE LIBOBJS LTLIBOBJS'
++ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os JAVA_MAINTAINER_MODE_TRUE JAVA_MAINTAINER_MODE_FALSE GENINSRC_TRUE GENINSRC_FALSE multi_basedir INSTALL_BINARIES_TRUE INSTALL_BINARIES_FALSE LIBVERSION CLASSPATH_MODULE CLASSPATH_CONVENIENCE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CREATE_COLLECTIONS_TRUE CREATE_COLLECTIONS_FALSE CREATE_JNI_LIBRARIES_TRUE CREATE_JNI_LIBRARIES_FALSE CREATE_CORE_JNI_LIBRARIES_TRUE CREATE_CORE_JNI_LIBRARIES_FALSE CREATE_GCONF_PEER_LIBRARIES_TRUE CREATE_GCONF_PEER_LIBRARIES_FALSE CREATE_GSTREAMER_PEER_LIBRARIES_TRUE CREATE_GSTREAMER_PEER_LIBRARIES_FALSE default_toolkit CREATE_XMLJ_LIBRARY_TRUE CREATE_XMLJ_LIBRARY_FALSE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP CREATE_ALSA_LIBRARIES_TRUE CREATE_ALSA_LIBRARIES_FALSE CREATE_DSSI_LIBRARIES_TRUE CREATE_DSSI_LIBRARIES_FALSE CREATE_GTK_PEER_LIBRARIES_TRUE CREATE_GTK_PEER_LIBRARIES_FALSE CREATE_QT_PEER_LIBRARIES_TRUE CREATE_QT_PEER_LIBRARIES_FALSE CREATE_PLUGIN_TRUE CREATE_PLUGIN_FALSE CREATE_GJDOC_TRUE CREATE_GJDOC_FALSE target_noncanonical toolexecdir toolexecmainlibdir toolexeclibdir nativeexeclibdir glibjdir CREATE_JNI_HEADERS_TRUE CREATE_JNI_HEADERS_FALSE CREATE_GJDOC_PARSER_TRUE CREATE_GJDOC_PARSER_FALSE CREATE_WRAPPERS_TRUE CREATE_WRAPPERS_FALSE LN_S LIBTOOL SED FGREP GREP LD DUMPBIN ac_ct_DUMPBIN NM OBJDUMP ac_ct_OBJDUMP AR ac_ct_AR RANLIB ac_ct_RANLIB lt_ECHO DSYMUTIL ac_ct_DSYMUTIL NMEDIT ac_ct_NMEDIT LIPO ac_ct_LIPO OTOOL ac_ct_OTOOL OTOOL64 ac_ct_OTOOL64 CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP PERL COLLECTIONS_PREFIX LIBMAGIC LIBICONV LTLIBICONV WARNING_CFLAGS EXTRA_CFLAGS STRICT_WARNING_CFLAGS ERROR_CFLAGS PKG_CONFIG XML_CFLAGS XML_LIBS XSLT_CFLAGS XSLT_LIBS X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS GTK_CFLAGS GTK_LIBS FREETYPE2_CFLAGS FREETYPE2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS CAIRO_CFLAGS CAIRO_LIBS XTEST_LIBS GCONF_CFLAGS GCONF_LIBS GDK_CFLAGS GDK_LIBS GSTREAMER_CFLAGS GSTREAMER_LIBS GSTREAMER_BASE_CFLAGS GSTREAMER_BASE_LIBS GSTREAMER_PLUGINS_BASE_CFLAGS GSTREAMER_PLUGINS_BASE_LIBS GST_PLUGIN_LDFLAGS GSTREAMER_FILE_READER GSTREAMER_MIXER_PROVIDER QT_CFLAGS QT_LIBS MOC MOZILLA_CFLAGS MOZILLA_LIBS GLIB_CFLAGS GLIB_LIBS PLUGIN_DIR GMP_CFLAGS GMP_LIBS USER_JAVAH CLASSPATH_INCLUDES vm_classes MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBDEBUG INIT_LOAD_LIBRARY ECJ_JAR JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION REMOVE MKDIR CP DATE FIND ZIP JAR WITH_JAR_TRUE WITH_JAR_FALSE INSTALL_GLIBJ_ZIP_TRUE INSTALL_GLIBJ_ZIP_FALSE INSTALL_CLASS_FILES_TRUE INSTALL_CLASS_FILES_FALSE BUILD_CLASS_FILES_TRUE BUILD_CLASS_FILES_FALSE EXAMPLESDIR TOOLSDIR GJDOC CREATE_API_DOCS_TRUE CREATE_API_DOCS_FALSE JAY JAY_SKELETON REGEN_PARSERS_TRUE REGEN_PARSERS_FALSE USE_PREBUILT_GLIBJ_ZIP_TRUE USE_PREBUILT_GLIBJ_ZIP_FALSE PATH_TO_GLIBJ_ZIP JAVA uudecode JAVAC JAVAC_IS_GCJ GCJ_JAVAC_TRUE GCJ_JAVAC_FALSE ANTLR_JAR ANTLR ac_ct_ANTLR JAVAC_MEM_OPT USE_ESCHER_TRUE USE_ESCHER_FALSE PATH_TO_ESCHER ENABLE_LOCAL_SOCKETS_TRUE ENABLE_LOCAL_SOCKETS_FALSE DEFAULT_PREFS_PEER WANT_NATIVE_BIG_INTEGER CREATE_GMPBI_LIBRARY_TRUE CREATE_GMPBI_LIBRARY_FALSE LIBOBJS LTLIBOBJS'
+ ac_subst_files=''
+ ac_pwd=`pwd`
+ 
+@@ -1063,6 +1063,9 @@
+                           (disabled by --disable-gmp) default=yes
+   --disable-gjdoc         compile GJDoc (disabled by --disable-gjdoc)
+                           default=yes
++  --enable-version-specific-runtime-libs
++                          specify that runtime libraries should be installed
++                          in a compiler-specific directory
+   --enable-regen-headers  automatically regenerate JNI headers default=yes if
+                           headers don't exist
+   --enable-regen-gjdoc-parser
+@@ -4838,16 +4841,64 @@
+ fi
+ 
+ 
++# Check whether --enable-version-specific-runtime-libs or --disable-version-specific-runtime-libs was given.
++if test "${enable_version_specific_runtime_libs+set}" = set; then
++  enableval="$enable_version_specific_runtime_libs"
++  case "$enableval" in
++      yes) version_specific_libs=yes ;;
++      no)  version_specific_libs=no ;;
++      *)   { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable version-specific libs" >&5
++echo "$as_me: error: Unknown argument to enable/disable version-specific libs" >&2;}
++   { (exit 1); exit 1; }; };;
++     esac
++else
++  version_specific_libs=no
++
++fi;
++
++  case ${host_alias} in
++    "") host_noncanonical=${build_noncanonical} ;;
++    *) host_noncanonical=${host_alias} ;;
++  esac
++  case ${target_alias} in
++    "") target_noncanonical=${host_noncanonical} ;;
++    *) target_noncanonical=${target_alias} ;;
++  esac
+ 
+-  multi_os_directory=`$CC -print-multi-os-directory`
+-  case $multi_os_directory in
+-    .) toolexeclibdir=${libdir} ;; # Avoid trailing /.
+-    *) toolexeclibdir=${libdir}/${multi_os_directory} ;;
++
++  case ${version_specific_libs} in
++    yes)
++      # Need the gcc compiler version to know where to install libraries
++      # and header files if --enable-version-specific-runtime-libs option
++      # is selected.
++      includedir='$(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/include/'
++      toolexecdir='$(libdir)/gcc/$(target_noncanonical)'
++      toolexecmainlibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)'
++      toolexeclibdir=$toolexecmainlibdir
++      ;;
++    no)
++      if test -n "$with_cross_host" &&
++	 test x"$with_cross_host" != x"no"; then
++	# Install a library built with a cross compiler in tooldir, not libdir.
++	toolexecdir='$(exec_prefix)/$(target_noncanonical)'
++	toolexecmainlibdir='$(toolexecdir)/lib'
++      else
++	toolexecdir='$(libdir)/gcc-lib/$(target_noncanonical)'
++	toolexecmainlibdir='$(libdir)'
++      fi
++      multi_os_directory=`$CC -print-multi-os-directory`
++      case $multi_os_directory in
++	.) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
++	*) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
++      esac
++      ;;
+   esac
+ 
+ 
+ 
+ 
++
++
+ # Check whether --with-native-libdir or --without-native-libdir was given.
+ if test "${with_native_libdir+set}" = set; then
+   withval="$with_native_libdir"
+@@ -5753,13 +5804,13 @@
+ else
+   lt_cv_nm_interface="BSD nm"
+   echo "int some_variable = 0;" > conftest.$ac_ext
+-  (eval echo "\"\$as_me:5756: $ac_compile\"" >&5)
++  (eval echo "\"\$as_me:5807: $ac_compile\"" >&5)
+   (eval "$ac_compile" 2>conftest.err)
+   cat conftest.err >&5
+-  (eval echo "\"\$as_me:5759: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
++  (eval echo "\"\$as_me:5810: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+   cat conftest.err >&5
+-  (eval echo "\"\$as_me:5762: output\"" >&5)
++  (eval echo "\"\$as_me:5813: output\"" >&5)
+   cat conftest.out >&5
+   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+     lt_cv_nm_interface="MS dumpbin"
+@@ -6905,7 +6956,7 @@
+   ;;
+ *-*-irix6*)
+   # Find out which ABI we are using.
+-  echo '#line 6908 "configure"' > conftest.$ac_ext
++  echo '#line 6959 "configure"' > conftest.$ac_ext
+   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+@@ -8191,11 +8242,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:8194: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:8245: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:8198: \$? = $ac_status" >&5
++   echo "$as_me:8249: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -8530,11 +8581,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:8533: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:8584: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:8537: \$? = $ac_status" >&5
++   echo "$as_me:8588: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -8635,11 +8686,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:8638: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:8689: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:8642: \$? = $ac_status" >&5
++   echo "$as_me:8693: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -8690,11 +8741,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:8693: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:8744: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:8697: \$? = $ac_status" >&5
++   echo "$as_me:8748: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -11557,7 +11608,7 @@
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 11560 "configure"
++#line 11611 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -11653,7 +11704,7 @@
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 11656 "configure"
++#line 11707 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -16084,11 +16135,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:16087: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:16138: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:16091: \$? = $ac_status" >&5
++   echo "$as_me:16142: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -16183,11 +16234,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:16186: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:16237: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:16190: \$? = $ac_status" >&5
++   echo "$as_me:16241: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -16235,11 +16286,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:16238: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:16289: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:16242: \$? = $ac_status" >&5
++   echo "$as_me:16293: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -29270,7 +29321,7 @@
+ if uudecode$EXEEXT Test.uue; then
+         ac_cv_prog_uudecode_base64=yes
+ else
+-        echo "configure: 29273: uudecode had trouble decoding base 64 file 'Test.uue'" >&5
++        echo "configure: 29324: uudecode had trouble decoding base 64 file 'Test.uue'" >&5
+         echo "configure: failed file was:" >&5
+         cat Test.uue >&5
+         ac_cv_prog_uudecode_base64=no
+@@ -29417,7 +29468,7 @@
+ JAVA_TEST=Object.java
+ CLASS_TEST=Object.class
+ cat << \EOF > $JAVA_TEST
+-/* #line 29420 "configure" */
++/* #line 29471 "configure" */
+ package java.lang;
+ 
+ public class Object
+@@ -29466,7 +29517,7 @@
+ CLASS_TEST=Test.class
+ TEST=Test
+ cat << \EOF > $JAVA_TEST
+-/* [#]line 29469 "configure" */
++/* [#]line 29520 "configure" */
+ public class Test {
+ public static void main (String args[]) {
+         System.exit (0);
+@@ -29786,7 +29837,7 @@
+ JAVA_TEST=Object.java
+ CLASS_TEST=Object.class
+ cat << \EOF > $JAVA_TEST
+-/* #line 29789 "configure" */
++/* #line 29840 "configure" */
+ package java.lang;
+ 
+ public class Object
+@@ -29827,7 +29878,7 @@
+   JAVA_TEST=Test.java
+   CLASS_TEST=Test.class
+   cat << \EOF > $JAVA_TEST
+-  /* #line 29830 "configure" */
++  /* #line 29881 "configure" */
+   public class Test
+   {
+     public static void main(String args)
+@@ -31681,6 +31732,9 @@
+ s,@CREATE_PLUGIN_FALSE@,$CREATE_PLUGIN_FALSE,;t t
+ s,@CREATE_GJDOC_TRUE@,$CREATE_GJDOC_TRUE,;t t
+ s,@CREATE_GJDOC_FALSE@,$CREATE_GJDOC_FALSE,;t t
++s,@target_noncanonical@,$target_noncanonical,;t t
++s,@toolexecdir@,$toolexecdir,;t t
++s,@toolexecmainlibdir@,$toolexecmainlibdir,;t t
+ s,@toolexeclibdir@,$toolexeclibdir,;t t
+ s,@nativeexeclibdir@,$nativeexeclibdir,;t t
+ s,@glibjdir@,$glibjdir,;t t
+--- a/src/libjava/classpath/configure.ac
++++ b/src/libjava/classpath/configure.ac
+@@ -316,6 +316,16 @@
+ dnl so that we can refer to the multilib installation directories from
+ dnl classpath's build files.
+ dnl -----------------------------------------------------------
++AC_ARG_ENABLE(version-specific-runtime-libs,
++  AS_HELP_STRING([--enable-version-specific-runtime-libs],    
++                 [specify that runtime libraries should be installed in a compiler-specific directory]),
++    [case "$enableval" in
++      yes) version_specific_libs=yes ;;
++      no)  version_specific_libs=no ;;
++      *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
++     esac],
++    [version_specific_libs=no]
++)
+ CLASSPATH_TOOLEXECLIBDIR
+ 
+ dnl -----------------------------------------------------------
+--- a/src/libjava/classpath/doc/Makefile.in
++++ b/src/libjava/classpath/doc/Makefile.in
+@@ -357,9 +357,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ SUBDIRS = api
+--- a/src/libjava/classpath/doc/api/Makefile.in
++++ b/src/libjava/classpath/doc/api/Makefile.in
+@@ -334,9 +334,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ @CREATE_API_DOCS_TRUE@noinst_DATA = html
+--- a/src/libjava/classpath/examples/Makefile.in
++++ b/src/libjava/classpath/examples/Makefile.in
+@@ -343,9 +343,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ GLIBJ_CLASSPATH = '$(top_builddir)/lib/glibj.zip:$(top_builddir)/lib'
+--- a/src/libjava/classpath/external/Makefile.in
++++ b/src/libjava/classpath/external/Makefile.in
+@@ -341,9 +341,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ SUBDIRS = sax w3c_dom relaxngDatatype jsr166
+--- a/src/libjava/classpath/external/jsr166/Makefile.in
++++ b/src/libjava/classpath/external/jsr166/Makefile.in
+@@ -332,9 +332,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ EXTRA_DIST = IMPORTING \
+--- a/src/libjava/classpath/external/relaxngDatatype/Makefile.in
++++ b/src/libjava/classpath/external/relaxngDatatype/Makefile.in
+@@ -332,9 +332,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ EXTRA_DIST = README.txt \
+--- a/src/libjava/classpath/external/sax/Makefile.in
++++ b/src/libjava/classpath/external/sax/Makefile.in
+@@ -332,9 +332,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ EXTRA_DIST = README \
+--- a/src/libjava/classpath/external/w3c_dom/Makefile.in
++++ b/src/libjava/classpath/external/w3c_dom/Makefile.in
+@@ -332,9 +332,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ EXTRA_DIST = README \
+--- a/src/libjava/classpath/include/Makefile.in
++++ b/src/libjava/classpath/include/Makefile.in
+@@ -333,9 +333,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ @CREATE_JNI_HEADERS_FALSE@DISTCLEANFILES = jni_md.h config-int.h
+--- a/src/libjava/classpath/lib/Makefile.in
++++ b/src/libjava/classpath/lib/Makefile.in
+@@ -337,9 +337,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ JAVA_DEPEND = java.dep
+--- a/src/libjava/classpath/m4/acinclude.m4
++++ b/src/libjava/classpath/m4/acinclude.m4
+@@ -247,11 +247,45 @@
+ dnl -----------------------------------------------------------
+ AC_DEFUN([CLASSPATH_TOOLEXECLIBDIR],
+ [
+-  multi_os_directory=`$CC -print-multi-os-directory`
+-  case $multi_os_directory in
+-    .) toolexeclibdir=${libdir} ;; # Avoid trailing /.
+-    *) toolexeclibdir=${libdir}/${multi_os_directory} ;;
++  case ${host_alias} in
++    "") host_noncanonical=${build_noncanonical} ;;
++    *) host_noncanonical=${host_alias} ;;
+   esac
++  case ${target_alias} in
++    "") target_noncanonical=${host_noncanonical} ;;
++    *) target_noncanonical=${target_alias} ;;
++  esac
++  AC_SUBST(target_noncanonical)
++
++  case ${version_specific_libs} in
++    yes)
++      # Need the gcc compiler version to know where to install libraries
++      # and header files if --enable-version-specific-runtime-libs option
++      # is selected.
++      includedir='$(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/include/'
++      toolexecdir='$(libdir)/gcc/$(target_noncanonical)'
++      toolexecmainlibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)'
++      toolexeclibdir=$toolexecmainlibdir
++      ;;
++    no)
++      if test -n "$with_cross_host" &&
++	 test x"$with_cross_host" != x"no"; then
++	# Install a library built with a cross compiler in tooldir, not libdir.
++	toolexecdir='$(exec_prefix)/$(target_noncanonical)'
++	toolexecmainlibdir='$(toolexecdir)/lib'
++      else
++	toolexecdir='$(libdir)/gcc-lib/$(target_noncanonical)'
++	toolexecmainlibdir='$(libdir)'
++      fi
++      multi_os_directory=`$CC -print-multi-os-directory`
++      case $multi_os_directory in
++	.) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
++	*) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
++      esac
++      ;;
++  esac
++  AC_SUBST(toolexecdir)
++  AC_SUBST(toolexecmainlibdir)
+   AC_SUBST(toolexeclibdir)
+ ])
+ 
+--- a/src/libjava/classpath/native/Makefile.in
++++ b/src/libjava/classpath/native/Makefile.in
+@@ -340,9 +340,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ @CREATE_JNI_LIBRARIES_TRUE@JNIDIR = jni
+--- a/src/libjava/classpath/native/fdlibm/Makefile.in
++++ b/src/libjava/classpath/native/fdlibm/Makefile.in
+@@ -359,9 +359,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ noinst_LTLIBRARIES = libfdlibm.la 
+--- a/src/libjava/classpath/native/jawt/Makefile.in
++++ b/src/libjava/classpath/native/jawt/Makefile.in
+@@ -359,9 +359,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ nativeexeclib_LTLIBRARIES = libjawt.la
+--- a/src/libjava/classpath/native/jni/Makefile.in
++++ b/src/libjava/classpath/native/jni/Makefile.in
+@@ -340,9 +340,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ @CREATE_CORE_JNI_LIBRARIES_TRUE@JNIDIRS = native-lib java-io java-lang java-net java-nio java-util
+--- a/src/libjava/classpath/native/jni/classpath/Makefile.in
++++ b/src/libjava/classpath/native/jni/classpath/Makefile.in
+@@ -350,9 +350,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ 
+--- a/src/libjava/classpath/native/jni/gconf-peer/Makefile.in
++++ b/src/libjava/classpath/native/jni/gconf-peer/Makefile.in
+@@ -359,9 +359,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ nativeexeclib_LTLIBRARIES = libgconfpeer.la
+--- a/src/libjava/classpath/native/jni/gstreamer-peer/Makefile.in
++++ b/src/libjava/classpath/native/jni/gstreamer-peer/Makefile.in
+@@ -361,9 +361,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ nativeexeclib_LTLIBRARIES = libgstreamerpeer.la
+--- a/src/libjava/classpath/native/jni/gtk-peer/Makefile.in
++++ b/src/libjava/classpath/native/jni/gtk-peer/Makefile.in
+@@ -397,9 +397,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ nativeexeclib_LTLIBRARIES = libgtkpeer.la
+--- a/src/libjava/classpath/native/jni/java-io/Makefile.in
++++ b/src/libjava/classpath/native/jni/java-io/Makefile.in
+@@ -361,9 +361,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ nativeexeclib_LTLIBRARIES = libjavaio.la 
+--- a/src/libjava/classpath/native/jni/java-lang/Makefile.in
++++ b/src/libjava/classpath/native/jni/java-lang/Makefile.in
+@@ -375,9 +375,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ nativeexeclib_LTLIBRARIES = libjavalang.la libjavalangreflect.la libjavalangmanagement.la
+--- a/src/libjava/classpath/native/jni/java-math/Makefile.in
++++ b/src/libjava/classpath/native/jni/java-math/Makefile.in
+@@ -359,9 +359,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ nativeexeclib_LTLIBRARIES = libjavamath.la
+--- a/src/libjava/classpath/native/jni/java-net/Makefile.in
++++ b/src/libjava/classpath/native/jni/java-net/Makefile.in
+@@ -371,9 +371,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ nativeexeclib_LTLIBRARIES = libjavanet.la
+--- a/src/libjava/classpath/native/jni/java-nio/Makefile.in
++++ b/src/libjava/classpath/native/jni/java-nio/Makefile.in
+@@ -369,9 +369,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ nativeexeclib_LTLIBRARIES = libjavanio.la
+--- a/src/libjava/classpath/native/jni/java-util/Makefile.in
++++ b/src/libjava/classpath/native/jni/java-util/Makefile.in
+@@ -358,9 +358,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ nativeexeclib_LTLIBRARIES = libjavautil.la
+--- a/src/libjava/classpath/native/jni/midi-alsa/Makefile.in
++++ b/src/libjava/classpath/native/jni/midi-alsa/Makefile.in
+@@ -361,9 +361,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ nativeexeclib_LTLIBRARIES = libgjsmalsa.la 
+--- a/src/libjava/classpath/native/jni/midi-dssi/Makefile.in
++++ b/src/libjava/classpath/native/jni/midi-dssi/Makefile.in
+@@ -361,9 +361,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ nativeexeclib_LTLIBRARIES = libgjsmdssi.la 
+--- a/src/libjava/classpath/native/jni/native-lib/Makefile.in
++++ b/src/libjava/classpath/native/jni/native-lib/Makefile.in
+@@ -350,9 +350,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ noinst_LTLIBRARIES = libclasspathnative.la
+--- a/src/libjava/classpath/native/jni/qt-peer/Makefile.in
++++ b/src/libjava/classpath/native/jni/qt-peer/Makefile.in
+@@ -376,9 +376,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ noinst_LTLIBRARIES = libqtpeer.la
+--- a/src/libjava/classpath/native/jni/xmlj/Makefile.in
++++ b/src/libjava/classpath/native/jni/xmlj/Makefile.in
+@@ -360,9 +360,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ nativeexeclib_LTLIBRARIES = libxmlj.la
+--- a/src/libjava/classpath/native/plugin/Makefile.in
++++ b/src/libjava/classpath/native/plugin/Makefile.in
+@@ -358,9 +358,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ nativeexeclib_LTLIBRARIES = libgcjwebplugin.la
+--- a/src/libjava/classpath/resource/Makefile.in
++++ b/src/libjava/classpath/resource/Makefile.in
+@@ -343,9 +343,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ logging_DATA = java/util/logging/logging.properties
+--- a/src/libjava/classpath/scripts/Makefile.in
++++ b/src/libjava/classpath/scripts/Makefile.in
+@@ -333,9 +333,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ EXTRA_DIST = generate-locale-list.sh import-cacerts.sh
+--- a/src/libjava/classpath/tools/Makefile.in
++++ b/src/libjava/classpath/tools/Makefile.in
+@@ -448,9 +448,12 @@
+ target = @target@
+ target_alias = @target_alias@
+ target_cpu = @target_cpu@
++target_noncanonical = @target_noncanonical@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
++toolexecdir = @toolexecdir@
+ toolexeclibdir = @toolexeclibdir@
++toolexecmainlibdir = @toolexecmainlibdir@
+ uudecode = @uudecode@
+ vm_classes = @vm_classes@
+ @CREATE_GJDOC_TRUE@gjdoc_gendir = ${top_srcdir}/tools/generated
+--- a/src/libjava/configure
++++ b/src/libjava/configure
+@@ -26568,10 +26568,10 @@
+ multi_os_directory=`$CC -print-multi-os-directory`
+ case $multi_os_directory in
+   .)
+-   dbexecdir='$(libdir)/'$gcjsubdir # Avoid /.
++   dbexecdir='$(toolexeclibdir)/'$gcjsubdir # Avoid /.
+    ;;
+   *)
+-   dbexecdir='$(libdir)/'$multi_os_directory/$gcjsubdir
++   dbexecdir='$(toolexeclibdir)/'$multi_os_directory/$gcjsubdir
+    ;;
+ esac
+ 
+@@ -27667,6 +27667,7 @@
+ 
+ # See if we support thread-local storage.
+ 
++
+    # Check whether --enable-tls or --disable-tls was given.
+ if test "${enable_tls+set}" = set; then
+   enableval="$enable_tls"
+@@ -27719,10 +27720,96 @@
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
++  chktls_save_LDFLAGS="$LDFLAGS"
++	  	  	  case $host in
++	    *-*-linux*)
++	      LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
++	      ;;
++	  esac
++	  chktls_save_CFLAGS="$CFLAGS"
++	  CFLAGS="-fPIC $CFLAGS"
++	  	  if test x$gcc_no_link = xyes; then
++  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
++echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
++   { (exit 1); exit 1; }; }
++fi
++cat >conftest.$ac_ext <<_ACEOF
++int f() { return 0; }
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++  (eval $ac_link) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest$ac_exeext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  if test x$gcc_no_link = xyes; then
++  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
++echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
++   { (exit 1); exit 1; }; }
++fi
++cat >conftest.$ac_ext <<_ACEOF
++__thread int a; int b; int f() { return a = b; }
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++  (eval $ac_link) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest$ac_exeext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
+   gcc_cv_have_tls=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
++
++gcc_cv_have_tls=no
++fi
++rm -f conftest.err conftest.$ac_objext \
++      conftest$ac_exeext conftest.$ac_ext
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++gcc_cv_have_tls=yes
++fi
++rm -f conftest.err conftest.$ac_objext \
++      conftest$ac_exeext conftest.$ac_ext
++	  CFLAGS="$chktls_save_CFLAGS"
++	  LDFLAGS="$chktls_save_LDFLAGS"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ gcc_cv_have_tls=no
+ fi
+--- a/src/libjava/configure.ac
++++ b/src/libjava/configure.ac
+@@ -1459,6 +1459,7 @@
+ AC_SUBST(EXCEPTIONSPEC)
+ AC_SUBST(BACKTRACESPEC)
+ AC_SUBST(IEEESPEC)
++AC_SUBST(ATOMICSPEC)
+ 
+ AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes)
+ AM_CONDITIONAL(ENABLE_SHARED, test "$enable_shared" = yes)
+@@ -1512,10 +1513,10 @@
+ multi_os_directory=`$CC -print-multi-os-directory`
+ case $multi_os_directory in
+   .)
+-   dbexecdir='$(libdir)/'$gcjsubdir # Avoid /.
++   dbexecdir='$(toolexeclibdir)/'$gcjsubdir # Avoid /.
+    ;;
+   *)
+-   dbexecdir='$(libdir)/'$multi_os_directory/$gcjsubdir
++   dbexecdir='$(toolexeclibdir)/'$multi_os_directory/$gcjsubdir
+    ;;
+ esac
+ AC_SUBST(dbexecdir)
+--- a/src/libjava/configure.host
++++ b/src/libjava/configure.host
+@@ -69,6 +69,7 @@
+ EXCEPTIONSPEC=-fnon-call-exceptions
+ CHECKREFSPEC=
+ BACKTRACESPEC=
++ATOMICSPEC=
+ 
+ # This case statement supports per-CPU defaults.
+ case "${host}" in
+@@ -88,6 +89,7 @@
+ 	sysdeps_dir=arm
+ 	fallback_backtrace_h=sysdep/arm/backtrace.h
+ 	libgcj_cxxflags=-Wno-abi
++	ATOMICSPEC=-fuse-atomic-builtins
+ 	;;
+   mips-tx39-*|mipstx39-unknown-*)
+ 	libgcj_flags="${libgcj_flags} -G 0"
+--- a/src/libjava/libgcj.spec.in
++++ b/src/libjava/libgcj.spec.in
+@@ -9,4 +9,4 @@
+ %rename lib liborig
+ *lib: @LD_START_STATIC_SPEC@ @LIBGCJ_SPEC@ @LD_FINISH_STATIC_SPEC@ -lm @LIBICONV@ @GCSPEC@ @THREADSPEC@ @ZLIBSPEC@ @SYSTEMSPEC@ %(libgcc) @LIBSTDCXXSPEC@ %(liborig)
+ 
+-*jc1: @HASH_SYNC_SPEC@ @DIVIDESPEC@ @CHECKREFSPEC@ @JC1GCSPEC@ @EXCEPTIONSPEC@ @BACKTRACESPEC@ @IEEESPEC@ -fkeep-inline-functions
++*jc1: @HASH_SYNC_SPEC@ @DIVIDESPEC@ @CHECKREFSPEC@ @JC1GCSPEC@ @EXCEPTIONSPEC@ @BACKTRACESPEC@ @IEEESPEC@ @ATOMICSPEC@ -fkeep-inline-functions
+--- a/src/libjava/sysdep/arm/locks.h
++++ b/src/libjava/sysdep/arm/locks.h
+@@ -13,6 +13,59 @@
+ 
+ typedef size_t obj_addr_t;	/* Integer type big enough for object	*/
+ 				/* address.				*/
++#if (__ARM_EABI__ && __linux)
++
++// Atomically replace *addr by new_val if it was initially equal to old.
++// Return true if the comparison succeeded.
++// Assumed to have acquire semantics, i.e. later memory operations
++// cannot execute before the compare_and_swap finishes.
++inline static bool
++compare_and_swap(volatile obj_addr_t *addr,
++                 obj_addr_t old,
++                 obj_addr_t new_val)
++{
++  return __sync_bool_compare_and_swap(addr, old, new_val);
++}
++
++// Set *addr to new_val with release semantics, i.e. making sure
++// that prior loads and stores complete before this
++// assignment.
++inline static void
++release_set(volatile obj_addr_t *addr, obj_addr_t new_val)
++{
++  __sync_synchronize();
++  *(addr) = new_val;
++}
++
++// Compare_and_swap with release semantics instead of acquire semantics.
++// On many architecture, the operation makes both guarantees, so the
++// implementation can be the same.
++inline static bool
++compare_and_swap_release(volatile obj_addr_t *addr,
++			 obj_addr_t old,
++			 obj_addr_t new_val)
++{
++  return __sync_bool_compare_and_swap(addr, old, new_val);
++}
++
++// Ensure that subsequent instructions do not execute on stale
++// data that was loaded from memory before the barrier.
++// On X86, the hardware ensures that reads are properly ordered.
++inline static void
++read_barrier()
++{
++  __sync_synchronize();
++}
++
++// Ensure that prior stores to memory are completed with respect to other
++// processors.
++inline static void
++write_barrier()
++{
++  __sync_synchronize();
++}
++
++#else
+ 
+ /* Atomic compare and exchange.  These sequences are not actually
+    atomic; there is a race if *ADDR != OLD_VAL and we are preempted
+@@ -54,8 +107,8 @@
+ 
+ inline static bool
+ compare_and_swap_release(volatile obj_addr_t *addr,
+-		  				     obj_addr_t old,
+-						     obj_addr_t new_val)
++			 obj_addr_t old,
++			 obj_addr_t new_val)
+ {
+   return compare_and_swap(addr, old, new_val);
+ }
+@@ -77,3 +130,4 @@
+ }
+ 
+ #endif
++#endif
+--- a/src/libmudflap/configure
++++ b/src/libmudflap/configure
+@@ -12740,6 +12740,7 @@
+ 
+ # See if we support thread-local storage.
+ 
++
+    # Check whether --enable-tls or --disable-tls was given.
+ if test "${enable_tls+set}" = set; then
+   enableval="$enable_tls"
+@@ -12787,10 +12788,86 @@
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
++  chktls_save_LDFLAGS="$LDFLAGS"
++	  	  	  case $host in
++	    *-*-linux*)
++	      LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
++	      ;;
++	  esac
++	  chktls_save_CFLAGS="$CFLAGS"
++	  CFLAGS="-fPIC $CFLAGS"
++	  	  cat >conftest.$ac_ext <<_ACEOF
++int f() { return 0; }
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++  (eval $ac_link) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest$ac_exeext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  cat >conftest.$ac_ext <<_ACEOF
++__thread int a; int b; int f() { return a = b; }
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++  (eval $ac_link) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest$ac_exeext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
+   gcc_cv_have_tls=yes
+ else
+   echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
++
++gcc_cv_have_tls=no
++fi
++rm -f conftest.err conftest.$ac_objext \
++      conftest$ac_exeext conftest.$ac_ext
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++gcc_cv_have_tls=yes
++fi
++rm -f conftest.err conftest.$ac_objext \
++      conftest$ac_exeext conftest.$ac_ext
++	  CFLAGS="$chktls_save_CFLAGS"
++	  LDFLAGS="$chktls_save_LDFLAGS"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ gcc_cv_have_tls=no
+ fi
+--- a/src/libstdc++-v3/acinclude.m4
++++ b/src/libstdc++-v3/acinclude.m4
+@@ -2429,8 +2429,7 @@
+ dnl that are used should be checked.
+ dnl
+ dnl Note:
+-dnl libgomp and libgfortran do this with a link test, instead of an asm test.
+-dnl see: CHECK_SYNC_FETCH_AND_ADD
++dnl libgomp and libgfortran use a link test, see CHECK_SYNC_FETCH_AND_ADD.
+ dnl
+ dnl Defines:
+ dnl  _GLIBCXX_ATOMIC_BUILTINS_1 
+@@ -2442,12 +2441,120 @@
+   AC_LANG_SAVE
+   AC_LANG_CPLUSPLUS
+   old_CXXFLAGS="$CXXFLAGS"
+-  
++
++  # Do link tests if possible, instead asm tests, limited to some platforms
++  atomic_builtins_link_tests=no
++  if test x$gcc_no_link != xyes; then
++    # Can do link tests. Limit to some tested platforms
++    case "$host" in
++      *-*-linux* | *-*-kfreebsd*-gnu | *-*-gnu*)
++	atomic_builtins_link_tests=yes
++        ;;
++    esac
++  fi
++
++  if test x$atomic_builtins_link_tests = xyes; then
++
++  # Do link tests.
++
++  CXXFLAGS="$CXXFLAGS -fno-exceptions"
++
++  AC_MSG_CHECKING([for atomic builtins for bool])
++  AC_CACHE_VAL(glibcxx_cv_atomic_bool, [
++    AC_TRY_LINK(
++      [ ],
++      [typedef bool atomic_type;
++       atomic_type c1;
++       atomic_type c2;
++       const atomic_type c3(0);
++       __sync_fetch_and_add(&c1, c2);
++       __sync_val_compare_and_swap(&c1, c3, c2);
++       __sync_lock_test_and_set(&c1, c3);
++       __sync_lock_release(&c1);
++       __sync_synchronize();],
++      [glibcxx_cv_atomic_bool=yes],
++      [glibcxx_cv_atomic_bool=no])
++  ])    
++  if test $glibcxx_cv_atomic_bool = yes; then
++    AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_1, 1,
++      [Define if builtin atomic operations for bool are supported on this host.])
++  fi
++  AC_MSG_RESULT($glibcxx_cv_atomic_bool)
++
++  AC_MSG_CHECKING([for atomic builtins for short])
++  AC_CACHE_VAL(glibcxx_cv_atomic_short, [
++    AC_TRY_LINK(
++      [ ],
++      [typedef short atomic_type;
++       atomic_type c1;
++       atomic_type c2;
++       const atomic_type c3(0);
++       __sync_fetch_and_add(&c1, c2);
++       __sync_val_compare_and_swap(&c1, c3, c2);
++       __sync_lock_test_and_set(&c1, c3);
++       __sync_lock_release(&c1);
++       __sync_synchronize();],
++      [glibcxx_cv_atomic_short=yes],
++      [glibcxx_cv_atomic_short=no])
++  ])    
++  if test $glibcxx_cv_atomic_short = yes; then
++    AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_2, 1,
++      [Define if builtin atomic operations for short are supported on this host.])
++  fi
++  AC_MSG_RESULT($glibcxx_cv_atomic_short)
++
++  AC_MSG_CHECKING([for atomic builtins for int])
++  AC_CACHE_VAL(glibcxx_cv_atomic_int, [
++    AC_TRY_LINK(
++      [ ],
++      [typedef int atomic_type;
++       atomic_type c1;
++       atomic_type c2;
++       const atomic_type c3(0);
++       __sync_fetch_and_add(&c1, c2);
++       __sync_val_compare_and_swap(&c1, c3, c2);
++       __sync_lock_test_and_set(&c1, c3);
++       __sync_lock_release(&c1);
++       __sync_synchronize();],
++      [glibcxx_cv_atomic_int=yes],
++      [glibcxx_cv_atomic_int=no])
++  ])    
++  if test $glibcxx_cv_atomic_int = yes; then
++    AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_4, 1,
++      [Define if builtin atomic operations for int are supported on this host.])
++  fi
++  AC_MSG_RESULT($glibcxx_cv_atomic_int)
++
++  AC_MSG_CHECKING([for atomic builtins for long long])
++  AC_CACHE_VAL(glibcxx_cv_atomic_long_long, [
++    AC_TRY_LINK(
++      [ ],
++      [typedef long long atomic_type;
++       atomic_type c1;
++       atomic_type c2;
++       const atomic_type c3(0);
++       __sync_fetch_and_add(&c1, c2);
++       __sync_val_compare_and_swap(&c1, c3, c2);
++       __sync_lock_test_and_set(&c1, c3);
++       __sync_lock_release(&c1);
++       __sync_synchronize();],
++      [glibcxx_cv_atomic_long_long=yes],
++      [glibcxx_cv_atomic_long_long=no])
++  ])    
++  if test $glibcxx_cv_atomic_long_long = yes; then
++    AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_8, 1,
++      [Define if builtin atomic operations for long long are supported on this host.])
++  fi
++  AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
++
++  else
++
++  # Do asm tests.
++
+   # Compile unoptimized.
+   CXXFLAGS='-O0 -S'
+ 
+-  # Fake what AC_TRY_COMPILE does, without linking as this is
+-  # unnecessary for a builtins test.
++  # Fake what AC_TRY_COMPILE does.
+ 
+     cat > conftest.$ac_ext << EOF
+ [#]line __oline__ "configure"
+@@ -2469,14 +2576,14 @@
+     AC_MSG_CHECKING([for atomic builtins for bool])
+     if AC_TRY_EVAL(ac_compile); then
+       if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+-        enable_atomic_builtinsb=no
++        glibcxx_cv_atomic_bool=no
+       else
+       AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_1, 1,
+       [Define if builtin atomic operations for bool are supported on this host.])
+-        enable_atomic_builtinsb=yes
++        glibcxx_cv_atomic_bool=yes
+       fi
+     fi
+-    AC_MSG_RESULT($enable_atomic_builtinsb)
++    AC_MSG_RESULT($glibcxx_cv_atomic_bool)
+     rm -f conftest*
+ 
+     cat > conftest.$ac_ext << EOF
+@@ -2499,14 +2606,14 @@
+     AC_MSG_CHECKING([for atomic builtins for short])
+     if AC_TRY_EVAL(ac_compile); then
+       if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+-        enable_atomic_builtinss=no
++        glibcxx_cv_atomic_short=no
+       else
+       AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_2, 1,
+       [Define if builtin atomic operations for short are supported on this host.])
+-        enable_atomic_builtinss=yes
++        glibcxx_cv_atomic_short=yes
+       fi
+     fi
+-    AC_MSG_RESULT($enable_atomic_builtinss)
++    AC_MSG_RESULT($glibcxx_cv_atomic_short)
+     rm -f conftest*
+ 
+     cat > conftest.$ac_ext << EOF
+@@ -2530,14 +2637,14 @@
+     AC_MSG_CHECKING([for atomic builtins for int])
+     if AC_TRY_EVAL(ac_compile); then
+       if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+-        enable_atomic_builtinsi=no
++        glibcxx_cv_atomic_int=no
+       else
+       AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_4, 1,
+         [Define if builtin atomic operations for int are supported on this host.])
+-        enable_atomic_builtinsi=yes
++        glibcxx_cv_atomic_int=yes
+       fi
+     fi
+-    AC_MSG_RESULT($enable_atomic_builtinsi)
++    AC_MSG_RESULT($glibcxx_cv_atomic_int)
+     rm -f conftest*
+ 
+     cat > conftest.$ac_ext << EOF
+@@ -2560,22 +2667,23 @@
+     AC_MSG_CHECKING([for atomic builtins for long long])
+     if AC_TRY_EVAL(ac_compile); then
+       if grep __sync_ conftest.s >/dev/null 2>&1 ; then
+-        enable_atomic_builtinsll=no
++        glibcxx_cv_atomic_long_long=no
+       else
+       AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS_8, 1,
+       [Define if builtin atomic operations for long long are supported on this host.])
+-        enable_atomic_builtinsll=yes
++        glibcxx_cv_atomic_long_long=yes
+       fi
+     fi
+-    AC_MSG_RESULT($enable_atomic_builtinsll)
++    AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
+     rm -f conftest*
+ 
++  fi
+ 
+   CXXFLAGS="$old_CXXFLAGS"
+   AC_LANG_RESTORE
+ 
+   # Set atomicity_dir to builtins if either of above tests pass.
+-  if test $enable_atomic_builtinsi = yes || test $enable_atomic_builtinsb = yes ; then
++  if test $glibcxx_cv_atomic_int = yes || test $glibcxx_cv_atomic_bool = yes ; then
+     atomicity_dir=cpu/generic/atomicity_builtins
+   fi
+ 
+--- a/src/libstdc++-v3/config/cpu/sh/atomicity.h
++++ b/src/libstdc++-v3/config/cpu/sh/atomicity.h
+@@ -25,47 +25,48 @@
+ 
+ #ifdef __SH4A__
+ 
+-#ifndef _GLIBCXX_ATOMICITY_H
+-#define _GLIBCXX_ATOMICITY_H	1
++#include <ext/atomicity.h>
+ 
+-typedef int _Atomic_word;
++_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
+ 
+-static inline _Atomic_word
+-__attribute__ ((__unused__))
+-__exchange_and_add (volatile _Atomic_word* __mem, int __val)
+-{
+-  _Atomic_word __result;
+-
+-  __asm__ __volatile__
+-    ("0:\n"
+-     "\tmovli.l\t@%2,r0\n"
+-     "\tmov\tr0,%1\n"
+-     "\tadd\t%3,r0\n"
+-     "\tmovco.l\tr0,@%2\n"
+-     "\tbf\t0b"
+-     : "+m" (*__mem), "=r" (__result)
+-     : "r" (__mem), "rI08" (__val)
+-     : "r0");
+-
+-  return __result;
+-}
+-
+-
+-static inline void
+-__attribute__ ((__unused__))
+-__atomic_add (volatile _Atomic_word* __mem, int __val)
+-{
+-  asm("0:\n"
+-      "\tmovli.l\t@%1,r0\n"
+-      "\tadd\t%2,r0\n"
+-      "\tmovco.l\tr0,@%1\n"
+-      "\tbf\t0b"
+-      : "+m" (*__mem)
+-      : "r" (__mem), "rI08" (__val)
+-      : "r0");
+-}
++  typedef int _Atomic_word;
+ 
+-#endif
++  _Atomic_word
++  __attribute__ ((__unused__))
++  __exchange_and_add (volatile _Atomic_word* __mem, int __val)
++  {
++    _Atomic_word __result;
++
++    __asm__ __volatile__
++      ("0:\n"
++       "\tmovli.l\t@%2,r0\n"
++       "\tmov\tr0,%1\n"
++       "\tadd\t%3,r0\n"
++       "\tmovco.l\tr0,@%2\n"
++       "\tbf\t0b"
++       : "+m" (*__mem), "=&r" (__result)
++       : "r" (__mem), "rI08" (__val)
++       : "r0");
++
++    return __result;
++  }
++
++
++  void
++  __attribute__ ((__unused__))
++  __atomic_add (volatile _Atomic_word* __mem, int __val)
++  {
++    asm("0:\n"
++	"\tmovli.l\t@%1,r0\n"
++	"\tadd\t%2,r0\n"
++	"\tmovco.l\tr0,@%1\n"
++	"\tbf\t0b"
++	: "+m" (*__mem)
++	: "r" (__mem), "rI08" (__val)
++	: "r0");
++  }
++
++_GLIBCXX_END_NAMESPACE
+ 
+ #else /* !__SH4A__ */
+ 
+--- a/src/libstdc++-v3/config/os/nucleus/arm-eabi-extra.ver
++++ b/src/libstdc++-v3/config/os/nucleus/arm-eabi-extra.ver
+@@ -0,0 +1,18 @@
++# Appended to version file.
++
++CXXABI_ARM_1.3.3 {
++   # ARM ABI helper functions provided in libsupc++.
++   __aeabi_atexit;
++   __aeabi_vec_ctor_nocookie_nodtor;
++   __aeabi_vec_ctor_cookie_nodtor;
++   __aeabi_vec_cctor_nocookie_nodtor;
++   __aeabi_vec_new_cookie_noctor;
++   __aeabi_vec_new_nocookie;
++   __aeabi_vec_new_cookie_nodtor;
++   __aeabi_vec_new_cookie;
++   __aeabi_vec_dtor;
++   __aeabi_vec_dtor_cookie;
++   __aeabi_vec_delete;
++   __aeabi_vec_delete3;
++   __aeabi_vec_delete3_nodtor;
++};
+--- a/src/libstdc++-v3/configure
++++ b/src/libstdc++-v3/configure
+@@ -4969,6 +4969,10 @@
+   lt_cv_file_magic_cmd='$OBJDUMP -f'
+   ;;
+ 
++nucleuseabi*)
++  lt_cv_deplibs_check_method=pass_all
++  ;;
++
+ darwin* | rhapsody*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+@@ -5730,7 +5734,7 @@
+   ;;
+ *-*-irix6*)
+   # Find out which ABI we are using.
+-  echo '#line 5733 "configure"' > conftest.$ac_ext
++  echo '#line 5737 "configure"' > conftest.$ac_ext
+   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+@@ -7876,11 +7880,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:7879: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:7883: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:7883: \$? = $ac_status" >&5
++   echo "$as_me:7887: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -8215,11 +8219,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:8218: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:8222: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:8222: \$? = $ac_status" >&5
++   echo "$as_me:8226: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -8320,11 +8324,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:8323: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:8327: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:8327: \$? = $ac_status" >&5
++   echo "$as_me:8331: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -8375,11 +8379,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:8378: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:8382: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:8382: \$? = $ac_status" >&5
++   echo "$as_me:8386: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -10294,6 +10298,21 @@
+   shlibpath_overrides_runpath=yes
+   ;;
+ 
++nucleus*)
++  case $host_vendor in
++    samsung)
++      version_type=linux
++      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
++      soname_spec='$libname${shared_ext}$major'
++      shlibpath_var=LD_LIBRARY_PATH
++      hardcode_into_libs=yes
++      ;;
++    *)
++      dynamic_linker=no
++      ;;
++  esac
++  ;;
++
+ *nto* | *qnx*)
+   version_type=qnx
+   need_lib_prefix=no
+@@ -11242,7 +11261,7 @@
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 11245 "configure"
++#line 11264 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -11338,7 +11357,7 @@
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 11341 "configure"
++#line 11360 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -13364,11 +13383,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:13367: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:13386: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:13371: \$? = $ac_status" >&5
++   echo "$as_me:13390: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -13463,11 +13482,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:13466: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:13485: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:13470: \$? = $ac_status" >&5
++   echo "$as_me:13489: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -13515,11 +13534,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:13518: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:13537: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:13522: \$? = $ac_status" >&5
++   echo "$as_me:13541: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -14220,6 +14239,21 @@
+   shlibpath_overrides_runpath=yes
+   ;;
+ 
++nucleus*)
++  case $host_vendor in
++    samsung)
++      version_type=linux
++      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
++      soname_spec='$libname${shared_ext}$major'
++      shlibpath_var=LD_LIBRARY_PATH
++      hardcode_into_libs=yes
++      ;;
++    *)
++      dynamic_linker=no
++      ;;
++  esac
++  ;;
++
+ *nto* | *qnx*)
+   version_type=qnx
+   need_lib_prefix=no
+@@ -14592,7 +14626,7 @@
+     #
+     # Fake what AC_TRY_COMPILE does.  XXX Look at redoing this new-style.
+     cat > conftest.$ac_ext << EOF
+-#line 14595 "configure"
++#line 14629 "configure"
+ struct S { ~S(); };
+ void bar();
+ void foo()
+@@ -14764,7 +14798,7 @@
+   # unnecessary for a builtins test.
+ 
+     cat > conftest.$ac_ext << EOF
+-#line 14767 "configure"
++#line 14801 "configure"
+ int main()
+ {
+   typedef bool atomic_type;
+@@ -14803,7 +14837,7 @@
+     rm -f conftest*
+ 
+     cat > conftest.$ac_ext << EOF
+-#line 14806 "configure"
++#line 14840 "configure"
+ int main()
+ {
+   typedef short atomic_type;
+@@ -14842,7 +14876,7 @@
+     rm -f conftest*
+ 
+     cat > conftest.$ac_ext << EOF
+-#line 14845 "configure"
++#line 14879 "configure"
+ int main()
+ {
+   // NB: _Atomic_word not necessarily int.
+@@ -14882,7 +14916,7 @@
+     rm -f conftest*
+ 
+     cat > conftest.$ac_ext << EOF
+-#line 14885 "configure"
++#line 14919 "configure"
+ int main()
+ {
+   typedef long long atomic_type;
+@@ -40678,6 +40712,7 @@
+ 
+   # For TLS support.
+ 
++
+    # Check whether --enable-tls or --disable-tls was given.
+ if test "${enable_tls+set}" = set; then
+   enableval="$enable_tls"
+@@ -40730,6 +40765,74 @@
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
++  chktls_save_LDFLAGS="$LDFLAGS"
++	  	  	  case $host in
++	    *-*-linux*)
++	      LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
++	      ;;
++	  esac
++	  chktls_save_CFLAGS="$CFLAGS"
++	  CFLAGS="-fPIC $CFLAGS"
++	  	  if test x$gcc_no_link = xyes; then
++  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
++echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
++   { (exit 1); exit 1; }; }
++fi
++cat >conftest.$ac_ext <<_ACEOF
++int f() { return 0; }
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++  (eval $ac_link) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest$ac_exeext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  if test x$gcc_no_link = xyes; then
++  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
++echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
++   { (exit 1); exit 1; }; }
++fi
++cat >conftest.$ac_ext <<_ACEOF
++__thread int a; int b; int f() { return a = b; }
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++  (eval $ac_link) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest$ac_exeext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
+   gcc_cv_have_tls=yes
+ else
+   echo "$as_me: failed program was:" >&5
+@@ -40739,6 +40842,24 @@
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++gcc_cv_have_tls=yes
++fi
++rm -f conftest.err conftest.$ac_objext \
++      conftest$ac_exeext conftest.$ac_ext
++	  CFLAGS="$chktls_save_CFLAGS"
++	  LDFLAGS="$chktls_save_LDFLAGS"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++gcc_cv_have_tls=no
++fi
++rm -f conftest.err conftest.$ac_objext \
++      conftest$ac_exeext conftest.$ac_ext
+ 
+ 
+ else
+@@ -76874,6 +76995,7 @@
+ 
+ 
+ 
++
+    # Check whether --enable-tls or --disable-tls was given.
+ if test "${enable_tls+set}" = set; then
+   enableval="$enable_tls"
+@@ -76926,6 +77048,74 @@
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
++  chktls_save_LDFLAGS="$LDFLAGS"
++	  	  	  case $host in
++	    *-*-linux*)
++	      LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
++	      ;;
++	  esac
++	  chktls_save_CFLAGS="$CFLAGS"
++	  CFLAGS="-fPIC $CFLAGS"
++	  	  if test x$gcc_no_link = xyes; then
++  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
++echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
++   { (exit 1); exit 1; }; }
++fi
++cat >conftest.$ac_ext <<_ACEOF
++int f() { return 0; }
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++  (eval $ac_link) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest$ac_exeext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  if test x$gcc_no_link = xyes; then
++  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
++echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
++   { (exit 1); exit 1; }; }
++fi
++cat >conftest.$ac_ext <<_ACEOF
++__thread int a; int b; int f() { return a = b; }
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++  (eval $ac_link) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest$ac_exeext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
+   gcc_cv_have_tls=yes
+ else
+   echo "$as_me: failed program was:" >&5
+@@ -76935,6 +77125,24 @@
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++gcc_cv_have_tls=yes
++fi
++rm -f conftest.err conftest.$ac_objext \
++      conftest$ac_exeext conftest.$ac_ext
++	  CFLAGS="$chktls_save_CFLAGS"
++	  LDFLAGS="$chktls_save_LDFLAGS"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++gcc_cv_have_tls=no
++fi
++rm -f conftest.err conftest.$ac_objext \
++      conftest$ac_exeext conftest.$ac_ext
+ 
+ 
+ else
+@@ -94489,6 +94697,7 @@
+ _ACEOF
+ 
+ 
++
+    # Check whether --enable-tls or --disable-tls was given.
+ if test "${enable_tls+set}" = set; then
+   enableval="$enable_tls"
+@@ -94541,6 +94750,74 @@
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
++  chktls_save_LDFLAGS="$LDFLAGS"
++	  	  	  case $host in
++	    *-*-linux*)
++	      LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
++	      ;;
++	  esac
++	  chktls_save_CFLAGS="$CFLAGS"
++	  CFLAGS="-fPIC $CFLAGS"
++	  	  if test x$gcc_no_link = xyes; then
++  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
++echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
++   { (exit 1); exit 1; }; }
++fi
++cat >conftest.$ac_ext <<_ACEOF
++int f() { return 0; }
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++  (eval $ac_link) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest$ac_exeext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  if test x$gcc_no_link = xyes; then
++  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
++echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
++   { (exit 1); exit 1; }; }
++fi
++cat >conftest.$ac_ext <<_ACEOF
++__thread int a; int b; int f() { return a = b; }
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++  (eval $ac_link) 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } &&
++	 { ac_try='test -z "$ac_c_werror_flag"
++			 || test ! -s conftest.err'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; } &&
++	 { ac_try='test -s conftest$ac_exeext'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
+   gcc_cv_have_tls=yes
+ else
+   echo "$as_me: failed program was:" >&5
+@@ -94550,6 +94827,24 @@
+ fi
+ rm -f conftest.err conftest.$ac_objext \
+       conftest$ac_exeext conftest.$ac_ext
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++gcc_cv_have_tls=yes
++fi
++rm -f conftest.err conftest.$ac_objext \
++      conftest$ac_exeext conftest.$ac_ext
++	  CFLAGS="$chktls_save_CFLAGS"
++	  LDFLAGS="$chktls_save_LDFLAGS"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++gcc_cv_have_tls=no
++fi
++rm -f conftest.err conftest.$ac_objext \
++      conftest$ac_exeext conftest.$ac_ext
+ 
+ 
+ else
+@@ -114470,7 +114765,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -114534,7 +114830,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -114575,7 +114872,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -114632,7 +114930,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -114673,7 +114972,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -114738,7 +115038,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -114806,7 +115107,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (void *)); }
+ unsigned long ulongval () { return (long) (sizeof (void *)); }
+ #include <stdio.h>
+@@ -114894,7 +115196,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -114958,7 +115261,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -114999,7 +115303,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -115056,7 +115361,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -115097,7 +115403,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -115162,7 +115469,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -115230,7 +115538,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (long)); }
+ unsigned long ulongval () { return (long) (sizeof (long)); }
+ #include <stdio.h>
+@@ -115318,7 +115627,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -115382,7 +115692,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -115423,7 +115734,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -115480,7 +115792,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -115521,7 +115834,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -115586,7 +115900,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -115654,7 +115969,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (int)); }
+ unsigned long ulongval () { return (long) (sizeof (int)); }
+ #include <stdio.h>
+@@ -115738,7 +116054,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -115802,7 +116119,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -115843,7 +116161,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -115900,7 +116219,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -115941,7 +116261,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -116006,7 +116327,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -116074,7 +116396,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (short)); }
+ unsigned long ulongval () { return (long) (sizeof (short)); }
+ #include <stdio.h>
+@@ -116158,7 +116481,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -116222,7 +116546,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -116263,7 +116588,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -116320,7 +116646,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -116361,7 +116688,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -116426,7 +116754,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ int
+ main ()
+ {
+@@ -116494,7 +116823,8 @@
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+-$ac_includes_default
++/* no standard headers */
++
+ long longval () { return (long) (sizeof (char)); }
+ unsigned long ulongval () { return (long) (sizeof (char)); }
+ #include <stdio.h>
+--- a/src/libstdc++-v3/configure.host
++++ b/src/libstdc++-v3/configure.host
+@@ -317,6 +317,9 @@
+ 	;;
+     esac
+     ;;
++  arm*-*-nucleuseabi)
++    port_specific_symbol_files="\$(srcdir)/../config/os/nucleus/arm-eabi-extra.ver"
++    ;;
+   powerpc*-*-darwin*)
+     port_specific_symbol_files="\$(srcdir)/../config/os/bsd/darwin/ppc-extra.ver"
+     ;;
+--- a/src/libstdc++-v3/include/c_global/cwchar
++++ b/src/libstdc++-v3/include/c_global/cwchar
+@@ -156,14 +156,18 @@
+   using ::mbsrtowcs;
+   using ::putwc;
+   using ::putwchar;
++#ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF
+   using ::swprintf;
++#endif
+   using ::swscanf;
+   using ::ungetwc;
+   using ::vfwprintf;
+ #if _GLIBCXX_HAVE_VFWSCANF
+   using ::vfwscanf;
+ #endif
++#ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF
+   using ::vswprintf;
++#endif
+ #if _GLIBCXX_HAVE_VSWSCANF
+   using ::vswscanf;
+ #endif
+--- a/src/libstdc++-v3/libsupc++/Makefile.am
++++ b/src/libstdc++-v3/libsupc++/Makefile.am
+@@ -30,7 +30,6 @@
+ # 2) integrated libsupc++convenience.la that is to be a part of libstdc++.a
+ noinst_LTLIBRARIES = libsupc++convenience.la
+ 
+-
+ headers = \
+ 	exception new typeinfo cxxabi.h cxxabi-forced.h exception_defines.h \
+ 	initializer_list exception_ptr.h
+--- a/src/libstdc++-v3/libsupc++/cxxabi.h
++++ b/src/libstdc++-v3/libsupc++/cxxabi.h
+@@ -601,6 +601,82 @@
+ */
+ namespace abi = __cxxabiv1;
+ 
++#if defined(__arm__) && defined(__ARM_EABI__)
++
++// Also include the ARM specific routines.  This gives ensures they have
++// the correct visibility arrtibutes.
++
++namespace __aeabiv1
++{
++  extern "C" void *
++  __aeabi_vec_ctor_nocookie_nodtor (void *array_address,
++				    abi::__cxa_cdtor_type constructor,
++				    size_t element_size,
++				    size_t element_count);
++  extern "C" void *
++  __aeabi_vec_ctor_cookie_nodtor (void *array_address,
++				  abi::__cxa_cdtor_type constructor,
++				  size_t element_size,
++				  size_t element_count);
++  
++  extern "C" void *
++  __aeabi_vec_cctor_nocookie_nodtor (void *dest_array,
++				     void *src_array, 
++				     size_t element_size, 
++				     size_t element_count,
++				     void *(*constructor) (void *, void *));
++
++  extern "C" void *
++  __aeabi_vec_new_cookie_noctor (size_t element_size, 
++				 size_t element_count);
++
++  extern "C" void *
++  __aeabi_vec_new_nocookie (size_t element_size, 
++			    size_t element_count,
++			    abi::__cxa_cdtor_type constructor);
++
++  extern "C" void *
++  __aeabi_vec_new_cookie_nodtor (size_t element_size, 
++				 size_t element_count,
++				 abi::__cxa_cdtor_type constructor);
++
++  extern "C" void *
++  __aeabi_vec_new_cookie(size_t element_size, 
++			 size_t element_count,
++			 abi::__cxa_cdtor_type constructor,
++			 abi::__cxa_cdtor_type destructor);
++  
++  extern "C" void *
++  __aeabi_vec_dtor (void *array_address, 
++		    abi::__cxa_cdtor_type destructor,
++		    size_t element_size, 
++		    size_t element_count);
++
++  extern "C" void *
++  __aeabi_vec_dtor_cookie (void *array_address, 
++			   abi::__cxa_cdtor_type destructor);
++  
++  extern "C" void
++  __aeabi_vec_delete (void *array_address, 
++		      abi::__cxa_cdtor_type destructor);
++
++  extern "C" void
++  __aeabi_vec_delete3 (void *array_address, 
++		       abi::__cxa_cdtor_type destructor,
++		       void (*dealloc) (void *, size_t));
++
++  extern "C" void
++  __aeabi_vec_delete3_nodtor (void *array_address,
++			      void (*dealloc) (void *, size_t));
++
++  extern "C" int
++  __aeabi_atexit (void *object, 
++		  void (*destructor) (void *),
++		  void *dso_handle) throw ();
++} // namespace __aeabiv1
++
++#endif // defined(__arm__) && defined(__ARM_EABI__)
++
+ #endif // __cplusplus
+ 
+ #pragma GCC visibility pop
+--- a/src/libstdc++-v3/libsupc++/dyncast.cc
++++ b/src/libstdc++-v3/libsupc++/dyncast.cc
+@@ -28,12 +28,26 @@
+ 
+ 
+ // this is the external interface to the dynamic cast machinery
++/* sub: source address to be adjusted; nonnull, and since the
++ *      source object is polymorphic, *(void**)sub is a virtual pointer.
++ * src: static type of the source object.
++ * dst: destination type (the "T" in "dynamic_cast<T>(v)").
++ * src2dst_offset: a static hint about the location of the
++ *    source subobject with respect to the complete object;
++ *    special negative values are:
++ *       -1: no hint
++ *       -2: src is not a public base of dst
++ *       -3: src is a multiple public base type but never a
++ *           virtual base type
++ *    otherwise, the src type is a unique public nonvirtual
++ *    base type of dst at offset src2dst_offset from the
++ *    origin of dst.  */
+ extern "C" void *
+ __dynamic_cast (const void *src_ptr,    // object started from
+                 const __class_type_info *src_type, // type of the starting object
+                 const __class_type_info *dst_type, // desired target type
+                 ptrdiff_t src2dst) // how src and dst are related
+-{
++  {
+   const void *vtable = *static_cast <const void *const *> (src_ptr);
+   const vtable_prefix *prefix =
+       adjust_pointer <vtable_prefix> (vtable, 
+--- a/src/libstdc++-v3/libsupc++/eh_arm.cc
++++ b/src/libstdc++-v3/libsupc++/eh_arm.cc
+@@ -22,6 +22,7 @@
+ // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ // <http://www.gnu.org/licenses/>.
+ 
++#include <typeinfo>
+ #include <cxxabi.h>
+ #include "unwind-cxx.h"
+ 
+@@ -29,16 +30,15 @@
+ 
+ using namespace __cxxabiv1;
+ 
+-
+ // Given the thrown type THROW_TYPE, pointer to a variable containing a
+ // pointer to the exception object THROWN_PTR_P and a type CATCH_TYPE to
+ // compare against, return whether or not there is a match and if so,
+ // update *THROWN_PTR_P.
+ 
+ extern "C" __cxa_type_match_result
+-__cxa_type_match(_Unwind_Exception* ue_header,
+-		 const std::type_info* catch_type,
+-		 bool is_reference __attribute__((__unused__)),
++__cxxabiv1::__cxa_type_match(_Unwind_Exception* ue_header,
++			     const std::type_info* catch_type,
++			     bool is_reference,
+ 		 void** thrown_ptr_p)
+ {
+   bool forced_unwind = __is_gxx_forced_unwind_class(ue_header->exception_class);
+@@ -68,11 +68,11 @@
+   if (throw_type->__is_pointer_p())
+     thrown_ptr = *(void**) thrown_ptr;
+ 
+-  if (catch_type->__do_catch(throw_type, &thrown_ptr, 1))
++  if (catch_type->__do_catch (throw_type, &thrown_ptr, 1 + is_reference * 2))
+     {
+       *thrown_ptr_p = thrown_ptr;
+ 
+-      if (typeid(*catch_type) == typeid (typeid(void*)))
++      if (typeid (*catch_type) == typeid (typeid(void*)))
+ 	{
+ 	  const __pointer_type_info *catch_pointer_type =
+ 	    static_cast<const __pointer_type_info *> (catch_type);
+@@ -93,7 +93,7 @@
+ 
+ // ABI defined routine called at the start of a cleanup handler.
+ extern "C" bool
+-__cxa_begin_cleanup(_Unwind_Exception* ue_header)
++__cxxabiv1::__cxa_begin_cleanup(_Unwind_Exception* ue_header)
+ {
+   __cxa_eh_globals *globals = __cxa_get_globals();
+   __cxa_exception *header = __get_exception_header_from_ue(ue_header);
+--- a/src/libstdc++-v3/libsupc++/eh_call.cc
++++ b/src/libstdc++-v3/libsupc++/eh_call.cc
+@@ -37,8 +37,10 @@
+ // terminate.
+ 
+ extern "C" void
+-__cxa_call_terminate(_Unwind_Exception* ue_header)
++__cxxabiv1::__cxa_call_terminate(__gnu_cxa_call_arg exc_obj_in)
+ {
++  _Unwind_Exception* ue_header
++    = reinterpret_cast<_Unwind_Exception*>(exc_obj_in);
+ 
+   if (ue_header)
+     {
+@@ -64,7 +66,7 @@
+ // The ARM EABI __cxa_call_unexpected has the same semantics as the generic
+ // routine, but the exception specification has a different format.
+ extern "C" void
+-__cxa_call_unexpected(void* exc_obj_in)
++__cxxabiv1::__cxa_call_unexpected(_Unwind_Control_Block* exc_obj_in)
+ {
+   _Unwind_Exception* exc_obj
+     = reinterpret_cast<_Unwind_Exception*>(exc_obj_in);
+--- a/src/libstdc++-v3/libsupc++/eh_personality.cc
++++ b/src/libstdc++-v3/libsupc++/eh_personality.cc
+@@ -89,20 +89,22 @@
+ // Return an element from a type table.
+ 
+ static const std::type_info*
+-get_ttype_entry(lsda_header_info* info, _uleb128_t i)
++get_ttype_entry(lsda_header_info* info, _uleb128_t i, bool &is_ref)
+ {
+   _Unwind_Ptr ptr;
+ 
+   ptr = (_Unwind_Ptr) (info->TType - (i * 4));
+   ptr = _Unwind_decode_target2(ptr);
+   
+-  return reinterpret_cast<const std::type_info *>(ptr);
++  is_ref = ptr & 1;
++  
++  return reinterpret_cast<const std::type_info *>(ptr & ~1);
+ }
+ 
+ // The ABI provides a routine for matching exception object types.
+ typedef _Unwind_Control_Block _throw_typet;
+-#define get_adjusted_ptr(catch_type, throw_type, thrown_ptr_p) \
+-  (__cxa_type_match (throw_type, catch_type, false, thrown_ptr_p) \
++#define get_adjusted_ptr(catch_type, throw_type, is_ref, thrown_ptr_p) \
++  (__cxa_type_match (throw_type, catch_type, is_ref, thrown_ptr_p) \
+    != ctm_failed)
+ 
+ // Return true if THROW_TYPE matches one if the filter types.
+@@ -118,6 +120,7 @@
+     {
+       const std::type_info* catch_type;
+       _uleb128_t tmp;
++      bool is_ref;
+ 
+       tmp = *e;
+       
+@@ -129,13 +132,14 @@
+       tmp = _Unwind_decode_target2((_Unwind_Word) e);
+ 
+       // Match a ttype entry.
+-      catch_type = reinterpret_cast<const std::type_info*>(tmp);
++      is_ref = tmp & 1;
++      catch_type = reinterpret_cast<const std::type_info*>(tmp & ~1);
+ 
+       // ??? There is currently no way to ask the RTTI code about the
+       // relationship between two types without reference to a specific
+       // object.  There should be; then we wouldn't need to mess with
+       // thrown_ptr here.
+-      if (get_adjusted_ptr(catch_type, throw_type, &thrown_ptr))
++      if (get_adjusted_ptr(catch_type, throw_type, is_ref, &thrown_ptr))
+ 	return true;
+ 
+       // Advance to the next entry.
+@@ -207,7 +211,7 @@
+ // Return an element from a type table.
+ 
+ static const std::type_info *
+-get_ttype_entry (lsda_header_info *info, _uleb128_t i)
++get_ttype_entry (lsda_header_info *info, _uleb128_t i, bool &is_ref)
+ {
+   _Unwind_Ptr ptr;
+ 
+@@ -215,7 +219,9 @@
+   read_encoded_value_with_base (info->ttype_encoding, info->ttype_base,
+ 				info->TType - i, &ptr);
+ 
+-  return reinterpret_cast<const std::type_info *>(ptr);
++  is_ref = ptr & 1;
++  
++  return reinterpret_cast<const std::type_info *>(ptr & ~1);
+ }
+ 
+ // Given the thrown type THROW_TYPE, pointer to a variable containing a
+@@ -226,6 +232,7 @@
+ static bool
+ get_adjusted_ptr (const std::type_info *catch_type,
+ 		  const std::type_info *throw_type,
++		  bool is_ref,
+ 		  void **thrown_ptr_p)
+ {
+   void *thrown_ptr = *thrown_ptr_p;
+@@ -237,7 +244,7 @@
+   if (throw_type->__is_pointer_p ())
+     thrown_ptr = *(void **) thrown_ptr;
+ 
+-  if (catch_type->__do_catch (throw_type, &thrown_ptr, 1))
++  if (catch_type->__do_catch (throw_type, &thrown_ptr, 1 + is_ref * 2))
+     {
+       *thrown_ptr_p = thrown_ptr;
+       return true;
+@@ -267,13 +274,15 @@
+         return false;
+ 
+       // Match a ttype entry.
+-      catch_type = get_ttype_entry (info, tmp);
++      bool is_ref;
++      
++      catch_type = get_ttype_entry (info, tmp, is_ref);
+ 
+       // ??? There is currently no way to ask the RTTI code about the
+       // relationship between two types without reference to a specific
+       // object.  There should be; then we wouldn't need to mess with
+       // thrown_ptr here.
+-      if (get_adjusted_ptr (catch_type, throw_type, &thrown_ptr))
++      if (get_adjusted_ptr (catch_type, throw_type, is_ref, &thrown_ptr))
+ 	return true;
+     }
+ }
+@@ -346,6 +355,8 @@
+ #define PERSONALITY_FUNCTION	__gxx_personality_v0
+ #endif
+ 
++#pragma GCC visibility push(default)
++
+ extern "C" _Unwind_Reason_Code
+ #ifdef __ARM_EABI_UNWINDER__
+ PERSONALITY_FUNCTION (_Unwind_State state,
+@@ -383,6 +394,8 @@
+   switch (state & _US_ACTION_MASK)
+     {
+     case _US_VIRTUAL_UNWIND_FRAME:
++      if (state & _US_FORCE_UNWIND)
++	CONTINUE_UNWINDING;
+       actions = _UA_SEARCH_PHASE;
+       break;
+ 
+@@ -582,14 +595,16 @@
+ 	  else if (ar_filter > 0)
+ 	    {
+ 	      // Positive filter values are handlers.
+-	      catch_type = get_ttype_entry (&info, ar_filter);
++	      bool is_ref;
++	      
++	      catch_type = get_ttype_entry (&info, ar_filter, is_ref);
+ 
+ 	      // Null catch type is a catch-all handler; we can catch foreign
+ 	      // exceptions with this.  Otherwise we must match types.
+ 	      if (! catch_type
+ 		  || (throw_type
+ 		      && get_adjusted_ptr (catch_type, throw_type,
+-					   &thrown_ptr)))
++					   is_ref, &thrown_ptr)))
+ 		{
+ 		  saw_handler = true;
+ 		  break;
+@@ -715,6 +730,8 @@
+   return _URC_INSTALL_CONTEXT;
+ }
+ 
++#pragma GCC visibility pop
++
+ /* The ARM EABI implementation of __cxa_call_unexpected is in a
+    different file so that the personality routine (PR) can be used
+    standalone.  The generic routine shared datastructures with the PR
+--- a/src/libstdc++-v3/libsupc++/eh_ptr.cc
++++ b/src/libstdc++-v3/libsupc++/eh_ptr.cc
+@@ -223,8 +223,8 @@
+   dep->primaryException = obj;
+   __sync_add_and_fetch (&eh->referenceCount, 1);
+ 
+-  dep->unexpectedHandler = __unexpected_handler;
+-  dep->terminateHandler = __terminate_handler;
++  dep->unexpectedHandler = __get_unexpected_handler ();
++  dep->terminateHandler = __get_terminate_handler ();
+   __GXX_INIT_DEPENDENT_EXCEPTION_CLASS(dep->unwindHeader.exception_class);
+   dep->unwindHeader.exception_cleanup = __gxx_dependent_exception_cleanup;
+ 
+--- a/src/libstdc++-v3/libsupc++/eh_term_handler.cc
++++ b/src/libstdc++-v3/libsupc++/eh_term_handler.cc
+@@ -36,11 +36,21 @@
+ # include <cstdlib>
+ #endif
+ 
+-/* The current installed user handler.  */
+-std::terminate_handler __cxxabiv1::__terminate_handler =
+ #if _GLIBCXX_HOSTED
+-	__gnu_cxx::__verbose_terminate_handler;
++#define DEFAULT_TERMINATE_HANDLER __gnu_cxx::__verbose_terminate_handler
+ #else
+-	std::abort;
++#define DEFAULT_TERMINATE_HANDLER std::abort
+ #endif
++/* The current installed user handler.  */
++#ifdef __symbian__
++/* SymbianOS does not allow initialized data, so use a constructor function.  */
++std::terminate_handler __cxxabiv1::__terminate_handler;
+ 
++void __cxxabiv1::__init_terminate_handler(void)
++{
++  __cxxabiv1::__terminate_handler = DEFAULT_TERMINATE_HANDLER;
++}
++#else /* !__symbian__ */
++std::terminate_handler __cxxabiv1::__terminate_handler =
++  DEFAULT_TERMINATE_HANDLER;
++#endif
+--- a/src/libstdc++-v3/libsupc++/eh_terminate.cc
++++ b/src/libstdc++-v3/libsupc++/eh_terminate.cc
+@@ -45,7 +45,7 @@
+ void
+ std::terminate ()
+ {
+-  __terminate (__terminate_handler);
++  __terminate (__get_terminate_handler ());
+ }
+ 
+ void
+@@ -58,7 +58,7 @@
+ void
+ std::unexpected ()
+ {
+-  __unexpected (__unexpected_handler);
++  __unexpected (__get_unexpected_handler ());
+ }
+ 
+ std::terminate_handler
+--- a/src/libstdc++-v3/libsupc++/eh_throw.cc
++++ b/src/libstdc++-v3/libsupc++/eh_throw.cc
+@@ -67,8 +67,8 @@
+   header->referenceCount = 1;
+   header->exc.exceptionType = tinfo;
+   header->exc.exceptionDestructor = dest;
+-  header->exc.unexpectedHandler = __unexpected_handler;
+-  header->exc.terminateHandler = __terminate_handler;
++  header->exc.unexpectedHandler = __get_unexpected_handler ();
++  header->exc.terminateHandler = __get_terminate_handler ();
+   __GXX_INIT_PRIMARY_EXCEPTION_CLASS(header->exc.unwindHeader.exception_class);
+   header->exc.unwindHeader.exception_cleanup = __gxx_exception_cleanup;
+ 
+--- a/src/libstdc++-v3/libsupc++/eh_unex_handler.cc
++++ b/src/libstdc++-v3/libsupc++/eh_unex_handler.cc
+@@ -25,5 +25,14 @@
+ #include "unwind-cxx.h"
+ 
+ /* The current installed user handler.  */
+-std::unexpected_handler __cxxabiv1::__unexpected_handler = std::terminate;
++#ifdef __symbian__
++/* SymbianOS does not allow initialized data, so use a constructor function.  */
++std::unexpected_handler __cxxabiv1::__unexpected_handler;
+ 
++void __cxxabiv1::__init_unexpected_handler (void)
++{
++  __cxxabiv1::__unexpected_handler = std::terminate;
++}
++#else /* !__symbian__ */
++std::unexpected_handler __cxxabiv1::__unexpected_handler = std::terminate;
++#endif
+--- a/src/libstdc++-v3/libsupc++/unwind-cxx.h
++++ b/src/libstdc++-v3/libsupc++/unwind-cxx.h
+@@ -183,12 +183,6 @@
+ 
+ // @@@ These are not directly specified by the IA-64 C++ ABI.
+ 
+-// Handles re-checking the exception specification if unexpectedHandler
+-// throws, and if bad_exception needs to be thrown.  Called from the
+-// compiler.
+-extern "C" void __cxa_call_unexpected (void *) __attribute__((noreturn));
+-extern "C" void __cxa_call_terminate (void*) __attribute__((noreturn));
+-
+ #ifdef __ARM_EABI_UNWINDER__
+ // Arm EABI specified routines.
+ typedef enum {
+@@ -196,12 +190,24 @@
+   ctm_succeeded = 1,
+   ctm_succeeded_with_ptr_to_base = 2
+ } __cxa_type_match_result;
+-extern "C" bool __cxa_type_match(_Unwind_Exception*, const std::type_info*,
+-				 bool, void**);
+-extern "C" void __cxa_begin_cleanup (_Unwind_Exception*);
++extern "C" __cxa_type_match_result
++__cxa_type_match(_Unwind_Exception*, const std::type_info*, bool, void**);
++extern "C" bool __cxa_begin_cleanup (_Unwind_Exception*);
+ extern "C" void __cxa_end_cleanup (void);
++#define __gnu_cxa_call_arg _Unwind_Control_Block*
++#else
++#define __gnu_cxa_call_arg void*
+ #endif
+ 
++// Handles re-checking the exception specification if unexpectedHandler
++// throws, and if bad_exception needs to be thrown.  Called from the
++// compiler.
++#define __cxa_call_arg
++extern "C" void
++__cxa_call_unexpected (__gnu_cxa_call_arg) __attribute__((noreturn));
++extern "C" void
++__cxa_call_terminate (__gnu_cxa_call_arg) __attribute__((noreturn));
++
+ // Invokes given handler, dying appropriately if the user handler was
+ // so inconsiderate as to return.
+ extern void __terminate(std::terminate_handler) __attribute__((noreturn));
+@@ -211,6 +217,29 @@
+ extern std::terminate_handler __terminate_handler;
+ extern std::unexpected_handler __unexpected_handler;
+ 
++#ifdef __symbian__
++extern "C" void __init_terminate_handler(void);
++extern "C" void __init_unexpected_handler(void);
++#endif
++
++static inline std::terminate_handler __get_terminate_handler(void)
++{
++#ifdef __symbian__
++  if (!__terminate_handler)
++    __init_terminate_handler();
++#endif
++  return __terminate_handler;
++}
++
++static inline std::unexpected_handler __get_unexpected_handler(void)
++{
++#ifdef __symbian__
++  if (!__unexpected_handler)
++    __init_unexpected_handler();
++#endif
++  return __unexpected_handler;
++}
++
+ // These are explicitly GNU C++ specific.
+ 
+ // Acquire the C++ exception header from the C++ object.
+--- a/src/libstdc++-v3/libsupc++/vmi_class_type_info.cc
++++ b/src/libstdc++-v3/libsupc++/vmi_class_type_info.cc
+@@ -108,7 +108,17 @@
+       return false;
+     }
+ 
++  // If src_type is a unique non-virtual base of dst_type, we have a good
++  // guess at the address we want, so in the first pass try skipping any
++  // bases which don't contain that address.
++  const void *dst_cand = NULL;
++  if (src2dst >= 0)
++    dst_cand = adjust_pointer<void>(src_ptr, -src2dst);
++  bool first_pass = true;
++  bool skipped = false;
++
+   bool result_ambig = false;
++ again:
+   for (std::size_t i = __base_count; i--;)
+     {
+       __dyncast_result result2 (result.whole_details);
+@@ -121,6 +131,20 @@
+         base_access = __sub_kind (base_access | __contained_virtual_mask);
+       base = convert_to_base (base, is_virtual, offset);
+ 
++      if (dst_cand)
++	{
++	  bool skip_on_first_pass = base > dst_cand;
++	  if (skip_on_first_pass == first_pass)
++	    {
++	      // We aren't interested in this base on this pass: either
++	      // we're on the first pass and this base doesn't contain the
++	      // likely address, or we're on the second pass and we checked
++	      // this base on the first pass.
++	      skipped = true;
++	      continue;
++	    }
++	}
++
+       if (!__base_info[i].__is_public_p ())
+         {
+           if (src2dst == -2 &&
+@@ -267,6 +291,14 @@
+         return result_ambig;
+     }
+ 
++  if (skipped && first_pass)
++    {
++      // We didn't find dst where we expected it, so let's go back and try
++      // the bases we skipped (if any).
++      first_pass = false;
++      goto again;
++    }
++
+   return result_ambig;
+ }
+ 
+--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stod.cc
++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stod.cc
+@@ -1,4 +1,5 @@
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-string-conversions "" }
+ // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
+ 
+ // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stof.cc
++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stof.cc
+@@ -1,4 +1,5 @@
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-string-conversions "" }
+ // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
+ 
+ // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc
++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc
+@@ -1,4 +1,5 @@
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-string-conversions "" }
+ // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
+ 
+ // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc
++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc
+@@ -1,4 +1,5 @@
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-string-conversions "" }
+ // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
+ 
+ // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stold.cc
++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stold.cc
+@@ -1,4 +1,5 @@
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-string-conversions "" }
+ // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
+ 
+ // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc
++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc
+@@ -1,4 +1,5 @@
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-string-conversions "" }
+ // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
+ 
+ // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc
++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc
+@@ -1,4 +1,5 @@
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-string-conversions "" }
+ // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
+ 
+ // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc
++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc
+@@ -1,4 +1,5 @@
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-string-conversions "" }
+ // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
+ 
+ // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+--- a/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/to_wstring.cc
++++ b/src/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/to_wstring.cc
+@@ -1,4 +1,5 @@
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-string-conversions "" }
+ // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
+ 
+ // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+--- a/src/libstdc++-v3/testsuite/21_strings/headers/cwchar/functions_std.cc
++++ b/src/libstdc++-v3/testsuite/21_strings/headers/cwchar/functions_std.cc
+@@ -1,5 +1,6 @@
+ // { dg-do compile }
+ // { dg-require-c-std "" }
++// { dg-require-swprintf "" }
+ 
+ // Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+ //
+--- a/src/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc
++++ b/src/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc
+@@ -20,6 +20,7 @@
+ // 27.8.1.4 Overridden virtual functions
+ 
+ // { dg-require-fileio "" }
++// { dg-require-binary-io "" }
+ 
+ #include <fstream>
+ #include <testsuite_hooks.h>
+--- a/src/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc
++++ b/src/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc
+@@ -20,6 +20,7 @@
+ // 27.8.1.4 Overridden virtual functions
+ 
+ // { dg-require-fileio "" }
++// { dg-require-binary-io "" }
+ 
+ #include <fstream>
+ #include <testsuite_hooks.h>
+--- a/src/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-in.cc
++++ b/src/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-in.cc
+@@ -24,6 +24,7 @@
+ // 27.8.1.4 Overridden virtual functions
+ 
+ // { dg-require-fileio "" }
++// { dg-require-binary-io "" }
+ 
+ #include <fstream>
+ #include <testsuite_hooks.h>
+--- a/src/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-io.cc
++++ b/src/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-io.cc
+@@ -24,6 +24,7 @@
+ // 27.8.1.4 Overridden virtual functions
+ 
+ // { dg-require-fileio "" }
++// { dg-require-binary-io "" }
+ 
+ #include <fstream>
+ #include <testsuite_hooks.h>
+--- a/src/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-in.cc
++++ b/src/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-in.cc
+@@ -24,6 +24,7 @@
+ // 27.8.1.4 Overridden virtual functions
+ 
+ // { dg-require-fileio "" }
++// { dg-require-binary-io "" }
+ 
+ #include <fstream>
+ #include <testsuite_hooks.h>
+--- a/src/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-io.cc
++++ b/src/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-io.cc
+@@ -24,6 +24,7 @@
+ // 27.8.1.4 Overridden virtual functions
+ 
+ // { dg-require-fileio "" }
++// { dg-require-binary-io "" }
+ 
+ #include <fstream>
+ #include <testsuite_hooks.h>
+--- a/src/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc
++++ b/src/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc
+@@ -17,6 +17,8 @@
+ 
+ // 27.8.1.4 Overridden virtual functions
+ 
++// { dg-require-binary-io "" }
++
+ #include <fstream>
+ #include <locale>
+ #include <testsuite_hooks.h>
+--- a/src/libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-2.cc
++++ b/src/libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-2.cc
+@@ -26,6 +26,7 @@
+ // @diff@ %-*.tst %-*.txt
+ 
+ // { dg-require-fileio "" }
++// { dg-require-binary-io "" }
+ 
+ #include <istream>
+ #include <fstream>
+--- a/src/libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/6746-2.cc
++++ b/src/libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/6746-2.cc
+@@ -19,6 +19,8 @@
+ // causes "in_avail" to return an incorrect value.
+ // { dg-do run { xfail arm*-*-elf arm*-*-eabi } }
+ 
++// { dg-require-binary-io "" }
++
+ // 27.6.1.3 unformatted input functions
+ // @require@ %-*.tst %-*.txt
+ // @diff@ %-*.tst %-*.txt
+--- a/src/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4402.cc
++++ b/src/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4402.cc
+@@ -1,3 +1,5 @@
++// { dg-require-swprintf "" }
++
+ // Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+--- a/src/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc
++++ b/src/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc
+@@ -1,4 +1,5 @@
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-swprintf "" }
+ 
+ // Copyright (C) 2007, 2008, 2009 Free Software Foundation
+ //
+--- a/src/libstdc++-v3/testsuite/27_io/objects/char/10.cc
++++ b/src/libstdc++-v3/testsuite/27_io/objects/char/10.cc
+@@ -18,6 +18,7 @@
+ // <http://www.gnu.org/licenses/>.
+  
+ // { dg-require-fileio "" }
++// { dg-require-binary-io "" }
+ 
+ #include <iostream>
+ #include <cstdio>
+--- a/src/libstdc++-v3/testsuite/ext/vstring/element_access/char/front_back.cc
++++ b/src/libstdc++-v3/testsuite/ext/vstring/element_access/char/front_back.cc
+@@ -1,4 +1,5 @@
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-string-conversions "" }
+ 
+ // 2007-10-16  Paolo Carlini  <pcarlini@suse.de>
+ 
+--- a/src/libstdc++-v3/testsuite/ext/vstring/element_access/wchar_t/front_back.cc
++++ b/src/libstdc++-v3/testsuite/ext/vstring/element_access/wchar_t/front_back.cc
+@@ -1,4 +1,5 @@
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-string-conversions "" }
+ 
+ // 2007-10-16  Paolo Carlini  <pcarlini@suse.de>
+ 
+--- a/src/libstdc++-v3/testsuite/ext/vstring/init-list.cc
++++ b/src/libstdc++-v3/testsuite/ext/vstring/init-list.cc
+@@ -17,6 +17,7 @@
+ //
+ 
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-string-conversions "" }
+ 
+ #include <ext/vstring.h>
+ #include <testsuite_hooks.h>
+--- a/src/libstdc++-v3/testsuite/ext/vstring/moveable.cc
++++ b/src/libstdc++-v3/testsuite/ext/vstring/moveable.cc
+@@ -1,4 +1,5 @@
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-string-conversions "" }
+ 
+ // Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+ //
+--- a/src/libstdc++-v3/testsuite/ext/vstring/requirements/citerators.cc
++++ b/src/libstdc++-v3/testsuite/ext/vstring/requirements/citerators.cc
+@@ -1,4 +1,5 @@
+ // { dg-options "-std=gnu++0x" }
++// { dg-require-string-conversions "" }
+ 
+ // 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+ 
+--- a/src/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char16_t/1.cc
++++ b/src/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char16_t/1.cc
+@@ -1,6 +1,7 @@
+ // { dg-do compile }
+ // { dg-options "-std=gnu++0x" }
+ // { dg-require-cstdint "" }
++// { dg-require-string-conversions "" }
+ 
+ // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+ //
+--- a/src/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char32_t/1.cc
++++ b/src/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char32_t/1.cc
+@@ -1,6 +1,7 @@
+ // { dg-do compile }
+ // { dg-options "-std=gnu++0x" }
+ // { dg-require-cstdint "" }
++// { dg-require-string-conversions "" }
+ 
+ // Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+ //
+--- a/src/libstdc++-v3/testsuite/lib/dg-options.exp
++++ b/src/libstdc++-v3/testsuite/lib/dg-options.exp
+@@ -143,6 +143,24 @@
+     return
+ }
+ 
++proc dg-require-swprintf { args } {
++    if { ![ check_v3_target_swprintf ] } {
++        upvar dg-do-what dg-do-what
++        set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
++        return
++    }
++    return
++}
++
++proc dg-require-binary-io { args } {
++    if { ![ check_v3_target_binary_io ] } {
++        upvar dg-do-what dg-do-what
++        set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
++        return
++    }
++    return
++}
++
+ proc add_options_for_no_pch { flags } {
+     # This forces any generated and possibly included PCH to be invalid.
+     return "-D__GLIBCXX__=99999999"
+--- a/src/libstdc++-v3/testsuite/lib/libstdc++.exp
++++ b/src/libstdc++-v3/testsuite/lib/libstdc++.exp
+@@ -204,14 +204,23 @@
+ 	# directory, and then add that to the search path.
+ 	foreach src [glob "${srcdir}/util/*.h" \
+ 		          "${srcdir}/util/*.cc" \
+- 		          "${srcdir}/util/*/*.hpp" \
++		          "${srcdir}/util/*.tcc" \
++		          "${srcdir}/util/*.hpp" \
++ 		          "${srcdir}/util/*/*.h" \
+ 		          "${srcdir}/util/*/*.cc" \
++		          "${srcdir}/util/*/*.tcc" \
+ 			  "${srcdir}/util/*/*.hpp" \
++		          "${srcdir}/util/*/*/*.h" \
+ 		          "${srcdir}/util/*/*/*.cc" \
++		          "${srcdir}/util/*/*/*.tcc" \
+ 			  "${srcdir}/util/*/*/*.hpp" \
++		          "${srcdir}/util/*/*/*/*.h" \
+ 		          "${srcdir}/util/*/*/*/*.cc" \
++		          "${srcdir}/util/*/*/*/*.tcc" \
+   			  "${srcdir}/util/*/*/*/*.hpp" \
++		          "${srcdir}/util/*/*/*/*/*.h" \
+ 		          "${srcdir}/util/*/*/*/*/*.cc" \
++		          "${srcdir}/util/*/*/*/*/*.tcc" \
+   			  "${srcdir}/util/*/*/*/*/*.hpp" ] {
+ 	    # Remove everything up to "util/..."
+ 	    set dst [string range $src [string length "${srcdir}/"] end]
+@@ -1374,3 +1383,119 @@
+     verbose "check_v3_target_string_conversions: $et_string_conversions" 2
+     return $et_string_conversions
+ }
++
++proc check_v3_target_swprintf { } {
++    global cxxflags
++    global DEFAULT_CXXFLAGS
++    global et_swprintf
++
++    global tool
++
++    if { ![info exists et_swprintf_target_name] } {
++        set et_swprintf_target_name ""
++    }
++
++    # If the target has changed since we set the cached value, clear it.
++    set current_target [current_target_name]
++    if { $current_target != $et_swprintf_target_name } {
++        verbose "check_v3_target_swprintf: `$et_swprintf_target_name'" 2
++        set et_swprintf_target_name $current_target
++        if [info exists et_swprintf] {
++            verbose "check_v3_target_swprintf: removing cached result" 2
++            unset et_swprintf
++        }
++    }
++
++    if [info exists et_swprintf] {
++        verbose "check_v3_target_swprintf: using cached result" 2
++    } else {
++        set et_swprintf 0
++	
++	# Set up and compile a C++0x test program that depends
++        # on a standard swprintf function to be available.
++        set src swprintf[pid].cc
++        set exe swprintf[pid].exe
++
++        set f [open $src "w"]
++        puts $f "#include <bits/c++config.h>"
++        puts $f "int main()"
++        puts $f "#if !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)"
++        puts $f "{ return 0; }"
++        puts $f "#endif"
++        close $f
++
++        set cxxflags_saved $cxxflags
++        set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
++
++        set lines [v3_target_compile $src $exe executable ""]
++        set cxxflags $cxxflags_saved
++        file delete $src
++
++        if [string match "" $lines] {
++            # No error message, compilation succeeded.
++            set et_swprintf 1
++        } else {
++            verbose "check_v3_target_swprintf: compilation failed" 2
++        }
++    }
++    verbose "check_v3_target_swprintf: $et_swprintf" 2
++    return $et_swprintf
++}
++
++proc check_v3_target_binary_io { } {
++    global cxxflags
++    global DEFAULT_CXXFLAGS
++    global et_binary_io
++
++    global tool
++
++    if { ![info exists et_binary_io_target_name] } {
++        set et_binary_io_target_name ""
++    }
++
++    # If the target has changed since we set the cached value, clear it.
++    set current_target [current_target_name]
++    if { $current_target != $et_binary_io_target_name } {
++        verbose "check_v3_target_binary_io: `$et_binary_io_target_name'" 2
++        set et_binary_io_target_name $current_target
++        if [info exists et_binary_io] {
++            verbose "check_v3_target_binary_io: removing cached result" 2
++            unset et_binary_io
++        }
++    }
++
++    if [info exists et_binary_io] {
++        verbose "check_v3_target_binary_io: using cached result" 2
++    } else {
++        set et_binary_io 0
++	
++	# Set up and compile a C++0x test program that depends
++        # on text and binary I/O being the same.
++        set src binary_io[pid].cc
++        set exe binary_io[pid].exe
++
++        set f [open $src "w"]
++        puts $f "#include <bits/c++config.h>"
++        puts $f "int main()"
++        puts $f "#if !defined(_GLIBCXX_HAVE_DOS_BASED_FILESYSTEM)"
++        puts $f "{ return 0; }"
++        puts $f "#endif"
++        close $f
++
++        set cxxflags_saved $cxxflags
++        set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
++
++        set lines [v3_target_compile $src $exe executable ""]
++        set cxxflags $cxxflags_saved
++        file delete $src
++
++        if [string match "" $lines] {
++            # No error message, compilation succeeded.
++            set et_binary_io 1
++        } else {
++            verbose "check_v3_target_binary_io: compilation failed" 2
++        }
++    }
++    verbose "check_v3_target_binary_io: $et_binary_io" 2
++    return $et_binary_io
++}
+--- a/src/libstdc++-v3/testsuite/lib/prune.exp
++++ b/src/libstdc++-v3/testsuite/lib/prune.exp
+@@ -30,5 +30,23 @@
+     regsub -all "(^|\n)\[^\n\]*: Additional NOP may be necessary to workaround Itanium processor A/B step errata" $text "" text
+     regsub -all "(^|\n)\[^\n*\]*: Assembler messages:\[^\n\]*" $text "" text
+ 
++    if { [ishost "sparc*-*-solaris2*"] } {
++	# When testing a compiler built for SPARC Solaris 2.9 (or earlier)
++	# on a host running Solaris 2.10 (or later), we get this warning 
++	# from the static linker when building with g++:
++	#
++	#   libm.so.1, needed by .../libstdc++.so may conflict with
++	#   libm.so
++	#
++	# The warning is issued because libstdc++ is linked against
++	# libm.so.1 (from the Solaris 2.9 sysroot), whereas Solaris 2.10
++	# provides both libm.so.2 and libm.so.1.  On Solaris 2.10, libc.so
++	# depends on libm.so.2, so all programs pull in libm.so.2.
++	#
++	# Pulling both libraries must in fact be harmless, as, otherwise,
++	# programs built for Solaris 2.9 would break on Solaris 2.10.
++	regsub -all "(^|\n)\[^\n\]*: warning: libm.so.1, needed by \[^\n\]*, may conflict with libm.so.2" $text "" text
++    }
++
+     return $text
+ }
+--- a/src/libtool.m4
++++ b/src/libtool.m4
+@@ -2515,6 +2515,21 @@
+   shlibpath_overrides_runpath=yes
+   ;;
+ 
++nucleus*)
++  case $host_vendor in
++    samsung)
++      version_type=linux
++      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
++      soname_spec='$libname${shared_ext}$major'
++      shlibpath_var=LD_LIBRARY_PATH
++      hardcode_into_libs=yes
++      ;;
++    *)
++      dynamic_linker=no
++      ;;
++  esac
++  ;;
++
+ *nto* | *qnx*)
+   version_type=qnx
+   need_lib_prefix=no
+@@ -3019,6 +3034,10 @@
+   lt_cv_file_magic_cmd='$OBJDUMP -f'
+   ;;
+ 
++nucleuseabi*)
++  lt_cv_deplibs_check_method=pass_all
++  ;;
++
+ darwin* | rhapsody*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libjava-multiarch.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libjava-multiarch.diff
@@ -0,0 +1,69 @@
+# DP: Install libjava libraries to multiarch location
+
+Index: b/src/libjava/classpath/m4/acinclude.m4
+===================================================================
+--- a/src/libjava/classpath/m4/acinclude.m4
++++ b/src/libjava/classpath/m4/acinclude.m4
+@@ -252,6 +252,10 @@
+     .) toolexeclibdir=${libdir} ;; # Avoid trailing /.
+     *) toolexeclibdir=${libdir}/${multi_os_directory} ;;
+   esac
++  multiarch=`$CC -print-multiarch`
++  if test -n "$multiarch"; then
++    toolexeclibdir=${libdir}/${multiarch}
++  fi
+   AC_SUBST(toolexeclibdir)
+ ])
+ 
+Index: b/src/libjava/configure.ac
+===================================================================
+--- a/src/libjava/configure.ac
++++ b/src/libjava/configure.ac
+@@ -1503,6 +1503,10 @@
+       ../lib*) toolexeclibdir='$(subst /lib/../lib,/lib,'$toolexecmainlibdir/$multi_os_directory')' ;;
+       *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
+     esac
++    multiarch=`$CC -print-multiarch`
++    if test -n "$multiarch"; then
++        toolexeclibdir=$toolexecmainlibdir/$multiarch
++    fi
+     ;;
+ esac
+ AC_SUBST(toolexecdir)
+@@ -1529,6 +1533,10 @@
+    dbexecdir='$(libdir)/'$multi_os_directory/$gcjsubdir
+    ;;
+ esac
++multiarch=`$CC -print-multiarch`
++if test -n "$multiarch"; then
++    dbexecdir='$(libdir)/'$multiarch/$gcjsubdir
++fi
+ AC_SUBST(dbexecdir)
+ AC_SUBST(gcjsubdir)
+ 
+Index: b/src/libjava/Makefile.am
+===================================================================
+--- a/src/libjava/Makefile.am
++++ b/src/libjava/Makefile.am
+@@ -168,7 +168,7 @@
+ 	-DGCJ_VERSIONED_LIBDIR="\"$(dbexecdir)\"" \
+ 	-DPATH_SEPARATOR="\"$(CLASSPATH_SEPARATOR)\"" \
+ 	-DECJ_JAR_FILE="\"$(ECJ_JAR)\"" \
+-	-DLIBGCJ_DEFAULT_DATABASE="\"/var/lib/gcj-4.4/$(db_name)\"" \
++	-DLIBGCJ_DEFAULT_DATABASE="\"/var/lib/$(MULTIARCH_DIR)/gcj-4.4/$(db_name)\"" \
+ 	-DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\""
+ 
+ AM_GCJFLAGS = \
+Index: b/src/libjava/Makefile.in
+===================================================================
+--- a/src/libjava/Makefile.in
++++ b/src/libjava/Makefile.in
+@@ -877,7 +877,7 @@
+ 	-DGCJ_VERSIONED_LIBDIR="\"$(dbexecdir)\"" \
+ 	-DPATH_SEPARATOR="\"$(CLASSPATH_SEPARATOR)\"" \
+ 	-DECJ_JAR_FILE="\"$(ECJ_JAR)\"" \
+-	-DLIBGCJ_DEFAULT_DATABASE="\"/var/lib/gcj-4.4/$(db_name)\"" \
++	-DLIBGCJ_DEFAULT_DATABASE="\"/var/lib/$(MULTIARCH_DIR)/gcj-4.4/$(db_name)\"" \
+ 	-DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\""
+ 
+ AM_GCJFLAGS = \
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/svn-class-updates.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/svn-class-updates.diff
@@ -0,0 +1,26 @@
+# DP: updated class files from the 4.4 branch upto yyyymmdd.
+
+dir=gcc-4_4-branch
+tag=gcc_4_4_4_release
+branch=gcc-4_4-branch
+
+tmplist=files$$
+
+svn diff --summarize \
+        svn://gcc.gnu.org/svn/gcc/tags/$tag \
+        svn://gcc.gnu.org/svn/gcc/branches/$branch \
+    | grep '\.class$' > $tmplist
+
+sed -n '/^[AM].*\.class$/s,.*/'$tag'/\(.*\),\1,p' $tmplist \
+    > neworchanged.list
+sed -n '/^[D].*\.class$/s,.*/'$tag'/\(.*\),\1,p' $tmplist \
+    > removed.list
+sed -n '/^[^ADM].*\.class$/s,.*/'$tag'/\(.*\),\1,p' $tmplist \
+    > unknown.list
+
+echo "new or changed: $(wc -l neworchanged.list | cut '-d ' -f1), removed $(wc -l removed.list | cut '-d ' -f1): , unknown: $(wc -l unknown.list | cut '-d ' -f1)"
+tar -c -J -f java-class-files.tar.xz -C $dir -T neworchanged.list
+uuencode java-class-files.tar.xz java-class-files.tar.xz > java-class-files.tar.xz.uue
+
+rm -f $tmplist neworchanged.list removed.list unknown.list
+
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/pr43804.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/pr43804.diff
@@ -0,0 +1,14 @@
+# DP: Fix PR target/43804 with Attachment #20541 from Richard Sandiford
+
+--- a/src/gcc/config/m68k/constraints.md	2010-10-18 16:03:54.000000000 +0000
++++ b/src/gcc/config/m68k/constraints.md	2010-10-18 16:04:34.000000000 +0000
+@@ -89,7 +89,8 @@
+ (define_constraint "T"
+   "Used for operands that satisfy 's' when -mpcrel is not in effect."
+   (and (match_code "symbol_ref,label_ref,const")
+-       (match_test "!flag_pic")))
++       (match_test "!TARGET_PCREL")
++       (match_test "!flag_pic || LEGITIMATE_PIC_OPERAND_P (op)")))
+ 
+ (define_memory_constraint "Q"
+   "Means address register indirect addressing mode."
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/libstdc++-doclink.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/libstdc++-doclink.diff
@@ -0,0 +1,127 @@
+# DP: adjust hrefs to point to the local documentation
+
+---
+ libstdc++-v3/doc/doxygen/mainpage.html |   10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+--- a/src/libstdc++-v3/doc/doxygen/mainpage.html
++++ b/src/libstdc++-v3/doc/doxygen/mainpage.html
+@@ -29,8 +29,8 @@
+ <p>There are two types of documentation for libstdc++.  One is the
+    distribution documentation, which can be read online
+    <a href="http://gcc.gnu.org/onlinedocs/libstdc++/index.html">here</a>
+-   or offline from the file doc/html/index.html in the library source
+-   directory.
++   or offline in the documentation directory
++   <a href="manual/spine.html">here</a>.
+ </p>
+ 
+ <p>The other type is the source documentation, of which this is the first page.
+@@ -81,9 +81,9 @@
+   This style guide can also be viewed on the <a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01apas04.html">web</a>.
+ 
+ <h2>License, Copyright, and Other Lawyerly Verbosity</h2>
+-<p>The libstdc++ documentation is released under
+-   <a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch01s02.html">
+-   these terms</a>.
++<p>The libstdc++ documentation is released under these terms
++   (<a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/license.html">read online</a>, or
++   <a href="manual/license.html">read offline</a>).
+ </p>
+ <p>Part of the generated documentation involved comments and notes from
+    SGI, who says we gotta say this:
+--- a/src/libstdc++-v3/doc/xml/api.xml~	2009-04-16 05:33:20.000000000 +0200
++++ b/src/libstdc++-v3/doc/xml/api.xml	2009-04-27 12:38:45.000000000 +0200
+@@ -38,6 +38,11 @@
+ </para>
+ 
+ <para>
++  <ulink url="index.html">The source-level documentation for this release can be viewed offline.
++  </ulink>
++</para>
++
++<para>
+ The source-level documentation for the most recent releases can be
+ viewed online:
+ </para>
+@@ -45,37 +50,37 @@
+ <itemizedlist>
+   <listitem>
+     <para>
+-      <ulink url="libstdc++-html-USERS-3.4/index.html">for the 3.4 release
++      <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++-html-USERS-3.4/index.html">for the 3.4 release
+       </ulink>
+     </para>
+   </listitem>
+   <listitem>
+     <para>
+-      <ulink url="libstdc++-html-USERS-4.1/index.html">for the 4.1 release
++      <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++-html-USERS-4.1/index.html">for the 4.1 release
+       </ulink>
+     </para>
+   </listitem>
+   <listitem>
+     <para>
+-      <ulink url="libstdc++-html-USERS-4.2/index.html">for the 4.2 release
++      <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++-html-USERS-4.2/index.html">for the 4.2 release
+       </ulink>
+     </para>
+   </listitem>
+   <listitem>
+     <para>
+-      <ulink url="libstdc++-html-USERS-4.3/index.html">for the 4.3 release
++      <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++-html-USERS-4.3/index.html">for the 4.3 release
+       </ulink>
+     </para>
+   </listitem>
+   <listitem>
+     <para>
+-      <ulink url="libstdc++-html-USERS-4.4/index.html">for the 4.4 release
++      <ulink url="http://gcc.gnu.org/onlinedocs/libstdc++-html-USERS-4.4/index.html">for the 4.4 release
+       </ulink>
+     </para>
+   </listitem>
+   <listitem>
+     <para>
+-      <ulink url="latest-doxygen/index.html">&quot;the latest collection&quot;
++      <ulink url="http://gcc.gnu.org/onlinedocs/latest-doxygen/index.html">&quot;the latest collection&quot;
+       </ulink>
+       (For the main development tree; see the date on the first page.)
+     </para>
+--- a/src/libstdc++-v3/doc/html/api.html~	2009-04-16 05:33:20.000000000 +0200
++++ b/src/libstdc++-v3/doc/html/api.html	2009-04-27 12:42:10.000000000 +0200
+@@ -17,25 +17,28 @@
+ the library classes, finding out what is in a particular include
+ file, looking at inheritance diagrams, etc.
+ </p><p>
++<a class="ulink" href="index.html"The source-level documentation for this release can be
++viewed offline.</a>
++</p><p>
+ The source-level documentation for the most recent releases can be
+ viewed online:
+ </p><div class="itemizedlist"><ul type="disc"><li><p>
+-      <a class="ulink" href="libstdc++-html-USERS-3.4/index.html" target="_top">for the 3.4 release
++      <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++-html-USERS-3.4/index.html" target="_top">for the 3.4 release
+       </a>
+     </p></li><li><p>
+-      <a class="ulink" href="libstdc++-html-USERS-4.1/index.html" target="_top">for the 4.1 release
++      <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++-html-USERS-4.1/index.html" target="_top">for the 4.1 release
+       </a>
+     </p></li><li><p>
+-      <a class="ulink" href="libstdc++-html-USERS-4.2/index.html" target="_top">for the 4.2 release
++      <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++-html-USERS-4.2/index.html" target="_top">for the 4.2 release
+       </a>
+     </p></li><li><p>
+-      <a class="ulink" href="libstdc++-html-USERS-4.3/index.html" target="_top">for the 4.3 release
++      <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++-html-USERS-4.3/index.html" target="_top">for the 4.3 release
+       </a>
+     </p></li><li><p>
+-      <a class="ulink" href="libstdc++-html-USERS-4.4/index.html" target="_top">for the 4.4 release
++      <a class="ulink" href="http://gcc.gnu.org/onlinedocs/libstdc++-html-USERS-4.4/index.html" target="_top">for the 4.4 release
+       </a>
+     </p></li><li><p>
+-      <a class="ulink" href="latest-doxygen/index.html" target="_top">"the latest collection"
++      <a class="ulink" href="http://gcc.gnu.org/onlinedocs/latest-doxygen/index.html" target="_top">"the latest collection"
+       </a>
+       (For the main development tree; see the date on the first page.)
+     </p></li></ul></div><p>
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/ada-bug601133.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/ada-bug601133.diff
@@ -0,0 +1,31 @@
+Revert the change in uintp.adb that changes the checksum of the source
+file in the .ali file, causing bug #601133.
+
+Index: b/src/gcc/ada/uintp.adb
+===================================================================
+--- a/src/gcc/ada/uintp.adb
++++ b/src/gcc/ada/uintp.adb
+@@ -239,7 +239,7 @@
+ 
+    function Hash_Num (F : Int) return Hnum is
+    begin
+-      return Types."mod" (F, Hnum'Range_Length);
++      return Standard."mod" (F, Hnum'Range_Length);
+    end Hash_Num;
+ 
+    ---------------
+Index: b/src/gcc/ada/gcc-interface/Make-lang.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Make-lang.in
++++ b/src/gcc/ada/gcc-interface/Make-lang.in
+@@ -995,8 +995,8 @@
+ 	$(ECHO) "with Osint; use Osint;" >>tmp-sdefault.adb
+ 	$(ECHO) "package body Sdefault is" >>tmp-sdefault.adb
+ 	$(ECHO) "   S0 : constant String := \"$(prefix)/\";" >>tmp-sdefault.adb
+-	$(ECHO) "   S1 : constant String := \"$(ADA_INCLUDE_DIR)/\";" >>tmp-sdefault.adb
+-	$(ECHO) "   S2 : constant String := \"$(ADA_RTL_OBJ_DIR)/\";" >>tmp-sdefault.adb
++	$(ECHO) "   S1 : constant String := \"$(libdir)/gcc/$(target_noncanonical)/4.4/adainclude/\";" >>tmp-sdefault.adb
++	$(ECHO) "   S2 : constant String := \"$(libdir)/gcc/$(target_noncanonical)/4.4/adalib/\";" >>tmp-sdefault.adb
+ 	$(ECHO) "   S3 : constant String := \"$(target)/\";" >>tmp-sdefault.adb
+ 	$(ECHO) "   S4 : constant String := \"/usr/share/ada/adainclude/\";" >>tmp-sdefault.adb
+ 	$(ECHO) "   function Include_Dir_Default_Name return String_Ptr is" >>tmp-sdefault.adb
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/mips-triarch.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/mips-triarch.diff
@@ -0,0 +1,56 @@
+# DP: Build a tri-arch compiler on mips-linux-gnu.
+# DP: http://gcc.gnu.org/ml/gcc-patches/2009-03/msg01047.html
+
+2009-23-03  Arthur Loiret  <aloiret@debian.org>
+
+	* config.gcc (mips*-*-linux*): If 'enabled_targets' is 'all', build
+	a tri-arch compiler defaulting to 32-bit (ABI o32). In this case:
+	(tm_file): Add mips/linux64.h.
+	(tmake_file): Add mips/t-linux64.
+	(tm_defines): Add MIPS_ABI_DEFAULT=ABI_32.
+	* config/mips/linux64.h (DRIVER_SELF_SPECS): Use MULTILIB_ABI_DEFAULT
+	instead of hardcoded mabi=n32.
+---
+ gcc/config.gcc            |    7 ++++++-
+ gcc/config/mips/linux64.h |    2 +-
+ gcc/config/mips/t-linux64 |    4 ++++
+ 3 files changed, 11 insertions(+), 2 deletions(-)
+
+Index: b/src/gcc/config.gcc
+===================================================================
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -1591,8 +1591,14 @@
+ 	test x$with_llsc != x || with_llsc=yes
+ 	;;
+ mips*-*-linux*)				# Linux MIPS, either endian.
+-        tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
++	tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
+ 	tmake_file="${tmake_file} mips/t-libgcc-mips16"
++	if test x$enable_targets = xall; then
++		tm_file="${tm_file} mips/linux64.h"
++		tmake_file="${tmake_file} mips/t-linux64"
++	else
++		tmake_file="${tmake_file} mips/t-linux"
++	fi
+ 	case ${target} in
+         mipsisa32r2*)
+ 		tm_defines="${tm_defines} MIPS_ISA_DEFAULT=33"
+Index: b/src/gcc/config/mips/linux64.h
+===================================================================
+--- a/src/gcc/config/mips/linux64.h
++++ b/src/gcc/config/mips/linux64.h
+@@ -26,7 +26,7 @@
+   BASE_DRIVER_SELF_SPECS, \
+   LINUX_DRIVER_SELF_SPECS \
+   " %{!EB:%{!EL:%(endian_spec)}}" \
+-  " %{!mabi=*: -mabi=n32}"
++  " %{!mabi=*: -" MULTILIB_ABI_DEFAULT "}"
+ 
+ #undef LIB_SPEC
+ #define LIB_SPEC "\
+--- a/src/gcc/config/mips/t-linux
++++ b/src/gcc/config/mips/t-linux
+@@ -0,0 +1,2 @@
++MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el)
++MULTIARCH_DIRNAME = mips$(MIPS_EL)-linux-gnu
--- gdc-4.4-1.063-4.4.7.orig/debian/patches/gcj-use-atomic-builtins-doc.diff
+++ gdc-4.4-1.063-4.4.7/debian/patches/gcj-use-atomic-builtins-doc.diff
@@ -0,0 +1,33 @@
+# DP: gcj: add option -fuse-atomic-builtins (documentation)
+
+gcc/java/
+
+2009-08-12  Andrew Haley  <aph@redhat.com>
+
+	* builtins.c (compareAndSwapInt_builtin): Use
+	flag_use_atomic_builtins.
+	(compareAndSwapLong_builtin): Likewise.
+	(compareAndSwapObject_builtin): Likewise.
+	* jvspec.c: Add flag_use_atomic_builtins.
+	* gcj.texi: Likewise.
+	* java-tree.h: Likewise.
+	* lang.opt: Likewise.
+
+Index: gcc/java/gcj.texi
+===================================================================
+--- a/src/gcc/java/gcj.texi	(revision 155104)
++++ b/src/gcc/java/gcj.texi	(working copy)
+@@ -607,6 +607,13 @@
+ accessing an object via a reference.  On other systems you won't need
+ this because null pointer accesses are caught automatically by the
+ processor.
++
++@item -fuse-atomic-builtins
++On some systems, gcc can generate code for built-in atomic operations.
++Use this option to force gcj to use these builtins when compiling Java
++code.  Where this capability is present it should be automatically
++detected, so you won't usually need to use this option.
++
+ @end table
+ 
+ @c man end
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-source.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-source.mk
@@ -0,0 +1,53 @@
+indep_binaries := $(indep_binaries) gcc-source
+
+ifeq ($(BACKPORT),true)
+  p_source = gcc$(pkg_ver)-$(GCC_VERSION)-source
+else
+  p_source = gcc$(pkg_ver)-source
+endif
+d_source= debian/$(p_source)
+
+$(binary_stamp)-gcc-source:
+	dh_testdir
+	dh_testroot
+
+	dh_installdocs -p$(p_source)
+	dh_installchangelogs -p$(p_source)
+
+	dh_install -p$(p_source) $(gcc_tarball) usr/src/gcc$(pkg_ver)
+#	dh_install -p$(p_source) $(gcj_tarball) usr/src/gcc$(pkg_ver)
+	tar cf - $$(find './debian' -mindepth 1 \( \
+		-name .svn -prune -o \
+		-path './debian/gcc-*' -type d -prune -o \
+		-path './debian/cpp-*' -type d -prune -o \
+		-path './debian/*fortran*' -type d -prune -o \
+		-path './debian/lib*' -type d -prune -o \
+		-path './debian/patches/*' -prune -o \
+		-path './debian/tmp*' -prune -o \
+		-path './debian/files' -prune -o \
+		-path './debian/rules.d/*' -prune -o \
+		-path './debian/soname-cache' -prune -o \
+		-path './debian/*substvars*' -prune -o \
+		-path './debian/gcc-snapshot*' -prune -o \
+		-path './debian/*[0-9]*.p*' -prune -o \
+		-path './debian/*$(pkg_ver)[.-]*' -prune -o \
+		-print \) ) \
+	  | tar -x -C $(d_source)/usr/src/gcc$(pkg_ver)  -f -
+	# FIXME: Remove generated files
+	find $(d_source)/usr/src/gcc$(pkg_ver) -name '*.debhelper.log' -o -name .svn | xargs rm -rf
+
+	dh_link -p$(p_source) \
+		/usr/src/gcc$(pkg_ver)/debian/patches /usr/src/gcc$(pkg_ver)/patches
+
+	mkdir -p $(d_source)/usr/share/lintian/overrides
+	cp -p debian/$(p_source).overrides \
+		$(d_source)/usr/share/lintian/overrides/$(p_source)
+
+	dh_fixperms -p$(p_source)
+	dh_compress -p$(p_source)
+	dh_gencontrol -p$(p_source) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_source)
+	dh_md5sums -p$(p_source)
+	dh_builddeb -p$(p_source)
+
+	touch $@
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-libgomp.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-libgomp.mk
@@ -0,0 +1,55 @@
+$(lib_binaries)  += libgomp
+ifeq ($(with_lib64gomp),yes)
+  $(lib_binaries)  += lib64gomp
+endif
+ifeq ($(with_lib32gomp),yes)
+  $(lib_binaries)	+= lib32gomp
+endif
+ifeq ($(with_libn32gomp),yes)
+  $(lib_binaries)	+= libn32gomp
+endif
+
+define __do_gomp
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l) $(d_d)
+	dh_installdirs -p$(p_l) $(usr_lib$(2))
+	DH_COMPAT=2 dh_movefiles -p$(p_l) $(usr_lib$(2))/libgomp.so.*
+
+	debian/dh_doclink -p$(p_l) $(p_base)
+	debian/dh_doclink -p$(p_d) $(p_base)
+
+	dh_strip -p$(p_l) --dbg-package=$(p_d)
+	dh_compress -p$(p_l) -p$(p_d)
+	dh_fixperms -p$(p_l) -p$(p_d)
+	dh_makeshlibs -p$(p_l)
+	$(call cross_mangle_shlibs,$(p_l))
+	DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_l)
+	$(call cross_mangle_substvars,$(p_l))
+	dh_gencontrol -p$(p_l) -p$(p_d)	\
+		-- -v$(DEB_VERSION) $(common_substvars)
+	$(call cross_mangle_control,$(p_l))
+	dh_installdeb -p$(p_l) -p$(p_d)
+	dh_md5sums -p$(p_l) -p$(p_d)
+	dh_builddeb -p$(p_l) -p$(p_d)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+# ----------------------------------------------------------------------
+
+do_gomp = $(call __do_gomp,lib$(1)gomp$(GOMP_SONAME),$(1))
+
+$(binary_stamp)-libgomp: $(install_stamp)
+	$(call do_gomp,)
+
+$(binary_stamp)-lib64gomp: $(install_stamp)
+	$(call do_gomp,64)
+
+$(binary_stamp)-lib32gomp: $(install_stamp)
+	$(call do_gomp,32)
+
+$(binary_stamp)-libn32gomp: $(install_stamp)
+	$(call do_gomp,n32)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-nof.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-nof.mk
@@ -0,0 +1,56 @@
+arch_binaries  := $(arch_binaries) nof
+
+p_nof  = gcc$(pkg_ver)-nof
+d_nof  = debian/$(p_nof)
+
+dirs_nof = \
+	$(docdir) \
+	$(usr_lib)/nof
+ifeq ($(with_cdev),yes)
+  dirs_nof += \
+	$(gcc_lib_dir)/nof
+endif
+
+ifeq ($(with_cdev),yes)
+  files_nof = \
+	$(libgcc_dir)/libgcc_s_nof.so.$(GCC_SONAME) \
+	$(gcc_lib_dir)/libgcc_s_nof.so \
+	$(usr_lib)/nof \
+	$(gcc_lib_dir)/nof
+else
+  files_nof = \
+	$(usr_lib)/libgcc_s_nof.so.$(GCC_SONAME)
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-nof: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	mv $(d)/$(usr_lib)/libgcc_s_nof.so.$(GCC_SONAME) $(d)/$(libgcc_dir)/.
+	rm -f $(d)/$(usr_lib)/libgcc_s_nof.so
+	ln -sf $(libgcc_dir)/libgcc_s_nof.so.$(GCC_SONAME) \
+		$(d)/$(gcc_lib_dir)/libgcc_s_nof.so
+
+	rm -rf $(d_nof)
+	dh_installdirs -p$(p_nof) $(dirs_nof)
+	DH_COMPAT=2 dh_movefiles -p$(p_nof) $(files_nof)
+	debian/dh_doclink -p$(p_nof) $(p_base)
+	dh_strip -p$(p_nof)
+	dh_compress -p$(p_nof)
+	dh_fixperms -p$(p_nof)
+	dh_shlibdeps -p$(p_nof)
+
+	dh_makeshlibs -p$(p_nof)
+	: # Only keep the shlibs file for the libgcc_s_nof library
+	fgrep libgcc_s_nof debian/$(p_nof)/DEBIAN/shlibs \
+		> debian/$(p_nof)/DEBIAN/shlibs.tmp
+	mv -f debian/$(p_nof)/DEBIAN/shlibs.tmp debian/$(p_nof)/DEBIAN/shlibs
+
+	dh_gencontrol -p$(p_nof) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_nof)
+	dh_md5sums -p$(p_nof)
+	dh_builddeb -p$(p_nof)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-proto.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-proto.mk
@@ -0,0 +1,43 @@
+arch_binaries  := $(arch_binaries) proto
+
+p_proto	= protoize
+d_proto	= debian/$(p_proto)
+
+dirs_proto = \
+	$(docdir) \
+	$(PF)/share/man/man1 \
+	$(PF)/bin
+files_proto = \
+	$(PF)/bin/{protoize,unprotoize} \
+	$(PF)/share/man/man1/{protoize,unprotoize}.1
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-proto: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_proto)
+	dh_installdirs -p$(p_proto) $(dirs_proto)
+
+ifeq ($(versioned_packages),yes)
+	: # rename versioned files back to unversioned ones.
+	for i in protoize unprotoize; do \
+	  mv $(d)/$(PF)/bin/$$i$(pkg_ver) $(d)/$(PF)/bin/$$i; \
+	done
+endif
+	$(IR) debian/protoize.1 $(d)/$(PF)/share/man/man1/
+	ln -sf protoize.1 $(d)/$(PF)/share/man/man1/unprotoize.1
+	DH_COMPAT=2 dh_movefiles -p$(p_proto) $(files_proto)
+
+	debian/dh_doclink -p$(p_proto) $(p_base)
+	dh_strip -p$(p_proto)
+	dh_compress -p$(p_proto)
+	dh_fixperms -p$(p_proto)
+	dh_shlibdeps -p$(p_proto)
+	dh_gencontrol -p$(p_proto) -- -v$(DEB_EVERSION) $(common_substvars)
+	dh_installdeb -p$(p_proto)
+	dh_md5sums -p$(p_proto)
+	dh_builddeb -p$(p_proto)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-libgcc.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-libgcc.mk
@@ -0,0 +1,106 @@
+ifeq ($(with_libgcc),yes)
+  $(lib_binaries)	+= libgcc
+
+  ifeq ($(with_lib64gcc),yes)
+    $(lib_binaries)	+= lib64gcc
+  endif
+  ifeq ($(biarch32),yes)
+    $(lib_binaries)	+= lib32gcc
+  endif
+  ifeq ($(biarchn32),yes)
+    $(lib_binaries)	+= libn32gcc
+  endif
+endif
+
+p_lgcc		= libgcc$(GCC_SONAME)$(cross_lib_arch)
+p_lgccdbg	= libgcc$(GCC_SONAME)-dbg$(cross_lib_arch)
+d_lgcc		= debian/$(p_lgcc)
+d_lgccdbg	= debian/$(p_lgccdbg)
+
+p_l32gcc	= lib32gcc$(GCC_SONAME)$(cross_lib_arch)
+p_l32gccdbg	= lib32gcc$(GCC_SONAME)-dbg$(cross_lib_arch)
+d_l32gcc	= debian/$(p_l32gcc)
+d_l32gccdbg	= debian/$(p_l32gccdbg)
+
+p_l64gcc	= lib64gcc$(GCC_SONAME)$(cross_lib_arch)
+p_l64gccdbg	= lib64gcc$(GCC_SONAME)-dbg$(cross_lib_arch)
+d_l64gcc	= debian/$(p_l64gcc)
+d_l64gccdbg	= debian/$(p_l64gccdbg)
+
+p_ln32gcc	= libn32gcc$(GCC_SONAME)$(cross_lib_arch)
+p_ln32gccdbg	= libn32gcc$(GCC_SONAME)-dbg$(cross_lib_arch)
+d_ln32gcc	= debian/$(p_ln32gcc)
+d_ln32gccdbg	= debian/$(p_ln32gccdbg)
+
+define __do_libgcc
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l) $(d_d)
+
+	dh_installdirs -p$(p_l) \
+		$(docdir)/$(p_l) \
+		$(libgcc_dir$(2))
+	$(if $(filter yes,$(with_shared_libgcc)),
+		mv $(d)/$(usr_lib$(2))/libgcc_s.so.$(GCC_SONAME) \
+			$(d_l)/$(libgcc_dir$(2))/.
+	)
+
+	debian/dh_doclink -p$(p_l) $(if $(3),$(3),$(p_base))
+	debian/dh_doclink -p$(p_d) $(if $(3),$(3),$(p_base))
+	debian/dh_rmemptydirs -p$(p_l)
+	debian/dh_rmemptydirs -p$(p_d)
+	dh_strip -p$(p_l) --dbg-package=$(p_d)
+
+	$(if $(filter yes,$(with_shared_libgcc)),
+		dh_makeshlibs -p$(p_l) -p$(p_d) \
+			-- -v$(DEB_LIBGCC_VERSION)
+		$(call cross_mangle_shlibs,$(p_l))
+		$(if $(filter $(DEB_TARGET_ARCH),armel),
+			grep -q '^ __aeabi' $(d_l)/DEBIAN/symbols \
+			  || cat debian/libgcc1.symbols.aeabi \
+				>> $(d_l)/DEBIAN/symbols
+		)
+	)
+
+	DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_l)
+	$(call cross_mangle_substvars,$(p_l))
+
+	dh_compress -p$(p_l) -p$(p_d)
+	dh_fixperms -p$(p_l) -p$(p_d)
+	dh_gencontrol -p$(p_l) -p$(p_d) \
+		-- -v$(DEB_LIBGCC_VERSION) $(common_substvars)
+	$(call cross_mangle_control,$(p_l))
+
+	$(if $(2),,	# only for native
+		mkdir -p $(d_l)/usr/share/lintian/overrides
+		echo '$(p_l): package-name-doesnt-match-sonames' \
+			> $(d_l)/usr/share/lintian/overrides/$(p_l)
+	)
+
+	dh_installdeb -p$(p_l) -p$(p_d)
+	dh_md5sums -p$(p_l) -p$(p_d)
+	dh_builddeb -p$(p_l) -p$(p_d)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+do_libgcc = $(call __do_libgcc,lib$(1)gcc$(GCC_SONAME),$(1),$(2))
+# ----------------------------------------------------------------------
+
+$(binary_stamp)-libgcc: $(install_dependencies)
+ifeq ($(with_standalone_gcj),yes)
+	$(call do_libgcc,,$(p_jbase))
+else
+	$(call do_libgcc,,)
+endif
+
+$(binary_stamp)-lib64gcc: $(install_dependencies)
+	$(call do_libgcc,64,)
+
+$(binary_stamp)-lib32gcc: $(install_dependencies)
+	$(call do_libgcc,32,)
+
+$(binary_stamp)-libn32gcc: $(install_dependencies)
+	$(call do_libgcc,n32,)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-softfloat.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-softfloat.mk
@@ -0,0 +1,33 @@
+arch_binaries  := $(arch_binaries) softfloat
+
+p_softfloat  = gcc$(pkg_ver)-soft-float
+d_softfloat  = debian/$(p_softfloat)
+
+dirs_softfloat = \
+	$(PF)/$(libdir)/soft-float \
+	$(gcc_lib_dir)/soft-float
+
+files_softfloat = \
+	$(PF)/$(libdir)/soft-float \
+	$(gcc_lib_dir)/soft-float
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-softfloat: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_softfloat)
+	dh_installdirs -p$(p_softfloat) $(dirs_softfloat)
+	DH_COMPAT=2 dh_movefiles -p$(p_softfloat) $(files_softfloat)
+	debian/dh_doclink -p$(p_softfloat) $(p_base)
+	dh_strip -p$(p_softfloat) -Xlibgcj.a
+	dh_compress -p$(p_softfloat)
+	dh_fixperms -p$(p_softfloat)
+	dh_shlibdeps -p$(p_softfloat)
+	dh_gencontrol -p$(p_softfloat) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_softfloat)
+	dh_md5sums -p$(p_softfloat)
+	dh_builddeb -p$(p_softfloat)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-libgccmath.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-libgccmath.mk
@@ -0,0 +1,141 @@
+ifeq ($(with_libgmath),yes)
+  arch_binaries  := $(arch_binaries) libgmath
+endif
+#ifeq ($(with_libgmathdev),yes)
+#  arch_binaries  := $(arch_binaries) libgmathdev
+#endif
+ifeq ($(with_lib64gmath),yes)
+  arch_binaries  := $(arch_binaries) lib64gmath
+endif
+ifeq ($(with_lib32gmath),yes)
+  arch_binaries	:= $(arch_binaries) lib32gmath
+endif
+
+p_gmath		= libgccmath$(GCCMATH_SONAME)
+p_l32gmath	= lib32gccmath$(GCCMATH_SONAME)
+p_l64gmath	= lib64gccmath$(GCCMATH_SONAME)
+p_gmathd	= libgccmath$(GCCMATH_SONAME)-dev
+
+d_gmath		= debian/$(p_gmath)
+d_l32gmath	= debian/$(p_l32gmath)
+d_l64gmath	= debian/$(p_l64gmath)
+d_gmathd	= debian/$(p_gmathd)
+
+dirs_gmath = \
+	$(docdir) \
+	$(PF)/$(libdir)
+files_gmath = \
+	$(PF)/$(libdir)/libgcc-math.so.*
+
+dirs_gmathd = \
+	$(docdir)/$(p_base)
+ifeq ($(with_libgmath),yes)
+files_gmathd = \
+	$(PF)/$(libdir)/libgcc-math.{a,so}
+endif
+
+ifeq ($(with_lib32gmath),yes)
+	dirs_gmathd  += $(lib32)
+	files_gmathd += $(lib32)/libgcc-math.{a,so}
+endif
+ifeq ($(with_lib64gmath),yes)
+	dirs_gmathd  += $(PF)/lib64
+	files_gmathd += $(PF)/lib64/libgcc-math.{a,so}
+endif
+
+$(binary_stamp)-libgmath: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+	rm -rf $(d_gmath)
+	dh_installdirs -p$(p_gmath) $(dirs_gmath)
+	DH_COMPAT=2 dh_movefiles -p$(p_gmath) $(files_gmath)
+	debian/dh_doclink -p$(p_gmath) $(p_base)
+	debian/dh_rmemptydirs -p$(p_gmath)
+	dh_strip -p$(p_gmath)
+	dh_compress -p$(p_gmath)
+	dh_fixperms -p$(p_gmath)
+	dh_makeshlibs -p$(p_gmath) -V '$(p_gmath) (>= $(DEB_GCCMATH_SOVERSION))'
+	dh_shlibdeps -p$(p_gmath)
+	dh_gencontrol -p$(p_gmath) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_gmath)
+	dh_md5sums -p$(p_gmath)
+	dh_builddeb -p$(p_gmath)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgmathdev: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gmathd)
+	dh_installdirs -p$(p_gmathd) $(dirs_gmathd)
+	DH_COMPAT=2 dh_movefiles -p$(p_gmathd) $(files_gmathd)
+	debian/dh_doclink -p$(p_gmathd) $(p_base)
+	cp -p $(srcdir)/libgcc-math/ChangeLog \
+		$(d_gmathd)/$(docdir)/$(p_base)/changelog.libgcc-math
+	debian/dh_rmemptydirs -p$(p_gmathd)
+	dh_strip -p$(p_gmathd)
+	dh_compress -p$(p_gmathd)
+	dh_fixperms -p$(p_gmathd)
+	dh_shlibdeps -p$(p_gmathd)
+	dh_gencontrol -p$(p_gmathd) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_gmathd)
+	dh_md5sums -p$(p_gmathd)
+	dh_builddeb -p$(p_gmathd)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib64gmath: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l64gmath)
+	dh_installdirs -p$(p_l64gmath) \
+		$(PF)/lib64
+	DH_COMPAT=2 dh_movefiles -p$(p_l64gmath) \
+		$(PF)/lib64/libgcc-math.so.*
+
+	debian/dh_doclink -p$(p_l64gmath) $(p_base)
+
+	dh_strip -p$(p_l64gmath)
+	dh_compress -p$(p_l64gmath)
+	dh_fixperms -p$(p_l64gmath)
+	dh_makeshlibs -p$(p_l64gmath) -V '$(p_l64gmath) (>= $(DEB_GCCMATH_SOVERSION))'
+#	dh_shlibdeps -p$(p_l64gmath)
+	dh_gencontrol -p$(p_l64gmath) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_l64gmath)
+	dh_md5sums -p$(p_l64gmath)
+	dh_builddeb -p$(p_l64gmath)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib32gmath: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l32gmath)
+	dh_installdirs -p$(p_l32gmath) \
+		$(lib32)
+	DH_COMPAT=2 dh_movefiles -p$(p_l32gmath) \
+		$(lib32)/libgcc-math.so.*
+
+	debian/dh_doclink -p$(p_l32gmath) $(p_base)
+
+	dh_strip -p$(p_l32gmath)
+	dh_compress -p$(p_l32gmath)
+	dh_fixperms -p$(p_l32gmath)
+	dh_makeshlibs -p$(p_l32gmath) -V '$(p_l32gmath) (>= $(DEB_GCCMATH_SOVERSION))'
+	dh_shlibdeps -p$(p_l32gmath)
+	dh_gencontrol -p$(p_l32gmath) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_l32gmath)
+	dh_md5sums -p$(p_l32gmath)
+	dh_builddeb -p$(p_l32gmath)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-objcxx.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-objcxx.mk
@@ -0,0 +1,65 @@
+ifneq (,$(filter yes, $(biarch64) $(biarch32) $(biarchn32)))
+  arch_binaries  := $(arch_binaries) objcxx-multi
+endif
+arch_binaries := $(arch_binaries) objcxx
+
+p_objcx		= gobjc++$(pkg_ver)$(cross_bin_arch)
+d_objcx		= debian/$(p_objcx)
+
+p_objcx_m	= gobjc++$(pkg_ver)-multilib$(cross_bin_arch)
+d_objcx_m	= debian/$(p_objcx_m)
+
+dirs_objcx = \
+	$(docdir)/$(p_base)/Obj-C++ \
+	$(gcc_lexec_dir)
+
+files_objcx = \
+	$(gcc_lexec_dir)/cc1objplus
+
+$(binary_stamp)-objcxx: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_objcx)
+	dh_installdirs -p$(p_objcx) $(dirs_objcx)
+	DH_COMPAT=2 dh_movefiles -p$(p_objcx) $(files_objcx)
+
+	debian/dh_doclink -p$(p_objcx) $(p_base)
+	cp -p $(srcdir)/gcc/objcp/ChangeLog \
+		$(d_objcx)/$(docdir)/$(p_base)/Obj-C++/changelog
+
+	debian/dh_rmemptydirs -p$(p_objcx)
+
+	dh_strip -p$(p_objcx)
+	dh_compress -p$(p_objcx)
+
+	dh_fixperms -p$(p_objcx)
+	dh_shlibdeps -p$(p_objcx)
+	dh_gencontrol -p$(p_objcx) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_objcx)
+	dh_md5sums -p$(p_objcx)
+	dh_builddeb -p$(p_objcx)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+$(binary_stamp)-objcxx-multi: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_objcx_m)
+
+	debian/dh_doclink -p$(p_objcx_m) $(p_base)
+	debian/dh_rmemptydirs -p$(p_objcx_m)
+	dh_strip -p$(p_objcx_m)
+	dh_compress -p$(p_objcx_m)
+
+	dh_fixperms -p$(p_objcx_m)
+	dh_shlibdeps -p$(p_objcx_m)
+	dh_gencontrol -p$(p_objcx_m) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_objcx_m)
+	dh_md5sums -p$(p_objcx_m)
+	dh_builddeb -p$(p_objcx_m)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-libmudflap.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-libmudflap.mk
@@ -0,0 +1,117 @@
+ifeq ($(with_dev),yes)
+  $(lib_binaries)  += libmudflapdev
+endif
+
+ifeq ($(with_libmudflap),yes)
+  $(lib_binaries)  += libmudflap
+  ifeq ($(with_lib64mudflap),yes)
+    $(lib_binaries)  += lib64mudflap
+  endif
+  ifeq ($(with_lib32mudflap),yes)
+    $(lib_binaries)	+= lib32mudflap
+  endif
+  ifeq ($(with_libn32mudflap),yes)
+    $(lib_binaries)	+= libn32mudflap
+  endif
+endif
+
+p_mfd	= libmudflap$(MUDFLAP_SONAME)$(pkg_ver)-dev$(cross_lib_arch)
+d_mfd	= debian/$(p_mfd)
+
+define __do_mudflap
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l) $(d_d)
+	dh_installdirs -p$(p_l) $(usr_lib$(2))
+	DH_COMPAT=2 dh_movefiles -p$(p_l) $(usr_lib$(2))/libmudflap*.so.*
+
+	debian/dh_doclink -p$(p_l) $(p_base)
+	debian/dh_doclink -p$(p_d) $(p_base)
+
+	debian/dh_rmemptydirs -p$(p_l)
+
+	dh_strip -p$(p_l) --dbg-package=$(p_d)
+	dh_compress -p$(p_l) -p$(p_d)
+	dh_fixperms -p$(p_l) -p$(p_d)
+	dh_makeshlibs -p$(p_l) -V '$(p_l) (>= $(DEB_SOVERSION))'
+	$(call cross_mangle_shlibs,$(p_l))
+	DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_l)
+	$(call cross_mangle_substvars,$(p_l))
+	dh_gencontrol -p$(p_l) -p$(p_d) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+	$(call cross_mangle_control,$(p_l))
+	dh_installdeb -p$(p_l) -p$(p_d)
+	dh_md5sums -p$(p_l) -p$(p_d)
+	dh_builddeb -p$(p_l) -p$(p_d)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+do_mudflap = $(call __do_mudflap,lib$(1)mudflap$(MUDFLAP_SONAME),$(1))
+
+define __do_mudflap_dev
+	dh_installdirs -p$(p_mfd) $(1)
+	DH_COMPAT=2 dh_movefiles -p$(p_mfd) $(1)/libmudflap*.a
+	rm -f $(d)/$(2)/libmudflap*.so
+	mv $(d)/$(2)/libmudflap*.a $(d_mfd)/$(1)/
+	dh_link -p$(p_mfd) \
+	  /$(2)/libmudflap.so.$(MUDFLAP_SONAME) /$(1)/libmudflap.so \
+	  /$(2)/libmudflapth.so.$(MUDFLAP_SONAME) /$(1)/libmudflapth.so
+endef
+
+do_mudflap_dev = $(call __do_mudflap_dev,$(gcc_lib_dir$(1)),$(usr_lib$(1)))
+
+# ----------------------------------------------------------------------
+
+$(binary_stamp)-libmudflap: $(install_stamp)
+	$(call do_mudflap,)
+
+$(binary_stamp)-lib64mudflap: $(install_stamp)
+	$(call do_mudflap,64)
+
+$(binary_stamp)-lib32mudflap: $(install_stamp)
+	$(call do_mudflap,32)
+
+$(binary_stamp)-libn32mudflap: $(install_stamp)
+	$(call do_mudflap,n32)
+
+$(binary_stamp)-libmudflapdev: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_mfd)
+	dh_installdirs -p$(p_mfd) $(docdir)/$(p_base)/mudflap
+
+	DH_COMPAT=2 dh_movefiles -p$(p_mfd) $(gcc_lib_dir)/include/mf-runtime.h
+
+	$(call do_mudflap_dev,)
+ifeq ($(with_lib32mudflap),yes)
+	$(call do_mudflap_dev,32)
+endif
+ifeq ($(with_lib64mudflap),yes)
+	$(call do_mudflap_dev,64)
+endif
+ifeq ($(with_libn32mudflap),yes)
+	$(call do_mudflap_dev,n32)
+endif
+
+	cp -p $(srcdir)/libmudflap/ChangeLog \
+		$(d_mfd)/$(docdir)/$(p_base)/mudflap/changelog
+
+	debian/dh_doclink -p$(p_mfd) $(p_base)
+	debian/dh_rmemptydirs -p$(p_mfd)
+
+	dh_strip -p$(p_mfd)
+	dh_compress -p$(p_mfd)
+	dh_fixperms -p$(p_mfd)
+	dh_shlibdeps -p$(p_mfd)
+	dh_gencontrol -p$(p_mfd) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_mfd)
+	dh_md5sums -p$(p_mfd)
+	dh_builddeb -p$(p_mfd)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-hppa64.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-hppa64.mk
@@ -0,0 +1,29 @@
+arch_binaries  := $(arch_binaries) hppa64
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-hppa64: $(install_hppa64_stamp)
+	dh_testdir
+	dh_testroot
+
+#	dh_installdirs -p$(p_hppa64)
+
+	: # provide as and ld links
+	dh_link -p $(p_hppa64) \
+		/usr/bin/hppa64-linux-gnu-as \
+		/$(PF)/lib/gcc/hppa64-linux-gnu/$(GCC_VERSION)/as \
+		/usr/bin/hppa64-linux-gnu-ld \
+		/$(PF)/lib/gcc/hppa64-linux-gnu/$(GCC_VERSION)/ld
+
+	debian/dh_doclink -p$(p_hppa64) $(p_base)
+	debian/dh_rmemptydirs -p$(p_hppa64)
+
+	dh_strip -p$(p_hppa64) -X.o -Xlibgcc.a -Xlibgcov.a
+	dh_compress -p$(p_hppa64)
+	dh_fixperms -p$(p_hppa64)
+	dh_shlibdeps -p$(p_hppa64)
+	dh_gencontrol -p$(p_hppa64) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_hppa64)
+	dh_md5sums -p$(p_hppa64)
+	dh_builddeb -p$(p_hppa64)
+
+	touch $@
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-cxx.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-cxx.mk
@@ -0,0 +1,136 @@
+ifneq (,$(filter yes, $(biarch64) $(biarch32) $(biarchn32)))
+  arch_binaries  := $(arch_binaries) cxx-multi
+endif
+arch_binaries  := $(arch_binaries) cxx
+
+dirs_cxx = \
+	$(docdir)/$(p_base)/C++ \
+	$(PF)/bin \
+	$(PF)/share/info \
+	$(gcc_lexec_dir) \
+	$(PF)/share/man/man1
+files_cxx = \
+	$(PF)/bin/$(cmd_prefix)g++$(pkg_ver) \
+	$(gcc_lexec_dir)/cc1plus
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  files_cxx += \
+	$(PF)/share/man/man1/$(cmd_prefix)g++$(pkg_ver).1
+endif
+
+p_cxx_m	= g++$(pkg_ver)-multilib$(cross_bin_arch)
+d_cxx_m	= debian/$(p_cxx_m)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-cxx: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_cxx)
+	dh_installdirs -p$(p_cxx) $(dirs_cxx)
+	DH_COMPAT=2 dh_movefiles -p$(p_cxx) $(files_cxx)
+
+ifneq ($(DEB_CROSS),yes)
+	ln -sf g++$(pkg_ver) \
+	    $(d_cxx)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-g++$(pkg_ver)
+	ln -sf g++$(pkg_ver) \
+	    $(d_cxx)/$(PF)/bin/$(TARGET_ALIAS)-g++$(pkg_ver)
+endif
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+# g++ man page is a .so link
+	rm -f $(d_cxx)/$(PF)/share/man/man1/$(cmd_prefix)g++$(pkg_ver).1
+	ln -sf $(cmd_prefix)gcc$(pkg_ver).1.gz \
+		$(d_cxx)/$(PF)/share/man/man1/$(cmd_prefix)g++$(pkg_ver).1.gz
+  ifneq ($(DEB_CROSS),yes)
+	ln -sf g++$(pkg_ver).1.gz \
+	    $(d_cxx)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-g++$(pkg_ver).1.gz
+	ln -sf g++$(pkg_ver).1.gz \
+	    $(d_cxx)/$(PF)/share/man/man1/$(TARGET_ALIAS)-g++$(pkg_ver).1.gz
+  endif
+endif
+
+	debian/dh_doclink -p$(p_cxx) $(p_base)
+	cp -p debian/README.C++ $(d_cxx)/$(docdir)/$(p_base)/C++/
+	cp -p $(srcdir)/gcc/cp/ChangeLog \
+		$(d_cxx)/$(docdir)/$(p_base)/C++/changelog
+	debian/dh_rmemptydirs -p$(p_cxx)
+
+	mkdir -p $(d_cxx)/$(docdir)/$(p_base)/test-summaries
+	echo "TEST COMPARE BEGIN"
+ifeq ($(with_check),yes)
+	cp -p $$(find $(builddir) -mindepth 3 -name '*.sum') \
+		$(d_cxx)/$(docdir)/$(p_base)/test-summaries/
+  ifeq (0,1)
+	cd $(builddir); \
+	for i in $(CURDIR)/$(d_cxx)/$(docdir)/$(p_base)/test-summaries/*.sum; do \
+	  b=$$(basename $$i); \
+	  if [ -f /usr/share/doc/$(p_base)/test-summaries/$$b.gz ]; then \
+	    zcat /usr/share/doc/$(p_base)/test-summaries/$$b.gz > /tmp/$$b; \
+	    if sh $(srcdir)/contrib/test_summary /tmp/$$b $$i; then \
+	      echo "$$b: OK"; \
+	    else \
+	      echo "$$b: FAILURES"; \
+	    fi; \
+	    rm -f /tmp/$$b; \
+	  else \
+	    echo "Test summary for $$b is not available"; \
+	  fi; \
+	done
+  endif
+else
+	echo "Nothing to compare (testsuite not run)"
+endif	
+	echo "TEST COMPARE END"
+
+	dh_strip -p$(p_cxx)
+	dh_compress -p$(p_cxx)
+	dh_fixperms -p$(p_cxx)
+	dh_shlibdeps -p$(p_cxx)
+	dh_gencontrol -p$(p_cxx) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_cxx)
+	dh_md5sums -p$(p_cxx)
+	dh_builddeb -p$(p_cxx)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+define do_cxx
+	dh_installdirs -p$(p_cxx_m) $(gcc_lib_dir($1))
+	mv $(d)/$(usr_lib$(1))/lib*c++*.{a,so} $(d)/$(gcc_lib_dir$(1))/.
+	DH_COMPAT=2 dh_movefiles -p$(p_cxx_m) \
+		$(gcc_lib_dir$(1))/libstdc++.{a,so} \
+	        $(gcc_lib_dir$(1))/libsupc++.a \
+		$(gcc_lib_dir$(1))/libstdc++_pic.a
+	dh_link -p$(p_cxx_m) \
+		/$(usr_lib$(1))/libstdc++.so.$(CXX_SONAME) \
+		/$(gcc_lib_dir$(1))/libstdc++.so
+
+endef
+
+$(binary_stamp)-cxx-multi: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_cxx_m)
+	dh_installdirs -p$(p_cxx_m) \
+		$(docdir)
+
+	$(foreach flavour,$(flavours), \
+		$(call do_cxx,$(flavour)))
+
+	debian/dh_doclink -p$(p_cxx_m) $(p_base)
+	debian/dh_rmemptydirs -p$(p_cxx_m)
+
+	dh_strip -p$(p_cxx_m)
+	dh_compress -p$(p_cxx_m)
+	dh_fixperms -p$(p_cxx_m)
+	dh_shlibdeps -p$(p_cxx_m)
+	dh_gencontrol -p$(p_cxx_m) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_cxx_m)
+	dh_md5sums -p$(p_cxx_m)
+	dh_builddeb -p$(p_cxx_m)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-fixincl.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-fixincl.mk
@@ -0,0 +1,47 @@
+arch_binaries  := $(arch_binaries) fixincl
+
+p_fix	= fixincludes
+d_fix	= debian/$(p_fix)
+
+dirs_fix = \
+	$(docdir)/$(p_base)/fixincludes \
+	$(PF)/share/man/man1 \
+	$(PF)/bin \
+	$(gcc_lexec_dir) \
+	$(gcc_lib_dir)
+files_fix = \
+	$(gcc_lexec_dir)/install-tools \
+	$(gcc_lib_dir)/install-tools
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-fixincl: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_fix)
+	dh_installdirs -p$(p_fix) $(dirs_fix)
+	DH_COMPAT=2 dh_movefiles -p$(p_fix) $(files_fix)
+
+#	$(IP) $(builddir)/gcc/fixinc/fixincl $(d_fix)/$(PF)/lib/fixincludes/
+#	sed -e "s,^FIXINCL=\(.*\),FIXINCL=/$(PF)/lib/fixincludes/fixincl," \
+#	    $(builddir)/gcc/fixinc.sh \
+#		> $(d_fix)/$(PF)/lib/fixincludes/fixinc.sh
+#	chmod 755 $(d_fix)/$(PF)/lib/fixincludes/fixinc.sh
+	$(IR) $(srcdir)/fixincludes/README \
+	    $(d_fix)/$(docdir)/$(p_base)/fixincludes
+	sed -e 's,@LIBEXECDIR@,$(gcc_lexec_dir),g' debian/fixincludes.in \
+	    > $(d_fix)/$(PF)/bin/fixincludes
+	chmod 755 $(d_fix)/$(PF)/bin/fixincludes
+
+	debian/dh_doclink -p$(p_fix) $(p_base)
+	dh_strip -p$(p_fix)
+	dh_compress -p$(p_fix)
+	dh_fixperms -p$(p_fix)
+	dh_shlibdeps -p$(p_fix)
+	dh_gencontrol -p$(p_fix) -- -v$(DEB_EVERSION) $(common_substvars)
+	dh_installdeb -p$(p_fix)
+	dh_md5sums -p$(p_fix)
+	dh_builddeb -p$(p_fix)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-base.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-base.mk
@@ -0,0 +1,59 @@
+$(lib_binaries) += base
+
+# ---------------------------------------------------------------------------
+# gcc-base
+
+ifneq (,$(filter $(distrelease), karmic))
+  additional_links = 4.4.1
+else ifneq (,$(filter $(distrelease),lucid))
+  additional_links = 4.4.3
+else ifneq (,$(filter $(distrelease),maverick))
+  additional_links = 4.4.4
+else ifneq (,$(filter $(distrelease),squeeze natty))
+  additional_links = 4.4.5
+else ifneq (,$(filter $(distrelease),wheezy sid precise))
+  additional_links = 4.4.6
+else
+  additional_links =
+endif
+
+$(binary_stamp)-base: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	rm -rf $(d_base)
+	dh_installdirs -p$(p_base) \
+		$(gcc_lexec_dir)
+
+ifeq ($(with_common_gcclibdir),yes)
+	ln -sf $(BASE_VERSION) \
+	    $(d_base)/$(subst /$(BASE_VERSION),/$(GCC_VERSION),$(gcc_lib_dir))
+	for link in $(additional_links); do \
+	  ln -sf $(BASE_VERSION) \
+	    $(d_base)/$$(dirname $(gcc_lib_dir))/$$link; \
+        done
+  ifneq ($(gcc_lib_dir),$(gcc_lexec_dir))
+	ln -sf $(BASE_VERSION) \
+	    $(d_base)/$(subst /$(BASE_VERSION),/$(GCC_VERSION),$(gcc_lexec_dir))
+	for link in $(additional_links); do \
+	  ln -sf $(BASE_VERSION) \
+	    $(d_base)/$$(dirname $(gcc_lexec_dir))/$$link; \
+        done
+  endif
+endif
+
+ifeq ($(with_spu),yes)
+	mkdir -p $(d_base)/$(gcc_spu_lexec_dir)
+	mkdir -p $(d_base)/$(gcc_spu_lib_dir)
+	ln -sf $(BASE_VERSION) $(d_base)/$(spulibexecdir)/gcc/spu/$(GCC_VERSION)
+	ln -sf $(BASE_VERSION) $(d_base)/usr/spu/lib/gcc/spu/$(GCC_VERSION)
+endif
+
+	dh_installdocs -p$(p_base)
+	dh_installchangelogs -p$(p_base)
+	dh_compress -p$(p_base)
+	dh_fixperms -p$(p_base)
+	dh_gencontrol -p$(p_base) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_base)
+	dh_md5sums -p$(p_base)
+	dh_builddeb -p$(p_base)
+	touch $@
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-fortran.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-fortran.mk
@@ -0,0 +1,198 @@
+ifeq ($(with_libgfortran),yes)
+  $(lib_binaries) += libgfortran
+endif
+ifeq ($(with_lib64gfortran),yes)
+  $(lib_binaries) += lib64fortran
+endif
+ifeq ($(with_lib32gfortran),yes)
+  $(lib_binaries) += lib32fortran
+endif
+ifeq ($(with_libn32gfortran),yes)
+  $(lib_binaries) += libn32fortran
+endif
+
+ifeq ($(with_fdev),yes)
+  ifneq (,$(filter yes, $(biarch64) $(biarch32) $(biarchn32)))
+    arch_binaries  := $(arch_binaries) fdev-multi
+  endif
+  arch_binaries  := $(arch_binaries) fdev
+  ifneq ($(DEB_CROSS),yes)
+    ifneq ($(GFDL_INVARIANT_FREE),yes)
+      indep_binaries := $(indep_binaries) fortran-doc
+    endif
+  endif
+endif
+
+p_g95	= gfortran$(pkg_ver)$(cross_bin_arch)
+p_g95_m	= gfortran$(pkg_ver)-multilib$(cross_bin_arch)
+p_g95d	= gfortran$(pkg_ver)-doc
+p_flib	= libgfortran$(FORTRAN_SONAME)$(cross_lib_arch)
+
+d_g95	= debian/$(p_g95)
+d_g95_m	= debian/$(p_g95_m)
+d_g95d	= debian/$(p_g95d)
+
+dirs_g95 = \
+	$(docdir)/$(p_base)/fortran \
+	$(PF)/bin \
+	$(gcc_lexec_dir) \
+	$(gcc_lib_dir) \
+	$(PF)/include \
+	$(PF)/share/man/man1
+files_g95 = \
+	$(PF)/bin/$(cmd_prefix)gfortran$(pkg_ver) \
+	$(gcc_lib_dir)/finclude \
+	$(gcc_lexec_dir)/f951 
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  files_g95 += \
+	$(PF)/share/man/man1/$(cmd_prefix)gfortran$(pkg_ver).1
+endif
+
+# ----------------------------------------------------------------------
+define __do_fortran
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l) $(d_d)
+	dh_installdirs -p$(p_l) $(usr_lib$(2))
+	DH_COMPAT=2 dh_movefiles -p$(p_l) $(usr_lib$(2))/libgfortran.so.*
+
+	debian/dh_doclink -p$(p_l) $(p_base)
+	debian/dh_doclink -p$(p_d) $(p_base)
+
+	dh_strip -p$(p_l) --dbg-package=$(p_d)
+	dh_compress -p$(p_l) -p$(p_d)
+	dh_fixperms -p$(p_l) -p$(p_d)
+	dh_makeshlibs -p$(p_l)
+	$(call cross_mangle_shlibs,$(p_l))
+	DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_l)
+	$(call cross_mangle_substvars,$(p_l))
+	dh_gencontrol -p$(p_l) -p$(p_d) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+	$(call cross_mangle_control,$(p_l))
+	dh_installdeb -p$(p_l) -p$(p_d)
+	dh_md5sums -p$(p_l) -p$(p_d)
+	dh_builddeb -p$(p_l) -p$(p_d)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+do_fortran = $(call __do_fortran,lib$(1)gfortran$(FORTRAN_SONAME),$(1))
+
+define do_fortran_dev
+	dh_installdirs -p$(2) $(gcc_lib_dir$(1))
+	DH_COMPAT=2 dh_movefiles -p$(2) \
+		$(gcc_lib_dir$(1))/libgfortranbegin.a
+	$(call install_gcc_lib,libgfortran,$(FORTRAN_SONAME),$(1),$(2))
+endef
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgfortran: $(install_stamp)
+	$(call do_fortran,)
+
+$(binary_stamp)-lib64fortran: $(install_stamp)
+	$(call do_fortran,64)
+
+$(binary_stamp)-lib32fortran: $(install_stamp)
+	$(call do_fortran,32)
+
+$(binary_stamp)-libn32fortran: $(install_stamp)
+	$(call do_fortran,n32)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-fdev: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_g95)
+	dh_installdirs -p$(p_g95) $(dirs_g95)
+
+	DH_COMPAT=2 dh_movefiles -p$(p_g95) $(files_g95)
+
+	$(call do_fortran_dev,,$(p_g95))
+
+ifneq ($(DEB_CROSS),yes)
+	ln -sf gfortran$(pkg_ver) \
+	    $(d_g95)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gfortran$(pkg_ver)
+	ln -sf gfortran$(pkg_ver) \
+	    $(d_g95)/$(PF)/bin/$(TARGET_ALIAS)-gfortran$(pkg_ver)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+	ln -sf gfortran$(pkg_ver).1 \
+	    $(d_g95)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gfortran$(pkg_ver).1
+	ln -sf gfortran$(pkg_ver).1 \
+	    $(d_g95)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gfortran$(pkg_ver).1
+endif
+endif
+
+	debian/dh_doclink -p$(p_g95) $(p_base)
+
+	cp -p $(srcdir)/gcc/fortran/ChangeLog \
+		$(d_g95)/$(docdir)/$(p_base)/fortran/changelog
+	debian/dh_rmemptydirs -p$(p_g95)
+
+	dh_strip -p$(p_g95)
+	dh_compress -p$(p_g95)
+	dh_fixperms -p$(p_g95)
+	dh_shlibdeps -p$(p_g95)
+	dh_gencontrol -p$(p_g95) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_g95)
+	dh_md5sums -p$(p_g95)
+	dh_builddeb -p$(p_g95)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-fdev-multi: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_g95_m)
+	dh_installdirs -p$(p_g95_m) $(docdir)
+
+	$(foreach flavour,$(flavours), \
+		$(call do_fortran_dev,$(flavour),$(p_g95_m)))
+
+	debian/dh_doclink -p$(p_g95_m) $(p_base)
+	debian/dh_rmemptydirs -p$(p_g95_m)
+	dh_strip -p$(p_g95_m)
+	dh_compress -p$(p_g95_m)
+	dh_fixperms -p$(p_g95_m)
+	dh_shlibdeps -p$(p_g95_m)
+	dh_gencontrol -p$(p_g95_m) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_g95_m)
+	dh_md5sums -p$(p_g95_m)
+	dh_builddeb -p$(p_g95_m)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-fortran-doc: $(build_html_stamp) $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_g95d)
+	dh_installdirs -p$(p_g95d) \
+		$(docdir)/$(p_base)/fortran \
+		$(PF)/share/info
+	DH_COMPAT=2 dh_movefiles -p$(p_g95d) \
+		$(PF)/share/info/gfortran*
+
+	debian/dh_doclink -p$(p_g95d) $(p_base)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+	dh_installdocs -p$(p_g95d)
+	rm -f $(d_g95d)/$(docdir)/$(p_base)/copyright
+	cp -p html/gfortran.html $(d_g95d)/$(docdir)/$(p_base)/fortran/
+endif
+
+	dh_compress -p$(p_g95d)
+	dh_fixperms -p$(p_g95d)
+	dh_installdeb -p$(p_g95d)
+	dh_gencontrol -p$(p_g95d) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_g95d)
+	dh_builddeb -p$(p_g95d)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-pascal.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-pascal.mk
@@ -0,0 +1,110 @@
+arch_binaries  := $(arch_binaries) pascal
+indep_binaries := $(indep_binaries) pascal-doc
+
+p_gpc	= gpc$(pkg_ver)
+p_gpcd	= gpc$(pkg_ver)-doc
+
+d_gpc	= debian/$(p_gpc)
+d_gpcd	= debian/$(p_gpcd)
+
+dirs_gpc = \
+	$(docdir)/$(p_base)/pascal \
+	$(PF)/bin \
+	$(gcc_lexec_dir) \
+	$(gcc_lib_dir)/{include,units} \
+	$(PF)/share/man/man1
+ifeq ($(with_gpidump),yes)
+  files_gpc = \
+	$(PF)/bin/{binobj,gpc,gpc-run,gpidump}$(pkg_ver) \
+	$(PF)/share/man/man1/{binobj,gpc,gpc-run,gpidump}$(pkg_ver).1 \
+	$(gcc_lexec_dir)/gpc1 \
+	$(gcc_lib_dir)/{libgpc.a,units} \
+	$(gcc_lib_dir)/include/gpc-in-c.h
+else
+  files_gpc = \
+	$(PF)/bin/{binobj,gpc,gpc-run}$(pkg_ver) \
+	$(PF)/share/man/man1/{binobj,gpc,gpc-run}$(pkg_ver).1 \
+	$(gcc_lexec_dir)/gpc1 \
+	$(gcc_lib_dir)/{libgpc.a,units} \
+	$(gcc_lib_dir)/include/gpc-in-c.h
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-pascal: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gpc)
+	dh_installdirs -p$(p_gpc) $(dirs_gpc)
+
+	rm -f $(d)/$(PF)/bin/pc $(d)/$(PF)/share/man/man1/pc.1
+	DH_COMPAT=2 dh_movefiles -p$(p_gpc) $(files_gpc)
+
+	dh_installdocs -p$(p_gpcd) 
+	dh_installchangelogs -p$(p_gpcd)
+
+	cp -p $(srcdir)/gcc/p/{AUTHORS,FAQ,NEWS,README} \
+		$(d_gpc)/$(docdir)/$(p_base)/pascal/.
+	cp -p $(srcdir)/gcc/p/test/README \
+		$(d_gpc)/$(docdir)/$(p_base)/pascal/README.gpc-test
+	cp -p $(srcdir)/gcc/p/ChangeLog \
+		$(d_gpc)/$(docdir)/$(p_base)/pascal/changelog
+
+#	ln -sf ../$(p_gpc)/examples $(d_gpcd)/$(docdir)/$(p_gpcd)/examples
+#	ln -sf ../$(p_gpc)/docdemos $(d_gpcd)/$(docdir)/$(p_gpcd)/docdemos
+
+	dh_strip -p$(p_gpc)
+	dh_compress -p$(p_gpc)
+	dh_fixperms -p$(p_gpc)
+	dh_shlibdeps -p$(p_gpc)
+	dh_gencontrol -p$(p_gpc) -- -v$(DEB_GPC_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_gpc)
+	dh_md5sums -p$(p_gpc)
+	dh_builddeb -p$(p_gpc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-pascal-doc: $(build_html_stamp) $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gpcd)
+	dh_installdirs -p$(p_gpcd) \
+		$(docdir)/$(p_base)/pascal \
+		$(docdir)/$(p_gpc)/pascal \
+		$(PF)/share/info
+	DH_COMPAT=2 dh_movefiles -p$(p_gpcd) \
+		$(PF)/share/info/gpc*$(pkg_ver)*info*
+
+	dh_installdocs -p$(p_gpcd) 
+	dh_installchangelogs -p$(p_gpcd)
+	cp -p html/gpc.html html/gpcs.html \
+		$(d_gpcd)/$(docdir)/$(p_base)/pascal/
+	mv $(d)/$(PF)/doc/gpc/demos \
+		$(d_gpcd)/$(docdir)/$(p_base)/pascal/examples
+	mv $(d)/$(PF)/doc/gpc/docdemos \
+		$(d_gpcd)/$(docdir)/$(p_base)/pascal/.
+
+	for i in gpc.html gpc.html docdemos examples; do \
+	  ln -sf ../$(p_base)/pascal/$$i \
+	    $(d_gpcd)/usr/share/doc/$(p_gpcd)/$$i; \
+	  ln -sf ../$(p_base)/pascal/$$i \
+	    $(d_gpcd)/usr/share/doc/$(p_gpc)/$$i; \
+	done
+
+#	-$(MAKE) -C $(builddir)/gcc gpc.ps
+#	cp -p $(builddir)/gcc/gpc.ps $(d_gpcd)/$(docdir)/$(p_base)/pascal/.
+
+	debian/dh_rmemptydirs -p$(p_gpcd)
+
+	dh_compress -p$(p_gpcd)
+	dh_fixperms -p$(p_gpcd)
+	dh_installdeb -p$(p_gpcd)
+	dh_gencontrol -p$(p_gpcd) -- -v$(DEB_GPC_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_gpcd)
+	dh_builddeb -p$(p_gpcd)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-java.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-java.mk
@@ -0,0 +1,723 @@
+ifeq ($(with_gcj_base_only),yes)
+  arch_binaries  := $(arch_binaries) jbase
+else
+ifeq ($(with_separate_libgcj),yes)
+  ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+    arch_binaries  := $(arch_binaries) jbase
+  endif
+else
+  arch_binaries  := $(arch_binaries) jbase
+endif
+
+ifeq ($(with_libgcj),yes)
+  ifeq ($(with_java),yes)
+    arch_binaries  := $(arch_binaries) java gcjjre
+    indep_binaries  := $(indep_binaries) libgcjjar
+  endif
+
+  ifeq ($(with_javadev),yes)
+    arch_binaries  := $(arch_binaries) libgcjdev libgcjdbg
+    indep_binaries := $(indep_binaries) libgcjsrc
+    ifeq ($(with_libgcj_doc),yes)
+      indep_binaries := $(indep_binaries) libgcjdoc
+    endif
+  endif
+endif
+
+ifeq ($(with_gcj),yes)
+    arch_binaries  := $(arch_binaries) gcj
+endif
+endif
+
+p_jbase	= gcj$(pkg_ver)-base
+p_jdk	= gcj$(pkg_ver)-jdk
+p_jrehl	= gcj$(pkg_ver)-jre-headless
+p_jre	= gcj$(pkg_ver)-jre
+p_jar	= gcj$(pkg_ver)-jre-lib
+p_jsrc	= gcj$(pkg_ver)-source
+p_jlib	= libgcj$(PKG_LIBGCJ_EXT)
+p_jdbg	= libgcj$(PKG_GCJ_EXT)-dbg
+p_jlibx	= libgcj$(PKG_LIBGCJ_EXT)-awt
+p_jgtk	= libgcj$(PKG_GCJ_EXT)-awt-gtk
+p_jqt	= libgcj$(PKG_GCJ_EXT)-awt-qt
+p_jdev	= libgcj$(PKG_GCJ_EXT)-dev
+p_jdoc	= libgcj-doc
+
+d_jbase	= debian/$(p_jbase)
+d_jdk	= debian/$(p_jdk)
+d_jrehl	= debian/$(p_jrehl)
+d_jar	= debian/$(p_jar)
+d_jsrc	= debian/$(p_jsrc)
+d_jlib	= debian/$(p_jlib)
+d_jdbg	= debian/$(p_jdbg)
+d_jlibx	= debian/$(p_jlibx)
+d_jgtk	= debian/$(p_jgtk)
+d_jqt	= debian/$(p_jqt)
+d_jdev	= debian/$(p_jdev)
+d_jdoc	= debian/$(p_jdoc)
+d_jre	= debian/$(p_jre)
+
+GCJ_BASE_VERSION = $(BASE_VERSION)
+
+gcj_vlibdir	= $(PF)/$(libdir)/gcj-$(BASE_VERSION)-$(GCJ_SONAME)
+
+jre_tools = java keytool orbd rmid rmiregistry tnameserv
+jdk_tools = appletviewer jar jarsigner javac javadoc javah native2ascii rmic serialver
+
+dirs_jdk = \
+	$(docdir)/$(p_jbase) \
+	$(PF)/bin \
+	$(PF)/share/man/man1 \
+	$(PF)/share/info \
+	$(gcc_lexec_dir) \
+	$(jvm_dir)/bin
+
+files_jdk = \
+	$(PF)/bin/{gappletviewer,gjdoc,gcj,gc-analyze,gjar,gjarsigner,gcjh,gjavah,gnative2ascii,grmic,gserialver,jv-convert,jcf-dump}$(pkg_ver) \
+	$(PF)/share/man/man1/{gappletviewer,gjdoc,gjar,gjarsigner,gcjh,gjavah,gnative2ascii,gserialver}$(pkg_ver).1 \
+	$(gcc_lexec_dir)/{ecj1,jc1,jvgenmain} \
+	$(gcc_lib_dir)/include/{jni.h,jni_md.h,jvmpi.h} \
+	$(gcc_lib_dir)/include/{jawt.h,jawt_md.h} \
+	$(gcc_lib_dir)/include/gcj/libgcj-config.h \
+	$(PF)/$(libdir)/lib{gij,gcj,gcj-tools}.so \
+	$(PF)/$(libdir)/libgcj.spec \
+	$(jvm_dir)/include \
+	$(jvm_dir)/bin/{appletviewer,jar,jarsigner,javadoc,javah,native2ascii,rmic,serialver} \
+	$(PF)/lib/jvm-exports
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  files_jdk += \
+	$(PF)/share/info/gcj* \
+	$(PF)/share/man/man1/{gcj,gc-analyze,grmic,jv-convert,jcf-dump}$(pkg_ver).1
+endif
+
+dirs_jrehl = \
+	$(docdir)/$(p_jbase) \
+	$(PF)/bin \
+	$(PF)/share/man/man1 \
+	$(jvm_dir)/bin \
+	var/lib/gcj$(pkg_ver)
+
+files_jrehl = \
+	$(PF)/bin/{gij,gcj-dbtool,gorbd,grmid,grmiregistry,gkeytool,gtnameserv}$(pkg_ver) \
+	$(PF)/share/man/man1/{gorbd,grmid,grmiregistry,gkeytool,gtnameserv}$(pkg_ver).1 \
+	$(jvm_dir)/jre \
+	$(jvm_dir)/bin/{java,keytool,orbd,rmid,rmiregistry,tnameserv} \
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  files_jrehl += \
+	$(PF)/share/man/man1/{gij,gcj-dbtool}$(pkg_ver).1
+endif
+
+dirs_jlib = \
+	$(docdir)/$(p_jbase) \
+	$(gcj_vlibdir) \
+	$(PF)/$(libdir) \
+	$(jvm_dir)/jre/lib
+
+files_jlib = \
+	$(PF)/$(libdir)/libgij.so.* \
+	$(PF)/$(libdir)/libgcj-tools.so.* \
+	$(PF)/$(libdir)/libgcj.so.* \
+	$(gcj_vlibdir)/libjvm.so \
+	$(gcj_vlibdir)/libjavamath.so \
+	$(jvm_dir)/jre/lib/security
+
+#	$(gcj_vlibdir)/libgconfpeer.so
+
+ifeq ($(with_java_alsa),yes)
+  files_jlib += \
+	$(gcj_vlibdir)/libgjsmalsa.so
+endif
+
+dirs_jar = \
+	$(PF)/share/java \
+	$(jvm_dir)/lib \
+
+files_jar = \
+	$(PF)/share/java/libgcj-$(BASE_VERSION).jar \
+	$(PF)/share/java/libgcj-tools-$(BASE_VERSION).jar \
+	$(jvm_dir)/jre/lib/rt.jar \
+	$(jvm_dir)/lib/tools.jar
+
+dirs_jlibx = \
+	$(PF)/$(libdir) \
+	$(gcj_vlibdir) \
+	$(PF)/share/java
+
+files_jlibx = \
+	$(gcj_vlibdir)/libjawt.so \
+	$(gcj_vlibdir)/libgtkpeer.so
+
+#files_jgtk = \
+#	$(gcj_vlibdir)/libgtkpeer.so
+#files_jqt = \
+#	$(gcj_vlibdir)/libqtpeer.so
+
+dirs_jdev = \
+	$(PF)/{include,lib} \
+	$(jvm_dir)/include
+
+files_jdev = \
+	$(cxx_inc_dir)/{org,gcj,java,javax} \
+	$(cxx_inc_dir)/gnu/{awt,classpath,gcj,java,javax} \
+	$(PF)/$(libdir)/pkgconfig/libgcj-$(BASE_VERSION).pc \
+	$(gcj_vlibdir)/lib*peer.so
+
+ifeq ($(with_static_java),yes)
+  files_jdev += \
+	$(PF)/$(libdir)/libgij.a \
+	$(PF)/$(libdir)/libgcj.a \
+	$(PF)/$(libdir)/libgcj-tools.a
+endif
+
+ifeq (,$(p_l64gcc))
+  p_l64gcc = lib64gcc$(GCC_SONAME)
+  d_l64gcc = debian/$(p_l64gcc)
+endif
+
+ifeq ($(with_standalone_gcj),yes)
+
+  dirs_gcj += \
+	$(gcc_lib_dir)/include \
+	$(PF)/share/man/man1
+
+# XXX: what about triarch mapping?
+  files_gcj += \
+	$(PF)/bin/{cpp,gcc,gcov}$(pkg_ver) \
+	$(gcc_lexec_dir)/cc1 \
+	$(gcc_lexec_dir)/collect2 \
+	$(gcc_lib_dir)/{libgcc*,libgcov.a,*.o} \
+	$(gcc_lib_dir)/include/std*.h \
+	$(shell for h in \
+		    README features.h arm_neon.h \
+		    {cpuid,decfloat,float,iso646,limits,mm3dnow,mm_malloc}.h \
+		    {,a,b,e,i,n,p,s,t,w,x}mmintrin.h mmintrin-common.h \
+		    {x86,avx}intrin.h \
+		    {cross-stdarg,syslimits,unwind,varargs}.h; \
+		do \
+		  test -e $(d)/$(gcc_lib_dir)/include/$$h \
+		    && echo $(gcc_lib_dir)/include/$$h; \
+		  test -e $(d)/$(gcc_lib_dir)/include-fixed/$$h \
+		    && echo $(gcc_lib_dir)/include-fixed/$$h; \
+		done) \
+	$(shell for d in \
+		  asm bits gnu linux $(TARGET_ALIAS) \
+		  $(subst $(DEB_TARGET_GNU_CPU),$(biarch_cpu),$(TARGET_ALIAS)); \
+		do \
+		  test -e $(d)/$(gcc_lib_dir)/include/$$d \
+		    && echo $(gcc_lib_dir)/include/$$d; \
+		  test -e $(d)/$(gcc_lib_dir)/include-fixed/$$d \
+		    && echo $(gcc_lib_dir)/include-fixed/$$d; \
+		done) \
+	$(shell test -e $(d)/$(gcc_lib_dir)/SYSCALLS.c.X \
+		&& echo $(gcc_lib_dir)/SYSCALLS.c.X)
+
+  ifneq ($(GFDL_INVARIANT_FREE),yes)
+    files_gcj += \
+	$(PF)/share/man/man1/{cpp,gcc,gcov}$(pkg_ver).1
+  endif
+
+  ifeq ($(biarch64),yes)
+    files_gcj += $(gcc_lib_dir)/$(biarch64subdir)/{libgcc*,libgcov.a,*.o}
+  endif
+  ifeq ($(biarch32),yes)
+    files_gcj += $(gcc_lib_dir)/$(biarch32subdir)/{libgcc*,*.o}
+  endif
+  ifeq ($(biarchn32),yes)
+    files_gcj += $(gcc_lib_dir)/$(biarchn32subdir)/{libgcc*,libgcov.a,*.o}
+  endif
+
+  ifeq ($(DEB_HOST_ARCH),ia64)
+    files_gcj += $(gcc_lib_dir)/include/ia64intrin.h
+  endif
+
+  ifeq ($(DEB_HOST_ARCH),m68k)
+    files_gcj += $(gcc_lib_dir)/include/math-68881.h
+  endif
+
+  ifeq ($(DEB_TARGET_ARCH),$(findstring $(DEB_TARGET_ARCH),powerpc ppc64 powerpcspe))
+    files_gcj += $(gcc_lib_dir)/include/{altivec.h,ppc-asm.h,spe.h}
+  endif
+
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-jbase: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	rm -rf $(d_jbase)
+	dh_installdirs -p$(p_jbase)
+	dh_installdocs -p$(p_jbase)
+	dh_installchangelogs -p$(p_jbase)
+	dh_compress -p$(p_jbase)
+	dh_fixperms -p$(p_jbase)
+	dh_gencontrol -p$(p_jbase) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_jbase)
+	dh_md5sums -p$(p_jbase)
+	dh_builddeb -p$(p_jbase)
+	touch $@
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgcjjar: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	dh_installdirs -p$(p_jar) $(dirs_jar)
+	DH_COMPAT=2 dh_movefiles -p$(p_jar) $(files_jar)
+
+	ln -sf libgcj-$(BASE_VERSION).jar \
+		$(d_jar)/$(PF)/share/java/libgcj-$(GCC_VERSION).jar
+	ln -sf libgcj-tools-$(BASE_VERSION).jar \
+		$(d_jar)/$(PF)/share/java/libgcj-tools-$(GCC_VERSION).jar
+	debian/dh_doclink -p$(p_jar) $(p_jbase)
+	debian/dh_rmemptydirs -p$(p_jar)
+	dh_compress -p$(p_jar)
+	dh_fixperms -p$(p_jar)
+	dh_gencontrol -p$(p_jar) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_jar)
+	dh_md5sums -p$(p_jar)
+	dh_builddeb -p$(p_jar)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(build_javasrc_stamp): $(build_stamp)
+	PATH=$(PWD)/bin:$$PATH \
+	  $(MAKE) -C $(buildlibdir)/libjava src.zip
+	touch $@
+
+$(binary_stamp)-libgcjsrc: $(install_stamp) $(build_javasrc_stamp)
+	dh_testdir
+	dh_testroot
+
+	dh_installdirs -p$(p_jsrc) $(PF)/share/java $(jvm_dir)
+	cp -p $(buildlibdir)/libjava/src.zip \
+	   $(d_jsrc)/$(PF)/share/java/libgcj-src-$(BASE_VERSION).zip
+	dh_link -p$(p_jsrc) \
+		$(PF)/share/java/libgcj-src-$(BASE_VERSION).zip \
+		$(jvm_dir)/src.zip
+	debian/dh_doclink -p$(p_jsrc) $(p_jbase)
+	debian/dh_rmemptydirs -p$(p_jsrc)
+	dh_compress -p$(p_jsrc)
+	dh_fixperms -p$(p_jsrc)
+	dh_gencontrol -p$(p_jsrc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_jsrc)
+	dh_md5sums -p$(p_jsrc)
+	dh_builddeb -p$(p_jsrc)
+
+	touch $@
+
+# ----------------------------------------------------------------------
+libgcj_version = $$($(builddir)/gcc/xgcc -B$(builddir)/gcc/ --version \
+			 | sed -n '/^xgcc/s/[^)]*) *\(.*\)/\1/p' | sed 's/ \[[^[]*$$//')
+libgcj_title = LibGCJ Classpath
+libgcjhbox_href = http://gcc.gnu.org/java
+libgcjhbox = <span class='logo'><a href='$(libgcjhbox_href)' target='_top'>$(title)</a> ($(libgcj_version))
+
+$(build_javadoc_stamp): $(build_stamp) $(build_javasrc_stamp)
+	mkdir -p $(builddir)/java-src
+	cd $(builddir)/java-src && fastjar -xf $(buildlibdir)/libjava/src.zip
+
+	mkdir -p $(builddir)/html
+	$(buildlibdir)/libjava/gjdoc \
+	    -licensetext \
+	    -use \
+	    -sourcepath "$(builddir)/java-src" \
+	    -encoding UTF-8 \
+	    -breakiterator \
+	    -linksource \
+	    -splitindex \
+	    -d $(builddir)/html \
+	    -doctitle "$(libgcj_title) $(libgcj_version)" \
+	    -windowtitle "$(libgcj_title) $(libgcj_version) Documentation" \
+	    -header "$(classpathbox)" \
+	    -footer "$(classpathbox)" \
+	    -subpackages gnu:java:javax:org
+
+	touch $@
+
+$(binary_stamp)-libgcjdoc: $(install_stamp) $(build_javadoc_stamp)
+	dh_testdir
+	dh_testroot
+
+	dh_installdocs -p$(p_jdoc)
+	dh_installchangelogs -p$(p_jdoc)
+	mkdir -p $(d_jdoc)/usr/share/doc/$(p_jbase)
+	cp -al $(builddir)/html $(d_jdoc)/usr/share/doc/$(p_jbase)/api
+	ln -sf api $(d_jdoc)/usr/share/doc/$(p_jbase)/html
+	ln -sf ../$(p_jbase)/api $(d_jdoc)/usr/share/doc/$(p_jdoc)/api
+	ln -sf ../$(p_jbase)/html $(d_jdoc)/usr/share/doc/$(p_jdoc)/html
+	dh_compress -p$(p_jdoc) -X.java -X.c
+	dh_fixperms -p$(p_jdoc)
+	dh_gencontrol -p$(p_jdoc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_jdoc)
+	dh_md5sums -p$(p_jdoc)
+	dh_builddeb -p$(p_jdoc)
+
+	touch $@
+
+# ----------------------------------------------------------------------
+
+#peer_pkgs =
+#ifneq (,$(findstring gtk, $(java_awt_peers)))
+#  peer_pkgs += -p$(p_jgtk)
+#endif
+#ifneq (,$(findstring qt, $(java_awt_peers)))
+#  peer_pkgs += -p$(p_jqt)
+#endif
+
+$(binary_stamp)-java: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	dh_installdirs -p$(p_jrehl)   $(dirs_jrehl)
+	dh_installdirs -p$(p_jlib)  $(dirs_jlib)
+	dh_installdirs -p$(p_jlibx) $(dirs_jlibx)
+
+	DH_COMPAT=2 dh_movefiles -p$(p_jrehl)   $(files_jrehl)
+	rm -f $(d_jrehl)/$(jvm_dir)/jre/lib/rt.jar
+	DH_COMPAT=2 dh_movefiles -p$(p_jlib)  $(files_jlib)
+	DH_COMPAT=2 dh_movefiles -p$(p_jlibx) $(files_jlibx)
+#ifneq (,$(findstring gtk, $(java_awt_peers)))
+#	DH_COMPAT=2 dh_movefiles -p$(p_jgtk) $(files_jgtk)
+#endif
+#ifneq (,$(findstring qt, $(java_awt_peers)))
+#	DH_COMPAT=2 dh_movefiles -p$(p_jqt) $(files_jqt)
+#endif
+
+# FIXME
+#	  $(jvm_dir) $(PF)/lib/jvm/$(jvm_name_long) \
+
+	dh_link -p$(p_jrehl) \
+	  $(jvm_dir) $(PF)/lib/jvm/java-gcj$(pkg_ver) \
+	  $(PF)/bin/gij$(pkg_ver) $(jvm_dir)/bin/gij \
+	  $(PF)/bin/gij$(pkg_ver) $(jvm_dir)/jre/bin/gij \
+	  $(PF)/bin/gcj-dbtool$(pkg_ver) $(jvm_dir)/bin/gcj-dbtool \
+	  $(PF)/bin/gcj-dbtool$(pkg_ver) $(jvm_dir)/jre/bin/gcj-dbtool \
+	  $(PF)/share/man/man1/gkeytool$(pkg_ver).1 $(jvm_dir)/man/man1/keytool.1 \
+	  $(PF)/share/man/man1/gorbd$(pkg_ver).1 $(jvm_dir)/man/man1/orbd.1 \
+	  $(PF)/share/man/man1/grmid$(pkg_ver).1 $(jvm_dir)/man/man1/rmid.1 \
+	  $(PF)/share/man/man1/grmiregistry$(pkg_ver).1 $(jvm_dir)/man/man1/rmiregistry.1 \
+	  $(PF)/share/man/man1/gtnameserv$(pkg_ver).1 $(jvm_dir)/man/man1/tnameserv.1 \
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+	dh_link -p$(p_jrehl) \
+	  $(PF)/share/man/man1/gij$(pkg_ver).1 $(jvm_dir)/man/man1/java.1 \
+	  $(PF)/share/man/man1/grmic$(pkg_ver).1 $(jvm_dir)/man/man1/rmiregistry.1
+endif
+
+ifneq ($(DEB_TARGET_ARCH_CPU),$(java_cpu))
+	ln -sf $(java_cpu) $(d_jlib)/$(jvm_dir)/jre/lib/$(DEB_TARGET_ARCH_CPU)
+endif
+
+	dh_link -p$(p_jlib) \
+	  etc/java/cacerts-gcj $(jvm_dir)/jre/lib/cacerts \
+	  $(foreach i, jvm javamath, \
+		$(gcj_vlibdir)/lib$(i).so $(jvm_dir)/lib/lib$(i).so)
+
+	dh_link -p$(p_jlibx) \
+	  $(foreach i, jawt, $(gcj_vlibdir)/lib$(i).so $(jvm_dir)/lib/lib$(i).so)
+
+ifeq ($(DEB_HOST_ARCH),hppa)
+	mv $(d_jrehl)/$(PF)/bin/gij$(pkg_ver) \
+		$(d_jrehl)/$(PF)/bin/gij$(pkg_ver).bin
+	install -m755 debian/gij-hppa $(d_jrehl)/$(PF)/bin/gij$(pkg_ver)
+endif
+
+	ln -s ../libgcj.so.$(GCJ_SONAME) \
+		$(d_jlib)/$(gcj_vlibdir)/libgcj_bc.so.1
+
+	: # provide .jinfo file
+	( \
+	  echo 'name=$(jvm_name_short)'; \
+	  echo 'alias=java-gcj$(pkg_ver)'; \
+	  echo 'priority=$(priority)'; \
+	  echo 'section=main'; \
+	  echo ''; \
+	  for i in $(jre_tools); do \
+	    echo "jre $$i /$(jvm_dir)/jre/bin/$$i"; \
+	  done; \
+	  for i in $(jdk_tools); do \
+	    echo "jdk $$i /$(jvm_dir)/bin/$$i"; \
+	  done; \
+	) > $(d_jrehl)/$(jvm_dir)/.java-gcj$(pkg_ver).jinfo
+
+	cp -p $(srcdir)/libjava/{NEWS,README,THANKS} \
+		$(d_jrehl)/usr/share/doc/$(p_jbase)/
+
+	debian/dh_doclink -p$(p_jrehl) $(p_jbase)
+	debian/dh_doclink -p$(p_jlib)  $(p_jbase)
+	debian/dh_doclink -p$(p_jlibx) $(p_jbase)
+
+#ifneq (,$(findstring gtk, $(java_awt_peers)))
+#	debian/dh_doclink -p$(p_jgtk) $(p_jbase)
+#endif
+#ifneq (,$(findstring qt, $(java_awt_peers)))
+#	debian/dh_doclink -p$(p_jqt) $(p_jbase)
+#endif
+
+ifeq ($(with_separate_libgcj),yes)
+  ifeq ($(PKGSOURCE),gcj-$(BASE_VERSION))
+    ifeq ($(with_check),yes)
+	cp -p test-summary $(d_jrehl)/usr/share/doc/$(p_jbase)/test-summary
+    endif
+  endif
+endif
+	debian/dh_rmemptydirs -p$(p_jrehl)
+	debian/dh_rmemptydirs -p$(p_jlib)
+	debian/dh_rmemptydirs -p$(p_jlibx)
+
+	mkdir -p $(d_jrehl)/var/lib/gcj$(pkg_ver)
+
+	dh_makeshlibs -p$(p_jlib) -V '$(p_jlib) (>= $(DEB_GCJ_SOVERSION))'
+	echo "libgcj_bc 1 libgcj-bc (>= 4.2.2-1)" >> debian/$(p_jlib)/DEBIAN/shlibs
+	cat debian/$(p_jlib)/DEBIAN/shlibs >> debian/shlibs.local
+
+	dh_makeshlibs -p$(p_jlibx) -V '$(p_jlibx) (>= $(DEB_GCJ_SOVERSION))'
+
+#ifneq (,$(findstring gtk, $(java_awt_peers)))
+#	dh_makeshlibs -p$(p_jgtk) -V '$(p_jgtk) (>= $(DEB_GCJ_SOVERSION))'
+#endif
+#ifneq (,$(findstring qt, $(java_awt_peers)))
+#	dh_makeshlibs -p$(p_jqt) -V '$(p_jqt) (>= $(DEB_GCJ_SOVERSION))'
+#endif
+
+	dh_strip --dbg-package=$(p_jdbg) \
+		-p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+	rm -f $(d_jdbg)/$(gcc_lib_dir)/libgcj_bc.so
+
+	dh_compress -p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+	dh_fixperms -p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+# the libstdc++ binary packages aren't built yet ...
+	echo 'libstdc++ $(CXX_SONAME) libstdc++$(CXX_SONAME) (>= $(DEB_STDCXX_SOVERSION))' \
+	    >> debian/shlibs.local
+	-[ -d $(d_l64gcc) ] && mv $(d_l64gcc) $(d_l64gcc).saved
+ifeq ($(with_separate_libgcj)-$(with_standalone_gcj),yes-no)
+	dh_shlibdeps \
+		-L$(p_jlib) \
+		-l$(d_lib)/$(PF)/$(libdir):$(d_jlib)/$(PF)/$(libdir) \
+		-p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+else
+	dh_shlibdeps \
+		-L$(p_lgcc) \
+		-L$(p_jlib) \
+		-l:$(d)/$(PF)/$(libdir):$(d_lib)/$(PF)/$(libdir):$(d_jlib)/$(PF)/$(libdir):$(d_lgcc)/lib \
+		-p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+endif
+	-[ -d $(d_l64gcc).saved ] && mv $(d_l64gcc).saved $(d_l64gcc)
+	sed -e 's/$(p_jlib)[^,]*//' -e 's/, *,/,/' debian/$(p_jlib).substvars \
+		>> debian/$(p_jlib).substvars.tmp \
+	    && mv -f debian/$(p_jlib).substvars.tmp debian/$(p_jlib).substvars
+	rm -f debian/shlibs.local
+
+	dh_gencontrol \
+		-p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+
+	mkdir -p $(d_jlib)/usr/share/lintian/overrides
+	cp -p debian/$(p_jlib).overrides \
+		$(d_jlib)/usr/share/lintian/overrides/$(p_jlib)
+	mkdir -p $(d_jlibx)/usr/share/lintian/overrides
+	cp -p debian/$(p_jlibx).overrides \
+		$(d_jlibx)/usr/share/lintian/overrides/$(p_jlibx)
+	mkdir -p $(d_jrehl)/usr/share/lintian/overrides
+	cp -p debian/$(p_jrehl).overrides \
+		$(d_jrehl)/usr/share/lintian/overrides/$(p_jrehl)
+
+	dh_installdeb -p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+	dh_md5sums -p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+	dh_builddeb -p$(p_jrehl) -p$(p_jlib) -p$(p_jlibx) $(peer_pkgs)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcj: $(build_html_stamp) $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_jdk)
+	dh_installdirs -p$(p_jdk)  $(dirs_jdk)
+
+#	mkdir -p $(d_jdk)/usr/share/lintian/overrides
+#	cp -p debian/$(p_jdk).overrides \
+#		$(d_jdk)/usr/share/lintian/overrides/$(p_jdk)
+	cp -p $(srcdir)/gcc/java/ChangeLog \
+		$(d_jdk)/usr/share/doc/$(p_jbase)/changelog.gcj
+	cp -p $(srcdir)/libjava/ChangeLog \
+		$(d_jdk)/usr/share/doc/$(p_jbase)/changelog.libjava
+
+ifeq ($(with_standalone_gcj),yes)
+	rm -f $(d)/$(PF)/$(libdir)/libgcc_s.so
+	ln -sf /$(libdir)/libgcc_s.so.$(GCC_SONAME) $(d)/$(gcc_lib_dir)/libgcc_s.so
+endif
+	DH_COMPAT=2 dh_movefiles -p$(p_jdk)  $(files_jdk)
+
+	for i in libgij libgcj libgcj-tools; do \
+	  dh_link -p$(p_jdk) \
+	    /$(PF)/$(libdir)/$$i.so.$(GCJ_SONAME) /$(gcc_lib_dir)/$$i.so \
+	    /$(PF)/$(libdir)/$$i.so.$(GCJ_SONAME) /$(jvm_dir)/lib/$$i.so; \
+	  rm -f $(d_jdk)/$(PF)/$(libdir)/$$i.{la,so}; \
+	done
+
+	ln -sf gcj$(pkg_ver) \
+	    $(d_jdk)/$(PF)/bin/$(TARGET_ALIAS)-gcj$(pkg_ver)
+
+	install -m755 debian/jdb.sh $(d_jdk)/$(jvm_dir)/bin/jdb
+
+	mv $(d_jdk)/$(PF)/$(libdir)/libgcj.spec $(d_jdk)/$(gcc_lib_dir)/
+
+	install -m 755 $(d)/$(PF)/$(libdir)/libgcj_bc.so.1 \
+		$(d_jdk)/$(gcc_lib_dir)/libgcj_bc.so
+	$(builddir)/gcc/xgcc -B$(builddir)/gcc/ -shared -fpic -xc /dev/null \
+		-o build/libgcj.so -Wl,-soname,libgcj.so.$(GCJ_SONAME) -nostdlib
+	$(builddir)/gcc/xgcc -B$(builddir)/gcc/ -shared -fpic \
+		$(srcdir)/libjava/libgcj_bc.c \
+		-o $(d_jdk)/$(gcc_lib_dir)/libgcj_bc.so \
+		-Wl,-soname,libgcj_bc.so.1 $(builddir)/libgcj.so -shared-libgcc 
+
+	dh_link -p$(p_jdk) \
+	  $(gcc_lib_dir)/include/gcj $(jvm_dir)/include/gcj \
+	  usr/bin/ecj $(jvm_dir)/bin/javac \
+	  usr/bin/fastjar $(jvm_dir)/bin/jar \
+	  $(PF)/share/man/man1/ecj.1 $(jvm_dir)/man/man1/javac.1 \
+	  $(PF)/share/man/man1/fastjar.1 $(jvm_dir)/man/man1/jar.1
+
+	dh_link -p$(p_jdk) \
+	  $(PF)/bin/gcj$(pkg_ver) $(jvm_dir)/bin/gcj \
+	  $(PF)/share/man/man1/gjarsigner$(pkg_ver).1 $(jvm_dir)/man/man1/jarsigner.1 \
+	  $(PF)/share/man/man1/gjdoc$(pkg_ver).1 $(jvm_dir)/man/man1/javadoc.1 \
+	  $(PF)/share/man/man1/gjavah$(pkg_ver).1 $(jvm_dir)/man/man1/javah.1 \
+	  $(PF)/share/man/man1/gserialver$(pkg_ver).1 $(jvm_dir)/man/man1/serialver.1 \
+	  $(PF)/share/man/man1/gappletviewer$(pkg_ver).1 $(jvm_dir)/man/man1/appletviewer.1
+
+ifneq (,$(filter $(DEB_HOST_ARCH), arm armel))
+	ln -sf ../../ecj1 $(d_jdk)/$(gcc_lexec_dir)/ecj1
+endif
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+	ln -sf gcj$(pkg_ver).1 \
+	    $(d_jdk)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gcj$(pkg_ver).1
+	cp -p html/gcj.html $(d_jdk)/$(docdir)/$(p_jbase)/
+endif
+
+	debian/dh_doclink -p$(p_jdk) $(p_jbase)
+
+	cp -p debian/FAQ.gcj $(d_jdk)/$(docdir)/$(p_jbase)/
+
+	cp -p debian/gcj-wrapper$(pkg_ver) $(d_jdk)/$(PF)/bin/
+	chmod 755 $(d_jdk)/$(PF)/bin/gcj-wrapper$(pkg_ver)
+	cp -p debian/gcj-wrapper$(pkg_ver).1 $(d_jdk)/$(PF)/share/man/man1/
+
+	debian/dh_rmemptydirs -p$(p_jdk)
+
+	dh_strip -p$(p_jdk)
+	dh_compress -p$(p_jdk) -X.java
+	dh_fixperms -p$(p_jdk)
+	dh_shlibdeps -p$(p_jdk) -l$(d_lib)/$(PF)/$(libdir):$(d_jlib)/$(PF)/lib -Xecj1
+	dh_gencontrol -p$(p_jdk) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_jdk)
+	dh_md5sums -p$(p_jdk)
+	dh_builddeb -p$(p_jdk)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgcjdev: $(build_html_stamp) $(install_stamp) $(binary_stamp)-java
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	dh_installdirs -p$(p_jdev) $(dirs_jdev)
+
+	DH_COMPAT=2 dh_movefiles -p$(p_jdev) $(files_jdev)
+
+ifeq ($(with_static_java),yes)
+	for i in libgij libgcj libgcj-tools; do \
+	  mv $(d_jdev)/$(PF)/$(libdir)/$$i.a $(d_jdev)/$(gcc_lib_dir)/; \
+	done
+endif
+
+	ln -sf libgcj-$(BASE_VERSION).pc \
+		$(d_jdev)/$(PF)/$(libdir)/pkgconfig/libgcj$(PKG_GCJ_EXT).pc
+	sed -i -e 's,-[IL][^ ]* *,,' \
+		$(d_jdev)/$(PF)/$(libdir)/pkgconfig/libgcj-$(BASE_VERSION).pc
+
+	debian/dh_doclink -p$(p_jdev) $(p_jbase)
+
+	debian/dh_rmemptydirs -p$(p_jdev)
+
+#	mkdir -p $(d_jdev)/usr/share/lintian/overrides
+#	cp -p debian/libgcj$(PKG_GCJ_EXT)-dev.overrides \
+#		$(d_jdev)/usr/share/lintian/overrides/$(p_jdev)
+
+	DH_COMPAT=5 dh_strip -p$(p_jdev) --dbg-package=$(p_jdbg)
+	dh_compress -p$(p_jdev) -X.java
+	dh_fixperms -p$(p_jdev)
+ifeq ($(with_separate_libgcj)-$(with_standalone_gcj),yes-no)
+	dh_shlibdeps \
+		-l$(d_lib)/$(PF)/$(libdir):$(d_jlib)/$(PF)/$(libdir) \
+		-p$(p_jdev)
+else
+	dh_shlibdeps \
+		-L$(p_lgcc) \
+		-l:$(d)/$(PF)/$(libdir):$(d_lib)/$(PF)/$(libdir):$(d_jlib)/$(PF)/$(libdir):$(d_lgcc)/lib \
+		-p$(p_jdev)
+endif
+	dh_gencontrol -p$(p_jdev) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_jdev)
+	dh_md5sums -p$(p_jdev)
+	dh_builddeb -p$(p_jdev)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libgcjdbg: $(install_stamp) $(binary_stamp)-java $(binary_stamp)-libgcjdev $(binary_stamp)-gcjjre
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	debian/dh_doclink -p$(p_jdbg) $(p_jbase)
+
+	for i in libgij libgcj libgcj-tools; do \
+	  if [ -f $(d_jdbg)/usr/lib/debug/usr/lib/$$i.so.$(GCJ_SONAME).0.0 ]; then \
+	    ln -sf $$i.so.$(GCJ_SONAME).0.0 \
+	      $(d_jdbg)/usr/lib/debug/usr/lib/$$i.so.$(GCJ_SONAME); \
+	  fi; \
+	done
+#	ln -sf libgconfpeer.so.0.0.0 \
+#	  $(d_jdbg)/usr/lib/debug/$(gcj_vlibdir)/libgconfpeer.so.0
+
+	dh_compress -p$(p_jdbg)
+	dh_fixperms -p$(p_jdbg)
+	dh_gencontrol -p$(p_jdbg) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_jdbg)
+	dh_md5sums -p$(p_jdbg)
+	dh_builddeb -p$(p_jdbg)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcjjre: $(install_stamp) $(binary_stamp)-java
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+#	dh_installdirs -p$(p_jre) \
+#		$(PF)/bin \
+#		$(PF)/share/man/man1 \
+#		$(jvm_dir)/bin
+
+	debian/dh_doclink -p$(p_jre) $(p_jbase)
+	DH_COMPAT=5 dh_strip -p$(p_jre) --dbg-package=$(p_jdbg)
+	dh_compress -p$(p_jre)
+	dh_fixperms -p$(p_jre)
+	dh_gencontrol -p$(p_jre) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_jre)
+	dh_md5sums -p$(p_jre)
+	dh_builddeb -p$(p_jre)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-objc.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-objc.mk
@@ -0,0 +1,88 @@
+ifneq (,$(filter yes, $(biarch64) $(biarch32) $(biarchn32)))
+  arch_binaries  := $(arch_binaries) objc-multi
+endif
+arch_binaries := $(arch_binaries) objc
+
+p_objc	= gobjc$(pkg_ver)$(cross_bin_arch)
+d_objc	= debian/$(p_objc)
+
+p_objc_m= gobjc$(pkg_ver)-multilib$(cross_bin_arch)
+d_objc_m= debian/$(p_objc_m)
+
+dirs_objc = \
+	$(docdir)/$(p_base)/ObjC \
+	$(gcc_lexec_dir) \
+	$(gcc_lib_dir)/include
+
+files_objc = \
+	$(gcc_lexec_dir)/cc1obj \
+	$(gcc_lib_dir)/include/objc
+
+define do_objc
+	dh_installdirs -p$(2) $(gcc_lib_dir$(1))
+	$(call install_gcc_lib,libobjc,$(OBJC_SONAME),$(1),$(2))
+	$(if $(filter yes,$(with_objc_gc)),
+		dh_link -p$(2) \
+		  /$(usr_lib$(1))/libobjc_gc.so.$(OBJC_SONAME) \
+		  /$(gcc_lib_dir$(1))/libobjc_gc.so
+	)
+
+endef
+
+$(binary_stamp)-objc: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_objc)
+	dh_installdirs -p$(p_objc) $(dirs_objc)
+	DH_COMPAT=2 dh_movefiles -p$(p_objc) $(files_objc)
+
+	$(call do_objc,,$(p_objc))
+
+	cp -p $(srcdir)/libobjc/{README*,THREADS*} \
+		$(d_objc)/$(docdir)/$(p_base)/ObjC/.
+
+	cp -p $(srcdir)/libobjc/ChangeLog \
+		$(d_objc)/$(docdir)/$(p_base)/ObjC/changelog.libobjc
+
+	debian/dh_doclink -p$(p_objc) $(p_base)
+
+	debian/dh_rmemptydirs -p$(p_objc)
+
+	dh_strip -p$(p_objc)
+	dh_compress -p$(p_objc)
+
+	dh_fixperms -p$(p_objc)
+	dh_shlibdeps -p$(p_objc)
+	dh_gencontrol -p$(p_objc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_objc)
+	dh_md5sums -p$(p_objc)
+	dh_builddeb -p$(p_objc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+$(binary_stamp)-objc-multi: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_objc_m)
+	dh_installdirs -p$(p_objc_m) $(docdir)
+
+	$(foreach flavour,$(flavours), \
+		$(call do_objc,$(flavour),$(p_objc_m)))
+
+	debian/dh_doclink -p$(p_objc_m) $(p_base)
+
+	dh_strip -p$(p_objc_m)
+	dh_compress -p$(p_objc_m)
+
+	dh_fixperms -p$(p_objc_m)
+	dh_shlibdeps -p$(p_objc_m)
+	dh_gencontrol -p$(p_objc_m) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_objc_m)
+	dh_md5sums -p$(p_objc_m)
+	dh_builddeb -p$(p_objc_m)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-libstdcxx.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-libstdcxx.mk
@@ -0,0 +1,378 @@
+
+ifeq ($(with_libcxx),yes)
+  $(lib_binaries)  += libstdcxx
+endif
+ifeq ($(with_lib64cxx),yes)
+  $(lib_binaries)  += lib64stdcxx
+endif
+ifeq ($(with_lib64cxxdbg),yes)
+  $(lib_binaries)	+= lib64stdcxxdbg
+endif
+ifeq ($(with_lib32cxx),yes)
+  $(lib_binaries)	+= lib32stdcxx
+endif
+ifeq ($(with_lib32cxxdbg),yes)
+  $(lib_binaries)	+= lib32stdcxxdbg
+endif
+ifeq ($(with_libn32cxx),yes)
+  $(lib_binaries)	+= libn32stdcxx
+endif
+ifeq ($(with_libn32cxxdbg),yes)
+  $(lib_binaries)	+= libn32stdcxxdbg
+endif
+
+ifeq ($(with_cxxdev),yes)
+  $(lib_binaries)  += libstdcxx-dev
+  ifneq ($(DEB_CROSS),yes)
+    indep_binaries := $(indep_binaries) libstdcxx-doc
+  endif
+endif
+
+libstdc_ext = -$(BASE_VERSION)
+
+p_lib	= libstdc++$(CXX_SONAME)$(cross_lib_arch)
+p_lib64	= lib64stdc++$(CXX_SONAME)$(cross_lib_arch)
+p_lib32	= lib32stdc++$(CXX_SONAME)$(cross_lib_arch)
+p_libn32= libn32stdc++$(CXX_SONAME)$(cross_lib_arch)
+p_dev	= libstdc++$(CXX_SONAME)$(libstdc_ext)-dev$(cross_lib_arch)
+p_pic	= libstdc++$(CXX_SONAME)$(libstdc_ext)-pic$(cross_lib_arch)
+p_dbg	= libstdc++$(CXX_SONAME)$(libstdc_ext)-dbg$(cross_lib_arch)
+p_dbg64	= lib64stdc++$(CXX_SONAME)$(libstdc_ext)-dbg$(cross_lib_arch)
+p_dbg32	= lib32stdc++$(CXX_SONAME)$(libstdc_ext)-dbg$(cross_lib_arch)
+p_dbgn32= libn32stdc++$(CXX_SONAME)$(libstdc_ext)-dbg$(cross_lib_arch)
+p_libd	= libstdc++$(CXX_SONAME)$(libstdc_ext)-doc
+
+d_lib	= debian/$(p_lib)
+d_lib64	= debian/$(p_lib64)
+d_lib32	= debian/$(p_lib32)
+d_libn32= debian/$(p_libn32)
+d_dev	= debian/$(p_dev)
+d_pic	= debian/$(p_pic)
+d_dbg	= debian/$(p_dbg)
+d_dbg64	= debian/$(p_dbg64)
+d_dbg32	= debian/$(p_dbg32)
+d_libd	= debian/$(p_libd)
+
+dirs_dev = \
+	$(docdir)/$(p_base)/C++ \
+	$(usr_lib) \
+	$(gcc_lib_dir)/include \
+	$(cxx_inc_dir)
+
+files_dev = \
+	$(cxx_inc_dir)/ \
+	$(gcc_lib_dir)/libstdc++.{a,so} \
+	$(gcc_lib_dir)/libsupc++.a
+
+dirs_dbg = \
+	$(docdir) \
+	$(usr_lib)/debug \
+	$(gcc_lib_dir)
+files_dbg = \
+	$(usr_lib)/debug/libstdc++.{a,so*}
+
+dirs_pic = \
+	$(docdir) \
+	$(gcc_lib_dir)
+files_pic = \
+	$(gcc_lib_dir)/libstdc++_pic.a
+
+# ----------------------------------------------------------------------
+
+gxx_baseline_dir = $(shell \
+			sed -n '/^baseline_dir *=/s,.*= *\(.*\)$$,\1,p' \
+			    $(buildlibdir)/libstdc++-v3/testsuite/Makefile)
+gxx_baseline_file = $(gxx_baseline_dir)/baseline_symbols.txt
+
+debian/README.libstdc++-baseline:
+	cat debian/README.libstdc++-baseline.in \
+		> debian/README.libstdc++-baseline
+
+	baseline_name=`basename $(gxx_baseline_dir)`; \
+	baseline_parentdir=`dirname $(gxx_baseline_dir)`; \
+	compat_baseline_name=""; \
+	if [ -f "$(gxx_baseline_file)" ]; then \
+	  ( \
+	    echo "A baseline file for $$baseline_name was found."; \
+	    echo "Running the check-abi script ..."; \
+	    echo ""; \
+	    $(MAKE) -C $(buildlibdir)/libstdc++-v3/testsuite \
+		check-abi; \
+	  ) >> debian/README.libstdc++-baseline; \
+	else \
+	  ( \
+	    echo "No baseline file found for $$baseline_name."; \
+	    echo "Generating a new baseline file ..."; \
+	    echo ""; \
+	  ) >> debian/README.libstdc++-baseline; \
+	  mkdir -p $(gxx_baseline_dir); \
+	  $(MAKE) -C $(buildlibdir)/libstdc++-v3/testsuite new-abi-baseline; \
+	  if [ -f $(gxx_baseline_file) ]; then \
+	    cat $(gxx_baseline_file); \
+	  else \
+	    cat $$(find $(buildlibdir)/libstdc++-v3 $(srcdir)/libstdc++-v3 -name '.new') || true; \
+	  fi >> debian/README.libstdc++-baseline; \
+	fi
+
+# ----------------------------------------------------------------------
+define __do_libstdcxx
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l)
+
+	dh_installdirs -p$(p_l) \
+		$(docdir) \
+		$(usr_lib$(2))
+
+	cp -a $(d)/$(usr_lib$(2))/libstdc++.so.* \
+		$(d_l)/$(usr_lib$(2))/.
+
+	debian/dh_doclink -p$(p_l) $(p_base)
+	debian/dh_rmemptydirs -p$(p_l)
+
+	dh_strip -p$(p_l)
+	dh_compress -p$(p_l)
+	dh_fixperms -p$(p_l)
+
+	dh_makeshlibs -p$(p_l)
+	$(call cross_mangle_shlibs,$(p_l))
+	DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_l) \
+		-L$(p_l$(2)gcc) -l:$(d)/$(usr_lib$(2)):
+	$(call cross_mangle_substvars,$(p_l))
+
+	dh_gencontrol -p$(p_l) -- -v$(DEB_VERSION) $(common_substvars)
+	$(call cross_mangle_control,$(p_l))
+	dh_installdeb -p$(p_l)
+	dh_md5sums -p$(p_l)
+	dh_builddeb -p$(p_l)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+define __do_libstdcxx_dbg
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_d)
+	dh_installdirs -p$(p_d) \
+		$(usr_lib$(2))
+
+	$(if $(filter yes,$(with_lib$(2)cxx)),
+		cp -a $(d)/$(usr_lib$(2))/libstdc++.so.* \
+			$(d_d)/$(usr_lib$(2))/.;
+		dh_strip -p$(p_d) --keep-debug;
+		$(if $(filter yes,$(with_common_libs)),, # if !with_common_libs
+			# remove the debug symbols for libstdc++
+			# built by a newer version of GCC
+			rm -rf $(d_d)/usr/lib/debug/$(PF);
+		)
+		rm -f $(d_d)/$(usr_lib$(2))/libstdc++.so.*
+	)
+
+	$(if $(filter yes,$(with_debug)),
+		mv $(d)/$(usr_lib$(2))/debug $(d_d)/$(usr_lib$(2))/.;
+		rm -f $(d_d)/$(usr_lib$(2))/debug/libstdc++_pic.a
+	)
+
+	DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_d) \
+		-L$(p_l$(2)gcc) -l:$(d)/$(usr_lib$(2)):
+	$(call cross_mangle_substvars,$(p_d))
+
+	debian/dh_doclink -p$(p_d) $(p_base)
+	debian/dh_rmemptydirs -p$(p_d)
+
+	dh_compress -p$(p_d)
+	dh_fixperms -p$(p_d)
+	dh_gencontrol -p$(p_d) -- -v$(DEB_VERSION) $(common_substvars)
+	$(call cross_mangle_control,$(p_d))
+
+	dh_installdeb -p$(p_d)
+	dh_md5sums -p$(p_d)
+	dh_builddeb -p$(p_d)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+do_libstdcxx = $(call __do_libstdcxx,lib$(1)stdc++$(CXX_SONAME),$(1))
+do_libstdcxx_dbg = $(call __do_libstdcxx_dbg,lib$(1)stdc++$(CXX_SONAME)$(libstdc_ext),$(1))
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libstdcxx: $(install_stamp)
+	$(call do_libstdcxx,)
+
+$(binary_stamp)-lib64stdcxx: $(install_stamp)
+	$(call do_libstdcxx,64)
+
+$(binary_stamp)-lib32stdcxx: $(install_stamp)
+	$(call do_libstdcxx,32)
+
+$(binary_stamp)-libn32stdcxx: $(install_stamp)
+	$(call do_libstdcxx,n32)
+
+$(binary_stamp)-lib64stdcxxdbg: $(install_stamp)
+	$(call do_libstdcxx_dbg,64)
+
+$(binary_stamp)-lib32stdcxxdbg: $(install_stamp)
+	$(call do_libstdcxx_dbg,32)
+
+$(binary_stamp)-libn32stdcxxdbg: $(install_stamp)
+	$(call do_libstdcxx_dbg,n32)
+
+# ----------------------------------------------------------------------
+libcxxdev_deps = $(install_stamp)
+ifeq ($(with_libcxx),yes)
+  libcxxdev_deps += $(binary_stamp)-libstdcxx
+endif
+ifeq ($(with_check),yes)
+  libcxxdev_deps += debian/README.libstdc++-baseline
+endif
+$(binary_stamp)-libstdcxx-dev: $(libcxxdev_deps)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_dev) $(d_pic)
+	dh_installdirs -p$(p_dev) $(dirs_dev)
+	dh_installdirs -p$(p_pic) $(dirs_pic)
+	dh_installdirs -p$(p_dbg) $(dirs_dbg)
+
+	: # - correct libstdc++-v3 file locations
+	mv $(d)/$(usr_lib)/libsupc++.a $(d)/$(gcc_lib_dir)/
+	mv $(d)/$(usr_lib)/libstdc++.{a,so} $(d)/$(gcc_lib_dir)/
+	ln -sf ../../../$(DEB_TARGET_GNU_TYPE)/libstdc++.so.$(CXX_SONAME) \
+		$(d)/$(gcc_lib_dir)/libstdc++.so
+	mv $(d)/$(usr_lib)/libstdc++_pic.a $(d)/$(gcc_lib_dir)/
+
+	rm -f $(d)/$(usr_lib)/debug/libstdc++_pic.a
+	rm -f $(d)/$(usr_lib64)/debug/libstdc++_pic.a
+
+	: # remove precompiled headers
+	-find $(d) -type d -name '*.gch' | xargs rm -rf
+
+	for i in $(d)/$(PF)/include/c++/$(GCC_VERSION)/*-linux; do \
+	  if [ -d $$i ]; then mv $$i $$i-gnu; fi; \
+	done
+
+	DH_COMPAT=2 dh_movefiles -p$(p_dev) $(files_dev)
+	DH_COMPAT=2 dh_movefiles -p$(p_pic) $(files_pic)
+ifeq ($(with_debug),yes)
+	DH_COMPAT=2 dh_movefiles -p$(p_dbg) $(files_dbg)
+endif
+
+	dh_link -p$(p_dev) \
+		/$(usr_lib)/libstdc++.so.$(CXX_SONAME) \
+		/$(gcc_lib_dir)/libstdc++.so \
+		/$(cxx_inc_dir) /$(PFL)/include/c++/$(GCC_VERSION)
+
+	debian/dh_doclink -p$(p_dev) $(p_base)
+	debian/dh_doclink -p$(p_pic) $(p_base)
+	debian/dh_doclink -p$(p_dbg) $(p_base)
+	cp -p $(srcdir)/libstdc++-v3/ChangeLog \
+		$(d_dev)/$(docdir)/$(p_base)/C++/changelog.libstdc++
+ifeq ($(with_check),yes)
+	cp -p debian/README.libstdc++-baseline \
+		$(d_dev)/$(docdir)/$(p_base)/C++/README.libstdc++-baseline
+	if [ -f $(buildlibdir)/libstdc++-v3/testsuite/current_symbols.txt ]; \
+	then \
+	  cp -p $(buildlibdir)/libstdc++-v3/testsuite/current_symbols.txt \
+	    $(d_dev)/$(docdir)/$(p_base)/C++/libstdc++_symbols.txt; \
+	fi
+endif
+	cp -p $(buildlibdir)/libstdc++-v3/src/libstdc++-symbols.ver \
+		$(d_pic)/$(gcc_lib_dir)/libstdc++_pic.map
+
+ifeq ($(with_libcxx),yes)
+	cp -a $(d)/$(usr_lib)/libstdc++.so.* \
+		$(d_dbg)/$(usr_lib)/
+	dh_strip -p$(p_dbg) --keep-debug
+	rm -f $(d_dbg)/$(usr_lib)/libstdc++.so.*
+endif
+
+	dh_strip -p$(p_dev) --dbg-package=$(p_dbg)
+ifneq ($(with_common_libs),yes)
+	: # remove the debug symbols for libstdc++ built by a newer version of GCC
+	rm -rf $(d_dbg)/usr/lib/debug/$(PF)
+endif
+	dh_strip -p$(p_pic)
+
+ifeq ($(with_cxxdev),yes)
+	debian/dh_rmemptydirs -p$(p_dev)
+	debian/dh_rmemptydirs -p$(p_pic)
+	debian/dh_rmemptydirs -p$(p_dbg)
+endif
+
+	dh_compress -p$(p_dev) -p$(p_pic) -p$(p_dbg) -X.txt
+	dh_fixperms -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+# XXX: what about biarchn32?
+#ifeq ($(biarch64),yes)
+#	DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_dev) -p$(p_pic) -p$(p_dbg) -Xlib64
+#else
+#	DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_dev) -p$(p_pic) -p$(p_dbg) -Xlib32/debug
+#endif
+	DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+	$(call cross_mangle_substvars,$(p_dbg))
+	dh_gencontrol -p$(p_dev) -p$(p_pic) -p$(p_dbg) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+
+	dh_installdeb -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+	dh_md5sums -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+	dh_builddeb -p$(p_dev) -p$(p_pic) -p$(p_dbg)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+
+doxygen_doc_dir = $(buildlibdir)/libstdc++-v3/doc
+
+doxygen-docs: $(build_doxygen_stamp)
+$(build_doxygen_stamp):
+	$(MAKE) -C $(buildlibdir)/libstdc++-v3/doc SHELL=/bin/bash doc-html-doxygen
+	$(MAKE) -C $(buildlibdir)/libstdc++-v3/doc SHELL=/bin/bash doc-man-doxygen
+	-find $(doxygen_doc_dir)/doxygen/html -name 'struct*' -empty | xargs rm -f
+
+	touch $@
+
+$(binary_stamp)-libstdcxx-doc: $(install_stamp) doxygen-docs
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_libd)
+	dh_installdirs -p$(p_libd) \
+		$(docdir)/$(p_base)/libstdc++ \
+		$(PF)/share/man
+
+#	debian/dh_doclink -p$(p_libd) $(p_base)
+	dh_link -p$(p_libd) /usr/share/doc/$(p_base) /usr/share/doc/$(p_libd)
+	dh_installdocs -p$(p_libd)
+	rm -f $(d_libd)/$(docdir)/$(p_base)/copyright
+
+	cp -a $(srcdir)/libstdc++-v3/doc/html \
+		$(d_libd)/$(docdir)/$(p_base)/libstdc++/.
+
+	cp -a $(doxygen_doc_dir)/doxygen/html \
+		$(d_libd)/$(docdir)/$(p_base)/libstdc++/.
+	for i in $(doxygen_doc_dir)/doxygen/man/man3/*.3; do \
+	  [ -f $${i} ] || continue; \
+	  mv $${i} $${i}cxx; \
+	done
+	cp -a $(doxygen_doc_dir)/doxygen/man/man3 \
+		$(d_libd)/$(PF)/share/man/.
+	rm -f $(d_libd)/$(PF)/share/man/man3/todo.3*
+
+	mkdir -p $(d_libd)/usr/share/lintian/overrides
+	cp -p debian/$(p_libd).overrides \
+		$(d_libd)/usr/share/lintian/overrides/$(p_libd)
+
+	dh_compress -p$(p_libd) -Xhtml/17_intro -X.txt -X.tag -X.map
+	dh_fixperms -p$(p_libd)
+	dh_gencontrol -p$(p_libd) -- -v$(DEB_VERSION) $(common_substvars)
+
+	dh_installdeb -p$(p_libd)
+	dh_md5sums -p$(p_libd)
+	dh_builddeb -p$(p_libd)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-libssp.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-libssp.mk
@@ -0,0 +1,150 @@
+arch_binaries  := $(arch_binaries) libssp
+ifeq ($(with_lib64ssp),yes)
+  arch_binaries  := $(arch_binaries) lib64ssp
+endif
+ifeq ($(with_lib32ssp),yes)
+  arch_binaries	:= $(arch_binaries) lib32ssp
+endif
+ifeq ($(with_libn32ssp),yes)
+  arch_binaries	:= $(arch_binaries) libn32ssp
+endif
+
+p_ssp	= libssp$(SSP_SONAME)
+p_ssp32	= lib32ssp$(SSP_SONAME)
+p_ssp64	= lib64ssp$(SSP_SONAME)
+p_sspd	= libssp$(SSP_SONAME)-dev
+
+d_ssp	= debian/$(p_ssp)
+d_ssp32	= debian/$(p_ssp32)
+d_ssp64	= debian/$(p_ssp64)
+d_sspd	= debian/$(p_sspd)
+
+dirs_ssp = \
+	$(docdir)/$(p_base) \
+	$(PF)/$(libdir)
+files_ssp = \
+	$(PF)/$(libdir)/libssp.so.*
+
+dirs_sspd = \
+	$(docdir) \
+	$(PF)/include \
+	$(PF)/$(libdir)
+files_sspd = \
+	$(gcc_lib_dir)/include/ssp \
+	$(PF)/$(libdir)/libssp.{a,so} \
+	$(PF)/$(libdir)/libssp_nonshared.a
+
+ifeq ($(with_lib32ssp),yes)
+	dirs_sspd  += $(lib32)
+	files_sspd += $(lib32)/libssp.{a,so}
+	files_sspd += $(lib32)/libssp_nonshared.a
+endif
+ifeq ($(with_lib64ssp),yes)
+	dirs_sspd  += $(PF)/lib64
+	files_sspd += $(PF)/lib64/libssp.{a,so}
+	files_sspd += $(PF)/lib64/libssp_nonshared.a
+endif
+
+$(binary_stamp)-libssp: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_ssp)
+	dh_installdirs -p$(p_ssp)
+
+	DH_COMPAT=2 dh_movefiles -p$(p_ssp) $(files_ssp)
+	debian/dh_doclink -p$(p_ssp) $(p_base)
+
+	debian/dh_rmemptydirs -p$(p_ssp)
+
+	dh_strip -p$(p_ssp)
+	dh_compress -p$(p_ssp)
+	dh_fixperms -p$(p_ssp)
+	dh_makeshlibs -p$(p_ssp) -V '$(p_ssp) (>= $(DEB_SOVERSION))'
+	dh_shlibdeps -p$(p_ssp)
+	dh_gencontrol -p$(p_ssp) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_ssp)
+	dh_md5sums -p$(p_ssp)
+	dh_builddeb -p$(p_ssp)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib64ssp: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_ssp64)
+	dh_installdirs -p$(p_ssp64) \
+		$(PF)/lib64
+	DH_COMPAT=2 dh_movefiles -p$(p_ssp64) \
+		$(PF)/lib64/libssp.so.*
+
+	debian/dh_doclink -p$(p_ssp64) $(p_base)
+
+	dh_strip -p$(p_ssp64)
+	dh_compress -p$(p_ssp64)
+	dh_fixperms -p$(p_ssp64)
+	dh_makeshlibs -p$(p_ssp64) -V '$(p_ssp64) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_ssp64)
+	dh_gencontrol -p$(p_ssp64) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_ssp64)
+	dh_md5sums -p$(p_ssp64)
+	dh_builddeb -p$(p_ssp64)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-lib32ssp: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_ssp32)
+	dh_installdirs -p$(p_ssp32) \
+		$(lib32)
+	DH_COMPAT=2 dh_movefiles -p$(p_ssp32) \
+		$(lib32)/libssp.so.*
+
+	debian/dh_doclink -p$(p_ssp32) $(p_base)
+
+	dh_strip -p$(p_ssp32)
+	dh_compress -p$(p_ssp32)
+	dh_fixperms -p$(p_ssp32)
+	dh_makeshlibs -p$(p_ssp32) -V '$(p_ssp32) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_ssp32)
+	dh_gencontrol -p$(p_ssp32) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_ssp32)
+	dh_md5sums -p$(p_ssp32)
+	dh_builddeb -p$(p_ssp32)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-libn32ssp: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_sspn32)
+	dh_installdirs -p$(p_sspn32) \
+		$(PF)/$(libn32)
+	DH_COMPAT=2 dh_movefiles -p$(p_sspn32) \
+		$(PF)/$(libn32)/libssp.so.*
+
+	debian/dh_doclink -p$(p_sspn32) $(p_base)
+
+	dh_strip -p$(p_sspn32)
+	dh_compress -p$(p_sspn32)
+	dh_fixperms -p$(p_sspn32)
+	dh_makeshlibs -p$(p_sspn32) -V '$(p_sspn32) (>= $(DEB_SOVERSION))'
+#	dh_shlibdeps -p$(p_sspn32)
+	dh_gencontrol -p$(p_sspn32) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_sspn32)
+	dh_md5sums -p$(p_sspn32)
+	dh_builddeb -p$(p_sspn32)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-neon.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-neon.mk
@@ -0,0 +1,53 @@
+arch_binaries  := $(arch_binaries) neon
+
+p_nlgcc		= libgcc$(GCC_SONAME)-neon
+p_ngomp		= libgomp$(GOMP_SONAME)-neon
+p_nlobjc	= libobjc$(OBJC_SONAME)-neon
+p_nflib		= libgfortran$(FORTRAN_SONAME)-neon
+p_nlcxx		= libstdc++$(CXX_SONAME)-neon
+
+d_nlgcc		= debian/$(p_nlgcc)
+d_ngomp		= debian/$(p_ngomp)
+d_nlobjc	= debian/$(p_nlobjc)
+d_nflib		= debian/$(p_nflib)
+d_nlcxx		= debian/$(p_nlcxx)
+
+neon_pkgs = -p$(p_nlgcc) -p$(p_ngomp) -p$(p_nlobjc) -p$(p_nflib) -p$(p_nlcxx)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-neon: $(install_neon_stamp)
+	dh_testdir
+	dh_testroot
+
+	dh_installdirs -p$(p_nlgcc) \
+		$(PF)/share/doc \
+		lib/neon
+	dh_installdirs -A -p$(p_ngomp) -p$(p_nlobjc) -p$(p_nflib) -p$(p_nlcxx) \
+		$(PF)/share/doc \
+		$(PF)/lib/neon
+
+	cp -a $(d_neon)/$(PF)/lib/libgcc*.so.* \
+		$(d_nlgcc)/lib/neon/
+	cp -a $(d_neon)/$(PF)/lib/libgomp*.so.* \
+		$(d_ngomp)/$(PF)/lib/neon/
+	cp -a $(d_neon)/$(PF)/lib/libobjc*.so.* \
+		$(d_nlobjc)/$(PF)/lib/neon/
+	cp -a $(d_neon)/$(PF)/lib/libgfortran*.so.* \
+		$(d_nflib)/$(PF)/lib/neon/
+	cp -a $(d_neon)/$(PF)/lib/libstdc++*.so.* \
+		$(d_nlcxx)/$(PF)/lib/neon/
+
+	for p in $(p_nlgcc) $(p_ngomp) $(p_nlobjc) $(p_nflib) $(p_nlcxx); do \
+	  ln -s ../$(p_base) debian/$$p/usr/share/doc/$$p; \
+	done
+
+	dh_strip $(neon_pkgs)
+	dh_compress $(neon_pkgs)
+	dh_fixperms $(neon_pkgs)
+	dh_shlibdeps $(neon_pkgs)
+	dh_gencontrol $(neon_pkgs) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb $(neon_pkgs)
+	dh_md5sums $(neon_pkgs)
+	dh_builddeb $(neon_pkgs)
+
+	touch $@
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-spu.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-spu.mk
@@ -0,0 +1,160 @@
+arch_binaries  := $(arch_binaries) spu spu-cxx spu-fortran
+
+p_spugcc  = gcc$(pkg_ver)-spu
+p_spucxx  = g++$(pkg_ver)-spu
+p_spuf95  = gfortran$(pkg_ver)-spu
+
+d_spugcc  = debian/$(p_spugcc)
+d_spucxx  = debian/$(p_spucxx)
+d_spuf95  = debian/$(p_spuf95)
+
+dirs_spugcc = \
+	$(PF)/bin \
+	$(gcc_spu_lexec_dir) \
+	$(gcc_spu_lib_dir) \
+
+files_spugcc = \
+	$(PF)/bin/spu-{cpp,gcc}$(pkg_ver) \
+	$(gcc_spu_lexec_dir)/{cc1,collect2} \
+	$(gcc_spu_lib_dir)/{include,include-fixed} \
+	$(gcc_spu_lib_dir)/{libgcc.a,libgcov.a,crtbegin.o,crtend.o} \
+
+ifeq ($(with_spucache),yes)
+    files_spugcc += \
+	$(gcc_spu_lib_dir)/libgcc_cache*.a
+  ifeq ($(with_spumea64),yes)
+    files_spugcc += \
+	$(gcc_spu_lib_dir)/mea64/libgcc_cache*.a
+  endif
+endif
+ifeq ($(with_spumea64),yes)
+    files_spugcc += \
+        $(gcc_spu_lib_dir)/mea64/{libgcc.a,libgcov.a,crtbegin.o,crtend.o}
+endif
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+    files_spugcc += \
+	$(PF)/share/man/man1/spu-{cpp,gcc}$(pkg_ver).1
+endif
+
+dirs_spucxx = \
+	$(PF)/bin \
+	$(gcc_spu_lexec_dir) \
+	$(gcc_spu_lib_dir) \
+
+files_spucxx = \
+	$(PF)/bin/spu-g++$(pkg_ver) \
+	$(gcc_spu_lexec_dir)/cc1plus \
+	$(PF)/spu/include/c++ \
+	$(PF)/spu/lib/{libsupc++,libstdc++}.a \
+
+ifeq ($(with_spumea64),yes)
+    files_spucxx += \
+	$(PF)/spu/lib/mea64/{libsupc++,libstdc++}.a
+endif
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+    files_spucxx += \
+	$(PF)/share/man/man1/spu-g++$(pkg_ver).1
+endif
+
+dirs_spuf95 = \
+	$(PF)/bin \
+	$(gcc_spu_lexec_dir) \
+	$(gcc_spu_lib_dir) \
+
+files_spuf95 = \
+	$(PF)/bin/spu-gfortran$(pkg_ver) \
+	$(gcc_spu_lexec_dir)/f951 \
+	$(gcc_spu_lib_dir)/finclude \
+	$(gcc_spu_lib_dir)/libgfortranbegin.a \
+	$(PF)/spu/lib/libgfortran.a \
+
+ifeq ($(with_spumea64),yes)
+    files_spuf95 += \
+	$(gcc_spu_lib_dir)/mea64/libgfortranbegin.a \
+	$(PF)/spu/lib/mea64/libgfortran.a
+endif
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+    files_spuf95 += \
+	$(PF)/share/man/man1/spu-gfortran$(pkg_ver).1
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-spu: $(install_spu_stamp)
+	dh_testdir
+	dh_testroot
+
+	mv $(install_spu_stamp) $(install_spu_stamp)-tmp
+
+	dh_installdirs -p$(p_spugcc) $(dirs_spugcc)
+	DH_COMPAT=2 dh_movefiles --sourcedir=$(d_spu) -p$(p_spugcc) $(files_spugcc)
+
+	debian/dh_doclink -p$(p_spugcc) $(p_base)
+	debian/dh_rmemptydirs -p$(p_spugcc)
+
+	-dh_strip -p$(p_spugcc) -X.o -Xlibgcc.a -Xlibgcov.a
+	dh_compress -p$(p_spugcc)
+	dh_fixperms -p$(p_spugcc)
+	dh_shlibdeps -p$(p_spugcc)
+	dh_gencontrol -p$(p_spugcc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_spugcc)
+	dh_md5sums -p$(p_spugcc)
+	dh_builddeb -p$(p_spugcc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_spu_stamp)-tmp $(install_spu_stamp)
+
+$(binary_stamp)-spu-cxx: $(install_spu_stamp)
+	dh_testdir
+	dh_testroot
+
+	mv $(install_spu_stamp) $(install_spu_stamp)-tmp
+
+	dh_installdirs -p$(p_spucxx) $(dirs_spucxx)
+	DH_COMPAT=2 dh_movefiles --sourcedir=$(d_spu) -p$(p_spucxx) $(files_spucxx)
+
+	mv $(d_spucxx)/usr/spu/include/c++/$(GCC_VERSION) \
+		$(d_spucxx)/usr/spu/include/c++/$(BASE_VERSION)
+	ln -sf $(BASE_VERSION) $(d_spucxx)/usr/spu/include/c++/$(GCC_VERSION)
+
+	debian/dh_doclink -p$(p_spucxx) $(p_base)
+	debian/dh_rmemptydirs -p$(p_spucxx)
+
+	-dh_strip -p$(p_spucxx)
+	dh_compress -p$(p_spucxx)
+	dh_fixperms -p$(p_spucxx)
+	dh_shlibdeps -p$(p_spucxx)
+	dh_gencontrol -p$(p_spucxx) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_spucxx)
+	dh_md5sums -p$(p_spucxx)
+	dh_builddeb -p$(p_spucxx)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_spu_stamp)-tmp $(install_spu_stamp)
+
+$(binary_stamp)-spu-fortran: $(install_spu_stamp)
+	dh_testdir
+	dh_testroot
+
+	mv $(install_spu_stamp) $(install_spu_stamp)-tmp
+
+	dh_installdirs -p$(p_spuf95) $(dirs_spuf95)
+	DH_COMPAT=2 dh_movefiles --sourcedir=$(d_spu) -p$(p_spuf95) $(files_spuf95)
+
+	debian/dh_doclink -p$(p_spuf95) $(p_base)
+	debian/dh_rmemptydirs -p$(p_spuf95)
+
+	-dh_strip -p$(p_spuf95)
+	dh_compress -p$(p_spuf95)
+	dh_fixperms -p$(p_spuf95)
+	dh_shlibdeps -p$(p_spuf95)
+	dh_gencontrol -p$(p_spuf95) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_spuf95)
+	dh_md5sums -p$(p_spuf95)
+	dh_builddeb -p$(p_spuf95)
+
+	@echo "Listing installed files not included in any package:"
+	-find $(d_spu) ! -type d
+
+	trap '' 1 2 3 15; touch $@; mv $(install_spu_stamp)-tmp $(install_spu_stamp)
+	touch $@
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-d-cross.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-d-cross.mk
@@ -0,0 +1,12 @@
+arch_binaries := $(arch_binaries) gdc
+
+ifeq ($(with_libphobos),yes)
+  arch_binaries += libphobos
+endif
+
+p_gdc		= gdc$(pkg_ver)$(cross_bin_arch)
+p_libphobos	= libphobos$(libphobos_version)$(pkg_ver)$(cross_bin_arch)-dev
+
+d_gdc		= debian/$(p_gdc)
+d_libphobos	= debian/$(p_libphobos)
+
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-ada.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-ada.mk
@@ -0,0 +1,361 @@
+arch_binaries := $(arch_binaries) gnatbase ada
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  indep_binaries := $(indep_binaries) ada-doc
+endif
+indep_binaries := $(indep_binaries) libgnatvsn-dev libgnatprj-dev
+
+ifeq ($(with_libgnat),yes)
+  arch_binaries := $(arch_binaries) libgnat
+endif
+
+p_gbase	= gnat-$(GNAT_VERSION)-base
+p_gnat	= gnat-$(GNAT_VERSION)
+p_lgnat	= libgnat-$(GNAT_VERSION)
+p_lgnat_dbg = $(p_lgnat)-dbg
+p_lgnatvsn = libgnatvsn$(GNAT_VERSION)
+p_lgnatvsn_dev = $(p_lgnatvsn)-dev
+p_lgnatvsn_dbg = $(p_lgnatvsn)-dbg
+p_lgnatprj = libgnatprj$(GNAT_VERSION)
+p_lgnatprj_dev = $(p_lgnatprj)-dev
+p_lgnatprj_dbg = $(p_lgnatprj)-dbg
+p_gnatd	= $(p_gnat)-doc
+
+d_gbase	= debian/$(p_gbase)
+d_gnat	= debian/$(p_gnat)
+d_lgnat	= debian/$(p_lgnat)
+d_lgnatvsn = debian/$(p_lgnatvsn)
+d_lgnatprj = debian/$(p_lgnatprj)
+d_gnatd	= debian/$(p_gnatd)
+
+GNAT_TOOLS = gnat gnatbind gnatchop gnatclean gnatfind gnatkr gnatlink \
+             gnatls gnatmake gnatname gnatprep gnatxref gnathtml
+
+dirs_gnat = \
+	$(docdir)/$(p_base) \
+	$(PF)/bin \
+	$(PF)/share/man/man1 \
+	$(gcc_lib_dir) \
+	$(gcc_lexec_dir)
+
+files_gnat = \
+	$(gcc_lexec_dir)/gnat1 \
+	$(gcc_lib_dir)/{adalib,adainclude} \
+	$(foreach i,$(GNAT_TOOLS),$(PF)/bin/$(i))
+ifeq ($(with_gnat_zcx)-$(with_gnat_sjlj),yes-yes)
+  files_gnat += \
+	$(gcc_lib_dir)/rts-native \
+	$(gcc_lib_dir)/rts-sjlj
+endif
+
+dirs_lgnat = \
+	$(docdir) \
+	$(PF)/lib
+files_lgnat = \
+	$(PF)/$(libdir)/lib{gnat,gnarl}-$(GNAT_SONAME).so.1
+
+$(binary_stamp)-gnatbase: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	dh_installdocs -p$(p_gbase) debian/README.gnat debian/README.maintainers
+ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+  ifeq ($(with_check),yes)
+	dh_installdocs -p$(p_gbase) test-summary
+  endif
+endif
+ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+	mkdir -p $(d_gbase)/$(docdir)/$(p_base)
+	ln -sf ../$(p_gbase) $(d_gbase)/$(docdir)/$(p_base)/Ada
+endif
+	dh_installchangelogs -p$(p_gbase) src/gcc/ada/ChangeLog
+	dh_compress -p$(p_gbase)
+	dh_fixperms -p$(p_gbase)
+	dh_gencontrol -p$(p_gbase) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_gbase)
+	dh_md5sums -p$(p_gbase)
+	dh_builddeb -p$(p_gbase)
+	touch $@
+
+
+$(binary_stamp)-libgnat: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	: # libgnat
+	rm -rf $(d_lgnat)
+	dh_installdirs -p$(p_lgnat) $(dirs_lgnat)
+
+	for lib in lib{gnat,gnarl}; do \
+	  vlib=$$lib-$(GNAT_SONAME); \
+	  mv $(d)/$(gcc_lib_dir)/adalib/$$vlib.so.1 $(d)/$(PF)/$(libdir)/. ; \
+	  rm -f $(d)/$(gcc_lib_dir)/adalib/$$lib.so.1; \
+	done
+	dh_movefiles -p$(p_lgnat) $(files_lgnat)
+
+	debian/dh_doclink -p$(p_lgnat) $(p_gbase)
+
+	debian/dh_rmemptydirs -p$(p_lgnat)
+
+	dh_strip -p$(p_lgnat) --dbg-package=$(p_lgnat_dbg)
+	dh_compress -p$(p_lgnat)
+	dh_fixperms -p$(p_lgnat)
+	b=libgnat; \
+	v=$(GNAT_VERSION); \
+	for ext in preinst postinst prerm postrm; do \
+	  for t in '' -dev -dbg; do \
+	    if [ -f debian/$$b$$t.$$ext ]; then \
+	      cp -pf debian/$$b$$t.$$ext debian/$$b$$v$$t.$$ext; \
+	    fi; \
+	  done; \
+	done
+	dh_makeshlibs -p$(p_lgnat) -V '$(p_lgnat) (>= $(DEB_VERSION))'
+
+	mkdir -p $(d_lgnat)/usr/share/lintian/overrides
+	cp -p debian/$(p_lgnat).overrides \
+		$(d_lgnat)/usr/share/lintian/overrides/$(p_lgnat)
+
+	dh_shlibdeps -p$(p_lgnat)
+	dh_gencontrol -p$(p_lgnat) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_lgnat)
+	dh_md5sums -p$(p_lgnat)
+	dh_builddeb -p$(p_lgnat)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+
+$(binary_stamp)-libgnatdbg: $(binary_stamp)-libgnat
+	debian/dh_doclink -p$(p_lgnat_dbg) $(p_gbase)
+	dh_compress -p$(p_lgnat_dbg)
+	dh_fixperms -p$(p_lgnat_dbg)
+	dh_gencontrol -p$(p_lgnat_dbg) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_lgnat_dbg)
+	dh_md5sums -p$(p_lgnat_dbg)
+	dh_builddeb -p$(p_lgnat_dbg)
+	touch $@
+
+$(foreach p,vsn prj,$(binary_stamp)-libgnat$(p)-dev): package=$(subst $(binary_stamp)-,,$@)
+$(foreach p,vsn prj,$(binary_stamp)-libgnat$(p)-dev):
+	: # $(package)
+	debian/dh_doclink -p$(package) $(p_gbase)
+	dh_gencontrol -p$(package) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(package)
+	dh_md5sums -p$(package)
+	dh_builddeb -p$(package)
+	touch $@
+
+
+$(binary_stamp)-libgnatvsn: $(binary_stamp)-libgnat
+	: # libgnatvsn-dev
+	dh_movefiles -p$(p_lgnatvsn_dev) usr/lib/ada/adalib/gnatvsn
+	dh_movefiles -p$(p_lgnatvsn_dev) usr/share/ada/adainclude/gnatvsn
+	dh_install -p$(p_lgnatvsn_dev) \
+	   debian/gnatvsn.gpr usr/share/ada/adainclude
+	dh_movefiles -p$(p_lgnatvsn_dev) $(PF)/$(libdir)/libgnatvsn.a
+	dh_link -p$(p_lgnatvsn_dev) \
+	   $(PF)/$(libdir)/libgnatvsn.so.$(GNAT_VERSION) \
+	   $(PF)/$(libdir)/libgnatvsn.so
+	dh_strip -p$(p_lgnatvsn_dev) -X.a --keep-debug
+	dh_fixperms -p$(p_lgnatvsn_dev)
+	debian/dh_doclink -p$(p_lgnatvsn_dev) $(p_gbase)
+	dh_gencontrol -p$(p_lgnatvsn_dev) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_lgnatvsn_dev)
+	dh_builddeb -p$(p_lgnatvsn_dev)
+
+	: # libgnatvsn
+	mkdir -p $(d_lgnatvsn)/usr/share/lintian/overrides
+	cp -p debian/$(p_lgnatvsn).overrides \
+		$(d_lgnatvsn)/usr/share/lintian/overrides/$(p_lgnatvsn)
+	dh_movefiles -p$(p_lgnatvsn) $(PF)/$(libdir)/libgnatvsn.so.$(GNAT_VERSION)
+	debian/dh_doclink -p$(p_lgnatvsn) $(p_gbase)
+	dh_strip -p$(p_lgnatvsn) --dbg-package=$(p_lgnatvsn_dbg)
+	dh_makeshlibs -p$(p_lgnatvsn) -V '$(p_lgnatvsn) (>= $(DEB_VERSION))'
+	cat debian/$(p_lgnatvsn)/DEBIAN/shlibs >> debian/shlibs.local
+	dh_shlibdeps -p$(p_lgnatvsn) -L$(p_lgnat)
+	dh_gencontrol -p$(p_lgnatvsn) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_lgnatvsn)
+	dh_md5sums -p$(p_lgnatvsn)
+	dh_builddeb -p$(p_lgnatvsn)
+
+	touch $@
+
+$(binary_stamp)-libgnatvsndbg: $(binary_stamp)-libgnatvsn
+	debian/dh_doclink -p$(p_lgnatvsn_dbg) $(p_gbase)
+	dh_compress -p$(p_lgnatvsn_dbg)
+	dh_fixperms -p$(p_lgnatvsn_dbg)
+	dh_gencontrol -p$(p_lgnatvsn_dbg) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_lgnatvsn_dbg)
+	dh_md5sums -p$(p_lgnatvsn_dbg)
+	dh_builddeb -p$(p_lgnatvsn_dbg)
+	touch $@
+
+$(binary_stamp)-libgnatprj: $(binary_stamp)-libgnat $(binary_stamp)-libgnatvsn
+	: # libgnatprj-dev
+	dh_movefiles -p$(p_lgnatprj_dev) usr/lib/ada/adalib/gnatprj
+	dh_movefiles -p$(p_lgnatprj_dev) usr/share/ada/adainclude/gnatprj
+	dh_install -p$(p_lgnatprj_dev) \
+	   debian/gnatprj.gpr usr/share/ada/adainclude
+	dh_movefiles -p$(p_lgnatprj_dev) $(PF)/$(libdir)/libgnatprj.a
+	dh_link -p$(p_lgnatprj_dev) \
+	   $(PF)/$(libdir)/libgnatprj.so.$(GNAT_VERSION) \
+	   $(PF)/$(libdir)/libgnatprj.so
+	dh_strip -p$(p_lgnatprj_dev) -X.a --keep-debug
+	dh_fixperms -p$(p_lgnatprj_dev)
+	debian/dh_doclink -p$(p_lgnatprj_dev) $(p_gbase)
+	dh_gencontrol -p$(p_lgnatprj_dev) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_lgnatprj_dev)
+	dh_builddeb -p$(p_lgnatprj_dev)
+
+	: # libgnatprj
+	mkdir -p $(d_lgnatprj)/usr/share/lintian/overrides
+	cp -p debian/$(p_lgnatprj).overrides \
+		$(d_lgnatprj)/usr/share/lintian/overrides/$(p_lgnatprj)
+	dh_movefiles -p$(p_lgnatprj) $(PF)/$(libdir)/libgnatprj.so.$(GNAT_VERSION)
+	debian/dh_doclink -p$(p_lgnatprj) $(p_gbase)
+	dh_strip -p$(p_lgnatprj) --dbg-package=$(p_lgnatprj_dbg)
+	dh_makeshlibs -p$(p_lgnatprj) -V '$(p_lgnatprj) (>= $(DEB_VERSION))'
+	cat debian/$(p_lgnatprj)/DEBIAN/shlibs >> debian/shlibs.local
+	dh_shlibdeps -p$(p_lgnatprj) -L$(p_lgnat) -L$(p_lgnatvsn)
+	dh_gencontrol -p$(p_lgnatprj) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_lgnatprj)
+	dh_md5sums -p$(p_lgnatprj)
+	dh_builddeb -p$(p_lgnatprj)
+
+	touch $@
+
+$(binary_stamp)-libgnatprjdbg: $(binary_stamp)-libgnatprj
+	debian/dh_doclink -p$(p_lgnatprj_dbg) $(p_gbase)
+	dh_compress -p$(p_lgnatprj_dbg)
+	dh_fixperms -p$(p_lgnatprj_dbg)
+	dh_gencontrol -p$(p_lgnatprj_dbg) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_lgnatprj_dbg)
+	dh_md5sums -p$(p_lgnatprj_dbg)
+	dh_builddeb -p$(p_lgnatprj_dbg)
+	touch $@
+
+ifeq ($(with_libgnat),yes)
+$(binary_stamp)-ada: $(install_stamp) $(binary_stamp)-libgnat $(binary_stamp)-libgnatdbg
+$(binary_stamp)-ada: $(binary_stamp)-libgnatvsn $(binary_stamp)-libgnatvsndbg
+$(binary_stamp)-ada: $(binary_stamp)-libgnatprj $(binary_stamp)-libgnatprjdbg
+else
+$(binary_stamp)-ada: $(install_stamp)
+endif
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+	: # gnat
+	rm -rf $(d_gnat)
+	dh_installdirs -p$(p_gnat) $(dirs_gnat)
+	# Upstream does not install gnathtml.
+	cp src/gcc/ada/gnathtml.pl debian/tmp/$(PF)/bin/gnathtml
+	chmod 755 debian/tmp/$(PF)/bin/gnathtml
+	dh_movefiles -p$(p_gnat) $(files_gnat)
+ifeq ($(with_gnat_zcx)-$(with_gnat_sjlj),yes-yes)
+	dh_link -p$(p_gnat) \
+	   $(gcc_lib_dir)/rts-sjlj usr/share/ada/adainclude/rts-sjlj
+	dh_link -p$(p_gnat) \
+	   $(gcc_lib_dir)/rts-sjlj/adalib/libgnat.a \
+	   $(gcc_lib_dir)/rts-sjlj/adalib/libgnat-$(GNAT_VERSION).a
+	dh_link -p$(p_gnat) \
+	   $(gcc_lib_dir)/rts-sjlj/adalib/libgnarl.a \
+	   $(gcc_lib_dir)/rts-sjlj/adalib/libgnarl-$(GNAT_VERSION).a
+else
+	dh_link -p$(p_gnat) \
+	   $(gcc_lib_dir)/adalib/libgnarl.a \
+	   $(gcc_lib_dir)/adalib/libgnarl-$(GNAT_VERSION).a
+endif
+
+ifeq (0,1)
+ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION))
+	mkdir -p $(d_gnat)/$(libexecdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)
+	ln -sf ../$(GCC_VERSION)/gnat1 \
+	  $(d_gnat)/$(libexecdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)/gnat1
+	mkdir -p $(d_gnat)/$(PF)/$(libdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)
+	ln -sf ../$(GCC_VERSION)/adalib \
+	  $(d_gnat)/$(PF)/$(libdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)/adalib
+	ln -sf ../$(GCC_VERSION)/adainclude \
+	  $(d_gnat)/$(PF)/$(libdir)/gcc/$(TARGET_ALIAS)/$(BASE_VERSION)/adainclude
+endif
+endif
+
+ifeq ($(with_libgnat),yes)
+	for lib in lib{gnat,gnarl}; do \
+	  vlib=$$lib-$(GNAT_SONAME); \
+	  dh_link -p$(p_gnat) \
+	    /$(PF)/$(libdir)/$$vlib.so.1 /$(PF)/$(libdir)/$$vlib.so \
+	    /$(PF)/$(libdir)/$$vlib.so.1 /$(PF)/$(libdir)/$$lib.so; \
+	done
+  ifeq ($(with_gnat_zcx)-$(with_gnat_sjlj),yes-yes)
+	for lib in lib{gnat,gnarl}; do \
+	  vlib=$$lib-$(GNAT_SONAME); \
+	  dh_link -p$(p_gnat) \
+	    /$(PF)/$(libdir)/$$vlib.so.1 $(gcc_lib_dir)/rts-native/adalib/$$lib.so; \
+	done
+  else
+	for lib in lib{gnat,gnarl}; do \
+	  vlib=$$lib-$(GNAT_SONAME); \
+	  dh_link -p$(p_gnat) \
+	    /$(PF)/$(libdir)/$$vlib.so.1 $(gcc_lib_dir)/adalib/$$lib.so; \
+	done
+  endif
+endif
+	debian/dh_doclink -p$(p_gnat) $(p_gbase)
+	for i in $(GNAT_TOOLS); do \
+	  case "$$i" in \
+	    gnat) cp -p debian/gnat.1 $(d_gnat)/$(PF)/share/man/man1/ ;; \
+	    *) ln -sf gnat.1 $(d_gnat)/$(PF)/share/man/man1/$$i.1; \
+	  esac; \
+	done
+
+	debian/dh_rmemptydirs -p$(p_gnat)
+
+	dh_strip -p$(p_gnat)
+	dh_compress -p$(p_gnat)
+	dh_fixperms -p$(p_gnat)
+	find $(d_gnat) -name '*.ali' | xargs chmod 444
+	dh_shlibdeps -p$(p_gnat)
+	dh_gencontrol -p$(p_gnat) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_gnat)
+	dh_md5sums -p$(p_gnat)
+	dh_builddeb -p$(p_gnat)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+
+ada_info_dir = $(d_gnatd)/$(PF)/share/info
+
+$(binary_stamp)-ada-doc: $(build_html_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gnatd)
+	dh_installdirs -p$(p_gnatd) \
+		$(PF)/share/info
+
+	cd $(ada_info_dir) && \
+	    makeinfo -I $(srcdir)/gcc/doc/include -I $(srcdir)/gcc/ada \
+		-I $(builddir)/gcc \
+		-o gnat_ugn-$(GNAT_VERSION).info \
+		$(builddir)/gcc/doc/gnat_ugn.texi
+	cd $(ada_info_dir) && \
+	    makeinfo -I $(srcdir)/gcc/doc/include -I $(srcdir)/gcc/ada \
+		-I $(builddir)/gcc \
+		-o gnat_rm-$(GNAT_VERSION).info \
+		$(srcdir)/gcc/ada/gnat_rm.texi
+	cd $(ada_info_dir) && \
+	    makeinfo -I $(srcdir)/gcc/doc/include -I $(srcdir)/gcc/ada \
+		-I $(builddir)/gcc \
+		-o gnat-style-$(GNAT_VERSION).info \
+		$(srcdir)/gcc/ada/gnat-style.texi
+
+	dh_installdocs -p$(p_gnatd) \
+	    html/gnat_ugn.html html/gnat_rm.html html/gnat-style.html
+	dh_installchangelogs -p$(p_gnatd)
+	dh_compress -p$(p_gnatd)
+	dh_fixperms -p$(p_gnatd)
+	dh_installdeb -p$(p_gnatd)
+	dh_gencontrol -p$(p_gnatd) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_gnatd)
+	dh_builddeb -p$(p_gnatd)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-libobjc.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-libobjc.mk
@@ -0,0 +1,66 @@
+ifeq ($(with_objcdev),yes)
+  $(lib_binaries) += libobjc
+endif
+ifeq ($(with_lib64objc),yes)
+  $(lib_binaries)  += lib64objc
+endif
+ifeq ($(with_lib32objc),yes)
+  $(lib_binaries)	+= lib32objc
+endif
+ifeq ($(with_libn32objc),yes)
+  $(lib_binaries)	+= libn32objc
+endif
+
+files_lobjc = \
+	$(usr_lib$(2))/libobjc.so.*
+ifeq ($(with_objc_gc),yes)
+  files_lobjc += \
+	$(usr_lib$(2))/libobjc_gc.so.*
+endif
+
+define __do_libobjc
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_l) $(d_d)
+	dh_installdirs -p$(p_l) \
+		$(usr_lib$(2))
+	DH_COMPAT=2 dh_movefiles -p$(p_l) \
+		$(files_lobjc)
+
+	debian/dh_doclink -p$(p_l) $(p_base)
+	debian/dh_doclink -p$(p_d) $(p_base)
+
+	dh_strip -p$(p_l) --dbg-package=$(p_d)
+	dh_compress -p$(p_l) -p$(p_d)
+	dh_fixperms -p$(p_l) -p$(p_d)
+	dh_makeshlibs -p$(p_l) -Xlibobjc_gc.so
+	$(call cross_mangle_shlibs,$(p_l))
+	DIRNAME=$(subst n,,$(2)) $(cross_shlibdeps) dh_shlibdeps -p$(p_l)
+	$(call cross_mangle_substvars,$(p_l))
+	dh_gencontrol -p$(p_l) -p$(p_d) \
+		-- -v$(DEB_VERSION) $(common_substvars)
+	$(call cross_mangle_control,$(p_l))
+	dh_installdeb -p$(p_l) -p$(p_d)
+	dh_md5sums -p$(p_l) -p$(p_d)
+	dh_builddeb -p$(p_l) -p$(p_d)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+endef
+
+# ----------------------------------------------------------------------
+
+do_libobjc = $(call __do_libobjc,lib$(1)objc$(OBJC_SONAME),$(1))
+
+$(binary_stamp)-libobjc: $(install_stamp)
+	$(call do_libobjc,)
+
+$(binary_stamp)-lib64objc: $(install_stamp)
+	$(call do_libobjc,64)
+
+$(binary_stamp)-lib32objc: $(install_stamp)
+	$(call do_libobjc,32)
+
+$(binary_stamp)-libn32objc: $(install_stamp)
+	$(call do_libobjc,n32)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-gcc.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-gcc.mk
@@ -0,0 +1,332 @@
+ifneq (,$(filter yes, $(biarch64) $(biarch32) $(biarchn32)))
+  arch_binaries  := $(arch_binaries) gcc-multi
+endif
+ifeq ($(with_plugins),yes)
+  arch_binaries  += gcc-plugindev
+endif
+arch_binaries  := $(arch_binaries) gcc
+
+ifneq ($(DEB_CROSS),yes)
+  ifneq ($(GFDL_INVARIANT_FREE),yes)
+    indep_binaries := $(indep_binaries) gcc-doc
+  endif
+  ifeq ($(with_nls),yes)
+    indep_binaries := $(indep_binaries) gcc-locales
+  endif
+endif
+
+# gcc must be moved after g77 and g++
+# not all files $(PF)/include/*.h are part of gcc,
+# but it becomes difficult to name all these files ...
+
+dirs_gcc = \
+	$(docdir)/$(p_base)/{gcc,libssp,gomp} \
+	$(PF)/bin \
+	$(gcc_lexec_dir) \
+	$(gcc_lib_dir)/{include,include-fixed} \
+	$(PF)/share/man/man1 $(libgcc_dir)
+
+# XXX: what about triarch mapping?
+files_gcc = \
+	$(PF)/bin/$(cmd_prefix){gcc,gcov}$(pkg_ver) \
+	$(gcc_lexec_dir)/collect2 \
+	$(gcc_lib_dir)/include/std*.h \
+	$(shell for h in \
+		    README features.h arm_neon.h \
+		    {cpuid,decfloat,float,iso646,limits,mm3dnow,mm_malloc}.h \
+		    {ppu_intrinsics,paired,spu2vmx,vec_types,si2vmx}.h \
+		    {,a,b,e,i,n,p,s,t,w,x}mmintrin.h mmintrin-common.h \
+		    {x86,avx}intrin.h \
+		    {cross-stdarg,syslimits,unwind,varargs}.h; \
+		do \
+		  test -e $(d)/$(gcc_lib_dir)/include/$$h \
+		    && echo $(gcc_lib_dir)/include/$$h; \
+		  test -e $(d)/$(gcc_lib_dir)/include-fixed/$$h \
+		    && echo $(gcc_lib_dir)/include-fixed/$$h; \
+		done) \
+	$(shell for d in \
+		  asm bits gnu linux $(TARGET_ALIAS) \
+		  $(subst $(DEB_TARGET_GNU_CPU),$(biarch_cpu),$(TARGET_ALIAS)); \
+		do \
+		  test -e $(d)/$(gcc_lib_dir)/include/$$d \
+		    && echo $(gcc_lib_dir)/include/$$d; \
+		  test -e $(d)/$(gcc_lib_dir)/include-fixed/$$d \
+		    && echo $(gcc_lib_dir)/include-fixed/$$d; \
+		done) \
+	$(shell test -e $(d)/$(gcc_lib_dir)/SYSCALLS.c.X \
+		&& echo $(gcc_lib_dir)/SYSCALLS.c.X)
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+    files_gcc += \
+	$(PF)/share/man/man1/$(cmd_prefix){gcc,gcov}$(pkg_ver).1
+endif
+
+ifeq ($(with_libssp),yes)
+    files_gcc += $(gcc_lib_dir)/include/ssp
+endif
+ifeq ($(with_gomp),yes)
+    files_gcc += $(gcc_lib_dir)/include/omp.h
+endif
+
+ifeq ($(DEB_TARGET_ARCH),ia64)
+    files_gcc += $(gcc_lib_dir)/include/ia64intrin.h
+endif
+
+ifeq ($(DEB_TARGET_ARCH),m68k)
+    files_gcc += $(gcc_lib_dir)/include/math-68881.h
+endif
+
+ifeq ($(DEB_TARGET_ARCH),$(findstring $(DEB_TARGET_ARCH),powerpc ppc64 powerpcspe))
+    files_gcc += $(gcc_lib_dir)/include/{altivec.h,ppc-asm.h,spe.h}
+endif
+
+usr_doc_files = debian/README.Bugs \
+	$(shell test -f $(srcdir)/FAQ && echo $(srcdir)/FAQ) \
+	$(shell test -f test-summary && echo test-summary)
+
+p_loc	= gcc$(pkg_ver)-locales
+d_loc	= debian/$(p_loc)
+
+p_gcc_m	= gcc$(pkg_ver)-multilib$(cross_bin_arch)
+d_gcc_m	= debian/$(p_gcc_m)
+
+p_pld	= gcc$(pkg_ver)-plugin-dev
+d_pld	= debian/$(p_pld)
+
+# __do_gcc_libs(flavour,package,todir,fromdir)
+define __do_gcc_libs
+	dh_installdirs -p$(2) $(3)
+# stage1 builds static libgcc only
+	$(if $(filter $(DEB_STAGE),stage1),,
+		: # libgcc_s.so may be a linker script on some architectures
+		set -e; \
+		if [ -h $(4)/libgcc_s.so ]; then \
+		  rm -f $(4)/libgcc_s.so; \
+		  dh_link -p$(2) /$(libgcc_dir$(1))/libgcc_s.so.$(GCC_SONAME) \
+		    $(3)/libgcc_s.so; \
+		else \
+		  mv $(4)/libgcc_s.so $(d)/$(3)/libgcc_s.so; \
+		  dh_link -p$(2) /$(libgcc_dir$(1))/libgcc_s.so.$(GCC_SONAME) \
+		    $(3)/libgcc_s.so.$(GCC_SONAME); \
+		fi; \
+		$(if $(1), dh_link -p$(2) /$(3)/libgcc_s.so \
+		    $(gcc_lib_dir)/libgcc_s_$(1).so;)
+	)
+	DH_COMPAT=2 dh_movefiles -p$(2) \
+		$(3)/{libgcc*,libgcov.a,*.o}
+	$(if $(filter yes, $(with_lib$(1)gmath)),
+		$(call install_gcc_lib,libgcc-math,$(GCC_SONAME),$(1),$(2))
+	)
+	$(if $(filter yes, $(with_libssp)),
+		$(call install_gcc_lib,libssp,$(SSP_SONAME),$(1),$(2))
+	)
+	$(if $(filter yes, $(with_ssp)),
+		mv $(4)/libssp_nonshared.a debian/$(2)/$(3)/;
+	)
+	$(if $(filter yes, $(with_gomp)),
+		$(call install_gcc_lib,libgomp,$(GOMP_SONAME),$(1),$(2))
+	)
+
+endef
+
+# do_gcc_libs(flavour,pkg)
+define do_gcc_libs
+	$(call __do_gcc_libs,$(1),$(2),$(gcc_lib_dir$(1)),$(d)/$(usr_lib$(1)))
+endef
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcc: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gcc)
+	dh_installdirs -p$(p_gcc) $(dirs_gcc)
+
+	$(call do_gcc_libs,,$(p_gcc))
+
+ifeq ($(with_linaro_branch),yes)
+	cp -p $(srcdir)/ChangeLog.linaro \
+		$(d_gcc)/$(docdir)/$(p_base)/changelog.linaro
+endif
+ifeq ($(with_libssp),yes)
+	cp -p $(srcdir)/libssp/ChangeLog \
+		$(d_gcc)/$(docdir)/$(p_base)/libssp/changelog
+endif
+ifeq ($(with_gomp),yes)
+	mv $(d)/$(usr_lib)/libgomp*.spec $(d_gcc)/$(gcc_lib_dir)/
+	cp -p $(srcdir)/libgomp/ChangeLog \
+		$(d_gcc)/$(docdir)/$(p_base)/gomp/changelog
+endif
+
+	DH_COMPAT=2 dh_movefiles -p$(p_gcc) $(files_gcc)
+
+ifneq ($(DEB_CROSS),yes)
+	ln -sf gcc$(pkg_ver) \
+	    $(d_gcc)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gcc$(pkg_ver)
+	ln -sf gcc$(pkg_ver) \
+	    $(d_gcc)/$(PF)/bin/$(TARGET_ALIAS)-gcc$(pkg_ver)
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+	ln -sf gcc$(pkg_ver).1 \
+	    $(d_gcc)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gcc$(pkg_ver).1
+	ln -sf gcc$(pkg_ver).1 \
+	    $(d_gcc)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gcc$(pkg_ver).1
+endif
+endif
+
+#	dh_installdebconf
+	debian/dh_doclink -p$(p_gcc) $(p_base)
+	cp -p $(usr_doc_files) $(d_gcc)/$(docdir)/$(p_base)/.
+	if [ -f testsuite-comparision ]; then \
+	  cp -p testsuite-comparision $(d_gcc)/$(docdir)/$(p_base)/. ; \
+	fi
+	cp -p debian/README.ssp $(d_gcc)/$(docdir)/$(p_base)/
+	cp -p debian/NEWS.gcc $(d_gcc)/$(docdir)/$(p_base)/NEWS
+	cp -p debian/NEWS.html $(d_gcc)/$(docdir)/$(p_base)/NEWS.html
+	cp -p $(srcdir)/ChangeLog $(d_gcc)/$(docdir)/$(p_base)/changelog
+	cp -p $(srcdir)/gcc/ChangeLog \
+		$(d_gcc)/$(docdir)/$(p_base)/gcc/changelog
+	if [ -f $(builddir)/gcc/.bad_compare ]; then \
+	  ( \
+	    echo "The comparision of the stage2 and stage3 object files shows differences."; \
+	    echo "The Debian package was modified to ignore these differences."; \
+	    echo ""; \
+	    echo "The following files differ:"; \
+	    echo ""; \
+	    cat $(builddir)/gcc/.bad_compare; \
+	  ) > $(d_gcc)/$(docdir)/$(p_base)/BOOTSTRAP_COMPARISION_FAILURE; \
+	else \
+	  true; \
+	fi
+	debian/dh_rmemptydirs -p$(p_gcc)
+	dh_strip -p$(p_gcc)
+	dh_compress -p$(p_gcc) -X README.Bugs
+	dh_fixperms -p$(p_gcc)
+	dh_shlibdeps -p$(p_gcc)
+	dh_gencontrol -p$(p_gcc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_gcc)
+	dh_md5sums -p$(p_gcc)
+	dh_builddeb -p$(p_gcc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+	: # remove empty directories, when all components are in place
+	-find $(d) -type d -empty -delete
+
+	@echo "Listing installed files not included in any package:"
+	-find $(d) ! -type d
+
+# ----------------------------------------------------------------------
+
+$(binary_stamp)-gcc-multi: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gcc_m)
+	dh_installdirs -p$(p_gcc_m) $(docdir)
+
+	$(foreach flavour,$(flavours), \
+		$(call do_gcc_libs,$(flavour),$(p_gcc_m)))
+
+	debian/dh_doclink -p$(p_gcc_m) $(p_base)
+	debian/dh_rmemptydirs -p$(p_gcc_m)
+
+	dh_strip -p$(p_gcc_m)
+	dh_compress -p$(p_gcc_m)
+	dh_shlibdeps -p$(p_gcc_m)
+	dh_fixperms -p$(p_gcc_m)
+	dh_installdeb -p$(p_gcc_m)
+	dh_gencontrol -p$(p_gcc_m) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_gcc_m)
+	dh_builddeb -p$(p_gcc_m)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcc-plugindev: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_pld)
+	dh_installdirs -p$(p_pld) \
+		$(docdir) \
+		$(gcc_lib_dir)
+	DH_COMPAT=2 dh_movefiles -p$(p_pld) \
+		$(gcc_lib_dir)/plugin
+	cp $(srcdir)/gcc/config/vxworks-dummy.h \
+		$(d_pld)/$(gcc_lib_dir)/plugin/include/config/
+
+	debian/dh_doclink -p$(p_pld) $(p_base)
+	debian/dh_rmemptydirs -p$(p_pld)
+
+	dh_compress -p$(p_pld)
+	dh_fixperms -p$(p_pld)
+	dh_installdeb -p$(p_pld)
+	dh_gencontrol -p$(p_pld) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_pld)
+	dh_builddeb -p$(p_pld)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcc-locales: $(install_dependencies)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_loc)
+	dh_installdirs -p$(p_loc) \
+		$(docdir)
+	DH_COMPAT=2 dh_movefiles -p$(p_loc) \
+		$(PF)/share/locale/*/*/cpplib*.* \
+		$(PF)/share/locale/*/*/gcc*.*
+
+	debian/dh_doclink -p$(p_loc) $(p_base)
+	debian/dh_rmemptydirs -p$(p_loc)
+
+	dh_compress -p$(p_loc)
+	dh_fixperms -p$(p_loc)
+	dh_installdeb -p$(p_loc)
+	dh_gencontrol -p$(p_loc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_loc)
+	dh_builddeb -p$(p_loc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-gcc-doc: $(build_html_stamp) $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_doc)
+	dh_installdirs -p$(p_doc) \
+		$(docdir)/$(p_base) \
+		$(PF)/share/info
+	DH_COMPAT=2 dh_movefiles -p$(p_doc) \
+		$(PF)/share/info/gcc*
+	rm -f $(d_doc)/$(PF)/share/info/gccinst*
+
+ifeq ($(with_gomp),yes)
+	$(MAKE) -C $(buildlibdir)/libgomp stamp-build-info
+	cp -p $(buildlibdir)/libgomp/libgomp$(pkg_ver).info $(d_doc)/$(PF)/share/info/
+endif
+
+	debian/dh_doclink -p$(p_doc) $(p_base)
+	dh_installdocs -p$(p_doc) html/gcc.html html/gccint.html
+ifeq ($(with_gomp),yes)
+	cp -p html/libgomp.html $(d_doc)/usr/share/doc/$(p_doc)/
+endif
+	rm -f $(d_doc)/$(docdir)/$(p_base)/copyright
+	debian/dh_rmemptydirs -p$(p_doc)
+
+	dh_compress -p$(p_doc)
+	dh_fixperms -p$(p_doc)
+	dh_installdeb -p$(p_doc)
+	dh_gencontrol -p$(p_doc) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_doc)
+	dh_builddeb -p$(p_doc)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-d.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-d.mk
@@ -0,0 +1,160 @@
+arch_binaries := $(arch_binaries) gdc
+
+ifeq ($(with_libphobos),yes)
+  arch_binaries += libphobos
+endif
+
+p_gdc		= gdc$(pkg_ver)
+p_libphobos	= libphobos$(libphobos_version)$(pkg_ver)-dev
+
+d_gdc		= debian/$(p_gdc)
+d_libphobos	= debian/$(p_libphobos)
+
+gdc_include_dir := $(PF)/include/d$(libphobos_version)
+
+dirs_gdc = \
+	$(PF)/bin \
+	$(PF)/share/man/man1 \
+	$(gdc_include_dir)/$(BASE_VERSION) \
+	$(gcc_lib_dir)
+
+files_gdc = \
+	$(PF)/bin/gdc$(pkg_ver) \
+	$(PF)/bin/gdmd$(pkg_ver) \
+	$(PF)/share/man/man1/gdc$(pkg_ver).1 \
+	$(PF)/share/man/man1/gdmd$(pkg_ver).1 \
+	$(gcc_lib_dir)/cc1d
+
+
+dirs_libphobos = \
+	$(PF)/lib \
+	$(gdc_include_dir)/$(BASE_VERSION) \
+	$(gcc_lib_dir)
+
+files_libphobos = \
+	$(PF)/$(libdir)/libgphobos$(libphobos_version).a \
+	$(gdc_include_dir)/$(BASE_VERSION)
+
+links_gdc = \
+	/$(gdc_include_dir)/$(BASE_VERSION) \
+		/$(gdc_include_dir)/$(GCC_VERSION) \
+	/$(docdir)/$(p_gcc)/README.Bugs \
+	        /$(docdir)/$(p_gdc)/README.Bugs
+
+
+$(binary_stamp)-gdc: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_gdc)
+	dh_installdirs -p$(p_gdc) $(dirs_gdc)
+
+	dh_installdocs -p$(p_gdc) \
+		src/gcc/d/{README,GDC.html,History}
+	dh_installchangelogs -p$(p_gdc) src/gcc/d/ChangeLog
+
+	DH_COMPAT=2 dh_movefiles -p$(p_gdc) -X/zlib/ $(files_gdc)
+
+ifneq ($(DEB_CROSS),yes)
+	ln -sf gdc$(pkg_ver) \
+	    $(d_gdc)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gdc$(pkg_ver)
+	ln -sf gdc$(pkg_ver) \
+	    $(d_gdc)/$(PF)/bin/$(TARGET_ALIAS)-gdc$(pkg_ver)
+	ln -sf gdc$(pkg_ver).1 \
+	    $(d_gdc)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gdc$(pkg_ver).1
+	ln -sf gdc$(pkg_ver).1 \
+	    $(d_gdc)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gdc$(pkg_ver).1
+
+	ln -sf gdmd$(pkg_ver) \
+	    $(d_gdc)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gdmd$(pkg_ver)
+	ln -sf gdmd$(pkg_ver) \
+	    $(d_gdc)/$(PF)/bin/$(TARGET_ALIAS)-gdmd$(pkg_ver)
+	ln -sf gdmd$(pkg_ver).1 \
+	    $(d_gdc)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gdmd$(pkg_ver).1
+	ln -sf gdmd$(pkg_ver).1 \
+	    $(d_gdc)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gdmd$(pkg_ver).1
+
+	# : v1 links
+	ln -sf gdc$(pkg_ver) \
+	    $(d_gdc)/$(PF)/bin/gdc-v1$(pkg_ver)
+	ln -sf gdc$(pkg_ver).1 \
+	    $(d_gdc)/$(PF)/share/man/man1/gdc-v1$(pkg_ver).1
+
+	ln -sf gdmd$(pkg_ver) \
+	    $(d_gdc)/$(PF)/bin/gdmd-v1$(pkg_ver)
+	ln -sf gdmd$(pkg_ver).1 \
+	    $(d_gdc)/$(PF)/share/man/man1/gdmd-v1$(pkg_ver).1
+
+	ln -sf gdc-v1$(pkg_ver) \
+	    $(d_gdc)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gdc-v1$(pkg_ver)
+	ln -sf gdc-v1$(pkg_ver) \
+	    $(d_gdc)/$(PF)/bin/$(TARGET_ALIAS)-gdc-v1$(pkg_ver)
+	ln -sf gdc-v1$(pkg_ver).1 \
+	    $(d_gdc)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gdc-v1$(pkg_ver).1
+	ln -sf gdc-v1$(pkg_ver).1 \
+	    $(d_gdc)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gdc-v1$(pkg_ver).1
+
+	ln -sf gdmd-v1$(pkg_ver) \
+	    $(d_gdc)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gdmd-v1$(pkg_ver)
+	ln -sf gdmd-v1$(pkg_ver) \
+	    $(d_gdc)/$(PF)/bin/$(TARGET_ALIAS)-gdmd-v1$(pkg_ver)
+	ln -sf gdmd-v1$(pkg_ver).1 \
+	    $(d_gdc)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gdmd-v1$(pkg_ver).1
+	ln -sf gdmd-v1$(pkg_ver).1 \
+	    $(d_gdc)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gdmd-v1$(pkg_ver).1
+endif
+
+	# Always needed by gdc.
+	cp $(srcdir)/gcc/d/phobos$(libphobos_version)/object.d \
+	    $(d_gdc)/$(gdc_include_dir)/$(BASE_VERSION)/
+
+	dh_link -p$(p_gdc) $(links_gdc)
+
+	dh_strip -p$(p_gdc)
+	dh_compress -p$(p_gdc)
+	dh_fixperms -p$(p_gdc)
+	dh_shlibdeps -p$(p_gdc)
+	dh_gencontrol -p$(p_gdc) --  -v$(DEB_GDC_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_gdc)
+	dh_md5sums -p$(p_gdc)
+	dh_builddeb -p$(p_gdc)
+
+	find $(d_gdc) -type d -empty -delete
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+$(binary_stamp)-libphobos: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_libphobos)
+	dh_installdirs -p$(p_libphobos) $(dirs_libphobos)
+
+	DH_COMPAT=2 dh_movefiles -p$(p_libphobos) -X/zlib/ $(files_libphobos)
+
+	# better to have it there, avoid conflicts
+	mv $(d_libphobos)/$(PF)/$(libdir)/libgphobos$(libphobos_version).a \
+	    $(d_libphobos)/$(gcc_lib_dir)
+
+	# included in gdc package
+	rm -f $(d_libphobos)/$(gdc_include_dir)/$(BASE_VERSION)/object.d
+
+	# no need to have it twice
+	dh_link -p$(p_libphobos) \
+	    /$(PF)/share/doc/$(p_gdc) /$(PF)/share/doc/$(p_libphobos)
+
+	dh_strip -p$(p_libphobos)
+	dh_compress -p$(p_libphobos)
+	dh_fixperms -p$(p_libphobos)
+	dh_shlibdeps -p$(p_libphobos)
+	dh_gencontrol -p$(p_libphobos) --  -v$(DEB_GDC_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_libphobos)
+	dh_md5sums -p$(p_libphobos)
+	dh_builddeb -p$(p_libphobos)
+
+	find $(d_libphobos) -type d -empty -delete
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-snapshot.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-snapshot.mk
@@ -0,0 +1,140 @@
+arch_binaries  := $(arch_binaries) snapshot
+
+p_snap	= gcc-snapshot
+d_snap	= debian/$(p_snap)
+
+dirs_snap = \
+	$(docdir)/$(p_snap) \
+	usr/lib
+
+ifeq ($(with_spu),yes)
+  snapshot_depends = binutils-spu
+  snapshot_recommends = newlib-spu
+endif
+ifeq ($(with_hppa64),yes)
+  snapshot_depends = binutils-hppa64
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-snapshot: $(install_snap_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_snap_stamp) $(install_snap_stamp)-tmp
+
+	rm -rf $(d_snap)
+	dh_installdirs -p$(p_snap) $(dirs_snap)
+
+	mv $(d)/$(PF) $(d_snap)/usr/lib/
+
+	find $(d_snap) -name '*.gch' -type d | xargs -r rm -rf
+	find $(d_snap) -name '*.la' -o -name '*.lai' | xargs -r rm -f
+
+	rm -rf $(d_snap)/$(PF)/lib/nof
+ifeq ($(with_java),yes)
+	mv $(d)/usr/lib/jvm $(d_snap)/usr/lib/
+
+	ln -sf libgcj.so.$(GCJ_SONAME).0.0 $(d_snap)/$(PF)/lib/libgcj_bc.so.1.0.0
+
+	dh_link -p$(p_snap) \
+	  $(gcc_lib_dir)/include/gcj $(jvm_dir)/include/gcj \
+	  usr/bin/ecj $(jvm_dir)/bin/javac
+
+  ifneq ($(DEB_TARGET_ARCH_CPU),$(java_cpu))
+	ln -sf $(java_cpu) $(d_snap)/$(jvm_dir)/jre/lib/$(DEB_TARGET_ARCH_CPU)
+  endif
+endif
+
+ifeq ($(with_ada),yes FIXME: apply our ada patches)
+	dh_link -p$(p_snap) \
+	   $(gcc_lib_dir)/rts-sjlj/adalib/libgnat.a \
+	   $(gcc_lib_dir)/rts-sjlj/adalib/libgnat-$(GNAT_VERSION).a
+	dh_link -p$(p_snap) \
+	   $(gcc_lib_dir)/rts-sjlj/adalib/libgnarl.a \
+	   $(gcc_lib_dir)/rts-sjlj/adalib/libgnarl-$(GNAT_VERSION).a
+
+	set -e; \
+	for lib in lib{gnat,gnarl}; do \
+	  vlib=$$lib-$(GNAT_SONAME); \
+	  mv $(d_snap)/$(gcc_lib_dir)/adalib/$$vlib.so.1 $(d_snap)/$(PF)/$(libdir)/. ; \
+	  rm -f $(d_snap)/$(gcc_lib_dir)/adalib/$$lib.so.1; \
+	  dh_link -p$(p_snap) \
+	    /$(PF)/$(libdir)/$$vlib.so.1 /$(PF)/$(libdir)/$$vlib.so \
+	    /$(PF)/$(libdir)/$$vlib.so.1 /$(PF)/$(libdir)/$$lib.so \
+	    /$(PF)/$(libdir)/$$vlib.so.1 /$(gcc_lib_dir)/rts-native/adalib/$$lib.so; \
+	done
+endif
+ifeq ($(with_ada),yes)
+	ln -sf gcc $(d_snap)/$(PF)/bin/gnatgcc
+endif
+
+ifeq ($(with_hppa64),yes)
+	: # provide as and ld links
+	dh_link -p $(p_snap) \
+		/usr/bin/hppa64-linux-gnu-as \
+		/$(PF)/libexec/gcc/hppa64-linux-gnu/$(GCC_VERSION)/as \
+		/usr/bin/hppa64-linux-gnu-ld \
+		/$(PF)/libexec/gcc/hppa64-linux-gnu/$(GCC_VERSION)/ld
+endif
+
+# don't do this; would create a b-d on gcc-snapshot
+#ifeq ($(with_spu),yes)
+#	dh_link -p $(p_snap) /usr/spu /$(PF)/spu
+#endif
+
+ifeq ($(with_check),yes)
+	dh_installdocs -p$(p_snap) test-summary
+  ifeq ($(with_pascal),yes)
+	cp -p gpc-test-summary $(d_snap)/$(docdir)/$(p_snap)/
+  endif
+else
+	dh_installdocs -p$(p_snap)
+endif
+	if [ -f $(buildlibdir)/libstdc++-v3/testsuite/current_symbols.txt ]; \
+	then \
+	  cp -p $(buildlibdir)/libstdc++-v3/testsuite/current_symbols.txt \
+	    $(d_snap)/$(docdir)/$(p_snap)/libstdc++6_symbols.txt; \
+	fi
+	cp -p debian/README.snapshot \
+		$(d_snap)/$(docdir)/$(p_snap)/README.Debian
+	cp -p debian/README.Bugs \
+		$(d_snap)/$(docdir)/$(p_snap)/
+	dh_installchangelogs -p$(p_snap)
+ifeq ($(DEB_TARGET_ARCH),hppa)
+	dh_strip -p$(p_snap) -Xdebug -X.o -X.a
+else
+	dh_strip -p$(p_snap) -Xdebug
+endif
+	dh_compress -p$(p_snap) -X README.Bugs
+	-find $(d_snap) -type d ! -perm 755 -exec chmod 755 {} \;
+	dh_fixperms -p$(p_snap)
+
+	mkdir -p $(d_snap)/usr/share/lintian/overrides
+	cp -p debian/$(p_snap).overrides \
+		$(d_snap)/usr/share/lintian/overrides/$(p_snap)
+
+	( \
+	  echo 'libgcc_s $(GCC_SONAME) gcc-snapshot (>= $(DEB_VERSION))'; \
+	  echo 'libobjc $(OBJC_SONAME) gcc-snapshot (>= $(DEB_VERSION))'; \
+	  echo 'libgfortran $(FORTRAN_SONAME) gcc-snapshot (>= $(DEB_VERSION))'; \
+	  echo 'libmudflap $(MUDFLAP_SONAME) gcc-snapshot (>= $(DEB_VERSION))'; \
+	  echo 'libmudflapth $(MUDFLAP_SONAME) gcc-snapshot (>= $(DEB_VERSION))'; \
+	  echo 'libffi $(FFI_SONAME) gcc-snapshot (>= $(DEB_VERSION))'; \
+	  echo 'libgcj $(GCJ_SONAME) gcc-snapshot (>= $(DEB_VERSION))'; \
+	  echo 'libgcj-tools $(GCJ_SONAME) gcc-snapshot (>= $(DEB_VERSION))'; \
+	  echo 'libgij $(GCJ_SONAME) gcc-snapshot (>= $(DEB_VERSION))'; \
+	  echo 'libgcj_bc 1 gcc-snapshot (>= $(DEB_VERSION))'; \
+	  echo 'libgomp $(GOMP_SONAME) gcc-snapshot (>= $(DEB_VERSION))'; \
+	  echo 'libgnat-$(GNAT_SONAME) 1 gcc-snapshot (>= $(DEB_VERSION))'; \
+	  echo 'libgnarl-$(GNAT_SONAME) 1 gcc-snapshot (>= $(DEB_VERSION))'; \
+	) > debian/shlibs.local
+
+	dh_shlibdeps -p$(p_snap) -l$(CURDIR)/$(d_snap)/$(PF)/lib:$(CURDIR)/$(d_snap)/$(PF)/$(if $(filter $(DEB_TARGET_ARCH),amd64 ppc64),lib32,lib64) -Xlibgcj-tools -Xlibmudflap
+	-sed -i -e 's/gcc-snapshot[^,]*, //g' debian/gcc-snapshot.substvars
+
+	dh_gencontrol -p$(p_snap) -- $(common_substvars) \
+		'-Vsnap:depends=$(snapshot_depends)' '-Vsnap:recommends=$(snapshot_recommends)'
+	dh_installdeb -p$(p_snap)
+	dh_md5sums -p$(p_snap)
+	dh_builddeb -p$(p_snap)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_snap_stamp)-tmp $(install_snap_stamp)
--- gdc-4.4-1.063-4.4.7.orig/debian/rules.d/binary-cpp.mk
+++ gdc-4.4-1.063-4.4.7/debian/rules.d/binary-cpp.mk
@@ -0,0 +1,93 @@
+arch_binaries  := $(arch_binaries) cpp
+ifneq ($(DEB_CROSS),yes)
+  ifneq ($(GFDL_INVARIANT_FREE),yes)
+    indep_binaries := $(indep_binaries) cpp-doc
+  endif
+endif
+
+dirs_cpp = \
+	$(docdir) \
+	$(PF)/share/man/man1 \
+	$(PF)/bin \
+	$(gcc_lexec_dir)
+
+files_cpp = \
+	$(PF)/bin/$(cmd_prefix)cpp$(pkg_ver) \
+	$(gcc_lexec_dir)/cc1
+
+ifneq ($(GFDL_INVARIANT_FREE),yes)
+  files_cpp += \
+	$(PF)/share/man/man1/$(cmd_prefix)cpp$(pkg_ver).1
+endif
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-cpp: $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_cpp)
+	dh_installdirs -p$(p_cpp) $(dirs_cpp)
+	DH_COMPAT=2 dh_movefiles -p$(p_cpp) $(files_cpp)
+
+ifneq ($(DEB_CROSS),yes)
+	ln -sf cpp$(pkg_ver) \
+	    $(d_cpp)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-cpp$(pkg_ver)
+	ln -sf cpp$(pkg_ver) \
+	    $(d_cpp)/$(PF)/bin/$(TARGET_ALIAS)-cpp$(pkg_ver)
+  ifneq ($(GFDL_INVARIANT_FREE),yes)
+	ln -sf cpp$(pkg_ver).1 \
+	    $(d_cpp)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-cpp$(pkg_ver).1
+	ln -sf cpp$(pkg_ver).1 \
+	    $(d_cpp)/$(PF)/share/man/man1/$(TARGET_ALIAS)-cpp$(pkg_ver).1
+  endif
+endif
+
+	debian/dh_doclink -p$(p_cpp) $(p_base)
+	debian/dh_rmemptydirs -p$(p_cpp)
+
+ifeq ($(with_multiarch_lib),yes)
+	: # paths needed for relative lookups from startfile_prefixes
+	for ma in $(xarch_multiarch_names); do \
+	  mkdir -p $(d_cpp)/lib/$$ma; \
+	  mkdir -p $(d_cpp)/usr/lib/$$ma; \
+	done
+endif
+
+	dh_strip -p$(p_cpp)
+	dh_compress -p$(p_cpp)
+	dh_fixperms -p$(p_cpp)
+	dh_shlibdeps -p$(p_cpp)
+	dh_gencontrol -p$(p_cpp) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_installdeb -p$(p_cpp)
+	dh_md5sums -p$(p_cpp)
+	dh_builddeb -p$(p_cpp)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
+
+# ----------------------------------------------------------------------
+$(binary_stamp)-cpp-doc: $(build_html_stamp) $(install_stamp)
+	dh_testdir
+	dh_testroot
+	mv $(install_stamp) $(install_stamp)-tmp
+
+	rm -rf $(d_cppd)
+	dh_installdirs -p$(p_cppd) \
+		$(docdir)/$(p_base) \
+		$(PF)/share/info
+	DH_COMPAT=2 dh_movefiles -p$(p_cppd) \
+		$(PF)/share/info/cpp*
+
+	debian/dh_doclink -p$(p_cppd) $(p_base)
+	dh_installdocs -p$(p_cppd) html/cpp.html html/cppinternals.html
+	rm -f $(d_cppd)/$(docdir)/$(p_base)/copyright
+	debian/dh_rmemptydirs -p$(p_cppd)
+
+	dh_compress -p$(p_cppd)
+	dh_fixperms -p$(p_cppd)
+	dh_installdeb -p$(p_cppd)
+	dh_gencontrol -p$(p_cppd) -- -v$(DEB_VERSION) $(common_substvars)
+	dh_md5sums -p$(p_cppd)
+	dh_builddeb -p$(p_cppd)
+
+	trap '' 1 2 3 15; touch $@; mv $(install_stamp)-tmp $(install_stamp)
