| # -*- shell-script -*- | 
 | #  Copyright (C) 2012-2019 Free Software Foundation, Inc. | 
 | #  Contributed by Richard Henderson <rth@redhat.com>. | 
 | # | 
 | #  This file is part of the GNU Atomic Library (libatomic). | 
 | # | 
 | #  Libatomic is free software; you can redistribute it and/or modify it | 
 | #  under the terms of the GNU General Public License as published by | 
 | #  the Free Software Foundation; either version 3 of the License, or | 
 | #  (at your option) any later version. | 
 | # | 
 | #  Libatomic is distributed in the hope that it will be useful, but WITHOUT ANY | 
 | #  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | 
 | #  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for | 
 | #  more details. | 
 | # | 
 | #  Under Section 7 of GPL version 3, you are granted additional | 
 | #  permissions described in the GCC Runtime Library Exception, version | 
 | #  3.1, as published by the Free Software Foundation. | 
 | # | 
 | #  You should have received a copy of the GNU General Public License and | 
 | #  a copy of the GCC Runtime Library Exception along with this program; | 
 | #  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see | 
 | #  <http://www.gnu.org/licenses/>. | 
 |  | 
 | # Map the target cpu to an ARCH sub-directory.  At the same time, | 
 | # work out any special compilation flags as necessary. | 
 |  | 
 | # Give operating systems the opportunity to discard XCFLAGS modifications based | 
 | # on ${target_cpu}.  For example to allow proper use of multilibs. | 
 | configure_tgt_pre_target_cpu_XCFLAGS="${XCFLAGS}" | 
 |  | 
 | case "${target_cpu}" in | 
 |   alpha*) | 
 | 	# fenv.c needs this option to generate inexact exceptions. | 
 | 	XCFLAGS="${XCFLAGS} -mfp-trap-mode=sui" | 
 | 	ARCH=alpha | 
 | 	;; | 
 |   rs6000 | powerpc*)	ARCH=powerpc ;; | 
 |   riscv*)		ARCH=riscv ;; | 
 |   sh*)			ARCH=sh ;; | 
 |  | 
 |   aarch64*) | 
 | 	ARCH=aarch64 | 
 | 	case "${target}" in | 
 | 	    aarch64*-*-linux*) | 
 | 		if test -n "$enable_aarch64_lse"; then | 
 | 		    try_ifunc=yes | 
 | 		fi | 
 | 		;; | 
 | 	esac | 
 | 	;; | 
 |   arm*) | 
 | 	ARCH=arm | 
 | 	case "${target}" in | 
 |             arm*-*-freebsd*) | 
 |                 ;; | 
 |             *) | 
 |                 # ??? Detect when -march=armv7 is already enabled. | 
 |                 try_ifunc=yes | 
 |                 ;; | 
 |         esac | 
 |         ;; | 
 |   sparc) | 
 | 	case " ${CC} ${CFLAGS} " in | 
 | 	  *" -m64 "*) | 
 | 	    ;; | 
 | 	  *) | 
 | 	    if test -z "$with_cpu"; then | 
 | 	      XCFLAGS="${XCFLAGS} -mcpu=v9" | 
 | 	    fi | 
 | 	esac | 
 | 	ARCH=sparc | 
 | 	;; | 
 |   sparc64|sparcv9) | 
 | 	case " ${CC} ${CFLAGS} " in | 
 | 	  *" -m32 "*) | 
 | 	    XCFLAGS="${XCFLAGS} -mcpu=v9" | 
 | 	    ;; | 
 | 	esac | 
 | 	ARCH=sparc | 
 | 	;; | 
 |  | 
 |   i[3456]86) | 
 | 	case " ${CC} ${CFLAGS} " in | 
 | 	  *" -m64 "*|*" -mx32 "*) | 
 | 	    ;; | 
 | 	  *) | 
 | 	    if test -z "$with_arch"; then | 
 | 	      XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}" | 
 | 	      XCFLAGS="${XCFLAGS} -fomit-frame-pointer" | 
 | 	    fi | 
 | 	esac | 
 | 	ARCH=x86 | 
 | 	# ??? Detect when -march=i686 is already enabled. | 
 | 	try_ifunc=yes | 
 | 	;; | 
 |   x86_64) | 
 | 	case " ${CC} ${CFLAGS} " in | 
 | 	  *" -m32 "*) | 
 | 	    XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic" | 
 | 	    XCFLAGS="${XCFLAGS} -fomit-frame-pointer" | 
 | 	    ;; | 
 | 	  *) | 
 | 	    ;; | 
 | 	esac | 
 | 	ARCH=x86 | 
 | 	# ??? Detect when -mcx16 is already enabled. | 
 | 	try_ifunc=yes | 
 | 	;; | 
 |  | 
 |   *)			ARCH="${target_cpu}" ;; | 
 | esac | 
 |  | 
 | # The cpu configury is always most relevant. | 
 | if test -d ${srcdir}/config/$ARCH ; then | 
 |   config_path="$ARCH" | 
 | fi | 
 |  | 
 | # Other system configury | 
 | case "${target}" in | 
 |   aarch64*-*-linux*) | 
 | 	# OS support for atomic primitives. | 
 | 	config_path="${config_path} linux/aarch64 posix" | 
 | 	;; | 
 |  | 
 |   arm*-*-linux*) | 
 | 	# OS support for atomic primitives. | 
 | 	config_path="${config_path} linux/arm posix" | 
 | 	;; | 
 |  | 
 |   s390*-*-linux*) | 
 | 	# OS support for atomic primitives. | 
 | 	config_path="${config_path} s390 posix" | 
 | 	;; | 
 |  | 
 |   *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu \ | 
 |   | *-*-netbsd* | *-*-freebsd* | *-*-openbsd* | *-*-dragonfly* \ | 
 |   | *-*-solaris2* | *-*-sysv4* | *-*-irix6* | *-*-osf* | *-*-hpux11* \ | 
 |   | *-*-darwin* | *-*-aix* | *-*-cygwin*) | 
 | 	# POSIX system.  The OS is supported. | 
 | 	config_path="${config_path} posix" | 
 | 	;; | 
 |  | 
 |   *-*-mingw*) | 
 | 	# OS support for atomic primitives. | 
 |         case ${target_thread_file} in | 
 |           win32) | 
 |             config_path="${config_path} mingw" | 
 |             ;; | 
 |           posix) | 
 |             config_path="${config_path} posix" | 
 |             ;; | 
 |         esac | 
 | 	;; | 
 |  | 
 |   *-*-rtems*) | 
 | 	XCFLAGS="${configure_tgt_pre_target_cpu_XCFLAGS}" | 
 | 	config_path="rtems" | 
 | 	;; | 
 |  | 
 |   *-*-elf*) | 
 | 	# ??? No target OS.  We could be targeting bare-metal kernel-mode, | 
 | 	# or user-mode for some custom OS.  If the target supports TAS, | 
 | 	# we can build our own spinlocks, given there are no signals. | 
 | 	# If the target supports disabling interrupts, we can work in | 
 | 	# kernel-mode, given the system is not multi-processor. | 
 | 	UNSUPPORTED=1 | 
 | 	;; | 
 |  | 
 |   *) | 
 | 	# Who are you? | 
 | 	UNSUPPORTED=1 | 
 | 	;; | 
 | esac | 
 |  | 
 | # glibc will pass hwcap to ifunc resolver functions as an argument. | 
 | # The type may be different on different architectures. | 
 | case "${target}" in | 
 |   aarch64*-*-*) | 
 | 	IFUNC_RESOLVER_ARGS="uint64_t hwcap" | 
 | 	;; | 
 |   *) | 
 | 	IFUNC_RESOLVER_ARGS="void" | 
 | 	;; | 
 | esac |