# GCC target-specific configuration file.
# Copyright (C) 1997-2019 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 is the GCC target-specific configuration file
# where a configuration type is mapped to different system-specific
# definitions and files.  This is invoked by the autoconf-generated
# configure script.  Putting it in a separate shell file lets us skip
# running autoconf when modifying target-specific information.

# When you change the cases in the OS or target switches, consider
# updating ../libgcc/config.host also.

# This file switches on the shell variable ${target}, and also uses the
# following shell variables:
#
#  with_*		Various variables as set by configure.
#
#  enable_threads	Either the name, yes or no depending on whether
#			threads support was requested.
#
#  default_use_cxa_atexit
#			  The default value for the $enable___cxa_atexit
#			variable.  enable___cxa_atexit needs to be set to
#			"yes" for the correct operation of C++ destructors
#			but it relies upon the presence of a non-standard C
#			library	function called	__cxa_atexit.
#			  Since not all C libraries provide __cxa_atexit the
#			default value of $default_use_cxa_atexit is set to
#			"no" except for targets which are known to be OK.
#
#  default_gnu_indirect_function
#                       The default value for the $enable_gnu_indirect_function
#                       variable.  enable_gnu_indirect_function relies
#			upon the presence of a non-standard gnu ifunc support
#			in the assembler, linker and dynamic linker.
#			Since not all libraries provide the dynamic linking
#			support, the default value of
#			$default_gnu_indirect_function is set to
#			"no" except for targets which are known to be OK.
#
#  gas_flag		Either yes or no depending on whether GNU as was
#			requested.
#
#  gnu_ld_flag		Either yes or no depending on whether GNU ld was
#			requested.

# This file sets the following shell variables for use by the
# autoconf-generated configure script:
#
#  cpu_type		The name of the cpu, if different from the first
#			chunk of the canonical target name.
#
#  tm_defines		List of target macros to define for all compilations.
#
#  tm_file		A list of target macro files, if different from
#			"$cpu_type/$cpu_type.h". Usually it's constructed
#			per target in a way like this:
#			tm_file="${tm_file} dbxelf.h elfos.h ${cpu_type.h}/elf.h"
#			Note that the preferred order is:
#			- specific target header "${cpu_type}/${cpu_type.h}"
#			- generic headers like dbxelf.h elfos.h, etc.
#			- specializing target headers like ${cpu_type.h}/elf.h
#			This helps to keep OS specific stuff out of the CPU
#			defining header ${cpu_type}/${cpu_type.h}.
#
#			It is possible to include automatically-generated
#			build-directory files by prefixing them with "./".
#			All other files should relative to $srcdir/config.
#
#  tm_p_file		Location of file with declarations for functions
#			in $out_file.
#
#  tm_d_file		A list of headers with definitions of target hook
#			macros for the D compiler.
#
#  out_file		The name of the machine description C support
#			file, if different from "$cpu_type/$cpu_type.c".
#
#  common_out_file	The name of the source file for code shared between
#			the compiler proper and the driver.
#
#  md_file		The name of the machine-description file, if
#			different from "$cpu_type/$cpu_type.md".
#
#  tmake_file		A list of machine-description-specific
#			makefile-fragments, if different from
#			"$cpu_type/t-$cpu_type".
#
#  extra_modes          The name of the file containing a list of extra
#                       machine modes, if necessary and different from
#                       "$cpu_type/$cpu_type-modes.def".
#
#  extra_objs		List of extra objects that should be linked into
#			the compiler proper (cc1, cc1obj, cc1plus)
#			depending on target.
#
#  extra_gcc_objs	List of extra objects that should be linked into
#			the compiler driver (gcc) depending on target.
#
#  extra_headers	List of used header files from the directory
#			config/${cpu_type}.
#
#  user_headers_inc_next_pre
#			List of header file names of internal gcc header
#			files, which should be prefixed by an include_next.
#  user_headers_inc_next_post
#			List of header file names of internal gcc header
#			files, which should be postfixed by an include_next.
#  use_gcc_tgmath	If set, add tgmath.h to the list of used header
#			files.
#
#  use_gcc_stdint	If "wrap", install a version of stdint.h that
#			wraps the system's copy for hosted compilations;
#			if "provide", provide a version of systems without
#			such a system header; otherwise "none", do not
#			provide such a header at all.
#
#  extra_programs	List of extra executables compiled for this target
#			machine, used when linking.
#
#  extra_options	List of target-dependent .opt files.
#
#  c_target_objs	List of extra target-dependent objects that be
#			linked into the C compiler only.
#
#  cxx_target_objs	List of extra target-dependent objects that be
#			linked into the C++ compiler only.
#
#  d_target_objs	List of extra target-dependent objects that be
#			linked into the D compiler only.
#
#  fortran_target_objs	List of extra target-dependent objects that be
#			linked into the fortran compiler only.
#
#  target_gtfiles       List of extra source files with type information.
#
#  xm_defines		List of macros to define when compiling for the
#			target machine.
#
#  xm_file		List of files to include when compiling for the
#			target machine.
#
#  use_collect2		Set to yes or no, depending on whether collect2
#			will be used.
#
#  target_cpu_default	Set to override the default target model.
#
#  gdb_needs_out_file_path
#			Set to yes if gdb needs a dir command with
#			`dirname $out_file`.
#
#  thread_file		Set to control which thread package to use.
#
#  gas			Set to yes or no depending on whether the target
#			system normally uses GNU as.
#
#  configure_default_options
#			Set to an initializer for configure_default_options
#			in configargs.h, based on --with-cpu et cetera.
#
#  native_system_header_dir
#			Where system header files are found for this
#			target.  This defaults to /usr/include.  If
#			the --with-sysroot configure option or the
#			--sysroot command line option is used this
#			will be relative to the sysroot.
# target_type_format_char 
# 			The default character to be used for formatting
#			the attribute in a
#			.type symbol_name, ${t_t_f_c}<property>
#			directive.

# The following variables are used in each case-construct to build up the
# outgoing variables:
#
#  gnu_ld		Set to yes or no depending on whether the target
#			system normally uses GNU ld.
#
#  target_has_targetcm	Set to yes or no depending on whether the target
#			has its own definition of targetcm.
#
#  target_has_targetm_common	Set to yes or no depending on whether the
#			target has its own definition of targetm_common.
#
#  target_has_targetdm	Set to yes or no depending on whether the target
#			has its own definition of targetdm.

out_file=
common_out_file=
tmake_file=
extra_headers=
user_headers_inc_next_pre=
user_headers_inc_next_post=
use_gcc_tgmath=yes
use_gcc_stdint=none
extra_programs=
extra_objs=
extra_gcc_objs=
extra_options=
c_target_objs=
cxx_target_objs=
d_target_objs=
fortran_target_objs=
target_has_targetcm=no
target_has_targetm_common=yes
target_has_targetdm=no
tm_defines=
xm_defines=
# Set this to force installation and use of collect2.
use_collect2=
# Set this to override the default target model.
target_cpu_default=
# Set this if gdb needs a dir command with `dirname $out_file`
gdb_needs_out_file_path=
# Set this to control which thread package will be used.
thread_file=
# Reinitialize these from the flag values every loop pass, since some
# configure entries modify them.
gas="$gas_flag"
gnu_ld="$gnu_ld_flag"
default_use_cxa_atexit=no
default_gnu_indirect_function=no
target_gtfiles=
need_64bit_isa=
native_system_header_dir=/usr/include
target_type_format_char='@'

# Don't carry these over build->host->target.  Please.
xm_file=
md_file=

# Obsolete configurations.
case ${target} in
  tile*-*-*				\
 )
    if test "x$enable_obsolete" != xyes; then
      echo "*** Configuration ${target} is obsolete." >&2
      echo "*** Specify --enable-obsolete to build it anyway." >&2
      echo "*** Support will be REMOVED in the next major release of GCC," >&2
      echo "*** unless a maintainer comes forward." >&2
      exit 1
    fi;;
esac

# Unsupported targets list.  Do not put an entry in this list unless
# it would otherwise be caught by a more permissive pattern.  The list
# should be in alphabetical order.
case ${target} in
 # Avoid special cases that are not obsolete
   arm*-*-*eabi*			\
 )
	;;
   arm*-wince-pe*			\
 | arm*-*-ecos-elf			\
 | arm*-*-elf				\
 | arm*-*-linux*			\
 | arm*-*-uclinux*			\
 | i[34567]86-go32-*			\
 | i[34567]86-*-go32*			\
 | m68k-*-uclinuxoldabi*		\
 | mips64orion*-*-rtems*		\
 | pdp11-*-bsd				\
 | powerpc*-*-linux*paired*		\
 | powerpc*-*-*spe*			\
 | sparc-hal-solaris2*			\
 | spu*-*-*				\
 | thumb-*-*				\
 | *-*-freebsd[12] | *-*-freebsd[1234].* \
 | *-*-freebsd*aout*			\
 | *-*-linux*aout*			\
 | *-*-linux*coff*			\
 | *-*-linux*libc1*			\
 | *-*-linux*oldld*			\
 | *-*-rtemsaout*			\
 | *-*-rtemscoff*			\
 | *-*-solaris2				\
 | *-*-solaris2.[0-9]			\
 | *-*-solaris2.[0-9].*			\
 | *-*-solaris2.10*			\
 | *-*-sysv*				\
 | vax-*-vms*				\
 )
	echo "*** Configuration ${target} not supported" 1>&2
	exit 1
	;;
esac

# Set default cpu_type, tm_file, tm_p_file and xm_file so it can be
# updated in each machine entry.  Also set default extra_headers for some
# machines.
tm_p_file=
cpu_type=`echo ${target} | sed 's/-.*$//'`
cpu_is_64bit=
case ${target} in
m32c*-*-*)
        cpu_type=m32c
	tmake_file=m32c/t-m32c
	target_has_targetm_common=no
        ;;
aarch64*-*-*)
	cpu_type=aarch64
	extra_headers="arm_fp16.h arm_neon.h arm_acle.h arm_sve.h"
	c_target_objs="aarch64-c.o"
	cxx_target_objs="aarch64-c.o"
	d_target_objs="aarch64-d.o"
	extra_objs="aarch64-builtins.o aarch-common.o aarch64-sve-builtins.o aarch64-sve-builtins-shapes.o aarch64-sve-builtins-base.o cortex-a57-fma-steering.o aarch64-speculation.o falkor-tag-collision-avoidance.o aarch64-bti-insert.o"
	target_gtfiles="\$(srcdir)/config/aarch64/aarch64-builtins.c \$(srcdir)/config/aarch64/aarch64-sve-builtins.h \$(srcdir)/config/aarch64/aarch64-sve-builtins.cc"
	target_has_targetm_common=yes
	;;
alpha*-*-*)
	cpu_type=alpha
	extra_options="${extra_options} g.opt"
	;;
amdgcn*)
	cpu_type=gcn
	use_gcc_stdint=wrap
	;;
am33_2.0-*-linux*)
	cpu_type=mn10300
	;;
arc*-*-*)
	cpu_type=arc
	c_target_objs="arc-c.o"
	cxx_target_objs="arc-c.o"
	extra_options="${extra_options} arc/arc-tables.opt g.opt"
	extra_headers="arc-simd.h"
	;;
arm*-*-*)
	cpu_type=arm
	extra_objs="arm-builtins.o aarch-common.o"
	extra_headers="mmintrin.h arm_neon.h arm_acle.h arm_fp16.h arm_cmse.h"
	target_type_format_char='%'
	c_target_objs="arm-c.o"
	cxx_target_objs="arm-c.o"
	d_target_objs="arm-d.o"
	extra_options="${extra_options} arm/arm-tables.opt"
	target_gtfiles="\$(srcdir)/config/arm/arm-builtins.c"
	;;
avr-*-*)
	cpu_type=avr
	c_target_objs="avr-c.o"
	cxx_target_objs="avr-c.o"
	;;
bfin*-*)
	cpu_type=bfin
	;;
bpf-*-*)
	cpu_type=bpf
	;;
crisv32-*)
	cpu_type=cris
	;;
frv*)	cpu_type=frv
	extra_options="${extra_options} g.opt"
	;;
ft32*)	cpu_type=ft32
	target_has_targetm_common=no
	;;
moxie*)	cpu_type=moxie
	target_has_targetm_common=no
	;;
fido-*-*)
	cpu_type=m68k
	extra_headers=math-68881.h
	extra_options="${extra_options} m68k/m68k-tables.opt"
        ;;
i[34567]86-*-*)
	cpu_type=i386
	c_target_objs="i386-c.o"
	cxx_target_objs="i386-c.o"
	d_target_objs="i386-d.o"
	extra_objs="x86-tune-sched.o x86-tune-sched-bd.o x86-tune-sched-atom.o x86-tune-sched-core.o i386-options.o i386-builtins.o i386-expand.o i386-features.o"
	target_gtfiles="\$(srcdir)/config/i386/i386-builtins.c \$(srcdir)/config/i386/i386-expand.c \$(srcdir)/config/i386/i386-options.c"
	extra_options="${extra_options} fused-madd.opt"
	extra_headers="cpuid.h mmintrin.h mm3dnow.h xmmintrin.h emmintrin.h
		       pmmintrin.h tmmintrin.h ammintrin.h smmintrin.h
		       nmmintrin.h bmmintrin.h fma4intrin.h wmmintrin.h
		       immintrin.h x86intrin.h avxintrin.h xopintrin.h
		       ia32intrin.h cross-stdarg.h lwpintrin.h popcntintrin.h
		       lzcntintrin.h bmiintrin.h bmi2intrin.h tbmintrin.h
		       avx2intrin.h avx512fintrin.h fmaintrin.h f16cintrin.h
		       rtmintrin.h xtestintrin.h rdseedintrin.h prfchwintrin.h
		       adxintrin.h fxsrintrin.h xsaveintrin.h xsaveoptintrin.h
		       avx512cdintrin.h avx512erintrin.h avx512pfintrin.h
		       shaintrin.h clflushoptintrin.h xsavecintrin.h
		       xsavesintrin.h avx512dqintrin.h avx512bwintrin.h
		       avx512vlintrin.h avx512vlbwintrin.h avx512vldqintrin.h
		       avx512ifmaintrin.h avx512ifmavlintrin.h avx512vbmiintrin.h
		       avx512vbmivlintrin.h avx5124fmapsintrin.h avx5124vnniwintrin.h
		       avx512vpopcntdqintrin.h clwbintrin.h mwaitxintrin.h
		       clzerointrin.h pkuintrin.h sgxintrin.h cetintrin.h
		       gfniintrin.h cet.h avx512vbmi2intrin.h
		       avx512vbmi2vlintrin.h avx512vnniintrin.h
		       avx512vnnivlintrin.h vaesintrin.h vpclmulqdqintrin.h
		       avx512vpopcntdqvlintrin.h avx512bitalgintrin.h
		       pconfigintrin.h wbnoinvdintrin.h movdirintrin.h
		       waitpkgintrin.h cldemoteintrin.h avx512bf16vlintrin.h avx512bf16intrin.h
		       enqcmdintrin.h avx512vp2intersectintrin.h avx512vp2intersectvlintrin.h"
	;;
x86_64-*-*)
	cpu_type=i386
	c_target_objs="i386-c.o"
	cxx_target_objs="i386-c.o"
	d_target_objs="i386-d.o"
	extra_options="${extra_options} fused-madd.opt"
	extra_objs="x86-tune-sched.o x86-tune-sched-bd.o x86-tune-sched-atom.o x86-tune-sched-core.o i386-options.o i386-builtins.o i386-expand.o i386-features.o"
	target_gtfiles="\$(srcdir)/config/i386/i386-builtins.c \$(srcdir)/config/i386/i386-expand.c \$(srcdir)/config/i386/i386-options.c"
	extra_headers="cpuid.h mmintrin.h mm3dnow.h xmmintrin.h emmintrin.h
		       pmmintrin.h tmmintrin.h ammintrin.h smmintrin.h
		       nmmintrin.h bmmintrin.h fma4intrin.h wmmintrin.h
		       immintrin.h x86intrin.h avxintrin.h xopintrin.h
		       ia32intrin.h cross-stdarg.h lwpintrin.h popcntintrin.h
		       lzcntintrin.h bmiintrin.h bmi2intrin.h tbmintrin.h
		       avx2intrin.h avx512fintrin.h fmaintrin.h f16cintrin.h
		       rtmintrin.h xtestintrin.h rdseedintrin.h prfchwintrin.h
		       adxintrin.h fxsrintrin.h xsaveintrin.h xsaveoptintrin.h
		       avx512cdintrin.h avx512erintrin.h avx512pfintrin.h
		       shaintrin.h clflushoptintrin.h xsavecintrin.h
		       xsavesintrin.h avx512dqintrin.h avx512bwintrin.h
		       avx512vlintrin.h avx512vlbwintrin.h avx512vldqintrin.h
		       avx512ifmaintrin.h avx512ifmavlintrin.h avx512vbmiintrin.h
		       avx512vbmivlintrin.h avx5124fmapsintrin.h avx5124vnniwintrin.h
		       avx512vpopcntdqintrin.h clwbintrin.h mwaitxintrin.h
		       clzerointrin.h pkuintrin.h sgxintrin.h cetintrin.h
		       gfniintrin.h cet.h avx512vbmi2intrin.h
		       avx512vbmi2vlintrin.h avx512vnniintrin.h
		       avx512vnnivlintrin.h vaesintrin.h vpclmulqdqintrin.h
		       avx512vpopcntdqvlintrin.h avx512bitalgintrin.h
		       pconfigintrin.h wbnoinvdintrin.h movdirintrin.h
		       waitpkgintrin.h cldemoteintrin.h avx512bf16vlintrin.h avx512bf16intrin.h
		       enqcmdintrin.h avx512vp2intersectintrin.h avx512vp2intersectvlintrin.h"
	;;
ia64-*-*)
	extra_headers=ia64intrin.h
	extra_options="${extra_options} g.opt fused-madd.opt"
	;;
hppa*-*-*)
	cpu_type=pa
	;;
lm32*)
	extra_options="${extra_options} g.opt"
	;;
m32r*-*-*)
        cpu_type=m32r
	extra_options="${extra_options} g.opt"
        ;;
m68k-*-*)
	extra_headers=math-68881.h
	extra_options="${extra_options} m68k/m68k-tables.opt"
	;;
microblaze*-*-*)
        cpu_type=microblaze
	extra_options="${extra_options} g.opt"
        ;;
mips*-*-*)
	cpu_type=mips
	d_target_objs="mips-d.o"
	extra_headers="loongson.h loongson-mmiintrin.h msa.h"
	extra_objs="frame-header-opt.o"
	extra_options="${extra_options} g.opt fused-madd.opt mips/mips-tables.opt"
	;;
nds32*)
	cpu_type=nds32
	extra_headers="nds32_intrinsic.h nds32_isr.h nds32_init.inc"
	case ${target} in
	  nds32*-*-linux*)
	    extra_options="${extra_options} nds32/nds32-linux.opt"
	    ;;
	  nds32*-*-elf*)
	    extra_options="${extra_options} nds32/nds32-elf.opt"
	    ;;
	  *)
	    ;;
	esac
	extra_objs="nds32-cost.o nds32-intrinsic.o nds32-isr.o nds32-md-auxiliary.o nds32-pipelines-auxiliary.o nds32-predicates.o nds32-memory-manipulation.o nds32-fp-as-gp.o nds32-relax-opt.o nds32-utils.o"
	;;
nios2-*-*)
	cpu_type=nios2
	extra_options="${extra_options} g.opt"
	;;
nvptx-*-*)
	cpu_type=nvptx
	;;
or1k*-*-*)
	cpu_type=or1k
	;;
powerpc*-*-*)
	cpu_type=rs6000
	extra_objs="rs6000-string.o rs6000-p8swap.o rs6000-logue.o rs6000-call.o"
	extra_headers="ppc-asm.h altivec.h htmintrin.h htmxlintrin.h"
	extra_headers="${extra_headers} bmi2intrin.h bmiintrin.h"
	extra_headers="${extra_headers} xmmintrin.h mm_malloc.h emmintrin.h"
	extra_headers="${extra_headers} mmintrin.h x86intrin.h"
	extra_headers="${extra_headers} pmmintrin.h tmmintrin.h smmintrin.h"
	extra_headers="${extra_headers} ppu_intrinsics.h spu2vmx.h vec_types.h si2vmx.h"
	extra_headers="${extra_headers} amo.h"
	case x$with_cpu in
	    xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[3456789]|xpower6x|xrs64a|xcell|xa2|xe500mc64|xe5500|xe6500|xfuture)
		cpu_is_64bit=yes
		;;
	esac
	extra_options="${extra_options} g.opt fused-madd.opt rs6000/rs6000-tables.opt"
	target_gtfiles="$target_gtfiles \$(srcdir)/config/rs6000/rs6000-logue.c \$(srcdir)/config/rs6000/rs6000-call.c"
	;;
pru-*-*)
	cpu_type=pru
	;;
riscv*)
	cpu_type=riscv
	extra_objs="riscv-builtins.o riscv-c.o riscv-sr.o"
	d_target_objs="riscv-d.o"
	;;
rs6000*-*-*)
	extra_options="${extra_options} g.opt fused-madd.opt rs6000/rs6000-tables.opt"
	extra_objs="rs6000-string.o rs6000-p8swap.o rs6000-logue.o rs6000-call.o"
	target_gtfiles="$target_gtfiles \$(srcdir)/config/rs6000/rs6000-logue.c \$(srcdir)/config/rs6000/rs6000-call.c"
	;;
sparc*-*-*)
	cpu_type=sparc
	c_target_objs="sparc-c.o"
	cxx_target_objs="sparc-c.o"
	d_target_objs="sparc-d.o"
	extra_headers="visintrin.h"
	;;
s390*-*-*)
	cpu_type=s390
	d_target_objs="s390-d.o"
	extra_options="${extra_options} fused-madd.opt"
	extra_headers="s390intrin.h htmintrin.h htmxlintrin.h vecintrin.h"
	;;
# Note the 'l'; we need to be able to match e.g. "shle" or "shl".
sh[123456789lbe]*-*-* | sh-*-*)
	cpu_type=sh
	extra_options="${extra_options} fused-madd.opt"
	extra_objs="${extra_objs} sh_treg_combine.o sh-mem.o sh_optimize_sett_clrt.o"
	;;
v850*-*-*)
	cpu_type=v850
	;;
tic6x-*-*)
	cpu_type=c6x
	extra_headers="c6x_intrinsics.h"
	extra_options="${extra_options} c6x/c6x-tables.opt"
	;;
xtensa*-*-*)
	extra_options="${extra_options} fused-madd.opt"
	;;
tilegx*-*-*)
	cpu_type=tilegx
	;;
tilepro*-*-*)
	cpu_type=tilepro
	;;
esac

tm_file=${cpu_type}/${cpu_type}.h
tm_d_file=${cpu_type}/${cpu_type}.h
if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-protos.h
then
	tm_p_file=${cpu_type}/${cpu_type}-protos.h
	tm_d_file="${tm_d_file} ${cpu_type}/${cpu_type}-protos.h"
fi

extra_modes=
if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-modes.def
then
	extra_modes=${cpu_type}/${cpu_type}-modes.def
fi
if test -f ${srcdir}/config/${cpu_type}/${cpu_type}.opt
then
	extra_options="${extra_options} ${cpu_type}/${cpu_type}.opt"
fi

case ${target} in
aarch64*-*-*)
	tm_p_file="${tm_p_file} arm/aarch-common-protos.h"
	case ${with_abi} in
	"")
		if test "x$with_multilib_list" = xilp32; then
			tm_file="aarch64/biarchilp32.h ${tm_file}"
		else
			tm_file="aarch64/biarchlp64.h ${tm_file}"
		fi
		;;
	ilp32)
		tm_file="aarch64/biarchilp32.h ${tm_file}"
		;;
	lp64)
		tm_file="aarch64/biarchlp64.h ${tm_file}"
		;;
	*)
		echo "Unknown ABI used in --with-abi=$with_abi"
		exit 1
	esac
	;;
i[34567]86-*-*)
	if test "x$with_abi" != x; then
		echo "This target does not support --with-abi."
		exit 1
	fi
	;;
