diff options
author | doko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca> | 2013-07-08 16:11:49 +0000 |
---|---|---|
committer | doko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca> | 2013-07-08 16:11:49 +0000 |
commit | cbc8113ad79a16353041b3e8ce8febc25bcf001f (patch) | |
tree | 7ff7ac7bdc57d135a193656b8c7cc4e32113e6b3 /debian/patches/gcc-linaro.diff | |
parent | ad1a181da93a8ff5b944c3f44c4f929f829a542c (diff) | |
download | gcc-48-cbc8113ad79a16353041b3e8ce8febc25bcf001f.tar.gz |
* Update the Linaro support to the 4.8-2013.07 release.
git-svn-id: svn://svn.debian.org/svn/gcccvs/branches/sid/gcc-4.8@6905 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
Diffstat (limited to 'debian/patches/gcc-linaro.diff')
-rw-r--r-- | debian/patches/gcc-linaro.diff | 3082 |
1 files changed, 2034 insertions, 1048 deletions
diff --git a/debian/patches/gcc-linaro.diff b/debian/patches/gcc-linaro.diff index c707e1d..432a613 100644 --- a/debian/patches/gcc-linaro.diff +++ b/debian/patches/gcc-linaro.diff @@ -1,12 +1,16 @@ -# DP: Changes for the Linaro 4.8-2013.06 release. +# DP: Changes for the Linaro 4.8-2013.07 release. -LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ - svn://gcc.gnu.org/svn/gcc/branches/linaro/gcc-4_8-branch@r199923 \ +LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@200355 \ + svn://gcc.gnu.org/svn/gcc/branches/linaro/gcc-4_8-branch@200692 \ | filterdiff --remove-timestamps --addoldprefix=a/src/ --addnewprefix=b/src/ --- a/src/libitm/ChangeLog.linaro +++ b/src/libitm/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -16,7 +20,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libgomp/ChangeLog.linaro +++ b/src/libgomp/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -26,7 +34,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libquadmath/ChangeLog.linaro +++ b/src/libquadmath/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -49,7 +61,18 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ current_++; --- a/src/libsanitizer/ChangeLog.linaro +++ b/src/libsanitizer/ChangeLog.linaro -@@ -0,0 +1,15 @@ +@@ -0,0 +1,26 @@ ++2013-06-20 Christophe Lyon <christophe.lyon@linaro.org> ++ ++ Backport from trunk r198683. ++ 2013-05-07 Christophe Lyon <christophe.lyon@linaro.org> ++ ++ * configure.tgt: Add ARM pattern. ++ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-06-04 Christophe Lyon <christophe.lyon@linaro.org> + + Backport from trunk r199606. @@ -65,9 +88,24 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ +2013-04-09 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + * GCC Linaro 4.8-2013.04 released. +--- a/src/libsanitizer/configure.tgt ++++ b/src/libsanitizer/configure.tgt +@@ -29,6 +29,8 @@ + ;; + sparc*-*-linux*) + ;; ++ arm*-*-linux*) ++ ;; + x86_64-*-darwin[1]* | i?86-*-darwin[1]*) + TSAN_SUPPORTED=no + ;; --- a/src/zlib/ChangeLog.linaro +++ b/src/zlib/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -77,7 +115,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libstdc++-v3/ChangeLog.linaro +++ b/src/libstdc++-v3/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -87,7 +129,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/intl/ChangeLog.linaro +++ b/src/intl/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -97,7 +143,16 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/ChangeLog.linaro +++ b/src/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,16 @@ ++2013-06-18 Rob Savoye <rob.savoye@linaro.org> ++ ++ gcc/ ++ * LINARO-VERSION: Bump version. ++ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -107,7 +162,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libmudflap/ChangeLog.linaro +++ b/src/libmudflap/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -117,7 +176,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/boehm-gc/ChangeLog.linaro +++ b/src/boehm-gc/ChangeLog.linaro -@@ -0,0 +1,20 @@ +@@ -0,0 +1,24 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -208,7 +271,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ # define MACH_TYPE "ARM32" --- a/src/include/ChangeLog.linaro +++ b/src/include/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -218,7 +285,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libiberty/ChangeLog.linaro +++ b/src/libiberty/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -228,7 +299,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/lto-plugin/ChangeLog.linaro +++ b/src/lto-plugin/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -238,7 +313,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/contrib/regression/ChangeLog.linaro +++ b/src/contrib/regression/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -260,7 +339,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ arm-linux-androideabi arm-uclinux_eabi arm-eabi \ --- a/src/contrib/ChangeLog.linaro +++ b/src/contrib/ChangeLog.linaro -@@ -0,0 +1,14 @@ +@@ -0,0 +1,18 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -277,7 +360,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/contrib/reghunt/ChangeLog.linaro +++ b/src/contrib/reghunt/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -287,7 +374,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libatomic/ChangeLog.linaro +++ b/src/libatomic/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -297,7 +388,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/config/ChangeLog.linaro +++ b/src/config/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -307,7 +402,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libbacktrace/ChangeLog.linaro +++ b/src/libbacktrace/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -317,7 +416,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libjava/libltdl/ChangeLog.linaro +++ b/src/libjava/libltdl/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -327,7 +430,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libjava/ChangeLog.linaro +++ b/src/libjava/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -337,7 +444,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libjava/classpath/ChangeLog.linaro +++ b/src/libjava/classpath/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -347,7 +458,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/gnattools/ChangeLog.linaro +++ b/src/gnattools/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -357,7 +472,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/maintainer-scripts/ChangeLog.linaro +++ b/src/maintainer-scripts/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -367,7 +486,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libgcc/ChangeLog.linaro +++ b/src/libgcc/ChangeLog.linaro -@@ -0,0 +1,17 @@ +@@ -0,0 +1,21 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -400,7 +523,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ typedef int TItype __attribute__ ((mode (TI))); --- a/src/libgcc/config/libbid/ChangeLog.linaro +++ b/src/libgcc/config/libbid/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -410,7 +537,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libdecnumber/ChangeLog.linaro +++ b/src/libdecnumber/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -421,7 +552,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ --- a/src/gcc/LINARO-VERSION +++ b/src/gcc/LINARO-VERSION @@ -0,0 +1 @@ -+4.8-2013.05-1~dev ++4.8-2013.06 --- a/src/gcc/hooks.c +++ b/src/gcc/hooks.c @@ -147,6 +147,14 @@ @@ -451,7 +582,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ HOST_WIDE_INT, --- a/src/gcc/c-family/ChangeLog.linaro +++ b/src/gcc/c-family/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -461,7 +596,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/gcc/java/ChangeLog.linaro +++ b/src/gcc/java/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -471,7 +610,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/gcc/c/ChangeLog.linaro +++ b/src/gcc/c/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -507,6 +650,19 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ /* Target hook is used to compare the target attributes in two functions to determine which function's features get higher priority. This is used during function multi-versioning to figure out the order in which two +--- a/src/gcc/rtlanal.c ++++ b/src/gcc/rtlanal.c +@@ -1199,6 +1199,10 @@ + if (find_reg_note (insn, REG_EQUAL, NULL_RTX)) + return 0; + ++ /* Check the code to be executed for COND_EXEC. */ ++ if (GET_CODE (pat) == COND_EXEC) ++ pat = COND_EXEC_CODE (pat); ++ + if (GET_CODE (pat) == SET && set_noop_p (pat)) + return 1; + --- a/src/gcc/configure +++ b/src/gcc/configure @@ -1658,7 +1658,8 @@ @@ -528,9 +684,56 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ fi +--- a/src/gcc/gensupport.c ++++ b/src/gcc/gensupport.c +@@ -1717,6 +1717,21 @@ + XVECEXP (insn, 1, 0) = pattern; + } + ++ if (XVEC (ce_elem->data, 3) != NULL) ++ { ++ rtvec attributes = rtvec_alloc (XVECLEN (insn, 4) ++ + XVECLEN (ce_elem->data, 3)); ++ int i = 0; ++ int j = 0; ++ for (i = 0; i < XVECLEN (insn, 4); i++) ++ RTVEC_ELT (attributes, i) = XVECEXP (insn, 4, i); ++ ++ for (j = 0; j < XVECLEN (ce_elem->data, 3); j++, i++) ++ RTVEC_ELT (attributes, i) = XVECEXP (ce_elem->data, 3, j); ++ ++ XVEC (insn, 4) = attributes; ++ } ++ + XSTR (insn, 2) = alter_test_for_insn (ce_elem, insn_elem); + XTMPL (insn, 3) = alter_output_for_insn (ce_elem, insn_elem, + alternatives, max_operand); +--- a/src/gcc/fold-const.c ++++ b/src/gcc/fold-const.c +@@ -2457,9 +2457,13 @@ + } + + if (TREE_CODE (arg0) != TREE_CODE (arg1) +- /* This is needed for conversions and for COMPONENT_REF. +- Might as well play it safe and always test this. */ +- || TREE_CODE (TREE_TYPE (arg0)) == ERROR_MARK ++ /* NOP_EXPR and CONVERT_EXPR are considered equal. */ ++ && !(CONVERT_EXPR_P (arg0) && CONVERT_EXPR_P (arg1))) ++ return 0; ++ ++ /* This is needed for conversions and for COMPONENT_REF. ++ Might as well play it safe and always test this. */ ++ if (TREE_CODE (TREE_TYPE (arg0)) == ERROR_MARK + || TREE_CODE (TREE_TYPE (arg1)) == ERROR_MARK + || TYPE_MODE (TREE_TYPE (arg0)) != TYPE_MODE (TREE_TYPE (arg1))) + return 0; --- a/src/gcc/objc/ChangeLog.linaro +++ b/src/gcc/objc/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -540,7 +743,180 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/gcc/ChangeLog.linaro +++ b/src/gcc/ChangeLog.linaro -@@ -0,0 +1,1075 @@ +@@ -0,0 +1,1248 @@ ++2013-07-03 Christophe Lyon <christophe.lyon@linaro.org> ++ ++ Revert backport from trunk r198928,198973,199203. ++ 2013-05-22 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> ++ ++ PR target/19599 ++ PR target/57340 ++ * config/arm/arm.c (any_sibcall_uses_r3): Rename to .. ++ (any_sibcall_could_use_r3): this and handle indirect calls. ++ (arm_get_frame_offsets): Rename use of any_sibcall_uses_r3. ++ ++ 2013-05-16 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> ++ ++ PR target/19599 ++ * config/arm/arm.c (arm_function_ok_for_sibcall): Add check ++ for NULL decl. ++ ++ 2013-05-15 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> ++ ++ PR target/19599 ++ * config/arm/predicates.md (call_insn_operand): New predicate. ++ * config/arm/constraints.md ("Cs", "Ss"): New constraints. ++ * config/arm/arm.md (*call_insn, *call_value_insn): Match only ++ if insn is not a tail call. ++ (*sibcall_insn, *sibcall_value_insn): Adjust for tailcalling through ++ registers. ++ * config/arm/arm.h (enum reg_class): New caller save register class. ++ (REG_CLASS_NAMES): Likewise. ++ (REG_CLASS_CONTENTS): Likewise. ++ * config/arm/arm.c (arm_function_ok_for_sibcall): Allow tailcalling ++ without decls. ++ ++2013-07-03 Christophe Lyon <christophe.lyon@linaro.org> ++ ++ Revert backport from mainline (r199438, r199439) ++ 2013-05-30 Zhenqiang Chen <zhenqiang.chen@linaro.org> ++ ++ * config/arm/arm.c (arm_add_cfa_adjust_cfa_note): New added. ++ (arm_emit_multi_reg_pop): Add REG_CFA_ADJUST_CFA notes. ++ (arm_emit_vfp_multi_reg_pop): Likewise. ++ (thumb2_emit_ldrd_pop): Likewise. ++ (arm_expand_epilogue): Add misc REG_CFA notes. ++ (arm_unwind_emit): Skip REG_CFA_ADJUST_CFA and REG_CFA_RESTORE. ++ ++ 2013-05-30 Bernd Schmidt <bernds@codesourcery.com> ++ Zhenqiang Chen <zhenqiang.chen@linaro.org> ++ ++ * config/arm/arm-protos.h: Add and update function protos. ++ * config/arm/arm.c (use_simple_return_p): New added. ++ (thumb2_expand_return): Check simple_return flag. ++ * config/arm/arm.md: Add simple_return and conditional simple_return. ++ * config/arm/iterators.md: Add iterator for return and simple_return. ++ * gcc.dg/shrink-wrap-alloca.c: New added. ++ * gcc.dg/shrink-wrap-pretend.c: New added. ++ * gcc.dg/shrink-wrap-sibcall.c: New added. ++ ++2013-07-03 Christophe Lyon <christophe.lyon@linaro.org> ++ ++ Backport from trunk r199640, 199705, 199733, 199734, 199739. ++ 2013-06-04 Kyrylo Tkachov <kyrylo.tkachov@arm.com> ++ ++ * rtl.def: Add extra fourth optional field to define_cond_exec. ++ * gensupport.c (process_one_cond_exec): Process attributes from ++ define_cond_exec. ++ * doc/md.texi: Document fourth field in define_cond_exec. ++ ++ 2013-06-05 Kyrylo Tkachov <kyrylo.tkachov@arm.com> ++ ++ * config/arm/arm.md (enabled_for_depr_it): New attribute. ++ (predicable_short_it): Likewise. ++ (predicated): Likewise. ++ (enabled): Handle above. ++ (define_cond_exec): Set predicated attribute to yes. ++ ++ 2013-06-06 Kyrylo Tkachov <kyrylo.tkachov@arm.com> ++ ++ * config/arm/sync.md (atomic_loaddi_1): ++ Disable predication for arm_restrict_it. ++ (arm_load_exclusive<mode>): Likewise. ++ (arm_load_exclusivesi): Likewise. ++ (arm_load_exclusivedi): Likewise. ++ (arm_load_acquire_exclusive<mode>): Likewise. ++ (arm_load_acquire_exclusivesi): Likewise. ++ (arm_load_acquire_exclusivedi): Likewise. ++ (arm_store_exclusive<mode>): Likewise. ++ (arm_store_exclusive<mode>): Likewise. ++ (arm_store_release_exclusivedi): Likewise. ++ (arm_store_release_exclusive<mode>): Likewise. ++ ++ 2013-06-06 Kyrylo Tkachov <kyrylo.tkachov@arm.com> ++ ++ * config/arm/arm-ldmstm.ml: Set "predicable_short_it" to "no" ++ where appropriate. ++ * config/arm/ldmstm.md: Regenerate. ++ ++ 2013-06-06 Kyrylo Tkachov <kyrylo.tkachov@arm.com> ++ ++ * config/arm/arm-fixed.md (add<mode>3,usadd<mode>3,ssadd<mode>3, ++ sub<mode>3, ussub<mode>3, sssub<mode>3, arm_ssatsihi_shift, ++ arm_usatsihi): Adjust alternatives for arm_restrict_it. ++ ++2013-07-02 Rob Savoye <rob.savoye@linaro.org> ++ ++ Backport from trunk 200096 ++ ++ 2013-06-14 Vidya Praveen <vidyapraveen@arm.com> ++ ++ * config/aarch64/aarch64-simd.md (aarch64_<su>mlal_lo<mode>): ++ New pattern. ++ (aarch64_<su>mlal_hi<mode>, aarch64_<su>mlsl_lo<mode>): Likewise. ++ (aarch64_<su>mlsl_hi<mode>, aarch64_<su>mlal<mode>): Likewise. ++ (aarch64_<su>mlsl<mode>): Likewise. ++ ++2013-07-02 Rob Savoye <rob.savoye@linaro.org> ++ ++ Backport from trunk 200062 ++ ++ 2013-06-13 Bin Cheng <bin.cheng@arm.com> ++ * fold-const.c (operand_equal_p): Consider NOP_EXPR and ++ CONVERT_EXPR as equal nodes. ++ ++2013-07-02 Rob Savoye <rob.savoye@linaro.org> ++ Backport from trunk 199810 ++ ++ 2013-06-07 Kyrylo Tkachov <kyrylo.tkachov@arm.com> ++ ++ * config/arm/arm.md (anddi3_insn): Remove duplicate alternatives. ++ Clean up alternatives. ++ ++2013-06-20 Rob Savoye <rob.savoye@linaro.org> ++ ++ Backport from trunk 200152 ++ 2013-06-17 Sofiane Naci <sofiane.naci@arm.com> ++ ++ * config/aarch64/aarch64-simd.md (aarch64_dup_lane<mode>): Add r<-w ++ alternative and update. ++ (aarch64_dup_lanedi): Delete. ++ * config/aarch64/arm_neon.h (vdup<bhsd>_lane_*): Update. ++ * config/aarch64/aarch64-simd-builtins.def: Update. ++ ++2013-06-20 Rob Savoye <rob.savoye@linaro.org> ++ ++ Backport from trunk 200061 ++ 2013-06-13 Bin Cheng <bin.cheng@arm.com> ++ ++ * rtlanal.c (noop_move_p): Check the code to be executed for ++ COND_EXEC. ++ ++2013-06-20 Rob Savoye <rob.savoye@linaro.org> ++ ++ Backport from trunk 199694 ++ 2013-06-05 Kyrylo Tkachov <kyrylo.tkachov@arm.com> ++ ++ * config/arm/arm.c (MAX_INSN_PER_IT_BLOCK): New macro. ++ (arm_option_override): Override arm_restrict_it where appropriate. ++ (thumb2_final_prescan_insn): Use MAX_INSN_PER_IT_BLOCK. ++ * config/arm/arm.opt (mrestrict-it): New command-line option. ++ * doc/invoke.texi: Document -mrestrict-it. ++ ++2013-06-20 Christophe Lyon <christophe.lyon@linaro.org> ++ ++ Backport from trunk r198683. ++ 2013-05-07 Christophe Lyon <christophe.lyon@linaro.org> ++ ++ * config/arm/arm.c (arm_asan_shadow_offset): New function. ++ (TARGET_ASAN_SHADOW_OFFSET): Define. ++ * config/arm/linux-eabi.h (ASAN_CC1_SPEC): Define. ++ (LINUX_OR_ANDROID_CC): Add ASAN_CC1_SPEC. ++ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-06-06 Zhenqiang Chen <zhenqiang.chen@linaro.org> + + Backport from mainline (r199438, r199439) @@ -1801,19 +2177,6 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ +/* { dg-final { scan-assembler-times "ldaex\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 4 } } */ +/* { dg-final { scan-assembler-times "stlex" 4 } } */ +/* { dg-final { scan-assembler-not "dmb" } } */ ---- a/src/gcc/testsuite/gcc.target/arm/pr19599.c -+++ b/src/gcc/testsuite/gcc.target/arm/pr19599.c -@@ -0,0 +1,10 @@ -+/* { dg-skip-if "need at least armv5te" { *-*-* } { "-march=armv[234]*" } { "" } } */ -+/* { dg-options "-O2 -march=armv5te -marm" } */ -+/* { dg-final { scan-assembler "bx" } } */ -+ -+int (*indirect_func)(); -+ -+int indirect_call() -+{ -+ return indirect_func(); -+} --- a/src/gcc/testsuite/gcc.target/arm/atomic-op-seq_cst.c +++ b/src/gcc/testsuite/gcc.target/arm/atomic-op-seq_cst.c @@ -0,0 +1,10 @@ @@ -2042,6 +2405,15 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ +/* { dg-final {scan-assembler-times "vshr" 0} } */ --- a/src/gcc/testsuite/gcc.target/arm/unaligned-memcpy-2.c +++ b/src/gcc/testsuite/gcc.target/arm/unaligned-memcpy-2.c +@@ -4,7 +4,7 @@ + + #include <string.h> + +-char dest[16]; ++char dest[16] = { 0 }; + + void aligned_dest (char *src) + { @@ -14,7 +14,10 @@ /* Expect a multi-word store for the main part of the copy, but subword loads/stores for the remainder. */ @@ -2248,6 +2620,15 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ +/* { dg-final { scan-assembler-times "vselvs.f64\td\[0-9\]+" 1 } } */ --- a/src/gcc/testsuite/gcc.target/arm/unaligned-memcpy-3.c +++ b/src/gcc/testsuite/gcc.target/arm/unaligned-memcpy-3.c +@@ -4,7 +4,7 @@ + + #include <string.h> + +-char src[16]; ++char src[16] = {0}; + + void aligned_src (char *dest) + { @@ -14,8 +14,11 @@ /* Expect a multi-word load for the main part of the copy, but subword loads/stores for the remainder. */ @@ -2312,6 +2693,17 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ +/* { dg-final { scan-assembler-times "vselge.f64\td\[0-9\]+" 1 } } */ --- a/src/gcc/testsuite/gcc.target/arm/unaligned-memcpy-4.c +++ b/src/gcc/testsuite/gcc.target/arm/unaligned-memcpy-4.c +@@ -4,8 +4,8 @@ + + #include <string.h> + +-char src[16]; +-char dest[16]; ++char src[16] = { 0 }; ++char dest[16] = { 0 }; + + void aligned_both (void) + { @@ -14,5 +14,9 @@ /* We know both src and dest to be aligned: expect multiword loads/stores. */ @@ -2395,20 +2787,6 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ +/* { dg-final { scan-assembler-times "ldrexh\tr\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */ +/* { dg-final { scan-assembler-times "strexh\t...?, r\[0-9\]+, \\\[r\[0-9\]+\\\]" 6 } } */ +/* { dg-final { scan-assembler-not "dmb" } } */ ---- a/src/gcc/testsuite/gcc.target/arm/pr40887.c -+++ b/src/gcc/testsuite/gcc.target/arm/pr40887.c -@@ -2,9 +2,9 @@ - /* { dg-options "-O2 -march=armv5te" } */ - /* { dg-final { scan-assembler "blx" } } */ - --int (*indirect_func)(); -+int (*indirect_func)(int x); - - int indirect_call() - { -- return indirect_func(); -+ return indirect_func(20) + indirect_func (40); - } --- a/src/gcc/testsuite/gcc.target/arm/vect-rounding-ceilf.c +++ b/src/gcc/testsuite/gcc.target/arm/vect-rounding-ceilf.c @@ -0,0 +1,18 @@ @@ -2724,6 +3102,334 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ +{ + return __atomic_fetch_or (&v, a, __ATOMIC_ACQ_REL); +} +--- a/src/gcc/testsuite/gcc.target/aarch64/vect_smlal_1.c ++++ b/src/gcc/testsuite/gcc.target/aarch64/vect_smlal_1.c +@@ -0,0 +1,325 @@ ++/* { dg-do run } */ ++/* { dg-options "-O3 -fno-inline -save-temps -fno-vect-cost-model" } */ ++ ++typedef signed char S8_t; ++typedef signed short S16_t; ++typedef signed int S32_t; ++typedef signed long S64_t; ++typedef signed char *__restrict__ pS8_t; ++typedef signed short *__restrict__ pS16_t; ++typedef signed int *__restrict__ pS32_t; ++typedef signed long *__restrict__ pS64_t; ++typedef unsigned char U8_t; ++typedef unsigned short U16_t; ++typedef unsigned int U32_t; ++typedef unsigned long U64_t; ++typedef unsigned char *__restrict__ pU8_t; ++typedef unsigned short *__restrict__ pU16_t; ++typedef unsigned int *__restrict__ pU32_t; ++typedef unsigned long *__restrict__ pU64_t; ++ ++extern void abort (); ++ ++void ++test_addS64_tS32_t4 (pS64_t a, pS32_t b, pS32_t c) ++{ ++ int i; ++ for (i = 0; i < 4; i++) ++ a[i] += (S64_t) b[i] * (S64_t) c[i]; ++} ++ ++/* { dg-final { scan-assembler "smlal\tv\[0-9\]+\.2d" } } */ ++/* { dg-final { scan-assembler "smlal2\tv\[0-9\]+\.2d" } } */ ++ ++void ++test_addS32_tS16_t8 (pS32_t a, pS16_t b, pS16_t c) ++{ ++ int i; ++ for (i = 0; i < 8; i++) ++ a[i] += (S32_t) b[i] * (S32_t) c[i]; ++} ++ ++/* { dg-final { scan-assembler "smlal\tv\[0-9\]+\.4s" } } */ ++/* { dg-final { scan-assembler "smlal2\tv\[0-9\]+\.4s" } } */ ++ ++void ++test_addS16_tS8_t16 (pS16_t a, pS8_t b, pS8_t c) ++{ ++ int i; ++ for (i = 0; i < 16; i++) ++ a[i] += (S16_t) b[i] * (S16_t) c[i]; ++} ++ ++void ++test_addS16_tS8_t16_neg0 (pS16_t a, pS8_t b, pS8_t c) ++{ ++ int i; ++ for (i = 0; i < 16; i++) ++ a[i] += (S16_t) -b[i] * (S16_t) -c[i]; ++} ++ ++void ++test_addS16_tS8_t16_neg1 (pS16_t a, pS8_t b, pS8_t c) ++{ ++ int i; ++ for (i = 0; i < 16; i++) ++ a[i] -= (S16_t) b[i] * (S16_t) -c[i]; ++} ++ ++void ++test_addS16_tS8_t16_neg2 (pS16_t a, pS8_t b, pS8_t c) ++{ ++ int i; ++ for (i = 0; i < 16; i++) ++ a[i] -= (S16_t) -b[i] * (S16_t) c[i]; ++} ++ ++/* { dg-final { scan-assembler-times "smlal\tv\[0-9\]+\.8h" 4 } } */ ++/* { dg-final { scan-assembler-times "smlal2\tv\[0-9\]+\.8h" 4 } } */ ++ ++void ++test_subS64_tS32_t4 (pS64_t a, pS32_t b, pS32_t c) ++{ ++ int i; ++ for (i = 0; i < 4; i++) ++ a[i] -= (S64_t) b[i] * (S64_t) c[i]; ++} ++ ++/* { dg-final { scan-assembler "smlsl\tv\[0-9\]+\.2d" } } */ ++/* { dg-final { scan-assembler "smlsl2\tv\[0-9\]+\.2d" } } */ ++ ++void ++test_subS32_tS16_t8 (pS32_t a, pS16_t b, pS16_t c) ++{ ++ int i; ++ for (i = 0; i < 8; i++) ++ a[i] -= (S32_t) b[i] * (S32_t) c[i]; ++} ++ ++/* { dg-final { scan-assembler "smlsl\tv\[0-9\]+\.4s" } } */ ++/* { dg-final { scan-assembler "smlsl2\tv\[0-9\]+\.4s" } } */ ++ ++void ++test_subS16_tS8_t16 (pS16_t a, pS8_t b, pS8_t c) ++{ ++ int i; ++ for (i = 0; i < 16; i++) ++ a[i] -= (S16_t) b[i] * (S16_t) c[i]; ++} ++ ++void ++test_subS16_tS8_t16_neg0 (pS16_t a, pS8_t b, pS8_t c) ++{ ++ int i; ++ for (i = 0; i < 16; i++) ++ a[i] += (S16_t) -b[i] * (S16_t) c[i]; ++} ++ ++void ++test_subS16_tS8_t16_neg1 (pS16_t a, pS8_t b, pS8_t c) ++{ ++ int i; ++ for (i = 0; i < 16; i++) ++ a[i] += (S16_t) b[i] * (S16_t) -c[i]; ++} ++ ++void ++test_subS16_tS8_t16_neg2 (pS16_t a, pS8_t b, pS8_t c) ++{ ++ int i; ++ for (i = 0; i < 16; i++) ++ a[i] += -((S16_t) b[i] * (S16_t) c[i]); ++} ++ ++void ++test_subS16_tS8_t16_neg3 (pS16_t a, pS8_t b, pS8_t c) ++{ ++ int i; ++ for (i = 0; i < 16; i++) ++ a[i] -= (S16_t) -b[i] * (S16_t) -c[i]; ++} ++ ++/* { dg-final { scan-assembler-times "smlsl\tv\[0-9\]+\.8h" 5 } } */ ++/* { dg-final { scan-assembler-times "smlsl2\tv\[0-9\]+\.8h" 5 } } */ ++ ++void ++test_addU64_tU32_t4 (pU64_t a, pU32_t b, pU32_t c) ++{ ++ int i; ++ for (i = 0; i < 4; i++) ++ a[i] += (U64_t) b[i] * (U64_t) c[i]; ++} ++ ++/* { dg-final { scan-assembler "umlal\tv\[0-9\]+\.2d" } } */ ++/* { dg-final { scan-assembler "umlal2\tv\[0-9\]+\.2d" } } */ ++ ++void ++test_addU32_tU16_t8 (pU32_t a, pU16_t b, pU16_t c) ++{ ++ int i; ++ for (i = 0; i < 8; i++) ++ a[i] += (U32_t) b[i] * (U32_t) c[i]; ++} ++ ++/* { dg-final { scan-assembler "umlal\tv\[0-9\]+\.4s" } } */ ++/* { dg-final { scan-assembler "umlal2\tv\[0-9\]+\.4s" } } */ ++ ++void ++test_addU16_tU8_t16 (pU16_t a, pU8_t b, pU8_t c) ++{ ++ int i; ++ for (i = 0; i < 16; i++) ++ a[i] += (U16_t) b[i] * (U16_t) c[i]; ++} ++ ++/* { dg-final { scan-assembler "umlal\tv\[0-9\]+\.8h" } } */ ++/* { dg-final { scan-assembler "umlal2\tv\[0-9\]+\.8h" } } */ ++ ++void ++test_subU64_tU32_t4 (pU64_t a, pU32_t b, pU32_t c) ++{ ++ int i; ++ for (i = 0; i < 4; i++) ++ a[i] -= (U64_t) b[i] * (U64_t) c[i]; ++} ++ ++/* { dg-final { scan-assembler "umlsl\tv\[0-9\]+\.2d" } } */ ++/* { dg-final { scan-assembler "umlsl2\tv\[0-9\]+\.2d" } } */ ++ ++void ++test_subU32_tU16_t8 (pU32_t a, pU16_t b, pU16_t c) ++{ ++ int i; ++ for (i = 0; i < 8; i++) ++ a[i] -= (U32_t) b[i] * (U32_t) c[i]; ++} ++ ++/* { dg-final { scan-assembler "umlsl\tv\[0-9\]+\.4s" } } */ ++/* { dg-final { scan-assembler "umlsl2\tv\[0-9\]+\.4s" } } */ ++ ++void ++test_subU16_tU8_t16 (pU16_t a, pU8_t b, pU8_t c) ++{ ++ int i; ++ for (i = 0; i < 16; i++) ++ a[i] -= (U16_t) b[i] * (U16_t) c[i]; ++} ++ ++/* { dg-final { scan-assembler "umlsl\tv\[0-9\]+\.8h" } } */ ++/* { dg-final { scan-assembler "umlsl2\tv\[0-9\]+\.8h" } } */ ++ ++ ++S64_t add_rS64[4] = { 6, 7, -4, -3 }; ++S32_t add_rS32[8] = { 6, 7, -4, -3, 10, 11, 0, 1 }; ++S16_t add_rS16[16] = ++ { 6, 7, -4, -3, 10, 11, 0, 1, 14, 15, 4, 5, 18, 19, 8, 9 }; ++ ++S64_t sub_rS64[4] = { 0, 1, 2, 3 }; ++S32_t sub_rS32[8] = { 0, 1, 2, 3, 4, 5, 6, 7 }; ++S16_t sub_rS16[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; ++ ++U64_t add_rU64[4] = { 0x6, 0x7, 0x2fffffffc, 0x2fffffffd }; ++ ++U32_t add_rU32[8] = ++{ ++ 0x6, 0x7, 0x2fffc, 0x2fffd, ++ 0xa, 0xb, 0x30000, 0x30001 ++}; ++ ++U16_t add_rU16[16] = ++{ ++ 0x6, 0x7, 0x2fc, 0x2fd, 0xa, 0xb, 0x300, 0x301, ++ 0xe, 0xf, 0x304, 0x305, 0x12, 0x13, 0x308, 0x309 ++}; ++ ++U64_t sub_rU64[4] = { 0, 1, 2, 3 }; ++U32_t sub_rU32[8] = { 0, 1, 2, 3, 4, 5, 6, 7 }; ++U16_t sub_rU16[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; ++ ++S8_t neg_r[16] = { -6, -5, 8, 9, -2, -1, 12, 13, 2, 3, 16, 17, 6, 7, 20, 21 }; ++ ++S64_t S64_ta[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; ++S32_t S32_tb[16] = { 2, 2, -2, -2, 2, 2, -2, -2, 2, 2, -2, -2, 2, 2, -2, -2 }; ++S32_t S32_tc[16] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; ++ ++S32_t S32_ta[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; ++S16_t S16_tb[16] = { 2, 2, -2, -2, 2, 2, -2, -2, 2, 2, -2, -2, 2, 2, -2, -2 }; ++S16_t S16_tc[16] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; ++ ++S16_t S16_ta[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; ++S8_t S8_tb[16] = { 2, 2, -2, -2, 2, 2, -2, -2, 2, 2, -2, -2, 2, 2, -2, -2 }; ++S8_t S8_tc[16] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; ++ ++ ++#define CHECK(T,N,AS,US) \ ++do \ ++ { \ ++ for (i = 0; i < N; i++) \ ++ if (S##T##_ta[i] != AS##_r##US##T[i]) \ ++ abort (); \ ++ } \ ++while (0) ++ ++#define SCHECK(T,N,AS) CHECK(T,N,AS,S) ++#define UCHECK(T,N,AS) CHECK(T,N,AS,U) ++ ++#define NCHECK(RES) \ ++do \ ++ { \ ++ for (i = 0; i < 16; i++) \ ++ if (S16_ta[i] != RES[i]) \ ++ abort (); \ ++ } \ ++while (0) ++ ++ ++int ++main () ++{ ++ int i; ++ ++ test_addS64_tS32_t4 (S64_ta, S32_tb, S32_tc); ++ SCHECK (64, 4, add); ++ test_addS32_tS16_t8 (S32_ta, S16_tb, S16_tc); ++ SCHECK (32, 8, add); ++ test_addS16_tS8_t16 (S16_ta, S8_tb, S8_tc); ++ SCHECK (16, 16, add); ++ test_subS64_tS32_t4 (S64_ta, S32_tb, S32_tc); ++ SCHECK (64, 4, sub); ++ test_subS32_tS16_t8 (S32_ta, S16_tb, S16_tc); ++ SCHECK (32, 8, sub); ++ test_subS16_tS8_t16 (S16_ta, S8_tb, S8_tc); ++ SCHECK (16, 16, sub); ++ ++ test_addU64_tU32_t4 (S64_ta, S32_tb, S32_tc); ++ UCHECK (64, 4, add); ++ test_addU32_tU16_t8 (S32_ta, S16_tb, S16_tc); ++ UCHECK (32, 8, add); ++ test_addU16_tU8_t16 (S16_ta, S8_tb, S8_tc); ++ UCHECK (16, 16, add); ++ test_subU64_tU32_t4 (S64_ta, S32_tb, S32_tc); ++ UCHECK (64, 4, sub); ++ test_subU32_tU16_t8 (S32_ta, S16_tb, S16_tc); ++ UCHECK (32, 8, sub); ++ test_subU16_tU8_t16 (S16_ta, S8_tb, S8_tc); ++ UCHECK (16, 16, sub); ++ ++ test_addS16_tS8_t16_neg0 (S16_ta, S8_tb, S8_tc); ++ NCHECK (add_rS16); ++ test_subS16_tS8_t16_neg0 (S16_ta, S8_tb, S8_tc); ++ NCHECK (sub_rS16); ++ test_addS16_tS8_t16_neg1 (S16_ta, S8_tb, S8_tc); ++ NCHECK (add_rS16); ++ test_subS16_tS8_t16_neg1 (S16_ta, S8_tb, S8_tc); ++ NCHECK (sub_rS16); ++ test_addS16_tS8_t16_neg2 (S16_ta, S8_tb, S8_tc); ++ NCHECK (add_rS16); ++ test_subS16_tS8_t16_neg2 (S16_ta, S8_tb, S8_tc); ++ NCHECK (sub_rS16); ++ test_subS16_tS8_t16_neg3 (S16_ta, S8_tb, S8_tc); ++ NCHECK (neg_r); ++ ++ return 0; ++} ++ ++/* { dg-final { cleanup-saved-temps } } */ --- a/src/gcc/testsuite/gcc.target/aarch64/extr.c +++ b/src/gcc/testsuite/gcc.target/aarch64/extr.c @@ -0,0 +1,34 @@ @@ -4036,7 +4742,8 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ +++ b/src/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c @@ -1,8 +1,14 @@ /* { dg-do compile } */ - /* { dg-options "-O2" } */ +-/* { dg-options "-O2" } */ ++/* { dg-options "-O2 -dp" } */ -#include "../../../config/aarch64/arm_neon.h" +#include <arm_neon.h> @@ -4185,7 +4892,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ } /* { dg-final { scan-assembler-times "\\tcmle\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */ -@@ -107,15 +161,24 @@ +@@ -107,18 +161,27 @@ uint64x1_t test_vclezd_s64 (int64x1_t a) { @@ -4212,13 +4919,35 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + return res; } - /* { dg-final { scan-assembler-times "\\tdup\\tb\[0-9\]+, v\[0-9\]+\.b" 2 } } */ +-/* { dg-final { scan-assembler-times "\\tdup\\tb\[0-9\]+, v\[0-9\]+\.b" 2 } } */ ++/* { dg-final { scan-assembler-times "aarch64_dup_lane_scalarv16qi" 2 } } */ + + int8x1_t + test_vdupb_lane_s8 (int8x16_t a) +@@ -132,7 +195,7 @@ + return vdupb_lane_u8 (a, 2); + } + +-/* { dg-final { scan-assembler-times "\\tdup\\th\[0-9\]+, v\[0-9\]+\.h" 2 } } */ ++/* { dg-final { scan-assembler-times "aarch64_dup_lane_scalarv8hi" 2 } } */ + + int16x1_t + test_vduph_lane_s16 (int16x8_t a) +@@ -146,7 +209,7 @@ + return vduph_lane_u16 (a, 2); + } + +-/* { dg-final { scan-assembler-times "\\tdup\\ts\[0-9\]+, v\[0-9\]+\.s" 2 } } */ ++/* { dg-final { scan-assembler-times "aarch64_dup_lane_scalarv4si" 2 } } */ + + int32x1_t + test_vdups_lane_s32 (int32x4_t a) @@ -160,18 +223,18 @@ return vdups_lane_u32 (a, 2); } -/* { dg-final { scan-assembler-times "\\tdup\\td\[0-9\]+, v\[0-9\]+\.d" 2 } } */ -+/* { dg-final { scan-assembler-times "\\tumov\\tx\[0-9\]+, v\[0-9\]+\.d" 2 } } */ ++/* { dg-final { scan-assembler-times "aarch64_dup_lane_scalarv2di" 2 } } */ int64x1_t test_vdupd_lane_s64 (int64x2_t a) @@ -6465,9 +7194,136 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ # Return 1 if this is a ARM target with NEON enabled. proc check_effective_target_arm_neon { } { +@@ -4591,6 +4668,33 @@ + return 0 + } + ++# Return 1 if programs are intended to be run on hardware rather than ++# on a simulator ++ ++proc check_effective_target_hw { } { ++ ++ # All "src/sim" simulators set this one. ++ if [board_info target exists is_simulator] { ++ if [board_info target is_simulator] { ++ return 0 ++ } else { ++ return 1 ++ } ++ } ++ ++ # The "sid" simulators don't set that one, but at least they set ++ # this one. ++ if [board_info target exists slow_simulator] { ++ if [board_info target slow_simulator] { ++ return 0 ++ } else { ++ return 1 ++ } ++ } ++ ++ return 1 ++} ++ + # Return 1 if the target is a VxWorks kernel. + + proc check_effective_target_vxworks_kernel { } { --- a/src/gcc/testsuite/ChangeLog.linaro +++ b/src/gcc/testsuite/ChangeLog.linaro -@@ -0,0 +1,374 @@ +@@ -0,0 +1,467 @@ ++2013-07-03 Christophe Lyon <christophe.lyon@linaro.org> ++ ++ Revert backport from trunk r198928. ++ 2013-05-15 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> ++ ++ PR target/19599 ++ * gcc.target/arm/pr40887.c: Adjust testcase. ++ * gcc.target/arm/pr19599.c: New test. ++ ++2013-07-03 Christophe Lyon <christophe.lyon@linaro.org> ++ ++ Revert backport from trunk 199439, 199533 ++ 2013-05-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> ++ ++ * gcc.dg/shrink-wrap-alloca.c: Use __builtin_alloca. ++ ++ 2013-05-30 Zhenqiang Chen <zhenqiang.chen@linaro.org> ++ ++ * gcc.dg/shrink-wrap-alloca.c: New added. ++ * gcc.dg/shrink-wrap-pretend.c: New added. ++ * gcc.dg/shrink-wrap-sibcall.c: New added. ++ ++2013-07-02 Rob Savoye <rob.savoye@linaro.org> ++ ++ Backport from trunk 200096 ++ ++ 2013-06-14 Vidya Praveen <vidyapraveen@arm.com> ++ ++ * gcc.target/aarch64/vect_smlal_1.c: New file. ++ ++2013-07-02 Rob Savoye <rob.savoye@linaro.org> ++ ++ Backport from trunk 200019 ++ 2013-06-12 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> ++ ++ * gcc.target/arm/unaligned-memcpy-4.c (src, dst): Initialize ++ to ensure alignment. ++ * gcc.target/arm/unaligned-memcpy-3.c (src): Likewise. ++ ++2013-06-20 Rob Savoye <rob.savoye@linaro.org> ++ ++ Backport from trunk 200152 ++ 2013-06-17 Sofiane Naci <sofiane.naci@arm.com> ++ ++ * gcc.target/aarch64/scalar_intrinsics.c: Update. ++ ++2013-06-20 Rob Savoye <rob.savoye@linaro.org> ++ ++ Backport from trunk 200148 ++ 2013-06-17 Kyrylo Tkachov <kyrylo.tkachov@arm.com> ++ ++ * gcc.target/arm/unaligned-memcpy-2.c (dest): Initialize to ++ ensure alignment. ++ ++2013-06-20 Rob Savoye <rob.savoye@linaro.org> ++ ++ Backport from trunk 199533 ++ 2013-05-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> ++ ++ * gcc.dg/shrink-wrap-alloca.c: Use __builtin_alloca. ++ ++2013-06-20 Christophe Lyon <christophe.lyon@linaro.org> ++ ++ Backport from trunk r198683. ++ 2013-05-07 Christophe Lyon <christophe.lyon@linaro.org> ++ ++ * lib/target-supports.exp (check_effective_target_hw): New ++ function. ++ * c-c++-common/asan/clone-test-1.c: Call ++ check_effective_target_hw. ++ * c-c++-common/asan/rlimit-mmap-test-1.c: Likewise. ++ * c-c++-common/asan/heap-overflow-1.c: Update regexps to accept ++ possible decorations. ++ * c-c++-common/asan/null-deref-1.c: Likewise. ++ * c-c++-common/asan/stack-overflow-1.c: Likewise. ++ * c-c++-common/asan/strncpy-overflow-1.c: Likewise. ++ * c-c++-common/asan/use-after-free-1.c: Likewise. ++ * g++.dg/asan/deep-thread-stack-1.C: Likewise. ++ * g++.dg/asan/large-func-test-1.C: Likewise. ++ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ ++2013-06-06 Zhenqiang Chen <zhenqiang.chen@linaro.org> ++ ++ Backport from mainline r199439. ++ 2013-05-30 Zhenqiang Chen <zhenqiang.chen@linaro.org> ++ ++ * gcc.dg/shrink-wrap-alloca.c: New added. ++ * gcc.dg/shrink-wrap-pretend.c: New added. ++ * gcc.dg/shrink-wrap-sibcall.c: New added. ++ +2013-06-05 Christophe Lyon <christophe.lyon@linaro.org> + + Backport from trunk r199658. @@ -6842,61 +7698,6 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * gcc.target/aarch64/vect-fp-compile.c: Check for fabd + instruction in assembly. + * gcc.target/aarch64/vect-fp.x: Add fabd test function. ---- a/src/gcc/testsuite/gcc.dg/shrink-wrap-alloca.c -+++ b/src/gcc/testsuite/gcc.dg/shrink-wrap-alloca.c -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -g" } */ -+ -+extern int * alloca (int); -+ -+int *p; -+ -+void -+test (int a) -+{ -+ if (a > 0) -+ p = alloca (4); -+} ---- a/src/gcc/testsuite/gcc.dg/shrink-wrap-pretend.c -+++ b/src/gcc/testsuite/gcc.dg/shrink-wrap-pretend.c -@@ -0,0 +1,36 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -g" } */ -+ -+#include <stdlib.h> -+#include <stdio.h> -+#include <stdarg.h> -+ -+#define DEBUG_BUFFER_SIZE 80 -+int unifi_debug = 5; -+ -+void -+unifi_trace (void* ospriv, int level, const char *fmt, ...) -+{ -+ static char s[DEBUG_BUFFER_SIZE]; -+ va_list args; -+ unsigned int len; -+ -+ if (!ospriv) -+ return; -+ -+ if (unifi_debug >= level) -+ { -+ va_start (args, fmt); -+ len = vsnprintf (&(s)[0], (DEBUG_BUFFER_SIZE), fmt, args); -+ va_end (args); -+ -+ if (len >= DEBUG_BUFFER_SIZE) -+ { -+ (s)[DEBUG_BUFFER_SIZE - 2] = '\n'; -+ (s)[DEBUG_BUFFER_SIZE - 1] = 0; -+ } -+ -+ printf ("%s", s); -+ } -+} -+ --- a/src/gcc/testsuite/gcc.dg/debug/pr57351.c +++ b/src/gcc/testsuite/gcc.dg/debug/pr57351.c @@ -0,0 +1,54 @@ @@ -6954,38 +7755,124 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + } + } +} ---- a/src/gcc/testsuite/gcc.dg/shrink-wrap-sibcall.c -+++ b/src/gcc/testsuite/gcc.dg/shrink-wrap-sibcall.c -@@ -0,0 +1,26 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -g" } */ -+ -+unsigned char a, b, d, f, g; -+ -+int test (void); -+ -+int -+baz (int c) -+{ -+ if (c == 0) return test (); -+ if (b & 1) -+ { -+ g = 0; -+ int e = (a & 0x0f) - (g & 0x0f); -+ -+ if (!a) b |= 0x80; -+ a = e + test (); -+ f = g/5 + a*3879 + b *2985; -+ } -+ else -+ { -+ f = g + a*39879 + b *25; -+ } -+ return test (); -+} +--- a/src/gcc/testsuite/g++.dg/asan/large-func-test-1.C ++++ b/src/gcc/testsuite/g++.dg/asan/large-func-test-1.C +@@ -37,9 +37,9 @@ + + // { dg-output "ERROR: AddressSanitizer:? heap-buffer-overflow on address\[^\n\r]*" } + // { dg-output "0x\[0-9a-f\]+ at pc 0x\[0-9a-f\]+ bp 0x\[0-9a-f\]+ sp 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } +-// { dg-output "READ of size 4 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } ++// { dg-output "\[^\n\r]*READ of size 4 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } + // { dg-output " #0 0x\[0-9a-f\]+ (in \[^\n\r]*LargeFunction\[^\n\r]*(large-func-test-1.C:18|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } +-// { dg-output "0x\[0-9a-f\]+ is located 44 bytes to the right of 400-byte region.*(\n|\r\n|\r)" } +-// { dg-output "allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } ++// { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 44 bytes to the right of 400-byte region.*(\n|\r\n|\r)" } ++// { dg-output "\[^\n\r]*allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } + // { dg-output " #0( 0x\[0-9a-f\]+ (in _*(interceptor_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } + // { dg-output " #1|) 0x\[0-9a-f\]+ (in (operator new|_*_Zn\[aw\]\[mj\])|\[(\])\[^\n\r]*(\n|\r\n|\r)" } +--- a/src/gcc/testsuite/g++.dg/asan/deep-thread-stack-1.C ++++ b/src/gcc/testsuite/g++.dg/asan/deep-thread-stack-1.C +@@ -45,9 +45,9 @@ + } + + // { dg-output "ERROR: AddressSanitizer: heap-use-after-free.*(\n|\r\n|\r)" } +-// { dg-output "WRITE of size 4 at 0x\[0-9a-f\]+ thread T(\[0-9\]+).*(\n|\r\n|\r)" } +-// { dg-output "freed by thread T(\[0-9\]+) here:.*(\n|\r\n|\r)" } +-// { dg-output "previously allocated by thread T(\[0-9\]+) here:.*(\n|\r\n|\r)" } ++// { dg-output "\[^\n\r]*WRITE of size 4 at 0x\[0-9a-f\]+ thread T(\[0-9\]+).*(\n|\r\n|\r)" } ++// { dg-output "\[^\n\r]*freed by thread T(\[0-9\]+) here:.*(\n|\r\n|\r)" } ++// { dg-output "\[^\n\r]*previously allocated by thread T(\[0-9\]+) here:.*(\n|\r\n|\r)" } + // { dg-output "Thread T\\2 created by T(\[0-9\]+) here:.*(\n|\r\n|\r)" } + // { dg-output "Thread T\\8 created by T0 here:.*(\n|\r\n|\r)" } + // { dg-output "Thread T\\4 created by T(\[0-9\]+) here:.*(\n|\r\n|\r)" } +--- a/src/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c ++++ b/src/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c +@@ -15,7 +15,7 @@ + /* { dg-output "WRITE of size \[0-9\]* at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */ + /* { dg-output " #0 0x\[0-9a-f\]+ (in _*(interceptor_|)strncpy|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ + /* { dg-output " #1 0x\[0-9a-f\]+ (in _*main (\[^\n\r]*strncpy-overflow-1.c:11|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */ +-/* { dg-output "0x\[0-9a-f\]+ is located 0 bytes to the right of 9-byte region\[^\n\r]*(\n|\r\n|\r)" } */ +-/* { dg-output "allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */ ++/* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes to the right of 9-byte region\[^\n\r]*(\n|\r\n|\r)" } */ ++/* { dg-output "\[^\n\r]*allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */ + /* { dg-output " #0 0x\[0-9a-f\]+ (in _*(interceptor_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ + /* { dg-output " #1 0x\[0-9a-f\]+ (in _*main (\[^\n\r]*strncpy-overflow-1.c:10|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ +--- a/src/gcc/testsuite/c-c++-common/asan/rlimit-mmap-test-1.c ++++ b/src/gcc/testsuite/c-c++-common/asan/rlimit-mmap-test-1.c +@@ -2,6 +2,7 @@ + + /* { dg-do run { target setrlimit } } */ + /* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */ ++/* { dg-require-effective-target hw } */ + /* { dg-shouldfail "asan" } */ + + #include <stdlib.h> +--- a/src/gcc/testsuite/c-c++-common/asan/stack-overflow-1.c ++++ b/src/gcc/testsuite/c-c++-common/asan/stack-overflow-1.c +@@ -19,4 +19,4 @@ + + /* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */ + /* { dg-output " #0 0x\[0-9a-f\]+ (in _*main (\[^\n\r]*stack-overflow-1.c:16|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */ +-/* { dg-output "Address 0x\[0-9a-f\]+ is\[^\n\r]*frame <main>" } */ ++/* { dg-output "\[^\n\r]*Address 0x\[0-9a-f\]+ is\[^\n\r]*frame <main>" } */ +--- a/src/gcc/testsuite/c-c++-common/asan/use-after-free-1.c ++++ b/src/gcc/testsuite/c-c++-common/asan/use-after-free-1.c +@@ -11,12 +11,12 @@ + + /* { dg-output "ERROR: AddressSanitizer:? heap-use-after-free on address\[^\n\r]*" } */ + /* { dg-output "0x\[0-9a-f\]+ at pc 0x\[0-9a-f\]+ bp 0x\[0-9a-f\]+ sp 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */ +-/* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */ ++/* { dg-output "\[^\n\r]*READ of size 1 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */ + /* { dg-output " #0 0x\[0-9a-f\]+ (in _*main (\[^\n\r]*use-after-free-1.c:9|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */ +-/* { dg-output "0x\[0-9a-f\]+ is located 5 bytes inside of 10-byte region .0x\[0-9a-f\]+,0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */ +-/* { dg-output "freed by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */ ++/* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 5 bytes inside of 10-byte region .0x\[0-9a-f\]+,0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */ ++/* { dg-output "\[^\n\r]*freed by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */ + /* { dg-output " #0 0x\[0-9a-f\]+ (in _*(interceptor_|)free|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ + /* { dg-output " #1 0x\[0-9a-f\]+ (in _*main (\[^\n\r]*use-after-free-1.c:8|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */ +-/* { dg-output "previously allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */ ++/* { dg-output "\[^\n\r]*previously allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */ + /* { dg-output " #0 0x\[0-9a-f\]+ (in _*(interceptor_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ + /* { dg-output " #1 0x\[0-9a-f\]+ (in _*main (\[^\n\r]*use-after-free-1.c:7|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ +--- a/src/gcc/testsuite/c-c++-common/asan/clone-test-1.c ++++ b/src/gcc/testsuite/c-c++-common/asan/clone-test-1.c +@@ -3,6 +3,7 @@ + + /* { dg-do run { target { *-*-linux* } } } */ + /* { dg-require-effective-target clone } */ ++/* { dg-require-effective-target hw } */ + /* { dg-options "-D_GNU_SOURCE" } */ + + #include <stdio.h> +--- a/src/gcc/testsuite/c-c++-common/asan/heap-overflow-1.c ++++ b/src/gcc/testsuite/c-c++-common/asan/heap-overflow-1.c +@@ -25,7 +25,7 @@ + + /* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread T0.*(\n|\r\n|\r)" } */ + /* { dg-output " #0 0x\[0-9a-f\]+ (in _*main (\[^\n\r]*heap-overflow-1.c:21|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */ +-/* { dg-output "0x\[0-9a-f\]+ is located 0 bytes to the right of 10-byte region\[^\n\r]*(\n|\r\n|\r)" } */ +-/* { dg-output "allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */ ++/* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes to the right of 10-byte region\[^\n\r]*(\n|\r\n|\r)" } */ ++/* { dg-output "\[^\n\r]*allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */ + /* { dg-output " #0 0x\[0-9a-f\]+ (in _*(interceptor_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ + /* { dg-output " #1 0x\[0-9a-f\]+ (in _*main (\[^\n\r]*heap-overflow-1.c:19|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ +--- a/src/gcc/testsuite/c-c++-common/asan/null-deref-1.c ++++ b/src/gcc/testsuite/c-c++-common/asan/null-deref-1.c +@@ -18,6 +18,6 @@ + + /* { dg-output "ERROR: AddressSanitizer:? SEGV on unknown address\[^\n\r]*" } */ + /* { dg-output "0x\[0-9a-f\]+ \[^\n\r]*pc 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } */ +-/* { dg-output "AddressSanitizer can not provide additional info.*(\n|\r\n|\r)" } */ ++/* { dg-output "\[^\n\r]*AddressSanitizer can not provide additional info.*(\n|\r\n|\r)" } */ + /* { dg-output " #0 0x\[0-9a-f\]+ (in \[^\n\r]*NullDeref\[^\n\r]* (\[^\n\r]*null-deref-1.c:10|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ + /* { dg-output " #1 0x\[0-9a-f\]+ (in _*main (\[^\n\r]*null-deref-1.c:15|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ --- a/src/gcc/objcp/ChangeLog.linaro +++ b/src/gcc/objcp/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -6995,7 +7882,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/gcc/cp/ChangeLog.linaro +++ b/src/gcc/cp/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -7003,9 +7894,27 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ +2013-04-09 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + * GCC Linaro 4.8-2013.04 released. +--- a/src/gcc/rtl.def ++++ b/src/gcc/rtl.def +@@ -937,8 +937,9 @@ + relational operator. Operands should have only one alternative. + 1: A C expression giving an additional condition for recognizing + the generated pattern. +- 2: A template or C code to produce assembler output. */ +-DEF_RTL_EXPR(DEFINE_COND_EXEC, "define_cond_exec", "Ess", RTX_EXTRA) ++ 2: A template or C code to produce assembler output. ++ 3: A vector of attributes to append to the resulting cond_exec insn. */ ++DEF_RTL_EXPR(DEFINE_COND_EXEC, "define_cond_exec", "EssV", RTX_EXTRA) + + /* Definition of an operand predicate. The difference between + DEFINE_PREDICATE and DEFINE_SPECIAL_PREDICATE is that genrecog will --- a/src/gcc/go/ChangeLog.linaro +++ b/src/gcc/go/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -7015,7 +7924,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/gcc/ada/ChangeLog.linaro +++ b/src/gcc/ada/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -7036,7 +7949,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ --- a/src/gcc/fortran/ChangeLog.linaro +++ b/src/gcc/fortran/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -7079,7 +7996,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ return changed; --- a/src/gcc/lto/ChangeLog.linaro +++ b/src/gcc/lto/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -7089,7 +8010,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/gcc/po/ChangeLog.linaro +++ b/src/gcc/po/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -7183,36 +8108,31 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (eq_attr "simd_type" "none") (const_string "none") ] (const_string "unknown"))) -@@ -356,7 +358,7 @@ +@@ -355,15 +357,17 @@ + (set_attr "simd_mode" "<MODE>")] ) - (define_insn "aarch64_dup_lane<mode>" +-(define_insn "aarch64_dup_lane<mode>" - [(set (match_operand:SDQ_I 0 "register_operand" "=w") -+ [(set (match_operand:ALLX 0 "register_operand" "=w") ++(define_insn "aarch64_dup_lane_scalar<mode>" ++ [(set (match_operand:<VEL> 0 "register_operand" "=w, r") (vec_select:<VEL> - (match_operand:<VCON> 1 "register_operand" "w") - (parallel [(match_operand:SI 2 "immediate_operand" "i")]) -@@ -367,6 +369,19 @@ +- (match_operand:<VCON> 1 "register_operand" "w") +- (parallel [(match_operand:SI 2 "immediate_operand" "i")]) ++ (match_operand:VDQ 1 "register_operand" "w, w") ++ (parallel [(match_operand:SI 2 "immediate_operand" "i, i")]) + ))] + "TARGET_SIMD" +- "dup\\t%<v>0<Vmtype>, %1.<Vetype>[%2]" +- [(set_attr "simd_type" "simd_dup") ++ "@ ++ dup\\t%<Vetype>0, %1.<Vetype>[%2] ++ umov\\t%<vw>0, %1.<Vetype>[%2]" ++ [(set_attr "simd_type" "simd_dup, simd_movgp") (set_attr "simd_mode" "<MODE>")] ) -+(define_insn "aarch64_dup_lanedi" -+ [(set (match_operand:DI 0 "register_operand" "=w,r") -+ (vec_select:DI -+ (match_operand:V2DI 1 "register_operand" "w,w") -+ (parallel [(match_operand:SI 2 "immediate_operand" "i,i")])))] -+ "TARGET_SIMD" -+ "@ -+ dup\\t%<v>0<Vmtype>, %1.<Vetype>[%2] -+ umov\t%0, %1.d[%2]" -+ [(set_attr "simd_type" "simd_dup") -+ (set_attr "simd_mode" "DI")] -+) -+ - (define_insn "aarch64_simd_dup<mode>" - [(set (match_operand:VDQF 0 "register_operand" "=w") - (vec_duplicate:VDQF (match_operand:<VEL> 1 "register_operand" "w")))] -@@ -394,7 +409,7 @@ +@@ -394,7 +398,7 @@ case 4: return "ins\t%0.d[0], %1"; case 5: return "mov\t%0, %1"; case 6: @@ -7221,7 +8141,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ <MODE>mode, 64); default: gcc_unreachable (); } -@@ -417,13 +432,13 @@ +@@ -417,13 +421,13 @@ case 0: return "ld1\t{%0.<Vtype>}, %1"; case 1: return "st1\t{%1.<Vtype>}, %0"; case 2: return "orr\t%0.<Vbtype>, %1.<Vbtype>, %1.<Vbtype>"; @@ -7240,7 +8160,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ } } [(set_attr "simd_type" "simd_load1,simd_store1,simd_move,simd_movgp,simd_insgp,simd_move,simd_move_imm") -@@ -452,6 +467,105 @@ +@@ -452,6 +456,105 @@ aarch64_simd_disambiguate_copy (operands, dest, src, 2); }) @@ -7346,7 +8266,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_insn "orn<mode>3" [(set (match_operand:VDQ 0 "register_operand" "=w") (ior:VDQ (not:VDQ (match_operand:VDQ 1 "register_operand" "w")) -@@ -503,8 +617,8 @@ +@@ -503,8 +606,8 @@ ) (define_insn "neg<mode>2" @@ -7357,7 +8277,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ "TARGET_SIMD" "neg\t%0.<Vtype>, %1.<Vtype>" [(set_attr "simd_type" "simd_negabs") -@@ -520,6 +634,51 @@ +@@ -520,6 +623,51 @@ (set_attr "simd_mode" "<MODE>")] ) @@ -7409,7 +8329,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_insn "and<mode>3" [(set (match_operand:VDQ 0 "register_operand" "=w") (and:VDQ (match_operand:VDQ 1 "register_operand" "w") -@@ -904,12 +1063,12 @@ +@@ -904,12 +1052,12 @@ ) ;; Max/Min operations. @@ -7424,7 +8344,112 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "simd_type" "simd_minmax") (set_attr "simd_mode" "<MODE>")] ) -@@ -1196,7 +1355,9 @@ +@@ -1045,6 +1193,104 @@ + + ;; Widening arithmetic. + ++(define_insn "*aarch64_<su>mlal_lo<mode>" ++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w") ++ (plus:<VWIDE> ++ (mult:<VWIDE> ++ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF> ++ (match_operand:VQW 2 "register_operand" "w") ++ (match_operand:VQW 3 "vect_par_cnst_lo_half" ""))) ++ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF> ++ (match_operand:VQW 4 "register_operand" "w") ++ (match_dup 3)))) ++ (match_operand:<VWIDE> 1 "register_operand" "0")))] ++ "TARGET_SIMD" ++ "<su>mlal\t%0.<Vwtype>, %2.<Vhalftype>, %4.<Vhalftype>" ++ [(set_attr "simd_type" "simd_mlal") ++ (set_attr "simd_mode" "<MODE>")] ++) ++ ++(define_insn "*aarch64_<su>mlal_hi<mode>" ++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w") ++ (plus:<VWIDE> ++ (mult:<VWIDE> ++ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF> ++ (match_operand:VQW 2 "register_operand" "w") ++ (match_operand:VQW 3 "vect_par_cnst_hi_half" ""))) ++ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF> ++ (match_operand:VQW 4 "register_operand" "w") ++ (match_dup 3)))) ++ (match_operand:<VWIDE> 1 "register_operand" "0")))] ++ "TARGET_SIMD" ++ "<su>mlal2\t%0.<Vwtype>, %2.<Vtype>, %4.<Vtype>" ++ [(set_attr "simd_type" "simd_mlal") ++ (set_attr "simd_mode" "<MODE>")] ++) ++ ++(define_insn "*aarch64_<su>mlsl_lo<mode>" ++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w") ++ (minus:<VWIDE> ++ (match_operand:<VWIDE> 1 "register_operand" "0") ++ (mult:<VWIDE> ++ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF> ++ (match_operand:VQW 2 "register_operand" "w") ++ (match_operand:VQW 3 "vect_par_cnst_lo_half" ""))) ++ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF> ++ (match_operand:VQW 4 "register_operand" "w") ++ (match_dup 3))))))] ++ "TARGET_SIMD" ++ "<su>mlsl\t%0.<Vwtype>, %2.<Vhalftype>, %4.<Vhalftype>" ++ [(set_attr "simd_type" "simd_mlal") ++ (set_attr "simd_mode" "<MODE>")] ++) ++ ++(define_insn "*aarch64_<su>mlsl_hi<mode>" ++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w") ++ (minus:<VWIDE> ++ (match_operand:<VWIDE> 1 "register_operand" "0") ++ (mult:<VWIDE> ++ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF> ++ (match_operand:VQW 2 "register_operand" "w") ++ (match_operand:VQW 3 "vect_par_cnst_hi_half" ""))) ++ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF> ++ (match_operand:VQW 4 "register_operand" "w") ++ (match_dup 3))))))] ++ "TARGET_SIMD" ++ "<su>mlsl2\t%0.<Vwtype>, %2.<Vtype>, %4.<Vtype>" ++ [(set_attr "simd_type" "simd_mlal") ++ (set_attr "simd_mode" "<MODE>")] ++) ++ ++(define_insn "*aarch64_<su>mlal<mode>" ++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w") ++ (plus:<VWIDE> ++ (mult:<VWIDE> ++ (ANY_EXTEND:<VWIDE> ++ (match_operand:VDW 1 "register_operand" "w")) ++ (ANY_EXTEND:<VWIDE> ++ (match_operand:VDW 2 "register_operand" "w"))) ++ (match_operand:<VWIDE> 3 "register_operand" "0")))] ++ "TARGET_SIMD" ++ "<su>mlal\t%0.<Vwtype>, %1.<Vtype>, %2.<Vtype>" ++ [(set_attr "simd_type" "simd_mlal") ++ (set_attr "simd_mode" "<MODE>")] ++) ++ ++(define_insn "*aarch64_<su>mlsl<mode>" ++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w") ++ (minus:<VWIDE> ++ (match_operand:<VWIDE> 1 "register_operand" "0") ++ (mult:<VWIDE> ++ (ANY_EXTEND:<VWIDE> ++ (match_operand:VDW 2 "register_operand" "w")) ++ (ANY_EXTEND:<VWIDE> ++ (match_operand:VDW 3 "register_operand" "w")))))] ++ "TARGET_SIMD" ++ "<su>mlsl\t%0.<Vwtype>, %2.<Vtype>, %3.<Vtype>" ++ [(set_attr "simd_type" "simd_mlal") ++ (set_attr "simd_mode" "<MODE>")] ++) ++ + (define_insn "aarch64_simd_vec_<su>mult_lo_<mode>" + [(set (match_operand:<VWIDE> 0 "register_operand" "=w") + (mult:<VWIDE> (ANY_EXTEND:<VWIDE> (vec_select:<VHALF> +@@ -1196,7 +1442,9 @@ (set_attr "simd_mode" "<MODE>")] ) @@ -7435,7 +8460,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set (match_operand:VDQF 0 "register_operand" "=w") (unspec:VDQF [(match_operand:VDQF 1 "register_operand" "w")] FRINT))] -@@ -1206,16 +1367,9 @@ +@@ -1206,16 +1454,9 @@ (set_attr "simd_mode" "<MODE>")] ) @@ -7455,7 +8480,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set (match_operand:<FCVT_TARGET> 0 "register_operand" "=w") (FIXUORS:<FCVT_TARGET> (unspec:<FCVT_TARGET> [(match_operand:VDQF 1 "register_operand" "w")] -@@ -1226,16 +1380,141 @@ +@@ -1226,16 +1467,141 @@ (set_attr "simd_mode" "<MODE>")] ) @@ -7601,7 +8626,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_insn "aarch64_vmls<mode>" [(set (match_operand:VDQF 0 "register_operand" "=w") (minus:VDQF (match_operand:VDQF 1 "register_operand" "0") -@@ -1261,51 +1540,70 @@ +@@ -1261,51 +1627,70 @@ ;; only introduces MIN_EXPR/MAX_EXPR in fast math mode or when not honouring ;; NaNs. @@ -7694,7 +8719,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set (match_operand:V4SF 0 "register_operand" "=w") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "w")] UNSPEC_FADDV))] -@@ -1315,169 +1613,106 @@ +@@ -1315,169 +1700,106 @@ (set_attr "simd_mode" "V4SF")] ) @@ -7925,7 +8950,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ "TARGET_SIMD" "@ bsl\\t%0.<Vbtype>, %2.<Vbtype>, %3.<Vbtype> -@@ -1486,28 +1721,32 @@ +@@ -1486,28 +1808,32 @@ ) (define_expand "aarch64_simd_bsl<mode>" @@ -7967,7 +8992,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ rtx mask = gen_reg_rtx (<MODE>mode); switch (GET_CODE (operands[3])) -@@ -1548,12 +1787,12 @@ +@@ -1548,12 +1874,12 @@ case LTU: case GEU: @@ -7982,7 +9007,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ break; case NE: -@@ -1566,30 +1805,47 @@ +@@ -1566,30 +1892,47 @@ } if (inverse) @@ -8041,7 +9066,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ rtx (*base_comparison) (rtx, rtx, rtx); rtx (*complimentary_comparison) (rtx, rtx, rtx); -@@ -1609,7 +1865,7 @@ +@@ -1609,7 +1952,7 @@ /* Fall through. */ default: if (!REG_P (operands[5])) @@ -8050,7 +9075,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ } switch (GET_CODE (operands[3])) -@@ -1622,8 +1878,8 @@ +@@ -1622,8 +1965,8 @@ case UNGE: case ORDERED: case UNORDERED: @@ -8061,7 +9086,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ break; case LE: case UNLE: -@@ -1631,14 +1887,14 @@ +@@ -1631,14 +1974,14 @@ /* Fall through. */ case GT: case UNGT: @@ -8080,7 +9105,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ break; default: gcc_unreachable (); -@@ -1666,10 +1922,10 @@ +@@ -1666,10 +2009,10 @@ switch (GET_CODE (operands[3])) { case LT: @@ -8093,7 +9118,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ break; default: /* Do nothing, other zero form cases already have the correct -@@ -1712,9 +1968,9 @@ +@@ -1712,9 +2055,9 @@ true iff !(a != b && a ORDERED b), swapping the operands to BSL will then give us (a == b || a UNORDERED b) as intended. */ @@ -8106,7 +9131,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ swap_bsl_operands = 1; break; case UNORDERED: -@@ -1723,20 +1979,36 @@ +@@ -1723,20 +2066,36 @@ swap_bsl_operands = 1; /* Fall through. */ case ORDERED: @@ -8151,7 +9176,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ DONE; }) -@@ -1746,16 +2018,32 @@ +@@ -1746,16 +2105,32 @@ (match_operator 3 "comparison_operator" [(match_operand:VALL 4 "register_operand") (match_operand:VALL 5 "nonmemory_operand")]) @@ -8187,7 +9212,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_expand "vcondu<mode><mode>" [(set (match_operand:VDQ 0 "register_operand") -@@ -1763,11 +2051,11 @@ +@@ -1763,11 +2138,11 @@ (match_operator 3 "comparison_operator" [(match_operand:VDQ 4 "register_operand") (match_operand:VDQ 5 "nonmemory_operand")]) @@ -8202,7 +9227,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ operands[2], operands[3], operands[4], operands[5])); DONE; -@@ -2861,28 +3149,6 @@ +@@ -2861,28 +3236,6 @@ (set_attr "simd_mode" "<MODE>")] ) @@ -8231,7 +9256,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ;; vshll_n (define_insn "aarch64_<sur>shll_n<mode>" -@@ -2927,28 +3193,6 @@ +@@ -2927,28 +3280,6 @@ (set_attr "simd_mode" "<MODE>")] ) @@ -8260,7 +9285,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ;; vrshr_n (define_insn "aarch64_<sur>shr_n<mode>" -@@ -3034,52 +3278,180 @@ +@@ -3034,52 +3365,180 @@ ) @@ -8464,7 +9489,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ;; addp (define_insn "aarch64_addp<mode>" -@@ -3105,30 +3477,6 @@ +@@ -3105,30 +3564,6 @@ (set_attr "simd_mode" "DI")] ) @@ -8495,7 +9520,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ;; sqrt (define_insn "sqrt<mode>2" -@@ -3140,16 +3488,6 @@ +@@ -3140,16 +3575,6 @@ (set_attr "simd_mode" "<MODE>")] ) @@ -8512,7 +9537,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ;; Patterns for vector struct loads and stores. (define_insn "vec_load_lanesoi<mode>" -@@ -3714,3 +4052,25 @@ +@@ -3714,3 +4139,25 @@ "ld1r\\t{%0.<Vtype>}, %1" [(set_attr "simd_type" "simd_load1r") (set_attr "simd_mode" "<MODE>")]) @@ -12284,7 +13309,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ vcltq_s8 (int8x16_t __a, int8x16_t __b) { return (uint8x16_t) __builtin_aarch64_cmgtv16qi (__b, __a); -@@ -20450,43 +19619,616 @@ +@@ -20450,91 +19619,664 @@ __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcltq_u8 (uint8x16_t __a, uint8x16_t __b) { @@ -12907,6 +13932,62 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ /* vdup */ __extension__ static __inline int8x1_t __attribute__ ((__always_inline__)) + vdupb_lane_s8 (int8x16_t a, int const b) + { +- return __builtin_aarch64_dup_laneqi (a, b); ++ return __builtin_aarch64_dup_lane_scalarv16qi (a, b); + } + + __extension__ static __inline uint8x1_t __attribute__ ((__always_inline__)) + vdupb_lane_u8 (uint8x16_t a, int const b) + { +- return (uint8x1_t) __builtin_aarch64_dup_laneqi ((int8x16_t) a, b); ++ return (uint8x1_t) __builtin_aarch64_dup_lane_scalarv16qi ((int8x16_t) a, b); + } + + __extension__ static __inline int16x1_t __attribute__ ((__always_inline__)) + vduph_lane_s16 (int16x8_t a, int const b) + { +- return __builtin_aarch64_dup_lanehi (a, b); ++ return __builtin_aarch64_dup_lane_scalarv8hi (a, b); + } + + __extension__ static __inline uint16x1_t __attribute__ ((__always_inline__)) + vduph_lane_u16 (uint16x8_t a, int const b) + { +- return (uint16x1_t) __builtin_aarch64_dup_lanehi ((int16x8_t) a, b); ++ return (uint16x1_t) __builtin_aarch64_dup_lane_scalarv8hi ((int16x8_t) a, b); + } + + __extension__ static __inline int32x1_t __attribute__ ((__always_inline__)) + vdups_lane_s32 (int32x4_t a, int const b) + { +- return __builtin_aarch64_dup_lanesi (a, b); ++ return __builtin_aarch64_dup_lane_scalarv4si (a, b); + } + + __extension__ static __inline uint32x1_t __attribute__ ((__always_inline__)) + vdups_lane_u32 (uint32x4_t a, int const b) + { +- return (uint32x1_t) __builtin_aarch64_dup_lanesi ((int32x4_t) a, b); ++ return (uint32x1_t) __builtin_aarch64_dup_lane_scalarv4si ((int32x4_t) a, b); + } + + __extension__ static __inline int64x1_t __attribute__ ((__always_inline__)) + vdupd_lane_s64 (int64x2_t a, int const b) + { +- return __builtin_aarch64_dup_lanedi (a, b); ++ return __builtin_aarch64_dup_lane_scalarv2di (a, b); + } + + __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) + vdupd_lane_u64 (uint64x2_t a, int const b) + { +- return (uint64x1_t) __builtin_aarch64_dup_lanedi ((int64x2_t) a, b); ++ return (uint64x1_t) __builtin_aarch64_dup_lane_scalarv2di ((int64x2_t) a, b); + } + + /* vldn */ @@ -21408,7 +21150,7 @@ __extension__ static __inline float32x2_t __attribute__ ((__always_inline__)) vmax_f32 (float32x2_t __a, float32x2_t __b) @@ -13876,7 +14957,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ "(register_operand (operands[0], DImode) || aarch64_reg_or_zero (operands[1], DImode))" "@ -@@ -825,16 +856,18 @@ +@@ -825,17 +856,19 @@ mov\\t%x0, %1 mov\\t%x0, %1 ldr\\t%x0, %1 @@ -13892,12 +14973,14 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ - [(set_attr "v8type" "move,move,move,alu,load1,store1,adr,adr,fmov,fmov,fmov,fmov") + [(set_attr "v8type" "move,move,move,alu,load1,load1,store1,store1,adr,adr,fmov,fmov,fmov,fmov") (set_attr "mode" "DI") -- (set_attr "fp" "*,*,*,*,*,*,*,*,yes,yes,yes,yes")] -+ (set_attr "fp" "*,*,*,*,*,*,*,*,*,*,yes,yes,yes,yes")] +- (set_attr "fp" "*,*,*,*,*,*,*,*,yes,yes,yes,*") +- (set_attr "simd" "*,*,*,*,*,*,*,*,*,*,*,yes")] ++ (set_attr "fp" "*,*,*,*,*,*,*,*,*,*,yes,yes,yes,*") ++ (set_attr "simd" "*,*,*,*,*,*,*,*,*,*,*,*,*,yes")] ) (define_insn "insv_imm<mode>" -@@ -842,9 +875,8 @@ +@@ -843,9 +876,8 @@ (const_int 16) (match_operand:GPI 1 "const_int_operand" "n")) (match_operand:GPI 2 "const_int_operand" "n"))] @@ -13909,7 +14992,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ "movk\\t%<w>0, %X2, lsl %1" [(set_attr "v8type" "movk") (set_attr "mode" "<MODE>")] -@@ -1149,13 +1181,14 @@ +@@ -1150,13 +1182,14 @@ ) (define_insn "*zero_extend<SHORT:mode><GPI:mode>2_aarch64" @@ -13928,7 +15011,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (set_attr "mode" "<GPI:MODE>")] ) -@@ -1286,6 +1319,112 @@ +@@ -1287,6 +1320,112 @@ (set_attr "mode" "SI")] ) @@ -14041,7 +15124,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_insn "*add<mode>3nr_compare0" [(set (reg:CC_NZ CC_REGNUM) (compare:CC_NZ -@@ -1790,6 +1929,34 @@ +@@ -1791,6 +1930,34 @@ (set_attr "mode" "SI")] ) @@ -14076,7 +15159,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_insn "*sub_uxt<mode>_multp2" [(set (match_operand:GPI 0 "register_operand" "=rk") (minus:GPI (match_operand:GPI 4 "register_operand" "r") -@@ -1843,6 +2010,27 @@ +@@ -1844,6 +2011,27 @@ (set_attr "mode" "SI")] ) @@ -14104,7 +15187,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_insn "*neg<mode>2_compare0" [(set (reg:CC_NZ CC_REGNUM) (compare:CC_NZ (neg:GPI (match_operand:GPI 1 "register_operand" "r")) -@@ -1868,6 +2056,21 @@ +@@ -1869,6 +2057,21 @@ (set_attr "mode" "SI")] ) @@ -14126,7 +15209,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_insn "*neg_<shift>_<mode>2" [(set (match_operand:GPI 0 "register_operand" "=r") (neg:GPI (ASHIFT:GPI -@@ -2157,6 +2360,18 @@ +@@ -2158,6 +2361,18 @@ (set_attr "mode" "<GPI:MODE>")] ) @@ -14145,7 +15228,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ;; ------------------------------------------------------------------- ;; Store-flag and conditional select insns -@@ -2210,7 +2425,7 @@ +@@ -2211,7 +2426,7 @@ (set_attr "mode" "SI")] ) @@ -14154,7 +15237,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set (match_operand:ALLI 0 "register_operand" "=r") (neg:ALLI (match_operator:ALLI 1 "aarch64_comparison_operator" [(match_operand 2 "cc_register" "") (const_int 0)])))] -@@ -2433,6 +2648,69 @@ +@@ -2434,6 +2649,69 @@ [(set_attr "v8type" "logic,logic_imm") (set_attr "mode" "SI")]) @@ -14224,7 +15307,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_insn "*<LOGICAL:optab>_<SHIFT:optab><mode>3" [(set (match_operand:GPI 0 "register_operand" "=r") (LOGICAL:GPI (SHIFT:GPI -@@ -2703,6 +2981,62 @@ +@@ -2704,6 +2982,62 @@ (set_attr "mode" "<MODE>")] ) @@ -14287,7 +15370,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_insn "*<ANY_EXTEND:optab><GPI:mode>_ashl<SHORT:mode>" [(set (match_operand:GPI 0 "register_operand" "=r") (ANY_EXTEND:GPI -@@ -2769,6 +3103,50 @@ +@@ -2770,6 +3104,50 @@ (set_attr "mode" "<MODE>")] ) @@ -14338,7 +15421,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_insn "*<optab><ALLX:mode>_shft_<GPI:mode>" [(set (match_operand:GPI 0 "register_operand" "=r") (ashift:GPI (ANY_EXTEND:GPI -@@ -3089,6 +3467,27 @@ +@@ -3090,6 +3468,27 @@ (set_attr "mode" "<MODE>")] ) @@ -15090,7 +16173,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + BUILTIN_VQ (REINTERP, reinterpretv2df, 0) + + BUILTIN_VDQ_I (BINOP, dup_lane, 0) -+ BUILTIN_SDQ_I (BINOP, dup_lane, 0) ++ BUILTIN_VDQ_I (BINOP, dup_lane_scalar, 0) /* Implemented by aarch64_<sur>q<r>shl<mode>. */ - BUILTIN_VSDQ_I (BINOP, sqshl) - BUILTIN_VSDQ_I (BINOP, uqshl) @@ -16685,7 +17768,15 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ static int arm_arg_partial_bytes (cumulative_args_t, enum machine_mode, tree, bool); static rtx arm_function_arg (cumulative_args_t, enum machine_mode, -@@ -620,6 +621,13 @@ +@@ -280,6 +281,7 @@ + + static void arm_canonicalize_comparison (int *code, rtx *op0, rtx *op1, + bool op0_preserve_value); ++static unsigned HOST_WIDE_INT arm_asan_shadow_offset (void); + + /* Table of machine attributes. */ + static const struct attribute_spec arm_attribute_table[] = +@@ -620,6 +622,13 @@ #undef TARGET_CLASS_LIKELY_SPILLED_P #define TARGET_CLASS_LIKELY_SPILLED_P arm_class_likely_spilled_p @@ -16699,7 +17790,21 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ #undef TARGET_VECTOR_ALIGNMENT #define TARGET_VECTOR_ALIGNMENT arm_vector_alignment -@@ -839,6 +847,10 @@ +@@ -649,6 +658,13 @@ + #define TARGET_CANONICALIZE_COMPARISON \ + arm_canonicalize_comparison + ++#undef TARGET_ASAN_SHADOW_OFFSET ++#define TARGET_ASAN_SHADOW_OFFSET arm_asan_shadow_offset ++ ++#undef MAX_INSN_PER_IT_BLOCK ++#define MAX_INSN_PER_IT_BLOCK (arm_restrict_it ? 1 : 4) ++ ++ + struct gcc_target targetm = TARGET_INITIALIZER; + + /* Obstack for minipool constant handling. */ +@@ -839,6 +855,10 @@ int arm_arch_arm_hwdiv; int arm_arch_thumb_hwdiv; @@ -16710,7 +17815,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ /* In case of a PRE_INC, POST_INC, PRE_DEC, POST_DEC memory reference, we must report the mode of the memory reference from TARGET_PRINT_OPERAND to TARGET_PRINT_OPERAND_ADDRESS. */ -@@ -936,6 +948,7 @@ +@@ -936,6 +956,7 @@ false, /* Prefer LDRD/STRD. */ {true, true}, /* Prefer non short circuit. */ &arm_default_vec_cost, /* Vectorizer costs. */ @@ -16718,7 +17823,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ }; const struct tune_params arm_fastmul_tune = -@@ -950,6 +963,7 @@ +@@ -950,6 +971,7 @@ false, /* Prefer LDRD/STRD. */ {true, true}, /* Prefer non short circuit. */ &arm_default_vec_cost, /* Vectorizer costs. */ @@ -16726,7 +17831,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ }; /* StrongARM has early execution of branches, so a sequence that is worth -@@ -967,6 +981,7 @@ +@@ -967,6 +989,7 @@ false, /* Prefer LDRD/STRD. */ {true, true}, /* Prefer non short circuit. */ &arm_default_vec_cost, /* Vectorizer costs. */ @@ -16734,7 +17839,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ }; const struct tune_params arm_xscale_tune = -@@ -981,6 +996,7 @@ +@@ -981,6 +1004,7 @@ false, /* Prefer LDRD/STRD. */ {true, true}, /* Prefer non short circuit. */ &arm_default_vec_cost, /* Vectorizer costs. */ @@ -16742,7 +17847,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ }; const struct tune_params arm_9e_tune = -@@ -995,6 +1011,7 @@ +@@ -995,6 +1019,7 @@ false, /* Prefer LDRD/STRD. */ {true, true}, /* Prefer non short circuit. */ &arm_default_vec_cost, /* Vectorizer costs. */ @@ -16750,7 +17855,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ }; const struct tune_params arm_v6t2_tune = -@@ -1009,6 +1026,7 @@ +@@ -1009,6 +1034,7 @@ false, /* Prefer LDRD/STRD. */ {true, true}, /* Prefer non short circuit. */ &arm_default_vec_cost, /* Vectorizer costs. */ @@ -16758,7 +17863,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ }; /* Generic Cortex tuning. Use more specific tunings if appropriate. */ -@@ -1024,6 +1042,7 @@ +@@ -1024,6 +1050,7 @@ false, /* Prefer LDRD/STRD. */ {true, true}, /* Prefer non short circuit. */ &arm_default_vec_cost, /* Vectorizer costs. */ @@ -16766,7 +17871,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ }; const struct tune_params arm_cortex_a15_tune = -@@ -1038,6 +1057,7 @@ +@@ -1038,6 +1065,7 @@ true, /* Prefer LDRD/STRD. */ {true, true}, /* Prefer non short circuit. */ &arm_default_vec_cost, /* Vectorizer costs. */ @@ -16774,7 +17879,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ }; /* Branches can be dual-issued on Cortex-A5, so conditional execution is -@@ -1055,6 +1075,7 @@ +@@ -1055,6 +1083,7 @@ false, /* Prefer LDRD/STRD. */ {false, false}, /* Prefer non short circuit. */ &arm_default_vec_cost, /* Vectorizer costs. */ @@ -16782,7 +17887,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ }; const struct tune_params arm_cortex_a9_tune = -@@ -1069,6 +1090,7 @@ +@@ -1069,6 +1098,7 @@ false, /* Prefer LDRD/STRD. */ {true, true}, /* Prefer non short circuit. */ &arm_default_vec_cost, /* Vectorizer costs. */ @@ -16790,7 +17895,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ }; /* The arm_v6m_tune is duplicated from arm_cortex_tune, rather than -@@ -1085,6 +1107,7 @@ +@@ -1085,6 +1115,7 @@ false, /* Prefer LDRD/STRD. */ {false, false}, /* Prefer non short circuit. */ &arm_default_vec_cost, /* Vectorizer costs. */ @@ -16798,7 +17903,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ }; const struct tune_params arm_fa726te_tune = -@@ -1099,6 +1122,7 @@ +@@ -1099,6 +1130,7 @@ false, /* Prefer LDRD/STRD. */ {true, true}, /* Prefer non short circuit. */ &arm_default_vec_cost, /* Vectorizer costs. */ @@ -16806,7 +17911,20 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ }; -@@ -2129,11 +2153,25 @@ +@@ -1842,7 +1874,12 @@ + arm_arch_thumb_hwdiv = (insn_flags & FL_THUMB_DIV) != 0; + arm_arch_arm_hwdiv = (insn_flags & FL_ARM_DIV) != 0; + arm_tune_cortex_a9 = (arm_tune == cortexa9) != 0; ++ if (arm_restrict_it == 2) ++ arm_restrict_it = arm_arch8 && TARGET_THUMB2; + ++ if (!TARGET_THUMB2) ++ arm_restrict_it = 0; ++ + /* If we are not using the default (ARM mode) section anchor offset + ranges, then set the correct ranges now. */ + if (TARGET_THUMB1) +@@ -2129,6 +2166,12 @@ global_options.x_param_values, global_options_set.x_param_values); @@ -16819,20 +17937,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ /* Use the alternative scheduling-pressure algorithm by default. */ maybe_set_param_value (PARAM_SCHED_PRESSURE_ALGORITHM, 2, global_options.x_param_values, - global_options_set.x_param_values); - -+ /* Disable shrink-wrap when optimizing function for size, since it tends to -+ generate additional returns. */ -+ if (optimize_function_for_size_p (cfun) && TARGET_THUMB2) -+ flag_shrink_wrap = false; -+ /* TBD: Dwarf info for apcs frame is not handled yet. */ -+ if (TARGET_APCS_FRAME) -+ flag_shrink_wrap = false; -+ - /* Register global variables with the garbage collector. */ - arm_add_gc_roots (); - } -@@ -2382,6 +2420,10 @@ +@@ -2382,6 +2425,10 @@ if (IS_INTERRUPT (func_type) && (frame_pointer_needed || TARGET_THUMB)) return 0; @@ -16843,26 +17948,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ offsets = arm_get_frame_offsets (); stack_adjust = offsets->outgoing_args - offsets->saved_regs; -@@ -2479,6 +2521,18 @@ - return 1; - } - -+/* Return TRUE if we should try to use a simple_return insn, i.e. perform -+ shrink-wrapping if possible. This is the case if we need to emit a -+ prologue, which we can test by looking at the offsets. */ -+bool -+use_simple_return_p (void) -+{ -+ arm_stack_offsets *offsets; -+ -+ offsets = arm_get_frame_offsets (); -+ return offsets->outgoing_args != 0; -+} -+ - /* Return TRUE if int I is a valid immediate ARM constant. */ - - int -@@ -2617,6 +2671,9 @@ +@@ -2617,6 +2664,9 @@ switch (code) { @@ -16872,44 +17958,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ case PLUS: return arm_not_operand (hi, SImode) && arm_add_operand (lo, SImode); -@@ -5335,9 +5392,8 @@ - if (cfun->machine->sibcall_blocked) - return false; - -- /* Never tailcall something for which we have no decl, or if we -- are generating code for Thumb-1. */ -- if (decl == NULL || TARGET_THUMB1) -+ /* Never tailcall something if we are generating code for Thumb-1. */ -+ if (TARGET_THUMB1) - return false; - - /* The PIC register is live on entry to VxWorks PLT entries, so we -@@ -5347,13 +5403,14 @@ - - /* Cannot tail-call to long calls, since these are out of range of - a branch instruction. */ -- if (arm_is_long_call_p (decl)) -+ if (decl && arm_is_long_call_p (decl)) - return false; - - /* If we are interworking and the function is not declared static - then we can't tail-call it unless we know that it exists in this - compilation unit (since it might be a Thumb routine). */ -- if (TARGET_INTERWORK && TREE_PUBLIC (decl) && !TREE_ASM_WRITTEN (decl)) -+ if (TARGET_INTERWORK && decl && TREE_PUBLIC (decl) -+ && !TREE_ASM_WRITTEN (decl)) - return false; - - func_type = arm_current_func_type (); -@@ -5385,6 +5442,7 @@ - sibling calls. */ - if (TARGET_AAPCS_BASED - && arm_abi == ARM_ABI_AAPCS -+ && decl - && DECL_WEAK (decl)) - return false; - -@@ -11803,6 +11861,134 @@ +@@ -11803,6 +11853,134 @@ return 1; } @@ -17044,7 +18093,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ /* Select a dominance comparison mode if possible for a test of the general form (OP (COND_OR (X) (Y)) (const_int 0)). We support three forms. COND_OR == DOM_CC_X_AND_Y => (X && Y) -@@ -12603,6 +12789,277 @@ +@@ -12603,6 +12781,277 @@ return true; } @@ -17322,7 +18371,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ /* Print a symbolic form of X to the debug file, F. */ static void -@@ -14794,7 +15251,8 @@ +@@ -14794,7 +15243,8 @@ { /* Constraints should ensure this. */ gcc_assert (code0 == MEM && code1 == REG); @@ -17332,7 +18381,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ switch (GET_CODE (XEXP (operands[0], 0))) { -@@ -16387,6 +16845,148 @@ +@@ -16387,6 +16837,148 @@ return; } @@ -17481,27 +18530,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ /* Generate and emit an insn that we will recognize as a push_multi. Unfortunately, since this insn does not reflect very well the actual semantics of the operation, we need to annotate the insn for the benefit -@@ -16529,6 +17129,19 @@ - return par; - } - -+/* Add a REG_CFA_ADJUST_CFA REG note to INSN. -+ SIZE is the offset to be adjusted. -+ DEST and SRC might be stack_pointer_rtx or hard_frame_pointer_rtx. */ -+static void -+arm_add_cfa_adjust_cfa_note (rtx insn, int size, rtx dest, rtx src) -+{ -+ rtx dwarf; -+ -+ RTX_FRAME_RELATED_P (insn) = 1; -+ dwarf = gen_rtx_SET (VOIDmode, dest, plus_constant (Pmode, src, size)); -+ add_reg_note (insn, REG_CFA_ADJUST_CFA, dwarf); -+} -+ - /* Generate and emit an insn pattern that we will recognize as a pop_multi. - SAVED_REGS_MASK shows which registers need to be restored. - -@@ -16586,6 +17199,17 @@ +@@ -16586,6 +17178,17 @@ if (saved_regs_mask & (1 << i)) { reg = gen_rtx_REG (SImode, i); @@ -17519,62 +18548,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ tmp = gen_rtx_SET (VOIDmode, reg, gen_frame_mem -@@ -16608,6 +17232,9 @@ - par = emit_insn (par); - - REG_NOTES (par) = dwarf; -+ if (!return_in_pc) -+ arm_add_cfa_adjust_cfa_note (par, UNITS_PER_WORD * num_regs, -+ stack_pointer_rtx, stack_pointer_rtx); - } - - /* Generate and emit an insn pattern that we will recognize as a pop_multi -@@ -16678,6 +17305,9 @@ - - par = emit_insn (par); - REG_NOTES (par) = dwarf; -+ -+ arm_add_cfa_adjust_cfa_note (par, 2 * UNITS_PER_WORD * num_regs, -+ base_reg, base_reg); - } - - /* Generate and emit a pattern that will be recognized as LDRD pattern. If even -@@ -16753,6 +17383,7 @@ - pattern can be emitted now. */ - par = emit_insn (par); - REG_NOTES (par) = dwarf; -+ RTX_FRAME_RELATED_P (par) = 1; - } - - i++; -@@ -16769,7 +17400,12 @@ - stack_pointer_rtx, - plus_constant (Pmode, stack_pointer_rtx, 4 * i)); - RTX_FRAME_RELATED_P (tmp) = 1; -- emit_insn (tmp); -+ tmp = emit_insn (tmp); -+ if (!return_in_pc) -+ { -+ arm_add_cfa_adjust_cfa_note (tmp, UNITS_PER_WORD * i, -+ stack_pointer_rtx, stack_pointer_rtx); -+ } - - dwarf = NULL_RTX; - -@@ -16803,9 +17439,11 @@ - else - { - par = emit_insn (tmp); -+ REG_NOTES (par) = dwarf; -+ arm_add_cfa_adjust_cfa_note (par, UNITS_PER_WORD, -+ stack_pointer_rtx, stack_pointer_rtx); - } - -- REG_NOTES (par) = dwarf; - } - else if ((num_regs % 2) == 1 && return_in_pc) - { -@@ -16817,6 +17455,129 @@ +@@ -16817,6 +17420,129 @@ return; } @@ -17704,51 +18678,12 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ /* Calculate the size of the return value that is passed in registers. */ static unsigned arm_size_return_regs (void) -@@ -16841,11 +17602,27 @@ - || df_regs_ever_live_p (LR_REGNUM)); - } - -+/* We do not know if r3 will be available because -+ we do have an indirect tailcall happening in this -+ particular case. */ -+static bool -+is_indirect_tailcall_p (rtx call) -+{ -+ rtx pat = PATTERN (call); - -+ /* Indirect tail call. */ -+ pat = XVECEXP (pat, 0, 0); -+ if (GET_CODE (pat) == SET) -+ pat = SET_SRC (pat); -+ -+ pat = XEXP (XEXP (pat, 0), 0); -+ return REG_P (pat); -+} -+ - /* Return true if r3 is used by any of the tail call insns in the - current function. */ - static bool --any_sibcall_uses_r3 (void) -+any_sibcall_could_use_r3 (void) - { - edge_iterator ei; - edge e; -@@ -16859,7 +17636,8 @@ - if (!CALL_P (call)) - call = prev_nonnote_nondebug_insn (call); - gcc_assert (CALL_P (call) && SIBLING_CALL_P (call)); -- if (find_regno_fusage (call, USE, 3)) -+ if (find_regno_fusage (call, USE, 3) -+ || is_indirect_tailcall_p (call)) - return true; - } - return false; -@@ -17026,9 +17804,10 @@ +@@ -17026,9 +17752,10 @@ /* If it is safe to use r3, then do so. This sometimes generates better code on Thumb-2 by avoiding the need to use 32-bit push/pop instructions. */ - if (! any_sibcall_uses_r3 () -+ if (! any_sibcall_could_use_r3 () ++ if (! any_sibcall_uses_r3 () && arm_size_return_regs () <= 12 - && (offsets->saved_regs_mask & (1 << 3)) == 0) + && (offsets->saved_regs_mask & (1 << 3)) == 0 @@ -17756,7 +18691,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ { reg = 3; } -@@ -17460,6 +18239,12 @@ +@@ -17460,6 +18187,12 @@ { thumb2_emit_strd_push (live_regs_mask); } @@ -17769,7 +18704,16 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ else { insn = emit_multi_reg_push (live_regs_mask); -@@ -19339,6 +20124,7 @@ +@@ -18781,7 +19514,7 @@ + break; + /* Allow up to 4 conditionally executed instructions in a block. */ + n = get_attr_ce_count (insn); +- if (arm_condexec_masklen + n > 4) ++ if (arm_condexec_masklen + n > MAX_INSN_PER_IT_BLOCK) + break; + + predicate = COND_EXEC_TEST (body); +@@ -19339,6 +20072,7 @@ typedef enum { T_V8QI, T_V4HI, @@ -17777,7 +18721,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ T_V2SI, T_V2SF, T_DI, -@@ -19356,14 +20142,15 @@ +@@ -19356,14 +20090,15 @@ #define TYPE_MODE_BIT(X) (1 << (X)) #define TB_DREG (TYPE_MODE_BIT (T_V8QI) | TYPE_MODE_BIT (T_V4HI) \ @@ -17795,7 +18739,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ #define v2si_UP T_V2SI #define v2sf_UP T_V2SF #define di_UP T_DI -@@ -19399,6 +20186,8 @@ +@@ -19399,6 +20134,8 @@ NEON_SCALARMULH, NEON_SCALARMAC, NEON_CONVERT, @@ -17804,7 +18748,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ NEON_FIXCONV, NEON_SELECT, NEON_RESULTPAIR, -@@ -19459,7 +20248,8 @@ +@@ -19459,7 +20196,8 @@ VAR9 (T, N, A, B, C, D, E, F, G, H, I), \ {#N, NEON_##T, UP (J), CF (N, J), 0} @@ -17814,7 +18758,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ instruction variant, i.e. equivalent to that which would be specified after the assembler mnemonic, which usually refers to the last vector operand. (Signed/unsigned/polynomial types are not differentiated between though, and -@@ -19469,196 +20259,7 @@ +@@ -19469,196 +20207,7 @@ static neon_builtin_datum neon_builtin_data[] = { @@ -18012,7 +18956,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ }; #undef CF -@@ -19673,9 +20274,36 @@ +@@ -19673,9 +20222,36 @@ #undef VAR9 #undef VAR10 @@ -18052,7 +18996,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ enum arm_builtins { ARM_BUILTIN_GETWCGR0, -@@ -19924,11 +20552,25 @@ +@@ -19924,11 +20500,25 @@ ARM_BUILTIN_WMERGE, @@ -18080,7 +19024,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ static GTY(()) tree arm_builtin_decls[ARM_BUILTIN_MAX]; static void -@@ -19939,6 +20581,7 @@ +@@ -19939,6 +20529,7 @@ tree neon_intQI_type_node; tree neon_intHI_type_node; @@ -18088,7 +19032,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ tree neon_polyQI_type_node; tree neon_polyHI_type_node; tree neon_intSI_type_node; -@@ -19965,6 +20608,7 @@ +@@ -19965,6 +20556,7 @@ tree V8QI_type_node; tree V4HI_type_node; @@ -18096,7 +19040,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ tree V2SI_type_node; tree V2SF_type_node; tree V16QI_type_node; -@@ -20019,6 +20663,9 @@ +@@ -20019,6 +20611,9 @@ neon_float_type_node = make_node (REAL_TYPE); TYPE_PRECISION (neon_float_type_node) = FLOAT_TYPE_SIZE; layout_type (neon_float_type_node); @@ -18106,7 +19050,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ /* Define typedefs which exactly correspond to the modes we are basing vector types on. If you change these names you'll need to change -@@ -20027,6 +20674,8 @@ +@@ -20027,6 +20622,8 @@ "__builtin_neon_qi"); (*lang_hooks.types.register_builtin_type) (neon_intHI_type_node, "__builtin_neon_hi"); @@ -18115,7 +19059,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (*lang_hooks.types.register_builtin_type) (neon_intSI_type_node, "__builtin_neon_si"); (*lang_hooks.types.register_builtin_type) (neon_float_type_node, -@@ -20068,6 +20717,8 @@ +@@ -20068,6 +20665,8 @@ build_vector_type_for_mode (neon_intQI_type_node, V8QImode); V4HI_type_node = build_vector_type_for_mode (neon_intHI_type_node, V4HImode); @@ -18124,7 +19068,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ V2SI_type_node = build_vector_type_for_mode (neon_intSI_type_node, V2SImode); V2SF_type_node = -@@ -20190,7 +20841,7 @@ +@@ -20190,7 +20789,7 @@ neon_builtin_datum *d = &neon_builtin_data[i]; const char* const modenames[] = { @@ -18133,7 +19077,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ "v16qi", "v8hi", "v4si", "v4sf", "v2di", "ti", "ei", "oi" }; -@@ -20393,8 +21044,9 @@ +@@ -20393,8 +20992,9 @@ case NEON_REINTERP: { /* We iterate over 5 doubleword types, then 5 quadword @@ -18145,7 +19089,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ switch (insn_data[d->code].operand[0].mode) { case V8QImode: ftype = reinterp_ftype_dreg[0][rhs]; break; -@@ -20411,7 +21063,38 @@ +@@ -20411,7 +21011,38 @@ } } break; @@ -18184,7 +19128,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ default: gcc_unreachable (); } -@@ -21408,6 +22091,8 @@ +@@ -21408,6 +22039,8 @@ case NEON_DUP: case NEON_RINT: case NEON_SPLIT: @@ -18193,7 +19137,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ case NEON_REINTERP: return arm_expand_neon_args (target, icode, 1, type_mode, exp, fcode, NEON_ARG_COPY_TO_REG, NEON_ARG_STOP); -@@ -21605,7 +22290,7 @@ +@@ -21605,7 +22238,7 @@ rtx op1; rtx op2; rtx pat; @@ -18202,119 +19146,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ size_t i; enum machine_mode tmode; enum machine_mode mode0; -@@ -23322,7 +24007,7 @@ - all we really need to check here is if single register is to be - returned, or multiple register return. */ - void --thumb2_expand_return (void) -+thumb2_expand_return (bool simple_return) - { - int i, num_regs; - unsigned long saved_regs_mask; -@@ -23335,7 +24020,7 @@ - if (saved_regs_mask & (1 << i)) - num_regs++; - -- if (saved_regs_mask) -+ if (!simple_return && saved_regs_mask) - { - if (num_regs == 1) - { -@@ -23613,6 +24298,7 @@ - - if (frame_pointer_needed) - { -+ rtx insn; - /* Restore stack pointer if necessary. */ - if (TARGET_ARM) - { -@@ -23623,9 +24309,12 @@ - /* Force out any pending memory operations that reference stacked data - before stack de-allocation occurs. */ - emit_insn (gen_blockage ()); -- emit_insn (gen_addsi3 (stack_pointer_rtx, -- hard_frame_pointer_rtx, -- GEN_INT (amount))); -+ insn = emit_insn (gen_addsi3 (stack_pointer_rtx, -+ hard_frame_pointer_rtx, -+ GEN_INT (amount))); -+ arm_add_cfa_adjust_cfa_note (insn, amount, -+ stack_pointer_rtx, -+ hard_frame_pointer_rtx); - - /* Emit USE(stack_pointer_rtx) to ensure that stack adjustment is not - deleted. */ -@@ -23635,16 +24324,25 @@ - { - /* In Thumb-2 mode, the frame pointer points to the last saved - register. */ -- amount = offsets->locals_base - offsets->saved_regs; -- if (amount) -- emit_insn (gen_addsi3 (hard_frame_pointer_rtx, -- hard_frame_pointer_rtx, -- GEN_INT (amount))); -+ amount = offsets->locals_base - offsets->saved_regs; -+ if (amount) -+ { -+ insn = emit_insn (gen_addsi3 (hard_frame_pointer_rtx, -+ hard_frame_pointer_rtx, -+ GEN_INT (amount))); -+ arm_add_cfa_adjust_cfa_note (insn, amount, -+ hard_frame_pointer_rtx, -+ hard_frame_pointer_rtx); -+ } - - /* Force out any pending memory operations that reference stacked data - before stack de-allocation occurs. */ - emit_insn (gen_blockage ()); -- emit_insn (gen_movsi (stack_pointer_rtx, hard_frame_pointer_rtx)); -+ insn = emit_insn (gen_movsi (stack_pointer_rtx, -+ hard_frame_pointer_rtx)); -+ arm_add_cfa_adjust_cfa_note (insn, 0, -+ stack_pointer_rtx, -+ hard_frame_pointer_rtx); - /* Emit USE(stack_pointer_rtx) to ensure that stack adjustment is not - deleted. */ - emit_insn (gen_force_register_use (stack_pointer_rtx)); -@@ -23657,12 +24355,15 @@ - amount = offsets->outgoing_args - offsets->saved_regs; - if (amount) - { -+ rtx tmp; - /* Force out any pending memory operations that reference stacked data - before stack de-allocation occurs. */ - emit_insn (gen_blockage ()); -- emit_insn (gen_addsi3 (stack_pointer_rtx, -- stack_pointer_rtx, -- GEN_INT (amount))); -+ tmp = emit_insn (gen_addsi3 (stack_pointer_rtx, -+ stack_pointer_rtx, -+ GEN_INT (amount))); -+ arm_add_cfa_adjust_cfa_note (tmp, amount, -+ stack_pointer_rtx, stack_pointer_rtx); - /* Emit USE(stack_pointer_rtx) to ensure that stack adjustment is - not deleted. */ - emit_insn (gen_force_register_use (stack_pointer_rtx)); -@@ -23715,6 +24416,8 @@ - REG_NOTES (insn) = alloc_reg_note (REG_CFA_RESTORE, - gen_rtx_REG (V2SImode, i), - NULL_RTX); -+ arm_add_cfa_adjust_cfa_note (insn, UNITS_PER_WORD, -+ stack_pointer_rtx, stack_pointer_rtx); - } - - if (saved_regs_mask) -@@ -23762,6 +24465,9 @@ - REG_NOTES (insn) = alloc_reg_note (REG_CFA_RESTORE, - gen_rtx_REG (SImode, i), - NULL_RTX); -+ arm_add_cfa_adjust_cfa_note (insn, UNITS_PER_WORD, -+ stack_pointer_rtx, -+ stack_pointer_rtx); - } - } - } -@@ -23772,6 +24478,8 @@ +@@ -23772,6 +24405,8 @@ { if (TARGET_THUMB2) thumb2_emit_ldrd_pop (saved_regs_mask); @@ -18323,45 +19155,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ else arm_emit_multi_reg_pop (saved_regs_mask); } -@@ -23784,10 +24492,34 @@ - } - - if (crtl->args.pretend_args_size) -- emit_insn (gen_addsi3 (stack_pointer_rtx, -- stack_pointer_rtx, -- GEN_INT (crtl->args.pretend_args_size))); -+ { -+ int i, j; -+ rtx dwarf = NULL_RTX; -+ rtx tmp = emit_insn (gen_addsi3 (stack_pointer_rtx, -+ stack_pointer_rtx, -+ GEN_INT (crtl->args.pretend_args_size))); - -+ RTX_FRAME_RELATED_P (tmp) = 1; -+ -+ if (cfun->machine->uses_anonymous_args) -+ { -+ /* Restore pretend args. Refer arm_expand_prologue on how to save -+ pretend_args in stack. */ -+ int num_regs = crtl->args.pretend_args_size / 4; -+ saved_regs_mask = (0xf0 >> num_regs) & 0xf; -+ for (j = 0, i = 0; j < num_regs; i++) -+ if (saved_regs_mask & (1 << i)) -+ { -+ rtx reg = gen_rtx_REG (SImode, i); -+ dwarf = alloc_reg_note (REG_CFA_RESTORE, reg, dwarf); -+ j++; -+ } -+ REG_NOTES (tmp) = dwarf; -+ } -+ arm_add_cfa_adjust_cfa_note (tmp, crtl->args.pretend_args_size, -+ stack_pointer_rtx, stack_pointer_rtx); -+ } -+ - if (!really_return) - return; - -@@ -25040,7 +25772,7 @@ +@@ -25040,7 +25675,7 @@ { /* Neon also supports V2SImode, etc. listed in the clause below. */ if (TARGET_NEON && (mode == V2SFmode || mode == V4SImode || mode == V8HImode @@ -18370,7 +19164,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ return true; if ((TARGET_NEON || TARGET_IWMMXT) -@@ -25203,9 +25935,8 @@ +@@ -25203,9 +25838,8 @@ nregs = GET_MODE_SIZE (GET_MODE (rtl)) / 8; p = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (nregs)); @@ -18381,26 +19175,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ return p; } -@@ -25455,9 +26186,17 @@ - handled_one = true; - break; - -+ /* The INSN is generated in epilogue. It is set as RTX_FRAME_RELATED_P -+ to get correct dwarf information for shrink-wrap. We should not -+ emit unwind information for it because these are used either for -+ pretend arguments or notes to adjust sp and restore registers from -+ stack. */ -+ case REG_CFA_ADJUST_CFA: -+ case REG_CFA_RESTORE: -+ return; -+ - case REG_CFA_DEF_CFA: - case REG_CFA_EXPRESSION: -- case REG_CFA_ADJUST_CFA: - case REG_CFA_OFFSET: - /* ??? Only handling here what we actually emit. */ - gcc_unreachable (); -@@ -25855,6 +26594,7 @@ +@@ -25855,6 +26489,7 @@ case cortexa7: case cortexa8: case cortexa9: @@ -18408,7 +19183,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ case fa726te: case marvell_pj4: return 2; -@@ -25883,6 +26623,7 @@ +@@ -25883,6 +26518,7 @@ { V8QImode, "__builtin_neon_uqi", "16__simd64_uint8_t" }, { V4HImode, "__builtin_neon_hi", "16__simd64_int16_t" }, { V4HImode, "__builtin_neon_uhi", "17__simd64_uint16_t" }, @@ -18416,7 +19191,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ { V2SImode, "__builtin_neon_si", "16__simd64_int32_t" }, { V2SImode, "__builtin_neon_usi", "17__simd64_uint32_t" }, { V2SFmode, "__builtin_neon_sf", "18__simd64_float32_t" }, -@@ -25981,6 +26722,60 @@ +@@ -25981,6 +26617,60 @@ return !TARGET_THUMB1; } @@ -18477,7 +19252,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ /* The AAPCS sets the maximum alignment of a vector to 64 bits. */ static HOST_WIDE_INT arm_vector_alignment (const_tree type) -@@ -26211,40 +27006,72 @@ +@@ -26211,40 +26901,72 @@ emit_insn (gen_memory_barrier ()); } @@ -18567,7 +19342,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ emit_insn (gen (bval, rval, mem)); } -@@ -26279,6 +27106,15 @@ +@@ -26279,6 +27001,15 @@ mod_f = operands[7]; mode = GET_MODE (mem); @@ -18583,7 +19358,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ switch (mode) { case QImode: -@@ -26353,8 +27189,20 @@ +@@ -26353,8 +27084,20 @@ scratch = operands[7]; mode = GET_MODE (mem); @@ -18605,7 +19380,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ label1 = NULL_RTX; if (!is_weak) { -@@ -26363,7 +27211,7 @@ +@@ -26363,7 +27106,7 @@ } label2 = gen_label_rtx (); @@ -18614,7 +19389,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ cond = arm_gen_compare_reg (NE, rval, oldval, scratch); x = gen_rtx_NE (VOIDmode, cond, const0_rtx); -@@ -26371,7 +27219,7 @@ +@@ -26371,7 +27114,7 @@ gen_rtx_LABEL_REF (Pmode, label2), pc_rtx); emit_unlikely_jump (gen_rtx_SET (VOIDmode, pc_rtx, x)); @@ -18623,7 +19398,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ /* Weak or strong, we want EQ to be true for success, so that we match the flags that we got from the compare above. */ -@@ -26390,7 +27238,9 @@ +@@ -26390,7 +27133,9 @@ if (mod_f != MEMMODEL_RELAXED) emit_label (label2); @@ -18634,7 +19409,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ if (mod_f == MEMMODEL_RELAXED) emit_label (label2); -@@ -26405,8 +27255,20 @@ +@@ -26405,8 +27150,20 @@ enum machine_mode wmode = (mode == DImode ? DImode : SImode); rtx label, x; @@ -18656,7 +19431,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ label = gen_label_rtx (); emit_label (label); -@@ -26418,7 +27280,7 @@ +@@ -26418,7 +27175,7 @@ old_out = new_out; value = simplify_gen_subreg (wmode, value, mode, 0); @@ -18665,7 +19440,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ switch (code) { -@@ -26466,12 +27328,15 @@ +@@ -26466,12 +27223,15 @@ break; } @@ -18683,6 +19458,19 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ } #define MAX_VECT_LEN 16 +@@ -27411,4 +28171,12 @@ + + } + ++/* Implement the TARGET_ASAN_SHADOW_OFFSET hook. */ ++ ++static unsigned HOST_WIDE_INT ++arm_asan_shadow_offset (void) ++{ ++ return (unsigned HOST_WIDE_INT) 1 << 29; ++} ++ + #include "gt-arm.h" --- a/src/gcc/config/arm/arm.h +++ b/src/gcc/config/arm/arm.h @@ -350,10 +350,16 @@ @@ -18722,31 +19510,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ /* Modes valid for Neon Q registers. */ #define VALID_NEON_QREG_MODE(MODE) \ -@@ -1130,6 +1140,7 @@ - STACK_REG, - BASE_REGS, - HI_REGS, -+ CALLER_SAVE_REGS, - GENERAL_REGS, - CORE_REGS, - VFP_D0_D7_REGS, -@@ -1156,6 +1167,7 @@ - "STACK_REG", \ - "BASE_REGS", \ - "HI_REGS", \ -+ "CALLER_SAVE_REGS", \ - "GENERAL_REGS", \ - "CORE_REGS", \ - "VFP_D0_D7_REGS", \ -@@ -1181,6 +1193,7 @@ - { 0x00002000, 0x00000000, 0x00000000, 0x00000000 }, /* STACK_REG */ \ - { 0x000020FF, 0x00000000, 0x00000000, 0x00000000 }, /* BASE_REGS */ \ - { 0x00005F00, 0x00000000, 0x00000000, 0x00000000 }, /* HI_REGS */ \ -+ { 0x0000100F, 0x00000000, 0x00000000, 0x00000000 }, /* CALLER_SAVE_REGS */ \ - { 0x00005FFF, 0x00000000, 0x00000000, 0x00000000 }, /* GENERAL_REGS */ \ - { 0x00007FFF, 0x00000000, 0x00000000, 0x00000000 }, /* CORE_REGS */ \ - { 0xFFFF0000, 0x00000000, 0x00000000, 0x00000000 }, /* VFP_D0_D7_REGS */ \ -@@ -1639,7 +1652,7 @@ +@@ -1639,7 +1649,7 @@ frame. */ #define EXIT_IGNORE_STACK 1 @@ -18755,6 +19519,113 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ /* Determine if the epilogue should be output as RTL. You should override this if you define FUNCTION_EXTRA_EPILOGUE. */ +--- a/src/gcc/config/arm/arm-fixed.md ++++ b/src/gcc/config/arm/arm-fixed.md +@@ -19,12 +19,13 @@ + ;; This file contains ARM instructions that support fixed-point operations. + + (define_insn "add<mode>3" +- [(set (match_operand:FIXED 0 "s_register_operand" "=r") +- (plus:FIXED (match_operand:FIXED 1 "s_register_operand" "r") +- (match_operand:FIXED 2 "s_register_operand" "r")))] ++ [(set (match_operand:FIXED 0 "s_register_operand" "=l,r") ++ (plus:FIXED (match_operand:FIXED 1 "s_register_operand" "l,r") ++ (match_operand:FIXED 2 "s_register_operand" "l,r")))] + "TARGET_32BIT" + "add%?\\t%0, %1, %2" +- [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "yes,no")]) + + (define_insn "add<mode>3" + [(set (match_operand:ADDSUB 0 "s_register_operand" "=r") +@@ -32,7 +33,8 @@ + (match_operand:ADDSUB 2 "s_register_operand" "r")))] + "TARGET_INT_SIMD" + "sadd<qaddsub_suf>%?\\t%0, %1, %2" +- [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "usadd<mode>3" + [(set (match_operand:UQADDSUB 0 "s_register_operand" "=r") +@@ -40,7 +42,8 @@ + (match_operand:UQADDSUB 2 "s_register_operand" "r")))] + "TARGET_INT_SIMD" + "uqadd<qaddsub_suf>%?\\t%0, %1, %2" +- [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "ssadd<mode>3" + [(set (match_operand:QADDSUB 0 "s_register_operand" "=r") +@@ -48,15 +51,17 @@ + (match_operand:QADDSUB 2 "s_register_operand" "r")))] + "TARGET_INT_SIMD" + "qadd<qaddsub_suf>%?\\t%0, %1, %2" +- [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "sub<mode>3" +- [(set (match_operand:FIXED 0 "s_register_operand" "=r") +- (minus:FIXED (match_operand:FIXED 1 "s_register_operand" "r") +- (match_operand:FIXED 2 "s_register_operand" "r")))] ++ [(set (match_operand:FIXED 0 "s_register_operand" "=l,r") ++ (minus:FIXED (match_operand:FIXED 1 "s_register_operand" "l,r") ++ (match_operand:FIXED 2 "s_register_operand" "l,r")))] + "TARGET_32BIT" + "sub%?\\t%0, %1, %2" +- [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "yes,no")]) + + (define_insn "sub<mode>3" + [(set (match_operand:ADDSUB 0 "s_register_operand" "=r") +@@ -64,7 +69,8 @@ + (match_operand:ADDSUB 2 "s_register_operand" "r")))] + "TARGET_INT_SIMD" + "ssub<qaddsub_suf>%?\\t%0, %1, %2" +- [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "ussub<mode>3" + [(set (match_operand:UQADDSUB 0 "s_register_operand" "=r") +@@ -73,7 +79,8 @@ + (match_operand:UQADDSUB 2 "s_register_operand" "r")))] + "TARGET_INT_SIMD" + "uqsub<qaddsub_suf>%?\\t%0, %1, %2" +- [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "sssub<mode>3" + [(set (match_operand:QADDSUB 0 "s_register_operand" "=r") +@@ -81,7 +88,8 @@ + (match_operand:QADDSUB 2 "s_register_operand" "r")))] + "TARGET_INT_SIMD" + "qsub<qaddsub_suf>%?\\t%0, %1, %2" +- [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + ;; Fractional multiplies. + +@@ -374,6 +382,7 @@ + "TARGET_32BIT && arm_arch6" + "ssat%?\\t%0, #16, %2%S1" + [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no") + (set_attr "insn" "sat") + (set_attr "shift" "1") + (set_attr "type" "alu_shift")]) +@@ -384,4 +393,5 @@ + "TARGET_INT_SIMD" + "usat%?\\t%0, #16, %1" + [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no") + (set_attr "insn" "sat")]) --- a/src/gcc/config/arm/unspecs.md +++ b/src/gcc/config/arm/unspecs.md @@ -83,6 +83,8 @@ @@ -18777,6 +19648,25 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ]) ;; Enumerators for NEON unspecs. +--- a/src/gcc/config/arm/linux-eabi.h ++++ b/src/gcc/config/arm/linux-eabi.h +@@ -84,10 +84,14 @@ + LINUX_OR_ANDROID_LD (LINUX_TARGET_LINK_SPEC, \ + LINUX_TARGET_LINK_SPEC " " ANDROID_LINK_SPEC) + ++#undef ASAN_CC1_SPEC ++#define ASAN_CC1_SPEC "%{fsanitize=*:-funwind-tables}" ++ + #undef CC1_SPEC + #define CC1_SPEC \ +- LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC, \ +- GNU_USER_TARGET_CC1_SPEC " " ANDROID_CC1_SPEC) ++ LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC " " ASAN_CC1_SPEC, \ ++ GNU_USER_TARGET_CC1_SPEC " " ASAN_CC1_SPEC " " \ ++ ANDROID_CC1_SPEC) + + #define CC1PLUS_SPEC \ + LINUX_OR_ANDROID_CC ("", ANDROID_CC1PLUS_SPEC) --- a/src/gcc/config/arm/arm-cores.def +++ b/src/gcc/config/arm/arm-cores.def @@ -129,9 +129,11 @@ @@ -18802,22 +19692,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (const (symbol_ref "((enum attr_tune) arm_tune)"))) --- a/src/gcc/config/arm/arm-protos.h +++ b/src/gcc/config/arm/arm-protos.h -@@ -24,12 +24,13 @@ - - extern enum unwind_info_type arm_except_unwind_info (struct gcc_options *); - extern int use_return_insn (int, rtx); -+extern bool use_simple_return_p (void); - extern enum reg_class arm_regno_class (int); - extern void arm_load_pic_register (unsigned long); - extern int arm_volatile_func (void); - extern void arm_expand_prologue (void); - extern void arm_expand_epilogue (bool); --extern void thumb2_expand_return (void); -+extern void thumb2_expand_return (bool); - extern const char *arm_strip_name_encoding (const char *); - extern void arm_asm_output_labelref (FILE *, const char *); - extern void thumb2_asm_output_opcode (FILE *); -@@ -78,6 +79,7 @@ +@@ -78,6 +78,7 @@ extern void neon_pairwise_reduce (rtx, rtx, enum machine_mode, rtx (*) (rtx, rtx, rtx)); extern rtx neon_make_constant (rtx); @@ -18825,7 +19700,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ extern void neon_expand_vector_init (rtx, rtx); extern void neon_lane_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT); extern void neon_const_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT); -@@ -117,7 +119,9 @@ +@@ -117,7 +118,9 @@ extern rtx arm_gen_store_multiple (int *, int, rtx, int, rtx, HOST_WIDE_INT *); extern bool offset_ok_for_ldrd_strd (HOST_WIDE_INT); extern bool operands_ok_ldrd_strd (rtx, rtx, rtx, HOST_WIDE_INT, bool, bool); @@ -18835,7 +19710,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ extern enum machine_mode arm_select_cc_mode (RTX_CODE, rtx, rtx); extern enum machine_mode arm_select_dominance_cc_mode (rtx, rtx, HOST_WIDE_INT); -@@ -269,6 +273,8 @@ +@@ -269,6 +272,8 @@ bool logical_op_non_short_circuit[2]; /* Vectorizer costs. */ const struct cpu_vec_costs* vec_costs; @@ -18977,6 +19852,248 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ DONE; }) +--- a/src/gcc/config/arm/ldmstm.md ++++ b/src/gcc/config/arm/ldmstm.md +@@ -37,7 +37,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 4" + "ldm%(ia%)\t%5, {%1, %2, %3, %4}" + [(set_attr "type" "load4") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*thumb_ldm4_ia" + [(match_parallel 0 "load_multiple_operation" +@@ -74,7 +75,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 5" + "ldm%(ia%)\t%5!, {%1, %2, %3, %4}" + [(set_attr "type" "load4") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*thumb_ldm4_ia_update" + [(match_parallel 0 "load_multiple_operation" +@@ -108,7 +110,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 4" + "stm%(ia%)\t%5, {%1, %2, %3, %4}" + [(set_attr "type" "store4") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*stm4_ia_update" + [(match_parallel 0 "store_multiple_operation" +@@ -125,7 +128,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 5" + "stm%(ia%)\t%5!, {%1, %2, %3, %4}" + [(set_attr "type" "store4") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*thumb_stm4_ia_update" + [(match_parallel 0 "store_multiple_operation" +@@ -302,7 +306,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 4" + "ldm%(db%)\t%5, {%1, %2, %3, %4}" + [(set_attr "type" "load4") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*ldm4_db_update" + [(match_parallel 0 "load_multiple_operation" +@@ -323,7 +328,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 5" + "ldm%(db%)\t%5!, {%1, %2, %3, %4}" + [(set_attr "type" "load4") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*stm4_db" + [(match_parallel 0 "store_multiple_operation" +@@ -338,7 +344,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 4" + "stm%(db%)\t%5, {%1, %2, %3, %4}" + [(set_attr "type" "store4") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*stm4_db_update" + [(match_parallel 0 "store_multiple_operation" +@@ -355,7 +362,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 5" + "stm%(db%)\t%5!, {%1, %2, %3, %4}" + [(set_attr "type" "store4") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_peephole2 + [(set (match_operand:SI 0 "s_register_operand" "") +@@ -477,7 +485,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 3" + "ldm%(ia%)\t%4, {%1, %2, %3}" + [(set_attr "type" "load3") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*thumb_ldm3_ia" + [(match_parallel 0 "load_multiple_operation" +@@ -508,7 +517,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 4" + "ldm%(ia%)\t%4!, {%1, %2, %3}" + [(set_attr "type" "load3") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*thumb_ldm3_ia_update" + [(match_parallel 0 "load_multiple_operation" +@@ -537,7 +547,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 3" + "stm%(ia%)\t%4, {%1, %2, %3}" + [(set_attr "type" "store3") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*stm3_ia_update" + [(match_parallel 0 "store_multiple_operation" +@@ -552,7 +563,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 4" + "stm%(ia%)\t%4!, {%1, %2, %3}" + [(set_attr "type" "store3") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*thumb_stm3_ia_update" + [(match_parallel 0 "store_multiple_operation" +@@ -704,7 +716,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 3" + "ldm%(db%)\t%4, {%1, %2, %3}" + [(set_attr "type" "load3") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*ldm3_db_update" + [(match_parallel 0 "load_multiple_operation" +@@ -722,7 +735,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 4" + "ldm%(db%)\t%4!, {%1, %2, %3}" + [(set_attr "type" "load3") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*stm3_db" + [(match_parallel 0 "store_multiple_operation" +@@ -735,7 +749,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 3" + "stm%(db%)\t%4, {%1, %2, %3}" + [(set_attr "type" "store3") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*stm3_db_update" + [(match_parallel 0 "store_multiple_operation" +@@ -750,7 +765,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 4" + "stm%(db%)\t%4!, {%1, %2, %3}" + [(set_attr "type" "store3") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_peephole2 + [(set (match_operand:SI 0 "s_register_operand" "") +@@ -855,7 +871,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 2" + "ldm%(ia%)\t%3, {%1, %2}" + [(set_attr "type" "load2") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*thumb_ldm2_ia" + [(match_parallel 0 "load_multiple_operation" +@@ -880,7 +897,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 3" + "ldm%(ia%)\t%3!, {%1, %2}" + [(set_attr "type" "load2") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*thumb_ldm2_ia_update" + [(match_parallel 0 "load_multiple_operation" +@@ -904,7 +922,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 2" + "stm%(ia%)\t%3, {%1, %2}" + [(set_attr "type" "store2") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*stm2_ia_update" + [(match_parallel 0 "store_multiple_operation" +@@ -917,7 +936,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 3" + "stm%(ia%)\t%3!, {%1, %2}" + [(set_attr "type" "store2") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*thumb_stm2_ia_update" + [(match_parallel 0 "store_multiple_operation" +@@ -1044,7 +1064,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 2" + "ldm%(db%)\t%3, {%1, %2}" + [(set_attr "type" "load2") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*ldm2_db_update" + [(match_parallel 0 "load_multiple_operation" +@@ -1059,7 +1080,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 3" + "ldm%(db%)\t%3!, {%1, %2}" + [(set_attr "type" "load2") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*stm2_db" + [(match_parallel 0 "store_multiple_operation" +@@ -1070,7 +1092,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 2" + "stm%(db%)\t%3, {%1, %2}" + [(set_attr "type" "store2") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_insn "*stm2_db_update" + [(match_parallel 0 "store_multiple_operation" +@@ -1083,7 +1106,8 @@ + "TARGET_32BIT && XVECLEN (operands[0], 0) == 3" + "stm%(db%)\t%3!, {%1, %2}" + [(set_attr "type" "store2") +- (set_attr "predicable" "yes")]) ++ (set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_peephole2 + [(set (match_operand:SI 0 "s_register_operand" "") --- a/src/gcc/config/arm/arm_neon_builtins.def +++ b/src/gcc/config/arm/arm_neon_builtins.def @@ -0,0 +1,212 @@ @@ -19437,17 +20554,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_register_constraint "b" "TARGET_THUMB ? BASE_REGS : NO_REGS" "@internal Thumb only. The union of the low registers and the stack register.") -@@ -93,6 +96,9 @@ - (define_register_constraint "c" "CC_REG" - "@internal The condition code register.") - -+(define_register_constraint "Cs" "CALLER_SAVE_REGS" -+ "@internal The caller save registers. Useful for sibcalls.") -+ - (define_constraint "I" - "In ARM/Thumb-2 state a constant that can be used as an immediate value in a - Data Processing instruction. In Thumb-1 state a constant in the range -@@ -248,6 +254,12 @@ +@@ -248,6 +251,12 @@ (and (match_code "const_int") (match_test "TARGET_32BIT && const_ok_for_dimode_op (ival, PLUS)"))) @@ -19460,16 +20567,6 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_constraint "Di" "@internal In ARM/Thumb-2 state a const_int or const_double where both the high -@@ -391,3 +403,9 @@ - ;; Additionally, we used to have a Q constraint in Thumb state, but - ;; this wasn't really a valid memory constraint. Again, all uses of - ;; this now seem to have been removed. -+ -+(define_constraint "Ss" -+ "@internal -+ Ss is a symbol reference." -+ (match_code "symbol_ref") -+) --- a/src/gcc/config/arm/arm-arches.def +++ b/src/gcc/config/arm/arm-arches.def @@ -53,6 +53,6 @@ @@ -19510,7 +20607,18 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ coretypes.h $(TM_H) $(TREE_H) output.h $(C_COMMON_H) --- a/src/gcc/config/arm/arm.opt +++ b/src/gcc/config/arm/arm.opt -@@ -247,3 +247,7 @@ +@@ -239,6 +239,10 @@ + Target Report Var(target_word_relocations) Init(TARGET_DEFAULT_WORD_RELOCATIONS) + Only generate absolute relocations on word sized values. + ++mrestrict-it ++Target Report Var(arm_restrict_it) Init(2) ++Generate IT blocks appropriate for ARMv8. ++ + mfix-cortex-m3-ldrd + Target Report Var(fix_cm3_ldrd) Init(2) + Avoid overlapping destination and address registers on LDRD instructions +@@ -247,3 +251,7 @@ munaligned-access Target Report Var(unaligned_access) Init(2) Enable unaligned word and halfword accesses to packed data. @@ -19855,14 +20963,6 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ;; Predicates for named expanders that overlap multiple ISAs. (define_predicate "cmpdi_operand" -@@ -617,3 +635,7 @@ - (define_predicate "mem_noofs_operand" - (and (match_code "mem") - (match_code "reg" "0"))) -+ -+(define_predicate "call_insn_operand" -+ (ior (match_code "symbol_ref") -+ (match_operand 0 "s_register_operand"))) --- a/src/gcc/config/arm/arm_neon.h +++ b/src/gcc/config/arm/arm_neon.h @@ -43,6 +43,7 @@ @@ -19896,6 +20996,36 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ __extension__ static __inline int32x2_t __attribute__ ((__always_inline__)) vcvt_n_s32_f32 (float32x2_t __a, const int __b) { +--- a/src/gcc/config/arm/arm-ldmstm.ml ++++ b/src/gcc/config/arm/arm-ldmstm.ml +@@ -146,12 +146,15 @@ + | IA, true, true -> true + | _ -> false + ++exception InvalidAddrMode of string;; ++ + let target addrmode thumb = + match addrmode, thumb with + IA, true -> "TARGET_THUMB1" + | IA, false -> "TARGET_32BIT" + | DB, false -> "TARGET_32BIT" + | _, false -> "TARGET_ARM" ++ | _, _ -> raise (InvalidAddrMode "ERROR: Invalid Addressing mode for Thumb1.") + + let write_pattern_1 name ls addrmode nregs write_set_fn update thumb = + let astr = string_of_addrmode addrmode in +@@ -181,8 +184,10 @@ + done; + Printf.printf "}\"\n"; + Printf.printf " [(set_attr \"type\" \"%s%d\")" ls nregs; +- begin if not thumb then ++ if not thumb then begin + Printf.printf "\n (set_attr \"predicable\" \"yes\")"; ++ if addrmode == IA || addrmode == DB then ++ Printf.printf "\n (set_attr \"predicable_short_it\" \"no\")"; + end; + Printf.printf "])\n\n" + --- a/src/gcc/config/arm/cortex-a53.md +++ b/src/gcc/config/arm/cortex-a53.md @@ -0,0 +1,296 @@ @@ -20213,20 +21343,6 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ |mcpu=marvell-pj4 \ |mcpu=generic-armv7-a \ |march=armv7-m|mcpu=cortex-m3 \ ---- a/src/gcc/config/arm/iterators.md -+++ b/src/gcc/config/arm/iterators.md -@@ -496,3 +496,11 @@ - (define_int_attr nvrint_variant [(UNSPEC_NVRINTZ "z") (UNSPEC_NVRINTP "p") - (UNSPEC_NVRINTA "a") (UNSPEC_NVRINTM "m") - (UNSPEC_NVRINTX "x") (UNSPEC_NVRINTN "n")]) -+;; Both kinds of return insn. -+(define_code_iterator returns [return simple_return]) -+(define_code_attr return_str [(return "") (simple_return "simple_")]) -+(define_code_attr return_simple_p [(return "false") (simple_return "true")]) -+(define_code_attr return_cond_false [(return " && USE_RETURN_INSN (FALSE)") -+ (simple_return " && use_simple_return_p ()")]) -+(define_code_attr return_cond_true [(return " && USE_RETURN_INSN (TRUE)") -+ (simple_return " && use_simple_return_p ()")]) --- a/src/gcc/config/arm/sync.md +++ b/src/gcc/config/arm/sync.md @@ -65,6 +65,42 @@ @@ -20272,9 +21388,23 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ;; Note that ldrd and vldr are *not* guaranteed to be single-copy atomic, ;; even for a 64-bit aligned address. Instead we use a ldrexd unparied ;; with a store. -@@ -327,6 +363,16 @@ +@@ -88,7 +124,8 @@ + UNSPEC_LL))] + "TARGET_HAVE_LDREXD && ARM_DOUBLEWORD_ALIGN" + "ldrexd%?\t%0, %H0, %C1" +- [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + + (define_expand "atomic_compare_and_swap<mode>" + [(match_operand:SI 0 "s_register_operand" "") ;; bool out +@@ -325,8 +362,20 @@ + VUNSPEC_LL)))] + "TARGET_HAVE_LDREXBH" "ldrex<sync_sfx>%?\t%0, %C1" - [(set_attr "predicable" "yes")]) +- [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) +(define_insn "arm_load_acquire_exclusive<mode>" + [(set (match_operand:SI 0 "s_register_operand" "=r") @@ -20284,14 +21414,19 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + VUNSPEC_LAX)))] + "TARGET_HAVE_LDACQ" + "ldaex<sync_sfx>%?\\t%0, %C1" -+ [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + (define_insn "arm_load_exclusivesi" [(set (match_operand:SI 0 "s_register_operand" "=r") (unspec_volatile:SI -@@ -336,6 +382,15 @@ +@@ -334,8 +383,19 @@ + VUNSPEC_LL))] + "TARGET_HAVE_LDREX" "ldrex%?\t%0, %C1" - [(set_attr "predicable" "yes")]) +- [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) +(define_insn "arm_load_acquire_exclusivesi" + [(set (match_operand:SI 0 "s_register_operand" "=r") @@ -20300,14 +21435,19 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + VUNSPEC_LAX))] + "TARGET_HAVE_LDACQ" + "ldaex%?\t%0, %C1" -+ [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + (define_insn "arm_load_exclusivedi" [(set (match_operand:DI 0 "s_register_operand" "=r") (unspec_volatile:DI -@@ -345,6 +400,15 @@ +@@ -343,8 +403,19 @@ + VUNSPEC_LL))] + "TARGET_HAVE_LDREXD" "ldrexd%?\t%0, %H0, %C1" - [(set_attr "predicable" "yes")]) +- [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) +(define_insn "arm_load_acquire_exclusivedi" + [(set (match_operand:DI 0 "s_register_operand" "=r") @@ -20316,15 +21456,19 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + VUNSPEC_LAX))] + "TARGET_HAVE_LDACQ && ARM_DOUBLEWORD_ALIGN" + "ldaexd%?\t%0, %H0, %C1" -+ [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + (define_insn "arm_store_exclusive<mode>" [(set (match_operand:SI 0 "s_register_operand" "=&r") (unspec_volatile:SI [(const_int 0)] VUNSPEC_SC)) -@@ -368,3 +432,31 @@ +@@ -367,4 +438,35 @@ + } return "strex<sync_sfx>%?\t%0, %2, %C1"; } - [(set_attr "predicable" "yes")]) +- [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + +(define_insn "arm_store_release_exclusivedi" + [(set (match_operand:SI 0 "s_register_operand" "=&r") @@ -20341,7 +21485,8 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + operands[3] = gen_rtx_REG (SImode, REGNO (value) + 1); + return "stlexd%?\t%0, %2, %3, %C1"; + } -+ [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) + +(define_insn "arm_store_release_exclusive<mode>" + [(set (match_operand:SI 0 "s_register_operand" "=&r") @@ -20352,7 +21497,8 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + VUNSPEC_SLX))] + "TARGET_HAVE_LDACQ" + "stlex<sync_sfx>%?\t%0, %2, %C1" -+ [(set_attr "predicable" "yes")]) ++ [(set_attr "predicable" "yes") ++ (set_attr "predicable_short_it" "no")]) --- a/src/gcc/config/arm/neon-testgen.ml +++ b/src/gcc/config/arm/neon-testgen.ml @@ -163,10 +163,12 @@ @@ -20370,7 +21516,32 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ --- a/src/gcc/config/arm/arm.md +++ b/src/gcc/config/arm/arm.md -@@ -94,7 +94,7 @@ +@@ -74,6 +74,15 @@ + ; IS_THUMB1 is set to 'yes' iff we are generating Thumb-1 code. + (define_attr "is_thumb1" "no,yes" (const (symbol_ref "thumb1_code"))) + ++; We use this attribute to disable alternatives that can produce 32-bit ++; instructions inside an IT-block in Thumb2 state. ARMv8 deprecates IT blocks ++; that contain 32-bit instructions. ++(define_attr "enabled_for_depr_it" "no,yes" (const_string "yes")) ++ ++; This attribute is used to disable a predicated alternative when we have ++; arm_restrict_it. ++(define_attr "predicable_short_it" "no,yes" (const_string "yes")) ++ + ;; Operand number of an input operand that is shifted. Zero if the + ;; given instruction does not shift one of its input operands. + (define_attr "shift" "" (const_int 0)) +@@ -84,6 +93,8 @@ + (define_attr "fpu" "none,vfp" + (const (symbol_ref "arm_fpu_attr"))) + ++(define_attr "predicated" "yes,no" (const_string "no")) ++ + ; LENGTH of an instruction (in bytes) + (define_attr "length" "" + (const_int 4)) +@@ -94,7 +105,7 @@ ; for ARM or Thumb-2 with arm_arch6, and nov6 for ARM without ; arm_arch6. This attribute is used to compute attribute "enabled", ; use type "any" to enable an alternative in all cases. @@ -20379,7 +21550,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (const_string "any")) (define_attr "arch_enabled" "no,yes" -@@ -129,24 +129,16 @@ +@@ -129,24 +140,16 @@ (match_test "TARGET_32BIT && !arm_arch6")) (const_string "yes") @@ -20410,7 +21581,23 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (and (eq_attr "arch" "iwmmxt2") (match_test "TARGET_REALLY_IWMMXT2")) (const_string "yes")] -@@ -296,6 +288,8 @@ +@@ -179,6 +182,15 @@ + (cond [(eq_attr "insn_enabled" "no") + (const_string "no") + ++ (and (eq_attr "predicable_short_it" "no") ++ (and (eq_attr "predicated" "yes") ++ (match_test "arm_restrict_it"))) ++ (const_string "no") ++ ++ (and (eq_attr "enabled_for_depr_it" "no") ++ (match_test "arm_restrict_it")) ++ (const_string "no") ++ + (eq_attr "arch_enabled" "no") + (const_string "no") + +@@ -296,6 +308,8 @@ f_2_r,\ r_2_f,\ f_cvt,\ @@ -20419,7 +21606,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ branch,\ call,\ load_byte,\ -@@ -502,7 +496,7 @@ +@@ -502,7 +516,7 @@ (define_attr "generic_sched" "yes,no" (const (if_then_else @@ -20428,7 +21615,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (eq_attr "tune_cortexr4" "yes")) (const_string "no") (const_string "yes")))) -@@ -510,7 +504,7 @@ +@@ -510,7 +524,7 @@ (define_attr "generic_vfp" "yes,no" (const (if_then_else (and (eq_attr "fpu" "vfp") @@ -20437,7 +21624,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (eq_attr "tune_cortexr4" "no")) (const_string "yes") (const_string "no")))) -@@ -531,6 +525,7 @@ +@@ -531,6 +545,7 @@ (include "cortex-a8.md") (include "cortex-a9.md") (include "cortex-a15.md") @@ -20445,7 +21632,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (include "cortex-r4.md") (include "cortex-r4f.md") (include "cortex-m4.md") -@@ -844,7 +839,7 @@ +@@ -844,7 +859,7 @@ ;; This is the canonicalization of addsi3_compare0_for_combiner when the ;; addend is a constant. @@ -20454,7 +21641,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set (reg:CC CC_REGNUM) (compare:CC (match_operand:SI 1 "s_register_operand" "r,r") -@@ -975,7 +970,8 @@ +@@ -975,7 +990,8 @@ "@ adc%?\\t%0, %1, %2 sbc%?\\t%0, %1, #%B2" @@ -20464,7 +21651,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ) (define_insn "*addsi3_carryin_alt2_<optab>" -@@ -987,7 +983,8 @@ +@@ -987,7 +1003,8 @@ "@ adc%?\\t%0, %1, %2 sbc%?\\t%0, %1, #%B2" @@ -20474,7 +21661,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ) (define_insn "*addsi3_carryin_shift_<optab>" -@@ -1001,6 +998,7 @@ +@@ -1001,6 +1018,7 @@ "TARGET_32BIT" "adc%?\\t%0, %1, %3%S2" [(set_attr "conds" "use") @@ -20482,7 +21669,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (set (attr "type") (if_then_else (match_operand 4 "const_int_operand" "") (const_string "alu_shift") (const_string "alu_shift_reg")))] -@@ -1017,26 +1015,88 @@ +@@ -1017,26 +1035,88 @@ [(set_attr "conds" "set")] ) @@ -20585,7 +21772,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ) ; transform ((x << y) - 1) to ~(~(x-1) << y) Where X is a constant. -@@ -1087,13 +1147,27 @@ +@@ -1087,13 +1167,27 @@ " ) @@ -20615,7 +21802,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "conds" "clob") (set_attr "length" "8")] ) -@@ -1108,55 +1182,113 @@ +@@ -1108,55 +1202,113 @@ [(set_attr "length" "4")] ) @@ -20738,7 +21925,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set (match_operand:DI 0 "s_register_operand" "=r") (minus:DI (zero_extend:DI (match_operand:SI 1 "s_register_operand" "r")) -@@ -1164,7 +1296,17 @@ +@@ -1164,7 +1316,17 @@ (match_operand:SI 2 "s_register_operand" "r")))) (clobber (reg:CC CC_REGNUM))] "TARGET_32BIT" @@ -20757,7 +21944,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "conds" "clob") (set_attr "length" "8")] ) -@@ -1254,7 +1396,7 @@ +@@ -1254,7 +1416,7 @@ (set_attr "type" "simple_alu_imm,*,*")] ) @@ -20766,7 +21953,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set (reg:CC CC_REGNUM) (compare:CC (match_operand:SI 1 "arm_rhs_operand" "r,r,I") (match_operand:SI 2 "arm_rhs_operand" "I,r,r"))) -@@ -1269,29 +1411,6 @@ +@@ -1269,29 +1431,6 @@ (set_attr "type" "simple_alu_imm,*,*")] ) @@ -20796,7 +21983,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_expand "subsf3" [(set (match_operand:SF 0 "s_register_operand" "") (minus:SF (match_operand:SF 1 "s_register_operand" "") -@@ -2024,13 +2143,58 @@ +@@ -2024,13 +2163,49 @@ "" ) @@ -20808,29 +21995,28 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ - "#" - [(set_attr "length" "8")] +(define_insn_and_split "*anddi3_insn" -+ [(set (match_operand:DI 0 "s_register_operand" "=&r,&r,&r,&r,w,w ,?&r,?&r,?w,?w") -+ (and:DI (match_operand:DI 1 "s_register_operand" "%0 ,r ,0,r ,w,0 ,0 ,r ,w ,0") -+ (match_operand:DI 2 "arm_anddi_operand_neon" "r ,r ,De,De,w,DL,r ,r ,w ,DL")))] ++ [(set (match_operand:DI 0 "s_register_operand" "=w,w ,&r,&r,&r,&r,?w,?w") ++ (and:DI (match_operand:DI 1 "s_register_operand" "%w,0 ,0 ,r ,0 ,r ,w ,0") ++ (match_operand:DI 2 "arm_anddi_operand_neon" "w ,DL,r ,r ,De,De,w ,DL")))] + "TARGET_32BIT && !TARGET_IWMMXT" +{ + switch (which_alternative) + { -+ case 0: -+ case 1: ++ case 0: /* fall through */ ++ case 6: return "vand\t%P0, %P1, %P2"; ++ case 1: /* fall through */ ++ case 7: return neon_output_logic_immediate ("vand", &operands[2], ++ DImode, 1, VALID_NEON_QREG_MODE (DImode)); + case 2: -+ case 3: /* fall through */ -+ return "#"; -+ case 4: /* fall through */ -+ case 8: return "vand\t%P0, %P1, %P2"; ++ case 3: ++ case 4: + case 5: /* fall through */ -+ case 9: return neon_output_logic_immediate ("vand", &operands[2], -+ DImode, 1, VALID_NEON_QREG_MODE (DImode)); -+ case 6: return "#"; -+ case 7: return "#"; ++ return "#"; + default: gcc_unreachable (); + } +} -+ "TARGET_32BIT && !TARGET_IWMMXT" ++ "TARGET_32BIT && !TARGET_IWMMXT && reload_completed ++ && !(IS_VFP_REGNUM (REGNO (operands[0])))" + [(set (match_dup 3) (match_dup 4)) + (set (match_dup 5) (match_dup 6))] + " @@ -20846,23 +22032,15 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + gen_highpart_mode (SImode, DImode, operands[2])); + + }" -+ [(set_attr "neon_type" "*,*,*,*,neon_int_1,neon_int_1,*,*,neon_int_1,neon_int_1") -+ (set_attr "arch" "*,*,*,*,neon_for_64bits,neon_for_64bits,*,*, ++ [(set_attr "neon_type" "neon_int_1,neon_int_1,*,*,*,*,neon_int_1,neon_int_1") ++ (set_attr "arch" "neon_for_64bits,neon_for_64bits,*,*,*,*, + avoid_neon_for_64bits,avoid_neon_for_64bits") -+ (set_attr "length" "8,8,8,8,*,*,8,8,*,*") -+ (set (attr "insn_enabled") (if_then_else -+ (lt (symbol_ref "which_alternative") -+ (const_int 4)) -+ (if_then_else (match_test "!TARGET_NEON") -+ (const_string "yes") -+ (const_string "no")) -+ (if_then_else (match_test "TARGET_NEON") -+ (const_string "yes") -+ (const_string "no"))))] ++ (set_attr "length" "*,*,8,8,8,8,*,*") ++ ] ) (define_insn_and_split "*anddi_zesidi_di" -@@ -3096,13 +3260,17 @@ +@@ -3096,13 +3271,17 @@ "" ) @@ -20882,7 +22060,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "length" "8") (set_attr "ce_count" "2") (set_attr "predicable" "yes")] -@@ -3253,15 +3421,23 @@ +@@ -3253,15 +3432,23 @@ [(set_attr "predicable" "yes")] ) @@ -20910,7 +22088,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "conds" "clob") (set_attr "length" "8,12")] ) -@@ -3293,15 +3469,23 @@ +@@ -3293,15 +3480,23 @@ [(set_attr "predicable" "yes")] ) @@ -20938,7 +22116,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "conds" "clob") (set_attr "length" "8,12")] ) -@@ -3316,16 +3500,24 @@ +@@ -3316,16 +3511,24 @@ "" ) @@ -20968,7 +22146,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "conds" "clob") (set_attr "length" "8,8,12")] ) -@@ -3340,16 +3532,24 @@ +@@ -3340,16 +3543,24 @@ "" ) @@ -20998,7 +22176,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "conds" "clob") (set_attr "length" "8,8,12")] ) -@@ -3360,7 +3560,7 @@ +@@ -3360,7 +3571,7 @@ [(match_operand:SI 1 "s_register_operand" "r") (match_operand:SI 2 "s_register_operand" "r")])) (clobber (reg:CC CC_REGNUM))] @@ -21007,7 +22185,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ "* operands[3] = gen_rtx_fmt_ee (minmax_code (operands[3]), SImode, operands[1], operands[2]); -@@ -3423,6 +3623,50 @@ +@@ -3423,6 +3634,50 @@ (const_int 12)))] ) @@ -21058,7 +22236,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_code_iterator SAT [smin smax]) (define_code_iterator SATrev [smin smax]) (define_code_attr SATlo [(smin "1") (smax "2")]) -@@ -3533,13 +3777,26 @@ +@@ -3533,13 +3788,26 @@ " ) @@ -21087,7 +22265,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "conds" "clob") (set_attr "length" "8")] ) -@@ -3615,18 +3872,43 @@ +@@ -3615,18 +3883,43 @@ " ) @@ -21134,7 +22312,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_expand "ashrsi3" [(set (match_operand:SI 0 "s_register_operand" "") (ashiftrt:SI (match_operand:SI 1 "s_register_operand" "") -@@ -3695,15 +3977,28 @@ +@@ -3695,15 +3988,28 @@ " ) @@ -21166,7 +22344,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (set_attr "length" "8")] ) -@@ -3791,6 +4086,23 @@ +@@ -3791,6 +4097,23 @@ (const_string "alu_shift_reg")))] ) @@ -21190,7 +22368,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_insn "*shiftsi3_compare0" [(set (reg:CC_NOOV CC_REGNUM) (compare:CC_NOOV (match_operator:SI 3 "shift_operator" -@@ -4090,6 +4402,64 @@ +@@ -4090,6 +4413,64 @@ (set_attr "predicable" "yes") (set_attr "type" "store1")]) @@ -21255,7 +22433,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (define_insn "*extv_reg" [(set (match_operand:SI 0 "s_register_operand" "=r") (sign_extract:SI (match_operand:SI 1 "s_register_operand" "r") -@@ -4154,12 +4524,24 @@ +@@ -4154,12 +4535,24 @@ ;; The constraints here are to prevent a *partial* overlap (where %Q0 == %R1). ;; The first alternative allows the common case of a *full* overlap. @@ -21282,7 +22460,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "conds" "clob") (set_attr "length" "8")] ) -@@ -4209,6 +4591,73 @@ +@@ -4209,6 +4602,73 @@ "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" "") @@ -21356,7 +22534,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ;; abssi2 doesn't really clobber the condition codes if a different register ;; is being set. To keep things simple, assume during rtl manipulations that ;; it does, but tell the final scan operator the truth. Similarly for -@@ -4227,14 +4676,67 @@ +@@ -4227,14 +4687,67 @@ operands[2] = gen_rtx_REG (CCmode, CC_REGNUM); ") @@ -21428,7 +22606,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "conds" "clob,*") (set_attr "shift" "1") (set_attr "predicable" "no, yes") -@@ -4255,14 +4757,56 @@ +@@ -4255,14 +4768,56 @@ [(set_attr "length" "6")] ) @@ -21489,7 +22667,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "conds" "clob,*") (set_attr "shift" "1") (set_attr "predicable" "no, yes") -@@ -4330,7 +4874,7 @@ +@@ -4330,7 +4885,7 @@ [(set_attr "length" "*,8,8,*") (set_attr "predicable" "no,yes,yes,no") (set_attr "neon_type" "neon_int_1,*,*,neon_int_1") @@ -21498,7 +22676,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ) (define_expand "one_cmplsi2" -@@ -4498,7 +5042,7 @@ +@@ -4498,7 +5053,7 @@ "TARGET_32BIT <qhs_zextenddi_cond>" "#" [(set_attr "length" "8,4,8,8") @@ -21507,7 +22685,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (set_attr "ce_count" "2") (set_attr "predicable" "yes")] ) -@@ -4513,7 +5057,7 @@ +@@ -4513,7 +5068,7 @@ (set_attr "ce_count" "2") (set_attr "shift" "1") (set_attr "predicable" "yes") @@ -21516,7 +22694,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ ) ;; Splits for all extensions to DImode -@@ -5313,8 +5857,8 @@ +@@ -5313,8 +5868,8 @@ ) (define_insn "*arm_movdi" @@ -21527,7 +22705,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ "TARGET_32BIT && !(TARGET_HARD_FLOAT && TARGET_VFP) && !TARGET_IWMMXT -@@ -6738,8 +7282,8 @@ +@@ -6738,8 +7293,8 @@ ) (define_insn "*movdf_soft_insn" @@ -21538,7 +22716,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ "TARGET_32BIT && TARGET_SOFT_FLOAT && ( register_operand (operands[0], DFmode) || register_operand (operands[1], DFmode))" -@@ -6869,10 +7413,18 @@ +@@ -6869,10 +7424,18 @@ (match_operand:BLK 1 "general_operand" "") (match_operand:SI 2 "const_int_operand" "") (match_operand:SI 3 "const_int_operand" "")] @@ -21558,7 +22736,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ if (arm_gen_movmemqi (operands)) DONE; FAIL; -@@ -7617,23 +8169,64 @@ +@@ -7617,23 +8180,64 @@ ;; if-conversion can not reduce to a conditional compare, so we do ;; that directly. @@ -21627,7 +22805,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "conds" "set") (set_attr "length" "8")] ) -@@ -7758,36 +8351,56 @@ +@@ -7758,36 +8362,56 @@ operands[3] = const0_rtx;" ) @@ -21693,7 +22871,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ (set_attr "length" "8")] ) -@@ -8110,7 +8723,40 @@ +@@ -8110,7 +8734,40 @@ }" ) @@ -21735,7 +22913,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set (match_operand:SI 0 "s_register_operand" "=r,r,r,r,r,r,r,r") (if_then_else:SI (match_operator 3 "arm_comparison_operator" -@@ -8123,10 +8769,45 @@ +@@ -8123,10 +8780,45 @@ mvn%D3\\t%0, #%B2 mov%d3\\t%0, %1 mvn%d3\\t%0, #%B1 @@ -21785,239 +22963,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "length" "4,4,4,4,8,8,8,8") (set_attr "conds" "use") (set_attr "insn" "mov,mvn,mov,mvn,mov,mov,mvn,mvn") -@@ -8255,7 +8936,7 @@ - (match_operand 1 "" "")) - (use (match_operand 2 "" "")) - (clobber (reg:SI LR_REGNUM))] -- "TARGET_ARM && arm_arch5" -+ "TARGET_ARM && arm_arch5 && !SIBLING_CALL_P (insn)" - "blx%?\\t%0" - [(set_attr "type" "call")] - ) -@@ -8265,7 +8946,7 @@ - (match_operand 1 "" "")) - (use (match_operand 2 "" "")) - (clobber (reg:SI LR_REGNUM))] -- "TARGET_ARM && !arm_arch5" -+ "TARGET_ARM && !arm_arch5 && !SIBLING_CALL_P (insn)" - "* - return output_call (operands); - " -@@ -8284,7 +8965,7 @@ - (match_operand 1 "" "")) - (use (match_operand 2 "" "")) - (clobber (reg:SI LR_REGNUM))] -- "TARGET_ARM && !arm_arch5" -+ "TARGET_ARM && !arm_arch5 && !SIBLING_CALL_P (insn)" - "* - return output_call_mem (operands); - " -@@ -8297,7 +8978,7 @@ - (match_operand 1 "" "")) - (use (match_operand 2 "" "")) - (clobber (reg:SI LR_REGNUM))] -- "TARGET_THUMB1 && arm_arch5" -+ "TARGET_THUMB1 && arm_arch5 && !SIBLING_CALL_P (insn)" - "blx\\t%0" - [(set_attr "length" "2") - (set_attr "type" "call")] -@@ -8308,7 +8989,7 @@ - (match_operand 1 "" "")) - (use (match_operand 2 "" "")) - (clobber (reg:SI LR_REGNUM))] -- "TARGET_THUMB1 && !arm_arch5" -+ "TARGET_THUMB1 && !arm_arch5 && !SIBLING_CALL_P (insn)" - "* - { - if (!TARGET_CALLER_INTERWORKING) -@@ -8367,7 +9048,7 @@ - (match_operand 2 "" ""))) - (use (match_operand 3 "" "")) - (clobber (reg:SI LR_REGNUM))] -- "TARGET_ARM && arm_arch5" -+ "TARGET_ARM && arm_arch5 && !SIBLING_CALL_P (insn)" - "blx%?\\t%1" - [(set_attr "type" "call")] - ) -@@ -8378,7 +9059,7 @@ - (match_operand 2 "" ""))) - (use (match_operand 3 "" "")) - (clobber (reg:SI LR_REGNUM))] -- "TARGET_ARM && !arm_arch5" -+ "TARGET_ARM && !arm_arch5 && !SIBLING_CALL_P (insn)" - "* - return output_call (&operands[1]); - " -@@ -8394,7 +9075,8 @@ - (match_operand 2 "" ""))) - (use (match_operand 3 "" "")) - (clobber (reg:SI LR_REGNUM))] -- "TARGET_ARM && !arm_arch5 && (!CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))" -+ "TARGET_ARM && !arm_arch5 && (!CONSTANT_ADDRESS_P (XEXP (operands[1], 0))) -+ && !SIBLING_CALL_P (insn)" - "* - return output_call_mem (&operands[1]); - " -@@ -8444,6 +9126,7 @@ - (use (match_operand 2 "" "")) - (clobber (reg:SI LR_REGNUM))] - "TARGET_32BIT -+ && !SIBLING_CALL_P (insn) - && (GET_CODE (operands[0]) == SYMBOL_REF) - && !arm_is_long_call_p (SYMBOL_REF_DECL (operands[0]))" - "* -@@ -8460,6 +9143,7 @@ - (use (match_operand 3 "" "")) - (clobber (reg:SI LR_REGNUM))] - "TARGET_32BIT -+ && !SIBLING_CALL_P (insn) - && (GET_CODE (operands[1]) == SYMBOL_REF) - && !arm_is_long_call_p (SYMBOL_REF_DECL (operands[1]))" - "* -@@ -8505,6 +9189,10 @@ - "TARGET_32BIT" - " - { -+ if (!REG_P (XEXP (operands[0], 0)) -+ && (GET_CODE (XEXP (operands[0], 0)) != SYMBOL_REF)) -+ XEXP (operands[0], 0) = force_reg (SImode, XEXP (operands[0], 0)); -+ - if (operands[2] == NULL_RTX) - operands[2] = const0_rtx; - }" -@@ -8519,47 +9207,67 @@ - "TARGET_32BIT" - " - { -+ if (!REG_P (XEXP (operands[1], 0)) && -+ (GET_CODE (XEXP (operands[1],0)) != SYMBOL_REF)) -+ XEXP (operands[1], 0) = force_reg (SImode, XEXP (operands[1], 0)); -+ - if (operands[3] == NULL_RTX) - operands[3] = const0_rtx; - }" - ) - - (define_insn "*sibcall_insn" -- [(call (mem:SI (match_operand:SI 0 "" "X")) -+ [(call (mem:SI (match_operand:SI 0 "call_insn_operand" "Cs,Ss")) - (match_operand 1 "" "")) - (return) - (use (match_operand 2 "" ""))] -- "TARGET_32BIT && GET_CODE (operands[0]) == SYMBOL_REF" -+ "TARGET_32BIT && SIBLING_CALL_P (insn)" - "* -- return NEED_PLT_RELOC ? \"b%?\\t%a0(PLT)\" : \"b%?\\t%a0\"; -+ if (which_alternative == 1) -+ return NEED_PLT_RELOC ? \"b%?\\t%a0(PLT)\" : \"b%?\\t%a0\"; -+ else -+ { -+ if (arm_arch5 || arm_arch4t) -+ return \" bx\\t%0\\t%@ indirect register sibling call\"; -+ else -+ return \"mov%?\\t%|pc, %0\\t%@ indirect register sibling call\"; -+ } - " - [(set_attr "type" "call")] - ) - - (define_insn "*sibcall_value_insn" -- [(set (match_operand 0 "" "") -- (call (mem:SI (match_operand:SI 1 "" "X")) -+ [(set (match_operand 0 "s_register_operand" "") -+ (call (mem:SI (match_operand:SI 1 "call_insn_operand" "Cs,Ss")) - (match_operand 2 "" ""))) - (return) - (use (match_operand 3 "" ""))] -- "TARGET_32BIT && GET_CODE (operands[1]) == SYMBOL_REF" -+ "TARGET_32BIT && SIBLING_CALL_P (insn)" - "* -- return NEED_PLT_RELOC ? \"b%?\\t%a1(PLT)\" : \"b%?\\t%a1\"; -+ if (which_alternative == 1) -+ return NEED_PLT_RELOC ? \"b%?\\t%a1(PLT)\" : \"b%?\\t%a1\"; -+ else -+ { -+ if (arm_arch5 || arm_arch4t) -+ return \"bx\\t%1\"; -+ else -+ return \"mov%?\\t%|pc, %1\\t@ indirect sibling call \"; -+ } - " - [(set_attr "type" "call")] - ) - --(define_expand "return" -- [(return)] -+(define_expand "<return_str>return" -+ [(returns)] - "(TARGET_ARM || (TARGET_THUMB2 - && ARM_FUNC_TYPE (arm_current_func_type ()) == ARM_FT_NORMAL - && !IS_STACKALIGN (arm_current_func_type ()))) -- && USE_RETURN_INSN (FALSE)" -+ <return_cond_false>" - " - { - if (TARGET_THUMB2) - { -- thumb2_expand_return (); -+ thumb2_expand_return (<return_simple_p>); - DONE; - } - } -@@ -8584,13 +9292,13 @@ - (set_attr "predicable" "yes")] - ) - --(define_insn "*cond_return" -+(define_insn "*cond_<return_str>return" - [(set (pc) - (if_then_else (match_operator 0 "arm_comparison_operator" - [(match_operand 1 "cc_register" "") (const_int 0)]) -- (return) -+ (returns) - (pc)))] -- "TARGET_ARM && USE_RETURN_INSN (TRUE)" -+ "TARGET_ARM <return_cond_true>" - "* - { - if (arm_ccfsm_state == 2) -@@ -8598,20 +9306,21 @@ - arm_ccfsm_state += 2; - return \"\"; - } -- return output_return_instruction (operands[0], true, false, false); -+ return output_return_instruction (operands[0], true, false, -+ <return_simple_p>); - }" - [(set_attr "conds" "use") - (set_attr "length" "12") - (set_attr "type" "load1")] - ) - --(define_insn "*cond_return_inverted" -+(define_insn "*cond_<return_str>return_inverted" - [(set (pc) - (if_then_else (match_operator 0 "arm_comparison_operator" - [(match_operand 1 "cc_register" "") (const_int 0)]) - (pc) -- (return)))] -- "TARGET_ARM && USE_RETURN_INSN (TRUE)" -+ (returns)))] -+ "TARGET_ARM <return_cond_true>" - "* - { - if (arm_ccfsm_state == 2) -@@ -8619,7 +9328,8 @@ - arm_ccfsm_state += 2; - return \"\"; - } -- return output_return_instruction (operands[0], true, true, false); -+ return output_return_instruction (operands[0], true, true, -+ <return_simple_p>); - }" - [(set_attr "conds" "use") - (set_attr "length" "12") -@@ -9095,27 +9805,64 @@ +@@ -9095,27 +9787,64 @@ (set_attr "type" "alu_shift,alu_shift_reg")]) @@ -22092,7 +23038,7 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "conds" "use") (set_attr "length" "4,8")] ) -@@ -9822,24 +10569,75 @@ +@@ -9822,24 +10551,75 @@ "") ;; ??? The conditional patterns above need checking for Thumb-2 usefulness @@ -22178,7 +23124,15 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ [(set_attr "conds" "clob") (set_attr "length" "12")] ) -@@ -11626,6 +12424,9 @@ +@@ -11280,6 +12060,7 @@ + (const_int 0)])] + "TARGET_32BIT" + "" ++[(set_attr "predicated" "yes")] + ) + + (define_insn "force_register_use" +@@ -11626,6 +12407,9 @@ (set_attr "predicable" "yes")]) @@ -22247,7 +23201,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ "__builtin_neon_poly16", "poly", 16, 4; --- a/src/libobjc/ChangeLog.linaro +++ b/src/libobjc/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -22257,7 +23215,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libgfortran/ChangeLog.linaro +++ b/src/libgfortran/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -22267,7 +23229,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libada/ChangeLog.linaro +++ b/src/libada/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -22277,7 +23243,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libffi/ChangeLog.linaro +++ b/src/libffi/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -22287,7 +23257,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libssp/ChangeLog.linaro +++ b/src/libssp/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -22297,7 +23271,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libcpp/ChangeLog.linaro +++ b/src/libcpp/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -22307,7 +23285,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/libcpp/po/ChangeLog.linaro +++ b/src/libcpp/po/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. @@ -22317,7 +23299,11 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch@199609 \ + * GCC Linaro 4.8-2013.04 released. --- a/src/fixincludes/ChangeLog.linaro +++ b/src/fixincludes/ChangeLog.linaro -@@ -0,0 +1,7 @@ +@@ -0,0 +1,11 @@ ++2013-06-11 Rob Savoye <rob.savoye@linaro.org> ++ ++ GCC Linaro gcc-linaro-4.8-2013.06 released. ++ +2013-05-14 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> + + GCC Linaro 4.8-2013.05 released. |