diff options
-rw-r--r-- | gcc/ChangeLog | 16 | ||||
-rw-r--r-- | gcc/config.gcc | 123 | ||||
-rwxr-xr-x | gcc/configure | 13 | ||||
-rw-r--r-- | gcc/configure.ac | 13 |
4 files changed, 165 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6c0628eaa98..8a6ea4e88e9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,22 @@ 2012-10-23 Ian Bolton <ian.bolton@arm.com> James Greenhalgh <james.greenhalgh@arm.com> Jim MacArthur <jim.macarthur@arm.com> + Marcus Shawcroft <marcus.shawcroft@arm.com> + Nigel Stephens <nigel.stephens@arm.com> + Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> + Richard Earnshaw <rearnsha@arm.com> + Sofiane Naci <sofiane.naci@arm.com> + Stephen Thomas <stephen.thomas@arm.com> + Tejas Belagod <tejas.belagod@arm.com> + Yufeng Zhang <yufeng.zhang@arm.com> + + * config.gcc: Add AArch64. + * configure.ac: Add AArch64 TLS support detection. + * configure: Regenerate. + +2012-10-23 Ian Bolton <ian.bolton@arm.com> + James Greenhalgh <james.greenhalgh@arm.com> + Jim MacArthur <jim.macarthur@arm.com> Chris Schlumberger-Socha <chris.schlumberger-socha@arm.com> Marcus Shawcroft <marcus.shawcroft@arm.com> Nigel Stephens <nigel.stephens@arm.com> diff --git a/gcc/config.gcc b/gcc/config.gcc index fbbf38943a9..58bbe5451cc 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -309,6 +309,13 @@ m32c*-*-*) tmake_file=m32c/t-m32c target_has_targetm_common=no ;; +aarch64*-*-*) + cpu_type=aarch64 + need_64bit_hwint=yes + extra_headers="arm_neon.h" + extra_objs="aarch64-builtins.o" + target_has_targetm_common=yes + ;; alpha*-*-*) cpu_type=alpha need_64bit_hwint=yes @@ -799,6 +806,27 @@ case ${target} in esac case ${target} in +aarch64*-*-elf) + tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h" + tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-elf-raw.h" + tmake_file="${tmake_file} aarch64/t-aarch64" + use_gcc_stdint=wrap + case $target in + aarch64_be-*) + tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1" + ;; + esac + ;; +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-linux.h" + tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-linux" + case $target in + aarch64_be-*) + tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1" + ;; + esac + ;; alpha*-*-linux*) tm_file="elfos.h ${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h glibc-stdint.h" extra_options="${extra_options} alpha/elf.opt" @@ -2998,6 +3026,92 @@ fi supported_defaults= case "${target}" in + aarch64*-*-*) + supported_defaults="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/,.*$//'` + else + base_id=`grep "^$pattern(\"$base_val\"," \ + ${srcdir}/config/aarch64/$def | \ + sed -e 's/^[^,]*,[ ]*//' | \ + sed -e 's/,.*$//'` + fi + + 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//'` + + if [ x"$base_ext" = x ] \ + || grep "^AARCH64_OPT_EXTENSION(\"$base_ext\"," \ + ${srcdir}/config/aarch64/aarch64-option-extensions.def \ + > /dev/null; then + + ext_on=`grep "^AARCH64_OPT_EXTENSION(\"$base_ext\"," \ + ${srcdir}/config/aarch64/aarch64-option-extensions.def | \ + sed -e 's/^[^,]*,[ ]*//' | \ + sed -e 's/,.*$//'` + ext_off=`grep "^AARCH64_OPT_EXTENSION(\"$base_ext\"," \ + ${srcdir}/config/aarch64/aarch64-option-extensions.def | \ + sed -e 's/^[^,]*,[ ]*[^,]*,[ ]*//' | \ + sed -e 's/,.*$//' | \ + sed -e 's/).*$//'` + + if [ $ext = $base_ext ]; then + # Adding extension + ext_mask="("$ext_mask") | ("$ext_on")" + else + # Removing extension + ext_mask="("$ext_mask") & ~("$ext_off")" + 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 @@ -3480,6 +3594,15 @@ 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_generic + else + target_cpu_default2=$target_cpu_cname + fi + ;; + arm*-*-*) if test x$target_cpu_cname = x then diff --git a/gcc/configure b/gcc/configure index a223c600d9a..4c90e9b7954 100755 --- a/gcc/configure +++ b/gcc/configure @@ -23189,6 +23189,19 @@ foo: tls_first_minor=19 tls_as_opt='--fatal-warnings' ;; + aarch64*-*-*) + conftest_s=' + .section ".tdata","awT",%progbits +foo: .long 25 + .text + adrp x0, :tlsgd:x + add x0, x0, #:tlsgd_lo12:x + bl __tls_get_addr + nop' + tls_first_major=2 + tls_first_minor=20 + tls_as_opt='--fatal-warnings' + ;; powerpc-*-*) conftest_s=' .section ".tdata","awT",@progbits diff --git a/gcc/configure.ac b/gcc/configure.ac index 17e1d86e349..f629d156122 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -2965,6 +2965,19 @@ foo: tls_first_minor=19 tls_as_opt='--fatal-warnings' ;; + aarch64*-*-*) + conftest_s=' + .section ".tdata","awT",%progbits +foo: .long 25 + .text + adrp x0, :tlsgd:x + add x0, x0, #:tlsgd_lo12:x + bl __tls_get_addr + nop' + tls_first_major=2 + tls_first_minor=20 + tls_as_opt='--fatal-warnings' + ;; powerpc-*-*) conftest_s=' .section ".tdata","awT",@progbits |