x86_64-*-*)
	case ${with_abi} in
	"")
		if test "x$with_multilib_list" = xmx32; then
			tm_file="i386/biarchx32.h ${tm_file}"
		else
			tm_file="i386/biarch64.h ${tm_file}"
		fi
		;;
	64 | m64)
		tm_file="i386/biarch64.h ${tm_file}"
		;;
	x32 | mx32)
		tm_file="i386/biarchx32.h ${tm_file}"
		;;
	*)
		echo "Unknown ABI used in --with-abi=$with_abi"
		exit 1
	esac
	;;
arm*-*-*)
	tm_p_file="arm/arm-flags.h ${tm_p_file} arm/aarch-common-protos.h"
	;;
esac

# On a.out targets, we need to use collect2.
case ${target} in
*-*-*aout*)
	use_collect2=yes
	;;
esac

# Common C libraries.
tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3 LIBC_MUSL=4"

# 32-bit x86 processors supported by --with-arch=.  Each processor
# MUST be separated by exactly one space.
x86_archs="athlon athlon-4 athlon-fx athlon-mp athlon-tbird \
athlon-xp k6 k6-2 k6-3 geode c3 c3-2 winchip-c6 winchip2 i386 i486 \
i586 i686 pentium pentium-m pentium-mmx pentium2 pentium3 pentium3m \
pentium4 pentium4m pentiumpro prescott lakemont"

# 64-bit x86 processors supported by --with-arch=.  Each processor
# MUST be separated by exactly one space.
x86_64_archs="amdfam10 athlon64 athlon64-sse3 barcelona bdver1 bdver2 \
bdver3 bdver4 znver1 znver2 btver1 btver2 k8 k8-sse3 opteron \
opteron-sse3 nocona core2 corei7 corei7-avx core-avx-i core-avx2 atom \
slm nehalem westmere sandybridge ivybridge haswell broadwell bonnell \
silvermont knl knm skylake-avx512 cannonlake icelake-client icelake-server \
skylake goldmont goldmont-plus tremont cascadelake tigerlake cooperlake x86-64 \
native"

# Additional x86 processors supported by --with-cpu=.  Each processor
# MUST be separated by exactly one space.
x86_cpus="generic intel"

# Common parts for widely ported systems.
case ${target} in
*-*-darwin*)
  tmake_file="t-darwin "
  tm_file="${tm_file} darwin.h"
  case ${target} in
  *-*-darwin9*)
    tm_file="${tm_file} darwin9.h"
    ;;
  *-*-darwin[1][01]*)
    tm_file="${tm_file} darwin9.h darwin10.h"
    ;;
  *-*-darwin[1][2-9]* | *-*-darwin[2][0-9]*)
    tm_file="${tm_file} darwin9.h darwin10.h darwin12.h"
    ;;
  esac
  tm_file="${tm_file} ${cpu_type}/darwin.h"
  tm_p_file="${tm_p_file} darwin-protos.h"
  target_gtfiles="$target_gtfiles \$(srcdir)/config/darwin.c"
  extra_options="${extra_options} darwin.opt"
  c_target_objs="${c_target_objs} darwin-c.o"
  cxx_target_objs="${cxx_target_objs} darwin-c.o"
  fortran_target_objs="darwin-f.o"
  target_has_targetcm=yes
  extra_objs="${extra_objs} darwin.o"
  extra_gcc_objs="darwin-driver.o"
  default_use_cxa_atexit=yes
  use_gcc_stdint=wrap
  case ${enable_threads} in
    "" | yes | posix) thread_file='posix' ;;
  esac
  ;;
*-*-dragonfly*)
  gas=yes
  gnu_ld=yes
  tmake_file="t-slibgcc"
  case ${enable_threads} in
    "" | yes | posix)
      thread_file='posix'
      ;;
    no | single)
      # Let these non-posix thread selections fall through if requested
      ;;
    *)
      echo 'Unknown thread configuration for DragonFly BSD'
      exit 1
      ;;
  esac
  extra_options="$extra_options rpath.opt dragonfly.opt"
  default_use_cxa_atexit=yes
  use_gcc_stdint=wrap
  ;;
*-*-freebsd*)
  # This is the generic ELF configuration of FreeBSD.  Later
  # machine-specific sections may refine and add to this
  # configuration.
  #
  # Due to tm_file entry ordering issues that vary between cpu
  # architectures, we only define fbsd_tm_file to allow the
  # machine-specific section to dictate the final order of all
  # entries of tm_file with the minor exception that components
  # of the tm_file set here will always be of the form:
  #
  # freebsd<version_number>.h [freebsd-<conf_option>.h ...] freebsd-spec.h freebsd.h
  #
  # The machine-specific section should not tamper with this
  # ordering but may order all other entries of tm_file as it
  # pleases around the provided core setting.
  gas=yes
  gnu_ld=yes
  fbsd_major=`echo ${target} | sed -e 's/.*freebsd//g' | sed -e 's/\..*//g'`
  if test "$fbsd_major" = ""; then
    echo "Specify the major version number of the targeted FreeBSD release"
    echo "like this: --target=amd64-unknown-freebsd10.1"
    exit 1
  fi
  tm_defines="${tm_defines} FBSD_MAJOR=${fbsd_major}"
  tmake_file="t-slibgcc"
  case ${enable_threads} in
    no)
      fbsd_tm_file="${fbsd_tm_file} freebsd-nthr.h"
      ;;
    "" | yes | posix)
      thread_file='posix'
      ;;
    *)
      echo 'Unknown thread configuration for FreeBSD'
      exit 1
      ;;
  esac
  fbsd_tm_file="${fbsd_tm_file} freebsd-spec.h freebsd.h freebsd-stdint.h"
  extra_options="$extra_options rpath.opt freebsd.opt"
  case ${target} in
    *-*-freebsd[345].*)
      :;;
    *)
      default_use_cxa_atexit=yes;;
  esac
  use_gcc_stdint=wrap
  ;;
*-*-fuchsia*)
  native_system_header_dir=/include
  ;;
*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu | *-*-uclinuxfdpiceabi)
  extra_options="$extra_options gnu-user.opt"
  gas=yes
  gnu_ld=yes
  case ${enable_threads} in
    "" | yes | posix) thread_file='posix' ;;
  esac
  tmake_file="t-slibgcc"
  case $target in
    *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-kopensolaris*-gnu)
      :;;
    *-*-gnu*)
      native_system_header_dir=/include
      ;;
  esac
  # Linux C libraries selection switch: glibc / uclibc / bionic.
  # uclibc and bionic aren't usable for GNU/Hurd and neither for GNU/k*BSD.
  case $target in
    *linux*)
      tm_p_file="${tm_p_file} linux-protos.h"
      tmake_file="${tmake_file} t-linux"
      extra_objs="${extra_objs} linux.o"
      extra_options="${extra_options} linux.opt"
      ;;
  esac
  case $target in
    *-*-*android*)
      tm_defines="$tm_defines DEFAULT_LIBC=LIBC_BIONIC"
      ;;
    *-*-*uclibc* | *-*-uclinuxfdpiceabi)
      tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC"
      ;;
    *-*-*musl*)
      tm_defines="$tm_defines DEFAULT_LIBC=LIBC_MUSL"
      ;;
    *)
      tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC"
      ;;
  esac
  # Assume that glibc or uClibc or Bionic are being used and so __cxa_atexit
  # is provided.
  default_use_cxa_atexit=yes
  use_gcc_tgmath=no
  use_gcc_stdint=wrap
  # Enable compilation for Android by default for *android* targets.
  case $target in
    *-*-*android*)
      tm_defines="$tm_defines ANDROID_DEFAULT=1"
      ;;
    *)
      tm_defines="$tm_defines ANDROID_DEFAULT=0"
      ;;
  esac
  c_target_objs="${c_target_objs} glibc-c.o"
  cxx_target_objs="${cxx_target_objs} glibc-c.o"
  d_target_objs="${d_target_objs} glibc-d.o"
  tmake_file="${tmake_file} t-glibc"
  target_has_targetcm=yes
  target_has_targetdm=yes
  ;;
*-*-netbsd*)
  tm_p_file="${tm_p_file} netbsd-protos.h"
  tmake_file="t-netbsd t-slibgcc"
  extra_objs="${extra_objs} netbsd.o"
  d_target_objs="${d_target_objs} netbsd-d.o"
  gas=yes
  gnu_ld=yes
  use_gcc_stdint=wrap
  case ${enable_threads} in
    "" | yes | posix) thread_file='posix' ;;
  esac
  nbsd_tm_file="netbsd.h netbsd-stdint.h netbsd-elf.h"
  default_use_cxa_atexit=yes
  target_has_targetdm=yes
  case ${target} in
    arm*-* | i[34567]86-* | powerpc*-* | sparc*-* | x86_64-*)
      default_gnu_indirect_function=yes
      ;;
  esac
  ;;
*-*-openbsd*)
  tmake_file="t-openbsd"
  case ${enable_threads} in
    yes)
      thread_file='posix'
      ;;
  esac
  case ${target} in
    *-*-openbsd4.[3-9]|*-*-openbsd[5-9]*)
      default_use_cxa_atexit=yes
      ;;
  esac
  ;;
*-*-phoenix*)
  gas=yes
  gnu_ld=yes
  default_use_cxa_atexit=yes
  ;;
*-*-rtems*)
  case ${enable_threads} in
    "" | yes | rtems) thread_file='rtems' ;;
    posix) thread_file='posix' ;;
    no) ;;
    *)
      echo 'Unknown thread configuration for RTEMS'
      exit 1
      ;;
  esac
  tmake_file="${tmake_file} t-rtems"
  extra_options="${extra_options} rtems.opt"
  default_use_cxa_atexit=yes
  use_gcc_stdint=wrap
  ;;
*-*-uclinux*)
  extra_options="$extra_options gnu-user.opt"
  use_gcc_stdint=wrap
  case ${enable_threads} in
    "" | yes | posix) thread_file='posix' ;;
  esac
  tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC SINGLE_LIBC"
  ;;
*-*-rdos*)
  use_gcc_stdint=wrap
  ;;
*-*-solaris2*)
  # i?86-*-solaris2* needs to insert headers between cpu default and
  # Solaris 2 specific ones.
  sol2_tm_file_head="dbxelf.h elfos.h ${cpu_type}/sysv4.h"
  sol2_tm_file_tail="${cpu_type}/sol2.h sol2.h"
  sol2_tm_file="${sol2_tm_file_head} ${sol2_tm_file_tail}"
  case ${target} in
    *-*-solaris2.1[1-9]*)
      # __cxa_atexit was introduced in Solaris 11.4.
      default_use_cxa_atexit=yes
      ;;
  esac
  use_gcc_stdint=wrap
  if test x$gnu_ld = xyes; then
    tm_file="usegld.h ${tm_file}"
  fi
  if test x$gas = xyes; then
    tm_file="usegas.h ${tm_file}"
  fi
  tm_p_file="${tm_p_file} sol2-protos.h"
  tmake_file="${tmake_file} t-sol2 t-slibgcc"
  c_target_objs="${c_target_objs} sol2-c.o"
  cxx_target_objs="${cxx_target_objs} sol2-c.o sol2-cxx.o"
  d_target_objs="${d_target_objs} sol2-d.o"
  extra_objs="${extra_objs} sol2.o sol2-stubs.o"
  extra_options="${extra_options} sol2.opt"
  case ${enable_threads}:${have_pthread_h}:${have_thread_h} in
    "":yes:* | yes:yes:* )
      thread_file=posix
      ;;
  esac
  target_has_targetdm=yes
  ;;
*-*-*vms*)
  extra_options="${extra_options} vms/vms.opt"
  xmake_file=vms/x-vms
  tmake_file="vms/t-vms t-slibgcc"
  extra_objs="vms.o"
  target_gtfiles="$target_gtfiles \$(srcdir)/config/vms/vms.c"
  tm_p_file="${tm_p_file} vms/vms-protos.h"
  xm_file="vms/xm-vms.h"
  c_target_objs="vms-c.o"
  cxx_target_objs="vms-c.o"
  fortran_target_objs="vms-f.o"
  use_gcc_stdint=provide
  tm_file="${tm_file} vms/vms-stdint.h"
  if test x$gnu_ld != xyes; then
    # Build wrappers for native case.
    extra_programs="ld\$(exeext) ar\$(exeext)"
    tmake_file="$tmake_file vms/t-vmsnative"
  fi
  ;;
*-*-vxworks*)
  tmake_file=t-vxworks
  xm_defines=POSIX
  extra_options="${extra_options} vxworks.opt"
  extra_objs="$extra_objs vxworks.o"
  use_gcc_stdint=provide
  tm_file="${tm_file} vxworks-stdint.h"
  case ${enable_threads} in
    no) ;;
    "" | yes | vxworks) thread_file='vxworks' ;;
    *) echo 'Unknown thread configuration for VxWorks'; exit 1 ;;
  esac

  # A few common macro definitions conveying general characteristics
  # of the configuration at hand. Note that by VxWorks 7, we mean the
  # the SR6xx major update or beyond in vendor parlance:

  case $target in
    *-*-vxworks7*)
      tm_defines="$tm_defines TARGET_VXWORKS7=1"
      ;;
  esac
  case $target in
    *64-*-vxworks*)
      tm_defines="$tm_defines TARGET_VXWORKS64=1"
      ;;
  esac

  # Then a few build configuration controls for VxWorks 7, which
  # has specificities on top of which we aim to provide more complete
  # C++ support:

  case $target in
    *-*-vxworks7*)
      # VxWorks 7 always has init/fini_array support and it is simpler to
      # just leverage this, sticking to what the system toolchain does:
      gcc_cv_initfini_array=yes
      ;;
  esac
  ;;
*-*-elf|arc*-*-elf*)
  # Assume that newlib is being used and so __cxa_atexit is provided.
  default_use_cxa_atexit=yes
  use_gcc_stdint=wrap
  ;;
esac

case ${target} in
aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
	tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h"
	tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-errata.h aarch64/aarch64-elf-raw.h"
	tmake_file="${tmake_file} aarch64/t-aarch64"
	case $target in
	aarch64-*-elf*)
		use_gcc_stdint=wrap
		;;
        aarch64-*-fuchsia*)
                tm_file="${tm_file} fuchsia.h"
                ;;
	aarch64-*-rtems*)
	  	tm_file="${tm_file} rtems.h aarch64/rtems.h"
		;;
	esac
	case $target in
	aarch64_be-*)
		tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
		;;
	esac
	aarch64_multilibs="${with_multilib_list}"
	if test "$aarch64_multilibs" = "default"; then
		aarch64_multilibs="lp64,ilp32"
	fi
	aarch64_multilibs=`echo $aarch64_multilibs | sed -e 's/,/ /g'`
	for aarch64_multilib in ${aarch64_multilibs}; do
		case ${aarch64_multilib} in
		ilp32 | lp64 )
			TM_MULTILIB_CONFIG="${TM_MULTILIB_CONFIG},${aarch64_multilib}"
			;;
		*)
			echo "--with-multilib-list=${aarch64_multilib} not supported."
			exit 1
		esac
	done
	TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^,//'`
	;;
aarch64*-*-freebsd*)
	tm_file="${tm_file} dbxelf.h elfos.h ${fbsd_tm_file}"
	tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-errata.h aarch64/aarch64-freebsd.h"
	tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-freebsd"
	tm_defines="${tm_defines}  TARGET_DEFAULT_ASYNC_UNWIND_TABLES=1"
	;;
aarch64*-*-netbsd*)
	tm_file="${tm_file} dbxelf.h elfos.h ${nbsd_tm_file}"
	tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-errata.h aarch64/aarch64-netbsd.h"
	tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-netbsd"
	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
	;;
aarch64*-*-linux*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h"
	tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-errata.h aarch64/aarch64-linux.h"
	tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-linux"
	tm_defines="${tm_defines}  TARGET_DEFAULT_ASYNC_UNWIND_TABLES=1"
	case $target in
	aarch64_be-*)
		tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
		;;
	esac
	aarch64_multilibs="${with_multilib_list}"
	if test "$aarch64_multilibs" = "default"; then
		# TODO: turn on ILP32 multilib build after its support is mature.
		# aarch64_multilibs="lp64,ilp32"
		aarch64_multilibs="lp64"
	fi
	aarch64_multilibs=`echo $aarch64_multilibs | sed -e 's/,/ /g'`
	for aarch64_multilib in ${aarch64_multilibs}; do
		case ${aarch64_multilib} in
		ilp32 | lp64 )
			TM_MULTILIB_CONFIG="${TM_MULTILIB_CONFIG},${aarch64_multilib}"
			;;
		*)
			echo "--with-multilib-list=${aarch64_multilib} not supported."
			exit 1
		esac
	done
	TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^,//'`
	;;
aarch64*-wrs-vxworks*)
        tm_file="${tm_file} elfos.h aarch64/aarch64-elf.h"
        tm_file="${tm_file} vx-common.h vxworks.h aarch64/aarch64-vxworks.h"
        tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-vxworks"
        ;;
alpha*-*-linux*)
	tm_file="elfos.h ${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h glibc-stdint.h"
	tmake_file="${tmake_file} alpha/t-linux alpha/t-alpha"
	extra_options="${extra_options} alpha/elf.opt"
	;;
alpha*-*-netbsd*)
	tm_file="elfos.h ${tm_file} ${nbsd_tm_file} alpha/elf.h alpha/netbsd.h"
	tmake_file="${tmake_file} alpha/t-alpha"
	extra_options="${extra_options} netbsd.opt netbsd-elf.opt \
		       alpha/elf.opt"
	;;
alpha*-*-openbsd*)
	tm_defines="${tm_defines} OBSD_HAS_DECLARE_FUNCTION_NAME OBSD_HAS_DECLARE_FUNCTION_SIZE OBSD_HAS_DECLARE_OBJECT"
	tm_file="elfos.h alpha/alpha.h alpha/elf.h openbsd.h openbsd-stdint.h alpha/openbsd.h openbsd-libpthread.h"
	tmake_file="${tmake_file} alpha/t-alpha"
	extra_options="${extra_options} openbsd.opt alpha/elf.opt"
	# default x-alpha is only appropriate for dec-osf.
	;;
alpha*-dec-*vms*)
	tm_file="${tm_file} vms/vms.h alpha/vms.h"
	tmake_file="${tmake_file} alpha/t-vms alpha/t-alpha"
	;;
arc*-*-elf*)
	tm_file="arc/arc-arch.h dbxelf.h elfos.h newlib-stdint.h arc/elf.h ${tm_file}"
	tmake_file="arc/t-multilib arc/t-arc"
	extra_gcc_objs="driver-arc.o"
	if test "x$with_cpu" != x; then
		tm_defines="${tm_defines} TARGET_CPU_BUILD=PROCESSOR_$with_cpu"
	fi
	if test x${with_endian} = x; then
		case ${target} in
		arc*be-*-* | arc*eb-*-*)	with_endian=big ;;
		*)				with_endian=little ;;
		esac
	fi
	case ${with_endian} in
	big|little)		;;
	*)	echo "with_endian=${with_endian} not supported."; exit 1 ;;
	esac
	case ${with_endian} in
	big*)	tm_file="arc/big.h ${tm_file}"
	esac
	;;
arc*-*-linux*)
	tm_file="arc/arc-arch.h dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h arc/linux.h ${tm_file}"
	tmake_file="${tmake_file} arc/t-multilib-linux arc/t-arc"
	extra_gcc_objs="driver-arc.o"
	if test "x$with_cpu" != x; then
		tm_defines="${tm_defines} TARGET_CPU_BUILD=PROCESSOR_$with_cpu"
	fi
	if test x${with_endian} = x; then
		case ${target} in
		arc*be-*-* | arc*eb-*-*)	with_endian=big ;;
		*)				with_endian=little ;;
		esac
	fi
	case ${with_endian} in
	big|little)		;;
	*)	echo "with_endian=${with_endian} not supported."; exit 1 ;;
	esac
	case ${with_endian} in
	big*)	tm_file="arc/big.h ${tm_file}"
	esac
	# Force .init_array support.  The configure script cannot always
	# automatically detect that GAS supports it, yet we require it.
	gcc_cv_initfini_array=yes
	;;
arm-wrs-vxworks7*)
	# We only support VxWorks 7 now on ARM, post SR600.  Pre SR600
	# VxWorks 7 was transitory and major versions prior to 7 were based
	# on long deprecated ABI, not supported at all any more regardless
	# of VxWorks.
	extra_options="${extra_options} arm/vxworks.opt"
	tmake_file="${tmake_file} arm/t-arm arm/t-vxworks arm/t-bpabi"
	tm_file="elfos.h arm/elf.h arm/bpabi.h arm/aout.h ${tm_file}"
	tm_file="${tm_file} vx-common.h vxworks.h arm/vxworks.h"
	target_cpu_cname="armv7-a"
	need_64bit_hwint=yes
	;;
arm*-*-freebsd*)                # ARM FreeBSD EABI
	tm_file="dbxelf.h elfos.h ${fbsd_tm_file} arm/elf.h"
	case $target in
	arm*b-*-freebsd*)
	    tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
	    ;;
	esac
	tmake_file="${tmake_file} arm/t-arm arm/t-bpabi"
	tm_file="${tm_file} arm/bpabi.h arm/freebsd.h arm/aout.h arm/arm.h"
	case $target in
	armv6*-*-freebsd*)
	    target_cpu_cname="arm1176jzf-s"
            if test $fbsd_major -ge 11; then
               tm_defines="${tm_defines} TARGET_FREEBSD_ARM_HARD_FLOAT=1"
            fi
	    ;;
	armv7*-*-freebsd*)
	    target_cpu_cname="generic-armv7-a"
	    tm_defines="${tm_defines} TARGET_FREEBSD_ARM_HARD_FLOAT=1"
	    ;;
	*)
	    target_cpu_cname="arm9"
	    ;;
	esac
	with_tls=${with_tls:-gnu}
	;;
arm*-*-netbsdelf*)
	target_cpu_cname="strongarm"
	tmake_file="${tmake_file} arm/t-arm"
	tm_file="dbxelf.h elfos.h ${nbsd_tm_file} arm/elf.h"
	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
	case ${target} in
	arm*eb-*) tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1" ;;
	esac
	case ${target} in
	arm*-*-netbsdelf-*eabi*)
	    tm_file="$tm_file arm/bpabi.h arm/netbsd-elf.h arm/netbsd-eabi.h"
	    tmake_file="$tmake_file arm/t-bpabi arm/t-netbsdeabi"
	    ;;
	*)
	    tm_file="$tm_file arm/netbsd-elf.h"
	    tmake_file="$tmake_file arm/t-netbsd"
	    ;;
	esac
	tm_file="${tm_file} arm/aout.h arm/arm.h"
	case ${target} in
	arm*-*-netbsdelf-*eabihf*)
	    # Hard-float requires at least Arm v5te
	    target_cpu_cname="arm10e"
	    tm_defines="${tm_defines} TARGET_DEFAULT_FLOAT_ABI=ARM_FLOAT_ABI_HARD"
	    ;;
	esac
	case ${target} in
	armv6*) target_cpu_cname="arm1176jzf-s";;
	armv7*) target_cpu_cname="generic-armv7-a";;
	esac
	;;
arm*-*-linux-* | arm*-*-uclinuxfdpiceabi)
	tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
	extra_options="${extra_options} linux-android.opt"
	case $target in
	arm*b-*-linux*)
	    tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
	    ;;
	esac
	tmake_file="${tmake_file} arm/t-arm arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi"
	tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h arm/aout.h arm/arm.h"
	case $target in
	arm*-*-uclinuxfdpiceabi)
	    tm_file="$tm_file arm/uclinuxfdpiceabi.h"
	    ;;
	esac
	# Generation of floating-point instructions requires at least ARMv5te.
	if [ "$with_float" = "hard" -o "$with_float" = "softfp" ] ; then
	    target_cpu_cname="arm10e"
	else
	    target_cpu_cname="arm10tdmi"
	fi
	# Define multilib configuration for arm-linux-androideabi.
	case ${target} in
	*-androideabi)
	    tmake_file="$tmake_file arm/t-linux-androideabi"
	    ;;
	esac
	# The EABI requires the use of __cxa_atexit.
	default_use_cxa_atexit=yes
	with_tls=${with_tls:-gnu}
	;;
arm*-*-uclinux*eabi*)		# ARM ucLinux
	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="${tmake_file} arm/t-arm arm/t-arm-elf arm/t-bpabi"
	tm_file="$tm_file arm/bpabi.h arm/uclinux-eabi.h arm/aout.h arm/arm.h"
	target_cpu_cname="arm7tdmi"
	# The EABI requires the use of __cxa_atexit.
	default_use_cxa_atexit=yes
	;;
arm*-*-phoenix*)
	tm_file="elfos.h arm/unknown-elf.h arm/elf.h arm/bpabi.h"
	tm_file="${tm_file} newlib-stdint.h phoenix.h"
	tm_file="${tm_file} arm/aout.h arm/arm.h"
	tmake_file="${tmake_file} arm/t-arm arm/t-bpabi arm/t-phoenix"
	target_cpu_cname="arm7tdmi"
	;;
arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems* | arm*-*-fuchsia*)
	case ${target} in
	arm*eb-*-eabi*)
	  tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
	esac
	default_use_cxa_atexit=yes
	tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/bpabi.h"
	tmake_file="${tmake_file} arm/t-arm arm/t-arm-elf"
	target_cpu_cname="arm7tdmi"
	case ${target} in
	arm*-*-eabi*)
	  tm_file="$tm_file newlib-stdint.h"
	  tmake_file="${tmake_file} arm/t-bpabi"
	  use_gcc_stdint=wrap
	  ;;
	arm*-*-fuchsia*)
	  tm_file="${tm_file} fuchsia.h arm/fuchsia-elf.h glibc-stdint.h"
	  tmake_file="${tmake_file} arm/t-bpabi arm/t-fuchsia"
	  target_cpu_cname="generic-armv7-a"
	  ;;
	arm*-*-rtems*)
	  tm_file="${tm_file} rtems.h arm/rtems.h newlib-stdint.h"
	  tmake_file="${tmake_file} arm/t-bpabi arm/t-rtems"
	  ;;
	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"
	  target_cpu_cname="arm10tdmi"
	  ;;
	esac
	tm_file="${tm_file} arm/aout.h arm/arm.h"
	;;
avr-*-*)
	tm_file="elfos.h avr/elf.h avr/avr-arch.h avr/avr.h avr/specs.h dbxelf.h avr/avr-stdint.h"
	if test x${with_avrlibc} != xno; then
	    tm_file="${tm_file} ${cpu_type}/avrlibc.h"
	    tm_defines="${tm_defines} WITH_AVRLIBC"
	fi
	case y${with_double} in
	    y | y32)
		avr_double=32
		tm_defines="${tm_defines} HAVE_DOUBLE32"
		;;
	    y64)
		avr_double=64
		tm_defines="${tm_defines} HAVE_DOUBLE64"
		;;
	    y64,32)
		avr_double=64
		avr_double_multilib=1
		tm_defines="${tm_defines} HAVE_DOUBLE32"
		tm_defines="${tm_defines} HAVE_DOUBLE64"
		tm_defines="${tm_defines} HAVE_DOUBLE_MULTILIB"
		;;
	    y32,64)
		avr_double=32
		avr_double_multilib=1
		tm_defines="${tm_defines} HAVE_DOUBLE32"
		tm_defines="${tm_defines} HAVE_DOUBLE64"
		tm_defines="${tm_defines} HAVE_DOUBLE_MULTILIB"
		;;
	    *)
		echo "Error: --with-double= can only be used with: '32', '32,64', '64,32', '64'" 1>&2
		exit 1
		;;
	esac
	case y${with_long_double} in
	    y | y32)
		avr_long_double=32
		tm_defines="${tm_defines} HAVE_LONG_DOUBLE32"
		;;
	    y64)
		avr_long_double=64
		tm_defines="${tm_defines} HAVE_LONG_DOUBLE64"
		;;
	    y64,32)
		avr_long_double=64
		avr_long_double_multilib=1
		tm_defines="${tm_defines} HAVE_LONG_DOUBLE32"
		tm_defines="${tm_defines} HAVE_LONG_DOUBLE64"
		tm_defines="${tm_defines} HAVE_LONG_DOUBLE_MULTILIB"
		;;
	    y32,64)
		avr_long_double=32
		avr_long_double_multilib=1
		tm_defines="${tm_defines} HAVE_LONG_DOUBLE32"
		tm_defines="${tm_defines} HAVE_LONG_DOUBLE64"
		tm_defines="${tm_defines} HAVE_LONG_DOUBLE_MULTILIB"
		;;
	    ydouble)
		avr_long_double=${avr_double}
		tm_defines="${tm_defines} HAVE_LONG_DOUBLE_IS_DOUBLE"
		if test y${avr_double_multilib} = y1; then
		    tm_defines="${tm_defines} HAVE_LONG_DOUBLE32"
		    tm_defines="${tm_defines} HAVE_LONG_DOUBLE64"
		else
		    tm_defines="${tm_defines} HAVE_LONG_DOUBLE${avr_long_double}"
		fi
		;;
	    *)
		echo "Error: --with-long_double= can only be used with: '32', '32,64', '64,32', '64', 'double'" 1>&2
		exit 1
		;;
	esac
	if test ${avr_long_double}x${avr_long_double_multilib}y${avr_double_multilib}z = 32xy1z; then
	    if test y${with_long_double} != ydouble; then
		echo "Error: --with-double=${with_double} requests a multilib for double, but long double is always 32 bits wide due to --with-long-double=${with_long_double}" 1>&2
		exit 1
	    fi
	fi
	if test ${avr_double}x${avr_long_double_multilib}y${avr_double_multilib}z = 64x1yz; then
	    echo "Error: --with-long-double=${with_long_double} requests a multilib for long double, but double is always 64 bits wide due to --with-double=64" 1>&2
	    exit 1
	fi
	if test y${avr_double}${avr_long_double} = y6432; then
	    echo "Error: double default of 64 bits from --with-double=${with_double} conflicts with default of 32 bits for long double from --with-long-double=${with_long_double}" 1>&2
	    exit 1
	fi
	tm_defines="${tm_defines} WITH_DOUBLE${avr_double}"
	tm_defines="${tm_defines} WITH_LONG_DOUBLE${avr_long_double}"
	tmake_file="${tmake_file} avr/t-avr avr/t-multilib"
	use_gcc_stdint=wrap
	extra_gcc_objs="driver-avr.o avr-devices.o"
	extra_objs="avr-devices.o avr-log.o"
	;;
bfin*-elf*)
	tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h bfin/elf.h"
	tmake_file=bfin/t-bfin-elf
	use_collect2=no
	;;
bfin*-uclinux*)
	tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h gnu-user.h linux.h glibc-stdint.h bfin/uclinux.h"
	tmake_file=bfin/t-bfin-uclinux
	use_collect2=no
	;;
bfin*-linux-uclibc*)
	tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h gnu-user.h linux.h glibc-stdint.h bfin/linux.h ./linux-sysroot-suffix.h"
	tmake_file="${tmake_file} bfin/t-bfin-linux"
	use_collect2=no
	;;
bfin*-rtems*)
	tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h bfin/rtems.h rtems.h newlib-stdint.h"
	tmake_file="${tmake_file} bfin/t-rtems"
	;;
bfin*-*)
	tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h bfin/elf.h"
	use_collect2=no
	use_gcc_stdint=wrap
	;;
bpf-*-*)
        tmake_file="${tmake_file} bpf/t-bpf"
        use_collect2=no
        extra_headers="bpf-helpers.h"
        use_gcc_stdint=provide
        ;;
cr16-*-elf)
        tm_file="elfos.h ${tm_file} newlib-stdint.h"
        tmake_file="${tmake_file} cr16/t-cr16 "
        use_collect2=no
        ;;
crisv32-*-elf | crisv32-*-none)
	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
	tmake_file="cris/t-cris"
	target_cpu_default=32
	gas=yes
	extra_options="${extra_options} cris/elf.opt"
	use_gcc_stdint=wrap
	;;
cris-*-elf | cris-*-none)
	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
	tmake_file="cris/t-cris cris/t-elfmulti"
	gas=yes
	extra_options="${extra_options} cris/elf.opt"
	use_gcc_stdint=wrap
	;;
crisv32-*-linux* | cris-*-linux*)
	tm_file="dbxelf.h elfos.h ${tm_file} gnu-user.h linux.h glibc-stdint.h cris/linux.h"
	tmake_file="${tmake_file} cris/t-cris cris/t-linux"
	extra_options="${extra_options} cris/linux.opt"
	case $target in
	  cris-*-*)
		target_cpu_default=10
		;;
	  crisv32-*-*)
		target_cpu_default=32
		;;
	esac
	;;
csky-*-*)
	if test x${with_endian} != x; then
	    case ${with_endian} in
		big|little)		;;
		*)
		    echo "with_endian=${with_endian} not supported."
		    exit 1
		    ;;
	    esac
	fi
	if test x${with_float} != x; then
	    case ${with_float} in
		soft | hard) ;;
		*) echo
		    "Unknown floating point type used in --with-float=$with_float"
		    exit 1
		    ;;
	    esac
	fi
	tm_file="csky/csky.h"
	md_file="csky/csky.md"
	out_file="csky/csky.c"
	tm_p_file="${tm_p_file} csky/csky-protos.h"
	extra_options="${extra_options} csky/csky_tables.opt"

	if test x${enable_tpf_debug} = xyes; then
	    tm_defines="${tm_defines} ENABLE_TPF_DEBUG"
	fi

	case ${target} in
	    csky-*-elf*)
		tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file} csky/csky-elf.h"
		tmake_file="csky/t-csky csky/t-csky-elf"
		default_use_cxa_atexit=no
		;;
	    csky-*-linux*)
		tm_file="dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} csky/csky-linux-elf.h"
		tmake_file="${tmake_file} csky/t-csky csky/t-csky-linux"

		if test "x${enable_multilib}" = xyes ; then
		    tm_file="$tm_file ./sysroot-suffix.h"
		    tmake_file="${tmake_file} csky/t-sysroot-suffix"
		fi

		case ${target} in
		    csky-*-linux-gnu*)
			tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC"
			# Force .init_array support.  The configure script cannot always
			# automatically detect that GAS supports it, yet we require it.
			gcc_cv_initfini_array=yes
			;;
		    csky-*-linux-uclibc*)
			tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC"
			default_use_cxa_atexit=no
			;;
		    *)
			echo "Unknown target $target"
			exit 1
			;;
		esac
		;;
	    *)
		echo "Unknown target $target"
		exit 1
		;;
	esac
	;;
epiphany-*-elf | epiphany-*-rtems*)
	tm_file="${tm_file} dbxelf.h elfos.h"
	tmake_file="${tmake_file} epiphany/t-epiphany"
	case ${target} in
	epiphany-*-rtems*)
	  tm_file="${tm_file} rtems.h epiphany/rtems.h newlib-stdint.h"
	  ;;
	*)
	  tm_file="${tm_file} newlib-stdint.h"
	  ;;
	esac
	extra_options="${extra_options} fused-madd.opt"
	extra_objs="${extra_objs} mode-switch-use.o resolve-sw-modes.o"
	tm_defines="${tm_defines} EPIPHANY_STACK_OFFSET=${with_stack_offset:-8}"
	extra_headers="epiphany_intrinsics.h"
	;;
fr30-*-elf)
	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
	;;
frv-*-elf)
	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
	tmake_file=frv/t-frv
	;;
frv-*-*linux*)
	tm_file="dbxelf.h elfos.h ${tm_file} \
	         gnu-user.h linux.h glibc-stdint.h frv/linux.h"
	tmake_file="${tmake_file} frv/t-frv frv/t-linux"
	;;
ft32-*-elf)
	gas=yes
	gnu_ld=yes
	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
	tmake_file="${tmake_file} ft32/t-ft32"
	;;
amdgcn-*-amdhsa)
	tm_file="elfos.h gcn/gcn-hsa.h gcn/gcn.h newlib-stdint.h"
	tmake_file="gcn/t-gcn-hsa"
	native_system_header_dir=/include
	extra_modes=gcn/gcn-modes.def
	extra_objs="${extra_objs} gcn-tree.o"
	extra_gcc_objs="driver-gcn.o"
	case "$host" in
	x86_64*-*-linux-gnu )
		if test "$ac_cv_search_dlopen" != no; then
			extra_programs="${extra_programs} gcn-run\$(exeext)"
		fi
		;;
	esac
	if test x$enable_as_accelerator = xyes; then
		extra_programs="${extra_programs} mkoffload\$(exeext)"
		tm_file="${tm_file} gcn/offload.h"
	fi
	# Force .init_array support.
	gcc_cv_initfini_array=yes
	thread_file=gcn
	;;
moxie-*-elf)
	gas=yes
	gnu_ld=yes
	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
	tmake_file="${tmake_file} moxie/t-moxie"
	;;
moxie-*-uclinux*)
	gas=yes
	gnu_ld=yes
	tm_file="dbxelf.h elfos.h ${tm_file} gnu-user.h linux.h glibc-stdint.h moxie/uclinux.h"
	tmake_file="${tmake_file} moxie/t-moxie"
	;;
moxie-*-rtems*)
	tmake_file="${tmake_file} moxie/t-moxie"
	tm_file="moxie/moxie.h dbxelf.h elfos.h moxie/rtems.h rtems.h newlib-stdint.h"
	;;
moxie-*-moxiebox*)
	gas=yes
	gnu_ld=yes
	tm_file="${tm_file} dbxelf.h elfos.h moxie/moxiebox.h newlib-stdint.h"
	tmake_file="${tmake_file} moxie/t-moxiebox"
	;;
h8300-*-elf*)
	tmake_file="h8300/t-h8300"
	tm_file="h8300/h8300.h dbxelf.h elfos.h newlib-stdint.h h8300/elf.h"
	;;
h8300-*-linux*)
	tmake_file="${tmake_file} h8300/t-h8300 h8300/t-linux"
	tm_file="h8300/h8300.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h h8300/linux.h"
	;;
hppa*64*-*-linux*)
	target_cpu_default="MASK_PA_11|MASK_PA_20"
	tm_file="pa/pa64-start.h ${tm_file} dbxelf.h elfos.h gnu-user.h linux.h \
		 glibc-stdint.h pa/pa-linux.h pa/pa64-regs.h pa/pa-64.h \
		 pa/pa64-linux.h"
	tmake_file="${tmake_file} pa/t-pa pa/t-linux"
	d_target_objs="${d_target_objs} pa-d.o"
	gas=yes gnu_ld=yes
	;;
hppa*-*-linux*)
	target_cpu_default="MASK_PA_11|MASK_NO_SPACE_REGS|MASK_CALLER_COPIES"
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h pa/pa-linux.h \
		 pa/pa32-regs.h pa/pa32-linux.h"
	tmake_file="${tmake_file} pa/t-pa pa/t-linux"
	d_target_objs="${d_target_objs} pa-d.o"
	;;
hppa*-*-openbsd*)
	target_cpu_default="MASK_PA_11"
	tm_file="${tm_file} dbxelf.h elfos.h openbsd.h openbsd-stdint.h openbsd-libpthread.h \
		 pa/pa-openbsd.h pa/pa32-regs.h pa/pa32-openbsd.h"
	extra_options="${extra_options} openbsd.opt"
	tmake_file="pa/t-pa"
	d_target_objs="${d_target_objs} pa-d.o"
	gas=yes
	gnu_ld=yes
	;;
hppa*-*-netbsd*)
	target_cpu_default="MASK_PA_11|MASK_NO_SPACE_REGS"
	tm_file="${tm_file} dbxelf.h elfos.h ${nbsd_tm_file} \
		 pa/pa-netbsd.h pa/pa32-regs.h pa/pa32-netbsd.h"
	tmake_file="${tmake_file}"
	tm_defines="${tm_defines} CHAR_FAST8=1 SHORT_FAST16=1"
	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
	;;
hppa[12]*-*-hpux10*)
	case ${target} in
	hppa1.1-*-* | hppa2*-*-*)
		target_cpu_default="MASK_PA_11"
		;;
	esac
	tm_file="${tm_file} pa/pa32-regs.h dbxelf.h pa/som.h \
		 pa/pa-hpux.h pa/pa-hpux10.h"
	extra_options="${extra_options} pa/pa-hpux.opt pa/pa-hpux10.opt"
	case ${target} in
	*-*-hpux10.[1-9]*)
		tm_file="${tm_file} pa/pa-hpux1010.h"
		extra_options="${extra_options} pa/pa-hpux1010.opt"
		;;
	esac
	use_gcc_stdint=provide
	tm_file="${tm_file} hpux-stdint.h"
	tmake_file="pa/t-pa t-slibgcc"
	d_target_objs="${d_target_objs} pa-d.o"
	case ${enable_threads} in
	  "")
	    if test x$have_pthread_h = xyes ; then
	      tmake_file="${tmake_file} pa/t-dce-thr"
	    fi
	    ;;
	  yes | dce)
	    tmake_file="${tmake_file} pa/t-dce-thr"
	    ;;
	esac
	use_collect2=yes
	gas=yes
	if test "x$with_dwarf2" != x; then
		echo "Warning: dwarf2 debug format is not supported for this target, --with-dwarf2 ignored" 1>&2
		dwarf2=no
	fi
	;;
hppa*64*-*-hpux11*)
	target_cpu_default="MASK_PA_11|MASK_PA_20"
	if test x$gnu_ld = xyes
	then
		target_cpu_default="${target_cpu_default}|MASK_GNU_LD"
	fi
	tm_file="pa/pa64-start.h ${tm_file} dbxelf.h elfos.h \
		 pa/pa64-regs.h pa/pa-hpux.h pa/pa-hpux1010.h \
		 pa/pa-hpux11.h"
	case ${target} in
	*-*-hpux11.[12]*)
		tm_file="${tm_file} pa/pa-hpux1111.h pa/pa-64.h pa/pa64-hpux.h"
		extra_options="${extra_options} pa/pa-hpux1111.opt"
		;;
	*-*-hpux11.[3-9]*)
		tm_file="${tm_file} pa/pa-hpux1131.h pa/pa-64.h pa/pa64-hpux.h"
		extra_options="${extra_options} pa/pa-hpux1131.opt"
		;;
	*)
		tm_file="${tm_file} pa/pa-64.h pa/pa64-hpux.h"
		;;
	esac
	extra_options="${extra_options} pa/pa-hpux.opt \
		       pa/pa-hpux1010.opt pa/pa64-hpux.opt hpux11.opt"
	tmake_file="pa/t-pa t-slibgcc"
	d_target_objs="${d_target_objs} pa-d.o"
	case x${enable_threads} in
	x | xyes | xposix )
		thread_file=posix
		;;
	esac
	gas=yes
	case ${target} in
	  *-*-hpux11.[01]*)
		use_gcc_stdint=provide
		tm_file="${tm_file} hpux-stdint.h"
		;;
	  *-*-hpux11.[23]*)
		use_gcc_stdint=wrap
		tm_file="${tm_file} hpux-stdint.h"
		;;
	esac
	;;
hppa[12]*-*-hpux11*)
	case ${target} in
	hppa1.1-*-* | hppa2*-*-*)
		target_cpu_default="MASK_PA_11"
		;;
	esac
	tm_file="${tm_file} pa/pa32-regs.h dbxelf.h pa/som.h \
		 pa/pa-hpux.h pa/pa-hpux1010.h pa/pa-hpux11.h"
	extra_options="${extra_options} pa/pa-hpux.opt pa/pa-hpux1010.opt \
		       hpux11.opt"
	case ${target} in
	*-*-hpux11.[12]*)
		tm_file="${tm_file} pa/pa-hpux1111.h"
		extra_options="${extra_options} pa/pa-hpux1111.opt"
		;;
	*-*-hpux11.[3-9]*)
		tm_file="${tm_file} pa/pa-hpux1131.h"
		extra_options="${extra_options} pa/pa-hpux1131.opt"
		;;
	esac
	tmake_file="pa/t-pa t-slibgcc"
	d_target_objs="${d_target_objs} pa-d.o"
	case x${enable_threads} in
	x | xyes | xposix )
		thread_file=posix
		;;
	esac
	use_collect2=yes
	gas=yes
	case ${target} in
	  *-*-hpux11.[01]*)
		use_gcc_stdint=provide
		tm_file="${tm_file} hpux-stdint.h"
		;;
	  *-*-hpux11.[23]*)
		use_gcc_stdint=wrap
		tm_file="${tm_file} hpux-stdint.h"
		;;
	esac
	if test "x$with_dwarf2" != x; then
		echo "Warning: dwarf2 debug format is not supported for this target, --with-dwarf2 ignored" 1>&2
		dwarf2=no
	fi
	;;
i[34567]86-*-darwin1[89]*)
	echo "Error: 32bit target is not supported after Darwin17" 1>&2
	;;
i[34567]86-*-darwin*)
	need_64bit_isa=yes
	# Baseline choice for a machine that allows m64 support.
	with_cpu=${with_cpu:-core2}
	tmake_file="${tmake_file} ${cpu_type}/t-darwin32-biarch t-slibgcc"
	tm_file="${tm_file} ${cpu_type}/darwin32-biarch.h"
	;;
x86_64-*-darwin1[89]* | x86_64-*-darwin2[01]*)
	# Only 64b from now
	with_cpu=${with_cpu:-core2}
	tmake_file="${tmake_file} t-slibgcc"
	;;
x86_64-*-darwin*)
	with_cpu=${with_cpu:-core2}
	tmake_file="${tmake_file} ${cpu_type}/t-darwin64-biarch t-slibgcc"
	tm_file="${tm_file} ${cpu_type}/darwin64-biarch.h"
	;;
i[34567]86-*-elfiamcu)
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/iamcu.h"
	;;
i[34567]86-*-elf*)
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h"
	;;
x86_64-*-elf*)
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h"
	;;
x86_64-*-rtems*)
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h i386/rtemself.h rtems.h"
	;;
i[34567]86-*-rdos*)
    tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/rdos.h"
    ;;
x86_64-*-rdos*)
    tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h i386/rdos.h i386/rdos64.h"
    tmake_file="i386/t-i386elf t-svr4"
    ;;
i[34567]86-*-dragonfly*)
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h dragonfly.h dragonfly-stdint.h i386/dragonfly.h"
	tmake_file="${tmake_file} i386/t-crtstuff"
	;;
x86_64-*-dragonfly*)
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h dragonfly.h dragonfly-stdint.h i386/x86-64.h i386/dragonfly.h"
	tmake_file="${tmake_file} i386/t-crtstuff"
	;;
i[34567]86-*-freebsd*)
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/freebsd.h"
	;;
x86_64-*-freebsd*)
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/x86-64.h i386/freebsd.h i386/freebsd64.h"
	;;
i[34567]86-*-netbsdelf*)
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${nbsd_tm_file} i386/netbsd-elf.h"
	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
	;;
x86_64-*-netbsd*)
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${nbsd_tm_file} i386/x86-64.h i386/netbsd64.h"
	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
	;;
i[34567]86-*-openbsd*)
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h"
	tm_file="${tm_file} openbsd.h openbsd-stdint.h openbsd-libpthread.h i386/openbsdelf.h"
	extra_options="${extra_options} openbsd.opt"
	gas=yes
	gnu_ld=yes
	;;
x86_64-*-openbsd*)
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h"
	tm_file="${tm_file} openbsd.h openbsd-stdint.h openbsd-libpthread.h i386/x86-64.h i386/openbsdelf.h"
	extra_options="${extra_options} openbsd.opt"
	gas=yes
	gnu_ld=yes
	;;
i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-gnu* | i[34567]86-*-kopensolaris*-gnu)
			# Intel 80386's running GNU/*
			# with ELF format using glibc 2
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h gnu-user.h glibc-stdint.h"
	case ${target} in
	i[34567]86-*-linux*)
		tm_file="${tm_file} linux.h linux-android.h"
		extra_options="${extra_options} linux-android.opt"
		if test x$enable_targets = xall; then
			tm_file="${tm_file} i386/x86-64.h i386/gnu-user-common.h i386/gnu-user64.h i386/linux-common.h i386/linux64.h"
			tm_defines="${tm_defines} TARGET_BI_ARCH=1"
			tmake_file="${tmake_file} i386/t-linux64"
			x86_multilibs="${with_multilib_list}"
			if test "$x86_multilibs" = "default"; then
				x86_multilibs="m64,m32"
			fi
			x86_multilibs=`echo $x86_multilibs | sed -e 's/,/ /g'`
			for x86_multilib in ${x86_multilibs}; do
				case ${x86_multilib} in
				m32 | m64 | mx32)
					TM_MULTILIB_CONFIG="${TM_MULTILIB_CONFIG},${x86_multilib}"
					;;
				*)
					echo "--with-multilib-list=${x86_with_multilib} not supported."
					exit 1
				esac
			done
			TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^,//'`
			need_64bit_isa=yes
			if test x$with_cpu = x; then
				if test x$with_cpu_64 = x; then
					with_cpu_64=generic
				fi
			else
				case " $x86_cpus $x86_archs $x86_64_archs " in
				*" $with_cpu "*)
					;;
				*)
					echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2
					echo "$x86_cpus $x86_archs $x86_64_archs " 1>&2
					exit 1
					;;
				esac
			fi
		else
			tm_file="${tm_file} i386/gnu-user-common.h i386/gnu-user.h i386/linux-common.h i386/linux.h"
		fi
		;;
	i[34567]86-*-kfreebsd*-gnu)
		tm_file="${tm_file} i386/gnu-user-common.h i386/gnu-user.h kfreebsd-gnu.h i386/kfreebsd-gnu.h"
		;;
	i[34567]86-*-kopensolaris*-gnu)
		tm_file="${tm_file} i386/gnu-user-common.h i386/gnu-user.h kopensolaris-gnu.h i386/kopensolaris-gnu.h"
		;;
	i[34567]86-*-gnu*)
		tm_file="$tm_file i386/gnu-user-common.h i386/gnu-user.h gnu.h i386/gnu.h"
		;;
	esac
	;;
x86_64-*-linux* | x86_64-*-kfreebsd*-gnu)
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h gnu-user.h glibc-stdint.h \
		 i386/x86-64.h i386/gnu-user-common.h i386/gnu-user64.h"
	case ${target} in
	x86_64-*-linux*)
		tm_file="${tm_file} linux.h linux-android.h i386/linux-common.h i386/linux64.h"
		extra_options="${extra_options} linux-android.opt"
	  	;;
	x86_64-*-kfreebsd*-gnu)
		tm_file="${tm_file} kfreebsd-gnu.h i386/kfreebsd-gnu64.h"
		;;
	esac
	tmake_file="${tmake_file} i386/t-linux64"
	x86_multilibs="${with_multilib_list}"
	if test "$x86_multilibs" = "default"; then
		case ${with_abi} in
		x32 | mx32)
			x86_multilibs="mx32"
			;;
		*)
			x86_multilibs="m64,m32"
			;;
		esac
	fi
	x86_multilibs=`echo $x86_multilibs | sed -e 's/,/ /g'`
	for x86_multilib in ${x86_multilibs}; do
		case ${x86_multilib} in
		m32 | m64 | mx32)
			TM_MULTILIB_CONFIG="${TM_MULTILIB_CONFIG},${x86_multilib}"
			;;
		*)
			echo "--with-multilib-list=${x86_with_multilib} not supported."
			exit 1
		esac
	done
	TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^,//'`
	;;
i[34567]86-pc-msdosdjgpp*)
	xm_file=i386/xm-djgpp.h
	tm_file="dbxcoff.h ${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/djgpp.h i386/djgpp-stdint.h"
	native_system_header_dir=/dev/env/DJDIR/include
	extra_options="${extra_options} i386/djgpp.opt"
	gnu_ld=yes
	gas=yes
	use_gcc_stdint=wrap
	;;
i[34567]86-*-lynxos*)
	xm_defines=POSIX
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/lynx.h lynx.h"
	tmake_file="${tmake_file} t-lynx"
	extra_options="${extra_options} lynx.opt"
	thread_file=lynx
	gnu_ld=yes
	gas=yes
	;;
i[34567]86-*-nto-qnx*)
	tm_file="${tm_file} i386/att.h dbxelf.h tm-dwarf2.h elfos.h i386/unix.h i386/nto.h"
	extra_options="${extra_options} i386/nto.opt"
	gnu_ld=yes
	gas=yes
	;;
i[34567]86-*-rtems*)
	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h i386/rtemself.h rtems.h newlib-stdint.h"
	tmake_file="${tmake_file} i386/t-rtems"
	;;
i[34567]86-*-solaris2* | x86_64-*-solaris2*)
	# Set default arch_32 to pentium4, tune_32 to generic like the other
	# i386 targets, although config.guess defaults to i386-pc-solaris2*.
	with_arch_32=${with_arch_32:-pentium4}
	with_tune_32=${with_tune_32:-generic}
	tm_file="${tm_file} i386/unix.h i386/att.h ${sol2_tm_file_head} i386/x86-64.h ${sol2_tm_file_tail}"
	tm_defines="${tm_defines} TARGET_BI_ARCH=1"
	tmake_file="$tmake_file i386/t-sol2"
	need_64bit_isa=yes
	if test x$with_cpu = x; then
		if test x$with_cpu_64 = x; then
			with_cpu_64=generic
		fi
	else
		case " $x86_cpus $x86_archs $x86_64_archs " in
		*" $with_cpu "*)
			;;
		*)
			echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2
			echo "$x86_cpus $x86_archs $x86_64_archs" 1>&2
			exit 1
			;;
		esac
	fi
	;;
i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae|i[4567]86-wrs-vxworks7|x86_64-wrs-vxworks7)
	tm_file="${tm_file} i386/unix.h i386/att.h elfos.h"
	case ${target} in
	  x86_64-*)
	    need_64bit_isa=yes
	    tm_file="${tm_file} i386/x86-64.h"
	    ;;
	esac
	tm_file="${tm_file} vx-common.h"
	case ${target} in
	  *-vxworksae*)
	    tm_file="${tm_file} vxworksae.h i386/vxworks.h i386/vxworksae.h"
	    tmake_file="${tmake_file} i386/t-vxworks i386/t-vxworksae"
	    ;;
	  *)
	    tm_file="${tm_file} vxworks.h i386/vxworks.h"
	    tmake_file="${tmake_file} i386/t-vxworks"
	    ;;
	esac
	;;
i[34567]86-*-cygwin*)
	tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h dbxcoff.h i386/cygming.h i386/cygwin.h i386/cygwin-stdint.h"
	xm_file=i386/xm-cygwin.h
	tmake_file="${tmake_file} i386/t-cygming t-slibgcc"
	target_gtfiles="$target_gtfiles \$(srcdir)/config/i386/winnt.c"
	extra_options="${extra_options} i386/cygming.opt i386/cygwin.opt"
	extra_objs="${extra_objs} winnt.o winnt-stubs.o"
	c_target_objs="${c_target_objs} msformat-c.o"
	cxx_target_objs="${cxx_target_objs} winnt-cxx.o msformat-c.o"
	if test x$enable_threads = xyes; then
		thread_file='posix'
	fi
	default_use_cxa_atexit=yes
	use_gcc_stdint=wrap
	;;
x86_64-*-cygwin*)
	need_64bit_isa=yes
	tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h dbxcoff.h i386/cygming.h i386/cygwin.h i386/cygwin-w64.h i386/cygwin-stdint.h"
	xm_file=i386/xm-cygwin.h
	tmake_file="${tmake_file} i386/t-cygming t-slibgcc i386/t-cygwin-w64"
	target_gtfiles="$target_gtfiles \$(srcdir)/config/i386/winnt.c"
	extra_options="${extra_options} i386/cygming.opt i386/cygwin.opt"
	extra_objs="${extra_objs} winnt.o winnt-stubs.o"
	c_target_objs="${c_target_objs} msformat-c.o"
	cxx_target_objs="${cxx_target_objs} winnt-cxx.o msformat-c.o"
	if test x$enable_threads = xyes; then
		thread_file='posix'
	fi
	default_use_cxa_atexit=yes
	use_gcc_stdint=wrap
	tm_defines="${tm_defines} TARGET_CYGWIN64=1"
	;;
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"
	xm_file=i386/xm-mingw32.h
	c_target_objs="${c_target_objs} winnt-c.o"
	cxx_target_objs="${cxx_target_objs} winnt-c.o"
	target_has_targetcm="yes"
	case ${target} in
		x86_64-*-* | *-w64-*)
			need_64bit_isa=yes
			;;
		*)
			;;
	esac
	if test x$enable_threads = xposix ; then
		tm_file="${tm_file} i386/mingw-pthread.h"
	fi
	tm_file="${tm_file} i386/mingw32.h"
	# This makes the logic if mingw's or the w64 feature set has to be used
	case ${target} in
		*-w64-*)
			user_headers_inc_next_post="${user_headers_inc_next_post} float.h"
			user_headers_inc_next_pre="${user_headers_inc_next_pre} stddef.h stdarg.h"
			tm_file="${tm_file} i386/mingw-w64.h"
			if test x$enable_targets = xall; then
				tm_defines="${tm_defines} TARGET_BI_ARCH=1"
				if test x$with_cpu = x; then
					if test x$with_cpu_64 = x; then
						with_cpu_64=generic
					fi
				else
					case " $x86_cpus $x86_archs $x86_64_archs " in
					*" $with_cpu "*)
						;;
					*)
						echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2
						echo "$x86_cpus $x86_archs $x86_64_archs" 1>&2
						exit 1
						;;
					esac
				fi
			fi
			;;
		*)
			;;
	esac
	tm_file="${tm_file} i386/mingw-stdint.h"
	tmake_file="${tmake_file} t-winnt i386/t-cygming t-slibgcc"
        case ${target} in
               x86_64-w64-*)
               		tmake_file="${tmake_file} i386/t-mingw-w64"
			;;
	       i[34567]86-w64-*)
			tmake_file="${tmake_file} i386/t-mingw-w32"
			;;
	esac
        native_system_header_dir=/mingw/include
	target_gtfiles="$target_gtfiles \$(srcdir)/config/i386/winnt.c"
	extra_options="${extra_options} i386/cygming.opt i386/mingw.opt"
	case ${target} in
		*-w64-*)
			extra_options="${extra_options} i386/mingw-w64.opt"
			;;
		*)
			;;
	esac
	extra_objs="${extra_objs} winnt.o winnt-stubs.o"
	c_target_objs="${c_target_objs} msformat-c.o"
	cxx_target_objs="${cxx_target_objs} winnt-cxx.o msformat-c.o"
	gas=yes
	gnu_ld=yes
	default_use_cxa_atexit=yes
	use_gcc_stdint=wrap
	case ${enable_threads} in
	  "" | yes | win32)
	    thread_file='win32'
	    ;;
	  posix)
	    thread_file='posix'
	    ;;
	esac
	case ${target} in
 		*mingw32crt*)
 			tm_file="${tm_file} i386/crtdll.h"
 			;;
		*mingw32msv* | *mingw*)
			;;
	esac
	;;
x86_64-*-fuchsia*)
	tmake_file="${tmake_file} i386/t-x86_64-elf"
	tm_file="${tm_file} i386/unix.h i386/att.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h fuchsia.h"
	;;
ia64*-*-elf*)
	tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h ia64/sysv4.h ia64/elf.h"
	tmake_file="ia64/t-ia64"
	target_cpu_default="0"
	if test x$gas = xyes
	then
		target_cpu_default="${target_cpu_default}|MASK_GNU_AS"
	fi
	if test x$gnu_ld = xyes
	then
		target_cpu_default="${target_cpu_default}|MASK_GNU_LD"
	fi
	;;
ia64*-*-freebsd*)
	tm_file="${tm_file} dbxelf.h elfos.h ${fbsd_tm_file} ia64/sysv4.h ia64/freebsd.h"
	target_cpu_default="MASK_GNU_AS|MASK_GNU_LD"
	tmake_file="${tmake_file} ia64/t-ia64"
	;;
ia64*-*-linux*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ia64/sysv4.h ia64/linux.h"
	tmake_file="${tmake_file} ia64/t-ia64 ia64/t-linux t-libunwind"
	target_cpu_default="MASK_GNU_AS|MASK_GNU_LD"
	;;
ia64*-*-hpux*)
	tm_file="${tm_file} dbxelf.h elfos.h ia64/sysv4.h ia64/hpux.h"
	tmake_file="ia64/t-ia64 ia64/t-hpux t-slibgcc"
	target_cpu_default="MASK_GNU_AS"
	case x$enable_threads in
	x | xyes | xposix )
		thread_file=posix
		;;
	esac
	use_collect2=no
	c_target_objs="ia64-c.o"
	cxx_target_objs="ia64-c.o"
	extra_options="${extra_options} ia64/ilp32.opt hpux11.opt"
	use_gcc_stdint=wrap
	tm_file="${tm_file} hpux-stdint.h"
	case ${target} in
	*-*-hpux11.3*)
		tm_file="${tm_file} ia64/hpux-unix2003.h"
		;;
	esac
	;;
ia64-hp-*vms*)
	tm_file="${tm_file} elfos.h ia64/sysv4.h vms/vms.h ia64/vms.h"
	tmake_file="${tmake_file} ia64/t-ia64"
	target_cpu_default="0"
	if test x$gas = xyes
	then
		target_cpu_default="${target_cpu_default}|MASK_GNU_AS"
	fi
	extra_options="${extra_options} ia64/vms.opt"
	;;
iq2000*-*-elf*)
        tm_file="elfos.h newlib-stdint.h iq2000/iq2000.h"
        out_file=iq2000/iq2000.c
        md_file=iq2000/iq2000.md
        ;;
lm32-*-elf*)
        tm_file="dbxelf.h elfos.h ${tm_file} newlib-stdint.h"
	tmake_file="${tmake_file} lm32/t-lm32"
        ;;
lm32-*-rtems*)
	tm_file="dbxelf.h elfos.h ${tm_file} lm32/rtems.h rtems.h newlib-stdint.h"
	tmake_file="${tmake_file} lm32/t-lm32"
	tmake_file="${tmake_file} lm32/t-rtems"
         ;;
lm32-*-uclinux*)
        tm_file="dbxelf.h elfos.h ${tm_file} gnu-user.h linux.h lm32/uclinux-elf.h"
	tmake_file="${tmake_file} lm32/t-lm32"
        ;;
m32r-*-elf*)
	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
 	;;
m32rle-*-elf*)
	tm_file="dbxelf.h elfos.h newlib-stdint.h m32r/little.h ${tm_file}"
	;;
m32r-*-linux*)
	tm_file="dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} m32r/linux.h"
	tmake_file="${tmake_file} m32r/t-linux t-slibgcc"
	gnu_ld=yes
	if test x$enable_threads = xyes; then
		thread_file='posix'
	fi
 	;;
m32rle-*-linux*)
	tm_file="dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h m32r/little.h ${tm_file} m32r/linux.h"
	tmake_file="${tmake_file} m32r/t-linux t-slibgcc"
	gnu_ld=yes
	if test x$enable_threads = xyes; then
		thread_file='posix'
	fi
	;;
m68k-*-elf* | fido-*-elf*)
	case ${target} in
	fido-*-elf*)
		# Check that $with_cpu makes sense.
		case $with_cpu in
		"" | "fidoa")
			;;
		*)
			echo "Cannot accept --with-cpu=$with_cpu"
			exit 1
			;;
		esac
		with_cpu=fidoa
		;;
	*)
		default_m68k_cpu=68020
		default_cf_cpu=5206
		;;
	esac
	tm_file="${tm_file} m68k/m68k-none.h m68k/m68kelf.h dbxelf.h elfos.h newlib-stdint.h m68k/m68kemb.h m68k/m68020-elf.h"
	tm_defines="${tm_defines} MOTOROLA=1"
	tmake_file="m68k/t-floatlib m68k/t-m68kbare m68k/t-m68kelf"
	# Add multilibs for targets other than fido.
	case ${target} in
	fido-*-elf*)
		;;
	*)
		tmake_file="$tmake_file m68k/t-mlibs"
		;;
	esac
	;;
m68k*-*-netbsdelf*)
	default_m68k_cpu=68020
	default_cf_cpu=5475
	tm_file="${tm_file} dbxelf.h elfos.h ${nbsd_tm_file} m68k/netbsd-elf.h"
	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
	tm_defines="${tm_defines} MOTOROLA=1 CHAR_FAST8=1 SHORT_FAST16=1"
	;;
m68k*-*-openbsd*)
	default_m68k_cpu=68020
	default_cf_cpu=5475
	# needed to unconfuse gdb
	tm_defines="${tm_defines} OBSD_OLD_GAS"
	tm_file="${tm_file} openbsd.h openbsd-stdint.h openbsd-libpthread.h m68k/openbsd.h"
	extra_options="${extra_options} openbsd.opt"
	tmake_file="t-openbsd m68k/t-openbsd"
	# we need collect2 until our bug is fixed...
	use_collect2=yes
	;;
m68k-*-uclinux*)		# Motorola m68k/ColdFire running uClinux
				# with uClibc, using the new GNU/Linux-style
				# ABI.
	default_m68k_cpu=68020
	default_cf_cpu=5206
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h flat.h m68k/linux.h m68k/uclinux.h ./sysroot-suffix.h"
	extra_options="${extra_options} m68k/uclinux.opt"
 	tm_defines="${tm_defines} MOTOROLA=1"
	tmake_file="m68k/t-floatlib m68k/t-uclinux m68k/t-mlibs"
	;;
m68k-*-linux*)			# Motorola m68k's running GNU/Linux
				# with ELF format using glibc 2
				# aka the GNU/Linux C library 6.
	default_m68k_cpu=68020
	default_cf_cpu=5475
	with_arch=${with_arch:-m68k}
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h m68k/linux.h ./sysroot-suffix.h"
	extra_options="${extra_options} m68k/ieee.opt"
	tm_defines="${tm_defines} MOTOROLA=1"
	tmake_file="${tmake_file} m68k/t-floatlib m68k/t-linux m68k/t-mlibs"
	;;
m68k-*-rtems*)
	default_m68k_cpu=68020
	default_cf_cpu=5206
	tmake_file="${tmake_file} m68k/t-floatlib m68k/t-m68kbare m68k/t-crtstuff m68k/t-rtems m68k/t-mlibs"
	tm_file="${tm_file} m68k/m68k-none.h m68k/m68kelf.h dbxelf.h elfos.h m68k/m68kemb.h m68k/m68020-elf.h m68k/rtemself.h rtems.h newlib-stdint.h"
	tm_defines="${tm_defines} MOTOROLA=1"
	;;
mcore-*-elf)
	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file} mcore/mcore-elf.h"
	tmake_file=mcore/t-mcore
	inhibit_libc=true
	;;
microblaze*-linux*)
	case $target in
		microblazeel-*)
			tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=0"
			;;
		microblaze-*)
			tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=4321"
			;;
	esac
	tm_file="${tm_file} dbxelf.h gnu-user.h linux.h microblaze/linux.h"
	tm_file="${tm_file} glibc-stdint.h"
	c_target_objs="${c_target_objs} microblaze-c.o"
	cxx_target_objs="${cxx_target_objs} microblaze-c.o"
	tmake_file="${tmake_file} microblaze/t-microblaze"
	tmake_file="${tmake_file} microblaze/t-microblaze-linux"
	;;
microblaze*-*-rtems*)
	case $target in
		microblazeel-*)
			tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=0"
			;;
		microblaze-*)
			tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=4321"
			;;
	esac
	tm_file="${tm_file} dbxelf.h"
	tm_file="${tm_file} microblaze/rtems.h rtems.h newlib-stdint.h"
	c_target_objs="${c_target_objs} microblaze-c.o"
	cxx_target_objs="${cxx_target_objs} microblaze-c.o"
	tmake_file="${tmake_file} microblaze/t-microblaze"
	tmake_file="${tmake_file} microblaze/t-rtems"
        ;;
microblaze*-*-elf)
	case $target in
		microblazeel-*)
			tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=0"
			;;
		microblaze-*)
			tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=4321"
			;;
	esac
	tm_file="${tm_file} dbxelf.h newlib-stdint.h"
	c_target_objs="${c_target_objs} microblaze-c.o"
	cxx_target_objs="${cxx_target_objs} microblaze-c.o"
	tmake_file="${tmake_file} microblaze/t-microblaze"
        ;;
riscv*-*-linux*)
	tm_file="elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} riscv/linux.h"
	case "x${enable_multilib}" in
	xno) ;;
	xyes) tmake_file="${tmake_file} riscv/t-linux-multilib" ;;
	*) echo "Unknown value for enable_multilib"; exit 1
	esac
	tmake_file="${tmake_file} riscv/t-riscv riscv/t-linux"
	gnu_ld=yes
	gas=yes
	# Force .init_array support.  The configure script cannot always
	# automatically detect that GAS supports it, yet we require it.
	gcc_cv_initfini_array=yes
	;;
riscv*-*-elf* | riscv*-*-rtems*)
	tm_file="elfos.h newlib-stdint.h ${tm_file} riscv/elf.h"
	case ${target} in
	*-*-rtems*)
	  tm_file="${tm_file} rtems.h riscv/rtems.h"
	  tmake_file="${tmake_file} riscv/t-rtems"
	  ;;
	*)
	  case "x${enable_multilib}" in
	  xno) ;;
	  xyes) tmake_file="${tmake_file} riscv/t-elf-multilib" ;;
	  *) echo "Unknown value for enable_multilib"; exit 1
	  esac
	esac
	tmake_file="${tmake_file} riscv/t-riscv"
	gnu_ld=yes
	gas=yes
	# Force .init_array support.  The configure script cannot always
	# automatically detect that GAS supports it, yet we require it.
	gcc_cv_initfini_array=yes
	;;
riscv*-*-freebsd*)
	tm_file="${tm_file} elfos.h ${fbsd_tm_file} riscv/freebsd.h"
	tmake_file="${tmake_file} riscv/t-riscv"
	gnu_ld=yes
	gas=yes
	# Force .init_array support.  The configure script cannot always
	# automatically detect that GAS supports it, yet we require it.
	gcc_cv_initfini_array=yes
	;;
mips*-*-netbsd*)			# NetBSD/mips, either endian.
	target_cpu_default="MASK_ABICALLS"
	tm_file="elfos.h ${tm_file} mips/elf.h ${nbsd_tm_file} mips/netbsd.h"
	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
	;;
mips*-img-linux*)
	tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/linux.h mips/linux-common.h mips/mti-linux.h"
	extra_options="${extra_options} linux-android.opt"
	tmake_file="${tmake_file} mips/t-img-linux"
	tm_defines="${tm_defines} MIPS_ISA_DEFAULT=37 MIPS_ABI_DEFAULT=ABI_32"
	with_arch_32="mips32r6"
	with_arch_64="mips64r6"
	gnu_ld=yes
	gas=yes
	;;
mips*-mti-linux*)
	tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/linux.h mips/linux-common.h mips/mti-linux.h"
	extra_options="${extra_options} linux-android.opt"
	tmake_file="${tmake_file} mips/t-mti-linux"
	tm_defines="${tm_defines} MIPS_ISA_DEFAULT=33 MIPS_ABI_DEFAULT=ABI_32"
	with_arch_32="mips32r2"
	with_arch_64="mips64r2"
	gnu_ld=yes
	gas=yes
	;;
mips*-*-linux*)				# Linux MIPS, either endian.
	tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/linux.h mips/linux-common.h"
	extra_options="${extra_options} linux-android.opt"
	case ${target} in
		mipsisa32r6*)
			default_mips_arch=mips32r6
			;;
		mipsisa32r2*)
			default_mips_arch=mips32r2
			;;
		mipsisa32*)
			default_mips_arch=mips32
			;;
		mips64el-st-linux-gnu)
			default_mips_abi=n32
			tm_file="${tm_file} mips/st.h"
			tmake_file="${tmake_file} mips/t-st"
			enable_mips_multilibs="yes"
			;;
		mips64octeon*-*-linux*)
			default_mips_abi=n32
			tm_defines="${tm_defines} MIPS_CPU_STRING_DEFAULT=\\\"octeon\\\""
			target_cpu_default=MASK_SOFT_FLOAT_ABI
			enable_mips_multilibs="yes"
			;;
		mipsisa64r6*-*-linux*)
			default_mips_abi=n32
			default_mips_arch=mips64r6
			enable_mips_multilibs="yes"
			;;
		mipsisa64r2*-*-linux*)
			default_mips_abi=n32
			default_mips_arch=mips64r2
			enable_mips_multilibs="yes"
			;;
		mips64*-*-linux* | mipsisa64*-*-linux*)
			default_mips_abi=n32
			enable_mips_multilibs="yes"
			;;
	esac
	if test x$enable_targets = xall; then
		enable_mips_multilibs="yes"
	fi
	if test x$enable_mips_multilibs = xyes; then
		tmake_file="${tmake_file} mips/t-linux64"
	fi
	;;
mips*-mti-elf*)
	tm_file="elfos.h newlib-stdint.h ${tm_file} mips/elf.h mips/n32-elf.h mips/sde.h mips/mti-elf.h"
	tmake_file="mips/t-mti-elf"
	tm_defines="${tm_defines} MIPS_ISA_DEFAULT=33 MIPS_ABI_DEFAULT=ABI_32"
	with_arch_32="mips32r2"
	with_arch_64="mips64r2"
	;;
mips*-img-elf*)
	tm_file="elfos.h newlib-stdint.h ${tm_file} mips/elf.h mips/n32-elf.h mips/sde.h mips/mti-elf.h"
	tmake_file="mips/t-img-elf"
	tm_defines="${tm_defines} MIPS_ISA_DEFAULT=37 MIPS_ABI_DEFAULT=ABI_32"
	with_arch_32="mips32r6"
	with_arch_64="mips64r6"
	;;
mips*-sde-elf*)
	tm_file="elfos.h newlib-stdint.h ${tm_file} mips/elf.h mips/n32-elf.h mips/sde.h"
	tmake_file="mips/t-sde"
	extra_options="${extra_options} mips/sde.opt"
	case "${with_newlib}" in
	  yes)
	    # newlib / libgloss.
	    ;;
	  *)
	    # MIPS toolkit libraries.
	    tm_file="$tm_file mips/sdemtk.h"
	    tmake_file="$tmake_file mips/t-sdemtk"
	    case ${enable_threads} in
	      "" | yes | mipssde)
		thread_file='mipssde'
		;;
	    esac
	    ;;
	esac
	case ${target} in
	  mipsisa32r6*)
	    tm_defines="MIPS_ISA_DEFAULT=37 MIPS_ABI_DEFAULT=ABI_32"
	    ;;
	  mipsisa32r2*)
	    tm_defines="MIPS_ISA_DEFAULT=33 MIPS_ABI_DEFAULT=ABI_32"
	    ;;
	  mipsisa32*)
	    tm_defines="MIPS_ISA_DEFAULT=32 MIPS_ABI_DEFAULT=ABI_32"
	    ;;
	  mipsisa64r6*)
	    tm_defines="MIPS_ISA_DEFAULT=69 MIPS_ABI_DEFAULT=ABI_N32"
	    ;;
	  mipsisa64r2*)
	    tm_defines="MIPS_ISA_DEFAULT=65 MIPS_ABI_DEFAULT=ABI_N32"
	    ;;
	  mipsisa64*)
	    tm_defines="MIPS_ISA_DEFAULT=64 MIPS_ABI_DEFAULT=ABI_N32"
	    ;;
	esac
	;;
mipsisa32-*-elf* | mipsisa32el-*-elf* | \
mipsisa32r2-*-elf* | mipsisa32r2el-*-elf* | \
mipsisa32r6-*-elf* | mipsisa32r6el-*-elf* | \
mipsisa64-*-elf* | mipsisa64el-*-elf* | \
mipsisa64r2-*-elf* | mipsisa64r2el-*-elf* | \
mipsisa64r6-*-elf* | mipsisa64r6el-*-elf*)
	tm_file="elfos.h newlib-stdint.h ${tm_file} mips/elf.h"
	tmake_file="mips/t-isa3264"
	case ${target} in
	  mipsisa32r6*)
	    tm_defines="${tm_defines} MIPS_ISA_DEFAULT=37"
	    ;;
	  mipsisa32r2*)
	    tm_defines="${tm_defines} MIPS_ISA_DEFAULT=33"
	    ;;
	  mipsisa32*)
	    tm_defines="${tm_defines} MIPS_ISA_DEFAULT=32"
	    ;;
	  mipsisa64r6*)
	    tm_defines="${tm_defines} MIPS_ISA_DEFAULT=69"
	    ;;
	  mipsisa64r2*)
	    tm_defines="${tm_defines} MIPS_ISA_DEFAULT=65"
	    ;;
	  mipsisa64*)
	    tm_defines="${tm_defines} MIPS_ISA_DEFAULT=64"
	    ;;
	esac
	case ${target} in
	  mipsisa32*-*-elfoabi*)
	    tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_32"
	    tm_file="${tm_file} mips/elfoabi.h"
	    ;;
	  mipsisa64*-*-elfoabi*)
	    tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_O64"
	    tm_file="${tm_file} mips/elfoabi.h"
	    ;;
	  *-*-elf*)
	    tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_EABI"
	    ;;
	esac
	;;
mipsisa64sr71k-*-elf*)
        tm_file="elfos.h newlib-stdint.h ${tm_file} mips/elf.h"
        tmake_file=mips/t-sr71k
	tm_defines="${tm_defines} MIPS_ISA_DEFAULT=64 MIPS_CPU_STRING_DEFAULT=\\\"sr71000\\\" MIPS_ABI_DEFAULT=ABI_EABI"
        ;;
mipsisa64sb1-*-elf* | mipsisa64sb1el-*-elf*)
	tm_file="elfos.h newlib-stdint.h ${tm_file} mips/elf.h"
	tmake_file="mips/t-elf mips/t-sb1"
	tm_defines="${tm_defines} MIPS_ISA_DEFAULT=64 MIPS_CPU_STRING_DEFAULT=\\\"sb1\\\" MIPS_ABI_DEFAULT=ABI_O64"
	;;
mips-*-elf* | mipsel-*-elf* | mipsr5900-*-elf* | mipsr5900el-*-elf*)
	tm_file="elfos.h newlib-stdint.h ${tm_file} mips/elf.h"
	tmake_file="mips/t-elf"
	;;
mips64r5900-*-elf* | mips64r5900el-*-elf*)
	tm_file="elfos.h newlib-stdint.h ${tm_file} mips/elf.h mips/n32-elf.h"
	tmake_file="mips/t-elf"
	tm_defines="${tm_defines} MIPS_ISA_DEFAULT=3 MIPS_ABI_DEFAULT=ABI_N32"
	;;
mips64-*-elf* | mips64el-*-elf*)
	tm_file="elfos.h newlib-stdint.h ${tm_file} mips/elf.h"
	tmake_file="mips/t-elf"
	tm_defines="${tm_defines} MIPS_ISA_DEFAULT=3 MIPS_ABI_DEFAULT=ABI_O64"
	;;
mips64vr-*-elf* | mips64vrel-*-elf*)
        tm_file="elfos.h newlib-stdint.h ${tm_file} mips/vr.h mips/elf.h"
        tmake_file=mips/t-vr
	tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_EABI"
        ;;
mips64orion-*-elf* | mips64orionel-*-elf*)
	tm_file="elfos.h newlib-stdint.h ${tm_file} mips/elforion.h mips/elf.h"
	tmake_file="mips/t-elf"
	tm_defines="${tm_defines} MIPS_ISA_DEFAULT=3 MIPS_ABI_DEFAULT=ABI_O64"
	;;
mips*-*-rtems*)
	tm_file="elfos.h newlib-stdint.h ${tm_file} mips/elf.h mips/rtems.h rtems.h"
	tmake_file="${tmake_file} mips/t-elf mips/t-rtems"
	;;
mips-wrs-vxworks)
	tm_file="elfos.h ${tm_file} mips/elf.h vx-common.h vxworks.h mips/vxworks.h"
	tmake_file="${tmake_file} mips/t-vxworks"
	;;
mipstx39-*-elf* | mipstx39el-*-elf*)
	tm_file="elfos.h newlib-stdint.h ${tm_file} mips/r3900.h mips/elf.h"
	tmake_file="mips/t-r3900"
	;;
mmix-knuth-mmixware)
	tm_file="${tm_file} newlib-stdint.h"
	use_gcc_stdint=wrap
	;;
mn10300-*-*)
	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
	if test x$stabs = xyes
	then
		tm_file="${tm_file} dbx.h"
	fi
	use_collect2=no
	use_gcc_stdint=wrap
	;;
msp430*-*-*)
	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
	c_target_objs="msp430-c.o"
	cxx_target_objs="msp430-c.o"
	tmake_file="${tmake_file} msp430/t-msp430"
	extra_objs="${extra_objs} msp430-devices.o"
	extra_gcc_objs="driver-msp430.o msp430-devices.o"
	# Enable .init_array unless it has been explicitly disabled.
	# The MSP430 EABI mandates the use of .init_array, and the Newlib CRT
	# code since mid-2019 expects it.
	if test x${disable_initfini_array} != xyes; then
		gcc_cv_initfini_array=yes
	fi
	;;
nds32*-*-*)
	target_cpu_default="0"
	tm_defines="${tm_defines}"
	case ${target} in
	  nds32le*-*-*)
	    ;;
	  nds32be-*-*)
	    target_cpu_default="${target_cpu_default}|MASK_BIG_ENDIAN"
	    tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
	    ;;
	esac
	case ${target} in
	  nds32*-*-elf*)
	    tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file} nds32/elf.h nds32/nds32_intrinsic.h"
	    tmake_file="nds32/t-nds32 nds32/t-elf"
	    ;;
	  nds32*-*-linux*)
	    tm_file="dbxelf.h elfos.h ${tm_file} gnu-user.h linux.h glibc-stdint.h nds32/linux.h nds32/nds32_intrinsic.h"
	    tmake_file="${tmake_file} nds32/t-nds32 nds32/t-linux"
	    gcc_cv_initfini_array=yes
	    ;;
	esac

	# Handle --enable-default-relax setting.
	if test x${enable_default_relax} = xyes; then
		tm_defines="${tm_defines} TARGET_DEFAULT_RELAX=1"
	fi
	# Handle --with-ext-dsp
	if test x${with_ext_dsp} = xyes; then
		tm_defines="${tm_defines} TARGET_DEFAULT_EXT_DSP=1"
	fi
	;;
nios2-*-*)
	tm_file="elfos.h ${tm_file}"
        tmake_file="${tmake_file} nios2/t-nios2"
        case ${target} in
        nios2-*-linux*)
                tm_file="${tm_file} gnu-user.h linux.h glibc-stdint.h nios2/linux.h "
                ;;
	nios2-*-elf*)
		tm_file="${tm_file} newlib-stdint.h nios2/elf.h"
		extra_options="${extra_options} nios2/elf.opt"
		;;
	nios2-*-rtems*)
		tm_file="${tm_file} newlib-stdint.h nios2/rtems.h rtems.h"
		tmake_file="${tmake_file} t-rtems nios2/t-rtems"
		;;
        esac
	;;
nvptx-*)
	tm_file="${tm_file} newlib-stdint.h"
	use_gcc_stdint=wrap
	tmake_file="nvptx/t-nvptx"
	if test x$enable_as_accelerator = xyes; then
		extra_programs="${extra_programs} mkoffload\$(exeext)"
		tm_file="${tm_file} nvptx/offload.h"
	fi
	;;
or1k*-*-*)
	tm_file="elfos.h ${tm_file}"
	tmake_file="${tmake_file} or1k/t-or1k"
	# Force .init_array support.  The configure script cannot always
	# automatically detect that GAS supports it, yet we require it.
	gcc_cv_initfini_array=yes

	# Handle --with-multilib-list=...
	or1k_multilibs="${with_multilib_list}"
	if test "$or1k_multilibs" = "default"; then
		or1k_multilibs="mcmov,msoft-mul,msoft-div"
	fi
	or1k_multilibs=`echo $or1k_multilibs | sed -e 's/,/ /g'`
	for or1k_multilib in ${or1k_multilibs}; do
		case ${or1k_multilib} in
		mcmov | msext | msfimm | \
		mror | mrori | \
		mhard-float | mdouble-float | munordered-float | msoft-float | \
		mhard-div | mhard-mul | \
		msoft-div | msoft-mul )
			TM_MULTILIB_CONFIG="${TM_MULTILIB_CONFIG},${or1k_multilib}"
			;;
		*)
			echo "--with-multilib-list=${with_multilib_list} not supported."
			exit 1
		esac
	done
	TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^,//'`

	case ${target} in
	or1k*-*-linux*)
		tm_file="${tm_file} gnu-user.h linux.h glibc-stdint.h"
		tm_file="${tm_file} or1k/linux.h"
		;;
	or1k*-*-elf*)
		tm_file="${tm_file} newlib-stdint.h or1k/elf.h"
		extra_options="${extra_options} or1k/elf.opt"
		;;
	or1k*-*-rtems*)
		tm_file="${tm_file} newlib-stdint.h or1k/rtems.h rtems.h"
		tmake_file="${tmake_file} or1k/t-rtems"
		;;
	esac
	;;
pdp11-*-*)
	tm_file="${tm_file} newlib-stdint.h"
	use_gcc_stdint=wrap
	;;
# port not yet contributed
#powerpc-*-openbsd*)
#	tmake_file="${tmake_file} rs6000/t-fprules"
#	extra_headers=
#	;;
powerpc-*-darwin*)
	extra_options="${extra_options} ${cpu_type}/darwin.opt"
	case ${target} in
	  *-darwin1[0-9]* | *-darwin9*)
	    tmake_file="${tmake_file} ${cpu_type}/t-darwin32-biarch"
	    tm_file="${tm_file} ${cpu_type}/darwin32-biarch.h"
	    ;;
	  *-darwin8*)
	    tmake_file="${tmake_file} ${cpu_type}/t-darwin32-biarch"
	    tm_file="${tm_file} ${cpu_type}/darwin32-biarch.h"
	    tm_file="${tm_file} ${cpu_type}/darwin8.h"
	    ;;
	  *-darwin7*)
	    tm_file="${tm_file} ${cpu_type}/darwin7.h"
	    ;;
	  *-darwin[456]*)
	    # Earlier - ingle arch, with 32b only
	    # OS X 10.0, the first edition is Darwin4
	    ;;
	esac
	tmake_file="${tmake_file} t-slibgcc"
	;;
powerpc64-*-darwin*)
	extra_options="${extra_options} ${cpu_type}/darwin.opt"
	tmake_file="${tmake_file} ${cpu_type}/t-darwin64-biarch t-slibgcc"
	tm_file="${tm_file} ${cpu_type}/darwin64-biarch.h"
	;;
powerpc*-*-freebsd*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h ${fbsd_tm_file} rs6000/sysv4.h"
	extra_options="${extra_options} rs6000/sysv4.opt"
	tmake_file="rs6000/t-fprules rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm"
	case ${target} in
	     powerpc64*)
	    	tm_file="${tm_file} rs6000/default64.h rs6000/freebsd64.h"
		tmake_file="${tmake_file} rs6000/t-freebsd64"
		extra_options="${extra_options} rs6000/linux64.opt"
		if test $fbsd_major -ge 13; then
		    tm_defines="${tm_defines} TARGET_FREEBSD32_SECURE_PLT=1"
		fi
		;;
	     *)
		if test $fbsd_major -ge 13; then
		    tm_file="rs6000/secureplt.h ${tm_file}"
		fi
	        tm_file="${tm_file} rs6000/freebsd.h"
		;;
	esac
	;;
powerpc-*-netbsd*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h ${nbsd_tm_file} freebsd-spec.h rs6000/sysv4.h rs6000/netbsd.h"
	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
	tmake_file="${tmake_file} rs6000/t-netbsd"
	extra_options="${extra_options} rs6000/sysv4.opt"
	;;
powerpc-*-eabisimaltivec*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/eabisim.h rs6000/eabialtivec.h"
	extra_options="${extra_options} rs6000/sysv4.opt"
	tmake_file="rs6000/t-fprules rs6000/t-ppcendian rs6000/t-ppccomm"
	use_gcc_stdint=wrap
	;;
powerpc-*-eabisim*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/eabisim.h"
	extra_options="${extra_options} rs6000/sysv4.opt"
	tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
	use_gcc_stdint=wrap
	;;
powerpc-*-elf*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h"
	extra_options="${extra_options} rs6000/sysv4.opt"
	tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
	;;
powerpc-*-eabialtivec*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/eabialtivec.h"
	extra_options="${extra_options} rs6000/sysv4.opt"
	tmake_file="rs6000/t-fprules rs6000/t-ppcendian rs6000/t-ppccomm"
	use_gcc_stdint=wrap
	;;
powerpc-*-eabi*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h"
	extra_options="${extra_options} rs6000/sysv4.opt"
	tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
	use_gcc_stdint=wrap
	;;
powerpc-*-rtems*)
	tm_file="rs6000/biarch64.h ${tm_file} dbxelf.h elfos.h gnu-user.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/rtems.h rtems.h"
	extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt"
	tmake_file="${tmake_file} rs6000/t-fprules rs6000/t-rtems rs6000/t-ppccomm"
	;;
powerpc*-*-linux*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h freebsd-spec.h rs6000/sysv4.h"
	extra_options="${extra_options} rs6000/sysv4.opt"
	tmake_file="${tmake_file} rs6000/t-fprules rs6000/t-ppccomm"
	extra_objs="$extra_objs rs6000-linux.o"
	case ${target} in
	    powerpc*le-*-*)
		tm_file="${tm_file} rs6000/sysv4le.h" ;;
	esac
	case ${target}:${with_cpu} in
	    powerpc64*: | powerpc64*:native) cpu_is_64bit=yes ;;
	esac
	maybe_biarch=${cpu_is_64bit}
	case ${enable_targets} in
	    *powerpc64*) maybe_biarch=yes ;;
	    all) maybe_biarch=yes ;;
	esac
	case ${target}:${enable_targets}:${maybe_biarch} in
	    powerpc64-* | powerpc-*:*:yes | *:*powerpc64-*:yes | *:all:yes \
	    | powerpc64le*:*powerpcle* | powerpc64le*:*powerpc-* \
	    | powerpcle-*:*powerpc64le*:yes)
		if test x$cpu_is_64bit = xyes; then
		    tm_file="${tm_file} rs6000/default64.h"
		fi
		tm_file="rs6000/biarch64.h ${tm_file} rs6000/linux64.h glibc-stdint.h"
		tmake_file="$tmake_file rs6000/t-linux64"
		case ${target} in
		    powerpc*le-*-*)
			tmake_file="$tmake_file rs6000/t-linux64le"
			case ${enable_targets} in
			    all | *powerpc64-* | *powerpc-*)
				tmake_file="$tmake_file rs6000/t-linux64lebe" ;;
			esac ;;
		    *)
			case ${enable_targets} in
			    all | *powerpc64le-* | *powerpcle-*)
				tmake_file="$tmake_file rs6000/t-linux64bele" ;;
			esac ;;
		esac
		extra_options="${extra_options} rs6000/linux64.opt"
		;;
	    powerpc64*)
		tm_file="${tm_file} rs6000/default64.h rs6000/linux64.h glibc-stdint.h"
		extra_options="${extra_options} rs6000/linux64.opt"
		tmake_file="${tmake_file} rs6000/t-linux"
		;;
	    *)
		tm_file="${tm_file} rs6000/linux.h glibc-stdint.h"
		tmake_file="${tmake_file} rs6000/t-ppcos rs6000/t-linux"
		;;
	esac
	case ${target} in
	    powerpc*-*-linux*ppc476*)
		tm_file="${tm_file} rs6000/476.h"
		extra_options="${extra_options} rs6000/476.opt" ;;
	    powerpc*-*-linux*altivec*)
		tm_file="${tm_file} rs6000/linuxaltivec.h" ;;
	esac
	case ${target} in
	    *-linux*-musl*)
		enable_secureplt=yes ;;
	esac
	if test x${enable_secureplt} = xyes; then
		tm_file="rs6000/secureplt.h ${tm_file}"
	fi
	;;
powerpc-wrs-vxworks*)
	tm_file="${tm_file} elfos.h gnu-user.h freebsd-spec.h rs6000/sysv4.h"
	tmake_file="${tmake_file} rs6000/t-fprules rs6000/t-ppccomm rs6000/t-vxworks"
	extra_options="${extra_options} rs6000/sysv4.opt"
	extra_headers=ppc-asm.h
	case ${target} in
          *-vxworksmils*)
            tm_file="${tm_file} vx-common.h vxworksae.h rs6000/vxworks.h rs6000/vxworksmils.h"
            tmake_file="${tmake_file} rs6000/t-vxworksmils"
            ;;
	  *-vxworksae*)
	    tm_file="${tm_file} vx-common.h vxworksae.h rs6000/vxworks.h rs6000/vxworksae.h"
	    tmake_file="${tmake_file} rs6000/t-vxworksae"
	    ;;
	  *-vxworks*)
	    tm_file="${tm_file} vx-common.h vxworks.h rs6000/vxworks.h"
	    ;;
	esac
	;;
powerpc-*-lynxos*)
	xm_defines=POSIX
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h rs6000/sysv4.h rs6000/lynx.h lynx.h"
	tmake_file="t-lynx rs6000/t-lynx"
	extra_options="${extra_options} rs6000/sysv4.opt lynx.opt"
	thread_file=lynx
	gnu_ld=yes
	gas=yes
	;;
powerpcle-*-elf*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/sysv4le.h"
	tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
	extra_options="${extra_options} rs6000/sysv4.opt"
	;;
powerpcle-*-eabisim*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/sysv4le.h rs6000/eabi.h rs6000/eabisim.h"
	tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
	extra_options="${extra_options} rs6000/sysv4.opt"
	use_gcc_stdint=wrap
	;;
powerpcle-*-eabi*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/sysv4le.h rs6000/eabi.h"
	tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
	extra_options="${extra_options} rs6000/sysv4.opt"
	use_gcc_stdint=wrap
	;;
pru*-*-*)
	tm_file="elfos.h newlib-stdint.h ${tm_file}"
	tmake_file="${tmake_file} pru/t-pru"
	extra_objs="pru-pragma.o pru-passes.o"
	use_gcc_stdint=wrap
	;;
rs6000-ibm-aix6.* | powerpc-ibm-aix6.*)
	tm_file="${tm_file} rs6000/aix.h rs6000/aix61.h rs6000/xcoff.h rs6000/aix-stdint.h"
	tmake_file="rs6000/t-aix52 t-slibgcc"
	extra_options="${extra_options} rs6000/aix64.opt"
	use_collect2=yes
	thread_file='aix'
	use_gcc_stdint=wrap
	default_use_cxa_atexit=yes
	;;
rs6000-ibm-aix7.1.* | powerpc-ibm-aix7.1.*)
	tm_file="${tm_file} rs6000/aix.h rs6000/aix71.h rs6000/xcoff.h rs6000/aix-stdint.h"
	tmake_file="rs6000/t-aix52 t-slibgcc"
	extra_options="${extra_options} rs6000/aix64.opt"
	use_collect2=yes
	thread_file='aix'
	use_gcc_stdint=wrap
	default_use_cxa_atexit=yes
	;;
rs6000-ibm-aix[789].* | powerpc-ibm-aix[789].*)
	tm_file="${tm_file} rs6000/aix.h rs6000/aix72.h rs6000/xcoff.h rs6000/aix-stdint.h"
	tmake_file="rs6000/t-aix52 t-slibgcc"
	extra_options="${extra_options} rs6000/aix64.opt"
	use_collect2=yes
	thread_file='aix'
	use_gcc_stdint=wrap
	default_use_cxa_atexit=yes
	;;
rl78-*-elf*)
	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
	target_has_targetm_common=no
	c_target_objs="rl78-c.o"
	cxx_target_objs="rl78-c.o"
	tmake_file="${tmake_file} rl78/t-rl78"
	;;
rx-*-elf*)
	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
	tmake_file="${tmake_file} rx/t-rx"
	extra_options="${extra_options} rx/elf.opt"
	;;
rx-*-linux*)
	tm_file="elfos.h linux.h glibc-stdint.h rx/linux.h ../../libgcc/config/rx/rx-abi.h"
	tmake_file="${tmake_file} rx/t-linux"
	;;
s390-*-linux*)
	tm_file="s390/s390.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h s390/linux.h"
	c_target_objs="${c_target_objs} s390-c.o"
	cxx_target_objs="${cxx_target_objs} s390-c.o"
	if test x$enable_targets = xall; then
		tmake_file="${tmake_file} s390/t-linux64"
	fi
	tmake_file="${tmake_file} s390/t-s390"
	;;
s390x-*-linux*)
	tm_file="s390/s390x.h s390/s390.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h s390/linux.h"
	tm_p_file="linux-protos.h s390/s390-protos.h"
	c_target_objs="${c_target_objs} s390-c.o"
	cxx_target_objs="${cxx_target_objs} s390-c.o"
	md_file=s390/s390.md
	extra_modes=s390/s390-modes.def
	out_file=s390/s390.c
	tmake_file="${tmake_file} s390/t-linux64 s390/t-s390"
	;;
s390x-ibm-tpf*)
	tm_file="s390/s390x.h s390/s390.h dbxelf.h elfos.h s390/tpf.h"
	tm_p_file=s390/s390-protos.h
	c_target_objs="${c_target_objs} s390-c.o"
	cxx_target_objs="${cxx_target_objs} s390-c.o"
	md_file=s390/s390.md
	extra_modes=s390/s390-modes.def
	out_file=s390/s390.c
	thread_file='tpf'
	extra_options="${extra_options} s390/tpf.opt"
	tmake_file="${tmake_file} s390/t-s390"
	;;
sh-*-elf* | sh[12346l]*-*-elf* | \
  sh-*-linux* | sh[2346lbe]*-*-linux* | \
  sh-*-netbsdelf* | shl*-*-netbsdelf*)
	tmake_file="${tmake_file} sh/t-sh sh/t-elf"
	if test x${with_endian} = x; then
		case ${target} in
		sh[1234]*be-*-* | sh[1234]*eb-*-*) with_endian=big ;;
		shbe-*-* | sheb-*-*)		   with_endian=big,little ;;
		sh[1234]l* | sh[34]*-*-linux*)	   with_endian=little ;;
		shl* | sh*-*-linux* | \
		  sh-superh-elf)		   with_endian=little,big ;;
		sh[1234]*-*-*)			   with_endian=big ;;
		*)				   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)		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
	little*)	tm_file="sh/little.h ${tm_file}" ;;
	esac
	tm_file="${tm_file} dbxelf.h elfos.h sh/elf.h"
	case ${target} in
	sh*-*-linux*)	tmake_file="${tmake_file} sh/t-linux"
			if test x$enable_fdpic = xyes; then
				tm_defines="$tm_defines FDPIC_DEFAULT=1"
			fi
			tm_file="${tm_file} gnu-user.h linux.h glibc-stdint.h sh/linux.h" ;;
	sh*-*-netbsd*)
			tm_file="${tm_file} ${nbsd_tm_file} sh/netbsd-elf.h"
			extra_options="${extra_options} netbsd.opt netbsd-elf.opt"

			;;
	sh*-superh-elf)	if test x$with_libgloss != xno; then
                                with_libgloss=yes
                                tm_file="${tm_file} sh/newlib.h"
                        fi
			tm_file="${tm_file} sh/embed-elf.h"
			tm_file="${tm_file} sh/superh.h"
			extra_options="${extra_options} sh/superh.opt" ;;
	*)		if test x$with_newlib = xyes \
			   && test x$with_libgloss = xyes; then
				tm_file="${tm_file} sh/newlib.h"
			fi
			tm_file="${tm_file} sh/embed-elf.h" ;;
	esac
	case ${target} in
	*-*-netbsd)
		;;
	*-*-elf*)
		tm_file="${tm_file} newlib-stdint.h"
		;;
	esac
	# sed el/eb endian suffixes away to avoid confusion with sh[23]e
	case `echo ${target} | sed 's/e[lb]-/-/'` in
	sh4a_single_only*)	sh_cpu_target=sh4a-single-only ;;
	sh4a_single*)		sh_cpu_target=sh4a-single ;;
	sh4a_nofpu*)		sh_cpu_target=sh4a-nofpu ;;
	sh4al)			sh_cpu_target=sh4al ;;
	sh4a*)			sh_cpu_target=sh4a ;;
	sh4_single_only*)	sh_cpu_target=sh4-single-only ;;
	sh4_single*)		sh_cpu_target=sh4-single ;;
	sh4_nofpu*)		sh_cpu_target=sh4-nofpu ;;
	sh4* | sh-superh-*)	sh_cpu_target=sh4 ;;
	sh3e*)			sh_cpu_target=sh3e ;;
	sh*-*-netbsd* | sh3*)	sh_cpu_target=sh3 ;;
	sh2a_single_only*)	sh_cpu_target=sh2a-single-only ;;
	sh2a_single*)		sh_cpu_target=sh2a-single ;;
	sh2a_nofpu*)		sh_cpu_target=sh2a-nofpu ;;
	sh2a*)			sh_cpu_target=sh2a ;;
	sh2e*)			sh_cpu_target=sh2e ;;
	sh2*)			sh_cpu_target=sh2 ;;
	*)			sh_cpu_target=sh1 ;;
	esac
	# did the user say --without-fp ?
	if test x$with_fp = xno; then
		case ${sh_cpu_target} in
		sh4al | sh1)	;;
		sh4a* )		sh_cpu_target=sh4a-nofpu ;;
		sh4*)		sh_cpu_target=sh4-nofpu ;;
		sh3*)		sh_cpu_target=sh3 ;;
		sh2a*)		sh_cpu_target=sh2a-nofpu ;;
		sh2*)		sh_cpu_target=sh2 ;;
		*)	echo --without-fp not available for $target: ignored
		esac
		tm_defines="$tm_defines STRICT_NOFPU=1"
	fi
	sh_cpu_default="`echo $with_cpu|sed s/^m/sh/|tr A-Z_ a-z-`"
	case $sh_cpu_default in
	  sh2a-single-only | sh2a-single | sh2a-nofpu | sh2a | \
	  sh4a-single-only | sh4a-single | sh4a-nofpu | sh4a | sh4al | \
	  sh4-single-only | sh4-single | sh4-nofpu | sh4 | sh4-300 | \
	  sh3e | sh3 | sh2e | sh2 | sh1) ;;
	"")	sh_cpu_default=${sh_cpu_target} ;;
	*)	echo "with_cpu=$with_cpu not supported"; exit 1 ;;
	esac
	sh_multilibs=${with_multilib_list}
	if test "$sh_multilibs" = "default" ; then
		case ${target} in
		sh[1234]*)	sh_multilibs=${sh_cpu_target} ;;
		sh-superh-*)	sh_multilibs=m4,m4-single,m4-single-only,m4-nofpu ;;
		sh*-*-linux*)	sh_multilibs=m1,m2,m2a,m3e,m4 ;;
		sh*-*-netbsd*)	sh_multilibs=m3,m3e,m4 ;;
		*) sh_multilibs=m1,m2,m2e,m4,m4-single,m4-single-only,m2a,m2a-single ;;
		esac
		if test x$with_fp = xno; then
			sh_multilibs="`echo $sh_multilibs|sed -e s/m4/sh4-nofpu/ -e s/,m4-[^,]*//g -e s/,m[23]e// -e s/m2a,m2a-single/m2a-nofpu/ -e s/m5-..m....,//g`"
		fi
	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/`'\"'
	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/^[Ss][Hh]/m/' -e 's/ [Ss][Hh]/ m/g' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ_ abcdefghijklmnopqrstuvwxyz-`
	for sh_multilib in ${sh_multilibs}; do
		case ${sh_multilib} in
		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)
			# 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"
	fi
	tm_file="$tm_file ./sysroot-suffix.h"
	tmake_file="$tmake_file t-sysroot-suffix"
	;;
sh-*-rtems*)
	tmake_file="${tmake_file} sh/t-sh sh/t-rtems"
	tm_file="${tm_file} dbxelf.h elfos.h sh/elf.h sh/embed-elf.h sh/rtemself.h rtems.h newlib-stdint.h"
	;;
sh-wrs-vxworks)
	tmake_file="$tmake_file sh/t-sh sh/t-vxworks"
	tm_file="${tm_file} elfos.h sh/elf.h sh/embed-elf.h vx-common.h vxworks.h sh/vxworks.h"
	;;
sparc-*-elf*)
	tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h sparc/sysv4.h sparc/sp-elf.h"
	case ${target} in
	    *-leon-*)
		tmake_file="sparc/t-sparc sparc/t-leon"
		;;
	    *-leon[3-9]*)
		tmake_file="sparc/t-sparc sparc/t-leon3"
		;;
	    *)
		tmake_file="sparc/t-sparc sparc/t-elf"
		;;
	esac
	;;
sparc-*-rtems*)
	tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h"
	tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems"
	;;
sparc-*-linux*)
	tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/tso.h"
	extra_options="${extra_options} sparc/long-double-switch.opt"
	case ${target} in
	    *-leon-*)
		tmake_file="${tmake_file} sparc/t-sparc sparc/t-leon"
		;;
	    *-leon[3-9]*)
		tmake_file="${tmake_file} sparc/t-sparc sparc/t-leon3"
		;;
	    *)
		tmake_file="${tmake_file} sparc/t-sparc"
		;;
	esac
	if test x$enable_targets = xall; then
		tm_file="sparc/biarch64.h ${tm_file} sparc/linux64.h"
		tmake_file="${tmake_file} sparc/t-linux64"
	else
		tm_file="${tm_file} sparc/linux.h"
		tmake_file="${tmake_file} sparc/t-linux"
	fi
	;;
sparc-*-netbsdelf*)
	tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h ${nbsd_tm_file} sparc/netbsd-elf.h"
	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
	extra_options="${extra_options} sparc/long-double-switch.opt"
	tmake_file="${tmake_file} sparc/t-sparc"
	;;
sparc*-*-solaris2*)
	tm_file="sparc/biarch64.h ${tm_file} ${sol2_tm_file} sparc/tso.h"
	case ${target} in
	    sparc64-*-* | sparcv9-*-*)
		tm_file="sparc/default64.h ${tm_file}"
		;;
	    *)
		test x$with_cpu != x || with_cpu=v9
		;;
	esac
	tmake_file="${tmake_file} sparc/t-sparc sparc/t-sol2"
	;;
sparc-wrs-vxworks)
	tm_file="${tm_file} elfos.h sparc/sysv4.h vx-common.h vxworks.h sparc/vxworks.h"
	tmake_file="${tmake_file} sparc/t-sparc sparc/t-vxworks"
	;;
sparc64-*-elf*)
	tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h sparc/sysv4.h sparc/sp64-elf.h"
	extra_options="${extra_options}"
	tmake_file="${tmake_file} sparc/t-sparc"
	;;
sparc64-*-rtems*)
	tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h sparc/sysv4.h sparc/sp64-elf.h sparc/rtemself.h rtems.h"
	extra_options="${extra_options}"
	tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems-64"
	;;
sparc64-*-linux*)
	tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/default64.h sparc/linux64.h sparc/tso.h"
	extra_options="${extra_options} sparc/long-double-switch.opt"
	tmake_file="${tmake_file} sparc/t-sparc sparc/t-linux64"
	;;
sparc64-*-freebsd*|ultrasparc-*-freebsd*)
	tm_file="${tm_file} ${fbsd_tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/freebsd.h"
	extra_options="${extra_options} sparc/long-double-switch.opt"
	case "x$with_cpu" in
		xultrasparc) ;;
		x) with_cpu=ultrasparc ;;
		*) echo "$with_cpu not supported for freebsd target"; exit 1 ;;
	esac
	tmake_file="${tmake_file} sparc/t-sparc"
	;;
sparc64-*-netbsd*)
	tm_file="sparc/biarch64.h ${tm_file}"
	tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h ${nbsd_tm_file} sparc/netbsd-elf.h"
	extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
	extra_options="${extra_options} sparc/long-double-switch.opt"
	tmake_file="${tmake_file} sparc/t-sparc sparc/t-netbsd64"
	;;
sparc64-*-openbsd*)
	tm_file="sparc/openbsd1-64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp64-elf.h"
	tm_file="${tm_file} openbsd.h openbsd-stdint.h openbsd-libpthread.h sparc/openbsd64.h"
	extra_options="${extra_options} openbsd.opt"
	extra_options="${extra_options}"
	gas=yes gnu_ld=yes
	with_cpu=ultrasparc
	tmake_file="${tmake_file} sparc/t-sparc"
	;;
tic6x-*-elf)
	tm_file="elfos.h ${tm_file} c6x/elf-common.h c6x/elf.h"
	tm_file="${tm_file} dbxelf.h tm-dwarf2.h newlib-stdint.h"
	tmake_file="c6x/t-c6x c6x/t-c6x-elf"
	use_collect2=no
	;;
tic6x-*-uclinux)
	tm_file="elfos.h ${tm_file} gnu-user.h linux.h c6x/elf-common.h c6x/uclinux-elf.h"
	tm_file="${tm_file} dbxelf.h tm-dwarf2.h glibc-stdint.h"
	tm_file="${tm_file} ./sysroot-suffix.h"
	tmake_file="t-sysroot-suffix t-slibgcc"
	tmake_file="${tmake_file} c6x/t-c6x c6x/t-c6x-elf c6x/t-c6x-uclinux"
	use_collect2=no
	;;
tilegx*-*-linux*)
	tm_file="elfos.h gnu-user.h linux.h glibc-stdint.h tilegx/linux.h ${tm_file}"
        tmake_file="${tmake_file} tilegx/t-tilegx"
	extra_objs="${extra_objs} mul-tables.o"
	c_target_objs="${c_target_objs} tilegx-c.o"
	cxx_target_objs="${cxx_target_objs} tilegx-c.o"
	extra_headers="feedback.h"
	case $target in
	tilegxbe-*)
		tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
 		;;
	esac
	;;
tilepro*-*-linux*)
	tm_file="elfos.h gnu-user.h linux.h glibc-stdint.h tilepro/linux.h ${tm_file}"
        tmake_file="${tmake_file} tilepro/t-tilepro"
	extra_objs="${extra_objs} mul-tables.o"
	c_target_objs="${c_target_objs} tilepro-c.o"
	cxx_target_objs="${cxx_target_objs} tilepro-c.o"
	extra_headers="feedback.h"
	;;
v850-*-rtems*)
	target_cpu_default="TARGET_CPU_generic"
	tm_file="dbxelf.h elfos.h v850/v850.h"
	tm_file="${tm_file} rtems.h v850/rtems.h newlib-stdint.h"
	tmake_file="${tmake_file} v850/t-v850"
	tmake_file="${tmake_file} v850/t-rtems"
	use_collect2=no
	c_target_objs="v850-c.o"
	cxx_target_objs="v850-c.o"
	;;
v850*-*-*)
	case ${target} in
	v850e3v5-*-*)
		target_cpu_default="TARGET_CPU_v850e3v5"
		;;
	v850e2v3-*-*)
		target_cpu_default="TARGET_CPU_v850e2v3"
		;;
	v850e2-*-*)
		target_cpu_default="TARGET_CPU_v850e2"
		;;
	v850e1-*-* | v850es-*-*)
		target_cpu_default="TARGET_CPU_v850e1"
		;;
	v850e-*-*)
		target_cpu_default="TARGET_CPU_v850e"
		;;
	v850-*-*)
		target_cpu_default="TARGET_CPU_generic"
		;;
	esac
	tm_file="dbxelf.h elfos.h newlib-stdint.h v850/v850.h"
	if test x$stabs = xyes
	then
		tm_file="${tm_file} dbx.h"
	fi
	use_collect2=no
	c_target_objs="v850-c.o"
	cxx_target_objs="v850-c.o"
	use_gcc_stdint=wrap
	;;
vax-*-linux*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h vax/elf.h vax/linux.h"
	extra_options="${extra_options} vax/elf.opt"
	;;
vax-*-netbsdelf*)
	tm_file="${tm_file} elfos.h ${nbsd_tm_file} vax/elf.h vax/netbsd-elf.h"
	extra_options="${extra_options} netbsd.opt netbsd-elf.opt vax/elf.opt"
	tm_defines="${tm_defines} CHAR_FAST8=1 SHORT_FAST16=1"
	;;
vax-*-openbsd*)
	tm_file="vax/vax.h vax/openbsd1.h openbsd.h openbsd-stdint.h openbsd-libpthread.h vax/openbsd.h"
	extra_options="${extra_options} openbsd.opt"
	use_collect2=yes
	;;
visium-*-elf*)
	tm_file="dbxelf.h elfos.h ${tm_file} visium/elf.h newlib-stdint.h"
	tmake_file="visium/t-visium visium/t-crtstuff"
	;;
xstormy16-*-elf)
	# For historical reasons, the target files omit the 'x'.
	tm_file="dbxelf.h elfos.h newlib-stdint.h stormy16/stormy16.h"
	tm_p_file=stormy16/stormy16-protos.h
	tm_d_file="elfos.h stormy16/stormy16.h"
	md_file=stormy16/stormy16.md
	out_file=stormy16/stormy16.c
	extra_options=stormy16/stormy16.opt
	tmake_file="stormy16/t-stormy16"
	;;
xtensa*-*-elf*)
	tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h xtensa/elf.h"
	extra_options="${extra_options} xtensa/elf.opt"
	;;
xtensa*-*-linux*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h xtensa/linux.h"
	tmake_file="${tmake_file} xtensa/t-xtensa"
	;;
xtensa*-*-uclinux*)
	tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h xtensa/uclinux.h"
	tmake_file="${tmake_file} xtensa/t-xtensa"
	extra_options="${extra_options} xtensa/uclinux.opt"
	;;
am33_2.0-*-linux*)
	tm_file="mn10300/mn10300.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h mn10300/linux.h"
	gas=yes gnu_ld=yes
	use_collect2=no
	;;
m32c-*-rtems*)
	tm_file="dbxelf.h elfos.h ${tm_file} m32c/rtems.h rtems.h newlib-stdint.h"
	c_target_objs="m32c-pragma.o"
	cxx_target_objs="m32c-pragma.o"
 	;;
m32c-*-elf*)
	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
	c_target_objs="m32c-pragma.o"
	cxx_target_objs="m32c-pragma.o"
 	;;
*)
	echo "*** Configuration ${target} not supported" 1>&2
	exit 1
	;;
esac

case ${target} in
i[34567]86-*-linux* | x86_64-*-linux*)
	tmake_file="${tmake_file} i386/t-pmm_malloc i386/t-i386"
	;;
i[34567]86-*-* | x86_64-*-*)
	tmake_file="${tmake_file} i386/t-gmm_malloc i386/t-i386"
	;;
powerpc*-*-* | rs6000-*-*)
	tm_file="${tm_file} ${cpu_type}/option-defaults.h"
esac

# non-glibc systems
case ${target} in
*-linux-musl*)
	tmake_file="${tmake_file} t-musl"
	;;
*-linux-uclibc*)
	tmake_file="${tmake_file} t-uclibc"
	;;
esac

# Assume the existence of indirect function support and allow the use of the
# resolver attribute.
case ${target} in
*-*-linux*android*|*-*-linux*uclibc*|*-*-linux*musl*)
        ;;
*-*-linux*)
	case ${target} in
	aarch64*-* | arm*-* | i[34567]86-* | powerpc*-* | s390*-* | sparc*-* | x86_64-*)
		default_gnu_indirect_function=yes
		;;
	esac
	;;
esac

# Build mkoffload tool
case ${target} in
*-intelmic-* | *-intelmicemul-*)
	tmake_file="${tmake_file} i386/t-intelmic"
	tm_file="${tm_file} i386/intelmic-offload.h"
	;;
esac

if [ "$target_has_targetcm" = "no" ]; then
  c_target_objs="$c_target_objs default-c.o"
  cxx_target_objs="$cxx_target_objs default-c.o"
fi

if [ "$common_out_file" = "" ]; then
  if [ "$target_has_targetm_common" = "yes" ]; then
    common_out_file="$cpu_type/$cpu_type-common.c"
  else
    common_out_file="default-common.c"
  fi
fi

if [ "$target_has_targetdm" = "no" ]; then
  d_target_objs="$d_target_objs default-d.o"
fi

# Support for --with-cpu and related options (and a few unrelated options,
# too).
case ${with_cpu} in
  yes | no)
    echo "--with-cpu must be passed a value" 1>&2
    exit 1
    ;;
esac

# Set arch and cpu from ${target} and ${target_noncanonical}.  Set cpu
# to generic if there is no processor scheduler model for the target.
arch=
cpu=
arch_without_sse2=no
arch_without_64bit=no
case ${target} in
  i386-*-freebsd*)
    if test $fbsd_major -ge 6; then
      arch=i486
    else
      arch=i386
    fi
    cpu=generic
    arch_without_sse2=yes
    arch_without_64bit=yes
    ;;
  i386-*-netbsd*)
    arch=i486
    cpu=generic
    arch_without_sse2=yes
    arch_without_64bit=yes
    ;;
  i386-*-*)
    arch=i386
    cpu=i386
    arch_without_sse2=yes
    arch_without_64bit=yes
    ;;
  i486-*-*)
    arch=i486
    cpu=i486
    arch_without_sse2=yes
    arch_without_64bit=yes
    ;;
  i586-*-*)
    arch_without_sse2=yes
    arch_without_64bit=yes
    case ${target_noncanonical} in
      k6_2-*)
	arch=k6-2
	cpu=k6-2
	;;
      k6_3-*)
	arch=k6-3
	cpu=k6-3
	;;
      k6-*)
	arch=k6
	cpu=k6
	;;
      pentium_mmx-*|winchip_c6-*|winchip2-*|c3-*)
	arch=pentium-mmx
	cpu=pentium-mmx
	;;
      *)
	arch=pentium
	cpu=pentium
	;;
    esac
    ;;
  i686-*-* | i786-*-*)
    case ${target_noncanonical} in
      znver1-*)
	arch=znver1
	cpu=znver1
	;;
      znver2-*)
	arch=znver2
	cpu=znver2
	;;
      bdver4-*)
        arch=bdver4
        cpu=bdver4
        ;;
      bdver3-*)
        arch=bdver3
        cpu=bdver3
        ;;
      bdver2-*)
        arch=bdver2
        cpu=bdver2
        ;;
      bdver1-*)
	arch=bdver1
	cpu=bdver1
	;;
      btver1-*)
	arch=btver1
	cpu=btver1
	;;
      btver2-*)
	arch=btver2
	cpu=btver2
	;;
      amdfam10-*|barcelona-*)
	arch=amdfam10
	cpu=amdfam10
	;;
      k8_sse3-*|opteron_sse3-*|athlon64_sse3-*)
	arch=k8-sse3
	cpu=k8-sse3
	;;
      k8-*|opteron-*|athlon64-*|athlon_fx-*)
	arch=k8
	cpu=k8
	;;
      athlon_xp-*|athlon_mp-*|athlon_4-*)
	arch=athlon-4
	cpu=athlon-4
	arch_without_sse2=yes
	arch_without_64bit=yes
	;;
      athlon_tbird-*|athlon-*)
	arch=athlon
	cpu=athlon
	arch_without_sse2=yes
	;;
      geode-*)
	arch=geode
	cpu=geode
	arch_without_sse2=yes
	;;
      pentium2-*)
	arch=pentium2
	cpu=pentium2
	arch_without_sse2=yes
	;;
      pentium3-*|pentium3m-*)
	arch=pentium3
	cpu=pentium3
	arch_without_sse2=yes
	;;
      pentium4-*|pentium4m-*)
	arch=pentium4
	cpu=pentium4
	;;
      prescott-*)
	arch=prescott
	cpu=prescott
	;;
      nocona-*)
	arch=nocona
	cpu=nocona
	;;
      atom-*)
	arch=atom
	cpu=atom
	;;
      slm-*)
	arch=slm
	cpu=slm
	;;
      core2-*)
	arch=core2
	cpu=core2
	;;
      corei7-*)
	arch=corei7
	cpu=corei7
	;;
      corei7_avx-*)
	arch=corei7-avx
	cpu=corei7-avx
	;;
      pentium_m-*)
	arch=pentium-m
	cpu=pentium-m
	;;
      pentiumpro-*)
	arch=pentiumpro
	cpu=pentiumpro
	arch_without_sse2=yes
	;;
      *)
	arch=pentiumpro
	cpu=generic
	arch_without_sse2=yes
	arch_without_64bit=yes
	;;
    esac
    ;;
  x86_64-*-*)
    case ${target_noncanonical} in
      znver1-*)
	arch=znver1
	cpu=znver1
	;;
      znver2-*)
	arch=znver2
	cpu=znver2
	;;
      bdver4-*)
        arch=bdver4
        cpu=bdver4
        ;;
      bdver3-*)
        arch=bdver3
        cpu=bdver3
        ;;
      bdver2-*)
        arch=bdver2
        cpu=bdver2
        ;;
      bdver1-*)
	arch=bdver1
	cpu=bdver1
	;;
      btver1-*)
	arch=btver1
	cpu=btver1
	;;
      btver2-*)
	arch=btver2
	cpu=btver2
	;;
      amdfam10-*|barcelona-*)
	arch=amdfam10
	cpu=amdfam10
	;;
      k8_sse3-*|opteron_sse3-*|athlon64_sse3-*)
	arch=k8-sse3
	cpu=k8-sse3
	;;
      k8-*|opteron-*|athlon_64-*)
	arch=k8
	cpu=k8
	;;
      nocona-*)
	arch=nocona
	cpu=nocona
	;;
      atom-*)
	arch=atom
	cpu=atom
	;;
      slm-*)
	arch=slm
	cpu=slm
	;;
      core2-*)
	arch=core2
	cpu=core2
	;;
      corei7-*)
	arch=corei7
	cpu=corei7
	;;
      *)
	arch=x86-64
	cpu=generic
	;;
    esac
    ;;
esac

# If there is no $with_cpu option, try to infer one from ${target}.
# This block sets nothing except for with_cpu.
if test x$with_cpu = x ; then
  case ${target} in
    i[34567]86-*-elfiamcu)
      with_cpu=lakemont
      ;;
    i[34567]86-*-*|x86_64-*-*)
      with_cpu=$cpu
      ;;
    alphaev6[78]*-*-*)
      with_cpu=ev67
      ;;
    alphaev6*-*-*)
      with_cpu=ev6
      ;;
    alphapca56*-*-*)
      with_cpu=pca56
      ;;
    alphaev56*-*-*)
      with_cpu=ev56
      ;;
    alphaev5*-*-*)
      with_cpu=ev5
      ;;
    frv-*-*linux* | frv400-*-*linux*)
      with_cpu=fr400
      ;;
    frv550-*-*linux*)
      with_cpu=fr550
      ;;
    m68k*-*-*)
      case "$with_arch" in
	"cf")
	  with_cpu=${default_cf_cpu}
	  ;;
	"" | "m68k")
	  with_cpu=m${default_m68k_cpu}
	  ;;
      esac
      ;;
    sparc*-*-*)
      case ${target} in
	*-leon-*)
	  with_cpu=leon
	  ;;
	*-leon[3-9]*)
	  with_cpu=leon3
	  ;;
	*-leon[3-9]v7*)
	  with_cpu=leon3v7
	  ;;
	*)
	  with_cpu="`echo ${target} | sed 's/-.*$//'`"
	  ;;
      esac
      ;;
    visium-*-*)
      with_cpu=gr5
      ;;
  esac

  # Avoid overriding --with-cpu-32 and --with-cpu-64 values.
  case ${target} in
    i[34567]86-*-*|x86_64-*-*)
      if test x$with_cpu_32 != x || test x$with_cpu_64 != x; then
	if test x$with_cpu_32 = x; then
	  with_cpu_32=$with_cpu
	fi
	if test x$with_cpu_64 = x; then
	  with_cpu_64=$with_cpu
	fi
        with_cpu=
      fi
      ;;
  esac
fi

# Support for --with-arch and related options (and a few unrelated options,
# too).
case ${with_arch} in
  yes | no)
    echo "--with-arch must be passed a value" 1>&2
    exit 1
    ;;
esac

# If there is no $with_arch option, try to infer one from ${target}.
# This block sets nothing except for with_arch.
if test x$with_arch = x ; then
  case ${target} in
    i[34567]86-*-darwin*|x86_64-*-darwin*)
      # Default arch is set via TARGET_SUBTARGET32_ISA_DEFAULT
      # and TARGET_SUBTARGET64_ISA_DEFAULT in config/i386/darwin.h.
      ;;
    i[34567]86-*-elfiamcu)
      with_arch=lakemont
      ;;
    i[34567]86-*-*)
      # --with-fpmath sets the default ISA to SSE2, which is the same
      # ISA supported by Pentium 4.
      if test x$with_fpmath = x || test $arch_without_sse2 = no; then
	with_arch=$arch
      else
	with_arch=pentium4
      fi
      ;;
    x86_64-*-*)
      with_arch=$arch
      ;;
    mips64r5900-*-* | mips64r5900el-*-* | mipsr5900-*-* | mipsr5900el-*-*)
      with_arch=r5900
      ;;
    mips*-*-vxworks)
      with_arch=mips2
      ;;
  esac

  # Avoid overriding --with-arch-32 and --with-arch-64 values.
  case ${target} in
    i[34567]86-*-darwin*|x86_64-*-darwin*)
      # Default arch is set via TARGET_SUBTARGET32_ISA_DEFAULT
      # and TARGET_SUBTARGET64_ISA_DEFAULT in config/i386/darwin.h.
      ;;
    i[34567]86-*-*|x86_64-*-*)
      if test x$with_arch_32 != x || test x$with_arch_64 != x; then
	if test x$with_arch_32 = x; then
	  with_arch_32=$with_arch
	fi
	if test x$with_arch_64 = x; then
	  if test $arch_without_64bit = yes; then
	    # Set the default 64bit arch to x86-64 if the default arch
	    # doesn't support 64bit.
	    with_arch_64=x86-64
	  else
	    with_arch_64=$with_arch
	  fi
	fi
	with_arch=
      elif test $arch_without_64bit$need_64bit_isa = yesyes; then
	# Set the default 64bit arch to x86-64 if the default arch
	# doesn't support 64bit and we need 64bit ISA.
	with_arch_32=$with_arch
	with_arch_64=x86-64
	with_arch=
      fi
      ;;
  esac
fi

# Infer a default setting for --with-float.
if test x$with_float = x; then
  case ${target} in
    mips64r5900-*-* | mips64r5900el-*-* | mipsr5900-*-* | mipsr5900el-*-*)
      # The R5900 doesn't support 64-bit float.  32-bit float doesn't
      # comply with IEEE 754.
      with_float=soft
      ;;
  esac
fi

# Infer a default setting for --with-fpu.
if test x$with_fpu = x; then
  case ${target} in
    mips64r5900-*-* | mips64r5900el-*-* | mipsr5900-*-* | mipsr5900el-*-*)
      # The R5900 FPU only supports single precision.
      with_fpu=single
      ;;
  esac
fi

# Support --with-fpmath.
if test x$with_fpmath != x; then
  case ${target} in
    i[34567]86-*-* | x86_64-*-*)
      case ${with_fpmath} in
      avx)
	tm_file="${tm_file} i386/avxmath.h"
	;;
      sse)
	tm_file="${tm_file} i386/ssemath.h"
	;;
      *)
	echo "Invalid --with-fpmath=$with_fpmath" 1>&2
	exit 1
	;;
      esac
      ;;
    *)
      echo "--with-fpmath isn't supported for $target." 1>&2
      exit 1
      ;;
  esac
fi

# Similarly for --with-schedule.
if test x$with_schedule = x; then
	case ${target} in
	hppa1*)
		# Override default PA8000 scheduling model.
		with_schedule=7100LC
		;;
	esac
fi

# Infer a default setting for --with-llsc.
if test x$with_llsc = x; then
  case ${target} in
    mips*-*-linux*)
      # The kernel emulates LL and SC where necessary.
      with_llsc=yes
      ;;
    mips64r5900-*-* | mips64r5900el-*-* | mipsr5900-*-* | mipsr5900el-*-*)
      # The R5900 doesn't support LL(D) and SC(D).
      with_llsc=no
      ;;
  esac
fi

# Validate and mark as valid any --with options supported
# by this target.  In order to use a particular --with option
# you must list it in supported_defaults; validating the value
# is optional.  This case statement should set nothing besides
# supported_defaults.

supported_defaults=
case "${target}" in
	aarch64*-*-*)
		supported_defaults="abi cpu arch"
		for which in cpu arch; do

			eval "val=\$with_$which"
			base_val=`echo $val | sed -e 's/\+.*//'`
			ext_val=`echo $val | sed -e 's/[a-z0-9.-]\+//'`

			if [ $which = arch ]; then
			  def=aarch64-arches.def
			  pattern=AARCH64_ARCH
			else
			  def=aarch64-cores.def
			  pattern=AARCH64_CORE
			fi

			ext_mask=AARCH64_CPU_DEFAULT_FLAGS

			# Find the base CPU or ARCH id in aarch64-cores.def or
			# aarch64-arches.def
			if [ x"$base_val" = x ] \
			    || grep "^$pattern(\"$base_val\"," \
				    ${srcdir}/config/aarch64/$def \
				    > /dev/null; then

			  if [ $which = arch ]; then
				base_id=`grep "^$pattern(\"$base_val\"," \
				  ${srcdir}/config/aarch64/$def | \
				  sed -e 's/^[^,]*,[ 	]*//' | \
				  sed -e 's/,.*$//'`
				# Extract the architecture flags from aarch64-arches.def
				ext_mask=`grep "^$pattern(\"$base_val\"," \
				   ${srcdir}/config/aarch64/$def | \
				   sed -e 's/)$//' | \
				   sed -e 's/^.*,//'`
			  else
				base_id=`grep "^$pattern(\"$base_val\"," \
				  ${srcdir}/config/aarch64/$def | \
				  sed -e 's/^[^,]*,[ 	]*//' | \
				  sed -e 's/,.*$//'`
			  fi

			  # Use the pre-processor to strip flatten the options.
			  # This makes the format less rigid than if we use
			  # grep and sed directly here.
			  opt_macro="AARCH64_OPT_EXTENSION(A, B, C, D, E, F)=A, B, C, D, E, F"
			  options_parsed="`$ac_cv_prog_CPP -D"$opt_macro" -x c \
				${srcdir}/config/aarch64/aarch64-option-extensions.def`"

			  # Match one element inside AARCH64_OPT_EXTENSION, we
			  # consume anything that's not a ,.
			  elem="[ 	]*\([^,]\+\)[ 	]*"

			  # Repeat the pattern for the number of entries in the
			  # AARCH64_OPT_EXTENSION, currently 6 times.
			  sed_patt="^$elem,$elem,$elem,$elem,$elem,$elem"

			  while [ x"$ext_val" != x ]
			  do
				ext_val=`echo $ext_val | sed -e 's/\+//'`
				ext=`echo $ext_val | sed -e 's/\+.*//'`
				base_ext=`echo $ext | sed -e 's/^no//'`
				opt_line=`echo -e "$options_parsed" | \
					grep "^\"$base_ext\""`

				if [ x"$base_ext" = x ] \
				    || [[ -n $opt_line ]]; then

				  # These regexp extract the elements based on
				  # their group match index in the regexp.
				  ext_canon=`echo -e "$opt_line" | \
					sed -e "s/$sed_patt/\2/"`
				  ext_on=`echo -e "$opt_line" | \
					sed -e "s/$sed_patt/\3/"`
				  ext_off=`echo -e "$opt_line" | \
					sed -e "s/$sed_patt/\4/"`

				  if [ $ext = $base_ext ]; then
					# Adding extension
					ext_mask="("$ext_mask") | ("$ext_on" | "$ext_canon")"
				  else
					# Removing extension
					ext_mask="("$ext_mask") & ~("$ext_off" | "$ext_canon")"
				  fi

				  true
				else
				  echo "Unknown extension used in --with-$which=$val" 1>&2
				  exit 1
				fi
				ext_val=`echo $ext_val | sed -e 's/[a-z0-9]\+//'`
			  done

			  ext_mask="(("$ext_mask") << 6)"
			  if [ x"$base_id" != x ]; then
				target_cpu_cname="TARGET_CPU_$base_id | $ext_mask"
			  fi
			  true
			else
			  echo "Unknown $which used in --with-$which=$val" 1>&2
			  exit 1
			fi
		done
		;;

	alpha*-*-*)
		supported_defaults="cpu tune"
		for which in cpu tune; do
			eval "val=\$with_$which"
			case "$val" in
			"" \
			| ev4 | ev45 | 21064 | ev5 | 21164 | ev56 | 21164a \
			| pca56 | 21164PC | 21164pc | ev6 | 21264 | ev67 \
			| 21264a)
				;;
			*)
				echo "Unknown CPU used in --with-$which=$val" 1>&2
				exit 1
				;;
			esac
		done
		;;

	arc*-*-*)
		supported_defaults="cpu"

		if [ x"$with_cpu" = x ] \
		    || grep "^ARC_CPU ($with_cpu," \
		       ${srcdir}/config/arc/arc-cpus.def \
		       > /dev/null; then
		 # Ok
		 true
		else
		 echo "Unknown cpu used in --with-cpu=$with_cpu" 1>&2
		 exit 1
		fi
		;;

    csky-*-*)
	supported_defaults="cpu endian float"
	;;

	arm*-*-*)
		supported_defaults="arch cpu float tune fpu abi mode tls"
		for which in cpu tune arch; do
			# See if it matches a supported value
			eval "val=\$with_$which"
			if [ x"$val" != x ]; then
			  cpu=`awk -f ${srcdir}/config/arm/parsecpu.awk \
				-v cmd="chk$which $val" \
				${srcdir}/config/arm/arm-cpus.in`
			  if [ "$cpu" = "error" ]; then
			    echo "Unknown target in --with-$which=$val" 1>&2
			    exit 1
			  else
			    new_val=$cpu
			    eval "target_${which}_cname=$new_val"
			    echo "For $val real value is $new_val"
			  fi
			fi
		done

		case "$with_float" in
		"" \
		| soft | hard | softfp)
			# OK
			;;
		*)
			echo "Unknown floating point type used in --with-float=$with_float" 1>&2
			exit 1
			;;
		esac

		# see if --with-fpu matches any of the supported FPUs
		if [ x"$with_fpu" != x ] ; then
		  val=$with_fpu
		  fpu=`awk -f ${srcdir}/config/arm/parsecpu.awk \
			-v cmd="chkfpu $val" \
			${srcdir}/config/arm/arm-cpus.in`
		  if [ "$fpu" = "error" ]
		  then
		    echo "Unknown target in --with-fpu=$val" 1>&2
		    exit 1
		  fi
		fi

		case "$with_abi" in
		"" \
		| apcs-gnu | atpcs | aapcs | iwmmxt | aapcs-linux )
			#OK
			;;
		*)
			echo "Unknown ABI used in --with-abi=$with_abi"
			exit 1
			;;
		esac

		case "$with_mode" in
		"" \
		| arm | thumb )
			#OK
			;;
		*)
			echo "Unknown mode used in --with-mode=$with_mode"
			exit 1
			;;
		esac

		case "$with_tls" in
		"" \
		| gnu | gnu2)
			# OK
			;;
		*)
			echo "Unknown TLS method used in --with-tls=$with_tls" 1>&2
			exit 1
			;;
		esac

		if test "x$with_arch" != x && test "x$with_cpu" != x; then
			echo "Switch \"--with-arch\" may not be used with switch \"--with-cpu\""  1>&2
			exit 1
		fi

		if test "x$with_cpu" != x && test "x$with_tune" != x; then
			echo "Switch \"--with-tune\" may not be used with switch \"--with-cpu\""  1>&2
			exit 1
		fi

		# Add extra multilibs
		if test "x$with_multilib_list" != x; then
			ml=
			arm_multilibs=`echo $with_multilib_list | sed -e 's/,/ /g'`
			if test "x${arm_multilibs}" != xdefault ; then
				for arm_multilib in ${arm_multilibs}; do
					case ${arm_multilib} in
					aprofile|rmprofile)
						tmake_profile_file="arm/t-multilib"
						;;
					@*)
						ml=`echo "X$arm_multilib" | sed '1s,^X@,,'`
						if test -f "${srcdir}/config/arm/${ml}"; then
							tmake_file="${tmake_file} arm/${ml}"
						else
							echo "Error: ${ml} does not exist in ${srcdir}/config/arm" >&2
							exit 1
						fi
						;;
					*)
						echo "Error: --with-multilib-list=${with_multilib_list} not supported." 1>&2
						exit 1
						;;
					esac
				done
			fi

			if test "x${tmake_profile_file}" != x ; then
				# arm/t-aprofile and arm/t-rmprofile are only
				# designed to work without any with-cpu,
				# with-arch, with-mode, with-fpu or with-float
				# options.
				if test "x$with_arch" != x \
				    || test "x$with_cpu" != x \
				    || test "x$with_float" != x \
				    || test "x$with_fpu" != x \
				    || test "x$with_mode" != x ; then
				    echo "Error: You cannot use any of --with-arch/cpu/fpu/float/mode with --with-multilib-list=${with_multilib_list}" 1>&2
				    exit 1
				elif test "x$ml" != x ; then
				    echo "Error: You cannot use builtin multilib profiles along with custom ones" 1>&2
				    exit 1
				fi
				# But pass the default value for float-abi
				# through to the multilib selector
				with_float="soft"
				tmake_file="${tmake_file} ${tmake_profile_file}"
				TM_MULTILIB_CONFIG="$with_multilib_list"
			fi
		fi
		target_cpu_cname=${target_cpu_cname:-arm7tdmi}
		with_cpu=${with_cpu:-$target_cpu_cname}
		;;

	fr*-*-*linux*)
		supported_defaults=cpu
		case "$with_cpu" in
		fr400) ;;
		fr550) ;;
		*)
			echo "Unknown cpu used in --with-cpu=$with_cpu" 1>&2
			exit 1
			;;
		esac
		;;

	fido-*-* | m68k*-*-*)
		supported_defaults="arch cpu"
		case "$with_arch" in
		"" | "m68k"| "cf")
			m68k_arch_family="$with_arch"
			;;
		*)
			echo "Invalid --with-arch=$with_arch" 1>&2
			exit 1
			;;
		esac

		# We always have a $with_cpu setting here.
		case "$with_cpu" in
		"m68000" | "m68010" | "m68020" | "m68030" | "m68040" | "m68060")
			m68k_cpu_ident=$with_cpu
			;;
		"m68020-40")
			m68k_cpu_ident=m68020
			tm_defines="$tm_defines M68K_DEFAULT_TUNE=u68020_40"
			;;
		"m68020-60")
			m68k_cpu_ident=m68020
			tm_defines="$tm_defines M68K_DEFAULT_TUNE=u68020_60"
			;;
		*)
			# We need the C identifier rather than the string.
			m68k_cpu_ident=`awk -v arg="\"$with_cpu\"" \
			   'BEGIN { FS="[ \t]*[,()][ \t]*" }; \
			    $1 == "M68K_DEVICE" && $2 == arg { print $3 }' \
				 ${srcdir}/config/m68k/m68k-devices.def`
			if [ x"$m68k_cpu_ident" = x ] ; then
				echo "Unknown CPU used in --with-cpu=$with_cpu" 1>&2
				exit 1
			fi
			with_cpu="mcpu=$with_cpu"
			;;
		esac
		;;

	amdgcn-*-*)
		supported_defaults="arch tune"

		for which in arch tune; do
			eval "val=\$with_$which"
			case ${val} in
			"" | carrizo | fiji | gfx900 | gfx906 )
				# OK
				;;
			*)
				echo "Unknown cpu used in --with-$which=$val." 1>&2
				exit 1
				;;
			esac
		done
		[ "x$with_arch" = x ] && with_arch=fiji
		;;

	hppa*-*-*)
		supported_defaults="arch schedule"

		case "$with_arch" in
		"" | 1.0 | 1.1 | 2.0)
			# OK
			;;
		*)
			echo "Unknown architecture used in --with-arch=$with_arch" 1>&2
			exit 1
			;;
		esac

		case "$with_schedule" in
		"" | 700 | 7100 | 7100LC | 7200 | 7300 | 8000)
			# OK
			;;
		*)
			echo "Unknown processor used in --with-schedule=$with_schedule." 1>&2
			exit 1
			;;
		esac
		;;

	i[34567]86-*-* | x86_64-*-*)
		supported_defaults="abi arch arch_32 arch_64 cpu cpu_32 cpu_64 tune tune_32 tune_64"
		for which in arch arch_32 arch_64 cpu cpu_32 cpu_64 tune tune_32 tune_64; do
			eval "val=\$with_$which"
			case " $x86_archs " in
			*" ${val} "*)
				case "${target}" in
				  x86_64-*-*)
				      case "x$which" in
					*_32)
						;;
					*)
						echo "CPU given in --with-$which=$val doesn't support 64bit mode." 1>&2
						exit 1
						;;
				      esac
				      ;;
				esac
				# OK
				;;
			*)
				if test x${val} != x; then
					case " $x86_64_archs " in
					*" ${val} "*)
						# OK
						;;
					*)
						# Allow $x86_cpus --with-cpu=/--with-tune=
						case "x$which" in
						xcpu*|xtune*)
							case " $x86_cpus " in
							*" ${val} "*)
								# OK
								;;
							*)
								echo "Unknown CPU given in --with-$which=$val." 1>&2
								exit 1
								;;
							esac
							;;
						*)
							echo "Unknown CPU given in --with-$which=$val." 1>&2
							exit 1
							;;
						esac
					;;
					esac
				fi
				;;
			esac
		done
		;;

	riscv*-*-*)
		supported_defaults="abi arch tune riscv_attribute"

		case "${target}" in
		riscv-* | riscv32*) xlen=32 ;;
		riscv64*) xlen=64 ;;
		*) echo "Unsupported RISC-V target ${target}" 1>&2; exit 1 ;;
		esac

		case "${with_riscv_attribute}" in
		yes)
			tm_defines="${tm_defines} TARGET_RISCV_ATTRIBUTE=1"
			;;
		no)
			tm_defines="${tm_defines} TARGET_RISCV_ATTRIBUTE=0"
			;;
		""|default)
			case "${target}" in
			riscv*-*-elf*)
				tm_defines="${tm_defines} TARGET_RISCV_ATTRIBUTE=1"
				;;
			*)
				tm_defines="${tm_defines} TARGET_RISCV_ATTRIBUTE=0"
				;;
			esac
			;;
		*)
			echo "--with-riscv-attribute=${with_riscv_attribute} is not supported.  The argument must begin with yes, no or default." 1>&2
			exit 1
			;;
		esac


		# Infer arch from --with-arch, --target, and --with-abi.
		case "${with_arch}" in
		rv32e* | rv32i* | rv32g* | rv64i* | rv64g*)
			# OK.
			;;
		"")
			# Infer XLEN, but otherwise assume GC.
			case "${with_abi}" in
			ilp32e) with_arch="rv32e" ;;
			ilp32 | ilp32f | ilp32d) with_arch="rv32gc" ;;
			lp64 | lp64f | lp64d) with_arch="rv64gc" ;;
			*) with_arch="rv${xlen}gc" ;;
			esac
			;;
		*)
			echo "--with-arch=${with_arch} is not supported.  The argument must begin with rv32e, rv32i, rv32g, rv64i, or rv64g." 1>&2
			exit 1
			;;
		esac

		# Make sure --with-abi is valid.  If it was not specified,
		# pick a default based on the ISA, preferring soft-float
		# unless the D extension is present.
		case "${with_abi}" in
		ilp32 | ilp32e | ilp32f | ilp32d | lp64 | lp64f | lp64d)
			;;
		"")
			case "${with_arch}" in
			rv32*d* | rv32g*) with_abi=ilp32d ;;
			rv32e*) with_abi=ilp32e ;;
			rv32*) with_abi=ilp32 ;;
			rv64*d* | rv64g*) with_abi=lp64d ;;
			rv64*) with_abi=lp64 ;;
			esac
			;;
		*)
			echo "--with-abi=${with_abi} is not supported" 1>&2
			exit 1
			;;
		esac

		# Make sure ABI and ISA are compatible.
		case "${with_abi},${with_arch}" in
		ilp32,rv32* | ilp32e,rv32e* \
		| ilp32f,rv32*f* | ilp32f,rv32g* \
		| ilp32d,rv32*d* | ilp32d,rv32g* \
		| lp64,rv64* \
		| lp64f,rv64*f* | lp64f,rv64g* \
		| lp64d,rv64*d* | lp64d,rv64g*)
			;;
		*)
			echo "--with-abi=${with_abi} is not supported for ISA ${with_arch}" 1>&2
			exit 1
			;;
		esac

		# Handle --with-multilib-list.
		if test "x${with_multilib_list}" != xdefault; then
			tm_file="${tm_file} riscv/withmultilib.h"
			tmake_file="${tmake_file} riscv/t-withmultilib"

			case ${with_multilib_list} in
			ilp32 | ilp32f | ilp32d \
			| lp64 | lp64f | lp64d )
				TM_MULTILIB_CONFIG="${with_arch},${with_multilib_list}"
				;;
			*)
				echo "--with-multilib-list=${with_multilib_list} not supported."
				exit 1
			esac

			# Define macros to select the default multilib.
			case ${with_arch} in
			rv32gc)
				tm_defines="${tm_defines} TARGET_MLIB_ARCH=1"
				;;
			rv64gc)
				tm_defines="${tm_defines} TARGET_MLIB_ARCH=2"
				;;
			*)
				echo "unsupported --with-arch for --with-multilib-list"
				exit 1
			esac
			case ${with_abi} in
			ilp32)
				tm_defines="${tm_defines} TARGET_MLIB_ABI=1"
				;;
			ilp32f)
				tm_defines="${tm_defines} TARGET_MLIB_ABI=2"
				;;
			ilp32d)
				tm_defines="${tm_defines} TARGET_MLIB_ABI=3"
				;;
			lp64)
				tm_defines="${tm_defines} TARGET_MLIB_ABI=4"
				;;
			lp64f)
				tm_defines="${tm_defines} TARGET_MLIB_ABI=5"
				;;
			lp64d)
				tm_defines="${tm_defines} TARGET_MLIB_ABI=6"
				;;
			*)
				echo "unsupported --with-abi for --with-multilib"
				exit 1
			esac
		fi
		;;

	mips*-*-*)
		supported_defaults="abi arch arch_32 arch_64 float fpu nan fp_32 odd_spreg_32 tune tune_32 tune_64 divide llsc mips-plt synci lxc1-sxc1 madd4"

		case ${with_float} in
		"" | soft | hard)
			# OK
			;;
		*)
			echo "Unknown floating point type used in --with-float=$with_float" 1>&2
			exit 1
			;;
		esac

		case ${with_fpu} in
		"" | single | double)
			# OK
			;;
		*)
			echo "Unknown fpu type used in --with-fpu=$with_fpu" 1>&2
			exit 1
			;;
		esac

		case ${with_nan} in
		"" | 2008 | legacy)
			# OK
			;;
		*)
			echo "Unknown NaN encoding used in --with-nan=$with_nan" 1>&2
			exit 1
			;;
		esac

		case ${with_fp_32} in
		"" | 32 | xx | 64)
			# OK
			;;
		*)
			echo "Unknown FP mode used in --with-fp-32=$with_fp_32" 1>&2
			exit 1
			;;
		esac

		case ${with_odd_spreg_32} in
		yes)
			with_odd_spreg_32="odd-spreg"
			;;
		no)
			with_odd_spreg_32="no-odd-spreg"
			;;
		"")
			# OK
			;;
		*)
			echo "Unknown odd-spreg-32 type used in --with-odd-spreg-32=$with_odd_spreg_32" 1>&2
			exit 1
			;;
		esac

		case ${with_abi} in
		"" | 32 | o64 | n32 | 64 | eabi)
			# OK
			;;
		*)
			echo "Unknown ABI used in --with-abi=$with_abi" 1>&2
			exit 1
			;;
		esac

		case ${with_divide} in
		"" | breaks | traps)
			# OK
			;;
		*)
			echo "Unknown division check type use in --with-divide=$with_divide" 1>&2
			exit 1
			;;
		esac

		case ${with_llsc} in
		yes)
			with_llsc=llsc
			;;
		no)
			with_llsc="no-llsc"
			;;
		"")
			# OK
			;;
		*)
			echo "Unknown llsc type used in --with-llsc" 1>&2
			exit 1
			;;
		esac

		case ${with_mips_plt} in
		yes)
			with_mips_plt=plt
			;;
		no)
			with_mips_plt=no-plt
			;;
		"")
			;;
		*)
			echo "Unknown --with-mips-plt argument: $with_mips_plt" 1>&2
			exit 1
			;;
		esac

		case ${with_synci} in
		yes)
			with_synci=synci
			;;
		no)
			with_synci=no-synci
			;;
		"")
			;;
		*)
			echo "Unknown synci type used in --with-synci" 1>&2
			exit 1
			;;
		esac

		case ${with_lxc1_sxc1} in
		yes)
			with_lxc1_sxc1=lxc1-sxc1
			;;
		no)
			with_lxc1_sxc1=no-lxc1-sxc1
			;;
		"")
			;;
		*)
			echo "Unknown lxc1-sxc1 type used in --with-lxc1-sxc1" 1>&2
			exit 1
			;;
		esac

		case ${with_madd4} in
		yes)
			with_madd4=madd4
			;;
		no)
			with_madd4=no-madd4
			;;
		"")
			;;
		*)
			echo "Unknown madd4 type used in --with-madd4" 1>&2
			exit 1
			;;
		esac
		;;

	nds32*-*-*)
		supported_defaults="arch cpu nds32_lib float fpu_config"

		# process --with-arch
		case "${with_arch}" in
		"" | v3 )
			tm_defines="${tm_defines} TARGET_ARCH_DEFAULT=0"
			;;
		v2 | v2j | v3m)
			# OK
			tm_defines="${tm_defines} TARGET_ARCH_DEFAULT=0"
			;;
		v3f)
			tm_defines="${tm_defines} TARGET_ARCH_DEFAULT=1"
			;;
		v3s)
			tm_defines="${tm_defines} TARGET_ARCH_DEFAULT=2"

			;;
		*)
			echo "Cannot accept --with-arch=$with_arch, available values are: v2 v2j v3 v3m v3f v3s" 1>&2
			exit 1
			;;
		esac

		case "${with_cpu}" in
		"")
			with_cpu=n9
			;;
		n6 | n7 |n8 | e8 | s8 | n9 | n10 | d10 | n12 | n13 | n15)
			# OK
			;;
		*)
			echo "Cannot accept --with-cpu=$with_cpu, available values are: n6 n7 n8 e8 s8 n9 n10 d10 n12 n13 n15" 1>&2
			exit 1
			;;
		esac

		# process --with-nds32-lib
		case "${with_nds32_lib}" in
		"")
			case ${target} in
			*-*-*uclibc*)
				with_nds32_lib=ulibc
				;;
			*-*-linux*)
				with_nds32_lib=glibc
				;;
			*)
				with_nds32_lib=newlib
				tm_defines="${tm_defines} TARGET_DEFAULT_CTOR_DTOR=1"
				;;
			esac
			;;
		newlib)
			# OK
			tm_defines="${tm_defines} TARGET_DEFAULT_CTOR_DTOR=1"
			;;
		mculib)
			# OK
			# for the arch=v3f or arch=v3s under mculib toolchain,
			# we would like to set -fno-math-errno as default
			case "${with_arch}" in
			v3f | v3s)
				tm_defines="${tm_defines} TARGET_DEFAULT_NO_MATH_ERRNO=1"
				;;
			esac
			;;
		glibc | uclibc)
			# OK
			;;
		*)
			echo "Cannot accept --with-nds32-lib=$with_nds32_lib, available values are: newlib mculib glibc uclibc" 1>&2
			exit 1
			;;
		esac

		# process --with-float
		case "${with_float}" in
		"" | soft | hard)
			# OK
			;;
		*)
			echo "Cannot accept --with-float=$with_float, available values are: soft hard" 1>&2
			exit 1
			;;
		esac

		# process --with-config-fpu
		case "${with_config_fpu}" in
		"" | 0 | 1 | 2 | 3)
			# OK
			;;
		*)
			echo "Cannot accept --with-config-fpu=$with_config_fpu, available values from 0 to 7" 1>&2
			exit 1
			;;
		esac


		;;
	nios2*-*-*)
		supported_defaults="arch"
			case "$with_arch" in
			"" | r1 | r2)
				# OK
				;;
			*)
				echo "Unknown arch used in --with-arch=$with_arch" 1>&2
				exit 1
				;;
			esac
		;;

	powerpc*-*-* | rs6000-*-*)
		supported_defaults="abi cpu cpu_32 cpu_64 float tune tune_32 tune_64 advance_toolchain"

		for which in cpu cpu_32 cpu_64 tune tune_32 tune_64; do
			eval "val=\$with_$which"
			case ${val} in
			default32 | default64)
				case $which in
				cpu | tune)
					;;
				*)
					echo "$val only valid for --with-cpu and --with-tune." 1>&2
					exit 1
					;;
				esac
				with_which="with_$which"
				eval $with_which=
				;;
			405cr)
				tm_defines="${tm_defines} CONFIG_PPC405CR"
				eval "with_$which=405"
				;;
			"" | common | native \
			| power[3456789] | power5+ | power6x \
			| powerpc | powerpc64 | powerpc64le \
			| rs64 \
			| 401 | 403 | 405 | 405fp | 440 | 440fp | 464 | 464fp \
			| 476 | 476fp | 505 | 601 | 602 | 603 | 603e | ec603e \
			| 604 | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 \
			| a2 | e300c[23] | 854[08] | e500mc | e500mc64 | e5500 | e6500 \
			| titan | 801 | 821 | 823 | 860 | 970 | G3 | G4 | G5 | cell)
				# OK
				;;
			*)
				echo "Unknown cpu used in --with-$which=$val." 1>&2
				exit 1
				;;
			esac
		done

		case "$with_abi" in
		"" | elfv1 | elfv2 )
			#OK
			;;
		*)
			echo "Unknown ABI used in --with-abi=$with_abi"
			exit 1
			;;
		esac

		if test "x$with_advance_toolchain" != x; then
		    if test -d "/opt/$with_advance_toolchain/." -a \
			-d "/opt/$with_advance_toolchain/bin/." -a \
			-d "/opt/$with_advance_toolchain/include/."; then

			tm_file="$tm_file ./advance-toolchain.h"
			(at="/opt/$with_advance_toolchain"
			 echo "/* Use Advance Toolchain $at */"
			 echo
			 echo "#undef  LINK_OS_EXTRA_SPEC32"
			 echo "#define LINK_OS_EXTRA_SPEC32" \
			      "\"%(link_os_new_dtags)" \
			      "-rpath $prefix/lib -rpath $at/lib\""
			 echo
			 echo "#undef  LINK_OS_EXTRA_SPEC64"
			 echo "#define LINK_OS_EXTRA_SPEC64" \
			      "\"%(link_os_new_dtags)" \
			      "-rpath $prefix/lib64 -rpath $at/lib64\""
			 echo
			 echo "#undef  LINK_OS_NEW_DTAGS_SPEC"
			 echo "#define LINK_OS_NEW_DTAGS_SPEC" \
			      "\"--enable-new-dtags\""
			 echo
			 echo "#undef  DYNAMIC_LINKER_PREFIX"
			 echo "#define DYNAMIC_LINKER_PREFIX \"$at\""
			 echo
			 echo "#undef  MD_EXEC_PREFIX"
			 echo "#define MD_EXEC_PREFIX \"$at/bin/\""
			 echo
			 echo "#undef  MD_STARTFILE_PREFIX"
			 echo "#define MD_STARTFILE_PREFIX \"$prefix/lib/\""
			 echo
			 echo "#undef  MD_STARTFILE_PREFIX_1"
			 echo "#define MD_STARTFILE_PREFIX_1 \"$at/lib/\"") \
			    > advance-toolchain.h
		    else
			echo "Unknown advance-toolchain $with_advance_toolchain"
			exit 1
		    fi
		fi

		# Set up the default long double format if the user changed it.
		if test x$with_long_double_format = xieee; then
		    tm_defines="${tm_defines} TARGET_IEEEQUAD_DEFAULT=1"

		elif test x$with_long_double_format = xibm; then
		    tm_defines="${tm_defines} TARGET_IEEEQUAD_DEFAULT=0"
		fi
		;;

	s390*-*-*)
		supported_defaults="arch mode tune"

		for which in arch tune; do
			eval "val=\$with_$which"
			case ${val} in
			"" | native | z900 | z990 | z9-109 | z9-ec | z10 | z196 | zEC12 | z13 | z14 | z15 | arch5 | arch6 | arch7 | arch8 | arch9 | arch10 | arch11 | arch12 | arch13 )
				# OK
				;;
			*)
				echo "Unknown cpu used in --with-$which=$val." 1>&2
				exit 1
				;;
			esac
		done

		case ${with_mode} in
		"" | esa | zarch)
			# OK
			;;
		*)
			echo "Unknown architecture mode used in --with-mode=$with_mode." 1>&2
			exit 1
			;;
		esac
		;;

	sh[123456ble]*-*-* | sh-*-*)
		supported_defaults="cpu"
		case "`echo $with_cpu | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ_ abcdefghijklmnopqrstuvwxyz- | sed s/sh/m/`" in
		"" | m1 | m2 | m2e | m3 | m3e | m4 | m4-single | m4-single-only | m4-nofpu )
			# OK
			;;
		m2a | m2a-single | m2a-single-only | m2a-nofpu)
			;;
		m4a | m4a-single | m4a-single-only | m4a-nofpu | m4al)
		        ;;
		*)
			echo "Unknown CPU used in --with-cpu=$with_cpu, known values:"  1>&2
			echo "m1 m2 m2e m3 m3e m4 m4-single m4-single-only m4-nofpu" 1>&2
			echo "m4a m4a-single m4a-single-only m4a-nofpu m4al" 1>&2
			echo "m2a m2a-single m2a-single-only m2a-nofpu" 1>&2
			exit 1
			;;
		esac
		;;
	sparc*-*-*)
		supported_defaults="cpu cpu_32 cpu_64 float tune tune_32 tune_64"

		for which in cpu cpu_32 cpu_64 tune tune_32 tune_64; do
			eval "val=\$with_$which"
			case ${val} in
			"" | sparc | sparcv9 | sparc64 \
			| v7 | cypress \
			| v8 | supersparc | hypersparc | leon | leon3 | leon3v7 \
			| sparclite | f930 | f934 | sparclite86x \
			| sparclet | tsc701 \
			| v9 | ultrasparc | ultrasparc3 | niagara | niagara2 \
			| niagara3 | niagara4 | niagara7 | m8)
				# OK
				;;
			*)
				echo "Unknown cpu used in --with-$which=$val" 1>&2
				exit 1
				;;
			esac
		done

		case ${with_float} in
		"" | soft | hard)
			# OK
			;;
		*)
			echo "Unknown floating point type used in --with-float=$with_float" 1>&2
			exit 1
			;;
		esac
		;;

	tic6x-*-*)
		supported_defaults="arch"

		case ${with_arch} in
		"" | c62x | c64x | c64x+ | c67x | c67x+ | c674x)
			# OK
			;;
		*)
			echo "Unknown arch used in --with-arch=$with_arch." 1>&2
			exit 1
			;;
		esac
		;;

	v850*-*-*)
		supported_defaults=cpu
		case ${with_cpu} in
		"" | v850e | v850e1 | v850e2 | v850es | v850e2v3 | v850e3v5)
			# OK
			;;
		*)
			echo "Unknown cpu used in --with-cpu=$with_cpu" 1>&2
			exit 1
			;;
		esac
		;;
	visium-*-*)
		supported_defaults="cpu"
		case $with_cpu in
		  "" | gr5 | gr6)
			;;
		  *)    echo "Unknown cpu used in --with-cpu=$with_cpu" 1>&2
			exit 1
			;;
		esac
		;;
esac

# Targets for which there is at least one VxWorks port should include
# vxworks-dummy.h to allow safe references to various TARGET_VXWORKS kinds
# of markers from other files in the port, including the vxworks*.h files to
# distinguish VxWorks variants such as VxWorks 7 or 64).

case ${target} in
arm*-*-* | i[34567]86-*-* | mips*-*-* | powerpc*-*-* | sh*-*-* \
| sparc*-*-* | x86_64-*-*)
	tm_file="vxworks-dummy.h ${tm_file}"
	;;
esac

# Set some miscellaneous flags for particular targets.
target_cpu_default2=
case ${target} in
	aarch64*-*-*)
		if test x"$target_cpu_cname" != x
		then
			target_cpu_default2=$target_cpu_cname
		fi
		;;

	arm*-*-*)
		if test x$with_cpu = x
		then
			echo "Don't know the target cpu" 1>&2
			exit 1
		else
			target_cpu_default2="\\\"$with_cpu\\\""
		fi
		;;

	hppa*-*-*)
		if test x$gas = xyes
		then
			target_cpu_default2="MASK_GAS"
		fi
		;;

	fido*-*-* | m68k*-*-*)
		target_cpu_default2=$m68k_cpu_ident
		tmake_file="m68k/t-opts $tmake_file"
		if [ x"$m68k_arch_family" != x ]; then
		        tmake_file="m68k/t-$m68k_arch_family $tmake_file"
		fi
		;;

	i[34567]86-*-darwin* | x86_64-*-darwin*)
		;;
	i[34567]86-*-linux* | x86_64-*-linux*)
		extra_objs="${extra_objs} cet.o"
		tmake_file="$tmake_file i386/t-linux i386/t-cet"
		;;
	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"
		;;
	i[34567]86-*-msdosdjgpp*)
		tmake_file="${tmake_file} i386/t-djgpp"
		;;
	i[34567]86-*-solaris2* | x86_64-*-solaris2*)
		;;
	i[34567]86-*-cygwin* | x86_64-*-cygwin*)
		;;
	i[34567]86-*-mingw* | x86_64-*-mingw*)
		;;
	i[34567]86-*-dragonfly* | x86_64-*-dragonfly*)
		;;
	i[34567]86-*-freebsd*)
		;;
	x86_64-*-freebsd*)
		tmake_file="${tmake_file} i386/t-freebsd64"
		;;
	ia64*-*-linux*)
		;;

	mips*-*-*)
		if test x$gnu_ld = xyes
		then
			target_cpu_default2="MASK_SPLIT_ADDRESSES"
		fi
		case ${target} in
			mips*el-*-*)
				tm_defines="TARGET_ENDIAN_DEFAULT=0 $tm_defines"
				;;
		esac
		if test x$with_arch != x; then
			default_mips_arch=$with_arch
		fi
		if test x$with_abi != x; then
			default_mips_abi=$with_abi
		fi
		case ${default_mips_arch} in
		    mips1)    tm_defines="$tm_defines MIPS_ISA_DEFAULT=1" ;;
		    mips2)    tm_defines="$tm_defines MIPS_ISA_DEFAULT=2" ;;
		    mips3)    tm_defines="$tm_defines MIPS_ISA_DEFAULT=3" ;;
		    mips4)    tm_defines="$tm_defines MIPS_ISA_DEFAULT=4" ;;
		    mips32)   tm_defines="$tm_defines MIPS_ISA_DEFAULT=32" ;;
		    mips32r2) tm_defines="$tm_defines MIPS_ISA_DEFAULT=33" ;;
		    mips32r6) tm_defines="$tm_defines MIPS_ISA_DEFAULT=37" ;;
		    mips64)   tm_defines="$tm_defines MIPS_ISA_DEFAULT=64" ;;
		    mips64r2) tm_defines="$tm_defines MIPS_ISA_DEFAULT=65" ;;
		    mips64r6) tm_defines="$tm_defines MIPS_ISA_DEFAULT=69" ;;
		esac
		case ${default_mips_abi} in
		    32)   tm_defines="$tm_defines MIPS_ABI_DEFAULT=ABI_32" ;;
		    o64)  tm_defines="$tm_defines MIPS_ABI_DEFAULT=ABI_O64" ;;
		    n32)  tm_defines="$tm_defines MIPS_ABI_DEFAULT=ABI_N32" ;;
		    64)   tm_defines="$tm_defines MIPS_ABI_DEFAULT=ABI_64" ;;
		    eabi) tm_defines="$tm_defines MIPS_ABI_DEFAULT=ABI_EABI" ;;
		esac
		tmake_file="mips/t-mips $tmake_file"
		;;

	powerpc*-*-* | rs6000-*-*)
		# FIXME: The PowerPC port uses the value set at compile time,
		# although it's only cosmetic.
		if test "x$with_cpu" != x
		then
			target_cpu_default2="\\\"$with_cpu\\\""
		fi
		out_file="${cpu_type}/${cpu_type}.c"
		c_target_objs="${c_target_objs} ${cpu_type}-c.o"
		cxx_target_objs="${cxx_target_objs} ${cpu_type}-c.o"
		d_target_objs="${d_target_objs} ${cpu_type}-d.o"
		tmake_file="${cpu_type}/t-${cpu_type} ${tmake_file}"
		;;

	sh[123456ble]*-*-* | sh-*-*)
		c_target_objs="${c_target_objs} sh-c.o"
		cxx_target_objs="${cxx_target_objs} sh-c.o"
		;;

	sparc*-*-*)
		# Some standard aliases.
		case x$with_cpu in
		xsparc)
			with_cpu=v7
			;;
		xsparcv9 | xsparc64)
			with_cpu=v9
			;;
		esac

		if test x$with_tune = x ; then
		      case ${target} in
		      *-leon-*)
			  with_tune=leon
			  ;;
		      *-leon[3-9]*)
			  with_tune=leon3
			  ;;
		      esac
		fi

		# The SPARC port checks this value at compile-time.
		target_cpu_default2="TARGET_CPU_$with_cpu"
		;;

	v850*-*-*)
		case "x$with_cpu" in
		x)
			;;
		xv850e | xv850e1 | xv850e2 | xv850e2v3 | xv850e3v5)
			target_cpu_default2="TARGET_CPU_$with_cpu"
			;;
		xv850es)
			target_cpu_default2="TARGET_CPU_v850e1"
			;;
		esac
		;;
	visium-*-*)
		target_cpu_default2="TARGET_CPU_$with_cpu"
		;;
esac

t=
all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 tune_64 schedule float mode fpu nan fp_32 odd_spreg_32 divide llsc mips-plt synci tls lxc1-sxc1 madd4"
for option in $all_defaults
do
	eval "val=\$with_"`echo $option | sed s/-/_/g`
	if test -n "$val"; then
		case " $supported_defaults " in
		*" $option "*)
			;;
		*)
			echo "This target does not support --with-$option." 2>&1
			echo "Valid --with options are: $supported_defaults" 2>&1
			exit 1
			;;
		esac

		if test "x$t" = x
		then
			t="{ \"$option\", \"$val\" }"
		else
			t="${t}, { \"$option\", \"$val\" }"
		fi
	fi
done

if test "x$t" = x
then
	configure_default_options="{ { NULL, NULL} }"
else
	configure_default_options="{ ${t} }"
fi

if test "$target_cpu_default2" != ""
then
	if test "$target_cpu_default" != ""
	then
		target_cpu_default="(${target_cpu_default}|${target_cpu_default2})"
	else
		target_cpu_default=$target_cpu_default2
	fi
fi

case ${target} in
i[34567]86-*-* | x86_64-*-*)
	if test x$enable_as_accelerator = xyes; then
		extra_programs="mkoffload\$(exeext)"
	fi
	;;
esac
